Android 小米12遇到eBPF

admin 2022年6月28日22:03:58评论444 views字数 2892阅读9分38秒阅读模式

Android 小米12遇到eBPF

最近有大佬在 android 上实践 ebpf 成功
前有 evilpan 大佬:https://bbs.pediy.com/thread-271043.htm
后有 weishu 大佬:https://mp.weixin.qq.com/s/mul4n5D3nXThjxuHV7GpMA
当然还有其他隐藏的大佬啦,就不一一列举啦
android-ebpf 大火
两位大佬的方案也很有代表性,一个是 androdeb + 自编内核 + 内核移植 + 内核4.19(文章中看的),一个是 androdeb + 内核5.10(pixel 6)
目前来看,androdeb + 高版本内核 方案可以更快上手,花钱投资个新设备就好了,而且 weishu 大佬也已经手把手把工具都准备好了
故本次就是对 weishu 大佬视频号直播的 "搭建 Android eBPF 环境" 的文字实践 + 反调试样本测试

eBPF 是啥

来自大佬的总结:https://mp.weixin.qq.com/s/eI61wqcWh-_x5FYkeN3BOw

失败尝试

魅族18 内核版本5.4
虽说环境编译成功了,但体验脑壳疼
opensnoop 没有 path
execsnoop pwd 命令监控不到,长命令被截断

环境准备

PC环境:macOS
小米12 内核版本5.10.43
magisk 提供 root
androdeb 连接方式选取的也是 ssh 方式,故安装 SSH for Magisk 模块提供 ssh 功能
手机最好也科学上网一下吧,要 git 拉一些东西

环境准备 over,开干

确保手机 ssh 已开启,先去 adb shell 中 ps 一下

ps -ef|grep sshd

没问题的话,就查看下 PC 上的 ssh key

cat ~/.ssh/id_rsa.pub

然后把 key 粘贴到手机 authorized_keys 文件中,再改下权限

su
cd /data/ssh/root/.ssh/
/data/adb/magisk/busybox vi authorizedkeys
chmod 600 authorized
keys

再看下手机 ip(因为是 ssh 连接,故手机和 PC 在同一局域网下)

ifconfig |grep addr

在 PC 上测试下 ssh 是否可以成功连接

ssh root@手机ip

没问题的话,直接开搞准备好的 androdeb 环境了(weishu大佬用rust重写了叫eadb)

sudo chmod 777 ./eadb-darwin
./eadb-darwin --ssh root@手机ip prepare -a androdeb-fs.tgz

等待完成后,进 androdeb shell, 开始编译 bcc

./eadb-darwin --ssh root@手机ip shell
git clone https://github.com/tiann/bcc.git --depth=1
cd bcc && mkdir build && cd build
cmake .. make -j8 && make install

等待成功后,就有各种工具可以用了

root@localhost:/usr/share/bcc/tools# lsargdist       btrfsdist     dbslower  exitsnoop     gethostlatency  klockstat       nfsdist     perlflow  pythonstat   runqslower   syncsnoop   tcpdrop     tplist      zfsslowerbashreadline  btrfsslower   dbstat  ext4dist      hardirqs        kvmexit        nfsslower    perlstat  readahead    shmsnoop    syscount    tcplife     tracebindsnoop     cachestat     dcsnoop  ext4slower    inject        lib        nodegc     phpcalls  reset-trace  slabratetop  tclcalls    tcpretrans   ttysnoopbiolatency    cachetop      dcstat  filelife      javacalls       llcstat        nodestat     phpflow  rubycalls    sofdsnoop    tclflow     tcprtt     vfscountbiolatpcts    capable      deadlock  fileslower    javaflow        mdflush        offcputime   phpstat  rubyflow     softirqs    tclobjnew   tcpstates    vfsstatbiopattern    cobjnew      deadlock.c  filetop       javagc        memleak        offwaketime  pidpersec  rubygc       solisten    tclstat     tcpsubnet    virtiostatbiosnoop      compactsnoop  dirtop  funccount     javaobjnew      mountsnoop      old     profile  rubyobjnew   sslsniff    tcpaccept   tcpsynbl     wakeuptimebiotop        cpudist      doc    funcinterval  javastat        mysqld_qslower  oomkill     pythoncalls  rubystat     stackcount   tcpcong     tcptop     xfsdistbitesize      cpuunclaimed  drsnoop  funclatency   javathreads     netqtop        opensnoop    pythonflow  runqlat      statsnoop    tcpconnect  tcptracer    xfsslowerbpflist       criticalstat  execsnoop  funcslower    killsnoop       netqtop.c       perlcalls    pythongc  runqlen      swapin    tcpconnlat  threadsnoop  zfsdist

👆👆👆得益于 weishu 大佬的手把手环境工具包,androdeb + 内核5.10 的 eBPF 环境搭建起来就是这么简单

反调试样本实操

DetectFrida.apk 核心逻辑: https://github.com/kumar-rahul/detectfridalib/blob/HEAD/app/src/main/c/native-lib.c

哎😆,这里我直接就拿山佬的实践来说,至于为啥后面再说

Android 小米12遇到eBPF

Android 小米12遇到eBPF

还少了一个关键的

Android 小米12遇到eBPF

手写 trace 干它

trace 'do_readlinkat "%s", arg2@user' --uid 10229

再来一次

Android 小米12遇到eBPF

👆👆👆可以了,差不多了,这样分析已经为后续对抗 bypass 提供了很大的帮助

当然了,上述只是最基础的操作,后续还得继续深入探索学习,解锁更多顶级玩法

还有就是,其实我的 Xiaomi 12 还没搞好,在等解 BL 锁,至于秒解,我不想花钱,所以就拿山佬的实践来借花献佛了,真是个好主意啊,哈哈😄

总结

基于内核级别的监控,让应用中所有的加固/隐藏/内联汇编等防御措施形同虚设,而且可以在应用启动的初期进行观察,让应用的一切行为在我们眼中无所遁形
这是真真正正的降维打击,内核级的探测能力提供了无限可能,堪称:屠龙技


Android 小米12遇到eBPF


原文始发于微信公众号(哆啦安全):Android 小米12遇到eBPF

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月28日22:03:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android 小米12遇到eBPFhttp://cn-sec.com/archives/1137176.html

发表评论

匿名网友 填写信息