1、闭源系统下的漏洞自动化发现之旅演讲人:秦策(Hearmen)关于我望潮实验室(南京)负责人专注移动安全、应用安全、二进制BlackHat、Defcon、HITB 等演讲者KCON2015 演讲者EvilParcel系统的银翼杀手01CodeQL打破源码限制02LLM模型助力漏洞挖掘03总结与展望04目录EvilParcelEvilparcel 漏洞是一类存在于 Android 系统中的漏洞,它们利用了 Parcelable 子类在序列化和反序列化过程中实现不匹配的问题Michalbednarski 首次发现此类漏洞并交给谷歌官方修复首次发现Michalbednarski 公开漏洞利用方法,研究
2、者开始陆续跟进,各大厂商的类此类漏洞也开始出现漏洞利用公开推出 LazyValue 机制,Bundle 中的每个 item 都会有单独的 lengthAndroid13 修复各个手机厂商自己的 ROM 并不能及时更新安卓官方依然接收此类漏洞安卓系统的碎片化EvilParcelEvilparcel 漏洞可以导致 Bundle 在多次序列化和反序列化过程中内容发生改变。结合 LAW 跳板,可以实现权限提升,严重影响系统安全将evilparcel放置在Bundle 中传给系统应用(settings)Bundle系统权限应用编写APK,实现添加账号回调bundle.getParcelable(“int
3、ent”)重新序列化sendResponse(bundle)攻击目的1:第一次序列化读让system_server找不到intent攻击目的2:第二次序列化读让settings可找到intent序列化读序列化读序列化写校验checkKeyIntent(intent)没有intentEvilParcelParcelable 类 writeToParcel 函数写入的数据在被 CREATOR.createFromParcel 读取时无法一一对应Parcel_key_namestringstringParcel_key_namestringstringstring序列化反序列化other_keyva
4、lueother_keyvalueparcel keyparcel keyparcel valueparcel valueother keyother valueanother keyanother valueParcel_key_namestringstringstring反序列化parcel keyparcel valueParcel_key_namestringstringstringother_keyvalue序列化parcel keyparcel valueother keyother valuestringother_keyvaluestringanother keyanother
5、 valueEvilParcel 分类writeToParcel 函数写入的数据被 createFromParcel 读取时不匹配漏洞原语01读和写均是顺序的,但是读和写的顺序或者类型不一致04读或写中存在分支语句,分支语言中包含 read 和 write,分支控制时考虑不当02写操作中存在 try-catch 且不抛出异常的情况03读操作中有读泛型的操作,且存在 try-catch 不抛出异常的情况05子类构造时调了父类的构造,用且父类构造函数调用了重载函数06对象序列化或者反序列化时对整个 parcel 进行了绝对位置操作EvilParcel Type#1!#$%&$()*+,-$./-%
6、0!$-0-/1)2(3&-$(#$-4!3%5(1-%/106(1(7/18 9.5-33%,-!#$%&5+%,:3%1-;+2(3&-$4!(3&-$?:3%1-+/A8B!#$%&5+%,3-(,C3+02(3&-$406(1(7/1D%/?3-(,7/18BB&$()*+,-$./-%0!$-0-/1)2(3&-$(#$-47/1-A-30E+1(1%+/8F+$-(/07)GH(3-,8!3+1-&1-,*+,-$./-40E+1(1%+/D%/?3-(,7/18B!#$%&)1(1%&I%/($J3-(1+3K*+,-$./-LJEMN;.ED/-:J3-(1+3K*+,-$./