AMP:一种关于程序控制流相似性比较的精确算法

程序的控制流,代表了程序的运行过程,也展现了程序员的编程思想,可以说是程序的基因。
对程序控制流进行相似度比较,可以有效地提取程序的本质特征,便于进行分类和聚类,因而广泛应用于各种大数据与人工智能处理领域之中。程序控制流是一种复杂的图结构,基于图结构的相似性比较有很多案例,但大多以高度降维牺牲精确度为代价,不适合用于对精确性要求极高的程序流程进行匹配。
本文综合了各种传统的图结构比较算法,分析了其优点与不足,提出了一种时空复杂度可控的精确比较算法(AMP算法),并将之应用于Android病毒检测领域,取得了一定的效果。

阅读全文 »

DirtyCow 漏洞分析2

上一篇关于DirtyCow的分析过于细节,写的越多反而越不知所云。本篇从流程角度做个简易分析,力求通俗易懂:

阅读全文 »

DirtyCow 漏洞分析

1 触发内核调用

PoC通过写”/proc/self/mem”触发内核处理Page Fault, 将最终调用__get_user_pages(…,gu_flags=FOL_FORCE,…)

int f=open("/proc/self/mem",O_RDWR);
lseek(f,(uintptr_t) map,SEEK_SET);
c+=write(f,str,strlen(str));
阅读全文 »

Blackhat USA 2016 观感

今年有幸参加Blackhat USA 这一全球安全行业盛会,拓广了见识,收获颇多,仅以此文聊留念。

阅读全文 »

图解Android匿名共享内存与CVE-2016-0846

CVE-2016-0846据说是一个比Android出生还早的Android漏洞,理解它先要理解Android共享内存(Ashmem),这里画一张图,便于直观理解:

阅读全文 »

图解CVE-2015-1805

CVE-2015-1805是一个通用型的linux内核任意地址写任意值的漏洞,这种漏洞值得纪念,这里用四张图直观描述一下:

阅读全文 »

一步一步调通stagefright exploit

古语云:“蒙惠者虽知其然,而未必知其所以然也”。在漏洞利用的学习方面,我们不能只知其然,而必须知其所以然,才能真正掌握利用的精髓,以便学以致用。

前言

安卓Media Server的漏洞近一年多以来一直是挖掘的重点。而其中libstagefright无疑是最热点。自从今年八月份jduck公开披露以来,这个模块一直是谷歌撒钱的大户。近期我又从里面挖掘到一个critical的漏洞,有望在明年一月份bulletin里公布。种种迹象表明,这个模块漏洞还没有挖掘干净,应该还要继续臭名昭著一段时间。

目前关于libstagefright开源的exploit有两个版本,一个是jduck公布的exploit1,另外一个是谷歌公布的exploit2。这其中谷歌的版本做法比较精致,精确控制了内存布局,具体可以参见project zero的博客。Jduck的版本,网上没有过多的分析文章,乌云上有一篇只分析了一半,很关键的前期内存布局控制及触发点分析没有覆盖到,且作者似乎只是从静态角度分析了exploit chain的调用原理,这对于初学者想要彻底弄清楚整个利用的原理,还显不够。

本文从纯动态调试角度彻底阐述清楚该exploit的原理以及其所包含的问题。

阅读全文 »

从zergRush深入理解Use After Free

古语“道高一尺,魔高一丈”,用在如今的安全领域十分的恰如其分。

Use After Free(UAF)类型的漏洞近些年特别活跃,从WEB到桌面到移动端,屡屡被暴露于各种设备、平台、软件之中,究其原因,恐怕与系统软件厂商在针对传统型漏洞如缓冲区溢出等方面所作的持续性增强防范策略(Stack Canary, DEP/NX, ASLR…)不无干系。本文就Android平台一个知名UAF漏洞利用案列(zergRush)进行分析,深度探究UAF漏洞形成的原因及利用方法。

阅读全文 »