Raptor(猛禽)是一款基于WEB界面的github源代碼掃描器。你只需要給它一個(gè)Github repository的URL地址,它就能進(jìn)行自動(dòng)掃描。
簡(jiǎn)單介紹
你也可以在Raptor設(shè)置WEB監(jiān)控機(jī)制,在每次進(jìn)行提交或者合并分支時(shí),它會(huì)收到消息然后進(jìn)行自動(dòng)化掃描。這些掃描工作是異步進(jìn)行的,而且只有啟動(dòng)掃描的用戶自己才能看到掃描結(jié)果。
Raptor的一些特性:
插件體系結(jié)構(gòu)(新加入的插件能直接使用+生成統(tǒng)一報(bào)告)
WEB服務(wù)可以定時(shí)自動(dòng)化運(yùn)行(不需要去UI界面操作)
為新的漏洞或者編程語言,進(jìn)行創(chuàng)建/編輯/刪除簽名的操作
筆者聲明一下,這個(gè)項(xiàng)目是為了幫助社區(qū)和初創(chuàng)企業(yè)進(jìn)行代碼安全檢測(cè),可能不會(huì)有商業(yè)產(chǎn)品的那樣的質(zhì)量保證。此外,這個(gè)工具只是為了給代碼審計(jì)和研發(fā)人員提供發(fā)現(xiàn)漏洞的切入點(diǎn),所以請(qǐng)不要盲目信任工具輸出的內(nèi)容。當(dāng)然,如果你將它加入CI/CD(持續(xù)集成和持續(xù)交付)的話,那應(yīng)該會(huì)不錯(cuò)的。
在這里Raptor集成了一些插件。大家注意,為了兼容本框架,下面不少的工具/模塊/庫都是被改過的:
MozillaScanJS– 掃描JavaScript (主要是客戶端的Node.JS等等, 未來會(huì)支持Chrome和Firefox插件)
Brakeman- 掃描Ruby Rails
RIPS- 掃描PHP
Manitree–掃描 AndroidManifest.xml等等
規(guī)則包:
ActionScript – 掃描Flash/Flex(ActionScript 2.0 &3.0)源
FindSecurityBugs(只含規(guī)則) –掃描Java (J2EE, JSP, Android, Scala, Groovy等等)
gitrob– 掃描敏感數(shù)據(jù)的泄露(包含證書/配置/備份/私密設(shè)置的信息)
安裝步驟
筆者安裝時(shí),在Ubuntu 14.04 x64 LAMP環(huán)境下測(cè)試通過,安裝視頻在這里。
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
使用方法
使用視頻在這里。
cd raptor-master
sudo sh start.sh #starts the backendweb-service
然后你就可以訪問本地的WEB服務(wù)了:
http://localhost/raptor/
登陸
你可以用你在github服務(wù)器上注冊(cè)的用戶名來登陸,密碼任意輸入即可(但在查看掃描結(jié)果的時(shí)候,需要用到相應(yīng)的用戶名)。
比如,如果你在github.com上注冊(cè)了賬戶foobar,你就需要用foobar這個(gè)賬戶名去掃描github.com上面的repos。
但是,如果你在私人的github服務(wù)器上注冊(cè)了foobar_corp賬戶,比如:
https://github.corp.company.com/
在這時(shí),你就需要使用賬戶foobar_corp,去掃描github.corp.company.com服務(wù)器上的repos。
提醒一下大家,現(xiàn)在沒有在demo版本中搞數(shù)據(jù)庫,所以現(xiàn)在密碼驗(yàn)證的地方可以隨意輸入。
規(guī)則編輯器
你可以使用系統(tǒng)自帶的輕量級(jí)GUI規(guī)則編輯器,用它來加入新的規(guī)則。當(dāng)然啦,你也可以使用其他文本編輯器,因?yàn)橐?guī)則包文件只是普通的JSON文件。操作時(shí)只需要打開backend/rules下面的規(guī)則包,然后將修改/新增后的規(guī)則,保存在backend/rules目錄下面即可。簡(jiǎn)單來說,你需要做的只有少量的編輯工作。注意,將新的規(guī)則包的文件名加入到這里,這里不要帶上.rulepack的后綴,重啟服務(wù)器后就大功告成啦。
你可以通過這里的URL地址直接訪問規(guī)則編輯器:
http://localhost/raptor/editrules.php
添加規(guī)則
ignore_list.rulepack:
你可以添加一些針對(duì)目錄名/文件名的正則匹配,避免raptor去掃一些無用的文件如jquery.min.js,或者去深入掃描/test/這樣的目錄。在“插件”選項(xiàng)里,規(guī)則插件都放在rules目錄下。Issue區(qū)域是規(guī)則包文件里提到的issue的ID: Example#1, Example#2。match_type區(qū)域的值可以是regex/start/end三個(gè)選項(xiàng),value區(qū)域的值是為了配合match_type區(qū)域而填寫的字符串,這里需要進(jìn)行Base64編碼以防出現(xiàn)JSON syntax語法錯(cuò)誤。解釋一下,match_type中的regex是基于正則的匹配,start會(huì)匹配字符串片段開頭,end會(huì)匹配字符串片段結(jié)尾。
這是在掃描器掃描完issue后進(jìn)行的,它會(huì)依次遍歷發(fā)現(xiàn)的issue,然后去除其中(ignore_list.rulepack)里面匹配到的內(nèi)容。
規(guī)則實(shí)例:
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories":[
"/node_modules/",
"/test/"
],
"plugins": [
{
"name":"common", <----- Name of the Plugin
"issue":"HARD_CRED1", <----- ID of the issue
"patterns": [
{
"match_type": "start", <----- Match type can be either"regex", "start" or "end"
"value": "foreach" <----- The actual string tomatch. Base64 Encode this pattern if match_type is "regex"
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
your_rule_name.rulepack:
你自己可能也會(huì)創(chuàng)建一個(gè)新的規(guī)則包(rulepack)/掃描插件,然后將其加入掃描器框架。那么,下面筆者就簡(jiǎn)單介紹一下該規(guī)則包的JSON格式。
{
"plugin_type":"plugin_name", <-- Give ita name (any string)
"file_types":[
".java", <-- Add as many file extensions, you would want the scanner to pickwhile scanning
".js"
],
"rules": [
{
"id":"HARD_CRED1", <-- Aunique IssueID, be creative.
"severity": "High", <-- This can be High, Medium or Low.This would accordingly show up in the graphs in UI.
"title":"Title of the Issue", <--The title of the issue.
"description": "This text here shall be reflected in theUI as description of the issue.", <-- The description of the issue, this is optional.
"remediation": "The text here shall be reflected in theUI as the steps to remediate the issue", <-- The remediation of the issue, this is optional.
"link":"Any URL that has more resources about the issue.", <-- URL of the issue. This is optional
"example_insecure": "Put the insecure version of the codesnippet for learning purpose.", <-- This is optional
"example_secure": "Put the secure version of the codesnippet for learning purpose.", <-- This is optional
"platform_version": "all", <-- Leave it like that
"enabled":"true", <-- Thisvalue enables or disables the rule during the scan. It can be either"true" or "false".
"logic":"Explain the logic behind this rule for future updation orcustomization", <-- This isoptional
"signature": "base64encode(regexp)" <-- Write the Regular Expression of yourpattern and then base64encode it to put it here.
}
]
}
如果你想要更好地利用這個(gè)掃描器,并不僅僅將其作為一個(gè)正則匹配器,你可以寫一個(gè)像這樣的簡(jiǎn)單掃描插件,在這里整合腳本,并腳本加入規(guī)則插件列表中。我想,這對(duì)那些有著python基礎(chǔ)的人是非常簡(jiǎn)單的。