9月安全笔记
daliy hacking
这些笔记是我决定从海思内转至 RO0T lab之后学习的一些笔记, 暂时更新一下
9.2
- 读高通pac的白皮书
- 观看侯捷老师的C++内存管理session1
9.8
- 新书到了ebpf 云原生安全, 对ebpf一直很感兴趣, 之前学过一段时间, 最近再看一看,但是第一章倒是主要只讲了一些云原生安全的general的知识, 也就是docker的引入扩大了攻击面, 看到的一些话还是很有意思, 安全左移, 防护右移
- 继续看高通 pac 白皮书和论文pac man, pac和MTE 都很有意思, 算是最近arm架构为了抵御内存破坏漏洞引入的新机制, 看完 bypass pac之后可以再看看MTE的一些bypass, keep hacking
找了篇综述,感觉将的还是挺好的
还收集到了一些资料,明天看下
https://hardenedlinux.github.io/gnu/toolchains/security/2017/06/13/ARM_PA.html (编译器实现相关)
https://justinyan.me/post/4129 (这个问题也很有意思,为什么能多出12bit存放pac)
- 读了proactor与reactor这两种高性能网络编程模式(完蛋了被扩展去复习io多路复用了,明天上班看),明天看下gaio
9.9
llvm和gcc目前都支持arm pac, 可以看到和纯软件的stack failed check相比, pac的指令要少很多
随便编译了一个程序,这是软件的stack fail chk
开启pac之后,在函数初始化栈帧之前则会有pac指令
lr(x30): (Link Register) ,保存调用跳转指令 bl 指令的下一条指令的内存地址;也就是所谓的context
综述虽然灌水,但是对我这种需要速成的来说,太有用了, pac指令对于data 和 程序用不同的key, 这个根据指令来决定, 操作数1是目标指针, 操作数2是context(对应QARMA算法里的 tweak)
Examining Pointer Authentication on the iPhone XS. Google
Pro-ject Zero. https://googleprojectzero.blogspot.com/2019/02/
examining- pointer-authentication-on.html. Feb. 2019.
iOS Kernel PAC, One Year Later. Google Project Zero. https://bazad.github.io/presentations/BlackHat-USA-2020-iOS_Kernel_PAC
_One_Year_Later.pdf. 2020.
https://arxiv.org/pdf/2104.14993
9.10(补充版)
简单看了一下QARMA算法
记错了啊,s盒是唯一非线性映射的部分,p盒是扩散
内核单独的APIAkey, 所有用户态进程共享APIAkey
ok,基本上 PAC的工作原理看完了, 现在读一下pj0怎么找到伪造签名组件的
9.18
中途断了一段时间,后面一个月高强度更新,anyway中间发生的事情真是一言难尽,继续梳理下要做的事情,还是两个大方向,一是对ARM新架构中引入的安全机制的研究以及相关bypass的学习(MTE和PAC),二是继续学习常见漏洞的利用方式和代码(栈溢出、堆溢出、UAF、Double free、RACE等,这块大体上还是先根据ctf wiki入门,然后找一些advance的题目和技巧,最后看一些实战的案例)
今天上午温习一些简单的ROP,ret2text, ret2shellcode, ret2libc
晚上回来看pwn那本书
canary是存在TLS里的啊
看了一会儿x86和x64的pwn, 又去补点arm的pwn
粗略读了一下这篇文章,写的挺好的,里面的可以学习的资源也很多, 正在手动复现这一题, 公司电脑没有linux没有qemu, 还是自己带mac吧
https://xuanxuanblingbling.github.io/ctf/pwn/2022/04/19/babyarm/
linux 内核常用保护手段
https://hurricane618.me/2021/04/28/linux-kernel-security-summary/
canary check, ghidra的Listing view还蛮好用的
明日计划:
- 复现并理解赛题
- 阅读pj0 bypass pac的思路, 看一下内部的工具
总结一下没做的事情:
- 南大软件分析课程和实验
- 侯捷老师的内存分配课程
9.19
今天白天主要看了一下pj0的bypass pac的文章
这个攻击说的是 PAC的key会在某一刻由内存写入寄存器, 如果攻击者已经拿到读任意内存的权限, 可以在写入的时候窃取PAC key, 攻击限制是PAC使用的加密算法必须是公开且已知的, 否则需要芯片层面的逆向
穿透特权等级的攻击, 单从指令的伪代码来看, EL0和EL1的PAC实现看上去是一样的, 因此
- 读取内核的PAC密钥。
- 将我们进程中一个线程的用户空间PAC密钥替换为内核的PAC密钥。
- 在该线程的用户空间中执行PAC操作。
感觉比较鸡肋, 只能在PAC采用非公开 加密算法的时候可以起到作用
这个更鸡肋点
文章用一个例子来演示如何绕过PAC, 这个 AUTDZA 指令代表的是使用的tweakey是0, 所以单操作数
9.23 - 9.25
为了研究RKP买了一个三星的s22手机, 发现美版的竟然只要1000不到, 拿到手后习惯性的想刷 magisk, 发现进不了recovery模式??? 上网查了下, 美版三星的 S901U1型号没解锁boot loader, 于是退款买了个港版的, 然后就开始对bootloader、 root这些原理有些好奇, 之前也研究说,只不过有点忘了.
关于magisk原理 读了下面这些文章:
这篇太硬核了点, 不过读下来也是有点收获
https://bbs.kanxue.com/thread-275939.htm
然后看到评论区有个canyie, 读了一下她的博客, 讲的清晰明了很多, 了解了一下发现真的很厉害, 十几岁就是magisk的contributor了, 回想自己二十几年都干了什么…
https://blog.canyie.top/2023/11/12/android-booting-shenanigans-and-magiskinit-analysing/
magisk的具体原理那个章节没有看(尤其是恢复 SELinux), 过于复杂, 等实际工作需要的时候可以拿出来看看
看完之后对bootloader那些也是有点云里雾里, 就去看了维术大哥的博客, 关于root和bootlodaer讲的真的很好
PBL -> SBL -> ABL(实际刷机的boot img), PBL就是trust root 通俗易懂, 这也解释了为什么买的美版三星手机就算找咸鱼大哥也很难刷机, 除非又是史诗级漏洞
紧接着又读了下关于root的那个文章, 讲的也很好
https://weishu.me/2021/09/13/what-is-root/
文章最后也说到了其实都是EL0的 root, 在用户态使用su罢了, 期待的EL1的root是不是就是最近的APatch呢, 给自己挖坑了, 这个真得看吧
今天上午则是看了两篇关于逆向签名的文章, 等于说复习了一下unidbg, 还有ida python的一些东西, 感觉还是不太够, 不过先存着了, 这个人的两篇逆向签名的文章都海挺优质的, 思路清晰, 基本功也扎实, 这些逆向的技术先mark着, 等用到了再看吧
https://bbs.kanxue.com/thread-283569.htm
今天早上还看了ebpf的那篇论文, 感觉想法很简单, 也有点鸡肋. ebpf中有tail call
的机制, 用于实现不通ebpf程序之间的跳转,这个跳转是有块类型为 BPF_MAP_TYPE_PROG_ARRAY
的表的,如果你有一个可以读写内核内存的漏洞(前提是你有),你就可以通过这个漏洞篡改这个表,实现跳转到任意的ebpf 程序执行, 和指针类似,只不过现在内核里的 CFI 防护太多了,对指针校验的很严格,这个跳转没受保护, 不过确实是个不错的攻击面
下午继续看PAC的绕过的一些文章