O que é uma injeção de comando do sistema operacional?

O que é uma injeção de comando do sistema operacional?

Os ataques de injeção são uma das formas mais comuns de os hackers atacarem os sistemas porque permite que eles executem facilmente muitos comandos e códigos. A injeção de comandos do sistema operacional é um desses ataques de injeção que você precisa conhecer. Isso explora uma vulnerabilidade que os administradores de sistema, banco de dados e aplicativos da Web devem levar muito a sério.

Então, o que é um ataque de injeção de comando do sistema operacional?

Definição de Injeção de Comando do SO

A injeção de comandos do sistema operacional permite que um invasor mal-intencionado execute qualquer comando que desejar, explorando um sistema operacional, programa, aplicativo, banco de dados ou plug-in vulnerável. Isso acontece quando os aplicativos falham em validar e higienizar adequadamente os parâmetros que usam ao chamar funções de shell como system() ou exec() para executar comandos do sistema.

Para entender melhor a detecção e exploração da injeção de comandos do sistema operacional, é útil examinar esse problema em três categorias principais.

1. Injeção de Comando Direto

Considere isso da perspectiva do invasor. O ciberataque descobre que um aplicativo está executando um comando específico do sistema; eles inserem o comando malicioso como parte dos argumentos esperados. O aplicativo então executa o comando original seguido pelo malicioso.

O invasor emprega uma variedade de abordagens para encontrar essa vulnerabilidade. O método mais fácil de combater isso é manter o sistema operacional sempre atualizado; você pode fazer isso em colaboração com uma equipe de TI competente. Você deve evitar todos os aplicativos e programas que possam causar vulnerabilidades do sistema porque o invasor pode inserir código diretamente e o dano é imprevisível.

2. Injeção de Comando Indireto

códigos programando pc

No caso de injeção de comando indireto, o invasor não insere diretamente um código ou comando no sistema. Para isso, utilizam um aplicativo ou programa vulnerável no sistema. A vulnerabilidade cria uma ponte entre o invasor e o sistema operacional. Aproveitando essa comunicação, o invasor visa executar códigos e comandos maliciosos no alvo.

O invasor executa uma série de testes para identificar essa vulnerabilidade e descobre que o software usa dados de uma fonte externa, como um arquivo ou uma variável de ambiente, para chamar um comando do sistema. O invasor então modifica o conteúdo da fonte externa, de modo que agora contém um comando malicioso. Isso é executado juntamente com as instruções do aplicativo original.

A principal diferença entre injeção direta e indireta de comandos é que o invasor usa um aplicativo para se comunicar com o sistema operacional. Mas não há diferença real entre os danos que as duas formas de injeção podem causar, então ambas precisam ser tratadas. É por isso que você deve se certificar de que os programas em sua rede são confiáveis ​​e necessários. Não mantenha aplicativos nos quais você não confia em seu dispositivo.

3. Injeção de comando cego

Outro tipo de injeção de comando do sistema operacional é a injeção de comando cega. Isso significa que o aplicativo não retorna nenhuma saída do comando na resposta HTTP. O invasor usa técnicas diferentes, como atraso de tempo e roteamento de saída, para explorar essa vulnerabilidade.

Imagine que você está procurando por um site e o valor “/?search=id” no URL muda a cada pesquisa. O valor id aqui pode ser uma página de usuário, o endereço de uma foto do produto ou qualquer página do site. O invasor pode obter resultados diferentes alterando o valor do id. É difícil fazer isso manualmente, mas existem ferramentas como o Burp Suite para isso. Mais tarde, o invasor descobre uma estranheza em uma página: pode ser retornado um valor de id que, embora não tenha mostrado nenhum resultado, a resposta do site foi 200, o que indica que está tudo bem. Nesse caso, o invasor pode usar uma injeção de comando cega.

Uma técnica como um atraso de tempo é especialmente útil. Como a página que se abre estará em branco, você não receberá nenhuma resposta, mas ainda poderá coletar informações sobre o que está armazenado em um banco de dados com base em atrasos de tempo que só carregam a página se um determinado caractere estiver presente. Isso é muito demorado para ser um processo manual, mas muitas ferramentas podem automatizar o ataque.

Um exemplo de cenário de ataque

exemplo de ataque de programação de código

Vamos revisar todos os itens acima por meio de um exemplo. Imagine que você tem um aplicativo de compras que permite ao usuário ver se há produtos em estoque. Vamos usar uma URL como a abaixo para acessar todas essas informações:

example_unsafe_store.com/stockStatus?productID=245&storeID=

Imagine passar os IDs do produto e da loja como argumentos para um comando shell, como “stockstat.pl 245 38”, já que o aplicativo teria que consultar registros antigos. Se o desenvolvedor não tomar nenhuma ação contra injeções de comando, um invasor pode enviar uma entrada para executar o comando desejado:

& echo this_a_harmful_command &

Se esta entrada for no parâmetro productID, o comando executado pela aplicação será:

stockstat.pl & echo this_a_harmful_command & 38

O comando echo é um método útil para detectar injeções de comando, bem como garantir que a string fornecida apareça na saída. O caractere “&” é um separador de comando shell, então o que é executado são três comandos separados, um após o outro. Como resultado, a saída retornada ao usuário será:

Error -productID not found
this_a_harmful_command
38: command not found

Aqui, o arquivo “stockstat.pl” executou o comando sem os argumentos esperados e, portanto, retornou uma mensagem de erro. Em seguida, o comando echo injetado pelo invasor foi executado e o invasor viu a expressão que ele inseriu na tela. O argumento original, “38”, funcionou como um comando causador de erro.

Como se proteger contra injeções de comandos do sistema operacional

Embora a injeção de comando seja um vetor de ataque poderoso e prejudicial, existem alguns truques para evitá-la. A lógica por trás dos ataques de injeção de comandos do sistema operacional é executar determinados comandos do sistema operacional usando um aplicativo. Você precisa impedir que isso aconteça. Há algumas questões a considerar:

  1. Você deve impedir que qualquer pessoa com acesso ao aplicativo possa executar o código.
  2. Você deve impedir que qualquer pessoa com acesso ao aplicativo faça solicitações ao servidor com expressões sintáticas.
  3. Você deve criptografar as frases que qualquer pessoa com acesso fizer solicitações.

Vamos passar por cada item um por um. Uma boa solução para o primeiro problema é usar o método whitelist para impedir que qualquer pessoa que chegue à camada de aplicativo execute determinados códigos ou solicitações. Qualquer pessoa que você não identificar não poderá executar o código.

A solução para o segundo é não aceitar algumas expressões de texto usadas em comandos. O usuário só pode inserir valores numéricos. Aplique isso junto com o método de lista branca e você terá um sistema muito mais seguro.

O terceiro item é sobre a criptografia de parâmetros sintáticos, como o caractere inserido e os espaços. Como resultado, o método de lista branca, a verificação sintática de entradas e a criptografia de entradas devem protegê-lo da injeção de comandos do sistema operacional.

Os ataques de injeção evoluem todos os dias

Existem muitos métodos de injeção com diferentes técnicas de ataque, como comando do SO, SQL, SSI e XPath. Não é fácil tentar impedir cada um deles. Lembre-se de que todos esses ataques evoluem todos os dias e aproveitam pequenas vulnerabilidades que os desenvolvedores ignoraram. É por isso que é vital que você esteja sempre atualizado e acompanhe de perto os desenvolvimentos atuais no mundo da segurança cibernética.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *