当 Xiaomi 12 遇到 eBPF

作者: 花儿谢了6 | 来源:发表于2022-06-23 10:46 被阅读0次

最近有大佬在 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://ebpf.io/what-is-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 authorized_keys

chmod 600 authorized_keys

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

ifconfig |grep addr

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

ssh root@172.24.64.47

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

sudo chmod 777 ./eadb-darwin

./eadb-darwin --ssh root@172.24.64.47 prepare -a androdeb-fs.tgz

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

./eadb-darwin --ssh root@172.24.64.47 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# ls
argdist       btrfsdist     dbslower    exitsnoop     gethostlatency  klockstat       nfsdist      perlflow pythonstat   runqslower   syncsnoop   tcpdrop      tplist      zfsslower
bashreadline  btrfsslower   dbstat  ext4dist      hardirqs        kvmexit         nfsslower    perlstat readahead    shmsnoop     syscount    tcplife      trace
bindsnoop     cachestat     dcsnoop ext4slower    inject          lib         nodegc       phpcalls reset-trace  slabratetop  tclcalls    tcpretrans   ttysnoop
biolatency    cachetop      dcstat  filelife      javacalls       llcstat         nodestat     phpflow  rubycalls    sofdsnoop    tclflow     tcprtt       vfscount
biolatpcts    capable       deadlock    fileslower    javaflow        mdflush         offcputime   phpstat  rubyflow     softirqs     tclobjnew   tcpstates    vfsstat
biopattern    cobjnew       deadlock.c  filetop       javagc          memleak         offwaketime  pidpersec    rubygc       solisten     tclstat     tcpsubnet    virtiostat
biosnoop      compactsnoop  dirtop  funccount     javaobjnew      mountsnoop      old      profile  rubyobjnew   sslsniff     tcpaccept   tcpsynbl     wakeuptime
biotop        cpudist       doc     funcinterval  javastat        mysqld_qslower  oomkill      pythoncalls  rubystat     stackcount   tcpcong     tcptop       xfsdist
bitesize      cpuunclaimed  drsnoop funclatency   javathreads     netqtop         opensnoop    pythonflow   runqlat      statsnoop    tcpconnect  tcptracer    xfsslower
bpflist       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

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

[图片上传失败...(image-7c9209-1655952331083)]
[图片上传失败...(image-8edb3e-1655952331083)]

还少了一个关键的

[图片上传失败...(image-60018f-1655952331083)]

手写 trace 干它

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

再来一次

[图片上传失败...(image-c9aa52-1655952331083)]

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

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

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

总结

基于内核级别的监控,让应用中所有的加固/隐藏/内联汇编等防御措施形同虚设,而且可以在应用启动的初期进行观察,让应用的一切行为在我们眼中无所遁形

这是真真正正的降维打击,内核级的探测能力提供了无限可能,堪称:屠龙技

最后

文中用的工具和软件,我已经打包整理好了

https://mp.weixin.qq.com/s/h_ixxr1WZ8VqYt-zMrwSDA

聊天界面回复 "ebpf" 即可

再次感谢先行者大佬们的无私奉献,和为技术发展所做的贡献🎉🎉🎉

相关文章

  • 当 Xiaomi 12 遇到 eBPF

    最近有大佬在 android 上实践 ebpf 成功 前有 evilpan 大佬:https://bbs.pedi...

  • XIAOMI

    原本以为小米会在Note这条路上持续发力,没曾想近两年还是保留在第一代,昔日的旗舰如今也只是千元机的水平了,价格更...

  • 记录开发ebpf 遇到的问题

    1、内核态和用户态传递信息的结构定义,数据结构要对齐,数据结构成员的大小要确定;这里定义了一个perf map,用...

  • ebpf

    接上篇udp压测场景性能较差,想用ebpf优化下性能,毕竟ebpf已经有LB方案可以替代ipvs,基于更低的cpu...

  • [漏洞复现]Ubuntu16.04本地提权(CVE-2017-1

    漏洞概述: 该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验...

  • CVE-2017-16995 ubuntu16.04

    该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生...

  • eBPF深度探索: 高效DNS监控实现

    eBPF可以灵活扩展Linux内核机制,本文通过实现一个DNS监控工具为例,介绍了怎样开发实际的eBPF应用。原文...

  • 为什么k8s管理员要懂eBPF

    本文主要目的是让你了解eBPF的来龙去脉,以及为什么它在观察容器和Kubernetes集群时特别有用。 eBPF有...

  • android手机打开自启动管理界面

    but for xiaomi tv,It can't work

  • eBPF verifier

    源:https://www.kernel.org/doc/Documentation/networking/fil...

网友评论

    本文标题:当 Xiaomi 12 遇到 eBPF

    本文链接:https://www.haomeiwen.com/subject/rtwpvrtx.html