O que é um código de shell?

Shellcode é uma sequência de código de máquina, ou instruções executáveis, que é injetada na memória do computador com a intenção de assumir o controle de um programa em execução. Nesse ataque, uma das etapas é obter o controle do contador de programa, que identifica a próxima instrução a ser executada. O fluxo do programa pode ser redirecionado para o código inserido. O código de máquina intrusivo é chamado de carga útil do ataque e é o elemento comumente referido pelo termo código de shell. Esse método costuma ser usado para conceder acesso ao invasor abrindo um shell de comando do sistema operacional, de modo que os ataques de injeção de código em geral passaram a ser conhecidos como shellcode.

A vulnerabilidade que está sendo explorada geralmente envolve como um programa atribui memória, verifica a validade dos dados de entrada e lida com erros de memória. Os desenvolvedores de software geralmente podem evitar essa ameaça definindo estritamente os dados de entrada e rejeitando valores impróprios. Se desmarcada, valores que precisem de mais espaço de armazenamento do que a memória alocada para esse valor podem ser aceitos. Isso causa uma culatra de segurança chamada estouro de buffer, onde parte dos dados é gravada em locais de memória adjacentes ao espaço atribuído ao valor. Quando cuidadosamente manipulada, essa anomalia pode permitir a introdução de código intrusivo.

O código de shell normalmente é escrito em uma linguagem de programação com acesso ao sistema de baixo nível, como assembly, C ou C ++. Dependendo da vulnerabilidade de destino, no entanto, o mesmo resultado pode ser alcançado inserindo código para uma linguagem de script interpretada, como PERL, ou bytecode para uma máquina virtual, como JAVA. O código pode ser implantado antes, durante ou após o seqüestro do contador do programa. Assim, o código intrusivo pode estar contido em um arquivo na máquina de destino ou transmitido por uma conexão de rede em tempo real.

As explorações locais de código de shell são projetadas para dar ao invasor controle sobre uma máquina à qual ele tem acesso físico. Um objetivo nesse caso pode ser criar uma conta com privilégios de administrador, por exemplo. Da mesma forma, se um processo em execução tiver um alto nível de privilégio, uma exploração bem-sucedida concederia temporariamente o mesmo nível de acesso ao invasor.

Os processos em execução em uma máquina remota podem ser explorados usando protocolos de rede padrão para se comunicar com o computador de destino. O código de shell de conexão traseira instrui a máquina de destino a iniciar uma conexão com o computador do invasor. Se o invasor iniciar a conexão, o código será chamado de shellshell, pois tentará controlar uma conexão de rede chamada porta na máquina remota. O método de conexão traseira é mais amplamente usado, pois os firewalls raramente proíbem as conexões de saída.

OUTRAS LÍNGUAS

Este artigo foi útil? Obrigado pelo feedback Obrigado pelo feedback

Como podemos ajudar? Como podemos ajudar?