60秒学会用eBPF-BCC hook系统调用 hook安卓所有syscall

移动安全 2年前 (2022) admin
788 0 0

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

本文为看雪论坛优秀文章

看雪论坛作者ID:爱吃菠菜


1、导读


完成了Linux的eBPF体验后,进入Android环节,目前知道两条路在Android上跑通eBPF。


( 1 ) 在Android手机上搭一个完整的ARM Linux来跑BCC


在Android机上建立完整的Linux环境,然后去拉BCC项目运行bcc即可,在这个完整的ARM Linux上跑bcc,和之前在x86 pc上跑bcc,过程没区别,搭好后ssh连上就ok。

目前的情况是,安装ARMLinux环境难题,已经被大佬解决了,下载他现成的工具,一个命令60秒就弄好了。用新内核的手机,没有门槛。

也就是说,没有要死磕内容,Android跑通BCC的门槛非常低,看一眼步骤3就学会。奥卡姆剃刀,直接充钱买个新小米/Pixel == 学会。
(本帖只讲这种方式)

( 2 ) 静态编译独立的二进制eBPF程序

第一种方式简单/敏捷,但缺点也明显,要运行eBPF程序,始终没法脱离那个armLinux BCC环境,每个新手机都要搭一个运行环境。


我们需要的可能是,编好一个eBPF程序,别人拿起来就用。(或反过来,捡大佬工具/模块)

实际上当前是有办法在x86PC机上,交叉编译二进制的eBPF程序的,不需要ARM Debian或是AOSP环境。(CORE / Compile Once Run Everywhere / 一次编译到处运行)

这篇帖子不涉及这类内容,但具体效果你可以参考和关注:
SeeFlowerX/stackplz(https://github.com/SeeFlowerX/stackplz
ehids/ecapture(
https://github.com/ehids/ecapture


2、参考


通过tiann/eadb简化了手机上Debian环境的搭建,打通关键环节。

eadb(https://github.com/tiann/eadb


本文是对seeflower eBPF系列文章的copy和实践记录。

seeflower(https://blog.seeflower.dev/archives/111/

本文是对好友maiyao1988/ebpf-plugin hook脚本的学习实践。

ebpf-plugin(https://github.com/maiyao1988/ebpf-plugin


3、在手机上布置Debian环境


查看手机内核对BPF支持情况

手机为Pixel 6 / Kernel 5.10,需要的内核功能默认已打开,开箱即用。

uname -a

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

zcat /proc/config.gz | grep PROBE

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall


下载eadb和debianfs-arm64-full.tar.gz

https://github.com/tiann/eadb/releases

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

通过eadb安装debian环境

./eadb --ssh [email protected] -p xxxx prepare -a debianfs-arm64-full.tar.gz


eadb是对adeb的重新实现(rust重写的),eadb的作用是可以给Android安装一个完整健全的arm debian环境。
(注意:配置ssh密钥的过程这里略过,可通过Magisk模块完成。)


安装后, 通过eadb ssh连接手机即可

./eadb --ssh [email protected] shell



4、在手机Debian中, 编译运行bcc helloworld


像平时在ubuntu上那样布置eBPF-BCC的常规过程,在手机里中来一遍, 没什么不一样的。


编译安装后, 运行helloworld测试
可以跑的话,到这就算成功了,缺陷是还没有IDE,不方便开发。

cd /bcc/examplespython hello_world.py


安装proxychains
被墙的话,在手机Deabian里git和wget比较慢,还是要在手机Debian里配置proxychains之类的代理。

apt-get install proxychainsvim /etc/proxychains.conf# ---- 配置proxychains.conf ----socks5 192.168.?.?  12345  # 填写代理ip端口# ---- 配置proxychains.conf ----


安装pip

proxychains apt-get install python3-pip# 或者proxychains wget https://bootstrap.pypa.io/get-pip.pyproxychains python get-pip.py



5、给手机的Debian配置独立的SSH


目的
有了这个步骤,就可以不用eadb了,后面可以直接拿vscode ssh登录到手机的Debian上。

在手机Debian中执行以下操作,配置ssh

apt-get updateapt-get install sshvim /etc/ssh/sshd_config     # 编辑详细服务配置vim id_rsa.pub               # 手动粘贴导入公钥cat id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyschmod 700 ~/.sshservice ssh restart          # 手机每次重启后,第一次进入debian,可能都需要手动启动下ssh服务

sshd_config的详细配置

vim /etc/ssh/sshd_configAuthorizedKeysFile .ssh/authorized_keysPort 11111PubkeyAuthentication yesPermitRootLogin yesPasswordAuthentication yesGSSAPIAuthentication  no  # 加速SSHUseDNS no   # 加速SSH


修改Debian的root密码
需要重新修改Debian root密码,登ssh时需要。

passwd root


PC客户端上配置一下私钥,然后连接测试

$ ssh-add            # 密钥文件添加到ssh-agent$ ssh-add -L         # 检查$ ping 192.168.x.x   # 测试网络$ ssh root@192.168.x.x -p 11111Enter passphrase for key '/home/ccc/.ssh/id_rsa':root@192.168.x.x's password:Last login: Fri Nov 11 12:25:33 2022 from 192.168.x.x.The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright..Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.root@localhost:~#



6、通过VSCODE SSH登陆到手机Debian, 进行开发


安装vscode ssh插件
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

客户端ssh配置
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

连接后,可访问debian服务端上的文件,这个就是资源管理器
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

打开bash
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

安装Remote Development插件, 即远程开发插件
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

安装python插件
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

如果要debug启动python脚本, 想传递参数的话, 需要配置一个启动文件
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

配置中,你可能还需要补充一下环境变量
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

"cwd": "${fileDirname}","env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"},


最后用这个配置文件,调试启动python脚本
60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall


7、hook all syscall


项目推荐
通过maiyao1988/ebpf-plugin项目,可一键一次性的HOOK全部syscall。代码逻辑清晰,可根据需求自由修改。(本文只关注eBPF亮点,无痕hook系统调用)

项目地址

https://github.com/maiyao1988/ebpf-plugin


在手机Debian上运行一下, 看看效果

# mkdir bcc/my# cd bcc/my# git clone https://github.com/maiyao1988/ebpf-plugin# cd ebpf-plugin# python btrace.py -m64 -n com.android.bankabc


60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall




60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall


看雪ID:爱吃菠菜

https://bbs.pediy.com/user-home-760871.htm

*本文由看雪论坛 爱吃菠菜 原创,转载请注明来自看雪社区

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

看雪2022KCTF秋季赛官网:https://ctf.pediy.com/game-team_list-18-29.htm



# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 – 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们


60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall


60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

球分享

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

球点赞

60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

球在看


60秒学会用eBPF-BCC hook系统调用  hook安卓所有syscall

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):60秒学会用eBPF-BCC hook系统调用 hook安卓所有syscall

版权声明:admin 发表于 2022年12月3日 下午6:00。
转载请注明:60秒学会用eBPF-BCC hook系统调用 hook安卓所有syscall | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...