Arachni/arachni

GitHub: Arachni/arachni

Arachni 是一款模块化、高性能的 Ruby Web 应用安全扫描框架,能够自动检测 Web 应用中的各类安全漏洞并支持现代 Web 技术栈。

Stars: 4010 | Forks: 786

# 注意事项 Arachni 已过时,请尝试其下一代继任者 [Ecsypno](https://www.ecsypno.com/) [代号 SCNR](https://ecsypno.com/pages/codename-scnr)! # Arachni - Web 应用程序安全扫描框架
版本 1.6.1.3
主页 http://arachni-scanner.com
博客 http://arachni-scanner.com/blog
Github http://github.com/Arachni/arachni
文档 https://github.com/Arachni/arachni/wiki
代码文档 http://rubydoc.info/github/Arachni/arachni
支持 http://support.arachni-scanner.com
作者 Tasos Laskos (@Zap0tek)
Twitter @ArachniScanner
版权 2010-2022 Ecsypno
许可证 Arachni 公共源代码许可证 v1.0 - (参见 LICENSE 文件)
![Arachni logo](http://www.arachni-scanner.com/large-logo.png) ## 概要 Arachni 是一个功能丰富、模块化、高性能的 Ruby 框架,旨在 帮助渗透测试人员和管理员评估 Web 应用程序的安全性。 它非常智能,通过在扫描过程中监控和学习 Web 应用程序的 行为来进行自我训练,并能够利用多种因素进行元分析, 从而正确评估结果的可信度并智能地识别(或避免)误报。 与其他扫描器不同,它考虑了 Web 应用程序的动态特性, 可以检测在遍历 Web 应用程序圈复杂度路径时引起的变化, 并能够相应地进行自我调整。这样,那些非人类难以检测的 攻击/输入向量就可以被无缝处理。 此外,由于其集成的浏览器环境,它还可以审计和检查 客户端代码,并支持大量使用 JavaScript、HTML5、DOM 操作和 AJAX 等 技术的复杂 Web 应用程序。 最后,它的多功能性足以覆盖大量用例,从 简单的命令行扫描工具,到全球高性能扫描器网格, 再到允许脚本化审计的 Ruby 库,以及多用户多扫描 Web 协作平台。 **注意**:尽管 Arachni 主要针对 Web 应用程序安全, 但通过添加自定义组件,它可以轻松用于通用抓取、数据挖掘等任务。 ### Arachni 提供: #### 稳定、高效、高性能的框架 `检查`、`报告`和`插件`开发者可以轻松快速地创建和 部署他们的组件,且受到最少的限制, 同时获得必要的基础设施支持以实现其目标。 此外,鼓励他们在一个统一的框架下充分利用 Ruby 语言, 这将提高他们的生产力,而不会限制他们 或使他们的任务复杂化。 而且,该框架可以作为任何其他 Ruby 库使用,从而 开发全新的扫描器,或帮助您创建高度定制的 扫描/审计场景和/或脚本化扫描。 #### 简单性 尽管框架的某些部分相当复杂,但您永远不必直接处理它们。 从用户或组件开发者的角度来看,一切都很简单 且直观,同时提供强大的功能、性能和灵活性。 从简单的命令行扫描工具到直观且用户友好的 Web 界面和协作平台,Arachni 遵循最小惊讶原则, 为您提供大量的反馈和指导。 #### 简而言之 Arachni 旨在自动检测 Web 应用程序中的安全问题。 它只需要目标网站的 URL,过一会儿就会 向您展示其发现。 ## 功能特性 ### 通用特性 - Cookie-jar/cookie-string 支持。 - 自定义 Header 支持。 - 具有细粒度选项的 SSL 支持。 - 用户代理伪装。 - 支持 SOCKS4、SOCKS4A、SOCKS5、HTTP/1.1 和 HTTP/1.0 的代理。 - 代理认证。 - 站点认证(基于 SSL、基于表单、Cookie-Jar、Basic-Digest、NTLMv1、Kerberos 等)。 - 自动登出检测和扫描期间的重新登录(当初始 登录是通过 `autologin`、`login_script` 或 `proxy` 插件执行时)。 - 自定义 404 页面检测。 - UI 抽象: - [命令行界面](https://github.com/Arachni/arachni/wiki/Executables)。 - [Web 用户界面](https://github.com/Arachni/arachni-ui-web)。 - 暂停/恢复功能。 - 休眠支持 -- 挂起到磁盘并从磁盘恢复。 - 高性能异步 HTTP 请求。 - 具有可调整的并发性。 - 具有自动检测服务器健康状况并自动调整其并发性的能力。 - 支持自定义默认输入值,使用成对的模式(用于匹配输入名称)和用于填充匹配输入的值。 ### 集成浏览器环境 Arachni 包含一个集成的真实浏览器环境,以便为 使用 HTML5、JavaScript、DOM 操作、AJAX 等 技术的现代 Web 应用程序提供足够的覆盖范围。 除了监控普通的 DOM 和 JavaScript 环境外, Arachni 的浏览器还挂钩到流行的框架中,使记录的数据 更易于理解: - [JQuery](http://jquery.com/) - [AngularJS](https://angularjs.org/) - 更多即将推出... 本质上,这将 Arachni 变成了一个 DOM 和 JavaScript 调试器,使其能够 监控 DOM 事件和 JavaScript 数据及执行流。因此,系统 不仅可以触发和识别基于 DOM 的问题,而且还会附带 大量关于当时页面状态的信息。 相关信息包括: - 页面 DOM,作为 HTML 代码。 - 包含将页面状态恢复到记录时状态所需的 DOM 转换列表。 - 原始 DOM(即在导致页面被记录的操作之前), 作为 HTML 代码。 - 包含 DOM 转换列表。 - 数据流接收点 -- 每个接收点是一个接收了受污染参数的 JS 方法。 - 方法的父对象(例如:`DOMWindow`)。 - 方法签名(例如:`decodeURIComponent()`)。 - 参数列表。 - 包含在所包含对象中递归定位的已识别污点。 - 方法源代码。 - JS 堆栈跟踪。 - 执行流接收点 -- 每个接收点是一个成功执行的 JS 负载, 由安全检查注入。 - 包含 JS 堆栈跟踪。 - JavaScript 堆栈跟踪包括: - 方法名称。 - 方法位置。 - 方法源代码。 - 参数列表。 本质上,您可以访问与您喜欢的调试器(例如 FireBug)提供的 大致相同的信息,就像您设置了断点 在正确的时间进行以识别问题一样。 #### 浏览器集群 浏览器集群协调资源的浏览器分析,并 允许系统以高性能方式执行通常相当耗时的操作。 配置选项包括: - 可调整的池大小,即要利用的浏览器工作者数量。 - 每个作业的超时时间。 - 以作业数计算的工作者 TTL -- 超过 TTL 的工作者将使其浏览器 进程重新启动。 - 禁用加载图像的能力。 - 可调整的屏幕宽度和高度。 - 可用于分析响应式和移动应用程序。 - 等待特定元素在页面中出现的能力。 - 可配置的本地存储数据。 ### 覆盖范围 由于其集成的浏览器环境,该系统可以为现代 Web 应用程序提供 极大的覆盖范围。这使其能够像人类一样与 大量使用客户端代码(如 JavaScript)的复杂应用程序进行交互。 此外,它还知道应用程序被编程为处理哪些浏览器状态更改, 并能够以编程方式触发它们, 以便为所有可能的场景提供覆盖。 通过检查所有可能的页面及其状态(在使用客户端代码时), Arachni 能够提取和审计以下元素及其输入: - 表单 - 包括那些由于 DOM 事件而需要通过真实浏览器交互的表单。 - 用户界面表单 - 不属于 HTML `
` 元素但通过 JS 代码关联的 输入和按钮组。 - 用户界面输入 - 具有关联 DOM 事件的孤立 `` 元素。 - 链接 - 包括在其片段中具有客户端参数的链接,即: `http://example.com/#/?param=val¶m2=val2` - 支持重写规则。 - LinkTemplates -- 允许基于用户提供的模板从通用路径中提取任意输入 -- 在重写规则不可用时很有用。 - 包括在其 URL 片段中具有客户端参数的链接,即: `http://example.com/#/param/val/param2/val2` - Cookies - 也支持嵌套 cookies,即在单个 cookie 中包含键值对。 - Headers - 具有关联 DOM 事件的通用客户端元素。 - AJAX 请求参数。 - JSON 请求数据。 - XML 请求数据。 ### 开放 [分布式架构](https://github.com/Arachni/arachni/wiki/Distributed-components) Arachni 旨在适应您的工作流程并轻松集成到您 现有的基础设施中。 根据您对流程所需的控制级别,您可以选择 REST 服务 或自定义 RPC 协议。 两种方法都允许您: - 远程监控和管理扫描。 - 同时执行多个扫描 -- 每个扫描都被隔离在 其自己的 OS 进程中,以利用: - 多核/SMP 架构。 - OS 级调度/限制。 - 沙箱故障传播。 - 通过安全通道进行通信。 #### [REST API](https://github.com/Arachni/arachni/wiki/REST-API) - 非常简单直接的 API。 - 易于与非 Ruby 系统互操作。 - 通过 HTTP 运行。 - 使用 JSON 格式化消息。 - 有状态扫描监控。 - 唯一会话在轮询进度时自动仅接收更新, 而不是完整数据。 #### [RPC API](https://github.com/Arachni/arachni/wiki/RPC-API) - 高性能/低带宽 [通信协议](https://github.com/Arachni/arachni-rpc)。 - `MessagePack` 序列化,以实现性能、效率和 与第三方系统集成的便捷性。 - 网格: - 自我修复。 - 通过热插拔/热拔插节点进行扩展/缩减。 - 可以通过添加节点无限扩展以增加扫描容量。 - _(始终开启)_ 负载均衡 -- 所有实例自动由 负载最轻的网格成员提供。 - 具有可选的每次扫描选择退出/覆盖。 - _(可选)_ 高性能模式 -- 结合多个节点的资源 以执行多实例扫描。 - 按每次扫描启用。 ### 范围配置 - 基于正则表达式和计数器过滤冗余页面,如画廊、目录等。 - 可以选择自动检测并忽略冗余页面。 - 使用正则表达式的 URL 排除过滤器。 - 基于内容的页面排除过滤器,使用正则表达式。 - 使用正则表达式的 URL 包含过滤器。 - 可以强制仅遵循 HTTPS 路径而不降级到 HTTP。 - 可以选择遵循子域。 - 可调整的页面计数限制。 - 可调整的重定向限制。 - 可调整的目录深度限制。 - 可调整的 DOM 深度限制。 - 使用 URL 重写规则进行调整。 - 可以从多个用户提供的文件中读取路径(以限制和扩展范围)。 ### 审计 - 可以审计: - 表单 - 可以自动刷新 nonce 令牌。 - 可以通过集成的浏览器环境提交它们。 - 用户界面表单 - 不属于 HTML `` 元素但通过 JS 代码关联的 输入和按钮组。 - 用户界面输入 - 具有关联 DOM 事件的孤立 `` 元素。 - 链接 - 可以通过集成的浏览器环境加载它们。 - LinkTemplates - 可以通过集成的浏览器环境加载它们。 - Cookies - 可以通过集成的浏览器环境加载它们。 - Headers - 通用客户端 DOM 元素。 - JSON 请求数据。 - XML 请求数据。 - 可以忽略二进制/非文本页面。 - 可以使用 `GET` 和 `POST` HTTP 方法审计元素。 - 可以注入原始和 HTTP 编码的负载。 - 可以提交页面的所有链接和表单以及 cookie 排列,以提供广泛的 cookie 审计覆盖。 - 可以按名称排除特定的输入向量。 - 可以按名称包含特定的输入向量。 ### 组件 Arni 是一个高度模块化的系统,采用多种不同 类型的组件来执行其任务。 除了启用或禁用捆绑组件以根据需要调整系统的 行为和功能外,还可以通过添加用户创建的组件来扩展功能, 以满足几乎所有的需求。 #### 平台指纹识别器 为了有效利用可用带宽,Arachni 执行 基础的平台指纹识别,并仅使用适用的负载, 根据服务器端部署的技术定制审计过程。 目前,可以识别以下平台: - 操作系统 - BSD - Linux - Unix - Windows - Solaris - Web 服务器 - Apache - IIS - Nginx - Tomcat - Jetty - Gunicorn - 编程语言 - PHP - ASP - ASPX - Java - Python - Ruby - 框架 - Rack - CakePHP - Rails - Django - ASP.NET MVC - JSF - CherryPy - Nette - Symfony 用户还可以选择指定额外的平台(如数据库服务器), 以帮助系统尽可能高效。或者,可以完全禁用指纹识别。 最后,Arachni 将始终谨慎行事,当无法识别特定平台时, 发送所有可用的负载。 #### 检查 _检查_ 是执行安全检查并记录问题的系统组件。 ##### 主动 主动检查通过 Web 应用程序的输入与其交互。 - SQL 注入 (`sql_injection`) -- 基于错误的检测。 - Oracle - InterBase - PostgreSQL - MySQL - MSSQL - EMC - SQLite - DB2 - Informix - Firebird - SaP Max DB - Sybase - Frontbase - Ingres - HSQLDB - MS Access - 使用差分分析的盲注 SQL 注入 (`sql_injection_differential`)。 - 使用时间攻击的盲注 SQL 注入 (`sql_injection_timing`)。 - MySQL - PostgreSQL - MSSQL - NoSQL 注入 (`no_sql_injection`) -- 基于错误的漏洞检测。 - MongoDB - 使用差分分析的盲注 NoSQL 注入 (`no_sql_injection_differential`)。 - CSRF 检测 (`csrf`)。 - 代码注入 (`code_injection`)。 - PHP - Ruby - Python - Java - ASP - 使用时间攻击的盲注代码注入 (`code_injection_timing`)。 - PHP - Ruby - Python - Java - ASP - LDAP 注入 (`ldap_injection`)。 - 路径遍历 (`path_traversal`)。 - *nix - Windows - Java - 文件包含 (`file_inclusion`)。 - *nix - Windows - Java - PHP - Perl - 响应拆分 (`response_splitting`)。 - 操作系统命令注入 (`os_cmd_injection`)。 - *nix - *BSD - IBM AIX - Windows - 使用时间攻击的盲注操作系统命令注入 (`os_cmd_injection_timing`)。 - Linux - *BSD - Solaris - Windows - 远程文件包含 (`rfi`)。 - 未经验证的重定向 (`unvalidated_redirect`)。 - 未经验证的 DOM 重定向 (`unvalidated_redirect_dom`)。 - XPath 注入 (`xpath_injection`)。 - 通用 - PHP - Java - dotNET - libXML2 - XSS (`xss`)。 - 路径 XSS (`xss_path`)。 - HTML 元素事件属性中的 XSS (`xss_event`)。 - HTML 标签中的 XSS (`xss_tag`)。 - 脚本上下文中的 XSS (`xss_script_context`)。 - DOM XSS (`xss_dom`)。 - DOM XSS 脚本上下文 (`xss_dom_script_context`)。 - 源代码泄露 (`source_code_disclosure`) - XML 外部实体 (`xxe`)。 - Linux - *BSD - Solaris - Windows ##### 被动 被动检查寻找文件、文件夹和签名的存在。 - 允许的 HTTP 方法 (`allowed_methods`)。 - 备份文件 (`backup_files`)。 - 备份目录 (`backup_directories`) - 常见管理接口 (`common_admin_interfaces`)。 - 常见目录 (`common_directories`)。 - 常见文件 (`common_files`)。 - HTTP PUT (`http_put`)。 - 密码表单的传输层保护不足 (`unencrypted_password_form`)。 - WebDAV 检测 (`webdav`)。 - HTTP TRACE 检测 (`xst`)。 - 信用卡号泄露 (`credit_card`)。 - CVS/SVN 用户泄露 (`cvs_svn_users`)。 - 私有 IP 地址泄露 (`private_ip`)。 - 常见后门 (`backdoors`)。 - .htaccess LIMIT 配置错误 (`htaccess_limit`)。 - 有趣的响应 (`interesting_responses`)。 - HTML 对象提取器 (`html_objects`)。 - 电子邮件地址泄露 (`emails`)。 - 美国社会安全号码泄露 (`ssn`)。 - 强制目录列表 (`directory_listing`)。 - 混合资源/脚本 (`mixed_resource`)。 - 不安全的 Cookies (`insecure_cookies`)。 - HttpOnly cookies (`http_only_cookies`)。 - 密码表单字段的自动完成 (`password_autocomplete`)。 - 源欺骗访问限制绕过 (`origin_spoof_access_restriction_bypass`) - 基于表单的上传 (`form_upload`) - localstart.asp (`localstart_asp`) - 为父域设置的 Cookie (`cookie_set_for_parent_domain`) - HTTPS 站点缺少 `Strict-Transport-Security` 头 (`hsts`)。 - 缺少 `X-Frame-Options` 头 (`x_frame_options`)。 - 不安全的 CORS 策略 (`insecure_cors_policy`)。 - 不安全的跨域策略 (`insecure_cross_domain_policy_access`) - 不安全的跨域策略 (`insecure_cross_domain_policy_headers`) - 不安全的客户端访问策略 (`insecure_client_access_policy`) #### 报告器 - 标准输出 - [HTML](http://www.arachni-scanner.com/reports/report.html/) ([zip](http://www.arachni-scanner.com/reports/report.html.zip)) (`html`)。 - [XML](http://www.arachni-scanner.com/reports/report.xml) (`xml`)。 - [Text](http://www.arachni-scanner.com/reports/report.txt) (`text`)。 - [JSON](http://www.arachni-scanner.com/reports/report.json) (`json`) - [Marshal](http://www.arachni-scanner.com/reports/report.marshal) (`marshal`) - [YAML](http://www.arachni-scanner.com/reports/report.yml) (`yaml`) - [AFR](http://www.arachni-scanner.com/reports/report.afr) (`afr`) - 默认的 Arachni 框架报告格式。 #### 插件 插件以模块化方式向系统添加额外功能,这样 核心保持精简,并使任何人都可以轻松添加任意功能。 - 被动代理 (`proxy`) -- 分析 Web 应用程序和 浏览器之间的请求和响应,协助 AJAX 审计、登录和/或限制审计范围。 - 基于表单的登录 (`autologin`)。 - 基于脚本的登录 (`login_script`)。 - HTTP 认证字典攻击器 (`http_dicattack`)。 - 基于表单认证的字典攻击器 (`form_dicattack`)。 - Cookie 收集器 (`cookie_collector`) -- 跟踪 cookies 并建立更改时间线。 - WAF (Web 应用程序防火墙) 检测器 (`waf_detector`) -- 建立 正常行为的基线,并使用 rDiff 分析来确定恶意输入是否引起任何行为变化。 - BeepNotify (`beep_notify`) -- 扫描完成时发出蜂鸣声。 - EmailNotify (`email_notify`) -- 在扫描结束时通过 SMTP 发送通知(以及可选的报告)。 - VectorFeed (`vector_feed`) -- 读取向量数据并从中创建要 审计的元素。可用于在每个向量/元素基础上执行极其专业化/狭窄的审计。 适用于单元测试或其他无数事情。 - Script (`script`) -- 在插件范围内加载并运行外部 Ruby 脚本, 用于调试和常规黑客操作。 - 不常见的头 (`uncommon_headers`) -- 记录不常见的头。 - 内容类型 (`content_types`) -- 记录服务器响应的内容类型,帮助 识别有趣(可能泄露)的文件。 - 向量收集器 (`vector_collector`) -- 收集有关扫描范围内 所有可见输入向量的信息。 - 头收集器 (`headers_collector`) -- 根据指定条件收集响应头。 - Exec (`exec`) -- 在不同的扫描阶段调用外部可执行文件。 - Metrics (`metrics`) -- 捕获有关扫描和 Web 应用程序多个方面的指标。 - 限制到 DOM 状态 (`restrict_to_dom_state`) -- 基于 URL 片段 将审计限制为单个页面的 DOM 状态。 - Webhook 通知 (`webhook_notify`) -- 在扫描结束时通过 HTTP 发送 webhook 负载。 - 速率限制器 (`rate_limiter`) -- 对 HTTP 请求进行速率限制。 - 页面转储 (`page_dump`) -- 将页面数据作为 YAML 转储到磁盘。 ##### 默认 默认插件将为每次扫描运行,并放置在 `/plugins/defaults/` 下。 - AutoThrottle (`autothrottle`) -- 在扫描期间动态调整 HTTP 吞吐量,以 实现最大的带宽利用率。 - Healthmap (`healthmap`) -- 生成站点地图,显示每个爬取/审计 URL 的健康状况 ###### 元 `/plugins/defaults/meta/` 下的插件对扫描结果执行分析 以确定可信度,或仅添加上下文信息或一般见解。 - TimingAttacks (`timing_attacks`) -- 为通过时间攻击发现的问题提供通知, 当受影响的审计页面一开始就返回异常高的响应时间时。 它还指出了对执行繁重处理的页面进行 DoS 攻击的危险。 - Discovery (`discovery`) -- 对发现检查记录的问题执行异常检测, 并在适用时警告误报的可能性。 - Uniformity (`uniformity`) -- 报告在多个页面上均匀易受攻击的输入, 暗示缺乏集中的输入清理点。 ### 训练器子系统 训练器使 Arachni 能够从其执行的扫描中学习,并 在审计期间即时整合这些知识。 检查能够单独强制框架从 它们将要引发的 HTTP 响应中学习。 然而,这通常是不需要的,因为 Arachni 知道哪些请求 更有可能发现新元素或攻击向量,并将相应地 调整自己。 尽管如此,这对于模糊测试检查来说可能是一个宝贵的资产。 ## [安装](https://github.com/Arachni/arachni/wiki/Installation) ## [用法](https://github.com/Arachni/arachni/wiki/User-guide) ## 运行规格测试 您可以运行 `rake spec` 来运行**所有**规格测试,或者您可以使用以下命令有选择地运行它们: ``` rake spec:core # for the core libraries rake spec:checks # for the checks rake spec:plugins # for the plugins rake spec:reports # for the reports rake spec:path_extractors # for the path extractors ``` **请注意**,核心规格测试将需要一台性能强大的机器,因为 有必要测试系统的网格/多实例功能。 **注意**:_检查规格测试将需要许多小时才能完成,因为时间攻击测试。_ ## 错误报告/功能请求 使用 [GitHub Issues](http://github.com/Arachni/arachni/issues) 提交错误,并通过 [支持门户](http://support.arachni-scanner.com) 获得支持。 ## 贡献 (在开始任何工作之前,请阅读源代码工作的[说明](https://github.com/Arachni/arachni/tree/experimental#source)。) 我们很高兴接受来自同行程序员的帮助,这些是您 需要遵循的步骤以贡献代码: * Fork 该项目。 * 基于 [experimental](https://github.com/Arachni/arachni/tree/experimental) 分支启动一个功能分支 (`git checkout -b experimental`)。 * 为您的代码添加规格测试。 * 运行规格套件以确保您没有破坏任何东西 (`rake spec:core` 用于核心库或 `rake spec` 用于所有内容)。 * 提交并推送您的更改。 * 发出拉取请求并等待您的代码被审查。 ## 许可证 Arachni 公共源代码许可证 v1.0 -- 请参阅 _LICENSE_ 文件以获取更多信息。
标签:Arachni, CISA项目, DOE合作, Prisma Cloud, Ruby, Web安全, 加密, 反取证, 安全评估, 对称加密, 开源安全工具, 数据可视化, 模块化设计, 漏洞扫描器, 知识库, 网络安全, 自动化修复, 自动化审计, 蓝队分析, 调试插件, 逆向工程平台, 隐私保护, 黑盒测试