1 of 35

Взламывать Linux ядро

стало тяжелее,

но нас не остановить

Sabyrzhan “novitoll” Tasbolatov

Spectre Security Group

SSG. novitoll

2 of 35

Agenda

  • шо цэ ядро
  • как ломать ядро
  • байтоебство или вместо Солнца дебаггер
  • какие есть защиты
  • stack guard или канарейка
  • NX bit, KASLR, SMAP, SMEP, kPTI, slab_freelist_hardened, ARM64_UAO, SECCOMP, SELinux (LSM)
  • ARM MTE

емаааа, и че как это обойти

SSG

SSG. novitoll

3 of 35

Во первых, зачем ломать? $250K - $2.5M

SSG

SSG. novitoll

4 of 35

SSG

SSG. novitoll

5 of 35

SSG

SSG. novitoll

6 of 35

SSG

SSG. novitoll

Но круче найти, зарепортить и пойти на конфу с докладом

7 of 35

Не упоминай его имя в суе

SSG

SSG. novitoll

8 of 35

Что такое ядро

SSG

SSG. novitoll

9 of 35

syscalls

SSG. Sabyrzhan “novitoll” Tasbolatov. Reverse engineering & binary exploitation course.

SSG

user space

kernel space

syscall

result

10 of 35

SSG

SSG. novitoll

11 of 35

как ломать ядро

SSG

SSG. novitoll

12 of 35

SSG

SSG. novitoll

13 of 35

как ломать ядро

  • найти уязвимости
    • fuzzing: syzkaller
    • semantic analysis/grep: sparse, Coccinelle
  • собрать ядро с конфигом
    • kasan, kcsan, kmsan
  • собрать rootfs/initrd для Qemu
  • сделать reproduce (repro)
  • получить arbitrary RW (use-after-free, null-ptr-deref)
    • получить контроль над RIP (ROP chain)
  • перезаписать “struct task_struct” -> “struct cred”; uid,eid,gid=0
  • вернуться безопасно в правильном режиме в юзерспейс
  • вызвать юзерспейс функцию, которая дает shell

SSG

SSG. novitoll

14 of 35

как ломать ядро

  • найти уязвимости
    • fuzzing: syzkaller
    • semantic analysis/grep: sparse, Coccinelle
  • собрать ядро с конфигом
    • kasan, kcsan, kmsan
  • собрать rootfs/initrd для Qemu
  • сделать reproduce (repro)
  • получить arbitrary RW (use-after-free, null-ptr-deref)
    • получить контроль над RIP (ROP chain)
  • перезаписать “struct task_struct” -> “struct cred”; uid,eid,gid=0
  • вернуться безопасно в правильном режиме в юзерспейс
  • вызвать юзерспейс функцию, которая дает shell

SSG

SSG. novitoll

15 of 35

SSG

SSG. novitoll

1

2

3

16 of 35

SSG

SSG. novitoll

4

5

17 of 35

Spectre Security Group

18 of 35

SSG

SSG. novitoll

19 of 35

KASAN, KMSAN, KCSAN

Spectre Security Group

  • Tale of 1000 kernel bugs,

Dmitry Vyukov, 2018

  • KASAN in a bare-metal hypervisor, Alexander Popov, 2016

20 of 35

Coccinelle

SSG

SSG. novitoll

21 of 35

SSG

SSG. novitoll

22 of 35

становиться тяжелее

SSG

SSG. novitoll

23 of 35

у нас 4 байта перезаписи памяти в ядре, мы получим root?

SSG

SSG. novitoll

24 of 35

SSG

SSG. novitoll

25 of 35

SSG

SSG. novitoll

26 of 35

SSG

SSG. novitoll

27 of 35

SSG

SSG. novitoll

28 of 35

SSG

SSG. novitoll

29 of 35

KASLR, SMAP, SMEP, kPTI

SSG

SSG. novitoll

30 of 35

kPTI

SSG

SSG. novitoll

31 of 35

Android: Linux kernel

SSG

SSG. novitoll

32 of 35

SSG

SSG. novitoll

Android: Linux kernel

33 of 35

ret2bpf, Android Mi9 device

SSG

SSG. novitoll

34 of 35

из последних защит на Андроид при ARM MTE

SSG

SSG. novitoll

35 of 35

Спасибо ^_^

Вопросы?

SSG

SSG. novitoll