安全测试相关流程图
安全测试流程
安全测试复测流程
安全测试可参考标准
◆ PTES 渗透测试执行标准
◆ OWASP 测试指南 V4.0
◆ OWASP Top 10-2017
◆ GB/T 20984-2007 信息安全技术 信息安全风险评估规范
安全风险原理图-摘(OWASP & GB/T 20984-2007)
安全风险评估各要素关系图-摘(GB/T 20984-2007)
安全风险实施流程图-摘(GB/T 20984-2007)
应用软件常见安全风险类型
1、注入
SQL注入、NoSQL注入、OS注入和LDAP注入缺陷。攻击者通过恶意数据可以诱使解析器在未进行适当授权的情况下执行非预期命令或者访问数据
SQL注入案例:假设一个网站的登录功能,验证用户凭据的代码如下所示(使用伪代码表示):query = “SELECT * FROM users WHERE username=’” + username + “‘ AND password=’” + password + “‘“
result = executeQuery(query)
攻击者可以通过在用户名输入框中输入恶意的字符串绕过身份验证,从而执行非预期的SQL语句。例如,如果攻击者在用户名输入框中输入’ OR ‘1’=’1’ –,那么构造的SQL查询将变为:SELECT * FROM users WHERE username=’’ OR ‘1’=’1’ –’ AND password=’…’
这将导致该查询返回所有用户记录,使攻击者成功绕过身份验证。
NoSQL注入案例:假设一个应用程序使用NoSQL数据库存储用户数据,并且在身份验证过程中执行查询。验证代码如下所示:
query = { username: username, password: password }
result = db.users.findOne(query)
攻击者可以在用户名输入框中输入恶意的字符串,构造出一个能够绕过身份验证的查询。例如,如果攻击者在用户名输入框中输入{ $ne: null },那么构造的查询将变为:
{ username: { $ne: null }, password: ‘…’ }
这将绕过原始的身份验证逻辑,使攻击者能够成功登录。
OS注入案例:假设一个应用程序允许用户上传文件,并且在服务端执行一些系统命令来处理上传的文件。代码片段如下所示:
filename = request.getParameter(“filename”)
cmd = “unzip “ + filename
executeCommand(cmd)
攻击者可以通过构造恶意文件名来注入任意的操作系统命令。例如,如果攻击者在文件名中输入malicious.txt; rm -rf /,那么构造的命令将变为:
unzip malicious.txt; rm -rf /
这将导致服务端执行除解压缩外还会执行恶意的rm -rf /命令,删除服务器上的所有文件。
**
**LDAP注入案例:假设一个应用程序使用LDAP(轻型目录访问协议)进行用户身份验证,把传入的用户名和密码直接拼接到LDAP查询代码中。伪代码如下所示:
username = request.getParameter(“username”)
password = request.getParameter(“password”)
query = “(uid=” + username + “)”
result = ldap.search(query)
if result.password == password:
// 验证通过
攻击者可以通过在用户名输入框中输入恶意字符串来构造一个能够绕过身份验证的LDAP查询。例如,如果攻击者在用户名输入框中输入)(uid=))(|(password=)),那么构造的查询将变为:”)(&(uid=))(|(password=))=”
*这将导致LDAP服务器执行非预期的查询,并可能绕过原始的身份验证逻辑。
*
2、身份认证和授权:
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、秘钥或者会话令牌,或者利用其他开发缺陷来暂时性或者永久性的冒充其他用户的身份。
案例:假设一个网站在用户登录后会生成一个会话令牌(Session Token),并将该令牌存储在用户浏览器的 Cookie 中。用户进行购物时,应用程序根据会话令牌来验证用户的身份和授权。在该网站上,由于开发不当或配置错误,存在以下漏洞:
1、会话固定攻击(Session Fixation Attack):网站未在用户认证之前生成新的会话令牌。攻击者可以事先获得一个有效的会话令牌,然后通过钓鱼等手段诱使用户使用该会话令牌进行登录。当用户使用被攻击者提供的令牌进行登录后,攻击者也获得了相同的会话令牌,从而冒充被攻击者的身份。
2、会话劫持(Session Hijacking):网站未采用足够强大和安全的会话管理措施,如未对会话令牌进行适当的保护或未采用加密传输机制。攻击者可以在网络上监听用户的会话令牌,并将其盗取。通过劫持的会话令牌,攻击者可以冒充用户身份,访问敏感信息或执行未经授权的操作。
3、跨站点请求伪造(CSRF):应用程序未对请求进行适当的CSRF防护。攻击者可以构造一个诱导用户点击的恶意网页,在用户登录状态下,通过用户的浏览器发送未经授权的请求。这些请求可能会执行非法操作,如修改用户配置、更改密码或进行非授权的金融交易。
3、敏感信息泄露
未加密存储、传输或处理敏感数据,或者存在安全配置错误,可能导致用户个人信息、金融数据等泄露。
案例:未加密存储-比如一个医保应用程序,敏感信息未进行加密处理,似的攻击者能轻易获取到用户的基本信息(姓名、地址、联系方式等);
传输时缺乏加密-在用户与医保程序进行通信会话过程中,未使用强大的加密机制进行保护,攻击者可能通过窃听网络流量的方式,获取传输的敏感数据,比如病历、检查结果。
安全配置错误-应用程序的日志存储在公开访问位置,可能被攻击者通过网络爬虫的形式获取敏感数据集。
4、失效访问控制
未对通过身份验证的用户实施恰当的访问控制。攻击者可以根据这些缺陷访问未经授权的功能和数据,如:访问其他用户的账户信息、查看敏感文件、修改其他用户的数据、更改访问权限。
案例:比如一个低权限用户,程序未进行足够的权限管控,攻击者可以通过修改接口的请求参数或者添加特定的标识来访问高级权限的账户功能。
未实施合适的会话管理,比如登录一个网页,可以设置10分钟强制退出,若是设置访问后会话保持一天登录状态,别人使用电脑就会冒充受害者的身份进行其他操作。
5、安全配置错误
不安全默认配置、不完整的临时配置、开源云存储、错误的HTTP表头配置及包含敏感信息的详细信息。
6、XSS攻击
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建HTML或Java 的浏览器API,更新现有的网页时,会出现XSS缺陷。XSS让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。
案例:例如,如果输入参数为:<input type="text" name="comment" value="Hello, World!">
可以构造一个简单的XSS攻击载荷:
<script>alert('XSS Attack!');</script>
如果XSS攻击载荷成功生效,浏览器可能会显示弹窗或执行恶意脚本。
通过XSS攻击,攻击者可能劫持用户身份信息、篡改网站信息、重定向到恶意网站等。
7、不安全的错误处理和日志记录
应用程序未正确处理错误情况,披露敏感信息或提供攻击者利用的细节。
8、使用已知漏洞组件
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
案例:常见的有spring-boot、log4j等组件不同版本可能存在一定程度上的漏洞。
9、不安全文件处理
应用程序未正确验证和处理上传的文件,可能导致文件包含漏洞或远程代码执行。
上传含有恶意代码的文件覆盖或执行文件,包括敏感文件或者配置文件,从而获取系统权限和敏感信息。
10、不安全的反序列化
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。
- 重播攻击:攻击者可能截获合法序列化数据,并将其再次发送给目标系统,以重放先前的操作或伪造数据。
- 注入攻击:攻击者可能通过修改序列化数据中的某些字段,以实现数据篡改、SQL注入或命令注入等攻击。
- 特权升级攻击:攻击者可能利用反序列化漏洞来修改序列化数据中的特权属性或对象,以获取未经授权的访问权限或提升自身的权限级别。
通过综合安全测试流程和应用软件常见安全风险类型的探讨,我们不仅可以建立有效的安全测试计划和策略,还可以提高应用程序的整体安全性。持续的安全意识培训和漏洞修复工作也至关重要,以确保应用程序在不断演变的威胁环境中保持安全。让我们共同努力,保障信息安全,确保用户数据和系统的安全可靠。