前言 在数字化浪潮中,移动互联网的应用场景及应用深度将进一步优化,移动应用已经渗透到人们的工作和生活中。随着移动终端的发展,移动应用所隐含的安全问题逐渐浮出水面,并越发深远地影响着人们的切身利益。 据统计,全球每年至少新增150万种移动端恶意软件,至少造成超1600万件移动恶意攻击事件。近年来,工业和信息化部针对移动应用长期存在的违规收集用户个人信息、违规获取终端权限、隐私政策不完善等行为进行了多次综合整治行动,国家等级保护2.0标准也增加了移动安全拓展标准,移动安全将会成为未来我国网络安全人才培养的一项核心内容。 本书作为《Android移动安全攻防实战》(ISBN为9787302602224,2023年3月由清华大学出版社出版)的实战攻防进阶续作,将更加深入地为读者展现移动安全领域中实网攻防的技术、战术及案例剖析,通过理论阐述、体系构筑以及实践沉淀,体系化地展现移动安全攻防领域的魅力。 内容结构 本书分为4篇,共15章。 基础篇 基础篇包括第1~3章,目的是让读者掌握后续移动安全攻防进阶阶段所需的基础知识体系。第1章介绍了Android系统发展过程中出现的两代虚拟机——DVM与ART。随着Android逆向人员与防护人员的对抗,Android安全攻防的战场从Android应用逐渐下沉到Android系统。为了保证Android应用的正常运行,很多防护手段在应用运行的时候会被解除,因此逆向人员会利用这一点,从应用运行的过程下手,攻破应用的安全防护。安全人员也会利用应用运行的过程构建更加难以突破的防线。希望读者通过第1章的学习,对Android系统的运行逻辑建立一个初步的认知。 第2章介绍了Android应用的Native层相关知识,包括充当Native与Java两个层次桥梁关系的JNI机制,以及ARM汇编基础知识,还有针对Native函数的Hook手段。与Java层相比,Native层更加接近Android系统的底层,因此分析的难度会更高,读者通过第2章的学习,可以对Android系统的结构与本质有一个明确认识。 第3章介绍了iOS应用包的结构以及应用启动的流程,由于iOS的封闭性,大部分逆向人员很难接触到iOS的底层,因此大部分攻防还是集中在应用层面,读者通过第3章的学习,能够更好地了解iOS应用。 理论篇 理论篇包括第4~6章,目的是帮助读者完善移动安全攻防进阶过程中所需的理论知识。第4章介绍了ATT&CK框架的各战术阶段及其包含的部分技术,在实际的攻防过程中,这些技术都会被灵活运用。如同兵法一样,攻击者不会死板地按照ATT&CK框架划分的阶段一板一眼地进攻,而是根据实际需求或者目标环境进行变化。 第5章介绍了ATT&CK for mobile框架中各战术阶段的技术。读者可能会注意到一些技术会在多个战术阶段中重复出现,这是因为战术重点描述了攻击者在某个阶段需要达到的目标,而技术是攻击者达成目标的手段,为了达成目标,攻击者会随意使用这些技术,因此分析木马病毒等恶意软件时,除了识别出其中使用的技术,还要分析攻击者利用这些技术收集了哪些数据,要达成什么目标。 第6章介绍了LLVM的编译、用法以及Pass程序的编写。LLVM将传统编译过程拆分成3部分,不仅增加了编译器模块的可重用性,也使得许多开发者可以编写针对中间码的Pass,从而参与到编译过程中。Android应用使用LLVM作为Native层代码编译器也进一步体现了Android系统的开放性。 实战篇 实战篇包括第7~13章,通过剖析移动应用加固技术的核心实现,展现移动应用在攻防一线的对抗实战技术。第7章介绍了整体加固技术的原理以及实现。整体加固的出现使得逆向人员难以获取Android应用字节码,阻碍了逆向人员对字节码的反编译分析,为了获取源代码,逆向人员需要解除应用的加固,又促使安全人员对加固技术进行升级。可以说,Android应用的加固与脱壳是安全攻防发展的一个直观体现。 第8章介绍了指令抽取技术的原理以及实现,指令抽取破坏了内存中Dex文件的完整性,细化了代码保护的粒度。安全人员可以指定具体的Java方法进行抽取保护,以平衡应用的安全性与性能。 第9章介绍了第三代加固技术,包括将Java代码转换成C代码的Dex2C技术,对汇编指令的虚拟化保护技术,以及对so文件的压缩加固技术。在实际的加固实践中会将多种加固技术组合使用,甚至混合运用三代加固技术以增加应用破解的复杂性。 第10章介绍了OLLVM的编译使用,并结合3种指令混淆的Pass源码分析混淆的过程与原理,读者可以结合2.2节和第6章进行学习。 第11章介绍了两种不同层次的VMP加固技术。其中,Dex VMP借用了Android虚拟机的指令解析机制,而ARM VMP要求开发者有比较扎实的汇编语言功底。 第12章介绍了几种针对iOS应用的逆向工具,基本上覆盖了iOS应用分析的流程。当逆向人员获取iOS应用包时,通过Cycript工具获取应用的Controller信息,使用砸壳工具去除应用的加固,使用classdump提取头文件代码,最后利用头文件的函数定义编写Hook程序对应用进行动态调试。 第13章介绍了Frida抓包的手段,Frida脚本化运行的方式使得应用抓包可以自动化地进行。例如,MobSF的动态分析功能就将Frida抓包作为动态分析流程的一个环节。 案例篇 案例篇包括第14章和第15章,通过现实世界中移动应用恶意程序的案例,利用前述的攻防技战术能力,进行实网级攻防对抗的案例分析。第14章分析了3类现实生活中常见的Android恶意软件,包括远程操控类恶意App、锁机勒索类恶意App、手机短信蠕虫类恶意App,帮助读者体验现实世界中攻防对抗的技战术,结合实战分析技术,对恶意软件程序进行逆向反编译,分析该恶意软件的工作原理和危害。 第15章分析了3个APT案例。APT组织通常会将恶意代码封装在一个单独的模块内,应用本体在很多时候只是充当了下载器的功能,以此绕过应用商店的检测。除此之外,APT应用会采取多种手段保证自身在目标设备中持续活跃。 适用对象 读者需要具备一定程度的Java编程语言基础和C/C++编程语言基础。本书包含“攻”和“防”两部分实战内容,在安全攻防和软件开发领域有不同的读者定位。 在“安全攻防”领域,适合阅读本书的读者包括:  高校信息安全相关专业的学生;  软件安全研究员;  软件逆向工程师。 在“软件开发”领域,适合阅读本书的读者包括:  高校信息安全相关专业的学生;  高校软件工程相关专业的学生;  移动应用开发工程师。 学习建议 作为网络空间安全领域的新形态教材,本书在内容规划上充分考虑各技术点的“学习曲线”,通过更多承上启下的内容设置,让读者可以学习到更多的前置知识,了解知识点之间的关联,以便读者构建全局的知识体系,从而更深入地理解技术原理,更好地记忆和消化知识点。 以下建议供读者参考。 1. 循序渐进、夯实基础 移动安全涉及的技术面较广,按操作系统来划分主要是Android和iOS。在攻防进阶阶段,核心的攻防技术都涉及底层原理,这需要读者跟随基础篇和理论篇的内容顺序,循序渐进地“吃透”每一个知识点,才能在后面的实战和案例中融会贯通。 2. 注重实践、以练促学 攻防技术的核心在于实践,读者在实战篇中不仅要跟随书中内容去理解知识,还要在实验环境中实践,通过练习来巩固学习成果。本书随书资源提供了实战篇中涉及的工具、样本等文件,读者可以下载到本地进行操作练习。 3. 案例分析、举一反三 本书案例篇将移动安全攻防对抗中不同类型的案例深入地进行分析,帮助读者将理论和实战在案例分析中融合,以达到举一反三的效果,帮助读者尽快积累真实攻防对抗中的经验。本书随书资源还提供了案例篇中涉及的各个恶意程序的样本文件,读者可自行分析实践。 配书资源 为方便读者高效学习,快速掌握移动安全攻防理论与逆向分析的实践,作者精心制作了学习资料(超过500页)、完整的教学课件PPT(共15章超过400页)、参考开源项目源代码(超过70万行),以及丰富的配套视频教程(28课时)等资源,可扫描下方二维码获取。 对于本书存在的疏漏和错误之处,欢迎读者反馈斧正,请关注微信公众号“移动安全攻防”(微信号: mobsecx),依次选择“更多”→“书籍勘误”,提交您的宝贵意见。 特别致谢 感谢公安部全国网络警察培训基地、网络安全110智库、国家网络空间安全人才培养基地、中国网络犯罪治理协会(筹)、中国下一代网络安全联盟、广东省网络安全应急响应中心对本书的大力支持,感谢本书所有业内推荐专家给予的专业修订建议及赞誉。 感谢我的太太庄雪英老师,她在幕后默默付出,给予我始终如一的支持。感谢我的父亲和母亲,用爱和辛劳将我养育栽培,并始终认可我所热爱的事业。 最后,谨以此书献给所有奋斗在中国网络空间安全事业上的工程师们,让我们一起为我国的网络空间安全建设添砖加瓦! 叶绍琛于中国·深圳