Um rootkit é um conjunto de ferramentas que são usadas para esconder processos, ficheiros ou dados do sistema operativo, atacar e infectar outros computadores, roubar informações e interagir em tempo real com o sistema comprometido.
Pode tomar o controlo total de um sistema dando acesso privilegiado a utilizadores não autorizados. Com um rootkit podemos aceder a um sistema, onde é possível executar tarefas, alterar as permissões de acesso, esconder ficheiros, efectuar ataques DoS (Denial Of Service) e apoderar-se das ligações de rede.
O atacante de uma forma mascarada instala outros programas como backdoors para um acesso sem restrições à máquina infectada posteriormente. Desta forma podemos classificar um Rootkit como uma aplicação ou conjunto de aplicações que, utilizando funções do sistema operativo, ocultam a sua presença sendo, por vezes, quase indetectáveis (Barwinski, 2009).
O conceito de Rootkit surge em meados de 1990, quando administradores de sistema UNIX começaram a detectar comportamentos estranhos nos servidores que administravam (Chuvakin, 2003) tais como espaço em disco utilizado, mas não identificado, ligações de rede que não eram listadas ou uso do CPU acima do normal.
1. Classificação de Rootkits
Os Rootkits podem ser classificados em:
1) Rootkits Nível do utilizador
Os rootkits ao nível do utilizador, também conhecidos como user level, user mode e application level, são os rootkits mais básicos e são subdivididos em dois tipos:
- binários
- bibliotecas
2) Rootkits binários
Os Rootkits binários foram o primeiro tipo de rootkit a surgir, são composto por vários programas binários maliciosamente modificados, (Chuvakin, 2003) que substituem programas do sistema, sendo estas versões alteradas (Penasio & Marangon, 2005). São usados para atingir com os objectivos de acesso remoto, acesso local e esconder evidências. A vantagem deste tipo de rootkit está no facto de serem simples de serem instalados, pois requerem apenas a substituição das versões originais dos binários pelas versões modificadas (Chuvakin, 2003).
3) Rootkits do tipo biblioteca
Os rootkits do tipo biblioteca, ou library level substituem as principais bibliotecas, do sistema operativo por versões maliciosamente modificadas pelo invasor, de forma a interceptar acessos a informações que os programas ao nível de utilizador procuram no sistema operativo, ocultando, assim, as actividades do atacante. (Chuvakin, 2003)
4) Rootkits Kernel
Os Rootkits de Kernel são implementados como módulos do núcleo do sistema operativo (Penasio & Marangon, 2005), também conhecidos como kernel level ou kernel mode, ocultam e modificam informações directamente no núcleo do sistema operativo. De acordo com Qian, L. H., et al. (2007) podem ser divididos em dois tipos:
- Loadable Kernel Modules (LKMs), módulos maliciosos que são carregados dinamicamente no kernel do sistema operativo;
- Run-time Kernel Patching, modificação de estruturas e informações do kernel directamente na memória do sistema operativo.
Consiste, em alocar memória no espaço de memória do kernel, encontrar a tabela de processos do sistema, interceptando e substituindo os dados que entram e saem, usando técnicas como system call hooking, inline function hooking ou code byte patching.
São difíceis de detectar e de bloquear, contudo, são removidos a cada reinício da máquina, pois residem exclusivamente na memória. É possível criar scripts que voltam a carregar a cada boot o rootkit ou alterando directamente o ficheiro binário do kernel.
5) Rootkits de Master Boot Record (MBR)
Os Rootkits de Master Boot Record (MBR) também conhecidos por bootkits, reescrevem o MBR com o código malicioso, sendo o original guardado e o rootkit instalado no primeiro sector do disco. Como está escondido na MBR o Rootkit é efectivamente invisível para o sistema operativo e para os softwares de segurança instalados no mesmo (Keizer, 2008).
No próximo arranque do computador, serão feitas alterações de forma a controlar o sistema com as seguintes vantagens:
- Controlo total sobre o processo de boot;
- O código é executado antes mesmo do sistema operativo arrancar;
- Não é necessário esconder processos, ou entradas de registro;
- O rootkit é arrancado no MBR, fora do sistema operativo;
- Para ocultar o rootkit, basta controlar sectores específicos do disco.
Este tipo pode modificar e interceptar qualquer acesso do sistema e tornam ineficazes a encriptação dos discos rígidos, pois é arrancado antes do sistema operativo interceptando a palavra-passe do utilizador quando solicitada, comprometendo a confidencialidade dos dados.
6) Rootkits em maquina virtual
Os Rootkit em maquina virtual (HVM) em termos abstractos, a Virtualização é uma forma de emular as características físicas de uma arquitectura informática, utilizando software especializado para o efeito. Este software faz como que um encapsulamento das características em termos de hardware físico da máquina, tornando-o virtual, sendo um hypevisor uma técnica de virtualização que permite correr múltiplas máquinas virtuais em simultâneo num único host. HVM rootkits são versões “leves” de hypervisors que tiram partido do hardware de virtualização do CPU (i.e. AMD-V, Intel VT-x) (Fritsch, 2008).
Estes rootkits são capazes de se alojar numa VM enquanto o sistema operativo está em produção. Contudo, apesar de ser uma vantagem ao reiniciar o sistema o rootkit ser limpo, deixa de o ser quando ponderamos as vezes que reiniciamos um servidor. À medida que ficamos mais próximos do hardware, aumentamos o poder de controlo e aumentamos complexidade da detecção.
7) Rootkit de firmware
Os Rootkit de firmware armazenam-se em memorias ROM ou flash. No caso dos computadores aloja-se na BIOS. Esta raramente sofre testes de integridade, sendo um local apetecível de ataque. A vantagem de instalação de rootkit na BIOS é que resiste à formatação do sistema.
Estes são os rootkits que apresentam o maior nível de invisibilidade e a maior possibilidade de controlar os dados da maquina atacada, no entanto, são complexos e muito específicos ao firmware que irão atacar, bem como, requerem que o computador atacado tenha as ferramentas necessárias para que o rootkit seja gravado no firmware.
As formas de prevenção de rootkits em nível firmware incluem proibição de escrita nos firmwares, através de jumpers no hardware, o uso de assinatura digital, de forma a permitir somente a escrita no firmware de código autorizado pelo fabricante.
Equipas de Hacking afirmam que a instalação de UEFI rootkit requer acesso físico ao computador, contudo, investigadores da Trend Micro afirmam que é possível faze-lo remotamente (Constantin, 2015).
2. Categorias de rootkits
As funcionalidades dos rootkits dividem-se nas seguintes categorias:
Manter o acesso: é caracterizado pelos backdoors, tanto para manter o acesso local, quanto acesso remoto. Podem ser usadas diferente ferramentas para o fazer, sendo exemplo o Telnet e o SSH. O acesso local pode ser mantido através de ferramentas do sistema alteradas, como o login, de utilizadores especiais com acesso de root.
Permitir atacar outros sistemas: as ferramentas de ataque dos rootkits também têm a função de ampliar o território do atacante. Estas podem ser para ataque local, remoto ou DoS (Denial of Service). As ferramentas para acesso local são utilizadas para recuperar o acesso de administrador do sistema, caso seja perdido. Os rootkits também possuem sniffers para captura de passwords em protocolos não seguros como: POP3, IMAP, telnet e ftp. São habitualmente utilizados para criar redes zumbis (botnets) e utilizar o sistema como parte de uma rede de computadores remotamente controlados.
Destruir evidências: eliminar as evidências de um sistema atacado e impedir que novas provas sejam produzidas, a remoção destes vestígios inclui a limpeza de vários ficheiros de logs, de aplicações, históricos e registos de auditoria.
3. Prevenção e detecção de Rootkits
No início de 2005, os principais fabricantes de software de segurança começaram a desenvolver sistemas de detecção e prevenção contra rootkits devido à usa crescente disseminação.
Primeiro de tudo, é importante esclarecer a diferença entre prevenção e detecção:
A prevenção analisa o fluxo de execução da aplicação, a fim de evitar actividades hostis, ou procura quais aplicativos estão prestes a executar (produtos antivírus)
A melhor forma de se prevenir o uso de rootkits é, em primeiro lugar, evitar o uso dos mesmos, ou seja, evitar que o sistema seja atacado. Para tal, o sistema operativo deve ser configurado de forma segura e seguir as boas práticas, conforme (ISO 27001:2006 e ISO 17799:2005).
A detecção implica que o sistema já pode estar infectado e procura por indícios de técnicas conhecidas
Programas anti-rootkits detetam rootkits através de assinaturas e, normalmente, correm ao nível do utilizador. Estas características são o ponto fraco destes programas, visto que, no primeiro caso, um rootkit novo, ainda não conhecido, não será detectado pelo programa, já que ele não conhece a assinatura correspondente, e, no segundo caso, um rootkit ao nível de kernel pode manipular e ludibriar completamente um programa anti-rootkits.
4. Métodos de detecção
Métodos para detectar rootkits ao nível do utilizador segundo (Steding-Jessen & Murilo, 2001):
- Pesquisa por caracteres – A pesquisa por caracteres conhecidos, como nomes de ficheiros de configuração, utilizadores, palavras passe, endereços IP, entre outros, em binários trojaned, pode indicar a presença de um rootkit no sistema;
- Verificação de integridade – A verificação e comparação periódica de hashes de programas e ficheiros contra hashes geradas após uma instalação inicial do sistema, pode indicar a presença de alterações maliciosas em ficheiros, causadas por rootkits;
- Verificação de processos do sistema e bibliotecas –pode indicar acessos indevidos a ficheiros de configuração utilizados por rootkits;
- Análise de MAC times – MAC times de programas e ficheiros pode auxiliar no isolamento de possíveis alterações feitas após um ataque;
- Análise de Ligações de rede – A verificação por portas abertas e ligações suspeitas pode indicar a presença de um backdoor remoto no sistema;
- Analise processos do sistema e símbolos do kernel –símbolos incomuns no kernel podem indicar a presença de um rootkit em nível de kernel;
- Procura por outros indícios – A pesquisa por processos activos, mas não contabilizados no sistema, via uma busca excessiva no número total de identificador de processo (PID) disponível; directórios e ficheiros ocultos, o número de directórios e ficheiros visíveis são diferentes dos contabilizados; indícios de alterações em ficheiros de logs, como entradas apagadas ou sobrescritas; a presença de utilizadores estranhos; ficheiros de configuração e scripts incomuns no sistema; possível indicação da presença de binários trojaned que dá acesso de root; possível resíduo de processos, de ficheiros abertos e da compilação de programas; entre outros, podem ser indícios de que o sistema foi atacado e de que rootkits foram utilizados.
Métodos para detectar rootkits ao nível do kernel segundo (Qian, Zhou, Kong, Zhu, & Qian, 2007):
- Detecção de substituição (call hooks) de processos do sistema (syscalls) – Verifica-se os endereços, na tabela de símbolos contida na memória ou nos ficheiros do kernel, das syscalls e compara-se com os endereços encontrados na tabela de syscalls contida na memória;
- Detecção de jumps incondicionais (inline function hooks) – Verifica-se toda a memória do kernel em busca de jumps incondicionais que apontem para fora da semântica da função analisada;
- Detecção de funções que tiveram o seu código alterado (code byte patches) – hash ou baseline da memória do kernel, após uma instalação nova, e compara-se com a memória do sistema.
Também é possível utilizar sistemas de verificação de integridade locais de forma a detectar alterações em programas, ficheiros e logs do sistema.
Conclusão
Rootkits são ferramentas poderosas e a detecção torna-se cada vez mais difícil, principalmente no caso de rootkits implementados como módulos do kernel.
O constante crescimento da variedade de rootkits e as técnicas dos mesmos, é mais rápida que a capacidade de os administradores de sistemas acompanharem essa evolução, dificultando assim a sua detecção.
Podemos afirmar que a necessidade de constantes actualizações, não só dos sistemas, mas principalmente do conhecimento e de informação pertinente acerca da matéria, cresce gradualmente, à medida que novos métodos aparecem.
Tais fatos permitem afirmar que Rootkits não são simplesmente uma nova ameaça, e sim uma antiga ameaça, ignorada pela ausência de conhecimento em relação aos mesmos e na maioria das vezes desconhecida. É também notória a evolução dos rootkits desde a sua criação até os dias de hoje, o que nos deixa um campo em aberto para novas pesquisas e descobertas em relação ao tema.