Kali Nethunter
前文中介绍了Nethunter Rootless
的使用方法,和可以在任意手机上安装和使用Kali Linux
的特性。官方博客中说,Nethunter Rootless
可以最多只有85%
的威力,带root
、三方recovery
和Kali
定制内核的完整版Nethunter
才能发挥100%
的威力,接下来就来康康,100%
威力是啥样的。
本文实验过程涉及的所有附件均位于
Github
主页中:https://github.com/asukaf1ght/ArmDevicesWeaponized
安装流程详解
首先安装起来就会非常复杂,而且也不是所有手机都能装,只有官网支持的设备才能装。这里使用Nexus 6p
(angler)进行举例,主要流程分四步:
- 刷入官方原版镜像:这里我们重新刷入,避免原来
rootless
系统的影响; - 三方
recovery
:肯定是twrp
; -
root
:选择经典的SuperSU
; - 刷入
Kali Nethunter
;
第一步这里不再赘述,与前文操作流程是一致的。
刷机结束后,从附件里找到SR5-SuperSU-v2.82-SR5-20171001224502.zip
,上传到手机上。
# adb push SR5-SuperSU-v2.82-SR5-20171001224502.zip /sdcard/
SR5-SuperSU-v2.82-SR5-20171001224502.zip: 1 file pushed, 0 skipped. 14.4 MB/s (6882992 bytes in 0.4
用附件的种子nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip.torrent
,下载n6p
的Nethunter
,下载完算下校验码,再上传到手机上去。
# adb push nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip /sdcard/
nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip: 1 fi...hed, 0 skipped. 16.7 MB/s (1317485081 bytes in 75.189s)
手机重启进入bootloader
:
# adb reboot bootloader
在附件里找到twrp-3.3.1-0-angler.img
,用fastboot
刷入进去;
# fastboot flash recovery twrp-3.3.1-0-angler.img
target reported max download size of 494927872 bytes
sending 'recovery' (16844 KB)...
OKAY [ 2.019s]
writing 'recovery'...
OKAY [ 0.246s]
finished. total time: 2.265s
刷完之后按音量向下键,选择Recovery mode
,按电源键进入。
进入Recovery
之后,选择Install
→SR5-SuperSU-v2.82-SR5-20171001224502.zip
开始刷机。
刷完之后选择Reboot
→Do Not Install
重启进入系统(可能会重启数次)。
进入系统之后发现已经有了root
:
# adb shell
angler:/ $ su
angler:/ # whoami
root
再次进入recovery
,把nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip.torrent
刷进去,中间解压Kali rootfs
的地方,会至多25
分钟。
刷机结束后进入系统首次也要先点击Nethunter
的应用,申请的所有权限都给,左侧导航进入Kali Chroot Manager
,点击START KALI CHROOT
,只要初始化这一次,后续无论如何重启都会出现如图所示的Everything is fine and Chroot has been started!
。
至此详细刷机流程结束。
解锁完整linxu
操作系统
这回使用ssh
不用再通过termux
了,直接Nethunter
应用中选择Kali Services
,勾选RunOnChrootStart
,并打开右侧开关:
我们把SSH
和APACHE2
一起安排上了,那么远控和网页服务器就一起都有了,可以作为内网的cc
服务器,下发一些木马或热补丁之类。
终于拥有完整版的apt
和htop
了。
通过手机的type-c
接口,连接:
- 一个有线网口接有线网络
- 一个
USB
- 一个无线网卡
# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0951:1643 Kingston Technology DataTraveler G3
Bus 001 Device 004: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
Bus 001 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. 4-Port USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
可见全部识别出来了,并且在有线网络上获得了192.168.0.7
的IP
地址。
存储的U
盘也没有问题:
扫描个无线网:
基本上拥有了比较完整的Linux
功能。
WIFI
连内网,CC
走流量逃逸
一般情况下,手机开启流量,npc
肯定是通过流量连接cc
的这一点毋庸置疑。
通过手机流量卡直接将数据传出去可以绕过内网网关,实现流量逃逸。
如果手机同时开启WIFI
连接内网之后,npc
必定是通过WIFI
网络连接cc
服务器的,这样就容易被内网网关检测到。不管做的多么隐蔽,总归要从企业网关出去。
如果可以让npc
单独走手机卡流量,其余还是跟正常手机一样,该去bilibili
看宅舞,还是正常追剧、炒股、聊QQ还是与正常流量无异,实现最大程度的伪装,这样的设想能否实现呢?
其实是可以的,只需要在wlan0
的路由表中,单独加一条指定cc
的IP
的定向静态路由即可。
注意,这个加一条路由不是简单的一条命令加到系统里就行,得先了解下现代安卓手机的路由系统的内部架构。
从Android5.0
之后,考虑要对多网络的支持,安卓采用了多路由表,在同一时间下,Android
系统可以允许多网络类型连接,而且并不是简单的网络共存,而是每个网络有一套自己的DNS
,网关,路由表。比如eth0
,wlan0
,手机流量卡会分别有自己独立的一套。
这样应用层在建立Socket
连接的时候,可以自由选择使用哪套网络来完成实际的请求。这里还涉及到另一个新的概念不同网络的标识netid
,应用层可通过绑定指定的netid
来设置该应用走指定的网络,此处感兴趣可以去网上搜索,可以搜到很多与netid
相关的代码。
在Android 5.0
之前,在同一时间下,Android系统只能允许一种网络类型连接。之后在多网络的情况下,系统是如何选择的呢?这就需要引入一个关键名词——策略路由,详细资料大家可以在网上搜索。最终我们在策略路由的基础上,更改路由表wlan0
,添加单条静态路由。
理论知识有了之后,接下来就是动手实践。
首先来的得到我的一些环境的地址:
手机流量卡出口地址:112.192.13.128
小区出口地址:223.166.231.xxx
手机流量卡的内部IP是:10.53.237.30
手机WIFI
的内部IP是:192.168.5.28
看看手机中都有哪些默认路由:
# ip route show table 0 |grep default
default dev dummy0 table dummy0 proto static scope link
default via 192.168.5.1 dev wlan0 table wlan0 proto static
default via 10.53.237.29 dev rmnet_data0 table rmnet_data0 proto static
unreachable default dev lo proto kernel metric 4294967295 error -101
unreachable default dev lo proto kernel metric 4294967295 error -101
unreachable default dev lo proto kernel metric 4294967295 error -101
default dev dummy0 table dummy0 proto static metric 1024
unreachable default dev lo proto kernel metric 4294967295 error -101
default via fe80::d545:7c38:5509:f2a0 dev wlan0 table wlan0 proto ra metric 1024 expires 657sec
unreachable default dev lo proto kernel metric 4294967295 error -101
unreachable default dev lo proto kernel metric 4294967295 error -101
可以得到手机流量卡的路由器,也就是下一跳为10.53.237.29
,正是通过该地址,去跳向cc
。
向路由表wlan0
中增加指向VPS
(cc
)的单条静态路由:
# ip route add table wlan0 118.126.XX.XXX via 10.53.237.29 dev rmnet_data0
添加完成后路由表wlan0
是酱紫的:
# ip route show table wlan0
default via 192.168.5.1 dev wlan0 proto static
118.126.XX.XXX via 10.53.237.29 dev rmnet_data0
192.168.5.0/24 dev wlan0 proto static scope link
也就是对于路由表wlan0
来说,通向VPS
(cc
)时,是走10.53.237.29
该IP
作为下一跳的,通过rmnet_data0
网卡设备。
最后来检查下效果如何,手机播放VPS
上的视频康康,确实是通过手机流量卡去访问该mp4
的,实验成功!
最后来试下npc
,看看客户端ip
显示的是多少:
可以看到还是手机流量卡的地址,手机其实是连着wifi
的,可以看到curl ip.sb
得到的还是小区出口IP
。
而且使用增加单条静态路由的方式,是不会影响手机作为代理进行内网扫描所需的路由表wlan0
的。
接下来就可以把手机配发给“卧底”,让他去连内网了,不管是无线网罗还是有线网络,都可以轻松应对。
勒索、远控、APT
前文在介绍渗透测试流程时,讲到实施人员可以尝试利用WIFI
和USB
连接,将移动安全小组提供的移动端RAT
植入到目标移动终端中,这里稍微具体一些、展开讲下。
新手在学习MetaSploit
时,也会照着书中的案例依葫芦画瓢:
- 生成一个恶意
apk
- 给
apk
签名 - 让目标来安装
这样就可以收到目标回传的信息,实施更多的控制。
当然现实世界的进攻会非常复杂和依赖于各种环境和条件的限制,不过不得不承认,进攻的本质确实是这三条,分别对应:
- 完成恶意应用的具体功能模块
- 通过各种免杀技术使
App
可以存活并运行 - 各显神通诱骗目标下载、安装和使用
功能:远控、上传、勒索、加密
哪些功能恶意应用必备的呢?
最起码联络cc
,通过服务端下发指令并执行要有吧:
获取并上传用户短信:
通过Accessibility Service
直接操作模拟点击手机界面:
上传用的定位、串号、手机状态等信息:
上述这些只是冰山一角,如果配合root
可以做到对其他应用如手机浏览器进行注入,启动用户手机指定App
,删除指定应用,更新恶意插件等恶意行为。
当然现在的手机想要root
是非常困难了,但并不妨碍很多高级APT
团伙使用0day
或1day
来开发Exploit
进行远程root
,这就需要更为昂贵的投入和深厚的技术功底了。这也是为何现在的APT
频频有国家队作为背后支撑的原因。
当然在社会上被广泛使用的还是比较低级的加密、锁机、或者上传视频进行勒索。
当然不要小看这些低级技术的危害,比如我们的时间管理大师——罗志祥就曾经在这上面栽过跟头:早期罗志祥与网友裸聊画面曝光 曾上节目哭诉辩解。
不排除甲方老板也好这一口,对吧。比如有些人表面上在白天他是演员,其实到了晚上他是运动员。社工很多时候是真的比0day
、1day
好用。
在内网把各种资料都搜集到了之后,如何不走网关不动声色地上传到cc
呢?这就用到前文讲的手机卡流量逃逸了。
传统免杀技术:混淆、加密、VMP
这部分其实跟App
加固是重合的,因为原理是一模一样的。
前者的目标是保护App
不被逆向破解者给分析,后者是为了掩盖特征,逃过杀软或者行为管理软件的识别。
你用msf
生成一个payload
,啥也不干就发到对方机器上,那就等于去送人头,不杀你杀谁呢?或者攻击团队煞费苦心开发了好几个月的木马,啥也不防就发过去,其实就是给防守团队送源码去的。
总得混淆、加密甚至上个VMP
保护下吧,虽然还是会被病毒分析人员分析,并且肯定会被扒个底朝天,但是恶心他一下也好啊。
这部分技术非常多,这里主要也就是给个索引,大家有兴趣可以自行深入分析。
- 混淆:
- 资源混淆:腾讯开源的Android资源混淆工具使用说明
- 代码混淆
- Java混淆:字符串加解密、免费的ProGuard和商业版DexGuard
- Native混淆:Ollvm、字符串混淆、自主混淆器
libsgmain
- 反反编译器:
- 花指令
- 重打包对抗:对抗
jd-gui、dex2jar、baksmali、shakaapktool、androguard
- 反调试:
- 17种反调试收集:https://bbs.pediy.com/thread-223460.htm
- 签名校验、模拟器检测、hook检测、root检测:梆梆:https://bbs.pediy.com/thread-223141.htm
- 加固
- 业务场景加固(安全键盘、防拷贝、防截图)
- Java源码加固(华为方舟Java2C):https://zhuanlan.zhihu.com/openarkcompiler
- Dex加固
- so加固
- 节加密、函数加密、动态注册、hook重定向:https://github.com/guanchao/AppProtect
- 自定义linker:https://bbs.pediy.com/thread-225798.htm
内存免杀技术:重打包、VA
、Hotfix
直接送个apk
给对方,让对方安装,还是难度颇大。
有简单的方式就是拿市面上的大厂App
解包之后,安插进自己的代码,重打包,然后可以:
- 创造机会让对方下载,比如公司规定安装某银行的手机客户端,邮件里还附上了
apk
,对方大概率会下载安装; - 或者有机会接触对方手机的话,直接就把他原来的微信卸载了,装上自己重打包的微信;你的代码就跑在微信里,所有的权限都继承自微信,那其实他在攻击者眼中就没有秘密了。
其实重打包做免杀的技术已经广泛应用在山寨App
的黑色产业链之中了,他们的盈利方式是通过往热门应用“插包”、“重打包”的方式,植入广告劫持模块进行刷量作弊,当正常用户被诱导安装使用了这些真假难辨的山寨应用后,即可实现对广告主的,以为自己在正常使用App
,其实是在疯狂点击广告,实现对正规广告主的”薅羊毛”行为。
想要将远控、或上传等代码隐藏好,实现不落地加载的话,可以将核心逻辑不要直接重打包进包里,而是做个hotfix
,等App
执行一段时间之后,再通过下发补丁包,让已安装的客户端来执行远控代码。
得益于安卓平台的开放性,热修复在安卓平台几乎无所不能,可以修复资源文件、修复代码(类、方法等),甚至连so
库都可以修复,常用的框架有阿里系的AndFix
、Hotfix
,腾讯系的Tinker
、QFix
,还有美团的等等。
这些本应用于动态修复bug
、免重安装修复bug
的热修复框架,到了红队手中也是摇身一变,就好比张小泉的菜刀,切菜好用,摇身一变就是“中国菜刀”。
最后再介绍一种动态掩盖特征的方法,那就是用VA
来“加固”,VA
等多开工具将安卓系统与VA
内的应用隔离,使得应用的静态特征被动态掩盖,目前己有广泛的恶意应用使用VA
对自身重打包,重打包后的应用包名、软件名与原应用不同,从而逃过静态查杀。
等到VA
运行时,可以解密恶意应用Apk
,通过反射等技术欺骗安卓系统来运行未安装在系统中的Apk
,到这一步就跟正常的App
无异了,这方面也有一篇详细的文章:《VirtualApp技术黑产利用研究报告》。
VA
的本质就跟Windows
平台上的壳技术差不多,先于恶意应用前运行,瞒过杀软之后,再将恶意应用释放出来运行。
加载器:社工、水坑、钓鱼、引流
payload
功能实现了,做了加密和混淆加固了,核心逻辑做了热补丁动态下发(可以到内网的小美手机那里下,前面不是开启了APACHE SERVER
么?),如果目标还是不安装,那一切还是等于零。
其实前面已经说了几种方法,比如伪装成集团IT
部分要求大家统一安装,这也是最常见的社会工程学手段,俗称钓鱼或者水坑,大家经常收到这种员工薪酬.xls
、员工通讯录2020版.doc
等文件,打开即会释放宏木马,攻陷PC
,如果此时企业App
的开发者把开发手机也连在电脑上,也会给处于开发者模式的手机安装恶意软件。
也可以直接攻陷集团MDM
服务器,直接分发木马,见这篇:Hackers breach company’s MDM server to spread Android malware,或者直接想办法拿到对方的手机,这也是直接出击的社工了,“美人计”甚至“美男计”也属于社工的一部分。兵者、诡道也。
社工的成功率是非常高的,所以大家也会经常受到各种诱导点击链接短信,菠菜、色流等一大堆。不要小看人类最原始的本能欲望,色流在黑产中的应用范围之广超出想象,前面说的时间管理大师都会中招。
说不定油腻中年老板就喜欢这些妹妹呢?这些照骗确实让人把持不住。
总结:只是开始
在ARM
设备武器化指南攻击篇中,介绍了Kali Nethunter
包括Rootless
版本和完整版的安装、使用和简单上手实践,还有一般木马、远控的免杀思路和方法。
其实Kali Nethunter
的强大之处不仅在于攻击,在防守方面也照样“屡立奇功”,比如得益于其定制版内核解锁arm64
架构的Linux
软件包安装,可以作为App
沙箱和蜜罐,捕获木马并进行内核层面的“降维”攻击分析。详细分析流程和思路敬请期待防守篇。