O que é um Rootkit? - SM!Tech

O que é um Rootkit?

Share This

O termo rootkit existe há mais de 10 anos. Um rootkit é um "kit" que consiste em programas pequenos e úteis que permitem que um invasor mantenha acesso a "root", o usuário mais poderoso em um computador. Em outras palavras, um rootkit é um conjunto de programas e códigos que permitem uma presença permanente ou consistente e indetectável em um computador.

Resultado de imagem para rootkitEm nossa definição de "rootkit", a palavra-chave é "indetectável". A maioria das tecnologias e truques empregados por um rootkit são projetados para ocultar código e dados em um sistema. Por exemplo, muitos rootkits podem ocultar arquivos e diretórios. Outros recursos em um rootkit geralmente são para acesso remoto e espionagem, por exemplo, para cheirar pacotes da rede. Quando combinados, esses recursos fornecem um soco nocaute para segurança.

Os rootkits não são inerentemente "ruins", e nem sempre são usados ​​pelos "bandidos". É importante entender que um rootkit é apenas uma tecnologia. A intenção boa ou ruim deriva dos humanos que os usam. Existem muitos programas comerciais legítimos que oferecem gerenciamento remoto e até mesmo recursos de espionagem. Alguns desses programas usam sigilo. Em muitos aspectos, esses programas podem ser chamados de rootkits. A aplicação da lei pode usar o termo "rootkit" para se referir a um programa de back-door sancionado - algo instalado em um alvo com permissão legal do estado, talvez por ordem judicial. (Nós abordamos esses usos na seção Usos Legítimos de Rootkits mais adiante neste capítulo.) As grandes corporações também usam a tecnologia do rootkit para monitorar e fazer cumprir seus regulamentos de uso do computador.

Ao assumir a perspectiva do atacante, nós o orientamos através das habilidades e técnicas de seus inimigos. Isso aumentará suas habilidades na defesa contra a ameaça do rootkit. Se você é um desenvolvedor legítimo da tecnologia de rootkit, este livro irá ajudá-lo a construir uma base de habilidades que você possa expandir.

Por que existem rootkits?
Os Rootkits são uma invenção relativamente recente, mas os espiões são tão antigos quanto a guerra. Os rootkits existem pelos mesmos motivos que existem erros de áudio. As pessoas querem ver ou controlar o que outras pessoas estão fazendo. Com a enorme e crescente dependência do processamento de dados, os computadores são objetivos naturais.

Os rootkits são úteis somente se desejar manter o acesso a um sistema. Se tudo o que você quer fazer é roubar algo e sair, não há motivo para deixar um rootkit para trás. De fato, deixar um rootkit para trás sempre abre o risco de detecção. Se você roubar algo e limpar o sistema, você não pode deixar nenhum traço de sua operação.

Os Rootkits fornecem duas funções primárias: controle remoto e controle, e espionagem de software.

Comando e controle remoto

O comando e controle remoto (ou simplesmente "controle remoto") podem incluir controle sobre arquivos, causando reinicializações ou "Blue Screens of Death", e acessando o shell do comando (ou seja, cmd.exe ou / bin / sh). A Figura 1-1 mostra um exemplo de um menu de comando do rootkit. Este menu de comando irá dar uma idéia dos tipos de recursos que um rootkit pode incluir.


Efeituação de software

O espionagem de software é tudo sobre ver o que as pessoas fazem. Isso significa cheirar pacotes, interceptar batidas de teclas e ler e-mails. Um invasor pode usar essas técnicas para capturar senhas e arquivos descriptografados, ou mesmo chaves criptográficas.

Cyberwarfare

Embora os rootkits tenham aplicações na guerra digital, eles não são a primeira aplicação do conceito.

As guerras são travadas em muitas frentes, e não menos importante é a economia. Desde o final da Segunda Guerra Mundial até a Guerra Fria, a URSS montou uma grande operação de coleta de informações contra os EUA para obter tecnologia. [7]

Tendo detectado algumas dessas operações, os Estados Unidos criaram planos, software e materiais falsos no canal de coleta. Em um incidente relatado, modificações maliciosas no software (os chamados "ingredientes extras") foram creditadas para uma explosão de gasoduto siberiano. [8] A explosão foi fotografada por satélites e foi descrita como "a mais monumental explosão não-nuclear e o fogo já visto do espaço". [9]

Usos legítimos de rootkits

Como já mencionamos, os rootkits podem ser usados ​​para fins legítimos. Por exemplo, eles podem ser usados ​​por agências de aplicação da lei para coletar provas, em uma operação avançada de erro. Isso se aplicaria a qualquer crime em que um computador seja usado, como transgressão de computadores, criando ou distribuindo pornografia infantil, software ou pirataria de música e violações de DMCA [10].

Rootkits também pode ser usado para combater as guerras. As nações e seus militares dependem fortemente de máquinas de computação. Se esses computadores falharem, o ciclo de decisão e as operações do inimigo podem ser afetados. Os benefícios do uso de um ataque de computador (versus convencional) incluem que ele custa menos, mantém os soldados fora de perigo, causa pequenos danos colaterais e, na maioria dos casos, não causa danos permanentes. Por exemplo, se uma nação bombardeia todas as usinas de energia em um país, então essas usinas de energia precisarão ser reconstruídas a grande despesa. Mas se um verme de software infecta a rede de controle de energia e desabilita-o, o país alvo ainda perde o uso da produção das usinas, mas o dano não é permanente nem caro.

Há quanto tempo os Rootkits foram?
Como observamos anteriormente, os rootkits não são um novo conceito. Na verdade, muitos dos métodos usados ​​nos rootkits modernos são os mesmos métodos utilizados nos vírus na década de 1980, por exemplo, modificando as principais tabelas do sistema, a memória e a lógica do programa. No final da década de 1980, um vírus poderia ter usado essas técnicas para se esconder de um scanner de vírus. Os vírus durante esta época usaram disquetes e BBS (sistemas de quadro de avisos) para espalhar programas infectados.

Quando a Microsoft introduziu o Windows NT, o modelo de memória foi alterado para que os programas de usuário normais não pudessem modificar as principais tabelas do sistema. Um lapso na tecnologia de vírus rígido seguiu, porque nenhum autor de vírus estava usando o novo kernel do Windows.


Quando a Internet começou a atrapalhar, dominou os sistemas operacionais UNIX. A maioria dos computadores usava variantes do UNIX e os vírus eram incomuns. No entanto, isso é também quando as redes de worms nasceram. Com o famoso Morris Worm, o mundo da informática despertou a possibilidade de explorações de software. [11] Durante o início da década de 1990, muitos hackers descobriram como encontrar e explorar os transbordamentos de buffer, a "bomba nuclear" de todas as façanhas. No entanto, a comunidade de escrita de vírus não alcançou quase uma década.

Durante o início da década de 1990, um hacker penetraria em um sistema, montaria o campo e depois usaria o computador recém-comprometido para lançar novos ataques. Uma vez que um hacker penetrou um computador, ela precisava manter o acesso. Assim, os primeiros rootkits nasceram. Esses rootkits originais eram meramente programas de backdoor, e eles usavam muito pouco stealth. Em alguns casos, eles substituíram binários do sistema chave com versões modificadas que esconderiam arquivos e processos. Por exemplo, considere um programa chamado ls que lista arquivos e diretórios. Um rootkit de primeira geração pode substituir o programa ls por uma versão de Trojan que esconde qualquer arquivo chamado hacker_stuff. Então, o hacker simplesmente armazenaria todos os seus dados suspeitos em um arquivo chamado hacker_stuff. O programa ls modificado manteria os dados a serem revelados.

Os administradores do sistema naquele momento responderam escrevendo programas como Tripwire [12] que poderiam detectar se os arquivos foram alterados. Usando nosso exemplo anterior, um utilitário de segurança como Tripwire poderia examinar o programa ls e determinar que ele havia sido alterado, e o Trojan seria desmascarado.

A resposta natural foi para os atacantes se moverem para o kernel do computador. Os primeiros rootkits do kernel foram escritos para máquinas UNIX. Uma vez que eles infectaram o kernel, eles poderiam subverter qualquer utilitário de segurança no computador naquele momento. Em outras palavras, os arquivos de Trojan não eram mais necessários: todo o sigilo pode ser aplicado modificando o kernel. Esta técnica não foi diferente das técnicas utilizadas pelos vírus no final da década de 1980 para se esconder do software anti-vírus.

Como funcionam os rootkits?
Os rootkits funcionam usando um conceito simples chamado modificação. Em geral, o software é projetado para tomar decisões específicas com base em dados muito específicos. Um rootkit localiza e modifica o software para que ele tome decisões incorretas.

Existem muitos locais onde as modificações podem ser feitas no software. Alguns deles são discutidos nos seguintes parágrafos.

Patching

O código executável (às vezes chamado de binário) consiste em uma série de instruções codificadas como bytes de dados. Esses bytes vêm em uma ordem muito específica, e cada um significa algo para o computador. A lógica do software pode ser modificada se esses bytes forem modificados. Essa técnica às vezes é chamada de patch, como colocar um patch de uma cor diferente em uma colcha. O software não é inteligente; faz apenas e exatamente o que é dito fazer e nada mais. É por isso que a modificação funciona tão bem. Na verdade, sob o capô, não é tão complicado. O patamar de bytes é uma das principais técnicas usadas por "crackers" para remover proteções de software. Outros tipos de patches de bytes foram usados ​​para trapacear em jogos de vídeo (por exemplo, para oferecer ouro ilimitado, saúde ou outras vantagens).

Ovos de Páscoa

As modificações da lógica do software podem ser "incorporadas". Um programador pode colocar uma porta traseira em um programa que ela escreveu. Esta porta traseira não está no design documentado, então o software possui uma característica oculta. Isso às vezes é chamado de ovo de Páscoa, e pode ser usado como uma assinatura: o programador deixa algo para mostrar que ela escreveu o programa. Versões anteriores do programa amplamente utilizado o Microsoft Excel continham um ovo de páscoa que permitia que um usuário achasse que ele jogasse um jogo de tiro em 3D em primeira pessoa, semelhante ao Doom [13] incorporado dentro de uma célula de planilha.

Modificações de Spyware

Às vezes, um programa irá modificar outro programa para infectá-lo com "spyware". Alguns tipos de trilha de spyware que os sites da Web são visitados pelos usuários do computador infectado. Como os rootkits, o spyware pode ser difícil de detectar. Alguns tipos de spyware se encaixam em navegadores da Web ou shells de programas, tornando-os difíceis de remover. Eles então tornam a vida do usuário infeliz, colocando links para novas hipotecas e Viagra em seus desktops e, em geral, lembrando-lhes que seus navegadores são totalmente inseguros. [14]


Modificação do código-fonte

Às vezes, o software é modificado na fonte - literalmente. Um programador pode inserir linhas maliciosas de código-fonte em um programa que ela autoriza. Essa ameaça causou algumas aplicações militares para evitar pacotes de código aberto como o Linux. Esses projetos de código aberto permitem que quase qualquer um ("qualquer um" seja "alguém que você não conhece") para adicionar código às fontes. Concedido, há uma certa quantidade de revisão por pares em código importante, como BIND, Apache e Sendmail. Mas, por outro lado, alguém realmente passa pelo código linha por linha? (Se o fizerem, eles não parecem fazer isso muito bem ao tentar encontrar buracos de segurança!) Imagine uma porta traseira que seja implementada como um erro no software. Por exemplo, um programador malicioso pode expor um programa a um estouro de buffer de propósito. Este tipo de porta traseira pode ser colocado de propósito. Uma vez que está disfarçado de bug, torna-se difícil de detectar. Além disso, oferece uma negação plausível por parte do programador!

Ok, podemos ouvir você dizendo "Bah! Eu confio plenamente em todas as pessoas desconhecidas que criaram meu software porque obviamente são apenas três graus de separação de Linus Torvalds [15] e eu confio em Linus com minha vida! "Tudo bem, mas você confia nas habilidades do sistema administradores que executam os servidores de controle de origem e os sites de distribuição de código-fonte? Existem vários exemplos de invasores que obtêm acesso ao código-fonte. Um grande exemplo desse tipo de compromisso ocorreu quando os servidores FTP raiz para o GNU Project (gnu.org), fonte do sistema operacional GNU baseado em Linux, foram comprometidos em 2003. [16] As modificações no código-fonte podem acabar em centenas de distribuições de programas e são extremamente difíceis de localizar. Até mesmo as fontes das ferramentas utilizadas pelos profissionais de segurança foram roubadas desta maneira. [17]

A legalidade da modificação de software

Algumas formas de modificação de software são ilegais. Por exemplo, se você usar um programa para modificar outro programa de forma a remover mecanismos de direitos autorais, você pode violar a lei (dependendo da sua jurisdição). Isso se aplica a qualquer software de "cracking" que possa ser encontrado na Internet. Por exemplo, você pode baixar uma cópia de avaliação de um programa que "expira" e pára de funcionar após 15 dias, depois baixe e aplique um "crack", após o qual o software será executado como se tivesse sido registrado. Essa modificação direta do código e da lógica de um programa seria ilegal.

O que um Rootkit não é
Ok, então descrevemos em detalhes o que é um rootkit e abordamos a tecnologia subjacente que torna possível um rootkit. Nós descrevemos como um rootkit é uma poderosa ferramenta de hackers. Mas, há muitos tipos de ferramentas de hackers: um rootkit é apenas uma parte de uma coleção maior. Agora é hora de explicar o que um rootkit não é.

Um Rootkit não é uma exploração

Rootkits pode ser usado em conjunto com um exploit, mas o próprio rootkit é um conjunto bastante simples de programas de utilidade. Esses programas podem usar funções e métodos indocumentados, mas geralmente não dependem de erros de software (como os desbordamentos de buffer).

Um rootkit geralmente será implantado após uma explicação de software bem-sucedida. Muitos hackers têm um tesouro de explorações disponíveis, mas eles podem ter apenas um ou dois programas de rootkit. Independentemente de qual exploração de um invasor usa, uma vez que ela está no sistema, ela implanta o rootkit apropriado.

Embora um rootkit não seja um exploit, ele pode incorporar uma explicação de software. Um rootkit geralmente requer acesso ao kernel e contém um ou mais programas que começam quando o sistema é inicializado. Há apenas um número limitado de maneiras de obter o código no kernel (por exemplo, como um driver de dispositivo). Muitos desses métodos podem ser detectados forensicamente.

] Uma nova maneira de instalar um rootkit é usar uma explicação de software. Muitas explorações de software permitem que o código arbitrário ou programas de terceiros sejam instalados. Imagine que existe um estouro de buffer no kernel (existem erros documentados dessa natureza) que permitem a execução de código arbitrário. Os desbordamentos do buffer do Kernel podem existir em quase qualquer driver de dispositivo (por exemplo, um driver de impressora). Após a inicialização do sistema, um programa de carregador pode usar o estouro do buffer para carregar um rootkit. O programa do carregador não emprega métodos documentados para carregar ou registrar um driver de dispositivo ou, de outra forma, instalar um rootkit. Em vez disso, o carregador explora o estouro do buffer para instalar as partes do modo kernel de um rootkit.

A exploração do buffer-overflow é um mecanismo para carregar o código no kernel. Embora a maioria das pessoas pense nisso como um bug, um desenvolvedor de rootkit pode tratá-lo como um recurso indocumentado para carregar o código no kernel. Como não está documentado, esse "caminho para o kernel" provavelmente não será incluído como parte de uma investigação forense. Ainda mais importante, não será protegido por um programa de firewall baseado em host. Somente alguém especializado em engenharia inversa avançada provavelmente descobrirá.

Um Rootkit não é um vírus

Um programa de vírus é um autômato de auto-propagação. Em contraste, um rootkit não faz cópias de si mesmo, e não tem uma mente própria. Um rootkit está sob o controle total de um invasor humano, enquanto um vírus não é.

Na maioria dos casos, seria perigoso e tolo que um invasor use um vírus quando ela exige sigilo e subversão. Além do fato de que a criação e distribuição de programas de vírus podem ser ilegais, a maioria dos programas de vírus e vermes são ruidosos e fora de controle. Um rootkit permite que um invasor permaneça no controle total. No caso de uma penetração sancionada (por exemplo, por aplicação da lei), o invasor precisa garantir que apenas determinados alvos sejam penetrados, ou então ela pode violar uma lei ou exceder o escopo da operação. Esse tipo de operação requer controles muito rígidos, e o uso de um vírus seria simplesmente fora de questão.

É possível projetar um programa de vírus ou sem-fim que se espalha através de explorações de software que não são detectadas por sistemas de detecção de intrusão (por exemplo, exploits de dia zero [18]). Tal sem-fim poderia se espalhar muito devagar e ser muito difícil de detectar. Pode ter sido testado em um ambiente de laboratório bem abastecido com um modelo do ambiente alvo. Pode incluir uma restrição de "área de efeito" para evitar que se espalhe para fora de um limite controlado. E, finalmente, pode ter um "temporizador de minas terrestres" que faz com que ele seja desativado após uma certa quantidade de tempo - garantindo que isso não cause problemas após a missão acabar. Discutiremos os sistemas de detecção de intrusão mais adiante neste capítulo.

O problema do vírus

Mesmo que um rootkit não seja um vírus, as técnicas usadas por um rootkit podem ser facilmente empregadas por um vírus. Quando um rootkit é combinado com um vírus, nasce uma tecnologia muito perigosa.

O mundo viu o que os vírus podem fazer. Alguns programas de vírus se espalharam por milhões de computadores em apenas algumas horas.

O sistema operacional mais comum, o Microsoft Windows, tem historicamente sido atormentado por erros de software que permitem que vírus infectem computadores pela Internet. A maioria dos hackers maliciosos não revelará erros de software para o fornecedor. Em outras palavras, se um hacker mal-intencionado encontrar um bug explorável no Microsoft Windows, ela não revelaria isso à Microsoft. Um bug explorável que afeta a instalação padrão da maioria dos computadores com Windows é como uma "chave para o reino"; Informar o vendedor sobre isso seria dar a chave.

Compreender a tecnologia do rootkit é muito importante para defender contra vírus. Os programadores de vírus têm usado a tecnologia do rootkit por muitos anos para "aquecer" seus vírus. Esta é uma tendência perigosa. Algoritmos foram publicados para propagação de vírus [19] que podem penetrar centenas de milhares de máquinas em uma hora. Existem técnicas para destruir sistemas informáticos e hardware. E, os furos remotamente exploráveis ​​no Microsoft Windows não estão indo embora. Os vírus que usam a tecnologia do rootkit serão mais difíceis de detectar e prevenir.


Rootkits e Exploits de Software
A exploração de software é um assunto importante relacionado aos rootkits. (Como o software pode quebrar e ser explorado não está coberto neste livro. Se você estiver interessado em exploração de software, recomendamos o livro Exploiting Software. [20])

Embora um rootkit não seja um exploit, ele pode ser empregado como parte de uma ferramenta de exploração (por exemplo, em um vírus ou spyware).

A ameaça dos rootkits é forte devido ao fato de que as explorações de software estão em grande oferta. Por exemplo, uma conjectura razoável é que, em qualquer momento, existem mais de uma centena de buracos exploráveis ​​trabalhando conhecidos na última versão do Microsoft Windows. [21] Na maior parte, esses buracos exploráveis ​​são conhecidos pela Microsoft e estão sendo gerenciados lentamente através de um sistema de garantia de qualidade e rastreamento de bugs. [22] Eventualmente, esses erros são corrigidos e silenciosamente corrigidos. [23]

Alguns pesquisadores independentes descobrem alguns erros de software exploráveis ​​e nunca foram informados ao fornecedor do software. Eles são mortais porque ninguém sabe sobre eles aceitar o atacante. Isso significa que há pouca ou nenhuma defesa contra eles (nenhum patch está disponível).

Muitas explorações conhecidas publicamente por mais de um ano ainda estão sendo amplamente exploradas hoje. Mesmo que haja um patch disponível, a maioria dos administradores de sistema não aplica os patches em tempo hábil. Isto é especialmente perigoso, pois, mesmo que não exista um programa de exploração, quando uma falha de segurança é descoberta, um programa de exploração é geralmente publicado dentro de alguns dias após a liberação de um aviso público ou um patch de software.

Embora a Microsoft leve os erros de software a sério, integrar as mudanças por qualquer grande fornecedor de sistemas operacionais pode demorar uma quantidade excessiva de tempo.

Quando um pesquisador relata um novo erro para a Microsoft, ela geralmente é convidada a não divulgar informações públicas sobre a exploração até que um patch possa ser lançado. A correção de erros é cara e leva muito tempo. Alguns erros não são corrigidos até vários meses depois de serem relatados.

Pode-se argumentar que manter os erros secretos incentiva a Microsoft a levar muito tempo para liberar reparações de segurança. Enquanto o público não sabe sobre um bug, há pouco incentivo para liberar rapidamente um patch. Para resolver esta tendência, a empresa de segurança eEye desenvolveu um método inteligente para tornar público o fato de que uma grave vulnerabilidade foi encontrada, mas sem liberar os detalhes.

Figura 1-2, que vem do site da eEye, [24] mostra um aviso típico. Ele detalha quando o bug foi relatado para um fornecedor e, por quantos dias o patch do fornecedor está "atrasado", com base no julgamento de que uma resposta atempada seria a liberação de um patch dentro de 60 dias. Como vimos no mundo real, os grandes fornecedores de software levam mais de 60 dias. Historicamente, parece que a única vez que um patch é lançado dentro de dias é quando um worm de Internet real é lançado que usa o exploit.



Figura 1-2 Método usado pelo eEye para "pré-lançar" um aviso de segurança.

Idiomas seguros por tipo

Os idiomas de programação que são tipo-seguros são mais seguros de determinadas explorações, como os desbordamentos de buffer.

Sem segurança de tipo, os dados do programa são apenas um grande oceano de bits. O programa pode pegar qualquer punhado arbitrário de bits e interpretá-lo de maneiras ilimitadas, independentemente da finalidade original dos dados. Por exemplo, se a seqüência "GARY" fosse colocada na memória, ela poderia mais tarde ser usada não como texto, mas como um inteiro de 32 bits, 0x47415259 (ou, em decimal, 1,195,463,257 - um número bastante grande de fato!). Quando os dados fornecidos por um usuário externo podem ser mal interpretados, as explorações de software podem ser empregadas.

Por outro lado, os programas escritos em uma linguagem tipo seguro (como Java ou C # [25]) nunca converteriam "GARY" em um número; A corda sempre seria tratada como texto e nada mais.

Por que as explorações ainda são um problema

A necessidade de segurança de software é conhecida há muito tempo, e as explorações de software continuam a ser um problema. A raiz do problema está no próprio software. Contudo, a maioria dos programas não é segura. Empresas como a Microsoft estão fazendo grandes avanços ao projetar uma melhor segurança para o futuro, mas o código atual do sistema operacional está escrito em linguagens C ou C ++, que, por sua própria natureza, criam graves obstáculos de segurança. Essas linguagens dão origem a um problema conhecido como explorações de buffer-overflow. O bug de buffer-overflow é a fraqueza mais significativa no software hoje. Foi o facilitador de milhares de explorações de software. E, é um bug - um acidente que pode ser consertado. [26]


As explorações do buffer-overflow irão eventualmente embora, mas não no futuro próximo. Embora um programador disciplinado possa escrever código que não tenha erros de buffer-overflow (isto é, independentemente do idioma, mesmo um programa escrito manualmente pode ser seguro), a maioria dos programadores não é tão diligente. A tendência atual é impor práticas de codificação seguras e acompanhar isso com ferramentas automatizadas de digitalização de códigos para cometer erros. A Microsoft usa um conjunto de ferramentas internas para esse fim. [27]

As ferramentas automatizadas de digitalização de códigos podem capturar alguns erros, mas não todos eles. A maioria dos programas de computador é muito complexa e pode ser difícil testá-los de forma automatizada. Alguns programas podem ter muitos estados para avaliar possivelmente. [28] Na verdade, é possível que um programa de computador tenha mais estados potenciais do que partículas no universo. [29] Dada essa potencial complexidade, pode ser muito difícil fazer qualquer determinação sobre a segurança de um programa de computador.

A adoção de linguagens tipo-safe (como Java e C #) quase eliminaria o risco de transbordamentos de buffer. Embora um idioma de tipo seguro não seja garantido para ser seguro, reduz significativamente os riscos de transbordamentos de buffer, erros de conversão de signos e excessos de números inteiros (veja a barra lateral na página 15). Infelizmente, esses idiomas não podem corresponder ao desempenho de C ou C ++, e a maioria do Microsoft Windows, mesmo a versão mais recente e melhor, ainda executa códigos C e C ++ antigos. Os desenvolvedores de sistemas embarcados começaram a adotar linguagens de tipo seguro, mas mesmo essa aceitação é lenta - e os milhões de sistemas legados lá fora não serão substituídos em breve. O que isso significa é que explorações de software antiquadas estarão por um tempo.

Tecnologias ofensivas de Rootkit
Um bom rootkit deve poder ignorar quaisquer medidas de segurança, como firewalls ou sistemas de detecção de intrusão (IDSes). Existem dois tipos principais de IDSes: baseado na rede (NIDS) e baseado em host (HIDS). Às vezes, os HIDS são projetados para tentar parar os ataques antes que eles tenham sucesso. Esses sistemas de "defesa ativa" às vezes são chamados de sistemas de prevenção de intrusão baseados em host (HIPSes). Para simplificar a discussão, nos referimos a estes sistemas como HIPS a partir de agora.

ANCAS

A tecnologia HIPS pode ser cultivada em casa ou comprada fora da prateleira.
Para o rootkit, a maior ameaça é a tecnologia HIPS. Um HIPS às vezes pode detectar um rootkit à medida que ele se instala e também pode interceptar um rootkit à medida que ele se comunica com a rede. Muitos HIPSes utilizarão a tecnologia kernel e podem monitorar sistemas operacionais. Em poucas palavras, HIPS é um anti-rootkit. Isso significa que tudo o que um rootkit faz no sistema provavelmente será detectado e interrompido. Ao usar um rootkit contra um sistema protegido por HIPS, existem duas opções: ignore o HIPS ou escolha um alvo mais fácil.

O capítulo 10 deste livro aborda o desenvolvimento da tecnologia HIPS. O capítulo também inclui exemplos de código anti-rootkit. O código pode ajudá-lo a entender como ignorar um HIPS e também pode ajudá-lo na construção de seu próprio sistema de proteção de rootkits.

NIDS

O IDS baseado em rede (NIDS) também é uma preocupação para os desenvolvedores de rootkit, mas um rootkit bem projetado pode evadir uma NIDS de produção. Embora, em teoria, a análise estatística possa detectar canais de comunicação secretos, na realidade isso raramente é feito. Conexões de rede para um rootkit provavelmente usarão um canal secreto escondido em pacotes de aparência inocente. Qualquer transferência de dados importante será criptografada. A maioria das implementações de NIDS lidam com grandes fluxos de dados (acima de 300 MB / segundo), e o pequeno gotejamento de dados que vai para um rootkit passará despercebido. TheNIDS representa uma ameaça de detecção maior quando uma exploração pública conhecida é usada em conjunto com um rootkit

Ignorando o IDS / IPS

Para ignorar firewalls e o software IDS / IPS, existem duas abordagens: ativas e passivas. Ambas as abordagens devem ser combinadas para criar um rootkit robusto. As infracções ativas operam em tempo de execução e são projetadas para evitar a detecção. Apenas no caso de alguém suspeitar, as ofensas passivas são aplicadas "nos bastidores" para tornar o forense tão difícil quanto possível.

As ofensas ativas são modificações no hardware e kernel do sistema projetados para subverter e confundir o software de detecção de intrusão. Medidas ativas geralmente são necessárias para desabilitar o software HIPS (como Okena e Entercept). Em geral, a ofensa ativa é usada contra o software que é executado na memória e tenta detectar rootkits. As ofensas ativas também podem ser usadas para tornar as ferramentas de administração do sistema inúteis para detectar um ataque. Uma infração complexa poderia tornar qualquer ferramenta de software de segurança ineficaz. Por exemplo, uma ofensa ativa pode localizar um scanner de vírus e desativá-lo.

As ofensas passivas são obstruções no armazenamento e transferência de dados. Por exemplo, criptografar dados antes de armazená-lo no sistema de arquivos é uma ofensa passiva. Uma ofensa mais avançada seria armazenar a chave de descriptografia na memória de hardware não volátil (como RAM flash ou EEPROM) em vez de no sistema de arquivos. Outra forma de ofensa passiva é o uso de canais secretos para a exfiltração de dados fora da rede.

Finalmente, um rootkit não deve ser detectado por um scanner de vírus. Os scanners de vírus não só operam em tempo de execução, mas também podem ser usados ​​para escanear um sistema de arquivos "off-line". Por exemplo, um disco rígido em um banco de laboratório pode ser analisado forense quanto a vírus. Para evitar a detecção em tais casos, um rootkit deve ocultar-se no sistema de arquivos para que ele não possa ser detectado pelo scanner.

Ignorando ferramentas forenses

Idealmente, um rootkit nunca deve ser detectado por varredura forense. Mas o problema é difícil de resolver. Existem ferramentas poderosas para digitalizar discos rígidos. Algumas ferramentas, como o Encase, [31] "procuram o mal" e são usadas quando um sistema é suspeito de uma infecção. Outras ferramentas, como Tripwire, "procuram o bem" e são usadas para garantir que um sistema permaneça não infectado.

Um praticante que usa uma ferramenta como o Encase digitalizará a unidade para padrões de bytes. Esta ferramenta pode olhar para toda a unidade, não apenas arquivos regulares. Espaço vazio e arquivos excluídos serão digitalizados. Para evitar a detecção neste caso, o rootkit não deve ter padrões facilmente identificáveis. O uso de esteganografia pode ser poderoso nesta área. A criptografia também pode ser usada, mas as ferramentas usadas para medir a aleatoriedade dos dados podem localizar blocos de dados criptografados. Se a criptografia for usada, a parte do rootkit responsável pelo decodificação precisaria ficar sem criptografia (claro). As técnicas polimórficas podem ser usadas para mutar o código do decodificador para proteção adicional. Lembre-se de que a ferramenta é tão boa quanto os técnicos forenses que o conduzem. Se você pensa em alguma maneira de esconder que eles não, você pode escapar à detecção.

As ferramentas que realizam o hash criptográfico contra o sistema de arquivos, como Tripwire, exigem um banco de dados de hashes a ser feito a partir de um sistema limpo. Em teoria, se uma cópia de um sistema limpo (ou seja, uma cópia do disco rígido) é feita antes da ocorrência da infecção do rootkit, pode-se realizar uma análise offline que compara a nova imagem da unidade com a antiga. Qualquer diferença na imagem da unidade será anotada. O rootkit certamente será uma diferença, mas também haverá outros. Qualquer sistema em execução mudará ao longo do tempo. Para evitar a detecção, um rootkit pode ocultar o ruído regular do sistema de arquivos. Além disso, essas ferramentas apenas olham os arquivos e, eles só podem olhar para alguns arquivos - talvez apenas arquivos considerados importantes. Eles não abordam dados armazenados de maneiras não convencionais (por exemplo, em setores defeituosos em uma unidade). Além disso, os arquivos de dados temporários provavelmente serão ignorados. Isso deixa muitos lugares potenciais para ocultar que não serão verificados.
Se um atacante está realmente preocupado com o fato de o administrador do sistema ter todas as coisas hash e o rootkit será detectado, ela poderia evitar o sistema de arquivos, talvez instalando um rootkit na memória e nunca usando a unidade. Uma desvantagem, é claro, é que um rootkit armazenado em memória volátil desaparecerá se o sistema for reiniciado.

Para levar as coisas ao extremo, talvez um rootkit possa instalar-se no firmware presente no BIOS ou no chip RAM instantâneo em algum lugar.

Conclusão
Os rootkits de primeira geração eram apenas programas normais. Atualmente, os rootkits geralmente são empacotados como drivers de dispositivo. Nos próximos anos, os rootkits avançados podem modificar ou instalar no microcódigo de um processador, ou existem principalmente nos microchips de um computador. Por exemplo, não é inconcebível que o bitmap de um FPGA (matriz de porta programável de campo) possa ser modificado para incluir uma porta traseira. [32] Claro, este tipo de rootkit seria criado para um alvo muito específico. Os rootkits que usam serviços de sistemas operacionais mais genéricos são mais prováveis ​​de serem amplamente utilizados.

O tipo de tecnologia de rootkit que poderia se esconder dentro de um FPGA não é adequado para uso por um worm de rede. Os ataques específicos de hardware não funcionam bem para worms. A estratégia de rede-verme é facilitada por computação homogênea em grande escala. Em outras palavras, os worms de rede funcionam melhor quando todo o software segmentado é o mesmo. No mundo dos rootkits específicos de hardware, existem muitas pequenas diferenças que dificultam os ataques de múltiplos destinos. É muito mais provável que os ataques baseados em hardware sejam usados ​​contra um alvo específico que o invasor possa analisar para criar um rootkit especificamente para esse alvo.

Enquanto existirem explorações de software, os rootkits usarão essas explorações. Eles trabalham juntos de forma natural. No entanto, mesmo que tais façanhas não fossem possíveis, os rootkits ainda existiriam.

Nas próximas décadas, o estouro do buffer, atualmente, o "rei de todas as explorações de software" estará morto e enterrado. Avanços em linguagens de tipo seguro, compiladores e tecnologias de máquinas virtuais tornarão o estouro de buffer ineficaz, dando um enorme golpe contra aqueles que dependem de exploração remota. Isso não significa que as façanhas desaparecerão. O novo mundo da exploração será baseado em erros de lógica em programas e não na falha de arquitetura do estouro de buffer.


Com ou sem exploração remota, no entanto, os rootkits persistirão. Os Rootkits podem ser colocados em sistemas em vários estágios, desde o desenvolvimento até a entrega. Enquanto houver pessoas, as pessoas vão querer espionar outras pessoas. Isso significa que os rootkits sempre terão um lugar em nossa tecnologia. Programas Backdoor e subversões de tecnologia são intemporais!

Nenhum comentário:

Postar um comentário