diff --git a/index.html b/index.html index 33e7475..2e2b30e 100644 --- a/index.html +++ b/index.html @@ -384,13 +384,13 @@ template: inverse ] .right-column[ - Stack canaries
- Place a value before the return address and check if it's been changed before returning from a function. (Good explainer here: https://www.sans.org/blog/stack-canaries-gingerly-sidestepping-the-cage/) + Place a value before the return address and check if it's been changed before returning from a function. Good explainer here: https://www.sans.org/blog/stack-canaries-gingerly-sidestepping-the-cage/ - Nonexecutable stack
- W^X (write or execute) won't execute code on the stack (but will still follow return addresses). + W^X (write or execute) won't execute code on the stack, but will still follow return addresses. This is why ROP (return oriented programming) was invented. And later JOP (jump oriented programming). - Randomization
- Change function and stack addresses around so whenever a program is executed the locations are different. + Change function and stack addresses around so whenever a program is executed the locations are different. (On 32-bit linux only 12-bits are used for this randomization though. Which gives 4096 options, leading to a success onnce every 2048 attempts on average.) -All these can be worked around given the right conditions. They just make things annoying, euh, harder. +All these can be worked around given the right conditions. They just make things annoying, euh, harder. Better is to not have buffers with these issues in the first place. ] --- template: inverse