写点什么

从了解洞态 IAST 到加入开源社区

作者:火线安全
  • 2021 年 12 月 28 日
  • 本文字数:2096 字

    阅读完需:约 7 分钟

从了解洞态 IAST 到加入开源社区
引言

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


应用安全测试

目前常见的应用安全目前常见的应用安全测试有三种: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 请求传入,流入命令执行函数是则判定存在代码执行漏洞。

组件漏洞识别

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

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


敏感信息泄露

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

PS: 默认正则有待优化。

全流量及调用链



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


加入开源社区

在使用的过程中,我们也遇到了一些问题和 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-sdkfrom dongtai_sdk.

DongTai import DongTai

dongTaiSdk = DongTai("config.json")


具体可参看项目主页:

DongTai-SDK-Python

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


本文源自于 FreeBuf 作者 SpenserCai,很感谢该作者对洞态 IAST 的关注与支持。


关于洞态 IAST

洞态 IAST 是全球首个开源 IAST ,于 2021 年 9 月 1 日正式开源发布。洞态 IAST 专注于 DevSecOps,具备高检出率、低误报率、无脏数据的特点,帮助企业在应用上线前发现并解决安全风险。自开源发布以来,洞态 IAST 备受开源社区人员和企业的关注,包括工商银行、去哪儿、知乎、同程旅行、轻松筹等在内的上百家企业都已成为洞态用户。

官网地址:http://dongtai.io

用户头像

火线安全

关注

还未添加个人签名 2021.10.22 加入

还未添加个人简介

评论

发布
暂无评论
从了解洞态 IAST 到加入开源社区