APISAN-Sanitizing API Usages through Semantic Cross-checking

【发表会议刊物】 USENIX Security Symposium 2016 【作者信息】 Insu Yun, Changwoo Min, Xujie Si, Yeongjin Jang, Taesoo Kim, and Mayur Naik, Georgia Institute of Technology Abstract API滥用是一个众所周知的错误来源。其中一些(例如,SSL API的错误使用以及内存分配大小参数上的整数溢出)可能会导致严重的安全漏洞(例如,man-in-the-middle攻击和特权升级)。而且,现代API量大、复杂和发展迅速使其使用过程中容易出错。然而,现有的查错技术需要开发人员提供规范描述或者模型描述等人工干预活动,或者面临不能扩展到包含数百万行代码的大型真实软件的可扩展性差的问题。 本文提出了APISAN,可以自动化地从源代码中自动推断出正确的API使用模式的工具,而无需人工干预。 APISAN设计的关键思想是通过考虑语义约束,从四个不同的角度,即API之间的因果关系、API参数间的语义关系、API的返回值和API使用时隐含的前置后置条件四方面, 来提取潜在正确的使用模式。 APISAN专门用于检查具有安全隐患的各种属性。作者将APISAN应用于9200万行代码,包括Linux内核和OpenSSL,发现76个以前未知的错误,并提供了所有错误的补丁。 Introduction 通过分析源代码中API的不同使用方式,APISAN能够自动推测出语义正确性,即“语义信度”。 下图是APISAN找到的OpenSSL1.1.0-pre3-dev中的一个内存泄漏漏洞。 Line3为某公钥分配了内存单元gctx,随后被第四行的密钥生成操作EVP_PKEY_keygen_init()初始化。 但是若密钥初始化失败时,已分配的内存单元即gctx应该被EVP_PKEY_CTX_free()释放,否则导致内存泄漏发生。APISAN首先从该API在其他位置代码的使用模式中推测出语义正确的使用方式,然后提取出一个可检查的规则,即语义信度。这个新发现的漏洞已经被报告并在mainstream中被修复。 APISAN能够从右侧的代码数据库学习出正确的API使用模式,发现左侧代码中的漏洞。依据的原则是“主流的使用模式即为正确的使用模式”。 Framework APISAN的设计框架如下图所示。 首先基于已有的程序源码利用符号执行技术建立符号上下文,创建符号轨迹(traces)的数据库。然后,APISAN从轨迹数据库中通过4个维度(即API之间的因果关系、API参数间的语义关系、API的返回值和API使用时隐含的前置后置条件)推测出正确的API使用模式,即“语义信度”。推测出的“语义信度”被用于发现和排序出高风险的API误用位置并报告为漏洞。 建立符号上下文 APISAN执行符号执行来构建符号上下文,为每个函数调用捕获丰富的语义信息。 在大型和复杂程序中构建符号上下文的关键挑战是克服符号执行中的路径爆炸问题。 为实现可扩展性,同时提取足够的符号上下文的信息,本文做出了两个重要的设计决策: 首先,APISAN在函数边界内进行符号执行。 根据作者对APISAN的经验,限制程序间分析对于准确性和代码覆盖是合理的,因为大多数API使用可以在调用者函数中捕获,而不需要知道API内部代码。 其次,APISAN只展开每个循环一次,使得符号执行的结果能够有效地表示为没有后向边的符号执行树。 因为在实践中大多数API用法并不倾向于与循环变量相关。 推测语义信度 观察到的API使用模式越频繁,对此API用法的正确性的语义信念越强。 APISAN着重探索四种常见的API上下文模式。...>

讨论班XXX

Abstract Introduction background >

Automatically Evading Classifiers

动机 机器学习在信息安全领域的很多方面都有应用(恶意样本检测,入侵检测,垃圾邮件识别等等)。 评价机器学习模型的优劣的一个重要方面就是模型对于新数据的识别能力,即模型是否过拟合。不全面的训练数据和不具有代表性的特征都会导致过拟合,因此,想要训练出一个好的模型,需要有尽可能接近目标真实分布的大量数据,还需要提取出有效的特征。 在恶意样本检测这个问题中,这两个方面都存在固有的问题: 攻击者总会制作新的样本或试图修改已有样本来逃避检测,这使得收集到的数据无法接近真实的分布,且随着时间推移会慢慢地越来越偏离真实的恶意样本分布; 对于提取什么特征来表示恶意行为,没有一个固定的结论。可能用到一个特征,对于收集到的数据集有较好效果,但是这一特征不是本质的,那么这就给恶意样本逃避检测指明了方向。 本文作者提出了一种方法来检测PDF分类器是否足够健壮,能够抵御变种恶意文件的攻击。这个方法通过自动地对恶意PDF文件进行变异,在保持恶意行为的同时,使得分类器将恶意文件错误地判别为良性。 对象 PDF文件:从Contagio数据集中选取的500个恶意PDF文件和从Google上搜集来的几个良性PDF文件。 PDF分类器:基于PDF文本结构的2个State of the Art分类器:PDFrate和Hidost。其中由于PDFrate无法接触到,作者使用了一个性能相近的开源重新实现Mimicus。 方法 前提 已知特征工作在哪个级别(针对的2个分类器都是基于PDF文本结构的); 了解模型输出的恶意性评分的含义。 做法   变异 变异PDF的body部分:PDF的body是树状的,便于进行修改。通过删除恶意文件body中的某个object、从良性文件中选取一个object插入恶意文件中和从良性文件中选取一个object替换恶意文件中的某object这3个操作随机地修改恶意文件。   筛选 分为2个部分。第一部分是判断样本是否保持了恶意行为,这一部分是使用cuckoo沙箱进行检测的;第二部分是判断样本是否成功误导了分类器,这一部分直接把样本输入分类器然后获取输出,并根据其意义进行判断即可。 结果 对于每个分类器,每个恶意样本都成功变异出了至少一个能逃避检测的样本。 对于逃避检测的样本的例子分析发现非本质的特征很容易被攻击者利用。一般的恶意样本除了payload和形成文件必要的内容以外,缺少很多正常文件具有的内容。然而这种内容是可以添加上去的,缺少之并不是恶意样本的本质特征。在例子分析中就发现,样本中font的计数这一特征占了很大的权重,通过在恶意文件中添加这类内容就能轻易地误导分类器。 有388个文件,它们对于Hidost攻击成功的样本也能成功逃避Mimicus的检测;而对于Mimicus攻击成功的,这个数字是2。这是由于Hidost的特征“蕴含”了Mimicus的特征。这个例子说明可以构造一个具有和目标分类器相近、“更本质”特征的分类器,通过对其进行攻击,获取逃逸样本,来对目标分类器进行攻击。 反思 使用攻击的手段判别特征的有效性,通过攻击对抗来提升分类器的能力。 变异来进行攻击是逆向的思路,正向思考,既然pdf文件使用delete变异很容易保持恶意行为,也可以将变异作为类似数据清洗的步骤,将不必要的PDF object清除后,再进行特征提取,这样也能提升模型的能力。 模型的推广。从文中假设来看,对于同样使用PDF结构作为特征依据的分类器应该可以容易地推广。针对别的样本格式、特征选取,针对性地设计变异、筛选的部分,这个框架还是可以应用的。 。 >