代码审计

  代码审计(CodeAudit)属于高级渗透测试服务,代码覆盖率能达到100%,是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析,能够找到普通安全测试所无法发现的安全漏洞。代码审计的操作需要运作在企业安全运营的场景当中,安全工程师需要了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。

  代码检查是审计工作中最常用的技术手段,实际应用中,采用“自动分析+人工验证”的方式进行。通常检查项目包括:系统所用开源框架、源代码设计、错误处理不当、直接对象引用、资源滥用、API滥用、后门代码发现等,通常能够识别如下代码中的风险点:

  跨站脚本漏洞、跨站请求伪装漏洞、SQL注入漏洞、命令执行漏洞、日志伪造漏洞、参数篡改、密码明文存储、配置文件缺陷、路径操作错误、资源管理、不安全的Ajax调用、系统信息泄露、调试程序残留、第三方控件漏洞、文件上传漏洞、远程命令执行、远程代码执行、越权下载、授权绕过漏洞。

整体代码审计和功能点人工代码审计的区别

  整体代码审计是指代码审计服务人员对被审计系统的所有源代码进行整体的安全审计,代码覆盖率为100%,整体代码审计采用源代码扫描和人工分析确认相结合的方式进行分析,发现源代码存在的安全漏洞。但整体代码审计属于白盒静态分析,仅能发现代码编写存在的安全漏洞,无法发现业务功能存在的缺陷。整体代码审计付出的时间、代价很高,也很难真正读懂这一整套程序,更难深入了解其业务逻辑。这种情况下,根据功能点定向审计、通过工具做接口测试等,能够提高审计速度,更适合企业使用。

  功能点人工代码审计是对某个或某几个重要的功能点的源代码进行人工代码审计,发现功能点存在的代码安全问题,能够发现一些业务逻辑层面的漏洞。功能点人工代码审计需要收集系统的设计文档、系统开发说明书等技术资料,以便代码审计服务人员能够更好的了解系统业务功能。由于人工代码审计工作量极大,所以需要分析并选择重要的功能点,有针对性的进行人工代码审计。

代码审计通常能够发现如下问题

  • 软件编写存在bug

  • 系统配置不当

  • 口令失窃

  • 嗅探未加密通讯数据

  • 设计存在缺陷

  • 系统攻击

代码审计的对象

代码审计的对象主要是PHP、JAVA、asp、.NET等与Web相关的语言:

  • 即将上线的新系统平台

  • 存在大量用户访问、高可用、高并发请求的网站

  • 存在用户资料等敏感机密信息的企业平台

  • 互联网金融类存在业务逻辑问题的企业平台

  • 开发过程中对重要业务功能需要进行局部安全测试的平台

网站审计

审计准备工作

1 获得源码

  要审计当然要先获得相应的源码,最好有相关文档等,资料越多越易于理解源码。

2 安装网站

  在本地搭建网站,一边审计一边调试。通过跟踪各种动态变化了解源码的作用。

3 网站结构

  浏览源码文件夹,了解该程序的大致目录

4 入口文件

  index.php、admin.php文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构、运行流程、包含那些配置文件,包含哪些过滤文件以及包含那些安全过滤文件,了解程序的业务逻辑。

5 配置文件

  一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。

6 过滤功能

  通过详读 公共函数文件 和 安全过滤文件 等文件,清晰掌握用户输入的数据,哪些被过滤,哪些无过滤,在哪里被过滤了,如何过滤的,能否绕过过滤的数据。过滤的方式是替换还是正则?有没有GPC?有没有使用addslasher()处理?

审计方法

  • 通读全文法

  通读全文发作为一种最麻烦的方法也是最全面的审计方法。了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。

  这种方法一般是企业对自身产品的审计。

  • 敏感函数参数回溯法 (shell_exec)

  根据敏感函数,逆向追踪参数传递的过程。

  这个方法是最高效,是最常用的方法。大多数漏洞的产生是因为函数的使用不当导致的。我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。

  有些自动化的源代码审计系统可以利用正则匹配一些高危函数、关键函数以及敏感关键字。可以分析判断敏感函数的上下文,追踪参数源头。尝试控制可控的参数变量。

  • 定向功能分析法 (安装问题)

  该方法主要是根据程序的业务逻辑来说审计的。 首先是用浏览器逐个访问浏览,看看这套程序有那些功能。根据相关功能,大概推测可能存在那些漏洞。

常见功能漏洞:(包括但不限于)

  • 程序初始安装

  • 站点信息泄漏

  • 文件上传

  • 文件管理

  • 登陆认证

  • 数据库备份恢复

  • 找回密码

  • 验证码

常用代码审计工具

  • PHP代码审计

代码质量:RIPS开源版

一款开源的,具有较强漏洞挖掘能力的自动化代码审计工具。它使用PHP语言编写的,用于静态审计PHP代码的安全性。代码安全审计RIPS的主要功能特点如下:

1)能够检测XSS、SQL注入、文件泄露、本地/远程文件包含、远程命令执行以及更多种类型的漏洞。
2)有5种级别选项用于显示以及辅助调试扫描结果。
3)标记存在漏洞的代码行。
4)对变量高亮显示。
5)在用户定义函数上悬停光标可以显示函数调用。
6)在函数定义和调用之间灵活跳转。
7)详细列出所有用户定义函数(包括定义和调用)、所有程序入口点(用户输入)和所有扫描过文件(包括include的文件)。
8)以可视化的图表展示源代码文件、包含文件、函数及其调用。
9)仅用几个鼠标点击就可以使用CURL创建针对检测到漏洞的EXP实例。
10)详细列出每个漏洞的描述、举例、PoC、补丁和安全函数。
11)7种不同的语法高亮显示模式。
12)使用自顶向下或者自底向上的方式追溯显示扫描结果。
13)一个支持PHP的本地服务器和浏览器即可满足使用需求。
14) 正则搜索功能。

当前有商业版,但开源已经够用了,最新版本的RIPS是0.55,下载链接如下:https://sourceforge.net/projects/rips-scanner/,
  • Java代码审计

代码质量:findbugs

代码安全:findsecuritybugs

FindSecurityBugs是Java静态分析工具FindBugs的插件,通过一系列的规则发现代码中的Java安全漏洞。这个工具可以集成在很多IDE中,包括Eclipse或IntelliJ。目前这个项目已经在安全社区中获得了不少关注度。该工具的最新版本还增加了专门针对Android端产品的漏洞类型。因此,它也是一个不错的移动端安全扫描工具。如果你想更详细的了解它,可以去访问

下载地址:http://findbugs.sourceforge.net/downloads.html
  • .net代码审计

https://security-code-scan.github.io/

- C++代码审计

代码质量:cppcheck

代码安全:flawfinder

https://sourceforge.net/projects/flawfinder/

  • Python

代码质量:pylint

代码安全:bandit,py-find-injection,pyt

https://wiki.openstack.org/wiki/Security/Projects/Bandit
https://github.com/openstack/bandit
https://github.com/uber/py-find-injection
https://github.com/bit4woo/python_sec
https://github.com/python-security/pyt

- 多种语言的安全代码检查工具:sonar

https://docs.sonarqube.org/display/SONAR

https://www.sonarsource.com/products/codeanalyzers/sonarjava/rules.html#Vulnerability_Detection

https://github.com/SonarSource/sonarqub

  • 商业代码审计工具
  • Fortify SCA

  Fortify Software公司是一家总部位于美国硅谷,致力于提供应用软件安全开发工具和管理方案的厂商。Fortify为应用软件开发组织、安全审计人员和应用安全管理人员提供工具并确立最佳的应用软件安全实践和策略,帮助他们在软件开发生命周期中花最少的时间和成本去识别和修复软件源代码中的安全隐患。

  Fortify SCA是一个静态的、白盒的软件源代码安全测试工具,它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。扫描的结果中不但包括详细的安全漏洞的信息,还会有相关的安全知识的说明,以及修复意见的提供。

  Fortify SCA支持Java,JSP,ASP.NET,C#,VB.NET,C,C++,COBOL,ColdFusion,Transact-SQL,PL/SQL,JavaScript/Ajax,Classic,ASP,VBScript,VB6,PHPjava,jsp多种语言,600多种风险类型,支持CWE/OWASP国际主流标准,交付形态为纯软件。

  • Checkmarx CxSuite

  Checkmarx 是以色列的一家高科技软件公司。它的产品CheckmarxCxSuite专门设计为识别、跟踪和修复软件源代码上的技术和逻辑方面的安全风险。首创了以查询语言定位代码安全问题,其采用独特的词汇分析技术和CxQL专利查询技术来扫描和分析源代码中的安全漏洞和弱点。

  Checkmarx CxSuite的扫描结果可以以静态报表形式展示,也可以通过可以对软件安全漏洞和质量缺陷在代码的运行时的数据传递和调用图跟踪的代码缺陷的全过程,同时还可以提供对安全漏洞和质量缺陷进行修复提供指导建议。也可以对结果进行审计,从而消除误报。

  Checkmarx CxSuite支持JAVA、ASP.NET(C#、VB.NET)、JavaScript、Jscript、C/C++、APEX等语言,500多种风险类型,支持CWE/OWASP国际主流标准,交付形态为纯软件。

参考

book:代码审计:企业级Web代码安全架构

Code Audit

List_of_tools_for_static_code_analysis

版权声明:本文为博主原创文章,转载请注明出处。 旭日酒馆