1.前言
近年来,供应链安全事件频发使得供应链安全成为热议话题。在软件供应链安全治理流程中,安全测试是个关键的控制点,在多个环节中都会涉及:引入阶段执行样品安全测试,开发测试阶段执行静态、动态的安全测试,交付环节进行验收安全测试,维护阶段安全运维需定期执行安全测试发现薄弱环节。安全测试的目的是验证某项控制措施是否正常运行,测试包括自动化扫描、工具辅助的渗透测试、试图破坏安全的手动测试1。
渗透测试作为有效的安全漏洞发现手段之一,在供应链安全相关的法案、制度中多次明确提及。以欧洲国家为例,英国 NCSC 在其 2019 年发布的供应链安全指南中,建议组织对供应商进行安全评估,并通过审计、渗透测试从独立视角确保供应链安全2;在通信领域,英国新的电信安全法框架里,规定公共网络运营商需要对供应链进行测试,包括渗透测试3;德国 IT 安全法 2.0 从法律上要求关键组件制造商需要支持外部的渗透测试,否则将被认为不可信;意大利国家网络安全法规定,公共网络运营商在采购关键通信设备之前,需要由国家测评和认证中心实施渗透测试,而高风险的产品需要接受自动化测试、渗透测试,以及源代码审查。纵观针对供应链安全陆续出台的法律法规制度,整体呈现出越来越全面、具体、严格的趋势。
在陆续出台的法律要求背景下,安全从业人员持续进行漏洞挖掘工作,CVE 数量逐年增加。在 ENISA 2022 年威胁形式报告4和 MITRE 2022 CWE Top 255中展示了当前最常见和最有影响力的安全缺陷,包括跨站脚本、SQL 注入、命令注入、跨站请求伪造等等,这些漏洞容易被发现,攻击者可以利用它们控制系统、窃取数据或阻止应用程序运行等。而这些漏洞中的大部分是可以通过自动化和半自动化的安全测试工具发现的。安全测试工具扩展了测试的深度和广度,增加了漏洞发现率,提升了测试效率。
本文归属于软件供应链安全社区检测评估组推出的安全工具链研究系列材料,将重点关注渗透测试以及测试过程中常用的工具。
2.渗透测试
渗透测试(Penetration Test),一种用于检测所采用的安全保护措施的强度和有效性、带有经过授权的入侵攻击企图的安全测试。是一种针对计算机系统进行的授权模拟网络攻击,检查可利用的漏洞,用于评估系统的安全性。
渗透测试过程通常包含以下几个阶段:
▪规划阶段包括测试范围和参与规则。规划阶段是极其重要的阶段,它确保测试团队和管理人员对测试性质达成共识,明确测试是经过授权的。
▪信息收集和发现阶段,结合人工和自动化工具来收集目标环境的信息。此阶段包括执行基本的侦察来确定系统功能(如访问系统上托管的网站),并执行网络发现扫描来识别系统的开放端口。
▪漏洞扫描阶段探测系统脆弱点,结合网络漏洞扫描、 Web 漏洞扫描和数据库漏洞扫描。
▪漏洞利用阶段试图使用人工和自动化漏洞利用工具来尝试攻破系统安全防线。
▪报告阶段总结渗透测试结果,并提出改进系统安全的建议。
这些步骤是可以灵活调整的,一旦测试者发现并利用了某个漏洞,他们就可能获得对其他机器的访问权限,然后进入新的测试领域,重复这些步骤,寻找新的漏洞并尝试利用它们。因此渗透测试的过程是循环往复的,直到输出最终的测试报告。
3.渗透测试工具
对于渗透测试人员来说,在不使用任何渗透测试工具,而完全依赖于手工渗透的情况下,渗透测试是非常困难且局限的。因此选择适合的渗透测试工具将极大地提高渗透测试的效率以及漏洞探测的全面性。目前市面上有成千上万种渗透测试工具,其中不乏许多高效率,多功能的工具。在渗透测试的各个阶段中,使用率较高的工具包括:
而在本文中主要选取了三款工具,按照渗透测试框架、集成型渗透测试工具和SQL注入工具分类,在每个类别中选取了最为经典的工具展开介绍,分别是 Metasploit、BurpSuite 和 SQLMap。
3.1 渗透测试框架
3.1.1简介
渗透测试者可借助渗透测试框架来探测利用漏洞,一般渗透测试框架用于解决某一类问题,测试人员利用框架提供的指令来实现各种功能。常见的渗透测试框架包括 Metasploit、Empire 和 cobalt strike 等,在本文中将重点介绍最常用的 Metasploit。
Metasploit 是一个开源的完整的安全漏洞检测平台。它适用于所有主要操作系统,包括 MAC、Windows 和 Linux 发行版,并且可用于服务器、Web 应用程序和网络。它提供多种不同的功能,其中包括信息收集、探测漏洞、生成有效载荷和漏洞利用等。它拥有一个庞大的开源漏洞利用数据库并且不断更新,带有可用于攻击目标的命令行和多种模块,还包括一个内置的网络嗅探器,提供多种方法来利用漏洞进行攻击。渗透测试人员和黑客都常使用该工具执行各种扫描和枚举,查找和利用漏洞、设置反弹 shell 或者开发恶意负载等。该工具因其提供了全面的漏洞渗透模块库,集成了常见漏洞的利用代码,并提供优秀的模块开发环境,而被认为是进行渗透测试时最有效的安全工具之一。
Rapid7 提供了两种 Metasploit 版本:
专业版除了配备漏洞扫描、手动利用漏洞、数据管理、会话/凭证管理等基本功能,还提供了例如证据收集、密码暴力破解、会话保持、IDS/IPS 绕过、数据标记、快速开始向导、载荷生成器、高级报表、团队协作等高阶功能。
社区版为免费版本,相比于专业版,它只提供漏洞扫描、手动利用漏洞、数据管理、会话/凭证管理等基本功能。
3.1.2主要模块
Auxiliaries (辅助模块):该模块为预配置模块,用以提供辅助功能,包括扫描、嗅探、指纹识别等,并非直接在测试机和目标主机之间建立访问。
Exploit (漏洞利用模块):该模块包含针对漏洞库中的每个已知漏洞而设计的各种攻击代码,用于破坏系统安全性。
Payload (攻击载荷模块):用于在渗透攻击后,在目标系统上执行实际攻击功能的特定代码。
Post-Exploitation (后渗透模块):该模块主要用于在获取目标系统控制权限后,进行一系列后渗透攻击动作,包括密码哈希值获取、特权提升、跳板攻击等。
Encoders (编码工具模块):该模块允许混淆有效负载从而逃避检测,防止被杀毒软件、防火墙等安全软件检测识别。
3.1.3优缺点
优点:
▪被大多数安全团队、研究人员和专业人员使用
▪功能全面
▪易于模拟受攻击的机器
▪包含第三方程序接口,可与 Nmap、SQLMap 等结合使用
▪测试自动化
缺点:
▪易于黑客攻击(包括初学者和脚本小子)
▪付费版本相对昂贵
3.1.4基础应用案例
本案例中着重关注 Metasploit 框架(Metasploit Framework,MSF)。使用 kali linux 自带的Metasploit 框架,在 kali 中打开终端键入msfconsole 启动该工具。利用 Metasploit提供的漏洞数据库通过执行命令获得大量可利用的潜在漏洞列表以完成攻击行为。
命令:search samba type:exploit platform:linux
用途:搜索获取 linux 系统 samba 服务相关漏洞利用模块。
命令:use exploit/linux/samba/is_known_pipename
用途:配置漏洞利用模块,从潜在漏洞列表里选择使用 exploit/linux/samba/ is_known_pipename。
命令:show payloads
用途:配置攻击载荷模块,在有默认载荷的情况下 Metasploit 会默认选择该载荷,在没有默认载荷时,可以使用该命令显示针对该漏洞可利用的全部载荷,该案例中 payload 默认为 payload/cmd/unix/interace,攻击成功后将提供 unix shell。
命令:set RHOSTS 10.11.1.146
用途:配置攻击目标 IP 地址
命令:set RPORT 445
用途:配置攻击目标机器端口号,这里设置为 samba 漏洞服务的端口号。
命令:show options
用途:查看漏洞的详细信息以及设置载荷的状态、参数等。
在全部设置完成后即可键入 exploit,工具将实现自动化攻击,并执行 payload,最终获取目标远程命令执行权限,并能够通过 shell 执行任意 unix 操作系统指令。
3.1.5高阶应用简介
除了案例中所展示的基本应用外,Metasploit 提供的进阶功能可以进一步帮助测试人员全面深入地进行渗透测试。例如在漏洞探测阶段,可以利用db_nmap 和 autopwn 实现自动化攻击,也可使用专用漏洞扫描器探测漏洞。在漏洞利用阶段,可以通过编写脚本实现自动化攻击,也可使用 RPC 接口实现远程调用。在后渗透攻击阶段,使用Msfvenom 生成木马并进行编码等操作,绕过杀软检测,也可使用 Meterpreter 进行后渗透。
3.1.6小结
开源软件的使用在软件供应链中占据着重要位置,Metasploit 具有庞大且不断更新的开源漏洞利用数据库,并提供多种方法执行针对已知漏洞的攻击,因此在探测和利用已知漏洞时,掌握使用 Metasploit 的高效性也就不言而喻。
3.2 集成型渗透测试工具
3.2.1简介
除了有解决某一类问题的渗透测试框架,还有许多集成了多种功能的渗透测试工具,例如 Burp Suite 和 OWASP ZAP,每个渗透测试人员必备的工具当数 Burp Suite。
Burp Suite 以其强大的代理、数据操控功能,早已成为 Web 应用渗透测试者的尖兵利器。它包含了许多功能,总的来说可以用作渗透测试,自动攻击,自动扫描,同时也提供了许多高效工具。除了工具自身提供大量的可供渗透测试人员使用的功能外,也为这些工具设计了许多接口,其支持第三方插件扩展功能也极大地方便使用者编写自定义插件,定制自己的武器库,进一步提升渗透测试效率。
PortSwigger Web Security 提供了三种 Burp Suite 版本:
企业版的主要特点是带有全自动 Web 漏洞扫描器,能够跨越多个 Web 应用程序实现并发扫描,可与错误跟踪系统和漏洞管理平台集成,也可将扫描与 CI/CD 集成并实现 DevSecOps, 同时有用于查看整个或部分组织的安全状况的仪表板,主要面向软件开发团队,首席信息安全官(CISOs)和首席技术官(CTOs)。
专业版没有扫描调度或 CI/CD 集成,其主要特点是有用于拦截 HTTP 请求和响应的 Burp Proxy,用于渗透测试的 Burp 完整工具箱,包括 Scanner、Intruder、Repeater、Decoder、Sequencer 和 Comparer,以及多个用于自定义测试工作流程的 Burp 扩展,主要面向一线AppSec 工程师和渗透测试人员。
社区版为免费版本,该版本使用功能有限,只有用于执行扫描的基本手动工具,包括Intruder (demo)、Repeater、Decoder、Sequencer 和 Comparer,主要面向研究人员和爱好者。
3.2.2主要模块
▪Proxy (代理):充当 HTTP/S 代理服务器,作为在浏览器和目标 Web 服务器之间的中间人,允许拦截,查看和修改在两个方向上的原始数据流。
▪Spider (爬虫):通过跟踪 HTML 和 JavaScript 以及提交的表单中的超链接来映射 Web 应用程序,使用多种智能技术完整的枚举应用程序的内容和功能。
▪Scanner (扫描器):用于自动扫描发现 web 应用程序的安全漏洞,针对扫描结果中的漏洞可以直接发到 Repeater 里进行测试验证。
▪Intruder (入侵):用于对 web 应用程序进行自动化攻击,可以自动执行测试过程中可能遇到的所有类型的任务,如:密码爆破,枚举标识符,收集有用数据,以及使用 fuzzing 技术探测常规漏洞等。
▪Repeater(中继器):通过靠手动操作来验证 HTTP 消息,用于多次重放请求响应和手工修改请求消息,以及对修改后的服务器端响应的消息继续分析。
▪Sequencer (会话):用于分析重要数据项的样本随机性质量,包括检测访问令牌是否可预测、密码重置令牌是否可预测,通过分析数据样本,来降低关键数据被伪造的风险。
▪Decoder (解码器):作为 Burp 中的一款编码解码工具,主要用于手动执行或智能化地对应用程序原始数据进行各种编码格式转换。
▪Comparer (对比):用于在通过一些相关的请求和响应得到的两项数据之间进行比较。
▪Extender (扩展):用于加载 Burp Suite 扩展,使用自定义或第三方代码来扩展 Burp Suite 的功能。
▪除了扫描之外,Burp 还用于检查合规性和安全审计。
3.2.3优缺点
优点:
▪大多数安全团队、研究人员和专业人员都在使用
▪测试漏洞全面
▪易于使用和配置
缺点 :
▪相比其他扫描工具更难学习和掌握
▪使用功能依赖于版本选择
▪企业版相对昂贵
3.2.4基础应用案例
bWAPP (buggy web Application)是一个集成了多种类型漏洞的漏洞演示平台,该使用案例以bWAPP /Client-Side Validation (Password)—medium/为例。
Burp Suite有许多高级功能,但最常使用的还是用于拦截请求的Burp代理。在开始使用前,需确保浏览器使用127.0.0.1上的代理,并且Burp默认端口为8080。
如下图所示,在前端页面内无法修改新密码为弱密码123,并且会提示错误信息,设置的新密码需符合设置策略:至少6位字符并至少包含一个大写字母,一个小写字母和数字。
通过设置Proxy功能下的Intercept is on,对该密码修改页面进行拦截。
将其发送到 Repeater 功能,可以通过直接在抓包中修改 password_new 字段和password_conf字段为 123,重新发送请求发现响应信息为 200 OK,即绕过前端验证,成功修改为弱密码。
修改后在登录页面尝试,发现密码已被成功修改为弱密码123。
3.2.5高阶应用简介
除了主要的基本功能外,Burp Suite 还支持安装各种插件,官方插件可从 Extender 模块的 BApp Store 中加载安装:例如 FastjsonScan 借助 DNSLOG 实施被动扫描,用以检测是否存在 Fastjson 组件相关漏洞。Autorize 用于测试权限问题,能够更高效更全面地对垂直/水平越权问题执行自动化检测。Hackbar 可通过选择设置合适的 payload 用于协助开展 SQL 注入,XSS,CSRF 等漏洞的测试工作。同时支持使用者自行开发插件用以拓展 Burp Suite 功能,例如开发插件修改请求和响应包,自定义 UI 界面,自定义扫描插件等。
3.2.6小结
在软件供应链应用中,常见的 Web 漏洞包括跨站脚本攻击(XSS)、跨站请求伪造漏洞(CSRF)、未加密登录、HTTP 报头追踪漏洞等都可借助 Burp Suite 测试及利用,此外得益于 Burp Suite 有着多种模块和扩展功能,该工具在测试软件供应链应用时占据着重要地位。
3.3 SQL 注入工具
3.3.1简介
除了有针对某种漏洞类型的专用工具外,SQL 注入漏洞是常见的 Web 应用漏洞之一,当Web 应用存在该漏洞时,攻击者可通过将 SQL 命令注入至发现的注入点,例如表单提交处等, 使得服务器执行恶意的 SQL 命令,从而获得数据库中的敏感信息以及数据库所在服务器的控制权限。
相较于其他常见的Web应用漏洞,SQL 注入漏洞有着许多专用的测试工具,例如 SQLMap、 jSQL Injection、BBQSQL 等,其中最为常用的 SQL 注入工具为 SQLMap。
SQLMap是一款强大的 SQL 注入漏洞自动化检测工具,是渗透测试最为常用的工具之一。其主要用于对 SQL 注入漏洞进行自动化检测和利用,以获取数据库服务器的权限。SQLMap 具有功能强大的检测引擎,并能够针对各种不同类型数据库的渗透测试的功能选项,包括数据库指纹识别,获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
3.3.2主要功能
▪支持枚举数据库管理系统的所有用户,密码哈希,用户权限,用户角色,数据库,数据表和数据。
▪支持对不同位置的 HTTP 参数进行测试。
▪支持从文本文件读取请求并批量测试。
▪支持自定义 HTTP 并发数(多线程)以提高盲注的速度。同时还可以设置每个HTTP 请求的间隔时间(秒)。
▪支持设置 HTTP 头中的 Cookie 值,支持自动处理来自 Web 应用的 Set-Cookie 信息。
▪支持从目标 URL 中解析 HTML 表单并生成 HTTP 请求以测试这些表单参数是否存在漏洞。
3.3.3优缺点
优点
▪检测多种类型的 SQL 注入。
▪支持多种类型数据库管理系统。
▪提供高级功能,尤其在搜索和枚举方面。
缺点:
▪只有命令行界面,没有 GUI。
3.3.4基础应用案例
SQLi-labs 是一个专门关于 SQL 注入的靶场,在该案例中以 SQLi-labs Less-1 为例展示基本注入步骤。
1.判断是否存在注入
参数:-u
命令:sqlmap -u “http://192.168.1.100:49155/Less-1/?id=1”
用途:判断目标是否存在注入。
2.枚举当前 DBMS 数据库
参数:-dbs
命令:sqlmap -u “http://192.168.1.100:49155/Less-1/?id=1” --dbs
用途:如果当前会话用户对包含 DBMS ,则可以枚举出当前数据库。
3.枚举数据库中的数据表
参数:--tables、--exclude-sysdbs、-D
命令:sqlmap -u “ http://192.168.1.100:49155/Less-1/?id=1 ” --tables--exclude-sysdbs
用途:枚举非系统数据库中的数据表。如果当前会话用户对包含 DBMS 数据表信息的系统表有读取权限,则可以枚举出特定 DBMS 的数据表。
在第二步枚举当前 DBMS 数据库的结果中,所列出的数据库很多都是系统数据库,我们可以通过指定--exclude-sysdbs 来排除所有的系统数据库,来枚举用户创建的数据库的数据表。
参数:--tables、-D
命令:sqlmap -u “ http://192.168.1.100:49155/Less-1/?id=1 ” -D security--tables
用途:单独针对某个数据库中的数据表进行枚举,可以使用-D 选项来指定数据库。枚举非系统数据库中的数据表。该例即枚举 security 数据库中的数据表。
4.枚举数据表中的列名
参数:--columns、-T、-D
命令:sqlmap -u“http://192.168.1.100:49155/Less-1/?id=1”-D security -T users--columns
用途:如果当前会话用户对包含 DBMS 数据表信息的系统表有读取权限,则可以枚举出特定数据表的列名。此功能可使用选项-T 来指定表名,使用选项-D 来指定数据库名称。如果未指定数据库名称,将使用当前的数据库名称。该例即枚举 security 数据库中 users 数据表的列名。
5.导出数据表中数据
参数:--dump、-T、-D
命令:sqlmap -u“http://192.168.1.100:49155/Less-1/?id=1”-D security -T users--dump
用途:如果当前会话用户对特定的数据表有读取权限,则可以导出数据表条目。此功能依赖选项-T 来指定表名,还可以用选项-D 来指定数据库名称。如果提供了表名而不提供数据库名,则会使用当前的数据库。该例即导出 security 数据库中 users 数据表中的数据。
3.3.5高阶应用简介
除了上述使用案例中展示的基础功能外,SQLMap 还有许多进阶注入方式,包括:可以使用--technique 指定 SQL类型注入,使用-m 批量处理 GET 请求,使用-r读取文件后批量对报文进行注入,使用--forms 自动填充表单注入,使用--proxy 配置http 代理,使用--crawl 自动化爬取页面等。
3.3.6小结
SQL 注入漏洞是软件供应链渗透测试中常见的安全漏洞,在2022 CWE Top 25 中位列第三,掌握 SQL注入工具,将最常见的安全漏洞提前拦截,在软件供应链测试中能起到事半功倍的作用。
4.总结
供应链安全威胁日益增长,安全行业从业者们也在努力通过安全测评等动作提前发现漏洞,开发出各类辅助测试、提升效率的安全工具。这些工具层出不穷,种类繁多,没有一个工具是大而全、一直技术领先,组织应该根据业务目标,选择利用合适的工具,加强自身测试能力的修炼,让测试水平随着威胁的增长而持续提升。对整个供应链信任并验证,促进安全生态圈的整体建设。
注释
1.CISSP 官方学习指南
2.https://www.ncsc.gov.uk/collection/supply-chain-security/assessing-supply-chain-security
3.https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/1120531/E02781 980_Telecommunications_Security_CoP_Accessible.pdf
4.https://www.enisa.europa.eu/publications/enisa-threat-landscape-2022
5.https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25.html
往期推荐
— END —
软件供应链安全治理工具链系列研究由中国信通院、中国电信联合牵头,会员单位悬镜安全、比瓴科技、默安科技、泛联新安、中兴通讯、墨菲安全、探巡科技支持开展,包含9篇软件供应链安全治理工具研究,梳理软件供应链安全治理工具链,对各类工具提出基本能力要求建议,为各国家机关、企事业单在软件供应链安全体系建设中的安全评估工具提供必要的选型参考和技术支撑,为行业内软件供应链安全治理工作的前行贡献力量。

