Pular para o conteúdo principal

Questão de Segurança da Informação — Análise de Código Malicioso — CESPE / CEBRASPE 2025

Segurança da InformaçãoAnálise de Código Malicioso
Código
ce418203
Banca
CESPE / CEBRASPE
Órgão
PF
Ano
2025
Cargo
PCF

A fim de identificar vulnerabilidades e entender o algoritmo criptográfico, foi realizada a análise de um firmware embarcado proprietário, compilado para uma arquitetura customizada RISC com instruções não padrão (ISA extension), que implementa rotinas criptográficas e anti-depuração avançadas, incluindo anti-tampering e control flow flattening, além de otimizações de compilador de tempo de ligação.


A partir da situação hipotética precedente, julgue o item que se segue.


O control flow flattening implementado no firmware pode ser eficientemente revertido por meio de técnicas de análise estática de descompiladores que utilizam algoritmos de reconhecimento de padrões baseados em grafos de fluxo de controle, restaurando o fluxo de execução original sem a necessidade de taint analysis ou execução simbólica.

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Control Flow Flattening e Análise de Código Malicioso

❌ ERRADO. O item está incorreto: o control flow flattening (achatamento do fluxo de controle) é uma técnica de ofuscação que não pode ser revertida de forma eficiente apenas com análise estática baseada em reconhecimento de padrões em grafos de fluxo de controle. A restauração do fluxo original, em firmware com ISA customizada e anti-depuração, exige técnicas complementares como taint analysis e execução simbólica, que o próprio enunciado descarta.

O control flow flattening é uma técnica de ofuscação de código que transforma a estrutura de controle do programa, substituindo os blocos básicos e seus desvios condicionais por uma estrutura achatada, onde todos os blocos são organizados em um grande switch ou dispatcher central. Em vez de um grafo de fluxo de controle (CFG) com ramificações naturais, o código passa a ter um fluxo linearizado, onde cada bloco é alcançado por meio de um dispatcher que decide o próximo bloco a executar com base em uma variável de estado. Essa variável é frequentemente modificada por operações opacas ou por cálculos que dependem de valores em tempo de execução, o que torna a análise estática pura extremamente difícil.

A afirmação do item sugere que descompiladores com reconhecimento de padrões em CFG seriam suficientes para reverter essa ofuscação. Isso é incorreto por várias razões. Primeiro, o control flow flattening remove a estrutura original do CFG, substituindo-a por uma estrutura artificial e uniforme. O reconhecimento de padrões, que se baseia em identificar estruturas de controle comuns (como loops e condicionais), perde sua eficácia porque essas estruturas não existem mais de forma explícita. Segundo, a variável de estado que controla o dispatcher é frequentemente calculada de forma opaca, ou seja, seu valor não é determinável estaticamente sem executar o código ou realizar análise de fluxo de dados sofisticada. Terceiro, o firmware em questão é compilado para uma arquitetura RISC customizada com ISA estendida, o que significa que as instruções não são padrão e os descompiladores precisam ser adaptados para entender essa ISA específica, o que adiciona uma camada extra de complexidade.

Para reverter o control flow flattening de forma eficiente, é necessário combinar múltiplas técnicas. A execução simbólica é uma das principais, pois permite explorar os caminhos de execução do programa sem executá-lo de fato, tratando as entradas como símbolos e resolvendo as condições que determinam o fluxo. A taint analysis (análise de fluxo de dados) é outra técnica crucial, pois permite rastrear como os dados sensíveis (como a variável de estado) fluem pelo programa, ajudando a reconstruir as dependências entre os blocos. Além disso, a análise dinâmica, com o uso de debuggers e emuladores, pode ser necessária para observar o comportamento do código em tempo de execução, especialmente quando há anti-depuração e anti-tampering. O próprio material de apoio destaca que a análise estática tem limitações e que a análise dinâmica é frequentemente necessária para entender o comportamento de malwares, especialmente quando há ofuscação.

A pegadinha da banca está em afirmar que a análise estática por reconhecimento de padrões seria suficiente e eficiente para reverter o control flow flattening, sem a necessidade de taint analysis ou execução simbólica. Isso é uma simplificação incorreta da realidade. A ofuscação por control flow flattening é projetada exatamente para dificultar a análise estática, e sua reversão eficiente exige uma combinação de técnicas, incluindo as dinâmicas e as simbólicas. O item, portanto, está errado.

1O que é
Achata o fluxo de controle
Blocos ligados por dispatcher
Variável de estado opaca
2Efeito
Remove estrutura original do CFG
Dificulta análise estática
3Reversão eficiente
Só reconhecimento de padrões em CFG
Exige execução simbólica
Exige taint analysis
Análise dinâmica (debugger/emulador)
Control flow flattening
LEVELsoulevel.com.br
Control flow flattening: O que é (Achata o fluxo de controle, Blocos ligados por dispatcher, Variável de estado opaca); Efeito (Remove estrutura original do CFG, Dificulta análise estática); Reversão eficiente (Só reconhecimento de padrões em CFG, Exige execução simbólica, Exige taint analysis, Análise dinâmica (debugger/emulador))
NÃO CAIA NESSA!

A banca tenta fazer o candidato acreditar que a análise estática por reconhecimento de padrões é uma solução mágica para reverter ofuscações complexas. Na prática, o control flow flattening é uma técnica de ofuscação que resiste à análise estática pura, e sua reversão eficiente exige técnicas como execução simbólica e taint analysis. O candidato que conhece as limitações da análise estática e a finalidade das técnicas de ofuscação não cai nessa armadilha.

Gabarito: letra E (Errado).

Link permanente: /questoes/ce418203