欲知己之所防,先知彼之所攻——论Hook 技术的攻防对抗

简介: 矛盾的同一性与斗争性原理几乎适用于所有攻防对抗。

矛盾的同一性与斗争性原理几乎适用于所有攻防对抗。

上期,我们在《论设备指纹的唯一性:始于硬件ID,终于云端交互》一文中曾介绍了硬件ID 作为设备指纹的基础属性的发展演变——即当硬件属性不再作为设备指纹的唯一属性时,为了保证设备指纹的唯一性需要在硬件ID的基础上增加更多识别标准以及动态可变的算法,事实上这就是攻防对抗的典型例子。

再举个例子。例如在设备指纹的攻防对抗中,黑灰产要想绕过设备指纹进行攻击,就必须“伪装”自己。此时,黑灰产的绕过思路主要有以下两种:

1、如何把一个设备变成多个设备:

比如,在刷单场景下,让App 反复认为这是一个新手机,从而重复领取新人红包;

2、如何把一个设备变成另一个设备:

比如,在身份认证的场景下,把攻击者的手机伪造受害者的手机,让App登入受害者的账户,窃取资金、用户信息等。

但有矛就有盾,黑灰产的绕过思路自然也逃不过安全研究者的“法眼”。

今天,我们就以Hook的攻防对抗为主题,讲讲攻防对抗的思路。

初识Hook 技术

首先,简单认识下Hook 技术。

Hook技术是一门广泛用于计算机攻防对抗的技术。它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息进行处理。

我们可以简单的把使用Hook技术的人比作钓鱼人,而Hook技术就像他的渔具,系统中不断传递的事件就像一条条游鱼,钓鱼人通过Hook技术将他想要的目标事件钓上(Hook技术一般是有指向性的),然后就可以对事件进行修改,再让其正常运行,达到技术人员的目的。Hook技术常用于热补丁上线、API劫持、软件破解等技术操作。

比如我们常见的鼠标和键盘,如果你的电脑被Hook,那么也就意味着你的任何操作都在对方的掌握中。

Hook技术不但适用于x86系统,也适用于基于简单指令集的移动平台系统,比如手机等设备。其中,针对移动设备的Hook技术主要以手机为主。

对于Android的Hook框架,主要分为三类,一类是针对Native层,即系统层的Hook框架,使用PLT/GOT Hook或inline-Hook的框架,如bhook、xhook、yahfa等,一类是针对Java层的Hook框架,如Xposed,还有一类是比较特殊的Hook框架——Frida,它是针对全平台Hook而设计的框架,适用于x86\x86_64\arm\arm64架构的系统,在iOS端上的Hook主要通过Frida框架进行技术实现,而Frida在Android上的Hook技术实现也有不少的受众,但主要仍以Xposed类框架为主,主要原因就是Xposed在Andorid上的稳定性更好,并且特征更容易隐藏。

image.png

接下来,我们就以Xposed以及以Xposed为核心迭代的另外两种Hook框架(Edxposed、Lsposed)展开来讲讲如何利用Hook进行攻防对抗。

未知其攻,焉知何守——利用Hook 技术怎样做攻击?

随着安卓版本的迭代更新,Xposed框架也随之迭代出了新的Hook 框架。

image.png

目前安卓平台的主要Hook框架以Lsposed为主,我们就以Lsposed对Android应用进行Hook,看下如何利用Hook 进行攻击。

首先,正常情况下使用Lsposed需要几个前置条件:

一台能够解除BootLoaderLock的手机;
准备好自己手机系统的boot.img;
准备好Lsposed模块安装包与Magisk安装包;
一台装好ADB工具的电脑。
image.png

上述条件准备完成后,准备安装和使用Lsposed。

安装完成后,我们就可以利用 Hook 进行攻击。

具体过程如下:

1、对目标App 进行反编译分析。

要想让鱼上钩就必须知道鱼的属性。所以成功安装Hook 的第一步就是对目标App进行反编译分析。这里我们使用jadx-gui对App 进行反编译分析。
image.png

actf反编译

利用jadx-gui可以看到反编译出的源码。如下图所示,通过对该App反编译我们得出了其想要传递Flag 的动作,但要注意的是,这个信息是一个不确定的值,我们需要进一步验证。
image.png

actf运行结果

通过验证可知,无论你点击按钮多少次,这里都会只显示“你还真信点击就有flag啊?”这条信息。那么,接下来,就是我们要自己掌握自己“抓鱼”的过程。

2、编写代码插件,攻击目标App 的“弱点”

此时,我们需要编写一个Hook插件,修改其中的一些参数,然后可以直接获取其已经算好的MD5值(MD5是一种加密算法。又名:不可逆加密算法。由于加密算法太强大,专门用来加密密码。MD5的值就是对任何一个文件的明文密码进行加密后的密码,又称“数字指纹”,任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。)是什么。

首先我们可以使用Android Studio或者已经装有Android插件的Idea,打开一个新的项目,选择一个没有界面的工程:
image.png

新建hook工程

需要注意的是,在写Xposed Hook模块时,为了让Xposed框架识别,需要在项目的assets目录下(如果没有,可以直接新建assets目录)创建一个叫做xposed_init的文件,并且里面的内容为你的包名+你的主类名:
image.png

包名与主类名
image.png

xposed_init配置

其次,打开AndroidManifest.XML文件,在其中填入如下内容:
image.png

AndroidManifest.xml项目位置
image.png

AndroidManifest.xml配置

配置完AndroidManifest.xml后,我们就可以开始编写Xposed Hook模块了。具体如图:
image.png

build.gradle在项目中的位置
image.png

build.gradle的配置

在Xposed中,Hook的方法有两种,一种是before,另一种是after,其实现的原理是通过art的slot实现的,可以在原先被调用的方法前后加入两个插槽,然后去执行我们的hook,可以形象的理解为下图:
image.png

Hook前后方法调用的变化

由图可知,目标App主要是有两部分组成,第一个是MainActivity主类,还有两个类中的方法,一个是onCreate方法,这是MainActivity初始化的一个方法,第二个就是getFlag方法,这个方法也就是我们的目标,通过Hook这个方法,我们可以得知代表flag的MD5值是什么。

我们的思路就是要先Hook住getFlag这个方法,假设我们Hook住了getFlag这个方法,我们最关心的自然是传入的字符串值,具体的Xposed模块代码如下:
image.png

Hook模块代码

通过这种方式我们就可以得到我们想要的MD5值,进而修改参数,实现对该App的控制。
image.png

如何对抗Hook攻击?

正所谓有矛就有盾。针对Hook攻击,也衍生出了防御的方式。

由于Xposed在Hook的时会调用特定的ClassLoader,那么就可以通过再次加载ClassLoader的方式来检测Xposed框架,例子如下:
image.png

查找ClassLoader

1、利用系统的API getInstancesOfClassesMethod去获得ClassLoader,通过这种方式只能获得一次CL,我们就可以遍历App内所使用的Classloader。

2、将所有的CL遍历后,我们就可以通过它的成员缓存(目标Hook方法缓存)来检测它的Hook。
image.png

获得Hook的成员
image.png

Hook成员

这种检测方式依赖Android系统提供的VMDebug.getInstancesOfClassesMethod()函数,而这个函数只在Android 9-11上存在,限制方案的应用范围。并且,作为一种反检测方法,这个关键函数也可以被Xposed进行hook,只需控制此函数的返回即可完成反检测。

除了ClassLoader方式对Xposed Hook的对抗,也还有其他各类较传统的对抗方式,但也都有相应的反对抗方案,而顶象产品具备独有的对抗方式,并且追加了反检测、反对抗技术,可以更准确地识别Hook风险。

当然,在更深层面,我们也可以利用Hook技术将传统的Web攻击技术带入到移动端中,在移动端中进行攻防演练,补全作为红队的技能树,也可以针对Hook技术与攻击者进行对抗,保障自身的App安全。

整体来看,攻防对抗是一个持久战,需要安全厂商们持续不断的努力。

在攻防对抗方面,顶象基于多年来的技术积累,目前已实现对安卓、iOS、H5、小程序等全方位的安全保护,有效防御调试、注入、多开、内存Dump、模拟器、二次打包和日志泄露等攻击威胁。独有“蜜罐”功能、保护Android 16种数据和文件,提供7种加密形式,率先支持对iOS免源码加固。

相关文章
|
13天前
|
机器学习/深度学习 分布式计算 供应链
阿里云先知安全沙龙(上海站) ——大模型基础设施安全攻防
大模型基础设施的安全攻防体系涵盖恶意输入防御和基础设施安全,包括框架、三方库、插件、平台、模型和系统安全。关键漏洞如CVE-2023-6019(Ray框架命令注入)、CVE-2024-5480(PyTorch分布式RPC)及llama.cpp中的多个漏洞,强调了代码安全性的重要性。模型文件安全方面,需防范pickle反序列化等风险,建议使用Safetensors格式。相关实践包括构建供应链漏洞库、智能化漏洞分析和深度检测,确保全方位防护。
|
10天前
|
开发框架 安全 网络安全
阿里云先知安全沙龙(杭州站) ——实网攻防中信息收集的艺术
渗透测试的核心在于信息收集,涵盖人和系统的多维度数据。实网攻防流程包括资产收集、漏洞利用、稳固据点、内网横向和控制靶标五个阶段。外网信息收集旨在全面了解目标单位的公开信息,寻找突破口;内网信息收集则聚焦网络连通性和密码凭证,确保攻击行动的有效性和针对性。整个过程强调逐步深入的信息分析,为后续攻击提供支持。
|
安全
2018先知白帽大会 | 重温白帽文化,只为技术而来
2018年6月16日,即将在北京上演一年一度的“先知”白帽盛会。尊崇“白帽文化”,我们带来的是一场真正属于“白帽子”的技术大赏。 12位安全领域的佼佼者,聚焦“攻与防”的技术践行。通过「安全技术成果」和「实战经验」分享,在场的每一个人都将收获满满。
3676 0
|
安全
先知创新大会议题第三弹:极致的技术追求
技术的正义 以创新、技术为生命的意义,以极致为目标。 极客,用技术作为武器的战斗在尖端技术的前线。   2017 先知创新大会, 以技术之名,以极致致敬, 不接受平庸和陈旧的安全人。
2208 0
|
7天前
|
安全 JavaScript 前端开发
阿里云先知安全沙龙(西安站) ——浅谈XSS漏洞挖掘与构造思路
本文介绍了DOM-XSS构造、运算符的威力和模板字符串妙用三个主题。通过多个实例图解,详细展示了如何利用DOM特性构造XSS攻击、JavaScript运算符在代码中的巧妙应用,以及模板字符串在开发中的灵活运用。这些内容对提升Web安全意识和编程技巧具有重要参考价值。
|
8天前
|
机器学习/深度学习 人工智能 安全
阿里云先知安全沙龙(武汉站) ——AI赋能软件漏洞检测,机遇, 挑战与展望
本文介绍了漏洞检测的发展历程、现状及未来展望。2023年全球披露的漏洞数量达26447个,同比增长5.2%,其中超过7000个具有利用代码,115个已被广泛利用,涉及多个知名软件和系统。文章探讨了从人工审计到AI技术的应用,强调了数据集质量对模型性能的重要性,并展示了不同检测模型的工作原理与实现方法。此外,还讨论了对抗攻击对模型的影响及提高模型可解释性的多种方法,展望了未来通过任务大模型实现自动化漏洞检测与修复的趋势。
|
8天前
|
运维 供应链 安全
阿里云先知安全沙龙(武汉站) - 网络空间安全中的红蓝对抗实践
网络空间安全中的红蓝对抗场景通过模拟真实的攻防演练,帮助国家关键基础设施单位提升安全水平。具体案例包括快递单位、航空公司、一线城市及智能汽车品牌等,在演练中发现潜在攻击路径,有效识别和防范风险,确保系统稳定运行。演练涵盖情报收集、无差别攻击、针对性打击、稳固据点、横向渗透和控制目标等关键步骤,全面提升防护能力。
|
11天前
|
存储 缓存 运维
阿里云先知安全沙龙(上海站)——后渗透阶段主机关键信息自动化狩猎的实现与应用
本文介绍了在后渗透测试中使用LSTAR工具和PowerShell脚本进行RDP状态查询、端口获取及凭据收集的过程,强调了高强度实战场景下的OPSEC需求。通过MITRE ATT&CK框架的应用,详细阐述了凭证访问、发现和收集等关键技术,确保攻击者能够隐蔽、持续且高效地渗透目标系统,最终获取核心数据或控制权。文中还展示了SharpHunter等工具的自动化实现,进一步提升了操作的安全性和效率。
|
10天前
|
传感器 安全 物联网
阿里云先知安全沙龙(北京站) ——车联网安全渗透测试思路分享
本文介绍了智能汽车的整车架构、协议栈结构、攻击点分析、渗透思路及案例分享。整车架构涵盖应用层、协议层和物理层,详细解析各层次功能模块和通信机制。攻击点包括Wi-Fi、USB、NFC等,展示车辆通信接口和系统组件的安全风险。渗透思路从信息收集到系统内部探索,利用固件漏洞控制车辆功能。案例展示了网段隔离不足导致的SSH访问和OTA日志审计漏洞,揭示了潜在的安全威胁。

热门文章

最新文章