自动化代码扫描,用于企业安全建设
摘要:互联网上引入代码扫描并不是为了推荐基于语法和语义分析的代码扫描工具。 典型的代表是fortify和Checkmarx。
一、代码扫描的目标
网上关于代码扫描的介绍无一不是在推荐基于语法语义分析的代码扫描工具,典型的代表就是fortify、Checkmarx。总结起来观点无非是, 目前市面上有基于正则表达式和基于语义分析的两种检测方式,基于正则表达式的传统代码安全扫描方案的缺陷在于其无法很好的“理解”代码的语义,而是仅仅把代码文件当作纯字符串处理。静态扫描商用产品都运用了语义分析、语法分析等程序分析技术静态分析层负责对代码文件进行“理解”,完成语义、语法层面的分析。能进行完整数据流分析,通过分析污点传播进行漏洞判定。
之前也使用过fortify进行自动化代码扫描,由于误报率太高导致推送给业务方的漏洞代码不被重视,也使安全部门的权威性受损。业务方不可能从众多的代码结果中排查出漏洞代码,所以不得不放弃fortify(fotify做代码审计辅助工具还是不错的)。另外一个原因是,fortify没法自定义扫描规则,当有内部特定代码风险的时候无法编写规则扫描,带来了一定的不便利性。
基于以上两点问题,对于代码扫描有了新目标。首先扫描准确性要高,其次要能灵活的自定义规则。经过分析发现,再厉害的语法语义扫描器也避免不了误报,最大难点在于扫描器根本无法识别过滤函数的有效性。静态代码扫描要解决这个问题除非用AI来解决,这是云舒的观点我非常赞同,等有一天AI能向人一样阅读代码的时候这个问题可能会解决吧。所以决定采用基于正则表达式的代码扫描器,我们可以扫一些代码规范类的问题。例如:不规范函数、SQL语句拼接、redis和MongoDB未授权访问、数据库连接信息硬编码、DEBUG 模式未关闭、fastjson远程代码执行漏洞的特定代码等等。虽然扫描来的这些问题不一定是漏洞但一定是代码风险也是不规范的写法,这样业务方也更容易接受。对于漏洞类型的代码可以交给运行态代码检测工具iast去发现,iast的缺点就是需要依靠第三方测试流量可能面临覆盖面不全的尴尬境地,所以需要结合静态代码使用。
不管怎么说能发现潜在风险并且业务方能接受整改,那么我们的目的就达到了。
为什么不选择强化
代码扫描器的一般扫描逻辑是围绕查找源和接收器。 源是污染的源头,是有害数据的切入点。 接收器是程序执行的有害部分。 接下来,跟踪污染路径并确定Source-Path-Sink是否关注传递的参数是否得到有效过滤以及逻辑是否重现了攻击。 如果最终执行功能的输入是可传递的,则通常容易受到攻击。
强化会导致误报。 对于源函数和接收器,它们是系统定义的函数。 Fortify具有足够的实力来整理每种语言的输入功能和执行功能列表并形成规则。 但是,过滤功能似乎是无能为力的,主要原因是过滤规则很奇怪,并且静态代码的静态分析无法识别是否已经执行了有效的过滤。
例如,在不同情况下,有多种针对xss漏洞的过滤方法。 用于输出到html,js,css,RTF等的过滤规则多种多样。如果不是人为地审核代码,则很难分析代码是否已完成有效过滤。
这是一个扫描案例,用于分析强化误报的原因。
在此选择WebGoat代码作为测试代码。
(1)扫描在此处识别了xss漏洞代码,并且还绘制了数据流。 乍一看,强化很强大。
(2)增加过滤功能,过滤恶意参数
(3)再次强化扫描,有效过滤恶意参数仍然报告xss漏洞,这显然是错误的肯定。
(4)在过滤规则中添加过滤功能等同于告知强化该功能已有效过滤。
右键单击以添加规则
(5)再次使用强化扫描代码,并清除了错误警报。 上图扫描了6个xxs漏洞,下图扫描了2个漏洞。 过滤功能中添加fotify规则白名单的代码不再扫描出xss漏洞。
基于定期扫描原理的分析
工人必须首先完善其工具,了解设备使用的最佳方法是了解其代码操作的原理,以使其具有灵活性。
这是MongoDB未经授权访问漏洞的示例,用于说明代码扫描的原理。
如果未对MongoDB访问进行身份验证,或者未按照官方标准对它进行身份验证,我们都认为这存在安全风险。
MongoDB未经认证
public void init(){
client = newMongoClient("192.168.23.24", 27022);
dataBase =client.getDatabase("duanjt");
collection =dataBase.getCollection("teacher");
}
// 插入一条数据
@Test
public void insert() {
Document doc = new Document();
doc.append("name", "李四");
doc.append("addr", "重庆");
doc.append("likes", Arrays.asList("排球", "篮球"));// 数组
collection.insertOne(doc);// 插入数据时会自动创建数据库和**
System.out.println("success");
}
MongoDB认证&JavaAPI接口调用:
MongoClient client= null;
try {
MongoCredentialcredential = MongoCredential.createCredential(“username” , “dbname”, “pwd”);
ServerAddress addr= new ServerAddress(“ip”, port);
client = newMongoClient(addr, Arrays.asList(credential));
DB db =client.getDB(MongoDBCfg.DB_SP2P);
// 以下可以对db进行相关操作
} catch (Exceptione) {
} finally {
if (client != null){
client.close();
}
}
在这里,这些规则通过常规分组表达式分为定位规则(定位执行功能)和前规则(通常是用于输入参数的规则)。 如果您已经编写了规则和定位规则,则必须同时匹配这两个规则。 说明存在代码风险),防御规则(防御功能规则,如果可以识别此规则,则可以认为没有代码风险)
代码扫描逻辑:
1)首先下载项目的git仓库代码,并将其存储在指定的目录中,以进行下一次代码扫描。
2)扫描准备工作以获得有关代码的基本信息
使用cloc命令可以解析项目的基本代码信息。 例如,计算多少行代码,多少种扩展文件类型,多少文件等等。
同时,在Dependencies类中,将使用mvndependency:树来分析项目的依赖jar包的主要版本和次要版本以形成应用程序资产,这便于在jar依赖项漏洞时快速检测哪些应用程序具有漏洞依赖项。 (例如fastjson)发生。
3)通过遍历代码规则来扫描文件。 在这里,使用grep命令扫描文件。
首先,将在此处扫描定位规则。 扫描定位规则后,我们将进一步判断前提条件和防御规则,并确定是否存在代码风险。
4)开始匹配前线规则或防御规则。
如果仅编写定位规则并且匹配它们以指示存在代码风险,则可能有一些配置类规则,例如,csrf开关是否已关闭,DEBUG模式是否未关闭等。
如果编写上述规则和定位规则,则需要将两个规则匹配以指示代码风险。 它可能是一些需要确定前提条件的规则,例如cookie不安全存储,HTTP响应拆分等。
如果编写防御规则,则只要防御规则生效,就不会有代码风险,例如本文中分析的MongoDB未授权访问漏洞将使用防御规则。
在前面匹配到了定位规则(MongoClient(\s*)\((\s*)\”\w*\”)后,这里由匹配到了防御规则MongoCredential\.createScramSha1Credential\(
因为防御规则是匹配的,所以这里is_vul = False可以判断为没有代码风险。
如果使用Java本机API而不使用身份验证代码访问MongoDB,则此处的防御规则无法匹配。 因此,is_vul = True,表示业务方尚未对MongoDB进行身份验证,因此可以确定存在代码风险。
上一篇:行业早报:恶意软件Krampus-3PC的目标瞄准iPhone用户,微软发出警告:电信运营商需警惕一波大规模黑客攻击来袭,新型网络钓鱼手法来了
下一篇:Chrome 79 Android版用户数据出现被清空问题,Google已暂停推送
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了