The future is already here, it's just unevenly distributed

Seria chover no molhado falar que o Stuxnet é certamente o código malicioso mais interessante a aparecer na rede em muito tempo. Além de ter sido amplamente coberto pela mídia nacional e internacional, tem ótimos posts, faqs e relatórios dissecando o malware a fundo. As especulações sobre Israel, Irã e reatores nucleares só esquentam a história, mas ninguém duvida que o Stuxnet é de fato uma arma, uma das primeiras instâncias de weaponized code a aparecerem em público.

Os quatro 0days utilizados pelo Stuxnet deixaram a maior parte da comunidade de segurança de queixo caído. Dois deles, envolvendo escalação de privilégio, ainda não tem fix emitido pela Microsoft. 0days desse calibre conseguem um bom preço se compradas pelas usual suspects - iDefense, ZDI, etc. No mercado negro, então, valeriam uma pequena fortuna. Não é à toa que o Stuxnet impressiona.

Mas o que eu achei mais interessante nele não foi a quantidade de 0days utilizados, ou o calibre da munição. O Stuxnet traz algumas idéias e implementações inéditas que eu acredito que representam bem tendências de ataque nos próximos anos, um shift que vai influenciar desde a forma com que fazemos pentest até a forma como malwares vão evoluir e se sofisticar.

O quote que ilustra o título deste post é de William Gibson, um dos pais da literatura cyberpunk, e que sublinha o ponto de que avanços e implementações sofisticadas em tecnologia estão acontecendo o tempo todo, em paralelo ao dia-a-dia mundano vivido pela maioria. Tanto que as primeiras variantes do Stuxnet estão aí desde o primeiro semestre de 2009. Bons tempos, aqueles, em que todo mundo se preocupava com o Conficker. Lembra?

Códigos como o Stuxnet são pontos fora da curva, que fogem do mainstream de malwares e ataques, mas que representam alguns dos primeiros traços do cenário que se desenha para os próximos anos. Gibson, que escreveu sobre weaponized code em Neuromancer há 26 anos atrás talvez esteja se perguntando: "what took you so long?".

De certa forma, as técnicas utilizadas pelo Stuxnet são conhecidas da comunidade (tanto above quanto underground) há muito tempo. E, claro, todo mundo esperava algum tipo de worm que atacasse sistemas SCADA mais cedo ou mais tarde, era uma espécie de tragédia anunciada. Mas os criadores do Stuxnet venceram uma série de problemas técnicos pesados e de fato implementaram várias destas técnicas de forma integrada, dentro dos seus consideraveis 1.5MB de tamanho; entre elas estão os quatro 0days utilizados, um rootkit windows, hooking e injeção de processos, updates via P2P, infecção pela rede, roubo de certificados digitais para assinar um driver ilícito e um inédito rootkit para PLCs (Programmable Logic Controllers), utilizadas para controle de sistemas industriais.

Mas mais do que isso, o que eu achei mais interessante no Stuxnet é que ele tem um comportamento autodirecionado, procurando um alvo específico para só então ativar-se de forma completa, e que ele exibe traços de comportamento autônomo no seu uso de comunicação via P2P entre hosts infectados numa mesma rede.

O Stuxnet usa comunicação P2P através de chamadas DCERPC do Windows para distribuição, dentro da LAN, de novas versões do código. Dessa forma, mesmo hosts que não têm acesso direto à Internet podem ser atualizados, recebendo versões novas de outros hosts infectados que tenham acesso à Internet.

Fonte: Symantec W32.Stuxnet Dossier

Este conceito de comunicação P2P entre hosts infectados de uma mesma LAN é extremamente poderoso, pois possibilita uma maior autonomia da ameaça em relação à estrutura habitual de command & control das botnets de hoje - o canal entre o malware e seu mestre é um dos principais ganchos para detecção e desabilitação de botnets. Aqui na Tempest projetamos alguns dos mecanismos de detecção de nosso serviço de monitoração de logs para se aproveitar disso e detectar ameaças quando elas comunicam-se com seus operadores na Internet.

O Stuxnet também possui uma estrutura de command & control tradicional, comunicando-se com domínios na Internet (que foram rapidamente detectados e removidos), mas o conceito de P2P entre hosts infectados numa mesma LAN é suficientemente poderoso para ser sofisticado e expandido de forma a gradualmente deixar de lado a necessidade de uma estrutura de controle central. Por LAN aqui estamos entendendo uma rede corporativa ou institucional, que é de interesse do atacante, e com um tamanho que consiga hospedar uma pequena população de malware – ou seja, a grande maioria.

Ao invés de todas as máquinas infectadas em uma determinada LAN comunicarem-se com a Internet (e portanto alertar quem estiver à procura de padrões de command & control), basta umas poucas aleatoriamente definidas fazerem isso de forma discreta, e propagar o código novo ou instruções entre si através de mensagens P2P dentro dos hosts infectados na rede comprometida. O controlador da botnet perde a comunicação online direta e o feedback imediato, mas ganha-se em resiliência.

Acredito que estas duas características – autodirecionamento e autonomia – representam práticas que serão cada vez mais presentes em ameaças futuras, e em pentesting também.

Praticantes com experiência em pentesting e intrusões em profundidade (às vezes chamadas de Information Operations) sabem que o difícil nao é necessariamente entrar no ambiente; e sim permanecer lá por tempo suficiente para mapear os ativos e identificar o seu alvo, evitando ser detectado ou perder o acesso. A chave aqui é o mapeamento das relações no ambiente: quem confia em quem? Quem acessa o quê? Qual a máquina que tem a informação que estou buscando?

À medida que os malwares forem se especializando, orientados ao redor de alvos ou paybacks específicos ao invés de apenas ampla escala de infecções, esse tipo de questão ganha um peso relevante. O Stuxnet ilustrou esse conceito fazendo fingerprinting de PLCs em sistemas SCADA até encontrar aquele alvo específico que procurava. Futuros malwares procurando ganho financeiro podem ser autodirecionados à procura de uma plataforma de trading de uma bolsa de valores, por exemplo.

Uma rede comprometida por malwares com uma intenção e alvo específico, como o Stuxnet, já é um problema por conta própria – agora some-se à isso a possibilidade de comunicação instantânea e troca de informações e código entre os hosts infectados, através de um esquema P2P dentro da LAN, com pouca ou nenhuma interação com a Internet. O Stuxnet fazia apenas atualização de versões via P2P na LAN, mas acho que esse modelo de comunicação será ampliado por outros malwares daqui pra frente, não somente para realização de updates, mas para comunicação e coordenação distribuída entre máquinas infectadas. Tal malware, trabalhando de forma autônoma com uma lógica offline numa LAN (com pouca ou nenhuma comunicação com a Internet pra C&C) teria vantagens estratégicas em possibilidades de mapeamento do ambiente e de resiliência contra remoção.

Um malware comunicando-se por P2P entre hosts infectados espalhados numa rede LAN pode mapear uma rede de forma mais rápida e completa do que uma equipe de pentest. Mapear, identificar potenciais alvos (ou o alvo preprogramado), e a partir daí elencar outros hosts infectados na LAN que disponham de acesso Internet para baixar um exploit específico; ou ainda, de forma pontual e discreta permitir um acesso direcionado do controlador externo via Internet pra ele mesmo atacar manualmente.

Um exemplo seria mapear os relacionamentos de confiança dentro da rede e expô-los para o atacante (qual a estação de trabalho usada pelo operador do sistema de trading?). Outro exemplo seria uma instância de malware que conseguiu capturar um login+senha, e espalha essa informação entre os outros hosts infectados na LAN, caindo numa instância em um host em que foi identificado o mesmo login mas para o qual não se tinha a senha. Colaboração entre malwares da mesma "família", buscando o mesmo alvo. Reaproveitamento de logins/senhas ainda é uma vulnerabilidade endêmica nas redes, e um malware semiautônomo coordenando uma exploração em massa de reaproveitamento de senhas numa rede poderia ser brutalmente eficaz.

De certa forma, o malware poderia limpar o terreno e deixar o adversário na "cara do gol", pronto para o exploit. Esse modelo híbrido pode revelar-se como tendo um payoff bem interessante pro atacante, combinando as vantagens de escala e mapeamento que uma botnet oferece, com a precisão cirúrgica de um pentester na frente de um alvo pré-qualificado. Também seria muito mais difícil de detectar, já que o tráfego de rede interna costuma ser barulhento e pouco monitorado, escondendo bem um tráfego P2P discreto entre hosts infectados.

Enfim, acho que nos próximos anos vamos assistir a um shift das ameaças para serem mais autodirecionadas e autônomas dentro do ambiente de rede de seus alvos, com mais lógica própria de propagação e de intenções, com menos dependência de controle centralizado via Internet para atingir seus objetivos. Malwares com mais autonomia e liberdade para operação própria se beneficiariam enormemente de comunicação P2P dentro de uma LAN, com diferentes máquinas comprometidas tendo condições de mapear coletivamente segredos e relações de confianca do ambiente de rede, algo que individualmente seria difícil ou infactível. Uma rede de malwares semiautônomos com boa lógica de mapeamento poderia ser extremamente precisa, usando o exploit certo no host certo na hora certa, ou acionando um atacante externo para bater o penâlti.

Essa mudança de foco para plataformas de mapeamento semi-autônomas não vai ficar só no território de malwares, afetando tambem a prática profissional de pentesting. Acredito que em alguns anos nossa equipe de pentesters esteja usando frameworks ou toolchains que possam ser programados para espalharem-se, de forma autônoma ao pentester, pelas máquinas do ambiente e retornarem por conta própria ao identificarem potenciais vetores de ataque, provendo um caminho de ataque para o pentester atraves da rede de maquinas infectadas pelo framework. Canvas v10? Metasploit v7?

O Stuxnet representa bem alguns desses aspectos, sendo um malware autodirecionado e com traços autônomos, com os criadores vencendo uma série de problemas técnicos difíceis. Em essência, provaram que 'dá pra ser feito' – o que costuma ser fato suficiente para acelerar o desenvolvimento de variações e evoluções. O Stuxnet certamente demandou grandes recursos para ser desenvolvido, mas é certo que o custo para desenvolver ameaças neste modelo cairá vertiginosamente ao longo do tempo, assim como aconteceu com todas as principais inovações em malwares.

As maiores dificuldades serão na modelagem, desenvolvimento e calibracao da lógica para operação autônoma e autodirecionada, mas todos constituem problemas técnicos interessantes, de modo que devem atrair boas cabeças para trabalhar neles – de ambos os lados da lei.

Ameaças de código autodirecionadas e com operação largamente autônoma. Sendo utilizadas por profissionais como auxiliares, por criminosos como ferramentas, e por nações-estado como armas.

Gibson ficaria orgulhoso.

Comentários
Aceita-se formatação à la TWiki. HTML e scripts são filtrados. Máximo 15KiB.

 
Enviando... por favor aguarde...
Comentário enviado com suceso -- obrigado.
Ele aparecerá quando os moderadores o aprovarem.
Houve uma falha no envio do formulário!
Deixei uma nota para os admins verificarem o problema.
Perdoe-nos o transtorno. Por favor tente novamente mais tarde.
Marcos Álvares | 2010-10-23 23:32:38 | permalink | topo

Parabéns pelo artigo Lincoln! Como sempre a sua perspicácia e cultura geral me surpreende. Gostei bastante do paralelo com a ficção. Realmente, William Gibson é um gênio!

Cara, estou trabalhando com alguns conceitos que você levantou só que em um nível mais alto (e com outros objetivos :P). Essa capacidade de aprendizado, autonomia e adaptação é um dos requisitos para obtenção de uma IA simbólica (ainda teórica). O Stuxnet é um passo importante no sentido de conseguirmos reproduzir esse tipo de inteligência. Ele consegue perceber o ambiente em que está inserido e se adaptar; além de apresentar comportamentos em sociedade. Ele agrega características de redes sociais e conceitos de reputação. Muito sofisticado. Acredito que, em pouco tempo, teremos um agente atacante/defensor (desenvolvimento dos AIS) capaz de passar no teste de turing a ponto de um analista humano não saber mais se o atacante é um software ou um humano.

Discordo que, em pouco tempo, a modelagem desse tipo de software será trivial. Acredito que para esse novo tipo de paradigma passar para o domínio da engenharia ainda falta muito (e talvez quem seja o responsável por isso nem seja nós, humanos). Por enquanto, e por um bom tempo, escrever esse tipo de software que aprende a aprender e se adapta permanecerá como arte.

Abraço.

Cristiano Lincoln | 2010-10-14 17:25:28 | permalink | topo

R,

Ainda não temos algo como mutações, mas pressões seletivas e competição por recursos no 'ambiente', certamente... :)

Abs. Lincoln

Rafael Silva | 2010-10-09 21:41:07 | permalink | topo

Coevolução de malwares. Codigo Alvo Específico = Mutação Do Capeta.

From Wikipedia: "A co-evolução pode ser definida como a evolução simultânea de duas ou mais espécies que têm um relacionamento ecológico próximo. Através de pressões seletivas, a evolução de uma espécie torna-se parcialmente dependente da evolução da outra."