為了提高安全服務項目的檢測效率、規範性、全面性,Tide安全團隊結合在滲透測試行業的經驗和安全開發方面的積累,開發了一款自動化滲透測試工具。
該工具使用Golang開發為CS架構,集「資產探測-服務識別-爬蟲-被動監測-漏洞掃描-POC檢測-截屏-報告」於一體,適合甲方或乙方安服團隊對目標系統進行全面的安全檢測並輸出報告。
本文主要介紹一下該工具的框架及部分實現思路。
0x02 自動化工具的必要性傳統的滲透測試主要是靠人工進行測試,但由於測試人員的經驗、能力、細緻度的差別,導致滲透測試的結果可能千差萬別。雖然測試用例能讓人工測試更規範一些,但每個人的技術擅長點不同,發現漏洞的點也會有很大差異。另外就是,滲透測試的效率相對較低,一般一套CMS系統的純黑盒測試可能都需要3-5天時間,就算這樣也沒有人敢保證自己測完之後就不會有任何漏洞,這在快節奏和高時效的今天顯得有些格格不入。
而工具掃描從一開始就有它的弊端,比如可能影響業務可用性、誤報、漏報、業務邏輯測試盲區、安全設備繞過等。但它也有先天的優勢,比如參數檢測的全面性,合適的爬蟲可以讓掃描器能檢測系統的每個參數點;比如漏洞檢測的快捷性,人工可能還需要識別框架後逐個用POC檢測,但工具可以自動化的分析-識別-檢測-報告;再比如檢測的時效性,一套系統可能30分鐘就能做完全部的掃描並完成報告,而人工的話可能才剛把環境配置好。
自動化工具能減輕測試人員繁瑣的工作,讓大家可以集中精力來測試可能的盲區以及運用其專業知識在最重要的地方,而且自動化測試工具也可以是IT合規檢測的關鍵組成部分。在項目日益激增的時候,在海量資產亟待檢測的時候,在重複性報告讓人疲於應付的時候,一款適合自己的自動化滲透測試工具就很有必要了。
0x03 市面上的自動化工具現在市面上也有很多優秀的自動化檢測工具,比如goby、xray、BurpSuite、Awvs、AppScan、Nessus等,其中goby和xray分別出自國內知名安全公司華順信安和長亭科技,也是每個滲透測試人員的必備工具。
Goby是由華順信安扛把子趙武Zwell(Pangolin、JSky、FOFA作者)打造,它的資產探測、高效掃描、漏洞利用等等都讓人感覺這不僅僅是一個工具,這是滲透的藝術,趙武大神的工具也向來都是這樣讓人臣服,當為我輩之楷模。
Xray 是長亭科技推出的免費白帽子工具平台,功能豐富調用簡單,現在也被很多人用做自己的掃描核心,而且它的企業版「洞鑒」更是讓人眼前一亮,出色的檢測能力和用markdown編寫的檢測報告也是讓人心悅誠服。
當然,完全的模仿goby和xray是我們做不到的,而且重複造輪子也不是我們要做的,我們只需要在巨人肩上找到適合自己的最佳實踐。
0x04 自動化滲透測試工具框架我們的目的就是讓滲透測試服務更快捷、標準化且易操作,因為使用它的可能是專業滲透測試人員,也可能是其他安服部門同事,或者是售前、運維等人員,安裝、部署、使用、生成報告都要儘量便捷,所以我們最後是參考了Goby的開發框架,使用了GoLang+Electron+VUE,也能較好支持Windows/MacOS/Linux多平台使用。
整體功能架構如下所示。
工具界面如下,簡單填寫,一鍵出報告。
內置了多種模板報告,下面是我司的滲透測試報告模板
工具是和Tide安全團隊的三個小夥伴一起開發,用時大約兩個月從GoLang零基礎到完成開發,期間還要忙正常的項目,非常感(mai)動(ming)。
skad:前端總設計師、API交互、報告生成等
浮生若夢:主要負責常規漏洞檢測模塊、Poc檢測模塊、日誌截圖等
天下兵馬大都督:負責爬蟲模塊、授權認證、前端設計等
重劍無鋒:我主要負責他們不屑於乾的雜活(⊙﹏⊙)
0x05 部分功能實現方法參考1. 前後端交互前端和後台的模式主要參考了Goby的實現方式,使用Electron+VUE+nodejs開發前端後打包即可。在前端啟動時也會在後台啟動服務端,服務端提供了api接口供前端調用,實現前後端交互。
在最初的方案中,我們是想用Golang自帶的GUI模塊來實現前端界面,但挑來選去沒有發現太好用的,要麼繁瑣要麼移植性差。也想過用BS架構,比如gin框架,類似gshark或者pocassist,但我們功能不多,專門弄個web有點大材小用了,所以最後還是選了Electron,而且GoBy 、中國蟻劍、FOFA客戶端等也就是基於此方案進行開發的,向大佬們學習肯定不會有錯。
參考資料:
一款漏洞驗證框架的構思:https://nosec.org/home/detail/2919.htmlVue+Electron項目:https://segmentfault.com/a/11900000384631222. 資產探測因為該工具主要定位是針對單個web資產進行掃描,所以資產的探測主要是在端口掃描、服務指紋識別、應用指紋識別等方面,也能在後面的POC檢測環節根據指紋信息來對POC進行匹配,提高精準度降低不良影響。
直接使用了go代碼來進行端口存活的發現,使用nmap的指紋庫進行服務指紋識別,這部分可以參考dismap和ServerScan。
ServerScan:https://github.com/Adminisme/ServerScandismap:https://github.com/zhzyker/dismap應用指紋識別方面現在市面上有很多開源工具,我之前也用python寫過tidefinger,現在也有很多用Golang開發的指紋識別工具,比如dismap、fscan、kscan等,我主要還是根據tidefinger的原理融合了其他幾個工具的指紋,並參考了goby的指紋識別方式。
TideFinger:https://github.com/TideSec/TideFingerdismap:https://github.com/zhzyker/dismapfscan:https://github.com/shadow1ng/fscankscan:https://github.com/lcvvvv/kscan3. 被動探測我們使用了主動掃描和被動掃描兩種方式,被動探測和xray的被動掃描基本一致,實現的流程是:導入證書(監聽https)-監聽端口-瀏覽器設置代理-監聽數據並分析,這些流程也都是在用戶無感知的情況下自動化完成的。而被動監聽到的數據用用做後面的爬蟲二次爬取、漏洞檢測、敏感字檢測等。
監聽數據主要使用goproxy庫,並對請求頭和返回包都進行了一定的修改,為了能更準確的識別到登錄數據包,還使用了機器學習+行為分析的方式進行登錄字段的分析,目前分辨登錄數據包的成功率大約90%左右。
goproxy庫:https://github.com/elazarl/goproxy對其中的RespHandlerFunc和ReqHandlerFunc進行了大量的二次開發,因為判斷成功登錄數據包是比較關鍵的一步,這是後面登錄機制驗證、弱口令猜解、用戶名枚舉、未授權訪問漏洞、cookie配置缺陷等漏洞的基礎。
其實這個過程和appscan、awvs的分析登錄數據包是基本一致的,只不過我們讓他儘量的自動化了。當然對一些較為複雜或難以識別的登錄數據包,還加入了人工輔助驗證的方式,在模擬登錄的時候會彈出一個登錄確認框輔助確認。
爬蟲是否強大也是一個掃描器的關鍵,普通的靜態爬蟲無法解析和渲染js,所以我們還使用了Go+Selenium+chromedriver來抓取一些需要渲染的框架類網站,以便更全面的爬取到頁面鏈接和參數,最初是考慮使用playwright 或者puppeteer的,但目前大部分都是python代碼實現的。靜態爬蟲主要參考了colly和幽靈珠。
Go最強大的爬蟲庫colly:https://github.com/gocolly/collycrawlergo:https://github.com/Qianlitp/crawlergo幽靈蛛爬蟲:https://github.com/henrylee2cn/pholcusGo的selenium:https://github.com/tebeka/selenium為了避免後續的漏洞檢測可能影響到業務正常使用,所以在爬蟲階段對部分敏感鏈接進行了分類,比如涉及添加、刪除、更新、註銷之類的操作,還有一些POST寫入的操作,如果用戶確認是測試環境時才會對這些鏈接進行測試。雖然這樣可能導致漏報,但最起碼不會刪除用戶的數據,之前就遇到過Awvs的登錄掃描把後台管理員賬號刪除的情況。
5. 登錄缺陷測試登錄缺陷測試主要是對登錄數據包進行一定的分析,然後根據返回包長度、返回數據、cookie變化等進行判斷,主要測試了如下測試項:用戶名猜解、密碼枚舉、驗證碼繞過測試、敏感信息明文傳輸、是否進行加密、加密算法是否為弱加密、是否存在會話定置、cookie驗證缺陷、cookie中存儲敏感信息等。
驗證碼繞過部分一方面是刪除驗證碼或者重複使用驗證碼,查看系統返回包是否一致,另一方面我們也在嘗試使用卷積神經網絡來自動識別簡單的驗證碼,不過目前成功率還不算高。
驗證碼識別可以參考以下資料:
我們團隊lmn小姐姐的大作:https://www.yuque.com/tidesec/xxae8n/ucbwtx基於Go的tensorflow:https://github.com/galeone/tfgo基於Go的圖形識別:https://github.com/tinrab/go-tensorflow-image-recognition6. 常規漏洞檢測常規漏洞的檢測主要是SQL注入漏洞、XSS漏洞、命令注入、文件包含、目錄枚舉等等漏洞,雖然常規漏洞出現的越來越少,但只要出現就會是中高危,漏測的話影響也會比較大。雖然常規漏洞看起來簡單,但真正想實現一個能接近Xray或者Awvs掃描功能的掃描器還是不太可能的。
後來我們借鑑了gryffin的方式來曲線救國,使用了Arachni來進行部分常規漏洞的檢測,對部分sql注入和xss我們自己用Go實現了一部分,本來也想用sqlmap的,但sqlmap是用python寫的,我們不想再打包個python環境,而exe版的sqlmap也不是我們想要的。Arachni是用ruby來實現的,官方也打包了各平台的版本,調用倒算方便。
在第一版完成後,目前也在模仿WASCAN來寫個自己的Go掃描器,不過因為各種原因進展一般。當然大家也可以去調用xray或者Awvs之類的進行掃描,但畢竟不是自己寫的,後續想完善或者構造數據包截圖之類的都有些不便,而且商業軟件的版權也是個繞不開的問題。
基於Go的掃描器gryffin:https://github.com/yahoo/gryffin基於Ruby的掃描器Arachni:https://github.com/Arachni/arachni基於Python的掃描器:https://github.com/FOGSEC/WAScan7. POC檢測POC檢測的重要性就不用再說了,特別是對諸如weblogic、struts、fastjson、thinkphp、shiro 等框架的高危歷史漏洞的檢測,集成各類POC然後根據指紋識別情況定向檢測,工具的高效快捷是人工檢測難以比擬的。
我們在團隊內部也一直維護着自己的POC平台,主要是根據Fscan和pocassist來進行的二次開發,Poc後續的更新就只能靠自己整理了,當然如果有錢的話可以買商業版的Poc庫,商業版的更及時高效而且節省人力。
自己整理Poc庫的話,最初的Poc可以從nuclei、xray、pocassist、Fscan等項目中得到,而且這幾個的poc格式基本一致,個別的修改一下就能通用。
Nuclei:https://github.com/projectdiscovery/nucleiXray:https://github.com/chaitin/xraypocassist:https://github.com/jweny/pocassist/fscan:https://github.com/shadow1ng/fscan8. 邏輯漏洞檢測邏輯漏洞檢測是工具檢測的硬傷,也在網上看過一些基於人工智能、大數據分析之類的檢測方法,但大都是針對特定業務或特定系統,而且需要一定的樣本數據才能對業務的邏輯漏洞進行測試。
所以目前邏輯漏洞檢測也只是針對驗證碼繞過、用戶名枚舉、未授權訪問之類的弱邏輯漏洞,主要還是根據返回數據包的不同來進行判斷,目前來看誤報不算多。
對於垂直越權,需要對不同權限的賬號分別進行請求,根據返回數據來進行判斷,但一些公共api可能存在誤報。
但對於水平越權和一些業務層面邏輯漏洞(例如0元支付),暫時沒有其他更好的實現思路。
9. 日誌及截圖滲透測試不管是人工還是工具都會有一定的風險,所以我們也比較注重日誌的留存,對所有由工具發出的流量和執行的操作都會詳細記錄,萬一出現問題可以進行溯源佐證。
另外對每個漏洞項,不管是存在問題還是測試通過的,也都會進行自動化截圖留證,部分截圖會插入到報告中。截圖功能主要使用了chromedp的網頁截屏方式。
chromedp:https://github.com/chromedp/chromedp網頁截屏:https://www.jianshu.com/p/c4451e488e6a對每個漏洞都進行了測試並自動截圖
報告是安服檢測的最重要的交付物了,我司對報告格式也要求比較嚴格,所以為了能較好的生成報告也是查了不少資料,開始本來是想用unioffice,但我們的模板有些地方沒法生成,而unioffice的代碼改起來也比較費勁,而且還不是完全開源免費。最後我們是參考unioffice的原理,自己實現了一個報告生成器,雖然笨重一些,但恰好能滿足我們的需求。
在生成word版報告後,為了方便還提供了一個pdf版本的報告,主要參考了doc2pdf-go,在windows上還有個更方便的vba轉格式的方式,可以參考以下資料。
unioffice:https://github.com/unidoc/uniofficedoc轉PDF:https://github.com/piaobocpp/doc2pdf-govba doc轉docx:https://www.cnblogs.com/owenzhou/p/10795209.htmlPDF/DOC/DOCX:https://github.com/sajari/docconv其實相比goby的「資產-指紋-漏洞-驗證-橫向」和xray的「主被動-爬蟲-web全掃描-poc檢測」,我們不管代碼還是檢測能力或者是覆蓋面都還差很多,但我們的工具也有一些「神器」難以取代的優勢。
我們對滲透、等保、合規等方面的測試項都可以根據需求自行設定,登錄機制驗證、弱口令猜解、用戶名枚舉、短信轟炸、未授權訪問漏洞、cookie配置等方面都可以進行模塊化測試。
自己實現的爬蟲,可以有效控制測試時的風險,大大降低系統管理後台登錄後掃描測試的風險。
工具使用簡單方便,不論是不懂安全的研發,測試人員,還是後期的運維人員,都可以快速上手,在不增加測試工作量的基礎上,零成本,可視化的完成項目安全測試。
漏洞截圖、日誌留存、報告輸出相對可知可控,能滿足安服團隊的日常需求。
測試時間較短,一套常規web系統在10-30分鐘左右,這樣測試人員可以節省精力去測試一些業務邏輯漏洞之類的就可以。
當然到目前為止,我們還有很多亟待解決的問題。比如:web常規漏洞掃描、poc的持續維護、邏輯漏洞的檢測、安全設備繞過、誤報漏檢、驗證碼識別準確度問題、漏洞利用鏈構造等等,距離burp、goby或者xray還有很長很長的路要走。
自動化滲透測試可能是未來發展的趨勢,但目前仍處於早期階段吧,很多問題都還沒法用人工智能的方式去實際解決。儘管暫時還無法完全替代滲透測試人員,但有很大一部分內容是完全可以取代人工並且比人工完成的更好更快的,所以才有了我們這個工具。
也許等有一天人工智能足夠成熟,自動化工具能完全代替人工了,還需要你拿着Burpsuite和Nmap測系統麼?
PS:大家就不要問源碼了,目前有些功能還在完善,暫時不會開源。部分指紋相關的代碼後續會更新到我們的知識星球——Tide安全攻防,針對知識星球用戶後續也會上線一些新的在線安全服務,敬請期待。