1. 程式人生 > >攜程安全自動化測試之路

攜程安全自動化測試之路

作者簡介:陳瑩,攜程資訊保安部安全開發工程師。2013年加入攜程,主要負責各類安全工具的研發,包括線上日誌異常分析,實時攻擊檢測, 漏洞掃描等。本文由攜程技術中心投稿,微信公號ID:ctriptech
責任編輯:孫浩峰  關注雲端計算、大資料、運維、安全  投稿信箱:[email protected]

背景

業務程式碼上線前,通常會在測試環境經過一系列的功能測試。那麼,從安全層面來說,Web應用常見的Web漏洞,如SQL注入,XSS攻擊,敏感資訊洩漏等,我們如何保證在上線前就能夠自動化發現這些業務的安全漏洞呢?本文將詳細講述攜程安全測試的自動化之路。

技術選型

市面上也有很多各種各樣的開源、商業掃描器。單就應用這一層來說,漏洞掃描器一般分為主動掃描和被動掃描兩種。

其中,主動掃描一般用於黑盒測試,其形式為提供一個URL入口地址,然後由掃描器中的爬蟲模組爬取所有連結,對GET、POST等請求進行引數變形和汙染,進行重放測試,然後依據返回資訊中的狀態碼、資料大小、資料內容關鍵字等去判斷該請求是否含有響應的漏洞。

另外一種常見的漏洞掃描方式就是被動掃描,與主動掃描相比,被動掃描並不進行大規模的爬蟲爬取行為,而是直接通過捕獲測試人員的測試請求,直接進行引數變形和汙染來測試服務端的漏洞,如果通過響應資訊能夠判斷出漏洞存在,則進行記錄管理,有人工再去進行漏洞的復現和確認。

所以我們可以發現,主動掃描與被動掃描最主要的區別為被動式掃描器不主動獲取站點連結,而是通過流量、獲取測試人員的訪問請求等手段去採集資料來源,然後進行類似的安全檢測。

除此之外,基於主動掃描的Web掃描器還有其他的不足:

1.由於資料來源來自爬蟲爬取,獨立的頁面、API介面等就無法覆蓋,存在檢測遺漏情況。

2.如果是掃描單獨的幾個站點,主動掃描是夠用的。但是在站點數量急劇增大的時候,主動掃描的效率、精準、速度都無法與被動掃描相比。

最終我們選擇基於被動掃描的形式去實現自研Web漏洞掃描器。

架構設計

基於以上自動化的安全檢測需求,由我們內部研發了Hulk專案,通過網路流量映象等方式來實現分散式的實時Web漏洞掃描系統。整個專案按模組可分為資料來源,資料處理,漏洞檢測,漏洞管理等幾大模組。

圖片描述

如圖所示,Http請求資料從資料來源傳送至Rabbitmq、Kafka等佇列。交由統計、去重、去靜態資源模組利用redis進行資料處理,處理後的unique請求存入Rabbitmq掃描佇列,等待scan engine的消費。而scan engine則全權負責引數解析和變形,利用預先設定好的規則順序進行請求重放和漏洞檢測。最終,如果Scan engine判斷出某個請求含有漏洞,則落地到MySQL中,交由Hulk的運營人員進行漏洞的確認和復現。

資料來源

資料來源主要有2種類型,即基於網路流量映象的方式和基於Http代理的方式。

基於網路流量映象的方式中,需要在辦公網到測試環境核心交換機上做流量映象,通過dpdk、pf_ring等高速抓包模組進行流量獲取,並按照五元組資訊進行TCP流重組。然後通過Http解析器,將其中Http請求的請求方法、請求地址、請求域名、請求引數等資料提取成Json格式,傳送到Kafka中。

當然,這其中還有一部分為Https的請求,需要通過rsa key解密後才能交由Http解析器正常解析。隨著Http2.0時代的來臨,大部分的Https請求在進行祕鑰交換時採用了更高安全性的Diffie-Hellman祕鑰交換演算法,我們的Https解密模組也逐漸退出歷史舞臺,只能後移流量映象模組,轉向純Http的流量捕獲。

圖片描述

基於Http代理的方式中,只需要配置代理伺服器,將測試人員的測試請求資料收集起來,然後採用同樣的模組進行去重和統計處理,結果傳送至Kafka佇列,有著與基於流量的形式同樣的處理流程。

資料處理

流量進入到訊息佇列之後,去重模組會從訊息佇列消費,計算出url、args等的MD5值,在Redis中進行去重,如果是一個已經掃描過的地址,則只記錄一條日誌到ES中;如果是一個新的URL地址,就將其具體的Http請求傳送至訊息佇列中,等待scan engine的消費。

在資料處理的時候,去重是非常重要的,這裡涉及到不同請求方法、不同的引數,任何一點不同,都可以被看重是不同的URL地址,也對應了不同的後端介面。

圖片描述

除了這些之外,針對偽靜態URL,我們也需要將/products/655554.html歸一化為/products/NNNNN.html。如上圖所示,將數字歸一化來去掉30%左右的相似URL。然後利用Redis的TTL特性,使得一段時間之前掃過的URL,可以在下一次的去重中被判斷為新URL,從而再次加入掃描佇列,等待新一輪的安全檢測。

漏洞檢測

掃描引擎從訊息佇列中讀取去重後的流量資料,使用多種不同的方式去進行漏洞掃描。

a.一般的Web漏洞配置規則來檢查,比如xss漏洞,檔案包含漏洞,敏感檔案讀取等,先替換引數,或重新構造URL,再重放,再檢查響應內容是否包含特定的資訊,以此來判斷是否存在漏洞;

b.SQL注入漏洞則使用高效的開源工具sqlmap來檢測,避免重複造輪子;

c.另外還有一些其他漏洞,比如儲存型xss,struts漏洞,SSL的漏洞,這些無法使用簡單的替換引數重放的方法,但是我們提供了外掛編寫功能,這樣可以讓運營人員寫外掛,以滿足各種需求。

但是,從Storm實時攻擊檢測系統過來的流量是不帶Cookie的,如何掃描登入後漏洞呢?我們生產URL和測試URL可以通過一種對映關係進行轉換,儲存各個測試站點的登陸資訊檔案。當讀取一個生產的URL後,去獲取它的測試地址和登入資訊,就可以去掃描它相應的測試地址了。這樣就避免了影響線上使用者。

圖片描述

掃描速度也是掃描任務的一個關鍵指標,在整個架構中,不同的模組之間是通過訊息佇列進行資料傳輸的。所以當去重模組或者掃描引擎模組處理速度不夠快,造成資料積壓時,我們可以通過增加模組例項來進行水平拓展。

漏洞管理

對於掃描結果中存在問題的URL和對應漏洞,我們會進行一個快照功能。即將當時的請求和響應包完整儲存下來,方便運營人員驗證漏洞。

圖片描述

且對於響應體內容,還可以進行一個基本的本地渲染,復現漏洞發現時的真實情況。

圖片描述

規則測試

同時,為保證規則有效性,我們還在管理控制檯中集成了規則的測試功能:

圖片描述

這樣,只需要搭建一個帶各種漏洞的測試環境, 規則運營人員就可以在這裡配置, 然後針對性地對每一個規則、外掛進行有效性測試。

總結

目前,整個專案上線穩定執行兩年多, 已發現線上高危漏洞30+,中危漏洞300+,低危漏洞 400+,為線上業務安全執行提供了強有力的保障。當然, 對於資料汙染、掃描頻率、去重邏輯、掃描型別等掃描器常見的詬病,我們後續也會一直不斷進行優化迭代。

相關推薦

安全自動化測試

作者簡介:陳瑩,攜程資訊保安部安全開發工程師。2013年加入攜程,主要負責各類安全工具的研發,包括線上日誌異常分析,實時攻擊檢測, 漏洞掃描等。本文由攜程技術中心投稿,微信公號ID:ctriptech 責任編輯:孫浩峰 關注雲端計算、大資料、運維、安全 投稿

測試賦能,騰訊WeTest探索手遊AI自動化測試

面數據 利用 ima 動畫 作者 就會 安全 嘗試 機械 作者:周大軍/孫大偉, 騰訊後臺開發 高級工程師 商業轉載請聯系騰訊WeTest獲得授權,非商業轉載請註明出處。 WeTest導讀 做好自動化測試從來不件容易的事情,更何況是手遊的自動化測試

自動化測試3-selenium3+python3環境搭建!

1、首先安裝火狐瀏覽器 有單獨文章分享怎麼安裝 2、搭建python環境 安裝python,安裝的時候把path選好,就不用自己在配置,安裝方法 有單獨文件分享 安裝好以後cmd開啟輸入python檢視是否配置好 3、安裝pip 一般python會預設帶一個,放置和

python+selenium自動化測試Day4pycharm的使用詳解

前言         在寫指令碼之前,先要找個順手的寫指令碼工具。python是一門解釋性程式語言,所以一般把寫python的工具叫直譯器。寫python指令碼的工具很多,小編這裡就不一一列舉的,只要自己用著順手就可以的,如果你還沒有選好直譯器,小編這裡推薦pychar

京喜前端自動化測試(小程式篇)

![](https://img2020.cnblogs.com/other/1992869/202007/1992869-20200716094648960-263985640.png) 作者:阿翔 如果你已經閱讀過 [《京喜前端自動化測試之路(一)》](https://mp.weixin.qq.com/

java 接口自動化測試數據請求的簡單封裝

public 事業 交互界面 參數 lencod name route cli asi 我們自己用java寫接口自動化測試框架或者做個接口自動化測試平臺的話,是需要自己進行相關的請求的,因此我們需要簡單的封裝下httpclient,我新建了一個http工具類,將

Appium移動自動化測試—基於java的iOS環境搭建

res .sh 變更 order edev curl 軟件包 comm 簡單的 本文僅供參考,同時感謝幫助我搭建環境的同事 操作系統的名稱:Mac OS X操作系統的版本:10.12.6 接下來我們開始踏上搭建Appium+java+ios之路,本文只說個大概,畢竟本機已經

Python Appium 開啟Android測試

ppp encoding dev aps 發出 cli 進行 utf8 androi 1、獲取 Android app的Activity 打開終端cmd,先cd進入到剛才下載的“新浪.apk”目錄下,然後使用aapt dump badging xx

安全架構師

隨感其實前面說過,作為一個乙方工作多年的安全人員突然到了甲方公司,也有一種憋了勁使不出來的感覺。畢竟甲方都是專門針對某個領域的。雖然我做的領域很多,但都是賣不同的產品和服務給不同的甲方。產品和服務之間又橫跨不同供應商。整理下來,我不是某個安全領域的專家,但是從跨度來說橫跨不少區域。列舉如下:1.防火墻和vpn

前端自動化測試UI Recorder(一、介紹)

而且 行為 文件上傳 語言 系統 nod clas 調用 開發 UI Recorder是一款零成本的整體自動化測試解決方案,一次自測等於多次測試,測一個瀏覽器等於測多個瀏覽器! 支持所有用戶行為: 鍵盤事件, 鼠標事件, alert, 文件上傳, 拖放, svg, sha

前端自動化測試UI RECORDER(二、PC錄制)

啟動服務 域名 run ports shadow 科學 兼容 webp htm PC錄制教程 準備工作: NodeJs環境 請自行先安裝好nodejs環境,在命令行執行node -v命令成功說明已經安裝成功 Chrome瀏覽器 JAVA環境 UI Recorder We

接口自動化測試PHPUnit-框架代碼編寫2

phpunit 自動化測試 接口測試 小強測試品牌 測試幫日記 接著上篇文章繼續代碼的講解,上次的代碼中引入了require.php,這個玩意是幹啥的呢,今天我們就來說下require.php內容如下<?php//所需要的所有引入文件都放這裏,方便統一管理,以後的php文件裏只需要引

接口自動化測試PHPUnit-完結以及源碼發放

寫代碼 blog 是我 對話 。。 amp 引導 .cn 自然 通過連續的幾篇文章一個基本的測試框架就搞定了,是不是覺得很簡單?其實寫代碼這件事情很多時候是我們自己把自己嚇到了,只要你願意去嘗試並堅持,一切都會變得自然而然。 當然我們的這個系列文章也是引導大家入門的,本框架

Android自動化測試Monkeyrunner從零開始

控制 麻煩 關於 人員 bsp android開發 直接 記錄 自動 最近由於公司在組織一個Free CoDE的項目,也就是由大家自己選擇研究方向來做一些自己感興趣的研究。由於之前我學過一點點關於android的東西,並且目前android開發方興未艾如火如荼,但自動化測試

如何規避適配風險?以《亂世王者》為例,探秘手遊兼容性測試

其中 導致 class 自動 activiti 挖掘 除了 手遊 app 歡迎大家前往雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:Lane Li,騰訊適配測試負責人、WeTest專家兼容測試負責人 由 騰訊遊戲雲 發布在雲+社區 項目背景 《亂世王者》是一款歷史架

UI自動化測試selenium(1)——selenium中的常用api

selenium api 目錄 1 對瀏覽器操作1.1 用webdriver打開一個瀏覽器1.2 最大化瀏覽器&關閉瀏覽器1.3 設置瀏覽器窗口大小1.4 打開測試頁面1.5 處理瀏覽器彈出的新窗口2 頁面元素定位3 如何對頁面元素進行操作3.1 WebElement相關方法3.2 iFram

自動化測試設置瀏覽器屬性來模擬移動設備上的H5的測試

h5自動化測試 模擬移動設備 由於測試h5的需要,需要設置頁面模擬成手機瀏覽器的屏幕大小。chrome瀏覽器自帶有個模擬器,也就是F12後開發工具欄的那個小手機號的圖標。手動點擊後可選擇手機型號來模擬。但是如果需要設置瀏覽器執行自動化腳本時去自動變成手機瀏覽器的屏幕大小是,怎麽操作了。討厭研究調試一番

接口自動化測試TestNG學習(二)

case res asi ase Suite apache .org CA sse 在maven項目的pom.xml文件中導入TestNG 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xml

Java接口自動化測試HTTPClient學習(四)

ring org pom.xml artifact 14.3 code win string TBase pom.xml 文件中dependency 1 <dependencies> 2 <dependency> 3