____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
O Machote de Papel (PM) orquestra ninja e grakn.ai binários para ajudar na análise binária estática com o objetivo de encontrar bugs no software. PM aproveita o Ninja MLIL SSA binário para extrair significado semântico sobre instruções individuais, operações, estado de registro/variável e fluxo geral de controle.
A PM migra esses dados para o Grakn - um gráfico de conhecimento que nos permite definir ontologias específicas de domínio para dados e escrever regras poderosas de inferência para formar relacionamentos entre dados que não queremos (ou não podemos) armazenar explicitamente. Heeh, quão legal é isso?
Este projeto foi lançado em conjunto com uma palestra do Derbycon 2017 intitulada "Auxidando análise estática: descobrindo vulnerabilidades em metas binárias por meio de inferências gráficas do conhecimento". Você pode assistir a essa conversa aqui.
O protótipo inicial e a base de código público do Machet Machet foram desenvolvidos por pesquisadores de segurança no Battelle Memorial Institute. À medida que esse projeto amadurece, esperamos que você o ache útil em sua própria pesquisa e considere contribuir para o projeto.
É fácil trabalhar com o conjunto de ILs do BNIL, agradavelmente detalhado e legível por humanos. A qualquer momento, podemos decidir alavancar outros níveis e formas da IL com pouco esforço de desenvolvimento de nossa parte. Quando você acrescenta a isso a capacidade de elevar várias arquiteturas e escrever levantadores personalizados, temos pouco motivo para não usar o BNIL.
A linguagem de consulta de Grakn (GRAQL) é fácil de aprender e intuitiva, o que é extremamente importante nos estágios iniciais desta pesquisa, enquanto ainda estamos em consultas para modelar os padrões de vulnerabilidade ao realizar análises estáticas.
A capacidade de escrever nossas próprias ontologias específicas de domínio nos permite experimentar rapidamente novas idéias de consulta e maneiras de tornar nossas consultas menos complexas. Quando encontramos um caso em que pensamos "Gee, se eu tivesse acesso ao relacionamento entre ..." Podemos modificar nossas regras de ontologia e inferência para obter essas informações.
Enquanto o jogo final para PM é eliminar a necessidade de consultas escritas em seres humanos, o fato é que estamos começando na estaca zero. O que significa que a participação manual de muitas consultas para modelar os padrões que os pesquisadores de vulnerabilidade humana procuram ao caçar insetos.
Machote de papel requer binaryninja v1.1, grakn v1.4.2, o motorista de grakn python e o java jre
Incluímos algumas consultas básicas para você começar, se quiser brincar com o PM. Como você pode imaginar, não há uma consulta "Silver Bullet" que encontrará todas as manifestações de uma classe de vulnerabilidade específica. Por esse motivo, incluímos versões para cada consulta da CWE. À medida que adicionamos novos métodos para encontrar o mesmo CWE, adicionaremos scripts com os números de versão incrementados para diferenciar.
cwe_120_v1.py - Testes para uso da função não segura 'gets ()' (CWE -120)
cwe_121_v1.py - Testes para transbordamentos de buffer (CWE -121)
cwe_129_v1.py - Testes para verificações de limites ausentes (CWE -129)
cwe_134_v1.py - Testes para vulnerabilidades de string de formato (CWE -134)
cwe_788_v1.py - Testes para os limites ausentes Verifique nos índices de matriz (CWE -788)
Para uso básico, execute o script paper_machete.py e siga os prompts. Para uso mais avançado, leia o wiki.
Normalmente, você começará com a opção [1] e trabalha para a opção [3] . Se você tiver algum problema com a opção de uso do Grakn [4] para redefinir o Grakn em um estado limpo e tente novamente.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
A opção [1] lista todos os arquivos executáveis no diretório /analysis . Portanto, coloque os executáveis que você deseja analisar em /analysis . Esta opção executará pmanalyze.py e gerará um arquivo JSON no diretório /analysis .
Depois de analisar arquivos com [1] e produzir arquivos JSON resultantes, eles aparecerão como uma opção de opção [2] . A seleção de um arquivo json na opção [2] migrará os dados para o Grakn.
Agora que você tem dados no Grakn, você pode usar a opção [3] . Isso iniciará todos os scripts em /queries no espaço de chave de sua escolha. Se você escrever seus próprios padrões de consulta, basta jogá -los em /queries e opção [3] também os executará.