Relacionamento de Código e Investigação de Código de Minash (MCRIT)
O MCRIT é uma estrutura criada para simplificar a aplicação do algoritmo de Minash no contexto da similaridade do código. Ele pode ser usado para implementar rapidamente "Shinglers", ou seja, métodos que codificam propriedades das funções desmontadas, para serem usadas para estimativa de similaridade através do algoritmo MINHASH. É adaptado para trabalhar com relatórios de desmontagem emitidos pelo SMDA.
Uso
Uso dockerizado
É altamente recomendável usar o Docker-McRit totalmente embalado para implantação e uso triviais.
Em primeiro lugar, isso garantirá que você tenha versões totalmente compatíveis em todos os componentes, incluindo um banco de dados para persistência e um front -end da Web para uma interação conveniente.
Uso independente
A instalação do mcrit por conta própria exigirá mais algumas etapas.
Para o seguinte, assumimos o Ubuntu como sistema operacional host.
Os requisitos de instalação do Python estão listados no requirements.txt e podem ser instalados usando:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
Por padrão, o MongoDB 5.0 é usado como back -end, que também é o modo de operação recomendado, pois fornece um armazenamento de dados persistente. Os seguintes comandos descrevem um exemplo de instalação no Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
Ao fazer a instalação independente, você possivelmente deseja instalar o módulo MCRIT com base no repositório clonado, assim:
Após essa instalação inicial e, se desejado, o mcrit pode ser usado sem uma conexão com a Internet.
Operação
O back -end do MCRIT geralmente é dividido em dois componentes, um servidor que fornece uma interface de API para trabalhar e um ou mais trabalhadores processando trabalhos na fila. Eles podem ser iniciados em conchas separadas usando:
e
Por padrão, o servidor API REST ouvirá em http://127.0.0.1:8000/.
Interação
Independentemente de sua escolha para instalação, uma vez em execução, você pode interagir com o back -end do MCRIT.
Cliente mcrit
Criamos um módulo de cliente Python capaz de trabalhar com todos os pontos de extremidade disponíveis do servidor.
A documentação para este módulo de cliente está atualmente em desenvolvimento.
Mcrit cli
Há também um CLI que é baseado neste pacote de clientes, exemplos:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions Uma documentação mais extensa da cli mcrit está disponível aqui
Plug -in de mcrit IDA
Um plug -in de IDA também está atualmente em desenvolvimento. Para usá -lo, primeiro crie seu próprio config.py e faça as alterações necessárias, dependendo da implantação da sua instância de mcrit:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
Em seguida, basta executar o script encontrado em
./plugins/ida/ida_mcrit.py
em Ida.
Dados de referência
Em julho de 2023, começamos a preencher um repositório do GitHub que contém dados de referência prontos para uso para compiladores e bibliotecas comuns.
Histórico da versão
- 2024-06-20 V1.3.17: A exclusão e a limpeza do trabalho agora são mais robustas e não limpam acidentalmente amostras indesejáveis - @yankovs - thx !!
- 2024-05-10 v1.3.16: A limpeza da fila foi estendida para também purgar arquivos enviados durante todos os três tipos de consultas (mapeado, não mapeado, SMDA).
- 2024-04-17 v1.3.15:
spawningworker do tipo de trabalhador agora encerrará as crianças após o queueconfig.queue_spawningworker_children_timeout segundos. - 2024-04-02 v1.3.14: Experimental: Introdução do novo trabalhador do tipo
spawningworker -Essa variante consumirá trabalhos da fila como de costume, mas adiará a execução real do trabalho em um processo (sub) separado, que deve reduzir os problemas com alocações de memória bloqueada. - 2024-04-02 v1.3.13: Ao limpar a fila, agora também exclua todos os trabalhos fracassados @yankovs-thx !!
- 2024-03-06 v1.3.12: Corrigido um bug em que a proteção de amostras recentes da limpeza da fila levaria a erros importantes, conforme relatado por @yankovs-thx !!
- 2024-02-21 v1.3.10: SMDA BUMP para 1.13.16, que abrange outras 200 instruções em uma categoria melhor escapada (afeta os minhashes).
- 2024-02-16 v1.3.9: Recurso de limpeza de filas automatizados acabados e integrados (desativado por padrão) proposto por @yankovs-thx !!
- 2024-02-15 v1.3.8: Bump smda para resolver problemas com o reconhecimento de versão no SMDAFUNCTION, FIXA PRIMAIXAS DE EXCEÇÃO NO MCRITINTERFIENT DO MCRITING DO IDA (THX TO @MalwareFrank !!).
- 2024-02-12 v1.3.5: A recalculação de minhashes agora mostrará porcentagens corretas (THX para @MalwareFrank !!).
- 2024-02-02 v1.3.4: mini correção no plugin IDA para evitar referir um objeto potencialmente não inicializado (THX para @r0ny123 !!).
- 2024-02-01 v1.3.2: Correção: A correspondência não paralela agora produz o mesmo formato de dados (THX para @Dannyquist !!).
- 2024-01-30 v1.3.1: A conexão com o MongoDB agora está totalmente configurável (thx para @dannyquist !!).
- 2024-01-24 V1.3.0: Breaking: Release de marco com melhorias de indexação para Pichash e Minash. Para garantir a compatibilidade com versões anteriores, recomenda -se o recalculação de todos os hashes. Verifique este guia de migração.
- 2024-01-23 v1.2.26: fixando Lief a 0,13.2 para garantir que o SMDA fixado permaneça compatível.
- 2024-01-09 v1.2.25: Verifique se podemos fornecer status do sistema, independentemente de haver um
db_state e db_timestamp ou não. - 2024-01-05 v1.2.24: Agora suporta o argumento "Query" na CLI, bem como o Compact MatchingResults (sem informações de correspondência da função) para reduzir a pegada de arquivo.
- 2024-01-03 v1.2.23: limite o tamanho máximo da exportação para proteger o sistema contra falhas de OOM.
- 2024-01-02 v1.2.22: Introduziu classe de dados para exclusivoBlockSResult com funcionalidade de conveniência.
- 2023-12-28 v1.2.21: Mcritclient agora fazendo a passagem para a correspondência de consultas binárias.
- 2023-12-28 v1.2.20: O status agora fornece registro de data e hora da última atualização de banco de dados.
- 2023-12-13 v1.2.18: Verificação dos limites versus sample_ids passados para getUniqueBlocks.
- 2023-12-05 v1.2.15: Funcionalidade de conveniência adicionada aos objetos de trabalho, o número da versão alinhado com o mcritweb.
- 2023-11-24 v1.2.11: SMDA fixado na versão 1.12.7 antes de atualizarmos o SMDA e introduzir uma migração de banco de dados para recalcular os hashes pic + picblock com a generalização aprimorada.
- 2023-11-17 v1.2.10: Adicionada capacidade de definir um token de autorização para o servidor via campo de cabeçalho:
apitoken ; capacidade adicionada de filtrar por grupos de trabalho; Capacidade adicionada de falhar em empregos órfãos. - 2023-10-17 v1.2.8: Corrigir menor em grupos de trabalho.
- 2023-10-16 v1.2.6: Estatísticas resumidas da fila, classificação refinada do trabalho.
- 2023-10-13 v1.2.4: Exposta de fila/exclusão de emprego para descansar interface, velocidade de consulta aprimorada para várias pesquisas de fila por meio de indexação e consultas de MongoDB parametrizadas.
- 2023-10-13 v1.2.3: Os trabalhadores agora se registrarão de trabalhos em andamento, caso trapalhem (THX para @yankovs para o modelo de código).
- 2023-10-03 V1.2.2: Filtragem de correspondência de resultação para amostras de NUM MIN/MAX (inclusão de correção).
- 2023-10-02 v1.2.0: Release de marco para o Virus Bulletin 2023.
- 2023-09-18 v1.1.7: Bugfix: Tasking Combinando com 0 bandas agora desativam a correspondência de Minash como deveria ser antes. Também correspondendo ao porcentagem de progresso do trabalho fixo.
- 2023-09-15 v1.1.6: Bugfix em Blockmatching, funcionalidade de conveniência para interagir com objetos de trabalho.
- 2023-09-14 v1.1.5: Gunicorn desativado como manipulador de WSGI padrão por enquanto, devido a problemas com chamadas que não retornam ao lidar com chamadas pesadas de computação.
- 2023-09-14 V1.1.4: Bugfix: Adicionado
requirements.txt a data_files em setup.py para garantir que esteja disponível para o pacote. - 2023-09-13 v1.1.3: Extraiu algumas constantes críticas de desempenho em parâmetros configuráveis em MinashashConfig e StorageConfig, corrigiu o relatório de progresso para correspondência em lotes, bugfix: uso do GunicornConfig em DatACLASs adequados.
- 2023-09-13 v1.1.1: requisitos / configuração simplificados, excluído
gunicorn for Windows (THX para @yankovs !!). - 2023-09-12 v1.1.0: Para implantações do Linux, o Mcrit agora usa
gunicorn em vez de waitress como servidor WSGI devido ao desempenho muito melhor. Como o Gunicorn precisa de sua própria configuração, isso exigia que as versões menores (THX para @yankovs !!). - 2023-09-08 v1.0.21: Todos os métodos do mCritclient agora avançam os nomes de usuários/usuários para o back-end.
- 2023-09-05 v1.0.20: Use dois complementos para representar endereços no SampleEntry, FunctionEntry ao armazenar em MongoDB para abordar as limitações do BSON (THX a @Yankovs).
- 2023-09-05 v1.0.19: As estatísticas estão agora usando os contadores internos que foram criados há um tempo (THX para @yankovs).
- 2023-08-30 V1.0.18: Pontuação refinada do LinkHunt e agrupamento de resultados via relacionamento com ICFG.
- 2023-08-24 v1.0.15: Primeira tentativa integrada de capacidade de caça ao link no MatchingResult.
- 2023-08-24 v1.0.13: A reconstrução das bandas de Minash não explodirá mais o uso da RAM. Verificações redundantes removidas (THX para @Yankovs).
- 2023-08-23 v1.0.12: Adicionado a capacidade de reconstruir as bandas de minhash usadas para indexação.
- 2023-08-22 v1.0.11: Corrigido um bug em que ao importar dados em massa, o
function_name também não foi adicionado como um function_label . - 2023-08-11 v1.0.10: Corrigido um bug em que, ao importar dados em massa, o function_id não seria ajustado antes de adicionar mrinhashes às bandas, possivelmente levando a function_ids inexistentes.
- 2023-08-02 v1.0.9: O plug-in IDA agora pode filtrar por tamanho de bloco e pontuação de minhash, layout otimizado e experiência do usuário (THX para o feedback para @r0ny123 !!)
- 2023-07-28 v1.0.8: O plug-in IDA agora pode exibir gráficos coloridos para funções remotas e fazer consultas para picblockhashes (para blocos básicos) para a função atualmente visualizada.
- 2023-06-06 V1.0.7: Recursos de filtragem estendidos no MatchingResult.
- 2023-06-02 v1.0.6: O plug-in do IDA agora pode tarefas de correspondência de tarefas, mostrar seus resultados e lotes de etiquetas de importação. Harmonização de MatchingResult.
- 2023-05-22 v1.0.3: Mais robustez para verificação do caminho ao usar o MCRIT CLI na pasta de repo Malpedia.
- 2023-05-12 v1.0.1: Algum progresso na importação de etiquetas para o plug-in IDA. Extensão da API refletida de mcritweb em mcritclient.
- 2023-04-10 v1.0.0: Release de marco para BotConf 2023.
- 2023-04-10 V0.25.0: O plug-in IDA agora pode fazer consultas de função para a função atualmente visualizada.
- 2023-03-24 V0.24.2: O mcritclient pode encaminhar nome de usuário/apitoken, addjsonreport agora está avançado.
- 2023-03-21 v0.24.0: O FunctionEntries agora pode armazenar FunctionLabeLentries adicionais, ao longo do envio do usuário/data.
- 2023-03-17 V0.23.0: Agora é possível consultar correspondências para Smdafunctions únicas (de maneira síncrona).
- 2023-03-15 v0.22.0: O McritClient agora suporta apitokens e respostas brutas para um subconjunto de funcionalidade.
- 2023-03-14 V0.21.0: Suporte de back-end para mais filtragem de granulação fina.
- 2023-03-13 V0.20.6: Suporte de back-end para filtrar a família/amostra por pontuação no MatchResult.
- 2023-02-22 V0.20.4: Bugfix para calcular pontuações exclusivas e acessar esses resultados.
- 2023-02-21 V0.20.3: Suportando recursos de front-end com apresentação de resultados.
- 2023-02-17 v0.20.2: Objeto de relatório de correspondência estendido para suportar melhorias no front-end.
- 2023-02-14 V0.20.0: Cliente de console revisado para simplificar as interações baseadas em conchas com o back-end.
- 2023-01-12 V0.19.4: Recursos de filtragem adicionais para MatchingResults.
- 2022-12-13 v0.19.1: Agora é possível exigir quantidades específicas (mais altas) de correspondências de banda para candidatos (ou seja, reduzir a imprecisão da correspondência).
- 2022-12-13 v0.18.x: Ativar correspondência de IDs de função arbitrários.
- 2022-11-25 V0.18.9: Combinação de consulta acelerada.
- 2022-11-18 V0.18.8: Manuseio harmonizado de exclusão e modificações, pequenas correções.
- 2022-11-13 V0.18.7: Exclusão de amostra acelerada drasticamente.
- 2022-11-13 v0.18.6: Funcionalidade adicionada para modificar as informações existentes da amostra e da família.
- 2022-11-11 V0.18.2: Atualizar o procedimento de correspondência, agora deve ser capaz de lidar com binários maiores com mais robustez e eficiência.
- 2022-11-03 V0.18.1: Menores correções.
- 2022-11-03 V0.18.0: O isolamento de bloco exclusivo agora também gera uma proposta para uma regra YARA, saída de resultado reestruturada.
- 2022-10-24 V0.17.4: Configuração harmonizada.py com requisitos, melhor eficiência de memória para processar trabalhos cruzados.
- 2022-10-18 v0.17.3: Adicionado um script de conveniência para produzir relatórios SMDA recursivamente de uma pasta semiestruturada.
- 2022-10-13 V0.17.2: Fixia problemas potenciais de OOM durante o cálculo da (Processando as funções a serem hash em lotes menores.
- 2022-10-12 v0.17.1: Adicionado uma função para agendar um trabalho que garantirá que os minhas sejam calculados para todas as amostras/funções.
- 2022-10-11 v0.17.0: a busca de blocos exclusivos agora é um trabalho asicrono através do trabalhador.
- 2022-10-11 v0.16.0: As amostras de trabalhos de matchQuery agora serão armazenadas com suas entradas de amostra/função para permitir um melhor processamento pós-processamento.
- 2022-10-04 v0.15.4: o servidor agora pode exibir sua versão.
- 2022-09-28 v0.15.3: abordando problemas de desempenho para instâncias maiores, gerando sequência de instruções escapadas para blocos exclusivos.
- 2022-09-26 v0.15.0: CrossJobs Now no back-end, começou a fornecer funcionalidade para identificar blocos básicos exclusivos em amostras.
- 2022-08-29 V0.14.2: Menores correções para implantação.
- 2022-08-22 V0.14.0: Os trabalhos agora podem depender de outros trabalhos (preparação para mover os cruzamentos para o back-end), melhorias da QV no tratamento de empregos.
- 2022-08-17 V0.13.1: Opção de linha de comando adicionada para perfil (requer cprofile).
- 2022-08-09 v0.13.0: Agora pode fazer consultas diretas eficientes para correspondências de Pichash e Picblockhash.
- 2022-08-09 V0.12.3: Bugfix para FamilyEntry
- 2022-08-08 V0.12.2: Bugfix para entrega de dados XCFG, adicionou dependência ausente.
- 2022-08-08 V0.12.0: Sintaxe de pesquisa avançada integrada.
- 2022-08-03 v0.11.0: (quebra) As famílias agora estão representadas com uma família.
- 2022-08-03 v0.10.3: Agora, deixando os dados da função XCFG por padrão em dB, acesso exposto a ele via API Rest e McritClient.
- 2022-07-29 v0.10.2: Capacidade adicional de excluir famílias-agora também mantendo as informações do XCFG para todas as funções por padrão.
- 2022-07-12 v0.10.1: desempenho aprimorado.
- 2022-07-12 v0.10.0: (quebra) Manuseio de emprego simplificado.
- 2022-05-13 v0.9.4: Corrigir de bug para receber arquivos enviados.
- 2022-05-13 V0.9.3: Atualizações adicionais para os resultados de correspondência.
- 2022-05-13 V0.9.2: Adicionado outro campo e mais funções de conveniência no MatchingResult para um melhor acesso-essas são mudanças de interrupção para os resultados de correspondência criados anteriormente.
- 2022-05-05 v0.9.1: Processamento de envios binários, pequenas correções para filas de minash-liberação inicial.
- 2022-02-09 v0.9.0: Adicionado picblocks ao mcrit.
- 2022-01-19 v0.8.0: migrou o cliente e os exemplos para o repositório primário do MCRIT.
- 2021-12-16 V0.7.0: Lançamento privado inicial.
Créditos e notas
Agradeço a Steffen Enders e Paul Hordiienko por suas contribuições para o protótipo de pesquisa interna deste projeto! Agradecemos a Manuel Blatt por suas extensas contribuições e refatores deste projeto, bem como para o módulo do cliente!
Pull Pedidos bem -vindos! :)
Licença
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.