Questão de Segurança da Informação — Ataques e ameaças — FGV 2024
Segurança da Informação›Ataques 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.Dado 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
Aexcluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Denial of Service.
Bexcluir recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Command Injection.
Ccopiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Direct Dynamic Code Evaluation.
Dcopiar recursivamente todo o conteúdo da partição raiz, configurando um ataque do tipo Code Injection.
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.
1Entrada maliciosaInserção de ;rm -rf /
2Concatenaçãosystem("cat " + entrada)
3Quebra do comandocat falha (sem argumento)
4Execução do payloadrm -rf / com privilégios root
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.