Recognize and mitigate ntoskrnl's return stack buffer clearing idiom
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- cpp
- Ambito
- reverse-engineering, security
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- C++
- Stelle
- 1.3k
- Fork
- 298
- Merge medio
- 4g 13h
- PR unite (30g)
- 20
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Vector35/binaryninja-api
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
Vector35/binaryninja-api#8540 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
Vector35/binaryninja-api#8446 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
Vector35/binaryninja-api#8444 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Vector35/binaryninja-api#8441 · 3 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Vector35/binaryninja-api#8404 ·
Tutte le issue di Vector35/binaryninja-api
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
duckdb/duckdb-wasm#2258 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
objectionary/eo-graphs#75 ·
-
Coarray integration tests carry no LABELS, so run_tests.py silently skips them under every backend Apertacoarray
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
FISCO-BCOS/FISCO-BCOS#5642 ·