Recognize and mitigate ntoskrnl's return stack buffer clearing idiom
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- cpp
- Lĩnh vực
- reverse-engineering, security
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- C++
- Star
- 1.3k
- Fork
- 298
- Merge trung bình
- 4 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 20
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Vector35/binaryninja-api
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8540 ·
-
normalize time logs from WARP Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8446 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Vector35/binaryninja-api#8444 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Vector35/binaryninja-api#8441 · 3 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Vector35/binaryninja-api#8404 ·
Tất cả issue của Vector35/binaryninja-api
Issue tương tự
-
ai_reviewed
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ydb-platform/ydb#53869 · 3 bình luận ·
-
bug cert blocker needs triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
project-chip/connectedhomeip#74373 ·
-
[request] tracy/0.14.1 Đang mởupstream update
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
conan-io/conan-center-index#31035 ·
-
Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
documentation
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
vllm-project/vllm-ascend#17329 ·