[论文分享] Aprimorando a pesquisa de função de código binário baseada em DNN com verificação de equivalência de baixo custo

Aprimorando a pesquisa de função de código binário baseada em DNN com verificação de equivalência de baixo custo [TSE 2023]

Huaijin Wang , Pingchuan Ma , Yuanyuan Yuan , Zhibo Liu , Shuai Wang Departamento de Ciência e Engenharia da Computação, HKUST, Clear Water Bay, Kowloon, Hong Kong.
Qiyi Tang , Sen Nie e Shi Wu Tencent Security Keen Lab

A pesquisa de função de código binário é a base principal de vários aplicativos de segurança e engenharia de software, incluindo classificação de amostra maliciosa, detecção de código clone, auditoria de vulnerabilidade etc. informações do programa, como gráficos de fluxo de controle e gráficos de fluxo de dados extraídos por técnicas de análise de programa ou redes neurais profundas. No entanto, técnicas baseadas em DNN capturam vocabulário de código binário, estrutura de controle ou informações de nível de fluxo de dados para aprendizado de representação, que geralmente são muito Rough, não pode representar com precisão as funções do programa. Além disso, pode exibir baixa robustez para várias configurações desafiadoras, como otimização e ofuscação do compilador. Este artigo propõe um método para melhorar a pesquisa de funções do código binário com base em dnn candidatos em . A ideia-chave é criar uma verificação de equivalência abrangente e de baixo custo que exponha rapidamente desvios funcionais entre a função de destino e suas k principais funções correspondentes. lista k, e as funções que passam na verificação podem ser revisitadas para progredir nas funções candidatas top-k de maneira intencional.
execução simbólica, USE) é usado. USE é uma variante da execução simbólica que melhora a disponibilidade iniciando a execução simbólica diretamente do ponto de entrada da função e relaxando as restrições nos parâmetros da função. Escalabilidade. Ele remove a carga causada pela explosão de caminho e restrições de sobrecarga. BinUSE visa fornecer verificação de equivalência em nível de função de montagem, aprimorando a pesquisa de código binário baseada em dnn, reduzindo falsos positivos a um custo menor. A avaliação mostra que o BinUSE pode aprimorar universal e efetivamente quatro pesquisas de código binário baseadas em dnn de última geração ferramentas quando confrontados com os desafios apresentados por diferentes compiladores, otimizações, ofuscações e arquiteturas.

Resumindo: BinUSE usa execução simbólica com restrições para executar verificações de equivalência em funções binárias pesquisadas por DNNs, reduzindo falsos positivos para aprimorar os resultados da pesquisa.

introdução

Com o desenvolvimento vigoroso da tecnologia de aprendizado de máquina e sua ampla aplicação em tarefas posteriores, como incorporação de software [6], [7], a maioria das ferramentas de pesquisa de código binário contemporâneas visam treinar um modelo de aprendizado de máquina para capturar a similaridade de código binário [8], [ 9], [10], [11] Em particular, avanços recentes em redes neurais profundas (DNNs) e aprendizado de representação tornaram possível treinar modelos DNN para aprender representações de código ideais que são capazes de distinguir funções Assembly semelhantes [12] , [13], [14], [15], [16], [17]. Para aprender representações de código, modelos DNN são treinados usando vocabulário (leve), estruturas de controle ou recursos de nível de fluxo de dados. Tais representações, embora fáceis para extrair, pode não preservar a semântica do programa em grande medida. Os recursos leves geralmente não são robustos a desafios como otimização do compilador ou ofuscação, o que faz com que o código de montagem semanticamente semelhante pareça bastante diferente. Portanto, o modelo DNN pode exibir menor discriminabilidade e menos robustez , levando a um grande número de falsos positivos nos candidatos top-k que ele recupera
.fte biblioteca de funções RP, usando verificações de equivalência de baixo custo para identificar rapidamente ft f_t em RPftAs funções semanticamente desviadas são, portanto, removidas das funções candidatas de classificação top-k recuperadas. Portanto, pode ser reconsiderado se incluir as funções que passam na inspeção nas funções candidatas top-k recuperadas. Para ferramentas de pesquisa de função binária baseadas em dnn O principal os resultados da ponderação são mostrados na Tabela 1.

insira a descrição da imagem aqui

Este trabalho fornece melhorias efetivas para quatro ferramentas SOTA DNN, mesmo que essas ferramentas usem diferentes modelos de redes neurais e métodos de aprendizado. [19] para construir e verificar a relação de entrada-saída de funções de montagem. Comparado com a execução simbólica padrão, USE visa realizar um raciocínio simbólico flexível e rápido diretamente do ponto de entrada da função, ignorando os prefixos de caminho caro para funções de destino. Otimizado o padrão esquema de uso BinUSE como um utilitário, especialmente para checagem de equivalência de funções de montagem. Em seguida, BinUSE usa a fórmula simbólica inserida pelo ponto de chamada externo para formar restrições simbólicas em cada caminho e coleta restrições de símbolo correspondentes para corresponder a duas funções.

Contribuições
(1) No nível conceitual, um novo foco é proposto para aprimorar a busca de função de código binário baseada em dnn com baixa precisão. Este artigo não projeta um novo dnn (em princípio, é difícil capturar a semântica com precisão), mas projeta uma verificação de equivalência de baixo custo para marcar e excluir funções de montagem que se desviam semanticamente da função objetivo
(2) No nível técnico, um método de verificação de equivalência é proposto para reduzir ainda mais seu custo otimizando o esquema de uso padrão. é projetado especificamente para funções de montagem, levando em consideração vários desafios técnicos e oportunidades de otimização, como a coleta de restrições de símbolo em sites de chamadas externas acessíveis por pontos de entrada de função para reduzir a complexidade (3) Resultados experimentais Mostra-se que o teste de equivalência projetado é geral
e eficaz e pode aprimorar a ferramenta de pesquisa de função binária baseada em dnn a um custo menor. Sob várias condições desafiadoras, incluindo correspondência de função de equivalência geral e pesquisa CVE , o teste de equivalência mostra excelente desempenho

conhecimento preliminar

Formulação e métricas

O trabalho de pesquisa de função semântica existente recebe a função de montagem de destino ft f_tft, e uma biblioteca de funções RP RPRP , o mecanismo de busca obterá as funções k com a maior semelhança semântica comoft f_tftO resultado do reconhecimento é Top-k. O índice para medir a precisão do top-K é calculado pela seguinte fórmula:
1 N × ∑ i = 1 npk ( fi ) \frac{1}{N} \times \sum_{ i=1 }^n p_k\esquerda(f_i\direita)N1×eu = 1npk( feu)
onde N é o número total de funções no programa. Simplesmente entenda o significado desta fórmula e coloque iterativamente o binárioB em 1 Bin_1B em _1A função fi f_i emfeuComo a função objetivo, consultar com B em 2 Bin_2B em _2O conjunto de funções composto por todas as funções em RP RPRP , deixe-o corresponder corretamentea fi f_ifeuA função de é fi ′ f_i'feu, 当fi ′ f_i'feupk ( fi ) = 1 p_k(f_i) = 1 nos k principais candidatospk( feu)=1 , caso contrário, é 0.
Outro indicador comumente usado é chamado pontuação média recíproca da classificação (MMR)
MRR = 1 ∣ Q ∣ ∑ i = 1 ∣ Q ∣ 1 classificação ⁡ i \mathrm{MRR}=\frac {1}{| Q|} \sum_{i=1}^{|Q|} \frac{1}{\operatorname{rank}_i}MRR=Q 1eu = 1Qclassificaçãoeu1
onde ∣ Q ∣ |Q|Q é o número total de consultas,ranki rank_ir an keué o número de sequência do resultado correto nos k candidatos principais em uma consulta, por exemplo, o resultado correto é classificado em 4º lugar no k principal, então ranki = 4 rank_i = 4r an keu=4 , Quanto maior o índice MMR, melhor o efeito.

Verificação de equivalência

Além do popular aprendizado de representação baseado em DNN, outra direção de pesquisa é realizar verificações de equivalência de código, usando relações de entrada-saída do programa obtidas por meio da execução simbólica. Dada uma fórmula simbólica que representa as relações de entrada-saída do código binário, use a solução de restrição. compilador verifica a equivalência de fórmulas simbólicas. A verificação de equivalência é resiliente a configurações desafiadoras, como otimizações e ofuscações do compilador, pois essas configurações não devem alterar as relações de entrada-saída do programa. Um exemplo
insira a descrição da imagem aqui

Os dois trechos de código acima podem ser equivalentes às próximas duas instruções, então a verificação de equivalência pode verificar a = m ∧ p ≠ sa=m \wedge p \neq sa=mp=Se a restrição for satisfeita no domínio de entrada, se todas as entradas não satisfizerem esta condição de restrição, então os dois fragmentos de código são considerados estritamente equivalentes.
LimitaçõesA técnica proposta fornece uma prova estrita da equivalência do programa. são menos escaláveis ​​devido à explosão de caminho, raciocínio sobre restrições complexas e desafios específicos de domínio de análise binária. Até agora, os métodos baseados em verificações de equivalência têm sido usados ​​principalmente para comparações básicas de blocos ou rastreamento de execução. Classificação binária Dois erros padrão para verificação de
equivalência: falso positivo (FP) e falso negativo (FN), o primeiro é que funções de diferentes funções são consideradas equivalentes, e o último é que funções equivalentes são consideradas não equivalentes. Embora as verificações de equivalência não possam ser usadas diretamente para calcular top-k precisão, mas verificações de equivalência habilitadas por USE podem ser usadas para eliminar falsos alarmes de modelos DNN.

Execução Simbólica Sublimitada

A execução simbólica subconstrita é proposta para realizar a inspeção de fragmentos de código arbitrários, reduzindo a complexidade da execução simbólica em princípio e sistema. Para ilustrar as diferenças técnicas de alto nível entre SE e USE (em termos de cobertura de caminho), a Fig. 2a apresenta um Analise o caso do programa de decodificação de mensagens e identifique um bug em decoding_msg. A função principal usa receive_msg para receber a mensagem codificada e executa o processo de decodificação em uma instrução de loop. Em seguida, a mensagem decodificada é passada para a função decoding_msg, uma Um dos bugs (rotulado como bug na linha 15 na Figura 2a) está oculto na ramificação if. SE pode ser prejudicado na análise deste caso simples devido ao alto uso de recursos computacionais e restrições longas. USE de maneira baseada em princípios Complexidade reduzida. A fim de alcançar bugs, USE analisa diretamente decoding_msg. O caminho resultante é mostrado na Figura 2c, para a mensagem decodificada msg 22 msg_{22}ms g _22Nenhuma restrição complexa é imposta, e restrições mais fáceis de resolver podem ser introduzidas.Análise mais cara de todo o programa pode ser adiada até que seja necessária.

insira a descrição da imagem aqui

Limitações USE Ao relaxar as restrições na entrada, é possível encontrar soluções satisfatórias que não são realmente válidas ao considerar o prefixo do caminho do principal para o fragmento de código de destino. Da mesma forma, o sucesso em encontrar uma solução A satisfatória significa que os dois códigos os fragmentos falham na verificação de equivalência. Em geral, USE fornece, em princípio, uma verificação de equivalência completa, válida, mas incorreta, possivelmente levando a falsos negativos que muitas vezes são indesejáveis.

motivação

Métodos baseados em DNN aprendem representações de código de vocabulários, estruturas de controle ou fatos de fluxo de dados. Um modelo DNN bem treinado converte amostras binárias de entrada (ou instruções de máquina) em vetores numéricos, onde dois programas semelhantes devem ter distância de cosseno mais próxima. Baseado em DNN Os métodos aprendem principalmente dados "fuzzy" e leves e recursos de controle, que têm alta flexibilidade e escalabilidade, e facilitam a análise de amostras binárias em grande escala. No entanto, o vocabulário aprendido, controle ou recursos de dados não representam funções com precisão. Em resumo , acreditamos que as representações de incorporação aprendidas têm principalmente os dois defeitos a seguir: (1) Baixa discriminação: modelos DNN podem tratar funções logicamente diferentes como semelhantes. Portanto, baixa discriminação resulta em mais resultados de correspondência de FP relatados; (2) Baixa robustez: robustez refere-se à resistência sob várias condições imperfeitas ao executar software ou algoritmos. Baixa robustez significa que o modelo DNN pode Dificuldade em combinar funções que compartilham a mesma lógica, mas são sintaticamente diferentes. Em geral, baixa robustez resulta em relatar mais resultados de correspondência FN.

insira a descrição da imagem aqui

A Figura 3 mostra os resultados da comparação, onde os pontos vermelhos representam as pontuações de similaridade entre funções de montagem compiladas a partir da mesma função de origem, e os pontos azuis representam as pontuações de similaridade entre outras funções. Idealmente, as altas pontuações de similaridade dos pontos vermelhos mostram a robustez do modelo DNN para otimização do compilador: as funções assembly compiladas da mesma função fonte têm a mesma semântica, apesar de exibirem formas de sintaxe diferentes. Portanto, quando os pontos azuis estão bem separados, isso reflete a Distinguibilidade, o que significa que as funções assembly compiladas a partir de fontes diferentes funções mostram grandes diferenças na visão do modelo DNN.

insira a descrição da imagem aqui

A Figura 4 fornece uma previsão errada: duas funções de montagem compiladas de códigos-fonte diferentes são consideradas erroneamente como "semelhantes". Isso pode ser devido à semelhança do "gráfico de fluxo de contexto" extraído pelo ncc, que não pode refletir o desvio da função.

Visão geral do programa

A pesquisa moderna de código binário baseada em DNN aprende a representação de código a partir de recursos de baixa granularidade, que têm baixa discriminabilidade e baixa robustez. para configurações desafiadoras, como otimizações de compilador ou ofuscação. Nosso estudo preliminar verificou manualmente os resultados de correspondência top-k desses modelos DNN e suspeitamos que uma simples verificação de equivalência pode efetivamente reduzir FPs. Por exemplo, podemos fornecer a função objetivo F t F_tFtForneça a mesma entrada que as funções em top-k e compare suas saídas para ver se são diferentes.

insira a descrição da imagem aqui

A Figura 5 mostra uma visão geral de nosso fluxo de trabalho para aumentar a recuperação top-k com ferramentas baseadas em DNN. Em suma, este estudo visa fornecer uma verificação de equivalência de baixo custo que faz sentido se duas funções de montagem são idênticas. Julgamentos verdadeiro/falso. Desta forma, podemos condicionar os resultados da pesquisa de ferramentas baseadas em dnn reduzindo os FPs na recuperação top-k. Por exemplo, muitos "pontos azuis" no exemplo motivador (Fig. 3) podem ser resolvidos simplesmente executando Input duas funções e compare a equivalência de suas saídas para determinar se elas são diferentes da função de destino. Com essa verificação de equivalência de baixo custo, esses FPs podem ser facilmente removidos da recuperação top-k. Verifique se a equivalência do software é cara
em geral, portanto, como um compromisso prático, aceitamos verificações de equivalência de precisão relativamente baixa no sentido de que duas funções que passam na verificação ainda podem ser diferentes. Assim, adicionando verificações de equivalência de baixo custo a pesquisas de código binário baseadas em DNN pode levar a sinergias reais, levando a um serviço mais rápido e maior precisão.

insira a descrição da imagem aqui

1 As verificações de equivalência específicas de execução usam valores amostrados aleatoriamente como entrada e comparam as saídas de execuções específicas. Essa abordagem pode cobrir apenas um pequeno espaço de entrada e, ao tratar diferentes funções como equivalentes, pode levar a altos FPs. E definir um o contexto de execução apropriado ao executar diretamente o código assembly é um problema muito desafiador.
2 As verificações de equivalência baseadas na execução simbólica modelam com precisão as restrições de entrada e constroem verificações de equivalência dentro do espaço de entrada legal. Portanto, deve ser preciso. No entanto, a escalabilidade do SE é baixa, e sua execução dificilmente pode alcançar funções escondidas na cadeia de chamadas. 3
Verificação de equivalência baseada em execução simbólica sub-restringida USE pode iniciar símbolos em pontos arbitrários do programa Inferência, melhora SE padrão ignorando prefixos de caminho caros. Prefixos de caminho são então ignorados, indicando que USE não pode modelar as restrições na entrada do fragmento de código de destino. Portanto, USE superexplora todo o espaço de entrada. USE pode executar uma verificação de equivalência completa, mas não confiável, porque pode encontrar contra-exemplos fora do espaço de entrada legal, violando assim as restrições de verificação de equivalência.
4 Verificação de equivalência funcional com base na execução simbólica sub-restrita Embora existam dificuldades gerais na resolução não confiável, mas nossas observações de software do mundo real levaram a uma suposição chave neste estudo: as funções em programas reais seguem o princípio de programação defensiva [35], [36] , [37], que afirma que nenhuma função em particular deve fazer suposições sobre sua entrada (por exemplo, o ponteiro passado pelo chamador pode ser inválido), ou seja, a entrada da função pode ser qualquer valor no espaço de entrada. A suposição fornece uma oportunidade única para fornecer uma verificação de equivalência "confiável", especialmente para funções, porque ao analisar funções em software real, o espaço de entrada legal deve estar alinhado com o espaço de entrada completo que pode ser explorado pelo USE. Além disso, esse princípio é adotado por conjuntos de programas populares (por exemplo, coreutils, binutils ) e programadores de softwares complexos do mundo real, como OpenSSL e Wireshark.
5 A verificação de equivalência de função baseada em BinUSE troca integridade por velocidade para otimizar ainda mais o método USE padrão. BinUSE calcula a fórmula simbólica inserida pelo site de chamada externo para formar restrições simbólicas para cada caminho. Para combinar duas funções, BinUSE explora o sinal correspondente restrições coletadas para cada caminho em . BinUSE não está completo. No entanto, de acordo com resultados empíricos, a taxa média de FN é muito baixa. Além disso, BinUSE pode realizar verificações de baixo custo sob várias configurações desafiadoras (por exemplo, arquitetura cruzada). BinUSE Examining dois executáveis ​​coreutils podem ser executados em 56,6 minutos de CPU (25 segundos por par de funções em média), incluindo todas as tarefas de execução simbólica e resolução de restrições.

Projeto BinUSE

Dado um executável de entrada, o BinUSE primeiro executa a engenharia reversa para recuperar as informações da função de montagem. Em seguida, ele inicia o USE caminho por caminho, começando do ponto de entrada de cada função de montagem, onde cada caminho percorre antes de atingir o primeiro ponto de chamada externo. O resultado será gerar um subgrafo no qual cada nó folha corresponde a um site de chamada externo. Para comparar as duas funções de montagem, verificamos a equivalência semântica das entradas do site de chamada externo e as restrições de caminho iniciando a resolução de restrições, para comparar seus subgrafos derivados (veja abaixo para detalhes).

insira a descrição da imagem aqui

A análise hipotética reversa está no nível da função e não assume a presença de símbolos de programa ou informações de depuração. Desde que as funções a serem usadas sejam identificadas, os binários removidos podem ser processados ​​sem dificuldade. Nossa análise também é plataforma neutra; avaliamos três configurações de arquitetura cruzada para arquiteturas x86 de 64 bits, x86 de 32 bits e ARM. Diferentes compiladores (gcc e clang), níveis de otimização e métodos de ofuscação comuns também são avaliados.

Linha de base

A abordagem de linha de base é executar a análise processual padrão começando no ponto de entrada da função e iterar em cada caminho de execução. Símbolos livres são criados sempre que cargas são feitas a partir de dados desconhecidos, incluindo parâmetros de função, dados globais e outras regiões da memória. Então , coletamos fórmulas simbólicas de saída para registros de CPU e memória nos pontos de saída do caminho para construir relacionamentos de entrada-saída.

Gerando subgráficos de CFG

Considerando a dificuldade de explorar totalmente o CFG de uma função, primeiro extraímos um subgrafo. O subgrafo deve preservar os recursos representativos do CFG correspondente e reduzir razoavelmente a complexidade da análise. BinUSE é projetado para percorrer os pontos de entrada de cada função de montagem Cada execução caminho começa. Quando um loop é encontrado, como uma solução comum, nós desenrolamos o loop. Ao analisar um caminho de execução, BinUSE recursivamente inline cada local de chamada no caminho. BinUSE Para em um local de chamada externo. Consistente com SE padrão, criamos livre símbolos para representar valores armazenados em registradores ou locais de memória. Quando encontramos um local de chamada externa, coletamos fórmulas simbólicas para a entrada de cada chamada de função, para formar a "saída" deste caminho. Também registramos restrições de caminho como pré-requisitos para alcançar sites de chamadas externas.

Comparando Dois Subgráficos

insira a descrição da imagem aqui

A figura acima mostra a comparação de duas funções de montagem ft, fs f_t, f_sft,fssubgrafo G t , G s G_t, G_sGt,Gsprocesso. Compara iterativamente cada site de chamada até descobrir que G t G_tGtSites de chamadas externas em G s G_sGsPermutações equivalentes aos pares de sites de chamadas externas em . Observe que apenas G t G_t é permitidoGtUm subconjunto de locais de chamada em G s G_sGsOutro subconjunto de sites de chamada em . O motivo é que as otimizações do compilador às vezes podem eliminar as chamadas de função da biblioteca C, portanto, permitir que um subconjunto de chamadas de biblioteca corresponda a outro subconjunto de chamadas de biblioteca não impede G t G_tGtcom G s G_s altamente otimizadosGsmatch. Inversamente, se nenhuma permutação for encontrada, as duas funções são consideradas iguais. Embora em G t G_tGte G s G_sGsComparar callsites em pares pode introduzir muitas permutações, mas verificações pesadas de equivalência são realizadas apenas quando dois callsites apontam para a mesma função externa.

Substituição de chamada de biblioteca C Quando alguns dos parâmetros de entrada de uma chamada de biblioteca C são constantes, o compilador pode substituir essa chamada de biblioteca C por outra. Além disso, o compilador pode ocasionalmente substituir uma chamada de biblioteca C comum por uma versão mais segura __printf_chk. printf, um estouro de pilha é detectado antes que o resultado seja calculado.

A correspondência de locais de chamada de biblioteca é considerada uma etapa crítica na verificação de equivalência, para a qual coletamos manualmente as seguintes listas. BinUSE trata as chamadas de biblioteca em cada lista como idênticas. Por exemplo, além de comparar dois locais de chamada printf, consideramos e é o printf callsitemesmo __printf_chk. Esta lista contém todas as substituições possíveis da biblioteca C encontradas em nossos casos de teste, que incluem suítes de teste e um banco de dados CVE, que inclui vulnerabilidades de software complexo, como OpenSSL, Wireshark, bash e função ffmpeg Linux coreutils.binutils
insira a descrição da imagem aqui

Calcule a pontuação de correspondência quantitativa assumindo G t G_tGtExistem n caminhos em (cada caminho termina em um local de chamada externo) e p caminhos são determinados cujos locais de chamada externos estão em G s G_sGsUm site de chamada semanticamente equivalente em , indicando que a função montadora ft f_tfte fs f_sfsUma pontuação s de confiança considerada equivalente é calculada como p/n. Essa pontuação de confiança será usada na calibração dos resultados do modelo DNN. Ao analisar o executável coreutils, 87,9% dos casos tiveram uma pontuação de confiança de 1,0, o que mostra que na maioria dos casos, G f G_fGfTodos os caminhos em G s G_sGscorresponder.

Comparação de dois locais de chamada

Embora a pesquisa anterior tenha provado que o IDA-Pro tem suporte insuficiente para a recuperação de informações de função [43], no banco de dados FLIRT do IDA-Pro [44], as informações de função da biblioteca C padrão foram bem mantidas. Portanto, usando IDA-Pro (versão 7.3) garante em grande parte uma análise confiável de sites de chamadas externas. No entanto, se o executável contiver algumas chamadas de biblioteca definidas pelo usuário (ou definidas por terceiros), o FLIRT não poderá lidar com elas. A restauração dessas informações precisa inferir o número de parâmetros de função; o O progresso mais recente da recuperação de informações de protótipo de função pode se referir a [43], [45], [46] Dado um local de chamada contendo N parâmetros, nós de acordo com a convenção de chamada na arquitetura correspondente Extrai N fórmulas simbólicas.

Permutação de parâmetro de chamada Para verificar dois locais de chamada, procuramos permutações de parâmetros de função que correspondam aos pares. Em vez de simplesmente comparar o i-ésimo parâmetro de dois locais de chamada, adotamos um design mais conservador e comparamos as permutações correspondentes entre os parâmetros. Por exemplo Na figura abaixo, filenamet filename_tnome do arquivo _ _ _tcan e nomes de arquivo filename_snome do arquivo _ _ _sMatch, também pode ser com modos mode_smodo _ _ _s; modet mode_tmodo _ _ _tcan e nomes de arquivo filename_snome do arquivo _ _ _sMatch, também pode ser com modos mode_smodo _ _ _sCorrespondência. Esse design torna a verificação de equivalência mais conservadora, robusta para otimizações do compilador e confusão potencial, mas pode introduzir FPs.

insira a descrição da imagem aqui

Além disso, funções com diferentes números de parâmetros também podem ser equivalentes, por exemplo, gettextquando dgettexto último domainnameé um valor constante, os dois são equivalentes.
insira a descrição da imagem aqui

Para resolver esse obstáculo, o BinUSE foi projetado para ser robusto a uma ampla variedade de softwares do mundo real. Observações empíricas mostram que essa abordagem de permutação não incorre em sobrecarga excessiva, pois quase todos os softwares comumente usados ​​têm um número limitado de parâmetros de função. justificar esta decisão de projeto, apresentamos na Tabela 2 a distribuição do número de parâmetros para todos os sites de chamadas externas encontrados nos casos de teste. A partir desses resultados empíricos, pode-se observar que a maioria dos sites de chamadas externas tem menos ou igual a 2 parâmetros, quase todos os sites de chamadas externas têm parâmetros menores ou iguais a 5. Portanto, acreditamos que nossa decisão de design para arranjo de parâmetros não adiciona custo significativo, mas pode ajudar o design geral do BinUSE a ser mais conservador e robusto.
insira a descrição da imagem aqui

Verificação de equivalência de parâmetros Let PC t , PC s PC_t, PC_sPC _t,PC _sEles são as restrições de caminho do ponto de entrada da função de montagem de destino até o ponto de chamada, Argti , A rgsj Arg^i_t, Arg^j_sA r gteu,A r gsjsão o i-ésimo parâmetro da função t e o j-ésimo parâmetro da função s, respectivamente. Formalmente, verifique
insira a descrição da imagem aqui

onde X = [ x 0 , x 1 , . . . , xm ] X = [x_0, x_1, ..., x_m]x=[ x0,x1,... ,xm] representa a lista de símbolos usada pelos parâmetros e restrições de caminho da função t,Y = [ y 0 , y 1 , . . . , yn ] Y = [y_0, y_1, ..., y_n]Y=[ você0,y1,... ,yn] é a lista de símbolos usada pelos parâmetros e restrições de caminho da função s. A figura a seguir é para verificar se existe uma classificaçãoπ ( Y ) \pi(Y)π ( Y )PC t ( X ) ∧ PC s ( Y ) PC_t(X) \wedge PC_s(Y)PC _t( X )PC _sCombinar X sob a condição de ( Y ) torna as restrições acima insatisfatórias. Se não houver tal arranjo, entãoA rgti , A rgsj Arg^i_t, Arg^j_sA r gteu,A r gsjpara ser equivalente.

insira a descrição da imagem aqui

Esse design torna o BinUSE mais robusto e confiável (menos FNs) mesmo diante de arquitetura cruzada, compilador cruzado, confusão etc. FN ratio. Exceto Além da permutação, nesta etapa, as constantes que representam os endereços de memória na fórmula simbólica também são normalizadas. Adotamos um método direto para determinar as constantes que representam os endereços de memória. Primeiro, ao executar USE path by path, desde que como a observação Uma constante é usada para construir o endereço base do ponteiro de código, que marcamos como um endereço de memória. Em segundo lugar, fazemos uma suposição compartilhada por muitos desmontadores estáticos avançados [47], [48], [49], como que Uma constante será tratada como um endereço de memória se apontar para uma seção de dados ou texto de um executável no formato ELF.
Ao verificar as restrições acima, definimos o tempo limite do solucionador usado Z3 [50] para N segundos. Se o SMT o solver produz um unsat ou falha em encontrar uma solução sat dentro de N segundos, os dois argumentos de chamada de função são considerados equivalentes. Para nossa implementação atual, N é definido como 15 segundos. Definir um tempo limite pode resultar em parâmetros desiguais são considerados equivalentes ( ou seja, FPs). No entanto, definir um tempo limite não introduz FN, o que pode acelerar a análise de grandes amostras binárias.

Otimização

Embora as estratégias de travessia apresentadas nesta seção possam abranger a maioria dos casos práticos, pode haver alguns casos extremos que dificultam nossa análise. Em particular, pode não haver sites de chamadas externas no caminho de execução. Nesse caso, não simplesmente ignoramos isso análise de caminho e, em vez disso, coletar as restrições de caminho PC do ponto de entrada da função até alcançar a instrução de retorno (ret) no final do caminho de execução. No entanto, se nenhuma condição de caminho puder ser construída ao percorrer esse caminho, pule a comparação desse caminho. Em geral, cada instrução de retorno ret será tratada como um "site de chamada externa" especial sem parâmetros. Para determinar se dois caminhos sem sites de chamada externa podem ser combinados, usamos as seguintes restrições para verificar se eles estão relacionados t PC_tPC _te PCs PC_sPC _s.

insira a descrição da imagem aqui

Essa otimização estenderá o subgrafo gerado durante a travessia simbólica com nós adicionais representando restrições de caminho coletadas de caminhos de execução sem sites de chamada externa. Em seguida, para comparação pela função de montagem ft f_tfte fs f_sfsOs dois subgrafos derivados formados G t G_tGte G s G_sGs, ainda comparamos G t G_tGte G s G_sGsNós representando sites de chamadas externas em , também comparação cruzada G t G_tGte G s G_sGsUm nó em um caminho que não representa nenhum local de chamada externa.

insira a descrição da imagem aqui

As 1 principais precisões dos quatro aprimoramentos do modelo DNN avaliados são comparadas na Tabela 3. Depois de usar as otimizações propostas nesta seção, o BinUSE pode melhorar ainda mais a precisão dos modelos DNN em cerca de 2,45% em média.

FERRAMENTAS BASEADAS EM DNN

Em termos simples, quando os modelos baseados em BinUSE e DNN chegam a um consenso: fs ∈ P dnn ∧ fs ∈ P use f_s \in P_{dnn} \wedge f_s \in P_{use}fsPd nnfsPvocê é, então considere fs f_sfsSemelhante à função objetivo. Algoritmo 1 fornece o algoritmo aprimorado, P é o resultado final da previsão e os elementos são compostos por duas tuplas, a primeira é a pontuação de confiança de BinUSE, a segunda é a pontuação de confiança de DNN, classificada de acordo com o mais alto BinUSE Classificar em ordem decrescente por peso.Finalmente, retorne os resultados de pesquisa da função top-k.

insira a descrição da imagem aqui

Onde o limite α \alphaα é selecionado por experimento,α \alphaSe α for muito alto, você acreditará demais que BinUSE levará a mais FPs. Se for muito baixo, o efeito de otimização será insuficiente. O melhor efeito é de 0,41, então escolhaα = 0,41 \alpha = 0,41a=0,41
insira a descrição da imagem aqui

insira a descrição da imagem aqui

experimentar

Implementação

Com base na estrutura de análise binária angr[51], implementamos o BinUSE com cerca de 5.500 linhas de código Python. Ao conectar-se ao popular ecossistema angr e atualizar o código assembly para a linguagem intermediária VEX de plataforma neutra, o BinUSE pode lidar com executáveis. Além do mais , um rico conjunto de ferramentas de análise (por exemplo, execução simbólica) já é fornecido no angr, portanto, economiza o esforço de criá-lo do zero.

Configuração de avaliação

Conjuntos de dados e configurações de compilação O BinUSE foi avaliado usando o conjunto de dados coreutils do Linux. O conjunto de dados Coreutils contém 106 programas. Os programas foram compilados com sete configurações diferentes (consulte a Tabela 5). Usamos gcc 7.5.0 e clang 4.0.1 para compilar os programas. Compilamos programas sem otimização (-O0) e otimização máxima (-O3). Para facilitar as comparações entre arquiteturas, compilamos binários em três arquiteturas diferentes, x86 de 32 bits, x86 de 64 bits e ARM. Um executável coreutils compilado com a opção -O3 tem uma média de 103,7 funções. Em outras palavras, dado um par de executáveis ​​coreutils, BinUSE precisa comparar 103,7 * 103,7 funções de montagem. Além disso, BinUSE é comparado usando o teste do conjunto de dados binutils do Linux. O conjunto de dados Binutils contém programas 112. Cada executável binutils tem uma média de 1765,0 funções.

insira a descrição da imagem aqui

Usamos o BinUSE para aprimorar quatro ferramentas de pesquisa de função de código binário baseadas em DNA de ponta: BinaryAI [15], asm2vec [14], PalmTree [18] e ncc [13].
Uma observação sobre a seleção de conjuntos de dados de treinamento. Usamos código binário simples para treinar esses modelos DNN, e os modelos DNN treinados são avaliados com base em sua robustez em configurações de compilador cruzado, otimização cruzada, arquitetura cruzada e ofuscação.

Desempenho do BinUSE

A Tabela 7 relata o desempenho de BinUSE em um total de 12 configurações de comparação no conjunto de dados coreutils. A maioria das comparações requer configurações desafiadoras de compilador cruzado, otimização cruzada e arquitetura cruzada. Por exemplo, a última comparação na Tabela 7 mostra um Muito difícil configuração, é arquitetura cruzada (ARM vs x86 64 bits), compilador cruzado (gcc vs clang), otimização cruzada (-O0 vs -O3), também aplica ofuscação de achatamento de fluxo de controle (-fla), mudanças extensas no controle estrutura de fluxo.

insira a descrição da imagem aqui

Tabela 7 mostra que BinUSE falha na detecção de mais funções compiladas com ofuscação-fla de achatamento de fluxo de controle. Essa ofuscação converte CFG em instrução de switch C e une blocos básicos com nós de despacho. Ponteiros de código geralmente estão no despachante Usado em nós para direcionar transferências de controle, o que leva a uma maior chance de falha ao materializar ponteiros de código simbólico.

Tempo de processamento

A Figura 10 mostra a divisão do tempo de processamento para gcc -O0 em comparação com gcc -O3. Relatamos o tempo de processamento para executar a execução simbólica e resolver restrições nas Figuras 10a e 10b, respectivamente. é linear no tamanho de . Isso é intuitivo: grande executáveis ​​têm mais recursos, prolongando assim o tempo de execução simbólica do BinUSE. Da mesma forma, executáveis ​​grandes podem conter restrições simbólicas mais complexas, prolongando a resolução de O tempo necessário para restrições simbólicas. No entanto, pode ser visto que a maioria dos exemplos de código binário pode analisar símbolos execução em 2.000 segundos de CPU e resolução de restrições em 4.000 segundos de CPU.

insira a descrição da imagem aqui

Comparação de modelos DNN

Quatro ferramentas de pesquisa de função binária baseadas em dnn BinaryAI, asm2vec, ncc e PalmTree foram executadas nas 12 configurações de comparação. PalmTree não pode lidar com executáveis ​​na plataforma ARM; portanto, ignoramos os cálculos correspondentes. Tabela 8 resume os resultados de desempenho. BinaryAI supera todos os modelos em todas as configurações diferentes. Embora as configurações de arquitetura cruzada representem desafios significativos, a BinaryAI parece ser mais robusta para mudanças de arquitetura cruzada devido ao seu aprendizado de plataforma neutra em código. Ofuscação, especialmente nivelamento de fluxo de controle (-fla), principalmente e consistentemente prejudica a precisão do top 1. Encontramos muita engenharia reversa ao levantar o código binário para LLVM IR como entrada para bug de engenharia ncc. O booster binário RetDec lança uma exceção ao processar certos binários. Para este caso, apenas o top-1 de binários processados ​​com sucesso são medidos (binários compilados com clang -O3 têm cerca de 40% de casos restantes) Não conseguimos recuperar a alta precisão relatada no artigo asm2vec: enfatizamos que tanto a engenharia de software quanto as comunidades de segurança apontaram problemas semelhantes. Nossa avaliação mostra a precisão top-1 do asm2vec de 38,3%, embora menor do que a precisão relatada em sua taxa de papel, mas é altamente consistente com os resultados de estudos recentes [16], [68], [69].

insira a descrição da imagem aqui

Aprimoramento do modelo DNN

Para medir o aprimoramento dos métodos baseados em DNN usando o BinUSE, tentamos responder a duas perguntas: 1) RQ1: O BinUSE pode aprimorar diferentes ferramentas de pesquisa de função de código binário baseadas em DNN? RQ2, focamos em BinaryAI porque superou significativamente os outros três modelos. Além disso, além de aprimorar métodos baseados em dnn, também exploramos RQ3: BinaryAI é geral o suficiente para aprimorar ferramentas convencionais de diferenciação binária em nível de estrutura baseadas em programa para obter informações? RQ3, testamos uma ferramenta popular de diferenciação binária, FuncSimSearch[70], desenvolvida e mantida pelo Project Zero do Google.

insira a descrição da imagem aqui

RQ1. A Tabela 9 apresenta os resultados da avaliação em diferentes configurações. Medimos consistentemente os aprimoramentos top 1, top 3 e top 5. A Tabela 9 mostra que o uso do BinUSE pode melhorar significativamente todos os métodos baseados em DNN. Os modelos DNN geralmente começam com base em granulado , que não são resilientes a várias configurações desafiadoras e, portanto, geram alarmes falsos muito altos. BinUSE visa abordar suas principais limitações de maneira consistente.

insira a descrição da imagem aqui

RQ2. Para responder à RQ2, investigamos três hiperparâmetros principais para o aprendizado de representação relacionados à incorporação de dimensões vetoriais. Em geral, diferentes dimensões afetam principalmente a precisão do modelo: incorporações mais longas podem transmitir informações sutis sobre os dados de entrada, incorporações menores podem não ser capazes de representar a semântica bem. No entanto, vetores mais longos significam que o treinamento do modelo enfrenta mais desafios e pode potencialmente destruir a robustez do modelo. BinaryAI contém três hiperparâmetros relacionados às dimensões de incorporação, respectivamente dimensão de incorporação de token, dimensão de incorporação constante e dimensão de incorporação de gráfico. Tabela 10 relata isso para todos hiperparâmetros, apesar das diferentes dimensões de incorporação, BinUSE melhora consistentemente a precisão. No geral, esta avaliação revela que Uma observação intuitiva é feita: apesar das mudanças nas configurações do modelo, a verificação de equivalência é sempre capaz de resolver falsos alarmes altos, outro aspecto importante que mostra a generalização de BinUSE.

insira a descrição da imagem aqui

RQ3. Este estudo se concentra principalmente na pesquisa de função de código binário baseada em DNN, porque os métodos baseados em DNN exibem alta precisão e superam amplamente os algoritmos tradicionais baseados em estrutura de programa, como o isomorfismo gráfico [71] No entanto, é fácil ver que BinUSE não é limitado a aprimorar métodos baseados em dnn. Em princípio, argumentamos que a diferenciação binária baseada na estrutura do programa geralmente produz previsões de baixa discriminabilidade e baixa robustez. Nosso argumento é validado empiricamente por uma ferramenta avançada de diferenciação binária, FuncSimSearch, que calcula pontuações Simhash no fluxo de controle gráficos para determinar eficientemente a distância das funções de montagem. Os resultados da avaliação são mostrados na Tabela 11. Comparado com métodos contemporâneos baseados em dnn Comparado com FuncSimSearch, os resultados de FuncSimSearch são muito piores. Portanto, BinUSE pode melhorar a precisão de todas as configurações de avaliação para em grande medida. A precisão relativamente baixa do FuncSimSearch também é apontada no documento asm2vec. No geral,
as avaliações mostram consistentemente que o BinUSE pode melhorar os altos falsos alarmes produzidos por ferramentas populares baseadas em estrutura (DNN) de uma forma geral, eficiente e maneira única. Portanto, defendemos a combinação de pesquisa de código binário com BinUSE para obter efeitos sinérgicos no uso de produção.

Pesquisa de função vulnerável

Um estudo de caso é iniciado aplicando BinUSE para estender a tarefa de pesquisa de vulnerabilidade a um conjunto de dados de vulnerabilidade público. Este aplicativo simula um cenário de uso de segurança comum: dada uma função de montagem f de um fragmento executável suspeito, procuramos o banco de dados de função D com vulnerabilidades conhecidas, e determine se f pode corresponder a qualquer função em D. Nesta etapa, usamos quatro configurações de ofuscação -sub, -bcf, -fla e -hybrid, respectivamente, para converter f em D para Os exemplos são compilados em Dasm, um banco de dados de funções assembler. Observe que a configuração híbrida (chamada -hybrid) combina todos os três métodos de ofuscação durante a compilação. Também habilitamos a otimização completa -O3 ao compilar cada programa de exemplo e função de destino . Resumindo, dada uma função de montagem altamente otimizada (-O3) com uma vulnerabilidade conhecida, recuperamos sua função correspondente do Dasm e verificamos se sua correspondência correta, função com a mesma vulnerabilidade existe entre os 1 principais candidatos na função.

Nesta etapa, medimos asm2vec, BinaryAI e duas versões do PalmTree. Deixamos de avaliar o ncc porque descobrimos que o booster binário que ele emprega falha em muitos casos ao lidar com esses softwares complexos do mundo real. Relatamos na Tabela 12 , Os resultados da avaliação para cada configuração são relatados em 13, 14 e 15. asm2vec parece lutar contra OpenSSL e Wireshark porque ambos os programas são muito complexos. . Por exemplo, asm2vec classifica a vulnerabilidade Heartbleed no OpenSSL (ver) como uma correspondência verdadeira. Isso significa que um usuário pode precisar comparar manualmente pelo menos 17 cópias do programa em Dasm para confirmar a vulnerabilidade Heartbleed em uma entrada suspeita. Por outro lado , BinUSE pode corresponder com sucesso a entrada suspeita para a vulnerabilidade Heartbleed top 1 em Dasm. Asm2vec também é muito menos preciso ao analisar outro notório CVE ws-snmp. Descobrimos que a vulnerabilidade contém um CFG grande, o que pode impedir a incorporação de nível de gráfico do asm2vec cálculo baseado em passeio aleatório.Em resumo, com a ajuda de BinUSE, asm2vec pode colocar a função frágil real no top-1.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Resumindo, as avaliações nesta seção revelam resultados muito encorajadores ao usar o BinUSE para analisar aplicativos reais para fins de segurança.

Extensão do BinUSE

pés f_tftcom cada função f ∈ RP f \in RPfRP ainda é caro para comparar. Nesta seção, investigaremos possíveis extensões de BinUSE; nosso objetivo é reduzir o custo comparando preferencialmente as funções top-k retornadas pelo modelo DNN. Por exemplo k=100, uma vez que o modelo DNN Determinado com a função objetivoft f_tftCombinando as 100 principais funções, o BinUSE compara essas 100 funções de classificação com ft f_tftFaça comparações, reordene-os e ajuste seus rankings. Desta forma, as comparações do BinUSE são reduzidas do tamanho dos RPs para apenas 100, reduzindo o custo ao analisar programas dual utils. No entanto, como o BinUSE apenas acessa e reordena os rankings do modelo DNN para o primeiras 100 funções de montagem, a precisão aprimorada do top k (onde k = 100) é limitada pela precisão do top 100 do modelo DNN. Em outras palavras, se o modelo DNN de destino for menos preciso, mesmo top 100, a chance de realce Também muito pequeno.

insira a descrição da imagem aqui

Os aprimoramentos para BinaryAI e PalmTree são relatados na Tabela 17. Nesta tabela, avaliamos 12 configurações de comparação. Em comparação com BinaryAI, BinUSE aprimora o PalmTree em um grau mais alto. Isso se deve principalmente ao desempenho do PalmTree no caso de teste dual-utils A precisão of é relativamente baixo, deixando mais oportunidades de aprimoramento. Por outro lado, em comparação com a avaliação no conjunto de dados coreutils, o efeito de aprimoramento de BinUSE é baixo. Além da dificuldade geral de analisar a função binutils, para essa avaliação de tempo, BinUSE analisa apenas as primeiras 100 funções retornadas por ferramentas baseadas em dnn. De acordo com nossas observações, algumas correspondências reais não estão nem nas primeiras 100 funções. as 200 principais funções retornadas pelas ferramentas do dnn.

insira a descrição da imagem aqui

Resumir

Referências

[6] U. Alon, M. Zilberstein, O. Levy e E. Yahav, “Code2Vec: Learning distributed representações of code,” in Proc. Programa ACM. Lang., 2019, pp. 1–29.
[7] U. Alon, S. Brody, O. Levy e E. Yahav, “code2seq: Gerando sequências a partir de representações estruturadas de código”, 2018, arXiv:1808.01400.
[8] F. Zuo, X. Li, P. Young, L. Luo, Q. Zeng e Z. Zhang, "A tradução automática neural inspirou a comparação de similaridade de código binário além dos pares de funções", em Proc. Netw. Dist. Sist. Seguro. Symp., 2019.
[9] S. Eschweiler, K. Yakdan e E. Gerhards-Padilla, “discovRE: Efficient cross-arquitecture identification of bugs in binary code,” em Netw. Dist. Sist. Seguro. Simp., 2016.
[10] J. Gao, X. Yang, Y. Fu, Y. Jiang e J. Sun, “VulSeeker: Um buscador de vulnerabilidade baseado em aprendizado semântico para binário de plataforma cruzada”, em Proc. 33º ACM/IEEE Int. conf. Software automatizado Eng., 2018, pp. 896–899.
[11] S. Luan, D. Yang, K. Sen e S. Chandra, "Aroma: recomendação de código via pesquisa de código estrutural", 2018. [Online]. Disponível: http://arxiv.org/abs/1812.01158
[12] X. Xu, C. Liu, Q. Feng, H. Yin, L. Song e D. Song, “Neural network-based graph embedding for cross -platform detecção de similaridade de código binário”, em Proc. ACM SIGSAC Conf. Comput. Comum. Secur., 2017, pp. 363–376.
[13] T. Ben-Nun , AS Jakobovits e T. Hoefler, "Compreensão de código neural: uma representação que pode ser aprendida da semântica de código", em Proc. 32º Int. conf. Informação Neural Processo. Syst., 2018, pp. 3589–3601.
[14] SHH Ding, BCM Fung e P. Charland, “Asm2Vec: Aumentando a robustez da representação estática para pesquisa de clone binário contra ofuscação de código e otimização do compilador”, em Proc. IEEE Simp. Seguro. Privacidade, 2019, pp. 472–489.
[15] Z. Yu, R. Cao, Q. Tang, S. Nie, J. Huang e S. Wu, "A ordem importa: redes neurais semânticas para detecção de similaridade de código binário", em Proc. AAAI Conf. artif. Intell., 2020, pp. 1145–1152.
[16] Y. Duan, X. Li, J. Wang e H. Yin, “DEEPBINDIFF: Aprendendo representações de código em todo o programa para comparação binária”, em Proc. 27º ano. Netw. Dist. Sist. Seguro. Symp., 2020.
[17] B. Liu et al., “diff: Detecção de similaridade de código binário de versão cruzada com DNN”, em Proc. 33º IEEE/ACM Int. conf. Software automatizado Eng., 2018, pp. 667–678.
[18] X. Li, Q. Yu e H. Yin, “PalmTree: Learning an assembly language model for instruction embedding,” in Proc. ACM SIGSAC Conf. Comput. Comum. Secur., 2021, pp. 3236–3251
[35] CAR Hoare, “Como o software se tornou tão confiável sem provas?”, em Proc. Int. Simp. Formal Methods Eur., 1996, pp. 1–17.
[36] E. Gunnerson, "Defensive Programming", em A Programmer's Introduction to C#, Nova York, NY, EUA: Apress, 2001. [37] M. Stueben, "
Defensive Programming", em Good Habits for Great Coding, Novo York, NY, EUA: Apress, 2018.
[43] T. Bao, J. Burket, M. Woo, R. Turner e D. Brumley, “ByteWeight: Learning to reconheceu funções em código binário”, em Proc. 23º USENIX Secur. Symp., 2014, pp. 845–860.
[44] Fast Library Identification and Recognition Technology, 2021. [Online]. Disponível: https://www.hex-rays.com/products/ida/tech/flirt/
[45] ECR Shin, D. Song e R. Moazzezi, "Reconhecendo funções em binários com redes neurais", em Proc. 24ª USENIX Conf. Seguro. Symp., 2015, pp. 611–626.
[46] Y. Lin e D. Gao, “Quando a recuperação de assinatura de função encontra a otimização do compilador,” em Proc. IEEE Simp. Seguro. Privacidade, 2021, pp. 36–52.
[51] Y. Shoshitaishvili et al., “SOK: (Estado da) arte da guerra: Técnicas ofensivas em análise binária,” em Proc. IEEE Simp. Seguro. Privacidade, 2016, pp. 138–157.
[68] Y. Hu, H. Wang, Y. Zhang, B. Li e D. Gu, “Uma abordagem híbrida baseada em semântica na comparação de similaridade de código binário,” IEEE Trans. Softw. Eng., vol. 47, nº. 6, pp. 1241–1258, junho de 2021.
[69] J. Jiang et al., “Similaridade de binários entre níveis de otimização e ofuscação,” em Proc. EUR. Simp. Res. Comput. Secur., 2020, pp. 295–315.
[70] FunctionSimSearch, 2021. [Online]. Disponível: https://github.com/googleprojectzero/functionsimsearch
[71] H. Flake, "Comparação estrutural de objetos executáveis", em Proc. Int. GI Workshop Detection Intrusions Malware Vulnerability Assessment, 2004, pp. 161–174.

Percepções

Autores
(1) Aprimorar o efeito de treinamento do modelo DNN por meio de diferentes opções de otimização e programas binários confusos (semelhante ao artigo sobre liberação de energia (2
) O efeito de reprodução do ncc é muito menor do que o do artigo
(3) Refinamento devem ser considerados ao executar correspondência de função Informações de ponto de chamada
(4) Os últimos avanços na tecnologia de inteligência artificial explicável (XAI) foram capazes de identificar os códigos mais influentes na tomada de decisão do modelo DNN. Portanto, a tecnologia XAI é usada para marcar o influente fragmentos de código c1 e c2, que são os principais responsáveis ​​pelo modelo DNN A decisão de corresponder às funções de montagem f1 e f2. BinUSE pode então ser iniciado no c1 e c2 marcados para verificar sua equivalência semântica. Fragmentos de código influentes podem reduzir o custo de inspeção, mas o desafio é como distinguir os fragmentos de código influentes Limites e restrições de caminho para manter fragmentos de código.

Mina
(1) Para experimentos de trabalho de arquitetura única, os testes de arquitetura cruzada podem ser abandonados. Por exemplo, palmtree conduz apenas experimentos em x86
(2) Exemplos de falhas de atualização retdec podem ser descartados e apenas amostras bem-sucedidas são mantidas para experimentos
(3 ) Usar o mecanismo de auto-atenção para identificar fragmentos de código de alto impacto para ajustar automaticamente pesos computacionais para incorporação de código?

Acho que você gosta

Origin blog.csdn.net/qq_33976344/article/details/129052358
Recomendado
Clasificación