o Que é a Injeção de Código e Como Você Pode Evitá-Lo
Injeção de Código de vulnerabilidades é um termo geral que descreve as vulnerabilidades que podem ser exploradas por um atacante para injetar e executar código mal-intencionado.
esta vulnerabilidade ocorre normalmente devido à falta de validação de dados não confiáveis. Aplicações que avaliam diretamente o código sem validá-lo primeiro seriam vulneráveis a este tipo de ataque.
injeção de Código às vezes é confundida com outras vulnerabilidades, como E Injeção de comando. Deve-se notar que a injeção de código é um tipo diferente de vulnerabilidade, em que um atacante está injetando código em vez de comandos do Sistema Operacional. Isto significa que no que diz respeito a vulnerabilidades de injeção de código, o atacante é limitado pela funcionalidade de linguagem da aplicação.
limitações do atacante
ao explorar tais vulnerabilidades, os atacantes são limitados pela funcionalidade da linguagem da aplicação (como PHP / Python). No entanto, na maioria dos casos, o atacante pode ser capaz de alavancar a funcionalidade do intérprete para a transição de injeção de código para injeção de comando.
por exemplo, se um atacante injeta o código PHP em uma aplicação web, o atacante seria limitado pela funcionalidade disponível pelo interpretador PHP. Quando o ataque de injeção ocorre, o interpretador PHP executaria o código injetado e dependeria da funcionalidade do interpretador, um atacante poderia alavancar funções de execução de programas que estão disponíveis no PHP, como system() ou shell_exec, a fim de executar comandos do sistema.
O Impacto de uma Injeção de Código
O impacto que um ataque bem-sucedido poderia ter pode variar dependendo de diversos fatores, tais como o idioma utilizado pela aplicação, a funcionalidade disponível pelo aplicativo, etc.
no entanto, na maioria dos casos, um ataque bem sucedido poderia comprometer completamente a confidencialidade, integridade e Disponibilidade da aplicação e seus dados.
exemplo
Imagine uma aplicação web que passa dados não confiáveis, como a entrada do Usuário para uma função PHP eval (). A função eval () simplesmente avalia uma string como código PHP, desde que tenha uma sintaxe PHP válida e termina com um ponto-e-vírgula.
<?PHP
$backup = “”;
$input = $_GET;
eval (“\$backup = \$input;”);
?>
uma vez que a aplicação passa a entrada do utilizador para a perigosa função eval() PHP e não há validação a ser realizada, a aplicação seria vulnerável a ataques de injeção de código.
um atacante poderia explorar esta fraqueza fornecendo a entrada 1; phpinfo (); como mostrado abaixo:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo ();
Execute os comandos do sistema operacional
depois de verificar a vulnerabilidade, um atacante poderia prosseguir com a execução de comandos do sistema, alavancando as funções do interpretador que permitem a execução de comandos. Neste caso, a função system() é usada.
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; system (‘whoami’);
the whoami command prints the username of the current user when invocadas. Isto significa que quando a aplicação
passa a entrada do Usuário para a função eval (), o interpretador de PHP executaria o comando whoami no sistema operacional subjacente
.
uma vez que o atacante pode executar comandos do sistema, eles poderiam prosseguir com a obtenção de uma shell interativa no vulnerável sistema
e realizar outros ataques contra outros sistemas dentro da rede interna do sistema comprometido.
prevenção
independentemente da língua utilizada, as vulnerabilidades de injeção de Código podem ser evitadas seguindo as melhores práticas
descritas abaixo:
- evitar avaliar dados não fiáveis
◦ a menos que seja estritamente necessário, não avalie diretamente dados não confiáveis usando funções inseguras como eval(). * Tratar todos os dados como não confiáveis
◦ Note que os dados não confiáveis não se referem apenas às entradas fornecidas através de formulários HTML. Informações que são controladas por usuários como cookies, cabeçalhos de pedidos HTTP e arquivos enviados devem ser tratados como não confiáveis.
- Validato dados não fiáveis
◦ validar sempre a entrada do utilizador do lado do servidor.
◦ Se o usuário é suposto para enviar a entrada em um formato específico, tais como, data, código postal, números, e-mail
endereço, etc., certifique-se de que a entrada do usuário corresponde ao formato esperado.
◦ se a aplicação espera um valor dentro de um conjunto limitado de opções, siga uma abordagem whitelist e garantir que
a entrada submetida é uma das opções permitidas.
- endureça o intérprete
◦ por exemplo, a funcionalidade do interpretador de PHP deve ser limitada à funcionalidade mínima que é necessária para que a aplicação funcione. Isto pode tornar muito mais difícil para os atacantes executar comandos do sistema. Por exemplo, as funções de execução de programa PHP poderiam ser desativadas modificando o php.ficheiro ini.
- análise estática
◦ realizar atividades de análise estática para identificar vulnerabilidades relacionadas com a avaliação insegura.
- vapor
◦ realizar atividades regulares de Avaliação da Vulnerabilidade e de testes de penetração para identificar e atenuar essas deficiências.