开发安全相关技术和产品受到越来越多的关注。行业共识认为,应用系统上线之后进行软件漏洞修复,其修复成本是需求设计阶段修复成本的几十倍。因此,在开发环节,引入相应的安全工具,能够有效的降低漏洞的修复成本,实现安全的左移。本文会持续研究安全开发相关工具,使用开源工具建设安全开发体系。
静态代码安全检查(SAST)
静态应用程序安全测试(Static Application Security Testing)技术通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。
据统计,超过50%的安全漏洞是由错误的编码产生的,开发人员一般安全开发意识和安全开发技能不足,更加关注业务功能的实现。想从源头上治理漏洞就需要制定代码检测机制,SAST是一种在开发阶段对源代码进行安全测试发现安全漏洞的测试方案。
SAST需要从语义上理解程序的代码、依赖关系、配置文件。优势是代码具有高度可视性,能够检测更丰富的问题,包括漏洞及代码规范等问题。测试对象比DAST丰富,除Web应用程序之外还能够检测APP的漏洞,不需要用户界面,可通过IDE插件形式与集成开发环境(如Eclipse、IntelliJ IDEA)结合,实时检测代码漏洞问题,漏洞发现更及时,修复成本更低
1、CodeQL
自从Github宣布推出CodeQL,越来越多安全人员使用这个项目做代码安全评估工作,目前github超过6100 star。github地址
Github为了解决其托管的海量项目的安全性问题,收购了CodeQL的创业公司,并宣布开源CodeQL的规则部分,这样全世界的安全工程师就可以贡献高效的QL审计规则给Github,帮助它解决托管项目的安全问题。
CodeQL本身包含两部分解析引擎+SDK。
解析引擎用来解析我们编写的规则,虽然不开源,但是我们可以直接在官网下载二进制文件直接使用。SDK完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。检测java靶场java-sec-code、JavaVulnerableLab、WebGoat,漏洞的检测准确率较高。据说log4j最初研究人员使用codeql检测出来,可以查看相关的分析文章。
深入学习codeql使用参考文章
2、SonarQube
SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题, 并通过SonarQube web UI展示出来。sonarqube提供多种插件可以方便集成到研发流水线中。gtihub地址
部署方式使用docker进行部署,进行相关靶场的检测分析。也可使用官方提供的sonarqube在线平台进行代码的快速检测分析。在线sonarqube地址 可使用github账号进行登录。
检测规则原理
Source 获取用户输入的污点数据,HttpServletRequest#getParam("foo")
Sanitizer 从一个或者多个可能受污染的参数查找并且删除恶意内容。DatabaseUtils#sqlEscapeString(String str)
Validator 将一个或多个参数标记为不受恶意内容影响的安全参数。String#matches(String str),验证确定内容中不包含注入攻击
Passthrough 污点数据的传播
Sink 一段可以执行安全敏感任务的代码。数据到达接收器后不应包含任何恶意内容。java.sql.Statement#execute
靶场漏洞检测结果
SonarLint插件使用
SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。
3、Semgrep
semgrep是一款基于Facebook开源SAST工具pfff中的sgrep组件开发的开源SAST工具,目前由安全公司r2c统一开发维护,项目github地址
开源扫描规则丰富,由社区共同开发维护的扫描规则超过1000条
规则设置简单,采用yaml配置文件编写,语法简单
扫描速度极快:官方称扫描速度大约是每条规则20K-100K loc/sec
生态良好:支持嵌入到几乎所有CI工具中
支持本地扫描:官方不仅提供了VSCode、IntelliJ IDEA、Vim的相关插件,还支持通过pre-commit的方式在代码提交前进行自动扫描
缺点是数据流跟踪能力较弱,后续会深入分析工具的实际漏洞检测能力。
交互式安全测试工具(IAST)
IAST交互式应用安全测试技术是最近几年比较火热的应用安全测试新技术,曾被Gartner咨询公司列为网络安全领域的Top 10技术之一。IAST融合了DAST和SAST的优势,漏洞检出率极高、误报率极低,同时可以定位到API接口和代码片段。
1、洞态开源IAST
火线~洞态IAST属于被动式IAST,不需要重放数据包,不产生脏数据;
被动式IAST具有近实时检测、高检出率、低误报率、低漏报率等特点;理论上可以实现0误报,但是,在复杂场景下,会出现污点链路不准确、误报等情况,尤其是使用了自定义的过滤函数。
洞态IAST可以使用官方提供的SaaS环境进行体验,也可使用官方提供的镜像进行本地快速部署。开源java、python agent源码和服务端检测源码。笔者曾根据开源版本开发出适合企业开发流程的IAST工具,会在后续的文章中详细介绍IAST的实现原理和漏洞检测算法。
2、国外contrast
Contrast Assess是一种革命性的交互式应用程序安全测试(IAST)解决方案,它将安全专业知识融入应用程序本身。Contrast agent使用智能传感器检测应用程序,以便从应用程序内部实时分析代码。Contrast Assess然后使用代理收集的情报来识别和确认代码中的漏洞。这包括已知(CVE)和未知漏洞。
2、商业产品
成熟的商业产品有悬镜灵脉、默安雳鉴IAST
动态应用安全测试工具(DAST)
DAST是一种黑盒测试技术,是目前应用最广泛、使用最简单的一种Web应用安全测试方法,安全工程师常用的工具如AWVS、AppScan等就是基于DAST原理的产品。
成熟的产品有长亭Xray、YaKit、Goby
开源组件成分分析(SCA)
1、DependencyTrack
2、悬镜开源OpenSCA
云安全工具
1、长亭开源veimind
veinmind-tools 是由长亭科技自研,牧云团队孵化,基于 veinmind-sdk 打造的容器安全工具集。veinmind, 中文名为问脉,寓意 容器安全见筋脉,望闻问切治病害。 旨在成为云原生领域的一剂良方。
2、trivy
Trivy 是一款轻量级的开源安全扫描工具,专注于 Docker 镜像的漏洞扫描,帮助用户快速检测镜像中的漏洞并提供修复建议。Trivy 基于漏洞数据库,并且包含了多种 CVE 数据库。它可以从最新版本的漏洞数据库中获取数据,在本地计算机上执行镜像扫描,以检测 Docker 镜像中的漏洞和安全问题。Trivy 使用简单,并与 CI/CD 管道集成非常容易
后续会写系列文章详细介绍上面工具的使用,用工具提供的原子能力建设企业SDL流程。感谢开源工具为安全能力建设提供的帮助,开源漏洞靶场提供的漏洞验证能力。文章中有错误之处欢迎大家指正,如果有优秀的开源工具欢迎评论区留言,共同推动安全开发能力体系建设。