5 ms·
ROP does not bypass ASLR or canaries. It does bypass DEP/NX in the sense that it executes code that already exists in executable memory.
by dg246 6y ago
ROP does not bypass ASLR or canaries. It does bypass DEP/NX in the sense that it executes code that already exists in executable memory.
- OminousWeapons 6y agoAgree re: canaries, but when I learned about ROP I was told that ASLR typically is not employed on the text segment (due to lack of position independence) which is why ROP effectively acts a bypass for ASLR on the stack / heap and why we need things like control flow enforcement. Is this not the case or no longer the case?
- loeg 6y agoASLRing text segments is optional, but possible. There are negative performance tradeoffs.
- barrkel 6y agoThere are limitations in sharing text segments in different processes, and extra memory usage mapping in text segments so relocations can be, uh, relocated, but once running there is no additional performance overhead. The runtime image is effectively "self-modified code" by the OS loader, patched to final addresses. No PIC register, no indirect references.
- loeg 6y agoRight. You've described the performance impact: a ton of relocations hurts startup time, and the modified memory reduces sharing, costing additional memory. If startup time does not matter and memory is free, sure, it has no costs.
- barrkel 6y agoYeah; a linear scan over what, possibly as many as a couple of megabytes. I bet that takes a while. (Seriously? :-)
- barrkel 6y agoWindows uses relocations, not PIC, to enable different load addresses. That means the image in memory has its self references patched by adding the difference between compiled in load address and runtime load address. System DLLs can still share code with one another as long as they share the same load address in different processes for that reboot of the operating system. Historically EXEs were either linked without relocations or had relocations stripped. They were always loaded first so ended up where they wanted, no relocation necessary. But /dynamicbase flag to linker opts in to setting a bit in the PE header and retaining relocations, so the EXE can be loaded elsewhere. TL;DR: Windows supports ASLR on both executables and dynamic libraries.
- archgoon 6y agoGcc these days compiles with -pie (Position Independent Executable) by default. This makes the text section position independent and able to be relocated, like a shared library. You are correct that the main TEXT section used to typically not be position independent.
- saagarjha 6y agoNot only is the text segment relocatable, the entire binary is generally compiled as ET_DYN so it is a shared library in a sense.