Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
test_avb_key — Utilitário Python para verificar se as imagens de inicialização verificada (vbmeta) do Android estão assinadas com chaves de teste publicamente conhecidas, identificando configurações incorretas em builds de release. | Kitploit
Ferramentas/GitHubGitHub/nccgroup/test_avb_key
Segurança AndroidAnálise de VulnerabilidadesCriptografiaTestes de PenetraçãoSegurança MóvelAnálise de Firmware
GitHubnccgroup/test_avb_key

test_avb_key

Utilitário Python para verificar se as imagens de inicialização verificada (vbmeta) do Android estão assinadas com chaves de teste publicamente conhecidas, identificando configurações incorretas em builds de release.

Ver Repositório
93há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Sobre Quase Assinar Builds Android

Introdução

Um erro às vezes encontrado por consultores da NCC Group é assinar builds Android com chaves privadas conhecidas. Isso deixa os fabricantes de dispositivos (e, por sua vez, seus usuários) vulneráveis, mesmo em dispositivos onde o secure boot está habilitado. Esta postagem de blog tem dois objetivos:

  • aumentar a conscientização sobre esse problema
  • apresentar um script destinado a uma verificação rápida para confirmar se uma build Android foi (incorretamente) assinada com uma chave privada conhecida.

Quando dispositivos baseados em Android inicializam, primeiro o bootloader é verificado para garantir que está executando código assinado; em seguida, o bootloader verifica o sistema operacional de alto nível (HLOS). Esta postagem cobre apenas a última parte.

Protegendo o Bootloader – Breve Visão Geral

Cada fornecedor de chipset pode implementar a raiz de confiança (RoT) de forma diferente, mas, normalmente, os dispositivos são protegidos configurando e-fuses. O código ROM imutável gravado no chipset lê esses e-fuses e os interpreta como bits de um hash criptográfico. O hash é então usado para verificar uma chave pública confiável, geralmente incluída no binário do bootloader. Uma vez validada a chave pública, ela é posteriormente usada para verificar criptograficamente se o primeiro código modificável executado no dispositivo está assinado. Se esse processo for implementado corretamente, qualquer tentativa de modificar o bootloader falhará. As OEMs que fabricam dispositivos baseados em Android (câmeras de segurança, plugues inteligentes ou sensores, etc.) normalmente usam o design de referência e o código de exemplo do fornecedor do chip (ou seja, Qualcomm) como ponto de partida para seu produto.

Android Verified Boot (AVB)

O AVB faz parte do mecanismo usado para garantir a integridade do software em execução em um dispositivo. Os dispositivos contêm uma partição chamada vbmeta que contém uma imagem verificada criptograficamente. Após o bootloader realizar uma verificação bem-sucedida, o dispositivo confia no conteúdo da imagem vbmeta. A imagem contém informações que o bootloader usa posteriormente para validar o software presente em partições como boot, vendor ou system.

Por conveniência, os fornecedores de chipset fornecem código de referência que compila com sucesso assim que sai da caixa, para simplificar o processo de bring-up do dispositivo pelo OEM. Inicialmente, essas imagens são assinadas usando chaves privadas de teste, geradas pela primeira vez pelo Google e presentes em todas as builds Android vanilla. Às vezes, os fornecedores de chip atualizam essas chaves de teste, mas as chaves privadas de assinatura ainda estão presentes no código de exemplo; portanto, devem ser consideradas não confiáveis.

O Problema

A NCC Group descobriu que os fabricantes de dispositivos podem proteger o bootloader corretamente configurando os e-fuses; no entanto, eles não alteram a chave privada de teste padrão usada para assinar o HLOS. Portanto, embora o bootloader não possa ser modificado, um atacante poderia compilar e assinar código HLOS personalizado e atualizar partições que serão verificadas com sucesso pelo processo AVB.

A Ferramenta de Verificação

A NCC Group criou uma ferramenta que verifica se o vbmeta.img inclui a parte pública de uma chave privada conhecida. Para as chaves de teste, a ferramenta aceita um caminho fornecido pelo usuário (apontado pela variável de ambiente BOARD_AVB_KEY_PATH na build Android) ou usa uma coleção de chaves conhecidas coletadas do GitHub, incluídas com a ferramenta.

root@kitploit:~
$ python3 test_avb_key.py --help 
Usage: 
     python test_avb_key.py [VBMETA.IMG] [PATH_PRIVATE_KEY] 
Parameters: 
     * Parameter 'VBMETA.IMG' points to a user or userdebug file from an Android build. 
       Note: the userdebug image fails this test, it is expected. 
     * Grep Android build for 'BOARD_AVB_KEY_PATH' to obtain path of signing file, 
       and leave only the path, i.e. 'external/avb/test/data/'. 

Se o software HLOS tiver sido assinado com uma chave privada padrão, o problema é sinalizado. Por exemplo, para a build LineageOS:

root@kitploit:~
$ python test_avb_key.py ./sample/vbmeta/lineage/vbmeta.img ./sample/aosp/external/avb/test/data/
Opening vbmeta file: ./sample/vbmeta/lineage/vbmeta.img

Using known private key for verification: ./sample/aosp/external/avb/test/data/sign_key.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_pik.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_prk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_psk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_puk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048_gsi.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048_oneplus.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa4096.pem. Public key found at index: 945
If the script was executed on a vbmeta.img file from an Android user build, there is a problem.

Caso contrário, a ferramenta retorna uma mensagem de sucesso; veja, por exemplo, a build Pixel9:

root@kitploit:~
$ python test_avb_key.py ./sample/vbmeta/pixel9/vbmeta.img ./sample/aosp/external/avb/test/data/
Opening vbmeta file: ./sample/vbmeta/pixel9/vbmeta.img

Using known private key for verification: ./sample/aosp/external/avb/test/data/sign_key.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_pik.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_prk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_psk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_atx_puk.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048_gsi.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa2048_oneplus.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa4096.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa4096_oneplus.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa4096_realtek.pem. Public key not found in vbmeta.img file. That's good.
Using known private key for verification: ./sample/aosp/external/avb/test/data/testkey_rsa8192.pem. Public key not found in vbmeta.img file. That's good.
No issues were found with ./sample/vbmeta/pixel9/vbmeta.img

Desenvolvedores Android podem usar esta ferramenta como uma verificação rápida para garantir que builds de release/produção não sejam assinadas com chaves privadas publicamente conhecidas. Ela também pode ser integrada ao processo de build para garantir que builds de usuário do Android sejam assinadas corretamente, ou a build falhará.

Baixar ferramenta