Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]

338 views

Published on

David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]

Published in: Technology
  • Be the first to comment

  • Be the first to like this

David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]

  1. 1. Rootkit Busters Directed by David Reguera & Yago Jesus
  2. 2. Who are you ?? • Profesional seguridad informática • Editor Security By Default • Herramientas: Unhide, Anti Ransom, RadioGraphy, Patriot, etc etc etc • Actualmente en eGarante • Twitter: @YJesus
  3. 3. Who are you ?? • Profesional seguridad informática +10 years • Contributing to • x64dbg • Rootkit Unhooker • DbgChild • More: https://github.com/David-Reguera-Garcia-Dreg • Twitter: @fr33project
  4. 4. Rootkits • Malware de servicio • NO es el fin, ES el medio • Múltiples técnicas + Múltiples vectores • En constante evolución • No solo Linux !! • Conservar los privilegios
  5. 5. Rootkits GrantAllPrivileges()
  6. 6. Demo rootkit • Demo de un rootkit
  7. 7. Tendencias Año 2000 ... • /bin/ps --> OWNED • Cambio código + gcc = /bad/ps • Se excluyen nombres, usuarios, flags ... GREP GREP GREP • ¿Alguien ha dicho bash scripting? SÍÍÍÍÍÍ • Fáciles de detectar • Algunos rootkits tenían flags diferentes al original
  8. 8. Tendencias Año 2005 ... • Kernel's Party !!! • sys_call_table • SuckIT /dev/kmem • Kernel con pocas medidas de seguridad • Crash or profit !
  9. 9. Tendencias Año 2010 ... • Userland MODE • Hooking hooking hooking • ld.so.preload • Técnicamente fácil de implementar • 100% portable • Detección sencilla (gcc --static)
  10. 10. Tendencias Año 2010 ... • Inject on the fly • Limpio y con capacidad de evadir sospechas • Proceso malicioso parasita a proceso del sistema • Injectso • Ptrace() • Detección compleja
  11. 11. Tendencias Año 2010 ...
  12. 12. Unhide
  13. 13. Unhide • Basada en 'Cross view' • ... O lo que es lo mismo: comparar datos de distintas fuentes • /bin/ps ¿Qué ves? • /bin/netstat ¿Qué ves? • ¿Se ve lo mismo si buscamos de otra forma? • A veces sí, a veces no
  14. 14. Unhide2013 • Prototipo año 2002 • Perl ! • getpriority() • stat() • Decente desempeño
  15. 15. Unhide2013 Principales técnicas • ps VS /proc • ps VS syscalls • ps VS Fuerza Bruta • Netstat VS Bind()
  16. 16. Unhide2013 /bin/ps VS /proc • /proc/(pid) • ps 3222 + /proc/3222 = • ps !3222 + /proc/3222 =
  17. 17. Unhide2013 /bin/ps VS /proc • stat() • chdir() • opendir() • readdir() /bin/ps
  18. 18. Unhide2013 /bin/ps VS syscalls • syscall(s) relacionadas con procesos • ps 3222 + getpriority(3222) = • ps !3222 + getpriority(3222) =
  19. 19. Unhide2013 /bin/ps VS syscalls • getpriority() • getpgid() • getsid() • sched_getaffinity() • sched_getparam() • sched_getscheduler() • sched_rr_get_interval() • kill() /bin/ps
  20. 20. Unhide2013 /bin/ps VS bruteforce • kernel.pid_max = 32768 • fork() * 32768 • Bingo Time !
  21. 21. Unhide2013 /bin/ps VS BruteForce • fork() • pthread /bin/ps
  22. 22. Unhide2013 /bin/netstat VS bind() • max tcp/udp port = 65.535 • bind() * 65535 • Bingo Time !
  23. 23. Unhide2013 /bin/netstat VS bind() • bind() --> TCP • bind() --> UDP /bin/netstat
  24. 24. Anti-Unhide GAY_PROCS = ["ldd", "unhide", "rkhunter", "chkproc", "chkdirs", "ltrace", "strace", "LD_AUDIT"] cmd == unhide ? --> soy bueno cmd != unhide? --> hago el mal
  25. 25. Unhide2013 Demo con rootkit sin Anti-Unhide Demo de rootkit con Anti-Unhide Demo de Anti-Anti-Unhide
  26. 26. UnhideNX
  27. 27. UnhideNX • Generación de nombres aleatorios de los ejecutables: gmer, rootkit unhooker etc.
  28. 28. UnhideNX • GID Bruteforce (MAGIC GIDs…): • Ficheros: chown + readdir • Procesos: procfs dont Support xattr
  29. 29. UnhideNX • Process GID Bruteforce: • setgid jail detection • setgid + readdir /proc • setgid + stat /proc
  30. 30. UnhideNX • API high level vs API low level: • x86: readdir /proc VS eax=0x8d(getdents) + int 0x80 • x64: readdir /proc VS rax=0x4e(getdents) + syscall
  31. 31. UnhideNX • Algunos problemas encontrados con bruteforce de GIDs: • Bruteforce readdir /proc: lento • El proceso crashea debido a bugs en el código del rootkit • setgid jail no implementado en todos los rootkits
  32. 32. UnhideNX Demo UnhideNX detectando un rootkit por GID bruteforce Demo API high level vs API low level
  33. 33. UnhideNX TODO: • Comprobación de compilación gcc –static • Emulación código static vs emulación de código dynamic: https://github.com/David-Reguera-Garcia- Dreg/emuhookdetector
  34. 34. Contramedidas Alteración de binarios • rpm -Va • afick • debsums -a
  35. 35. Contramedidas Rootkits a nivel kernel Secure Boot
  36. 36. Contramedidas Preload http://disec.sourceforge.net/ https://github.com/digsig-ng (?)
  37. 37. Contramedidas Preload • Integrity Measurement Architecture • IMA appraisal • En el kernel 'By Default' • ¿Alguien lo está usando? :( • https://sourceforge.net/p/linux-ima/wiki/Home/#ima- appraisal
  38. 38. Contramedidas Injection • kernel.yama.ptrace_scope = 3 • ### These rules watch for code injection by the ptrace facility. -a always,exit -F arch=b32 -S ptrace -k tracing -a always,exit -F arch=b64 -S ptrace -k tracing -a always,exit -F arch=b32 -S ptrace -F a0=0x4 -k code_injection -a always,exit -F arch=b64 -S ptrace -F a0=0x4 -k code_injection -a always,exit -F arch=b32 -S ptrace -F a0=0x5 -k data_injection -a always,exit -F arch=b64 -S ptrace -F a0=0x5 -k data_injection -a always,exit -F arch=b32 -S ptrace -F a0=0x6 -k register_injection -a always,exit -F arch=b64 -S ptrace -F a0=0x6 -k register_injection
  39. 39. Contramedidas PydeAPI • /proc/(pid)/maps • 7f92ecbb0000-7f92ecbb1000 r-xp 00001000 08:01 658001 /usr/lib/x86_64-linux-gnu/libdl-2.28.so • Busca en la base de datos RPM o DPKG si 'conoce' la librería • También busca el binario en ejecución • Demo PydeAPI
  40. 40. Conclusiones ... • Rookits (Userland, Kernelmode, Stealth, BIOS, UEFI ...) • Crypto helps ! • Mejor heurística VS firmas • Aprovechar 'sus' fallos de diseño • No quieres anti-anti-anti-anti -anti ... ? Guarda un AS en tu manga • Live siempre más complejo que offline

×