TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
Post content
https://t.me/hyi0618/33 这个其实值得用 bpf 做一个工具,我之前就想过但是太懒了。 整体思路是,tracepoint attach exec,然后 bpf_write_user 修改 char **env。虽然 bpf 不能修改内核栈和寄存器,但是可以修改用户栈,正好这几个参数都在用户堆栈上。 但是细节没想象中那么容易: a. 修改已有环境变量。很难判断哪些变量不会被进程使用、可以安全被篡改,不小心就玩坏。 b. 新增环境变量。需要遍历 char **argv 和 char **env,那些已经被占用的堆栈不能使用,找到足够大小的空余内存,追加到 env 的最后。可用的堆栈范围应该可以通过 task_struct 得到,大不了直接回溯到 main 修改 main 的栈帧。如何通过 verifier 是手艺活,但是理论上做一个限制性的工具(len(argv) < 10?)是可行的。 当然这工具并不解决所有问题,如 systemd 启动的进程 dockerd,还有不吃 ALL_PROXY 环境变量的进程(git?),还有虚拟机,但是也足以解决如 kind 这种重度容器化的开发流程。 但是这些还是太麻烦了,linux 也需要一个类似 macOS 上的 Surge 增强模式,修改默认路由接管所有外出流量。还修改环境变量,修改个屁。