Pular para o conteúdo principal

Questão de Segurança da Informação — Ataques e ameaças — FGV 2024

Segurança da InformaçãoAtaques e ameaças
Código
fg085347
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Júnior I - Ambientes Críticos de Tecnologia da Informação em Centro de Dados
O fragmento de código a seguir recebe o nome de um arquivo como parâmetro da linha de comando e mostra o seu conteúdo ao usuário. O script é configurado com setuid root, pois visa servir como uma ferramenta educacional para permitir que administradores de sistemas em treinamento examinem arquivos privilegiados do sistema, sem conceder-lhes a capacidade de alterá-los ou causar danos ao sistema.Imagem associada para resolução da questãoDado que o programa opera com privilégios de administrador, a função system() é igualmente executada com tais privilégios. Quando um usuário fornece um nome de arquivo padrão, a chamada funciona como esperado. Contudo, se um invasor inserir uma string como ";rm -rf /", a chamada system() falhará ao tentar executar o comando "cat" por falta de argumentos, resultando na tentativa subsequente de
  1. Aexcluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Denial of Service.
  2. Bexcluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Command Injection.
  3. Ccopiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Direct Dynamic Code Evaluation.
  4. Dcopiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Code Injection.
  5. Eexcluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Man-in-the-middle.
Revelar gabarito e comentário

GabaritoB — excluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Command Injection.

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”.

Segurança de Sistemas: Vulnerabilidades de Injeção de Comando

Gabarito: letra B. O código apresentado é vulnerável a Command Injection (Injeção de Comando) porque concatena diretamente a entrada do usuário (argv[1]) a uma string de comando executada pela função system(). Ao inserir ;rm -rf /, o atacante encerra o comando original (cat) e instrui o sistema operacional a executar um novo comando malicioso com os privilégios de root do programa, resultando na exclusão recursiva de arquivos.

  1. 1Entrada maliciosaInserção de ;rm -rf /
  2. 2Concatenaçãosystem("cat " + entrada)
  3. 3Quebra do comandocat falha (sem argumento)
  4. 4Execução do payloadrm -rf / com privilégios root
  5. 5ConsequênciaExclusão recursiva de arquivos
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Embora descreva corretamente a ação maliciosa (excluir arquivos), classifica erroneamente o ataque como Denial of Service (DoS). O DoS visa indisponibilizar um serviço, enquanto a injeção de comandos maliciosos arbitrários configura, primariamente, uma falha de injeção de código/comando.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta alternativa identifica corretamente a natureza da vulnerabilidade (Command Injection) e a consequência da carga útil (payload) inserida pelo atacante. O uso do caractere ; no shell permite o encadeamento de comandos, permitindo que o atacante execute instruções não previstas pelo desenvolvedor com privilégios elevados.

Alternativa C — ❌ Incorreta

O comando rm -rf não realiza cópia de arquivos, mas sim a sua remoção. Além disso, o termo Direct Dynamic Code Evaluation refere-se a vulnerabilidades onde o atacante injeta código na linguagem de programação (como eval() em PHP ou Python), e não comandos de sistema operacional via shell.

Alternativa D — ❌ Incorreta

Novamente, o comando rm -rf não copia arquivos. O termo Code Injection é um conceito mais amplo, mas, no contexto de chamadas de sistema via system(), a terminologia técnica precisa é Command Injection.

Alternativa E — ❌ Incorreta

Ataque Man-in-the-middle (MitM) envolve a interceptação de comunicações entre duas partes, o que não guarda relação com a execução de comandos locais maliciosos via injeção de entrada em um script privilegiado.

NÃO CAIA NESSA!

A banca testa a capacidade de distinguir entre o objetivo do ataque (excluir arquivos) e a classificação técnica da vulnerabilidade. O candidato pode ser tentado a marcar DoS (letra A) por ser uma consequência óbvia da destruição do sistema, mas a falha de segurança que permite isso é a injeção de comandos.

PEGA ESSA DICA!

Sempre que encontrar funções como system(), exec(), ou popen() em C que concatenam entradas de usuário sem sanitização, identifique imediatamente o risco de Command Injection. O uso de setuid root torna essa falha crítica, pois o comando injetado herdará privilégios totais de administrador.

Link permanente: /questoes/fg085347