-
Notifications
You must be signed in to change notification settings - Fork 186
Conversation
bcae458
to
faa96a6
Compare
57e1f7f
to
3e322b2
Compare
So I guess the purpose here is to generate a local runtime specific binary with randomised executable address space to defend against reentrancy attacks that only have knowledge of the source code/eBPF bytecode. |
15493c3
to
ce7dd0b
Compare
In our environment I'm having a hard time figuring out what attack vectors this work is intending to address. Can you help me understand? |
@jackcmay I updated the description of the PR with a link to the paper in which the attacks and their prevention are described in detail. |
In current implementation address randomization seems to be always enabled. Would it be possible to add an option that would disable this? |
@dmakarov I added config options for both techniques here: Line 185 in d86853f
E.g. setting Edit: Also, all randomization happens at x86 level now, not at BPF level anymore. So it should be transparent for the tracer (but not for GDB / LLDB). |
|
2560903
to
be69f04
Compare
… yet. It should be applied to both "insn.imm" and "insn.off" for the following instruction classes: Load, Store, Alu, Jump.
…e frame pointer (RBP).
be69f04
to
8c9fbc7
Compare
This includes the memory_mapping and bound syscall_context_objects.
Implements: Instruction Address Randomization: Occasional emission of additional no-op instructions Input Sanitization: Encryption of user provided values such as immediate values and offsets Environment Obfuscation: Encryption of registers which the compiled program uses under the hood: R10 - JitProgramArgument: The memory_mapping and bound syscall_context_objects RBP - Stack frame pointer
Based on:
Homescu, Andrei, et al. "Librando: transparent code randomization for just-in-time compilers"
Proceedings of the 2013 ACM SIGSAC conference on Computer & Communications Security. 2013."
Implemented Techniques:
no-op
instructionsJitProgramArgument
: Thememory_mapping
and boundsyscall_context_objects