Recognize and mitigate ntoskrnl's return stack buffer clearing idiom
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- cpp
调研方向
Load ntoskrnl.exe and begin at KiFlushCurrentRsb, then inspect the immediately following functions and current_function.stack_adjustment at 0x140ab5739. Reproduce the excessive updates and confirm that the repeated return-stack-buffer clearing pattern no longer produces an implausibly large stack adjustment or hits the function update limit.
由索引模型根据 Issue 内容生成。
描述
Version and Platform (required):
- Binary Ninja Version: 5.4.10362-dev Ultimate, bbfabaed
- OS: macos
- OS Version: 26.5.2
- CPU Architecture: arm64
Bug Description:
ntoskrnl.exe has a bunch of functions that look like this:
140ab5703 int64_t sub_140ab5703()
140ab5703 0* 4883c408 add rsp, 0x8
140ab5707 -8 e8eeffffff call sub_140ab56fa {sub_140ab570c}
{ Falls through into sub_140ab570c }
140ab570c int64_t sub_140ab570c()
140ab570c 0* 4883c408 add rsp, 0x8
140ab5710 -8 e8eeffffff call sub_140ab5703 {sub_140ab5715}
{ Falls through into sub_140ab5715 }
140ab5715 int64_t sub_140ab5715()
140ab5715 0* 4883c408 add rsp, 0x8
140ab5719 -8 e8eeffffff call sub_140ab570c {sub_140ab571e}
{ Falls through into sub_140ab571e }
140ab571e int64_t sub_140ab571e()
140ab571e 0* 4883c408 add rsp, 0x8
140ab5722 -8 e8eeffffff call sub_140ab5715 {sub_140ab5727}
{ Falls through into sub_140ab5727 }
These are called by KiFlushCurrentRsb and eventually bottom out in:
140ab5742 int64_t sub_140ab5742(int64_t arg1 @ 0x8)
140ab5742 0* 4883c408 add rsp, 0x8
140ab5746 -8 0faee8 lfence
140ab5749 -8 480fba242409 bt qword [rsp {arg1}], 0x9
140ab574f -8 7301 jae 0x140ab5752
140ab5751 -8 fb sti
140ab5752 -8* 4883c410 add rsp, 0x10
140ab5756 -18 c3 retn {arg_18}
This code appears to be a mitigation for a variant of Spectre 2 known as SpectreRSB.
The repeated add rsp, 0x8 / call pattern results in core computing diverging values for each functions' stack adjustment, that eventually leads to some number of them tripping the function update limit.
Steps To Reproduce:
- Load ntoskrnl.exe (
omega wheel directs safely). - Jump to
KiFlushCurrentRsb. - Wait for analysis to finish, then look at the functions immediately after
KiFlushCurrentRsbto see whether any generated excessive updates. - Jump to
0x140ab5739, and look at the value forcurrent_function.stack_adjustment. It should not be excessively large (i.e.,OffsetWithConfidence(value=377666247104, confidence=191)is bad).
Additional Information:
I noticed this while looking into what functions within ntoskrnl.exe are responsible for generating the most updates. These functions stood out since they hit the update count limit.
Since this is a Spectre mitigation, it's possible we'll see similar patterns within other kernels for x86_64 operating systems.
- 主要语言
- C++
- 星标
- 1.3k
- 派生
- 298
- 平均合并
- 5 天 5 小时
- 30 天内合并 PR
- 19
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Vector35/binaryninja-api 的其他 Issue
-
难度 1/5 1-3 小时 新手友好度 88/100
Vector35/binaryninja-api#8540 ·
-
难度 2/5 1-3 小时 新手友好度 88/100
Vector35/binaryninja-api#8516 ·
-
难度 1/5 1 小时以内 新手友好度 92/100
Vector35/binaryninja-api#8503 ·
-
难度 1/5 1 小时以内 新手友好度 88/100
Vector35/binaryninja-api#8446 ·
-
难度 1/5 1 小时以内 新手友好度 88/100
Vector35/binaryninja-api#8444 ·
查看 Vector35/binaryninja-api 的全部 Issue
相似的 Issue
-
Website Doc Typo 未关闭
难度 1/5 1 小时以内 新手友好度 92/100
-
难度 1/5 1-3 小时 新手友好度 92/100
autowarefoundation/autoware_universe#13413 ·
-
难度 2/5 1-3 小时 新手友好度 88/100
-
automated-analysis bug memory-safety
难度 2/5 1-3 小时 新手友好度 68/100
-
难度 2/5 1-3 小时 新手友好度 88/100