Mitigations and Other Real Security Features: Largely Invisible Security Improvements
Mitigations and Other Real Security Features: Largely Invisible Security Improvements
●
aspect of it
I strongly disagree – error-recovery is an unsound
“
practice, and detection mechanisms do not exist
● If memory has been overwritten, how does one continue?
Justifying Fail-Closed
1. User becomes aware of bug (in a painful way... but probably less
painful than if an attacker does it first)
2. Hopefully some mitigation "detects-and-terminates" execution before
control-flow creates a further mess of the stack, which may result in a
weaker bug report
3. User files bug report
4. Programmer fixes bug, ships new software
An address-space oracle
Repeated probes against reused address-space learns
enough to perform minimum ROP operations
Can discover (and thus bypass) certain mitigations
Then, continue using various ROP methods...
Progressive improvements – in the old days the GOT & PLT were
writeable!
● Secure-PLT
● No more relocs
● RELRO
● kbind()
● DT_BIND_NOW
wpath stdio
Fails-closed
cv fd
re
se
Illegal operations
n
df
crash
d
Easy to learn
How does pledge help?
IETF: draft-thomson-postel-was-wrong-02.txt
In network protocols, there are evolutionary risk factors due
to non-strict specification
Similar problem with conserving ABI+below, which benefits
attackers greatly
POSIX (standard) is already too liberal
POSIX (implementations) are full of historical defacto-
standard behaviours which attackers can rely upon