
Raptor 是一个基于网页(Web服务+UI)的、以 GitHub 为中心的源码漏洞扫描器——它只需提供 GitHub 仓库 URL 即可扫描仓库。你可以设置 Webhook,以确保每次提交或合并 Pull Request 时自动扫描。扫描是异步进行的,结果仅对启动扫描的用户可见。
Raptor 的部分特性:
该工具旨在帮助社区和初创公司重视安全编码。此工具可能无法与商业替代品的功能/质量相媲美,一切不作保证,请悉知。本工具目标用户为安全代码审查人员和/或具备安全编码经验的开发人员,用于在代码审计或同行评审期间发现漏洞入口点。请勿盲目信任工具的输出结果。 最佳实践是将 Raptor 接入你的 CI/CD 流水线。
0.1 beta
集成插件:
注意:以下大部分工具/模块/库已被大量修改,以便较好地集成到框架中。
可用规则包:
安装视频:YouTube 安装
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
安装视频:YouTube 使用方法
cd raptor-master
sudo sh start.sh #启动后端 Web 服务
现在将浏览器指向 Raptor 主页 (http://localhost/raptor/)
使用你在所连接的 GitHub 服务器上注册的用户名登录,密码任意(但需记住用户名以查看扫描历史)。
例如:
如果你在 https://github.com 上注册为 foobar,则在扫描 https://github.com 上的仓库时使用相同用户名。但如果你在个人/公司 GitHub(比如 https://github.corp.company.com)上注册为 foobar_corp,则在扫描 https://github.corp.company.com 上的仓库时使用该用户名。
不过,目前密码可以是任意内容,因为我们尚未在开发版本中实现数据库。
你可以使用自带的轻量级客户端规则编辑器(任何纯文本编辑器均可)添加新的/自定义规则以满足特定需求,因为规则包文件只是简单的 JSON 结构。用浏览器打开位于 'backend/rules' 的规则文件。编辑完成后,将新/修改的规则文件保存到同一目录即 'backend/rules'。接下来只需进行少量修改:初始化脚本。将新的规则包文件名(不含 '.rulepack' 扩展名)追加到该数组,然后重启后端服务器即可。一切就绪!👍
你可以在这里访问:规则编辑器 (http://localhost/raptor/editrules.php)
添加需要排除扫描的文件名或目录名模式。这在忽略已知文件(如 jquery.min.js 等)或整个 /test/ 目录时很有用。例如下面的示例内容中,jquery 表示 jquery,并且是大小写敏感的,请注意。在 plugins 部分,插件的 name 是 rules 目录下规则包文件的名称(不含 ".rulepack" 扩展名),参见 rules/ 目录。issue 字段是规则包文件中每个规则的 ID:示例 #1,示例 #2。match_type 字段的值可以是 regex、start 或 end。value 字段是当 match_type 为 start 或 end 时需匹配的具体字符串。若 为 ,则 应包含原始 RegEx 模式,且需要 Base64 编码以避免 JSON 语法转义问题。 是基于正则表达式的匹配, 将匹配代码片段开头, 将匹配代码片段结尾。
它的工作方式是:当扫描器完成扫描后,会遍历所有找到的问题,并移除那些匹配 ignore_list.rulepack 文件中每个插件模式(基于匹配类型)的问题。
(以下为示例内容)
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories": [
"/node_modules/",
"/test/"
],
"plugins": [
{
"name": "common", <----- 插件名称
"issue": "HARD_CRED1", <----- 问题 ID
"patterns": [
{
"match_type": "start", <----- 匹配类型,可以是 "regex"、"start" 或 "end"
"value": "foreach" <----- 实际匹配的字符串。若 match_type 为 "regex",则需对该模式进行 Base64 编码
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
你可以创建全新的规则包并添加到扫描器,也可以编写自己的扫描器插件并集成到框架中。 示例规则包文件是一个非常简单的 JSON 结构。
{
"plugin_type": "plugin_name", <-- 为插件命名(任意字符串)
"file_types": [
".java", <-- 添加你希望扫描器在扫描时处理的文件扩展名,可多个
".js"
],
"rules": [
{
"id": "HARD_CRED1", <-- 唯一的问题 ID,请发挥创意
"severity": "High", <-- 可为 High、Medium 或 Low。这将在 UI 的图表中相应显示
"title": "问题标题", <-- 问题标题
"description": "此处的文本将在 UI 中显示为问题描述。", <-- 问题描述,可选
"remediation": "此处的文本将在 UI 中显示为修复步骤", <-- 修复措施,可选
"link": "关于该问题的更多资源的任意 URL。", <-- 问题 URL,可选
"example_insecure": "放置不安全代码片段,用于学习目的。", <-- 可选
"example_secure": "放置安全代码片段,用于学习目的。", <-- 可选
"platform_version": "all", <-- 保持不变
"enabled": "true", <-- 该值启用或禁用扫描时的规则。可为 "true" 或 "false"。
"logic": "解释该规则背后的逻辑,以便未来更新或定制", <-- 可选
"signature": "base64encode(regexp)" <-- 编写你的模式的正则表达式,然后 Base64 编码后放在此处
}
]
}
如果你希望获得更多控制权,或为扫描器添加更多智能(而非简单的 RegExp 搜索),你可以编写一个快速的扫描器插件,例如这个,然后将脚本集成到此处,并将脚本名称追加到此处。仅此而已。对于具备基本 Python 脚本技能的人来说,这非常简单。
你可以使用 Raptor 扫描组织的私有和公共 GitHub 实例,只需在此处和此处指定正确的服务器端点。











想要贡献?太棒了! 如果你有想法,欢迎联系我,或者随意 fork 并改进。😊
GNU GPL v2.0
免费软件,必须的!
match_typeregexvalueregexstartend