|
|
|
|
|
by jawnv6
2972 days ago
|
|
AFAICT the CET shadow stack isn’t protected. Gosh, seems like you could've read all the way to page 6 of the whitepaper:
The shadow stack is protected from tamper through the page table protections such that regular store instructions cannot modify the contents of the shadow stack. It goes on to detail the types of faults that are generated. Any scheme to add further checks should start from a baseline understanding of existing mechanisms, much less chiding on what they should have done. You have to encode the type somewhere, "with type checking" is woefully inadequate. Adding a byte to the opcode? Tagging the function's memory with a preamble? It seems quite difficult to come up with something that doesn't bloat code size and doesn't just marginally increase the attacker difficulty. Plus, why wouldn't an indirect branch have a type? |
|
Anyway, CET already bloats code with ENDBRANCH tags, and you'll find that most fully-software CFI mechanisms (including, IIRC, clang's and grsecurity's) extend their tags to carry some form of hash of the function signature.