當 Xiaomi 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://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" 即可

再次感謝先行者大佬們的無私奉獻,和為技術發展所做的貢獻??????

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Bookmarks 書簽欄 入職 華為新員工小百科(刷新時間202003023) - 人才供應知多少 - 3MS知...
    Btrace閱讀 1,426評論 0 0
  • 一.版本控制 版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容...
    SuBHFeng閱讀 137評論 0 1
  • 我如何在23天內開發了一款 Android 游戲?(Bigosaur) Android 學習教程 Android ...
    AllenJuns閱讀 11,286評論 11 376
  • 別小看這兩個東西,特別是 Reactor 模式,市面上常見的開源軟件很多都采用了這個方案,比如 Redis、Ngi...
    莫妮卡筆記閱讀 441評論 0 0
  • 什么是內網橫向攻擊 當通過外部打點進入到目標內網時,需要利用現有的資源嘗試獲取更多的憑證與權限,進而達到控制整個內...
    Tide_諾言閱讀 15,699評論 0 17