软件安全测试是针对软件系统的安全要求进行的测试。是保护敏感数据(保证用户隐私、商业机密等得到充分加密和保护)、检测安全漏洞(发现SQL注入、XSS等漏洞)、测试安全属性(保证保密性、完整性、可用性)以及保证合规。
一,代码审计
代码审计是静态源代码方面的安全检查,无需运行程序即可对源代码进行分析。
内容:
语法检查:检查代码是不是符合安全编码规范
漏洞排查:检查空指针、数组越界、权限检查缺失等问题
敏感操作审计:检查密码明文存储、SQL拼接风险、硬编码的敏感信息等
开源组件:检查第三方开源库是不是存在已知漏洞
业务漏洞审计:人工聚焦越权访问、不安全的直接对象引用等自动化工具难以识别的漏洞
技术手段:采用SonarQube、Fortify、Coverity等工具结合人工复核。源代码审计分为人工审计和自动化工具辅助审计两种方式。静态的源代码安全测试通过根据程序中数据流、控制流、语义等信息和安全规则库进行一致,找出代码中潜在的安全漏洞。
代码审计在开发阶段提前发现并修复安全问题,修复成本最低。
二,漏洞扫描
漏洞扫描是利用自动化工具对系统进行快速、全面检测,发现已知安全的过程。
内容:
静态应用程序安全测试 :对源代码、字节码或二进制代码进行分析,通过分析代码的思路、数据流、控制流等一致已知漏洞方式(SQL注入、缓冲区溢出、不安全的加密算法等)。优点是可在编码阶段早期发现问题,修复成本最低;缺点是误报率较高。
动态应用程序安全测试 :针对正在运行的应用程序,像黑客一样发送恶意构造的请求,根据响应判断是不是存在漏洞。能发现配置错误、身份验证缺陷等SAST无法发现的问题,误报率较低。
软件成分分析 :识别项目所使用的第三方开源库和依赖组件中的已知漏洞,并管理许可证风险。
范围:漏洞扫描包括服务器系统漏洞、中间件隐患、数据库权限泄露以及Web应用常见漏洞(SQL注入、XSS、CSRF等)。工具通过比对CVE/CNVD漏洞库识别风险,并检查系统配置合规。
漏洞扫描(DAST)是自动化全面排查的利器,优势是高效广包括,适合迭代阶段快速排查,需定期更新漏洞库以保障准确性。
三,渗透测试
渗透测试是模拟真实黑客攻击的手动测试过程,为了绕过安全防护,测试漏洞的可利用性和业务影响。
流程:
信息收集:使用搜索引擎、DNS查询、端口扫描等手段收集目的信息
漏洞挖掘:结合自动化扫描和手动分析寻找潜在攻击入口
漏洞利用:使用Metasploit框架、自定义攻击脚本等技术手段利用漏洞,获取系统权限或敏感数据
权限提升:在获得初步权限后尝试提升至更高权限
横向移动/内网渗透:以被攻破的系统为跳板进一步攻击内部网络的其他系统
痕迹清除:清理攻击日志,模拟高级不断性威胁
报告撰写:详细记录攻击途径、利用的漏洞、造成的危害,并提供具体的修复建议
测试类型:
黑盒渗透测试:测试人员对系统内部结构一无所知,完全从外部攻击,模拟真实黑客行为
灰盒渗透测试:测试人员拥有部分信息(如普通用户账户),效率最高,能更深入测试业务思路漏洞
白盒渗透测试:测试人员拥有全部代码和设计文档,为了发现更深的问题
作用:
测试风险-不仅找到漏洞,更证明漏洞能被利用及其实际破坏
测试防御体系-检验防火墙、入侵检测系统等安全措施是不是有效
业务影响-确定安全事件对业务连续性、数据机密性的具体影响
渗透测试适用于上线前或更新后检验系统抗攻击能力。
四,安全功能测试和配置审查
安全功能测试:测试软件中专门设计的安全功能是不是有效,包括数据机密性、完整性、可用性、不可否认性、身份认证、授权、访问控制、审计跟踪、委托、隐私保护、安全管理等。
安全配置审查:检查系统和应用程序的配置是不是合理,包括数据库配置、服务器配置、防火墙规则等。
五,常见漏洞类型
安全测试需要检测以下常见安全漏洞类型:
SQL注入:通过恶意SQL语句操纵数据库
跨站脚本攻击(XSS) :注入恶意脚本到网页
跨站请求伪造(CSRF) :伪造用户请求
缓冲区溢出:超出缓冲区边界的读写操作
越权访问:未经授权访问受限资源
认证绕过:绕过身份证实机制
命令执行:执行恶意系统命令
DoS攻击:拒绝服务攻击
此外还包括模糊测试 、社会工程学测试等专项测试。