rootkits em kernel space - redshift, um rootkit para o kernel do freebsd

56
1

Upload: nullbyte-security-conference

Post on 14-Jan-2017

138 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

1

Page 2: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift

Um rootkit para o kernel do FreeBSD

Anderson [email protected]

2

Page 3: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Agenda

★ sobre mim★ Rootkit

○ tipos de rootkit

★ Redshift○ O que é isso?○ Comandos○ técnicas○ Módulos

★ Demonstração★ Detecção★ Futuro★ dúvidas?

3

Page 4: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

sobre mim

★ quem?

Email: Anderson eduardo < [email protected] >Twitter: @andersonc0d3Github: @andersonc0d3

★ O que eu faço?

Security researcher

★ Principais interesses

kernel, rootkit, virtualização, sistemas operacionais, ciência da computação

skateboard, matemática, física, neurociência

★ Anteriormente

Security analyst (Conviso application security, 3 anos)Exploit for CVE-2012-0217 (sysret)EXploit for CVE-2012-4576 (Freebsd’s linux compat subsystem ioctl)

4

Page 5: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Motivação e AVISO LEGAL

Este é o resultado de um trabalho pessoal e sem revisões prévias, nascido e mantido pelo seu único desenvolvedor,

como uma forma de estudar os assuntos de seu interesse. Sendo assim, erros poderão ser cometidos nesta

apresentação e peço desculpas desde já.

Gostaria também de mencionar que este rootkit não tem nenhuma relação com outra pessoa ou entidade a não ser

seu único desenvolvedor.

5

Page 6: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Modos de operação de uma CPU

★ real mode○ 16 bits○ sem rings de proteção○ acesso total ao hardware

★ protected mode○ rings○ paginação○ 32 bits - 4G

★ virtual 8086○ DOS

★ long mode/IA-32e○ paginação - 256 TB○ Sem segmentação○ amd64 canonical address - 48 bits de endereçamento○ 64 bits registradores gerais etc..○ sub modo de compatibilidade 32 bits

http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf6

Page 7: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Modos de operação de uma CPU

★ SMM○ 16 bits○ SMRAM

■ Área da memória RAM somente acessível em SMM mode, invisível para o sistema operacional

○ Saved state map○ SMI Handler provido pela BIOS/UEFI○ usado para gerenciar erros críticos:

energia/voltagem/aquecimento/erros do chipset por exemplo.

http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf7

Page 8: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Modos de operação de uma CPU

http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf8

Page 9: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Níveis de privilégio - modo protegido

https://en.wikipedia.org/wiki/Protection_ring#/media/File:Priv_rings.svg9

Page 10: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Rootkit

“A rootkit is a collection of computer software, typically malicious, designed to enable access to a computer or

areas of its software that would not otherwise be allowed (for example, to an unauthorized user) while at the same time masking its existence or the existence of

other software.”

https://en.wikipedia.org/wiki/Rootkit10

Page 11: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Rootkit

https://en.wikipedia.org/wiki/Rootkit11

Page 12: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Tipos de rootkit

★ ring 3 - userland★ ring 0 - kernel/bootkit★ ring -1 - hypervisor★ ring -2 - SMM (System management mode)★ ring -3 - Intel management/manageability engine (ME)★ hardware/Firmware rootkits

12

Page 13: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring 3

★ ring 3 - userland○ Sobrescrever/alterar binário do sistema operacional

■ ps, ls, netstat, top, last, w■ sshd■ apached/httpd■ smbd

○ Ptrace() syscall

13

Page 14: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring 0

★ ring 0 - kernel/bootkit★ Necessário acesso root

○ Carregar módulo no kernel○ sobrescrever bootloader

★ principal vetor de ataque para outros níveis★ Acesso total ao hardware★ bootkits

○ Utilizado para atacar o kernel, e.g: desabilitar patchguard○ interceptar senhas e ataques contra full-disk encryption -

Stoned bootkit [1]○ infecta MBR/VBR, altera (hook) IVT da BIOS, carrega

bootloader do sistema operacional, reganha acesso

14

Page 15: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring 0

★ Exemplos de rootkits em ring 0○ redshift (FreeBSD)○ suckit○ diamorphine (Linux 2.6/3.X) [2]○ babykit [3]○ sutersu○ stoned bootkit○ e muito mais...

15

Page 16: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring -1

https://en.wikipedia.org/wiki/Protection_ring16

Page 17: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring -1

★ bluepill [4]○ Joanna Rutkowska○ windows vista x64○ Amd pacifica

★ subvirt [5]○ Universidade de michigan and microsoft○ windows xp e linux

★ vitriol [6]○ dino dai zovi○ Mac-os x○ Intel vt-x

17

Page 18: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring -2

★ ring -2 - SMM (System management mode)○ loic duflot [7]

■ Ataque para OpenBSD usando SMM para desabilitar securelevel¹

○ A Real SMM Rootkit: Reversing and Hooking BIOS SMI Handlers, phrack edição 66, artigo 11 [8]

18

Page 19: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - ring -3

★ ring -3 - management engine / vpro based★ Alexander Tereshkin e Rafal Wojtczuk

○ Introducing Ring -3 Rootkits [9]■ Q35 chipset Q3'07■ independente da CPU■ Ativo mesmo em S3■ Acesso remoto■ Acesso a memória via DMA

19

Page 20: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - hardware/firmware rootkits

★ BIOS/UEFI○ How Many Million BIOSes Would you Like to Infect? [10]○ Persistent BIOS Infection, phrack edição 66, artigo 7, anibal

sacco e alfredo ortega [11]○ DE MYSTERIIS DOM JOBSIVS Mac EFI Rootkits, snare [12]○ A Real SMM Rootkit: Reversing and Hooking BIOS SMI Handlers

[8]

★ PCI○ John Heasman, Implementing and detecting PCI ROOTKITs [13]○ João Batista e Bruno cardoso, Low level playground [14]

★ SCADA○ stuxnet

20

Page 21: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

rootkits

★ QUem usa?○ Lenovo, SONY e muitos outros que ainda não foram

descobertos :)

21

Page 22: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - Caso da lenovo

http://www.zdnet.com/article/lenovo-rootkit-ensured-its-software-could-not-be-deleted/22

Page 23: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - Caso da sony

http://www.zdnet.com/article/lenovo-rootkit-ensured-its-software-could-not-be-deleted/23

Page 24: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

tipos de rootkit - Caso Eddie Raymond Tipton

http://arstechnica.com/tech-policy/2015/04/prosecutors-suspect-man-hacked-lottery-computers-to-score-winning-ticket/24

Page 25: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift - O que é isso?

★ Rootkit pessoal para o kernel do freebsd (ring 0)★ FreeBSD 10★ Userland handler★ Nasceu em 2015★ Fácil de usar, flexível, atualizado, constante

desenvolvimento, estável★ Confiável, open-source

★ overlabs# ./redshift_handler COMMAND MODULE ARGS TECHNIQUE

25

Page 26: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift exemplos

★ overlabs# ./redshift_handler load

★ overlabs# ./redshift_handler status

★ overlabs# ./redshift_handler enable hide_module redshift syscall★ overlabs# ./redshift_handler enable hide_process “./sniffer” syscall★ overlabs# ./redshift_handler enable hide_FILE “senhas.txt” syscall★ overlabs# ./redshift_handler enable give_root vsyscall

★ overlabs# ./redshift_handler status hide_module

★ overlabs# ./redshift_handler unload

26

Page 27: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift comandos

★ enable/disable○ Habilita ou desabilita um módulo específico

★ load/unload○ Carrega/descarrega o rootkit do kernel

★ Status○ Status atual

27

Page 28: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift comandos

★ enable/disable○ ./redshift_handler enable hide_file passwords.txt syscall○ ./redshift_handler enable hide_process NULL 666 syscall○ ./redshift_handler enable give_root vsyscall

★ load/unload○ ./redshift_handler load○ ./redshift_handler unload

★ Status○ ./redshift_handler status

28

Page 29: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift técnicas

★ syscall○ Altera o syscall handler de uma syscall específica

★ vsyscall○ Altera o interrupt handler e simula uma syscall

★ debug registers○ ALtera o interrupt handler de debug e simula uma syscall

virtual

★ driver○ Altera o handler específico do driver

29★ - Falta integrar ao redshift

Page 30: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica syscall

★ Altera syscall handlers○ tabela de syscalls tem permissão de escrita○ Ao desabilitar restaura o handler original

★ Fácil de detectar○ Verificar se a tabela de syscalls foi alterada, checar

integridade

30

Page 31: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica syscall

★ Hide_module○ Altera as system calls para o redshift, 9 system calls

○ Restaurar os handlers originais, 9 system calls

31

Page 32: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica syscall

★ hide_file○ Altera as system calls para o redshift

32

Page 33: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica syscall

★ hide_file○ Restaurar os handlers originais

33

Page 34: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

técnica vsyscall - virtual syscall

★ substitui o interrupt handler○ Interrupt descriptor table (IDT) - x86○ MSR LSTAR e MSR CSTAR - x86_64

★ Simula uma syscall○ simula a criação de uma nova syscall, Não altera a tabela

das syscalls.

★ Fácil de detectar○ Verificar alterações no MSR LSTAR

34★ - Falta integrar ao redshift

Page 35: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica vsyscall - virtual syscall

★ Alterando o MSR MSR_LSTAR

35

Page 36: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica vsyscall - virtual syscall

★ Restaurando o handler original

36

Page 37: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica debug registers

★ A melhor técnica a ser implementada no Redshift○ Mais furtividade○ Mais controle do sistema, permite se retirar

silenciosamente

★ Técnica Bem descrita na phrack edição 65, artigo 08. [15]★ outros rootkits

○ mood-nt, darkangel○ DR rootkit, Immunity Inc [16]

37

Page 38: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica debug registers

http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf38

Page 39: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica debug registers

http://www.intel.com/Assets/en_US/PDF/manual/253668.pdf39

Page 40: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Técnica alterar driver

★ Driver do teclado★ ALtera funções dinÂmicas do driver/kernel

○ Virtual file system (VFS) file operations etc.★ Processo de detecção árduo

○ conhecer detalhes do sistema operacional e do driver

40★ - Falta integrar ao redshift

Page 41: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules

★ hide_file○ Permite ao atacante esconder arquivos

★ hide_process○ Permite ao atacante esconder processos por PID ou nome do

processo

★ hide_module○ permite ao atacante esconder módulos carregados no sistema

★ Give_root○ Permite ao atacante ganhar acesso root

★ Keylogger○ Permite ao atacante capturar teclas pressionadas no teclado

★ Disable mitigations○ permite ao atacante desabilitar mitigações do sistema (securelevel,

map_at_zero)

★ Escape sandbox○ Permite ao atacante desabilitar sandbox capsicum do sistema

★ - Falta integração ao redshift

41★ - Falta integrar ao redshift

Page 42: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - HIDE_FILE

★ Esconde arquivos★ Utiliza técnica de alterar a tabela de syscalls★ Ideia principal Alterar o handler da syscall

getdirentries★ Altera ao total 12 system calls★ bypassável se usando link simbólicos

○ A ser corrigido em breve

★ ./redshift_handler enable hide_file “senhas.txt” syscall

42

Page 43: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - HIDE_FILE

43

Page 44: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - HIDE_PROCESS

★ Esconde processo por PID ou nome do processo★ Evita ptrace() e kill()★ Utiliza técnica de alterar a tabela de syscalls★ userland obtém lista de processos através da

interface sysctl○ altera sysctl handler para o redshift

44

Page 45: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - HIDE_PROCESS

★ Habilitando módulo

★ Desabilitando módulo

45

Page 46: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - HIDE_MODULE

★ Esconde módulos★ Utiliza técnica de alterar a tabela de syscalls★ Altera 9 system calls, utilizadas pelo comando kldstat

○ kldstat(), kldfind(), kldnexT(), kldfirstmod(), modstat(), modfind(), modnext(), modfnext()

46

Page 47: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - GIVE ROOT

★ Permite escalação de privilégios★ Utiliza a técnica vsyscall★ Altera o MSR (Machine SPecific register)

○ Específico para cada cpu, utilizar processor affinity (cpuset) ao executar o handler

○ cpuset -l CORE ./redshift_handler enable give_root vsyscall

47

Page 48: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift modules - GIVE ROOT

48

Page 49: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Redshift

Demonstração

49

Page 50: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Detecção e fraquezas

★ Olhar as alocações dinâmicas○ vmstat -m○ A ser corrigido em breve

★ Bypass do módUlo hide_file usando links simbólicos○ ./redshift_handler enable hide_filE senhas_clientes.txt syscall○ ln -s senhas_clientes.txt abcd; cat ABCD○ A ser corrigido em breve (namei API)

★ Redshift somente altera o kernel do sistema operacional, mascarando a visão do usuário do sistema. Uma análise mais aprofundada permite o bypass de todos os módulos do redshift

50

Page 51: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Detecção e fraquezas

★ KLDsym

51

Page 52: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Detecção e fraquezas - KLDSYM

52

Page 53: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Futuro do redshift

★ Networking○ Gerenciamento do rootkit remotamente

■ ./redshift_handler COMMAND MODULE ARGUMENT TECHNIQUE IP

★ Suporte a código 32 bits★ Melhorar furtividade★ Mais técnicas de hook★ Persistência?★ Descer o nível - TLB SPLIT, SMM, UEFI/BIOS e virtualização★ Melhorar comunicação handler -> redshift★ Melhorar código★ portar para linux?★ Corrigir bugs

○ Implementar mecanismos de locking para evitar races○ melhorar interface entre handle e o redshift

53

Page 54: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Referências

1. Stoned bootkita. https://www.blackhat.com/presentations/bh-usa-09/KLEISSNER/BHUSA09-Kleissner-Sto

nedBootkit-SLIDES.pdf2. Diamorphine

a. https://github.com/m0nad/Diamorphine3. BABYKIT

a. https://github.com/rick2600/babykit4. Introduction to bluepill

a. https://www.coseinc.com/en/index.php?rt=download&act=publication&file=Introducing%20Blue%20Pill.ppt.pdf

5. SubVirt: Implementing malware with virtual machinesa. http://web.eecs.umich.edu/~pmchen/papers/king06.pdf

6. Hardware virtualization rootkita. https://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Zovi.pdf

7. Using CPU System Management Mode to Circumvent Operating System Security Functionsa. http://fawlty.cs.usfca.edu/~cruse/cs630f06/duflot.pdf

8. A Real SMM Rootkit: Reversing and Hooking BIOS SMI Handlersa. http://phrack.org/issues/66/11.html

9. Introducing Ring -3 Rootkitsa. http://me.bios.io/images/6/61/Ring_-3_Rootkits.pdf

10. How Many Million BIOSes Would you Like to Infect?a. http://www.legbacore.com/Research_files/HowManyMillionBIOSWouldYouLikeToInfe

ct_Full2.pdf 54

Page 55: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Referências

11. Persistent BIOS Infectiona. http://phrack.org/issues/66/7.html

12. DE MYSTERIIS DOM JOBSIVS Mac EFI Rootkitsa. http://ho.ax/De_Mysteriis_Dom_Jobsivs_Black_Hat_Paper.pdf

13. implementing and detecting PCI rootkita. https://www.blackhat.com/presentations/bh-dc-07/Heasman/Paper/bh-dc-07-Heasma

n-WP.pdf14. Low Level Playground

a. http://www.h2hc.org.br/repositorio/2008/Joao.pdf15. Mistifying the debugger, ultimate stealthness

a. http://phrack.org/issues/65/8.html16. DR rootkit

a. http://seclists.org/dailydave/2008/q3/215

55

Page 56: Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD

Obrigado!

Dúvidas?

56