freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

从了解洞态IAST到加入开源社区
2021-12-26 01:39:10
所属地 上海

引言

作为公司信息安全部的成员,确保每一条业务线的应用安全,是我工作的一部份,那么如何完全这项使命呢?我会在接下来的篇幅中一一说明。

应用安全测试

目前常见的应用安全测试有三种SAST(静态代码审计),DAST(黑盒安全审计)、IAST(交互式应用安全测试)。

SAST

我们已经自研了一套主要业务线的SAST平台,使用的过程中,有不错的漏洞检出率,但是受限于编程语言,以及存在一定的误报率,需要消耗运营成本去审核检出的漏洞。

DAST

黑盒安全测试同样也在我们的日常安全运营中,我们对于一些扫描器实现了自动化平台化的扫描,但是扫描器可以扫出的漏洞往往有限。

IAST

IAST 相当于 DAST 和 SAST 的组合,是一种相互关联的运行时安全检测技术。 它通过使用部署在 Web 应用程序上的 Agent 来监控运行时发送的流量并分析流量流以实时识别安全漏洞,IAST 提供更高的测试准确性,并详细的标注漏洞在应用程序代码中的确切位置,从而帮助开发人员达到实时修复。

洞态IAST

了解到洞态IAST还是从我的同事@null-302那儿,当时给我的第一感觉是,这么牛x的项目居然完全开源了。以下对现有功能进行大致说明,不足的地方还望大家指正。

通用漏洞扫描

洞态目前通过Agent+Server的方式,支持Java、Python、GoLang,Php等语言开发的应用进行交互式漏洞扫描,大致的原理呢就是通过Hook技术结合污点传播,对程序中所有方法的参数、数据流转进行分析从而识别出漏洞,这种方式对漏洞的检出是不会存在误报的,由此就可以省去漏洞运营的成本。

举例一个简单的例子(python3 + Flask):

@app.route("/test",methods=["POST"])
def Test():
    data = json.loads(request.get_data())
    argv1 = data["argv1"]
    exec(argv1)

对于上述代码可以很明显的看到这是一个存在”代码执行漏洞“的接口,洞态的检测原理则是通过对Flask中的request下所有的方法以及exec、eval等可以执行命令的方法进行监控,通过污点传播的方式可以检测出当参数从request请求传入,流入命令执行函数是则判定存在代码执行漏洞。

组件漏洞识别

1640449974_61c747b676c64a1f4f621.png!small?1640449975053

对于组件的漏洞识别这一点也是洞态的亮点之一,可以很好的实现对项目组件安全性的监控,改模块本身具有组件漏洞检测的能力,同时对于一些1day的组件漏洞,可以结合情报进行识别、告警。

美中不足的是目前只支持Java应用。

敏感信息泄露

在最近的版本更新中添加了敏感信息泄露的检测功能,通过对应用的Request、Response进行正则匹配实现了敏感信息进出站的检测,同时支持用户自定义正则检测敏感性息,在数据安全法落地的今天,显得非常重要了。后面会单独写一篇文章来分享该模块的使用心得体会。PS:默认正则有待优化。

全流量及调用链

1640451314_61c74cf2343e3d28e353c.png!small?1640451314827

1640451439_61c74d6f51d89308cfad4.png!small?1640451439749

官方定义这个功能叫搜索,我更愿意称其为全流量及调用链,如图所示,这个模块可以获取到应用完整流量,如果有漏洞则会标记。同时也能获取程序内部的完整调用关系,如果存在漏洞则会标记是那一步存在漏洞。由于篇幅有限在这篇文章中就不详细描述使用场景了。

加入开源社区

在使用的过程中,我们也遇到了一些问题,bug,洞态IAST团队在很快的时间内进行了修复,并且催促我们尽快测试,要知道在开源项目中能有这么快的bug修复速度,并且反向催促使用者尽快测试,是我闻所未闻的。

同时,需要将一个产品落地到实际场景中,至少在我看来,集成是必不可少的。洞态团队对于项目精神,加上,我们现有的需求,在这两个前提条件下,让我有了加入开源社区的想法。

洞态本身有着良好的API接口,可是需要完成集成,如果仅通过API就会出现如下不怎么好维护也不怎么优雅的代码:

data = {
    "project_id":101,
    ....
}
repData = requests.post("http://xx.xxx.xx.xxx/api/v1/project/version/add",data=data,headers=xxxx)
repData = json.load(repData.text)
if repData["status"] == 201:
    version_id = repData["data"]["version_id"]
    ....

每一次请求接口的时候都要对状态码做各种判断,都要通过json的key的方式(repData["xx"]["yy"])去获取数据,同时每次都要去看文档才能知道要获取的数据是什么如何请求等等。

于是我便有了开发SDK的想法,洞态团队也非常欢迎我加入开源社区,于是就有了python版的洞态SDK,对于接口进行了封装,能以对象方法的形式请求,同时也能够直接通过对象属性的方式获取数据(IDE本身会自动提示,使用过程中几乎不用看文档)

pip3 install dongtai-sdk

from dongtai_sdk.DongTai import DongTai
dongTaiSdk = DongTai("config.json")

具体可参看项目主页

DongTai-SDK-Python

https://github.com/HXSecurity/DongTai-SDK-Python

# SDL # iAST # 洞态Iast
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录