Stuxnet Worm et al: As defesas

Na continuação do que escrevi ontem sobre a Stuxnet Worm, venho hoje concluir o que deixei em aberto: a componente de defesa contra este tipo de ataques.

Para simplificar esta análise, vou deixar de lado os controlos dirigidos para mitigar ameaças internas, não porque não sejam relevantes, mas porque prefiro focar o aspecto das ameaças externas. Mas, em primeiro lugar, o que são, neste contexto, as ameaças externas? Aliás, antes de mais, qual é o contexto?

Para criar o enquadramento adequado, definir o contexto e compreender o que está no tabuleiro, comecemos por imaginar dois cenários, simplificados para facilitar a compreensão dos conceitos.

Cenário 1. Uma pequena organização, com um computador isolado sem ligação a qualquer rede, nem dispositivos de entrada e saída de dados, para além de um ecrã, um teclado e um rato. Vamos imaginar que o sistema operativo e os programas que são estritamente necessários foram previamente instalados no disco, e que foram retirados todos os elementos de comunicação com o exterior, para além dos que são necessários para a interacção humana directa. Neste cenário, admitindo que a segurança física do equipamento está correctamente assegurada, incluindo o acesso às componentes internas ao chassis, a única forma de ultrapassar os controlos de segurança das aplicações passa, como é óbvio, pela introdução de comandos ao teclado, procurando explorar eventuais fragilidades na lógica desses programas, ou no próprio sistema operativo. Neste cenário, as ameaças externas, sejam elas quais forem, têm um caminho extremamente difícil para percorrer até subverterem o sistema e, sobretudo, para exportarem dados para o exterior (embora, claro, possam sempre tirar fotografias ao ecrã : ) …). Neste modelo, é (quase) impossível comprometer o sistema com um ataque externo.

Cenário 2. Neste cenário, completamente antagónico ao primeiro, imaginemos um conjunto de computadores de uma empresa, ligados sobre o mesmo troço de rede, ligados à internet com endereçamento público, não filtrado, e com toda a parafernália de gadgets para comunicar com o exterior (por exemplo, ligações Wi-Fi e Bluetooth, leitores de DVDs, cartões de memória e discos USB). Vamos imaginar, também, que cada um dos colaboradores é responsável pela instalação do sistema operativo e todas as aplicações, e que os controlos de segurança não foram reforçados para além do que é assegurado por uma instalação padronizada, com os parâmetros de controlo definidos pelo próprio fabricante. Mais, vamos admitir que o correio electrónico e as mensagens instantâneas são serviços externos à organização. Neste modelo, o leque de pontos de entrada externa é tão alargado que, na prática, é quase impossível sobreviver ao mais simples dos ataques – basta enviar um programa (ou uma referência para um programa) por correio electrónico, ou explorar vulnerabilidades que não tenham sido corrigidas, no sistema operativo ou numa aplicação, para comprometer qualquer uma das máquinas. Qualquer uma, ou todas.

Estes cenários servem para estabelecer os limites, clarificar o que são pontos de entrada externa e, ao mesmo tempo, ilustrar duas situações extremas: uma em que a superfície exposta a ataques é praticamente nula, e outra onde se verifica o contrário.

Considerando as organizações que mantêm departamentos ou direcções de IT, ambos os cenários são, no contexto actual, cenários meramente académicos. Em particular, o segundo (e se não é, devia ser). Nas organizações actuais, cujo contexto procuramos definir, é vulgar encontrarmos um cenário no qual existem estações de trabalho e servidores interligados, por múltiplas redes fixas e sem fios, que não são filtradas. Normalmente, os equipamentos são instalados e geridos centralmente pelas equipas responsáveis pelo IT. A ligação destes equipamentos à Internet é mediada por firewalls, que filtram as comunicações de (e para) o exterior, mas que não actuam ao nível aplicacional (i.e. não analisam em profundidade o conteúdo das comunicações que entram e saem dos computadores). Os controlos de segurança dos equipamentos não são especialmente reforçados, embora quase todos utilizem sistemas antivírus e, mais recentemente, firewalls por software integradas nos sistemas operativos. As actualizações de segurança, ao nível do sistema operativo, são habitualmente instaladas mas, ao nível das aplicações, é comum existirem soluções que não são regularmente actualizadas. É habitual terem sistemas de correio electrónico interno, com controlo antivírus, e limitarem as comunicações por mensagens instantâneas. Finalmente, o leque de dispositivos externos que podem ser ligados aos equipamentos é limitado mas, ainda assim, os controlos específicos não são reforçados (e.g. é possível executar programas a partir de um DVD e, se colocarmos um disco com programas instaláveis, também correm automaticamente).

No fundo, enquadrando o cenário típico nas organizações com IT estruturado, encontramo-lo a meio do caminho entre os cenários anteriores. E é sobre este contexto que devem ser acrescentados alguns controlos. Mas, primeiro, é importante clarificar algumas ideias sobre a natureza dos ataques. Quais são as condições necessárias para lançar um ataque externo bem sucedido, completo, sobre um sistema ou conjunto de sistemas de uma organização?

Em primeiro lugar, é necessário um ponto de contacto com o exterior, seja através de uma rede, seja através de um dispositivo externo. É a partir desta entrada que é possível interagir com o sistema e, assim, procurar explorar eventuais vulnerabilidades numa aplicação, no sistema operativo ou, no limite, no ser humano que opera esse equipamento (por exemplo, manipulando-o para visitar um local na Internet e convidando-o a transferir – e executar! – uma aplicação fabulosa...)

Em segundo lugar, é imprescindível ganhar a capacidade de executar um programa (em rigor, e de uma forma mais geral, um conjunto de instruções), ou uma macro de uma aplicação (e.g. das ferramentas de produtividade), ou um script (e.g. nos navegadores da Internet). Esta capacidade pode ser conquistada, à partida, pela exploração de uma vulnerabilidade num serviço de rede, no computador-alvo, que esteja activo e sem filtragem.

Em terceiro lugar, é importante, embora não seja essencial, garantir a persistência (sobrevivência) do programa após a finalização da sessão, ou do reinício do próprio computador. Para isso, é necessário ter autorização para se gravar a si próprio no disco desse equipamento. E gravar-se numa pasta cujo conteúdo possa ser executado quando o equipamento for iniciado ou, no mínimo, quando um utilizador entrar novamente em sessão.

Finalmente, em quarto lugar, se o ataque visar a propagação do código malicioso para outras máquinas, precisa ter capacidade para comunicar pela rede para lançar outros ataques ou, numa alternativa mais modesta e mais discreta, precisa ter capacidade para se gravar num dispositivo externo, por exemplo, numa caneta USB.

Tendo agora todos os elementos necessários para a análise, nomeadamente, o contexto computacional típico nas organizações, e o entendimento necessário sobre a natureza dos ataques, podemos enunciar o conjunto de medidas mínimo que, na minha opinião, são importantes para reduzir a superfície exposta aos ataques e, com isso, reduzir também a sua probabilidade de sucesso. Os parágrafos seguintes apresentam essas recomendações.

  1. Filtrar todas as comunicações com o exterior. Garantir que todos os pontos de ligação com redes externas (e.g. a Internet e redes de parceiros de negócio) incluem firewalls que impedem a passagem de protocolos que não sejam estritamente necessários, de (e para) essas redes. Para além das firewalls tradicionais, devem ser incluídos filtros de níveis superiores, nomeadamente, devem ser realizados filtros de conteúdo web e correio electrónico, e todos devem sistemas antivírus, anti-spyware/malware, preferencialmente diferentes dos que são instalados nas estações de trabalho;
  2. Segregar as redes internas e filtrar as comunicações. Separar as redes internas garantindo, no mínimo, que os ambientes de produção, engenharia, desenvolvimento e qualidade, estão logicamente segregados. Esta segregação deve ser concretizada através da filtragem das comunicações, ao nível dos equipamentos de routing, entre todas estas redes – só devem ser permitidos os protocolos estritamente necessários para o funcionamento das soluções. Em particular, devem ser limitadas as comunicações entre estações de trabalho. Adicionalmente, sempre que forem identificados sistemas críticos para a organização, que possam ser operados em zonas independentes, deve ser considerado o isolamento total das redes que os suportam;
  3. Rejeitar máquinas não-controladas em ambientes de produção. Impedir o acesso à rede a máquinas que não sejam controladas e geridas pelos responsáveis pelo IT da organização. Este controlo pode ser realizado automaticamente com protocolos de admissão à rede (e.g. 802.1x) ou, com uma alternativa mais simples (mas menos eficaz), controlando os endereços MAC das interfaces de rede admissíveis;
  4. Restringir o acesso remoto a equipamentos confiáveis. Em organizações onde seja necessário garantir o acesso remoto de colaboradores, deve ser limitada a conectividade aos equipamentos que sejam efectivamente controlados pela organização. Caso contrário, uma parte dos controlos que são exigidos às máquinas corporativas, dessa forma, seriam facilmente ultrapassados;
  5. Utilizar IPSec para garantir a comunicação exclusiva entre máquinas controladas. Para reforçar a confiança na comunicação interna à organização, pode ser activado o protocolo de autenticação, integridade e confidencialidade do tráfego de rede, o IPSec, para garantir que apenas os equipamentos da organização comunicam entre si;
  6. Monitorizar a rede com sistemas de detecção de intrusão (IDS). Instalar e monitorizar activamente um conjunto de sistemas IDS, colocados em pontos estratégicos de passagem de tráfego na rede, com o objectivo de identificar rapidamente quaisquer anomalias que, pelo conhecimento do funcionamento normal da rede, levantem suspeitas de ataques desta natureza;
  7. Activar as firewalls nas estações e servidores. Para além dos controlos de filtragem ao nível das redes e sistemas mediadores, e numa perspectiva de defesa em profundidade, devem ser igualmente activadas as firewalls por software nas estações e servidores, admitindo exclusivamente as portas e comunicações que forem mesmo necessárias. No caso particular das estações de trabalho, e dependendo do modelo de gestão adoptado para estes equipamentos, deve ser considerada a possibilidade de impedir todas as comunicações que lhes forem dirigidas. Em alternativa, podem ser admitidas as comunicações necessárias para a gestão do parque de computadores;
  8. Actualizar regularmente o sistema operativo, as aplicações, e os sistemas antivírus em todos os equipamentos. Garantir que o processo de actualização está activo e que não são ignoradas quaisquer aplicações. Garantir também que as assinaturas dos sistemas anti-vírus, anti-spyware/malware são actualizadas automaticamente;
  9. Limitar o contexto de segurança de todos os utilizadores. Limitar as contas de todos os utilizadores comuns, i.e., dar-lhes apenas privilégios standard. Limitar as contas de administração local e corporativa aos membros das equipas responsáveis pelo IT e segurança. Esta medida é extremamente importante porque, automaticamente, limita a capacidade dos utilizadores modificarem configurações e componentes do sistema e aplicações, e de gravarem programas e documentos fora do conjunto de pastas que lhe forem atribuídas;
  10. Limitar a execução de programas e macros não autorizadas. Activar os controlos aplicacionais dos sistemas operativos mais modernos para, com isso, impedir a execução de todos os programas que não tenham sido instalados pelo IT. São exemplos, no caso dos sistemas Windows, as Políticas de Restrição de Software e o AppLocker. Em relação às macros dos pacotes de produtividade, inibir a sua execução. Se não for possível inibir completamente as macros, limitar a execução ao conjunto de macros que tenham sido assinadas digitalmente, e autorizadas para execução na organização;
  11. Reforçar os controlos de segurança dos navegadores da Internet. Em primeiro lugar, restringir a instalação de controlos adicionais e extensões (e.g. ActiveX); em segundo lugar, identificar e gerir o conjunto de sítios na Internet que são de confiança e, em seguida, definir um perfil de segurança para esse conjunto. Definir um perfil muito restrito para todos os locais fora desse conjunto, limitando, inclusivamente, a execução de scripts em locais que não sejam confiáveis;
  12. Garantir que as máquinas não podem ser reinstaladas pelos utilizadores. Activar os controlos da BIOS que obrigam o arranque dos equipamentos pelos discos internos (previamente instalados), definindo uma password que impeça modificações a esta configuração. As máquinas muito críticas que, por qualquer razão, sejam colocadas em zonas de acesso físico público ou pouco controlado, devem ter o chassis rebitado, para impedir a modificação desta configuração e/ou a instalação de programas directamente no disco;
  13. Desactivar ligações sem fios desnecessárias. Equipamentos que não utilizem as ligações sem fios para desempenhar funções autorizadas pela organização, devem ter as ligações Wi-Fi, Bluetooth e 3G desactivadas;
  14. Impedir a instalação de dispositivos externos em máquinas críticas. Equipamentos que devam ser especialmente controlados devem estar configurados para impedir a utilização de dispositivos externos (e.g. discos USB). Se não for possível definir esta configuração no sistema operativo, devem ser retiradas ou desactivadas as portas de ligação na BIOS, ou mesmo fisicamente;
  15. Garantir a utilização de passwords fortes. Alterar todas as passwords que estão definidas por omissão, nos sistemas e aplicações, garantindo que as chaves escolhidas são efectivamente fortes. Forçar uma política de passwords fortes para todas as contas dos utilizadores, locais e corporativas.
  16. Impedir a instalação de programas não autorizados. Em princípio, desde que as contas dos utilizadores não sejam privilegiadas, a sua capacidade de instalação de programas é limitada. No entanto, just in case, inibir a instalação de todos os programas que não tenham sido autorizados e adquiridos pela organização.
  17. Desactivar a execução automática de dispositivos externos. Inibir as funcionalidades dos sistemas operativos que, automaticamente, tentam executar programas quando são inseridos dispositivos ou quaisquer media externos. Esta função é designada, em alguns sistemas, por AutoPlay, e é uma das formas utilizadas por código malicioso para entrar num computador;
  18. Limitar o conjunto de aplicações instaladas em máquinas críticas. As máquinas mais críticas devem ter instaladas, estritamente, as aplicações que sejam realmente necessárias. Por exemplo, nas consolas de gestão e controlo da infra-estrutura, devem ser evitadas ferramentas de produtividade que, pela sua ubiquidade, possam ser alvos interessantes para ataques de malware;
  19. Realizar cópias de segurança regulares. É auto-explicativo.
  20. Diversificar os sistemas e aplicações. Considerar a utilização de sistemas alternativos, sistemas que não sejam mainstream, alvos mais acessíveis aos potenciais atacantes;
  21. Realizar testes de segurança periódicos. Procurar fragilidades nos controlos de segurança, simulando ataques controlados contra os equipamentos, identificando eventuais vulnerabilidades e aplicando as medidas de correcção que forem necessárias;
  22. Formar e sensibilizar os colaboradores para a segurança. Investir em acções de formação e consciencialização para a necessidade da segurança na organização, para colaboradores técnicos e não-técnicos. Fazer acções periódicas, eventualmente anuais ou bianuais; e, finalmente,
  23. Preparar a organização para enfrentar desastres e recuperar. Assumir que, mesmo com os controlos de segurança realizados, a possibilidade de um ataque ser bem sucedido não é zero, e que, nessa eventualidade, é necessário ter planos de contingência e recuperação. Identificar um conjunto de sistemas e procedimentos para recuperar e continuar as actividades da organização.

E com este conjunto de recomendações encerro este apontamento (que já vai longo), faltando-me apenas acrescentar o seguinte: este rol pode não ser suficiente para impedir o sucesso de um atacante muito motivado e bem financiado. No entanto, é claramente necessário para enfrentar e derrotar a esmagadora maioria dos ataques que, infelizmente, e apesar de serem menos sofisticados, continuam em crescendo, um pouco por todo mundo.