作者:madneal

GShark 作為一款開源的敏感信息監測工具其實差不多維護也有兩年多的時間。這款產品其實筆者在自己的公司或者平常都在使用,也通過這個工具發現多多起內部的信息泄露事件以及外部的一些的信息泄露事件。其實這種類似的開源工具數不勝數,大家的核心功能其實就是監控 Github 上面的信息,但是筆者要想把這種產品做得更好一點,就要從功能性、易用性角度來做進一步拓展。最近,對 GShark 做了較大的重構,前后端都完成了比較大的重構,之前老的版本也有寫過文章介紹,所以關于這個工具的起源就不多介紹了,主要對這次重構和新的架構做介紹。

架構

目前 GShark 已經是一個前后端分離的項目,之前因為前端通過后端模板直接渲染的,所以在前端的功能性以及美觀性都會差很多。新的重構是基于 gin-vue-admin,技術棧是后端通過 gin 實現,前端通過 vue-elemment 來實現。

所以架構主要就分為前端和后端兩個部分,而后端則分為 web 服務以及敏感信息的掃描服務。新的架構具有以下特點:

  • 細粒度的權限控制,更好的安全性,包括菜單的權限設置以及 API 的權限設置
  • 豐富的前端功能,CRUD 更簡單
  • 搜索源和之前保持一致,支持 github, gitlab 以及 searchcode

部署

之前就有想使用 GShark 的同學來和我反映,其實之前的編譯就已經很簡單了。但是因為有些人不太熟悉 go,所以覺得編譯還是有一些問題。這一次,筆者專門寫了一個腳本來發布三個操作系統下的工具包,所以直接使用即可,開箱即用,即使你不安裝 go 也無所謂。

rm -rf ./releases/*
cd web
npm run build
cd ../

# build for mac
cd server
GOOS=darwin GOARCH=amd64 go build 
cd ../releases
mkdir gshark_darwin_amd64
cd gshark_darwin_amd64
mv ../../server/gshark .
cp -rf ../../server/resource .
cp ../../server/config-temp.yaml config.yaml
cd ../../
cp -rf ./web/dist ./releases/gshark_darwin_amd64
7z a -r ./releases/gshark_darwin_amd64.zip ./releases/gshark_darwin_amd64/

# build for windows
cd server
GOOS=windows GOARCH=amd64 go build
cd ../releases
mkdir gshark_windows_amd64
cd gshark_windows_amd64
mv ../../server/gshark.exe .
cp -rf ../../server/resource .
cp ../../server/config-temp.yaml config.yaml
cd ../../
cp -rf ./web/dist ./releases/gshark_windows_amd64
7z a -r ./releases/gshark_windows_amd64.zip ./releases/gshark_windows_amd64/

# build for linux
cd server
GOOS=linux GOARCH=amd64 go build -o gshark
cd ../releases
mkdir gshark_linux_amd64
cd gshark_linux_amd64
mv ../../server/gshark .
cp -rf ../../server/resource .
cp ../../server/config-temp.yaml config.yaml
cd ../../
cp -rf ./web/dist ./releases/gshark_linux_amd64
7z a -r ./releases/gshark_linux_amd64.zip ./releases/gshark_linux_amd64


rm -rf ./releases/gshark*/

這個是 build 的腳本,主要是實現跨平臺的編譯并且將前端文件夾打包進去,然后拿到這個安裝包解壓即可使用。目前 GShark 的發布應該只需要兩個前提條件:

  • nginx (其實這個不需要也可以,主要是為了將前端文件發布)
  • mysql(目前僅支持 mysql)

發布步驟

Step 1:

下載壓縮包,然后將壓縮包解壓。

Step 2:

修改二進制文件的權限,以 ghsark_darwin_amd64為例,解壓后修改二進制文件權限 chmod +x gshark,然后啟動服務 ./gshark web

Step 3:

將前端文件發布到 nginx 的根目錄下,就是將壓縮包內的 dist 文件夾的文件拷貝到 nginx 根目錄下,另外為了反向代理后端服務還需要修改一下 nginx 的配置,加入以下配置:

location /api/ {
proxy_set_header Host $http_host;
proxy_set_header  X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8888;
}

這樣啟動完 nginx 后,整個發布過程就完成了,關于整個發布流程,筆者也在B站上發布了一個教學視頻,如果感興趣的還可以再去看看。

使用

如果其實之前使用過 GShark 的用戶,對于功能的使用應該有多了解,這里著重介紹一些增加的功能。在上面的發布完成之后,第一次進入應用 http://localhost:8080,會需要初始化數據庫,只要輸入數據庫用戶名、密碼以及數據庫名即可。進入系統,首先是服務器運行狀態的監控界面。系統主要分為幾個菜單,當然有一些可能還是有冗余,后續可能會考慮刪除掉,其實核心功能主要就是搜索結果、管理、以及超級管理員菜單。

server

和之前一樣,如果需要開啟 scan 服務,那么首先需要添加 Github 或者 Gitlab 的 token,這個可以在 token管理菜單下進行添加。另外也需要根據自己的需求在規則管理里添加規則:

rule.png

當然你也可以配置過濾規則,主要是文件夾后綴的過濾,以及選擇是否搜索 fork 的代碼倉庫。另外值得講的就是角色管理,通過角色管理可以創建任意角色,每種角色對應的菜單權限或者 API 權限都可以自由設置

role.gif

關于這個系統的整體介紹也可看筆者在B站發布的這個視頻

總結

目前基于新的框架做的重構對于前端方面說可以說是做了非常大的改善,不管是在功能性上亦或是美觀性都強了不少。另外,由于完善的權限控制,這也對于系統的控制性的加強也有幫助。同時,由于技術棧的基礎,后續開發也會更加的便捷。后續的計劃可能是增加更多的搜索源并且修復現在存在的一些小 BUG 吧。

GShark 是 404Team 星鏈計劃2.0中的一環,如果對 GShark 有任何疑問又或是想要找小伙伴交流,可以參考星鏈計劃的加群方式。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1560/