最近沉迷面试,没有纯技术类文章出产。
本篇用来聊聊在默安面试中,面试官主要提到的sast与iast技术的入门基础。
首先,本文用于简化记录,不用于深入学习,深入学习请参考文中给出的博客或文献。
以下。
先从sast开始。
Iast于sast的目标用户都是开发阶段(或已开发完成)的系统,采用灰盒测试的方式进行漏洞发现与挖掘。
Sast基于污点分析技术完成,所以这里先简单总结一下污点分析技术。
总结来自于该博客(https://www.k0rz3n.com/2019/03/01/%E7%AE%80%E5%8D%95%E7%90%86%E8%A7%A3%E6%B1%A1%E7%82%B9%E5%88%86%E6%9E%90%E6%8A%80%E6%9C%AF/)有需要推荐看一看,简单易懂。
污点分析就是将输入的数据进行标记,分析其行进路径是否有合理的无害化处理,输入函数是否为污染汇集函数的技术。即,跟踪输入数据,将其视为有害数据,如果没有无害化且传入了污染汇集函数,则认为该路线存在漏洞。若经过无害化处理,则不进行进一步追踪。
显然,分为动态静态两大类追踪方式,静态追踪即代码分析,而动态追踪则是数据分析,通过对输入数据的调用等操作分析是否存在问题。
其中的问题难点等就不展开说了,该博客很细致,这个就是最基础的两种分析原理。
面试官分享给我的文章中还展示了一种基于codeQL的实现方式。
CodeQL是将源码转化为一个可查数据库的方式进行筛选,基于AST抽象语法树,很大程度上提高了筛选的效率。
来源的文章是:https://mp.weixin.qq.com/s/8EWKs9VKRTUKRGj_XK0Mfw
参考工具链接:
PMD:https://github.com/pmd/pmd
Seecode:https://github.com/seecode-audit/seecode-scanner
Codeql:https://github.com/github/codeql
Kunlun-M:https://github.com/LoRexxar/Kunlun-M(开源且大佬长期维护,推荐关注,但是目前只支持PHP和JS)
有文章提到fortify的开源规则库,我还没有看,有兴趣的朋友可以去试试。
由于本次针对的是java语言,所以可以参考一下JArchitect。
Iast与rasp
先贴一个链接: http://rui0.cn/archives/1175
本篇简洁的讲述了iast与rasp的应用场景的不同,同时提到了这类方法的优劣性问题,同时没有过度深究。
下面我们先从iast开始。
Iast可以认为是一种静态污点传播技术的动态应用,通过检测实时数据的方式达到漏洞扫描的目的,其存在的依据是java的插桩技术。
优势是可以达到静态污点传播通常难以达到的地方,比如反射,多态等,并且具有实时性。
缺点是难以判断隐式污点传播等情况,可能出现污点丢失的情况。
这里Ruilin 师傅给出的一种实现方式是添加一个map,然后通过判断输出值是否存在于map中,从而判断是否存在漏洞。
目前没什么干货代码内容,原因是近期尝试写了一些demo,但是效果都不理想,因为个人对于 包括AST树,java字节码等了解不够深入,sast与iast两方面都不能够有效的进行尝试。
接下来几天会把重点放在昆仑镜的分析以及分步骤进行深入的开发上。
会把每个技术点都尽量深入总结一下,请期待。