A segurança do UEFI (em inglês, Unified Extensible Firmware Interface) tem sido um assunto bastante importante nos últimos anos, mas, devido a várias limitações, poucos malwares baseados em UEFI foram encontrados anteriormente. Depois de descobrir o Lojax, o primeiro rootkit UEFI usado em uma campanha, começamos a construir um sistema que nos permite explorar o vasto cenário UEFI de forma eficiente, para detectar com segurança ameaças UEFI emergentes.

Usando a telemetria coletada pelo scanner UEFI da ESET como ponto de partida, criamos um pipeline de processamento personalizado para executáveis UEFI que aproveita o aprendizado automático para detectar comportamentos estranhos entre amostras recebidas. Esse sistema, além de demonstrar seus fortes recursos para identificar executáveis UEFI suspeitos, oferece monitoramento em tempo real do cenário UEFI e reduz a carga de trabalho de nossos analistas em até 90%.

Ao procurar por ameaças direcionadas à UEFI usando nosso pipeline de processamento, descobrimos vários componentes UEFI interessantes que dividimos em duas categorias: backdoors de firmware UEFI e módulos de persistência no nível do sistema operacional. A mais notável das nossas descobertas é o backdoor ASUS, um backdoor de firmware UEFI, que foi encontrado em vários modelos de laptop ASUS e que foi solucionado pela ASUS após a nossa notificação.

O que é UEFI?

UEFI é uma especificação que define a interface que existe entre o sistema operacional e o firmware do dispositivo. Ele define um conjunto de serviços padronizados, chamados "serviços de inicialização" e "serviços runtime", que são as principais APIs disponíveis no firmware UEFI. Portanto, o UEFI é um sucessor da interface do firmware do BIOS (Basic Input/Output System), apresentado para abordar as limitações técnicas do BIOS.

O firmware UEFI é armazenado na memória flash SPI, que é um chip soldado na motherboard do sistema. Portanto, reinstalar o sistema operacional ou substituir o disco rígido não afeta o código do firmware. O firmware UEFI é muito modular: normalmente contém dezenas, se não centenas, de diferentes executáveis/drivers.

Figura 1: Como os executáveis/drivers UEFI são armazenados em um PC.

UEFI como vetor de ataque

Há várias maneiras de modificar o firmware, comprometendo a segurança do computador afetado.

A primeira opção, e mais comum, é a modificação do firmware pelo fornecedor do computador para permitir o diagnóstico ou serviço remoto, que, se implementado incorretamente, pode servir como backdoor. Outra opção é o flasheo malicioso através de adulteração manual, quando o atacante tem acesso físico ao dispositivo afetado. A terceira opção: ataques remotos usando malware capaz de modificar o firmware.

Esta terceira opção foi documentada em nossa pesquisa sobre LoJax, o primeiro rootkit UEFI detectado em atividade. Em uma campanha voltada para organizações governamentais nos Balcãs, bem como na Europa Central e Oriental, o grupo Sednit APT implantou com sucesso um módulo UEFI malicioso no sistema de uma vítima. Este módulo foi capaz de inserir e executar malware no disco durante o processo de inicialização - um método de persistência particularmente invasivo que não só sobreviverá à reinstalação de um sistema operacional, mas também à substituição do disco rígido.

Um método de aprendizado automático para explorar o cenário UEFI

Encontrar malware como LoJax é raro - há milhões de executáveis UEFI em uso de forma ativa e apenas uma pequena parte deles é maliciosa. Já vimos mais de 2,5 milhões de executáveis UEFI únicos (de um total de seis bilhões) nos últimos dois anos. Como não é viável analisar cada um deles manualmente, precisávamos criar um sistema automatizado para reduzir o número de amostras que requerem atenção humana. Para resolver esse problema, decidimos construir um sistema sob medida para destacar amostras atípicas ao encontrar características incomuns em executáveis UEFI.

Em nossa pesquisa, examinamos e comparamos várias abordagens de cada parte do processo - desde a extração de recursos, incorporação de texto, incorporação de dados multidimensionais por meio de armazenamento eficiente e consulta aos bairros das amostras para gerar um algoritmo de pontuação final - tudo isso considerando o desempenho e os recursos em tempo real das técnicas escolhidas. Assim que estabelecemos um método eficiente de recuperar os vizinhos mais próximos de qualquer binário UEFI recebido, configuramos um sistema para atribuir pontuações de similaridade no intervalo de zero a um aos executáveis recebidos, comparando-os com arquivos vistos anteriormente. Arquivos com a menor pontuação de similaridade são então inspecionados com a maior prioridade por um analista.

Como prova de conceito, testamos o sistema resultante em executáveis UEFI suspeitos e maliciosos conhecidos que não estavam anteriormente incluídos no nosso conjunto de dados - especialmente o driver LoJax UEFI. O sistema concluiu com sucesso que o driver LoJax era muito diferente de tudo o que tínhamos visto antes, atribuindo-lhe uma pontuação de similaridade de 0.

Esse teste bem-sucedido nos dá um grau de confiança de que, se outra ameaça UEFI semelhante surgir, seremos capazes de identificá-la como uma raridade, analisá-la prontamente e criar uma detecção conforme necessário. Além disso, nossa abordagem baseada em machine learning pode reduzir a carga de trabalho de nossos analistas em até 90% (se eles analisassem cada amostra recebida). Finalmente, graças ao fato de que cada novo executável UEFI recebido é adicionado ao conjunto de dados, processado, indexado e levado em consideração para as próximas amostras recebidas, nossa solução oferece monitoramento em tempo real do cenário UEFI.

Uma busca aos componentes UEFI indesejados

Tendo testado nosso pipeline de processamento em amostras maliciosas conhecidas, era hora de começar a buscar módulos UEFI indesejados que estejam ativos. Os componentes interessantes que encontramos podem ser agrupados em duas categorias: backdoors de firmware UEFI e módulos de persistência em nível de sistema operacional.

Backdoors de firmware UEFI

Então o que são backdoors de firmware UEFI? Na maioria das configurações de firmware UEFI, estão disponíveis opções para proteger o sistema contra acesso não autorizado durante os primeiros estágios do processo de inicialização. As opções mais comuns permitem definir senhas para proteger o acesso à configuração do firmware UEFI, para evitar que o sistema inicialize e para acessar o disco. Os backdoors de firmware UEFI são mecanismos que permitem ignorar essas proteções sem saber a senha configurada pelo usuário.

Embora esses backdoors de firmware UEFI sejam muito comuns, eles são usados principalmente como um mecanismo de recuperação no caso do proprietário do computador esquecer a senha, ou seja, eles têm uma série de implicações de segurança. Além de permitir que atacantes com acesso físico ao computador afetado contornem vários mecanismos de segurança, eles também criam uma falsa sensação de segurança para usuários que não os conhecem e podem acreditar que seus computadores não podem ser iniciados por alguém que não tenha a senha.

O mais prevalente dos backdoors de firmware UEFI que analisamos é o chamado backdoor ASUS. Nossa pesquisa confirmou que pelo menos seis modelos de laptop ASUS foram enviados ao mercado com o backdoor; o número, no entanto, é provavelmente muito maior (verificar a presença em cada modelo de laptop ASUS estava fora do escopo de nossa pesquisa). Após nossa notificação à ASUS sobre o backdoor em abril de 2019, o fornecedor removeu o problema e lançou atualizações de firmware em 14 de junho de 2019.

Módulos de persistência em nível de sistema operacional

O restante de nossas descobertas são módulos de persistência em nível de sistema operacional - componentes de firmware responsáveis pela instalação do software em nível de sistema operacional. Com esses módulos de persistência, o principal problema de segurança é que - devido à natureza complicada da entrega de atualizações de firmware - um computador que saiu para o mercado com um componente de firmware vulnerável provavelmente permanecerá vulnerável durante toda a sua vida útil. Por esta razão, acreditamos que a persistência do firmware deve ser evitada tanto quanto possível e limitada aos casos em que é estritamente necessário, como é o caso das soluções anti-roubo.

Para saber mais sobre nossa pesquisa, confira o artigo completo: A machine-learning method to explore the UEFI landscape.