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沙箱和蜜罐,捕获木马并进行内核层面的“降维”攻击分析。详细分析流程和思路敬请期待防守篇。



















