昨天去现场参加了 r2con 2024。之后演讲视频,包括 workshop 将会逐步整理上传。一部分课件已经上传到了 GitHub radareorg/r2con2024,不过不完整。
因为我并不是 r2 的用户,所以直到昨天才留意到 radare2 社区分裂的事情。这很难评。
终于见到了 frida 的作者 Ole André Vadla Ravnås,精通各大主流平台调试器开发,熟悉各种语言,从 Web 前端一路写到内核。更别提我用这个框架搞了多少研究,所以赶紧来见偶像。
拉几位目前核心的开发成员一起合影,知识星球和 B 站可以赶紧开起来卖课啦。
大家应该知道 frida 通信的协议基于 TCP 和 DBUS,而在 frida 15.0 之后协议迁移到 WebSocket 之上。这样网页单页应用无需编写后端便能直接和 frida-server 交互。我印象中刚出来的时候我玩了一下,但是示例代码没跑起来。
官方提供给前端的包在 frida/frida-web-client,看这个关注度目前似乎基本是没人用的状态。
一个第三方的抓包工具 httptoolkit 则是自己手搓了一个客户端
https://github.com/httptoolkit/frida-js
其实这个设计是有一定安全风险的。从第一个版本开始,测试机上的 app 就可以直接和 27042 通信,使用 frida-server 的能力注入代码到任意进程。
改成 WebSocket 之后就更方便了,只要测试机用 Sileo 或者 termux(是的您没看错,兼容不同阵营手机)安装了 frida-server,浏览器访问恶意网页就可以拿下 root 权限。
没人在主力机上装调试服务天天开着吧?测试机你也不会拿去打开任意网页吧?啊?
@oleavr 这次讲的议题是 frida-trace 新功能的演示。最新版本的 frida-trace 除了之前直接输出日志的功能,还加入了一个 Web 界面:
哦豁,不小心漏了用户名
这个界面可以直接编辑 hook 代码热加载,还能直接反汇编目标:
反汇编是用的 radare2,编译成 wasm 直接在浏览器前端运行。
这个功能第一个版本用的固定端口 1337,前后端通信用的是不检查同源策略的 WebSocket。我赶紧交了个 Pull Request,加上了 Origin 的访问控制。不知道还有没有问题,起码不是果奔了。
和 frida-server 的问题类似,假如用户开着 frida-trace 的 Web 界面,之后去访问恶意网页,任意网页就可以给你正在调试的目标注入任意 frida 脚本,即远程代码执行。
丢人的是在修完别人的代码之后我想起来可能自己的项目也有问题。iOS 应用测试工具 passionfruit 后端通信基于 socket.io,最初的版本用的 long-polling 是有同源策略检查的。后来换成 WebSocket 之后我就忘了这茬。虽然目前的代码基本上没法编译了(也是我一直没维护的借口),还是赶紧搭环境发了个补丁加上了一些检查。
frida 16.1.0(https://frida.re/news/2023/06/23/frida-16-1-0-released/)加入了一个名为 barebone 的后端。简而言之就是直接用 gdb 的调试协议,在本机(而不是远程调试的目标)上运行 js 引擎,用交叉编译的方式来实现最小成本的 JIT。
这种配置不要求调试目标具有一个完整的操作系统环境,只要兼容 gdb 协议,可以直接支持串口调试。和作者聊的时候他对这个后端做了一些展望,想干一点硬核的事,比如手搓页表解析,远程调试的目标是内核,但在此框架之上访问用户态进程的数据和状态。
原文始发于微信公众号(非尝咸鱼贩):终于见到了 frida 作者