绝密干货!网络安全应用“攻防战”,从零基础到精通,收藏这篇就够了!

绝密干货!网络安全应用“攻防战”:黑客与反黑客的巅峰对决!

核心要义:在满足用户“丝滑体验”的同时,把黑客“拒之门外”!

应用安全,乃至整个软件行业,历经多年风雨,各种平台、工具、技术层出不穷,不断迭代更新,但其核心目标始终如一:对抗逆向工程。理论上,任何软件只要有足够的时间和精力,都能被破解。因此,安全的核心在于提高逆向成本。然而,安全又要为产品服务,兼顾用户体验。所以,软件安全的终极奥义是:在满足产品需求的前提下,最大限度地提高逆向成本,让黑客“无从下手”!

“逆向”催生“安全”:一场永无止境的“猫鼠游戏”!

一个平台应用安全的发展,完全是逆向工程催生的。安全产品的出现,也标志着逆向工程已成规模,在该平台已经形成了一套成熟的逆向工具和方法论,可以完成平台系统逆向的基础工作,使黑客可以专注于应用本身的逆向。

逆向工程:从“刀耕火种”到“现代化武器”

各平台逆向“神器”大盘点

安卓逆向

  • apktool:反编译apk文件的“瑞士军刀”,smail可以单独反编译dex。
  • IDA:分析so文件的“倚天剑”。
  • Android Studio 的 smail 插件:借助AS调试模块进行Java调试的“屠龙刀”。
  • IDA, gdb, lldb:so调试的“三叉戟”。

Linux 和 Windows 逆向

  • IDA, OD, Ghidra:分析文件的“三剑客”,同时支持动态调试。

Unity 逆向

  • C#反编译工具:(老黄历了)当年C#反编译的“神器”。
  • 本地调试工具:(老黄历了)il2cpp出现后,本地调试工具“勉强支撑”。
  • (欢迎补充新方案!)

前端JS

  • 浏览器调试工具:明文执行,无需反编译,调试全靠它!

以上这些工具,为我们提供了平台逆向的“基础设施”,让我们得以专注于应用的逆向。

应用逆向:透过现象看本质

应用是什么?

对用户而言,应用可能只是一个安装到系统中运行的文件。但对系统而言,它是“插件”,是系统功能的扩展。这个文件“插入”到操作系统中,依赖操作系统提供的接口,实现应用的功能。

为什么应用可以运行?

应用经过系统平台的特定编译器(或编译集成平台)的编译。编译器是与系统约定俗成的“翻译器”,将人类编写的代码转换成应用。系统平台和编译器一一对应。

应用逆向方法和工具的本质

应用逆向是与开发完全相反的过程。开发依赖编译器转化代码,逆向则需要反编译工具将代码反向转化。反编译工具,就是逆向的“基石”。开发程序通常比较简单,因为有集成式IDE,直接编译即可。但逆向往往工序复杂,因为逆向工具的完成度不够,大多是开源项目,即使后续工具完善,也常有缺陷,需要手工“避坑”。

逆向工具的“前世今生”:从“草根”到“专业”

逆向时,我们很少考虑逆向工具的原理,就像开发时不用考虑编译器和IDE的原理一样,这是完全抽离的透明技术层。但逆向与开发不同,开发的IDE工具由官方、社区、公司等大型组织提供,比较完善,bug修复快,问题解决方式更趋于正确,能多方协调。逆向工具往往由开源项目发起,很多时候是某个技术大牛开发的,工具本身可能有bug,对逆向问题的解决方式可能是片面的,更新不及时,做不到多技术融合的IDE平台等等。因此,逆向的很多问题需要我们自己解决。

应用文件格式解析

应用文件是应用的载体。开发时,编译工具将代码编译组合成某种格式,存储应用信息,包括代码、变量、配置文件等。例如:

文件格式描述
Android APK包含axml、dex等
Linux ELF可执行文件和链接库的标准格式
Windows PE可移植可执行文件格式
Davilk DEXDalvik虚拟机的可执行文件
前端JS, PHP脚本语言,文本格式,系统自带解析工具

文件格式解析是逆向工程静态分析的基础。例如:

  • apktool:解析axml、dex等文件格式。
  • readelf:解析ELF文件格式。
  • IDA:支持解析多种文件格式。

代码还原(反编译、反汇编)

将文件格式解析出的数据内容,解析还原成开发源码。例如:

  • 反汇编:静态编译型语言(如C、C++、Java)编译成字节码运行,逆向时需先解析成汇编,再反汇编成源码。
  • 反编译:将字节码或中间代码转变成开发代码。目前,对于高级语言或经过编译器编译的代码,还原效果较好。但对于人工编写或主动对抗的代码,还原程度不高。原因是编译器编译的代码符合一定规则,不同工具编译的规则可能不同。像IDA这种反编译工具,可以选择编译器,它针对不同编译器有不同的规则,或研究过不同编译器编译的代码特征,指定策略进行还原。

应用平台安全架构突破

为了保证应用安全,应用平台通常有系统安全措施保护应用。而要侵入应用进程,进行动态观测、读取修改内容,就需要绕过这些措施。例如:

  • Android/iOS签名问题:iOS调试需修改配置才能ptrace,Android上Java要么改系统rmo,要么改配置才能调试。
  • SELinux、MAC等安全机制:这些机制会不断更新,需要不断兼容学习。

应用系统底层运行环境对接

应用逆向不仅包括文件分析,还包括动态执行时的观察,颗粒度越细越好。

  • 调试系统:很多平台提供API或工具,也可使用系统提供的API自己编写,效果好,但易被检测和对抗。
  • 进程注入:方法多样,因平台而异,不易被检测,但颗粒度不够细,如不能单步,只能读写。

应用运行后,会通过加载系统将文件加载到内存中,可能改变或不改变内存分布。我们需要了解应用加载到内存中的分布、解析和使用。IDA附加进程后,会解析加载的所有so,可以查看符号、函数、内存分布,这就是解析。

运行系统架构体系

在分析代码时,会遇到CPU代码执行(如ARM)和Android Davlik指令执行,这要求我们熟悉指令和架构体系。例如:

  • ARM三级流水线:某些特殊指令,如果不了解,代码走向会难以预测。
  • 特殊指令:如ARM的IT指令,IDA早期版本不支持,无法单步。

模块、库管理系统

模块、库管理系统虽非基础分析必需,但能加速分析。通过它,可以快速了解应用使用的库,对照开源项目或系统库说明,加快分析速度。例如:

  • Android native 的solist
  • Java层的类加载器

我们可以通过特定API或函数,对接库管理系统。

应用文件加载系统

应用运行后,通过加载系统将文件加载到内存,可能改变内存分布。我们需要了解应用在内存中的分布、解析和使用。IDA附加进程后,会解析加载的所有so,查看符号、函数、内存分布。

应用动态运行观测

应用逆向不仅有文件分析,还有动态执行时的观察,颗粒度越细越好。调试系统和进程注入是两种主要方法:

  • 调试系统:许多平台提供API或工具,也可以使用系统提供的API自己编写。效果好,但容易被检测和对抗。
  • 进程注入:方法多样,因平台而异。不容易被检测,但颗粒度不够细,例如不能单步,只能读写。

应用语言底层运行环境对接

对接开发语言运行的环境,而非运行系统的底层系统语言对应环境。例如:

  • 逆向so:目标语言系统对应汇编,但可用C语言环境对接,使用C中的变量、函数。
  • C++对接:获取C++对象地址,导出其成员函数的函数符号,用函数符号和C++对象,完成C++中对象成员函数的调用。
  • Unity游戏:保护后变成il2cpp,代码变为native。理论上,可以用il2cpp编译文件注入并调用,但需严格环境对接。项目frida-il2cpp-bridge通过frida解析Unity对象、类,直接通过frida调用,是经典案例。

应用安全保护:筑起“铜墙铁壁”!

应用加固:“给应用穿上‘防弹衣’”

加固的出现,是因为静态应用文件分析工具的出现,逆向分析已成规模。加固公司宣称应用文件已不安全。应用加固主要有两方面:

  • 文件格式加固:针对静态存储的文件,即使运行后也不会改变,只是加载到内存解析。包括zip加密(需密码)、axml加密等。这类技术通常不能长期奏效,主要利用时间差,利用逆向解析工具的bug和文件解析漏洞加固,阻止逆向程序工作。这类文件无需保护内容,因为会被内存dump,且文件内容静态,dump一次即可,成本高。
  • 文件内容加固:当无法阻止应用文件逆向时,对文件内容加固。类似HTTP协议,通讯易被拦截,HTTPS对内容加密。文件内容加固需同时针对静态分析和动态dump。静态分析时,无法找到正确内容。动态运行时,内容需解密、加载、运行,很多dump工具基于此原理。动态对抗方式是自定义加载,不依赖系统API,让dump无从下手。VMP、添加代码转换器提高逆向难度,需先逆向VMP框架。代码混淆使找到的内容难以理解。
运行对抗:“让黑客‘寸步难行’”

对于加固的应用,脱壳的主要方法是运行时内存dump(静态还原难度高,基本不用)。风控、设备指纹、用户画像等在运行时动态计算。逆向工程可突破应用或系统安全,安全公司对此进行防护。

特征检测

运行对抗主要检测是否被攻击,无法防御。Android上主动ptrace自己,兼容性差,对从zygote注入的无防御。PC也一样,可修改系统完成攻击。运行对抗主要在检测,是特征对抗。例如:

  • ptrace检测:多种,可称通用特征检测。
  • frida、xposed等:可进行专用特征检测,如so库名、类名、符号、字符串、包含的库,只要开源,基本能防御。

捕获能力

特征检测主要针对开源项目和系统共用特征。但很多逆向工具非开源,特征检测失效,无法处理。此时需捕获,先确定是否被攻击,再查看内存分布、系统库等,找到逆向工具并dump。这需要通用特征检测点位足够多,与专用特征系统分开,最好设“鱼饵”,如Web蜜罐。

自杀能力

操作系统有调试功能、故障反馈、内存转储。检测到攻击后,需阻止程序运行。有自杀退出进程、卡死、无法联网、风控对抗等。但阻止进程运行不能触发系统反馈,如自杀退出进程,常有大量堆栈返回,暴露代码位置。卡死、单线程退出,调试时易定位现场,暂停现场。风控对砍,功能无法使用,但客户端可主动调用、分析,问题多,需慎重。

代码分析对抗:“让代码‘面目全非’”

无论多少保护,程序终可能被脱壳,或运行时找到真正代码。安全对抗手段是混淆、修改代码,不改变原功能,但难理解、调试、还原。

反编译对抗

将二进制反编译成汇编,称反编译,很简单。但前提是分辨数据和指令,确定代码地址(x86架构不同有不同反编译问题)。IDA反编译成功是因无反编译对抗。如自写汇编,指令当数据,代码执行顺序用ROP漏洞利用代码片段,即使反编译,实际执行结果也不同。反编译建立在程序符合标准上。国外有开源项目,将二进制转汇编输出,也可编译汇编,也基于此。

反汇编对抗

将汇编函数还原成源码,思路同反编译。还原基于规则和标准。如用汇编写裸函数,不符C函数调用规则,函数举例长,函数间插入别的函数,都可能造成无法分析。有公司写全局跳转汇编,函数顺序调用变参数调用全局跳转表,再调用目标函数,估计用LLVM写。

混淆

此方案流行,因LLVM解决大部分底层问题,更易开发混淆编译器。混淆在PC上就有,但当时不知手工还是批量插入,未深入分析。目前很多混淆方案基于LLVM,但开源混淆和我遇到的不完善,虽改变代码,但人工分析加代码优化可去除,主要问题是无法真正融入源码。如OLLVM,miasm早年公布的还原方法不通用,对定制OLLVM无法还原,但符号执行+静态代码分析可通用还原。不知是否有完美混淆,但若能融入代码,与代码交互,保护效果更好。

VMP

网上说VMP是混淆。VMP在逆向中,似不可逆代名词。遇VMP,可知难而退。我有幸遇到几个VMP,难度不高,且还原。VMP逆向需先逆向框架,否则无产出,这是难点。框架结构完全逆向后,需逆向指令,知指令替换翻译成什么,即可还原。VMP保护问题全在框架,无框架保护会降低分析难度。

动态分析运行对抗(指令trace)

程序分析时,动态运行通过环境、结果分析代码效果更好。我知道的有:

  • frida指令trace
  • 调试器指令trace
  • Unicorn(Unidbg)指令trace
  • 网上大神写的虚拟VM项目(外部人员不懂,不会用)

其中Unidbg效果最好,但需解决环境。frida未用。调试器不遇对抗效果好但慢。IDA的trace易崩溃,不稳定。单独写是因逆向分析中,动态运行分析占大头,指令trace分析VMP、算法效果好。甚至可做指令trace+数据分析软件,专门代码分析。目前对trace对抗只研究调试trace对砍,Unidbg和别的需尝试。对抗主要在指令,有些指令有特殊问题,如调试时代码执行不过去,trace卡死,或批量读写指令对当前运行内存段copy再运行,可检测断点。别的方法记不住。

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

****************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值