54
SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu, Daniel Grumberg, Cristian Cadar Software Reliability Group, Imperial College London FOSDEM 2020

SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

SaBRELoad-time selective binary rewriting

Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas,Qianyi Shu, Daniel Grumberg, Cristian Cadar

Software Reliability Group, Imperial College London

FOSDEM 2020

Page 2: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

How resilient is my software?● Assess fault tolerance● E.g. disk full, memory exhausted● Hard to reproduce on real system● Can we simulate a fault?● Yes, but...● Kernel hacking is dangerous● Tinkering with libraries can also be painful● What’s in between?

2

Page 3: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Hello world

3

Python

print('Hello, world!')

User code

Library

Operating system

User space

Kernel space

System call interface

Page 4: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

System call interface● Set of low-level operations● Request a service● Very similar to function call

○ Several arguments○ One result

4

User space

Kernel space

System call interface

Python

print('Hello, world!')

System call (C syntax)

write(1, “Hello, world!”, 13)

Page 5: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

System call errors● Return value

○ ≥ 0 → success○ < 0 → failure

● write○ Size written○ E.g. permission denied (EPERM),

disk full (ENOSPC)

5

User space

Kernel space

System call interface

Python

file = open(“/tmp/hello”, “w”)file.write(“Hello!”)

System call

open(“/tmp/hello”, “w”) = 8write(8, “Hello!”, 6) = 6write(8, “Hello!”, 6) = EPERM < 0

Page 6: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Fault injection● How to simulate e.g. a permission error at system call level?● Swap return value with error code

6

write(8, “Hello!”, 6) = 6

write(8, “Hello!”, 6) = EPERM

How to achieve that?

Page 7: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Binary rewriting

7

Page 8: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

What is binary rewriting?● Modify program at machine code level● No source code needed● Does not require recompilation● Only requirement: disassembling

○ Break program into sequence of instructions○ Assume done for now

8

0 1 0 0 1 0 0 1 0 0 1

Binary

push R0load 0x14,R0call fnctor 0x67,R2

Disassembly

Disassembling

Page 9: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

What is binary rewriting?● Modify program at machine code level● No source code needed● Does not require recompilation● Only requirement: disassembling

○ Break program into sequence of instructions○ Assume done for now

9

0 1 0 0 1 0 0 1 0 0 1

Binary

push R0load 0x14,R0call fnctor 0x67,R2

Disassembly

Disassembling

Page 10: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Disassembly

Offset Size in bytes Human-readable instruction (mnemonic + operands)

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R20x0b 2 jump L10x0d 3 and 0x45,R20x10 5 jump L2…

Page 11: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

● Remove● Replace● Add

Operations on instructions

Page 12: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

RemovePad with nops

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 1 nop0x02 1 nop0x03 5 call fnct0x08 3 or 0x67,R2

Page 13: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

ReplaceCall → jump

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 ? jump0x?? 3 or 0x67,R2

Page 14: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Size matters● Shifting instructions is impractical

○ Jumps become invalid○ Addresses have to be recomputed

● Do rewritten instructions fit?● Compare instruction sizes

○ Original S(O)○ Rewritten S(R)

Page 15: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

ReplaceCall → jump

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 ? jump0x?? 3 or 0x67,R2

S(O) = 5 S(R) = ?

Page 16: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

ReplaceCall → jump

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 5 jump0x08 3 or 0x67,R2

S(O) = S(R)

Page 17: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

ReplaceCall → jump

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 3 jump0x06 1 nop0x07 1 nop0x08 3 or 0x67,R2

S(O) ≤ S(R)

Page 18: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Replace depends on relative sizes● If S(R) = S(O) → just replace● If S(R) < S(O) → pad with nops● If S(R) > S(O) → ???

Page 19: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Problem

How to fit larger instructions?

19

Page 20: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Detour● Problem: S(R) ≥ S(O)● Shifting instructions still not an option● Solution: relocate instructions to out-of-line scratch space1. Allocate memory2. Move instructions3. Add jumps into and out of moved instructions

20

Page 21: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Add with detourInsert a jump to rewritten instructions

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 5 jump D0L0:0x08 3 or 0x67,R2…D0:0xffec 5 call fnct… // added instructions0xfffd 5 jump L0

Out-of-line scratch space

Page 22: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Add with detourInsert a jump to rewritten instructions

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 2 load 0x14,R00x03 5 jump D0L0:0x08 3 or 0x67,R2…D0:0xffec 5 call fnct… // added instructions0xfffd 5 jump L0

Out-of-line scratch space

S(O) = S(J)

Page 23: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Replace with detour● If S(J) ≤ S(O) → replace and pad with nops● Otherwise, relocate neighbouring instructions

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R2

0x00 1 push R00x01 5 jump D00x06 1 nop0x07 1 nopL0:0x08 3 or 0x67,R2…D0:… // substitute instructions0xfff8 5 call fnct0xfffd 5 jump L0

S(J) = 5S(O) = 2

Out-of-line scratch space

Page 24: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Replace depends on relative sizes● S(R) = S(O) → replace O with R● S(R) < S(O) → replace and pad with nops● S(R) > S(O) → detour with jump (J)

○ S(J) = S(O) → replace O with J○ S(J) < S(O) → replace and pad with nops○ S(J) > S(O) → replace and relocate surrounding instructions

Page 25: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Can instructions always be relocated?

Page 26: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Side effects

push R0test R0,R1 set parity flagjpe L0 jump if parity evenor 0x67,R2

Alter status flags

push R0test R0,R1add R2,R3jpe L0or 0x67,R2

Solution

Whitelist of instructions known to be safe to relocate

Page 27: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

0x00 1 push R00x01 5 jump D00x06 1 nop0x07 1 nopL0:0x08 3 or 0x67,R2…D0:… // added instructions0xffea 2 load 0x48(PC),R00xffec 5 call fnct0xfffd 5 jump L0

0x00 1 push R00x01 2 load 0x48(PC),R00x03 5 call fnct0x08 3 or 0x67,R2

PC-relative addressing

0x48 + 0x01 = 0x49

0x48 + 0xFFEA = 0x10032

Page 28: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

0x00 1 push R00x01 5 jump D00x06 1 nop0x07 1 nopL0:0x08 3 or 0x67,R2…D0:… // added instructions0xffe6 6 load -0xff9d(PC),R00xffec 5 call fnct0xfffd 5 jump L0

0x00 1 push R00x01 2 load 0x48(PC),R00x03 5 call fnct0x08 3 or 0x67,R2

PC-relative addressing

0x49 - 0xFFE6 = -0xFF9D

Solution

Fixup displacementin relocated instruction

Page 29: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Branch target

0x00 1 push R00x01 2 load 0x14,R0L0:0x03 5 call fnct0x08 3 or 0x67,R2…0x68 2 jump L0

0x00 1 push R00x01 5 jump D00x06 1 nop0x07 1 nopL1:0x08 3 or 0x67,R2…0x68 2 jump L0… D0:0xffec 2 load 0x14,R0… // added instructions0xfff8 5 call fnct0xfffd 5 jump L1

Solution

Record branch target locations before rewriting

Page 30: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Problematic instructions● Branch targets → do not rewrite● PC-relative addressing → fixup displacement● Side effects → only rewrite white-listed instructions

Page 31: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

What if not enough instructions can be relocated?

31

Page 32: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Cannot relocate instructions

32

● Cannot accommodate jump● Detour cannot be used● Instead, insert short illegal instruction● Setup signal handler to catch SIGILL● Put added instructions into handler● Significant overhead but extremely rare

Page 33: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Disassembling

33

Page 34: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

What is disassembling?

34

0 1 0 0 1 0 0 1 0 0 1

Binary

push R0load 0x14,R0call fnctor 0x67,R2

Disassembly

Disassembling

0 1 0 0 1 0 0 1 0 0 1

Binary

push R0load 0x14,R0call fnctor 0x67,R2

Disassembly

Disassembling

Break binary code into sequence of instructions

Page 35: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Disassembler types● Dynamic

○ Actually run program○ Decode instructions just in time○ Runtime penalty○ E.g. Dyninst, DynamoRIO, Pin

● Static○ Program is not run○ Binary scanned according to algorithm○ No runtime penalty○ E.g. Multiverse

35

Page 36: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Static disassembler

Linear Sweep

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R20x0b 2 jump L10x0d 3 and 0x45,R20x10 5 jump L20x15 ? bad // garbage

Recursive Traversal

0x00 1 push R00x01 2 load 0x14,R00x03 5 call fnct0x08 3 or 0x67,R20x0b 2 jump L1… // skipped instructions

L1:0x6c 4 move R0,R1

Page 37: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Disassembly challenges● Code discovery or content classification problem

○ Mixed code and data○ Halting problem

● Instruction overlapping○ Variable-length ISA○ One byte encodes several instructions○ Obfuscation technique

37

Page 38: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

SaBRe:Load-time selective binary rewriting for

system calls and function prologues

38

Page 39: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Fault injection● How to simulate e.g. a permission error at system call level?● Swap return value with error code

39

write(8, “Hello!”, 6) = 6

write(8, “Hello!”, 6) = EPERM

How to achieve that?

Page 40: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Intercepting system calls● Problem: syscalls are in libraries, not user programs● How to ensure all syscalls are intercepted?● Rewriting on disk ahead of time is impractical● Rewriting in memory just in time incurs overhead● Solution: “just ahead of time”

○ At load time○ Intercept dynamic linker○ Rewrite libraries when mapped○ In process memory

40

Page 41: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Application Programming Interface● Instrumentation through user-defined plugins

○ E.g. fault injection plugin○ Plugin implements hook functions

● Hook function for syscalls:long (*sbr_sc_handler_fn) (long, long, long, long, long, long, long)

○ Receives syscall number and 6 args○ Responsible for actually issuing syscall○ May alter parameters and return value

41

Page 42: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Fault injection● How to simulate e.g. a permission error at system call level?● Swap return value with error code

42

write(8, “Hello!”, 6) = 6

write(8, “Hello!”, 6) = EPERM

How to achieve that?

Page 43: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Basic fault injection pluginlong handle_syscall (long sc_no, long arg1, long arg2, long arg3, long arg4, long arg5, long arg6) {

long ret = real_syscall(sc_no, arg1, arg2, arg3, arg4, arg5, arg6);

if (sc_no == SYS_WRITE)

ret = -EPERM;

return ret;

}43

Page 44: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Available plugins● Identity

○ Dummy plugin○ Passes syscalls on unchanged○ Testing and benchmarking

● Fault injector○ Test application resiliency○ Simulate syscall failures○ User sets failure probability by syscall category

● Tracer○ strace replacement○ Does not use ptrace○ Much more efficient

44

Page 45: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Supported archs● x86_64

○ Main dev target○ Continuous integration

● RISC-V○ Open ISA○ Devroom yesterday○ QEMU Linux support

45

Page 46: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Current implementation● Target OS: Linux● Languages: mainly C + ASM snippets● No third-party library● LoC

○ Backbone: 2108○ x86_64: 1333

■ C: 963■ ASM: 410

○ API + support code: 2016

● Program size○ x86_64: 47 KiB○ RISC-V: 40 KiB

46

Page 47: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Evaluation

47

Page 48: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

● Experimental setup○ Plugin: identity○ Applications: nginx, lighttpd, redis, memcached○ Glibc 2.28○ 3-minute execution, millions of requests○ CPU utilisation: 100%

● Results○ 404 syscalls detoured○ Load-time overhead: 60ms○ Run-time overhead: ≤ 3%

Worst-case overhead

48

Page 49: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

System call tracer● Plugin mimics strace’s output● Not using ptrace● Compare with strace and equivalent Pin plugin● Issue read and write with dd

○ ~1M syscalls issued

● Estimate disk usage of 150GB tree with du

49

Page 50: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

dd results

50

Page 51: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

du results

51

Page 52: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Fault injector● Applications: GNU coreutils● Busybox testsuite● Bugs found

○ Cryptic error messages○ Lack of resiliency○ Crashes

52

Page 53: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

SaBRe in a nutshell● Selective binary rewriting

○ Syscalls and vDSO○ Function prologues○ x86_64-specific: RDTSC

● At load time, in process memory● Low overhead, suitable for embedded devices● Simple API to build plugins● Available plugins

○ Fault injector○ Tracer

● GPLv3

53

Page 54: SaBRE FOSDEM 2020 Load-time selective binary rewriting...SaBRE Load-time selective binary rewriting Paul-Antoine Arras, Anastasios Andronidis, Luís Pina, Karolis Mituzas, Qianyi Shu,

Availability● GitHub: https://github.com/srg-imperial/SaBRe● Licence: GPLv3

○ Plugins also under GPLv3

● PR and bug reports welcome!

54