Este tópico descreve os tipos de ataques presentes nas estatísticas de ataque e apresenta as soluções correspondentes.
Visão geral
A tabela a seguir lista todos os tipos de ataques e suas categorias.
|
Categoria |
Tipo de ataque |
|
Ataques de injeção |
Injeção JNDI, injeção SQL, injeção de comando, XXE, XSS, injeção EL, injeção de engine, inclusão de arquivo JSTL |
|
Desserialização e carregamento de classes |
Ataque de desserialização, carregamento malicioso de classes, vinculação maliciosa de beans |
|
Técnicas de bypass de RASP |
Injeção JNI, chamadas maliciosas de reflection, injeção de thread, Attach API maliciosa |
|
Ataques ao sistema de arquivos |
Leitura arbitrária de arquivos, leitura e gravação maliciosa de arquivos, upload malicioso de arquivos, exclusão arbitrária de arquivos, travessia de diretórios |
|
Ataques baseados em rede |
SSRF, consulta DNS maliciosa, uso de protocolos inseguros |
|
Técnicas de persistência |
Injeção de memory horse |
|
Ataques a credenciais |
Senha fraca de banco de dados |
Ataques de injeção
Injeção JNDI
Descrição
A injeção de Java Naming and Directory Interface (JNDI) ocorre quando uma aplicação realiza uma consulta JNDI usando uma URL controlada por um invasor. O invasor direciona o servidor para consultar um endpoint malicioso, fazendo com que o servidor carregue classes maliciosas e permitindo a execução de código arbitrário.
Solução
Se a vulnerabilidade tiver origem em um componente de terceiros, atualize-o para a versão corrigida mais recente.
Se a vulnerabilidade estiver em código de consulta JNDI desenvolvido internamente, restrinja as URLs de consulta e proíba consultas por protocolos inseguros.
Injeção SQL
Descrição
A injeção SQL acontece quando um invasor insere instruções SQL maliciosas em strings de consulta de requisições web ou em campos de formulário. O servidor executa essas instruções injetadas, permitindo que o invasor acesse dados no banco de dados.
Solução
Esse tipo de ataque é causado pela concatenação de strings nas instruções SQL. Utilize consultas parametrizadas (prepared statements) para pré-compilar os parâmetros de entrada. Quando consultas parametrizadas não forem viáveis, aplique validação por lista de permissões ou lista de bloqueios para restringir os parâmetros concatenados.
Injeção de comando
Descrição
A injeção de comando é uma vulnerabilidade que permite a execução de comandos de sistema arbitrários no servidor. Na maioria dos casos, ela resulta da presença de web shells ou de código inseguro no lado do servidor que repassa entradas do usuário para funções de comando do sistema.
Solução
Identifique o local onde os comandos são executados:
Exclua imediatamente o web shell se ele for a causa da execução de comandos.
Aplique restrições por lista de permissões para limitar os comandos executáveis quando a execução fizer parte de uma funcionalidade legítima do servidor.
XXE
Descrição
A injeção de XML External Entity (XXE) ocorre quando um parser XML processa um documento que referencia entidades externas. Um invasor pode criar conteúdo XML malicioso para realizar leituras arbitrárias de arquivos, injeção de comandos ou ataques à rede interna.
Solução
Verifique se sua aplicação precisa resolver entidades externas ao analisar documentos XML. Desative-as na configuração do parser XML caso não sejam necessárias.
XSS
Descrição
O Cross-site scripting (XSS) acontece quando um invasor injeta scripts maliciosos em um site. Esses scripts são executados nos navegadores dos usuários que acessam as páginas afetadas.
Solução
Assim como nos ataques de injeção HTML, o XSS permite que invasores insiram código HTML nas páginas web. Para proteger sua aplicação contra ataques XSS, aplique validação rigorosa de entrada e codificação de saída:
Filtre os dados de entrada. Verifique a presença dos seguintes caracteres e padrões:
',",<,>,on*,scripteiframe. Valide todas as fontes de entrada do usuário, incluindo campos de formulário, valores de cookies e cabeçalhos de requisição HTTP.Valide as propriedades dos dados. Confira o tipo, formato, comprimento, intervalo e conteúdo de todos os dados de entrada.
Adote defesa em profundidade. Execute validação e filtragem de entrada tanto no lado do cliente quanto no lado do servidor.
Codifique os dados de saída. Converta os dados de entrada em representações seguras, como entidades HTML ou JavaScript com escape, antes de renderizá-los nas páginas web. Um valor armazenado no banco de dados pode ser exibido várias vezes no site. Mesmo que os valores de entrada tenham sido codificados no momento do armazenamento, valide e codifique todos os valores de saída antes da exibição.
Injeção de Expression Language (EL)
Descrição
As expression languages oferecem recursos de tempo de execução, como consultas de dados e processamento dinâmico. Muitas delas também suportam operações avançadas, incluindo invocação de métodos Java. Se o conteúdo da expressão não for restrito, um invasor poderá modificá-la para executar código arbitrário.
Solução
Restrinja rigorosamente o conteúdo das expressões e desative chamadas de funções Java.
Se a vulnerabilidade tiver origem em um componente de terceiros, atualize-o para a versão corrigida mais recente.
Injeção de engine
Descrição
O Java suporta diversas engines de JavaScript de terceiros (como Rhino e Nashorn) e engines de templates (como Apache Velocity e FreeMarker). Essas engines geralmente fornecem recursos avançados, incluindo invocação de métodos Java. Caso a entrada da engine não seja restrita, um invasor pode injetar conteúdo malicioso que será executado pela engine, resultando em execução arbitrária de código.
Solução
Restrinja rigorosamente o conteúdo passado para as engines de script e de templates. Desative chamadas de funções Java dentro dos contextos dessas engines.
Se a vulnerabilidade originar-se de um componente de terceiros, atualize-o para a versão corrigida mais recente.
Inclusão de arquivo JSTL
Descrição
A JavaServer Pages Standard Tag Library (JSTL) é um conjunto de tags JSP que encapsulam funcionalidades centrais comuns das aplicações JSP. Se um parâmetro controlável pelo usuário for concatenado diretamente em uma expressão JSTL sem validação de entrada, um invasor poderá criar um payload malicioso que leve à leitura arbitrária de arquivos ou a Server-Side Request Forgery (SSRF).
Solução
Evite concatenar diretamente parâmetros controláveis pelo usuário em expressões JSTL. Caso a concatenação seja necessária, aplique validação rigorosa por lista de permissões aos valores dos parâmetros.
Desserialização e carregamento de classes
Ataque de desserialização
Descrição
A desserialização Java restaura uma sequência de bytes em um objeto Java. Se o objeto desserializado contiver código explorável, um invasor poderá manipular as variáveis membro do objeto para executar operações maliciosas durante o processo de desserialização.
Solução
Atualize os componentes vulneráveis para as versões corrigidas mais recentes.
Desative temporariamente a funcionalidade de desserialização afetada caso não haja uma versão corrigida disponível.
Carregamento malicioso de classes
Descrição
Explorações de dia zero e web shells dependem do carregamento de classes Java maliciosas. Quando uma classe maliciosa é carregada, o invasor pode inicializá-la para obter permissões de execução de código e realizar outras operações maliciosas.
Solução
Exclua imediatamente o web shell se a classe maliciosa tiver sido carregada por meio dele.
Se o carregamento da classe maliciosa tiver ocorrido devido a uma vulnerabilidade no framework, atualize-o para a versão corrigida mais recente.
Vinculação maliciosa de beans
Descrição
Alguns frameworks Java suportam vinculação automática de propriedades de beans em tempo de execução. Se os tipos de propriedades de beans que podem ser vinculadas não forem restritos, um invasor poderá modificar os valores de propriedades sensíveis para interromper o comportamento da aplicação ou executar código arbitrário.
Solução
Restrinja os tipos de propriedades de beans passíveis de vinculação. Impeça a modificação de propriedades sensíveis, como
classe propriedades do class loader.Se a vulnerabilidade tiver origem em um componente de terceiros, atualize-o para a versão corrigida mais recente.
Técnicas de bypass de RASP
Injeção JNI
Descrição
A injeção de Java Native Interface (JNI) é uma técnica comum usada para burlar o Runtime Application Self-Protection (RASP). Após obter permissões de execução de código, o invasor pode usar funções JNI para invocar bibliotecas de vínculo dinâmico externas maliciosas. Isso contorna as proteções de segurança da camada Java e oculta comportamentos maliciosos.
Solução
Seu servidor pode ter uma vulnerabilidade de execução de código. Identifique a origem da vulnerabilidade e restrinja as permissões de execução de código.
Chamadas maliciosas de reflection
Descrição
O módulo de autoproteção do RASP impede que invasores usem reflection do Java para modificar dados internos do RASP em tempo de execução.
Solução
Seu servidor pode ter uma vulnerabilidade de execução de código. Identifique a origem da vulnerabilidade e restrinja as permissões de execução de código.
Injeção de thread
Descrição
A injeção de thread é uma técnica comum para burlar o RASP. Depois de obter permissões de execução de código, o invasor pode criar uma nova thread para escapar do contexto de execução monitorado pelo RASP, o que reduz a capacidade de defesa do RASP.
Solução
Seu servidor pode ter uma vulnerabilidade de execução de código. Identifique a origem da vulnerabilidade e restrinja as permissões de execução de código.
Attach API maliciosa
Descrição
A Attach API é uma tecnologia Java que permite a modificação dinâmica do bytecode de aplicações em execução. Invasores podem usar essa tecnologia para injetar memory horses do tipo agente. Esse método de ataque é altamente dissimulado.
Solução
Seu servidor pode ter uma vulnerabilidade de execução de código. Identifique a origem da vulnerabilidade e restrinja as permissões de execução de código.
Ataques ao sistema de arquivos
Leitura arbitrária de arquivos
Descrição
Se o recurso de download ou leitura de arquivos de um site permitir o acesso a arquivos por caminho absoluto ou por travessia de diretórios, um invasor poderá explorar essa vulnerabilidade para ler arquivos sensíveis e obter informações confidenciais.
Solução
Verifique se as operações de leitura de arquivos funcionam conforme o esperado. Caso detecte comportamento anômalo, revise o código relacionado e aplique restrições por lista de bloqueios para impedir sequências de travessia de caminho, como ./ e ../.
Leitura e gravação maliciosa de arquivos
Descrição
O Java fornece a classe RandomAccessFile para operações de leitura e gravação de arquivos. Se o caminho e o conteúdo do arquivo não forem validados adequadamente, um invasor poderá ler arquivos sensíveis do sistema ou gravar arquivos de trojan no servidor.
Solução
Confirme se as operações de leitura e gravação de arquivos funcionam conforme o esperado. Ao detectar comportamento anômalo, revise o código relacionado e aplique restrições por lista de bloqueios para impedir o acesso a caminhos sensíveis.
Upload malicioso de arquivos
Descrição
Quando o recurso de upload de arquivos de um site não restringe os tipos de arquivos permitidos, um invasor pode enviar arquivos executáveis, como web shells JSP, para obter permissões elevadas no servidor.
Solução
Restrinja os tipos de arquivos que podem ser enviados. Proíba o upload de arquivos com permissões de execução, como arquivos JSP.
Exclusão arbitrária de arquivos
Descrição
Se o recurso de exclusão de arquivos de um site permitir a exclusão por caminho absoluto ou por travessia de diretórios, e os caminhos não forem validados adequadamente, um invasor poderá explorar essa vulnerabilidade para excluir arquivos críticos ou obter informações sensíveis.
Solução
Verifique se a exclusão de arquivos funciona conforme o esperado. Caso detecte comportamento anômalo, revise o código relacionado e aplique restrições por lista de bloqueios para impedir sequências de travessia de caminho, como ./ e ../.
Travessia de diretórios
Descrição
A travessia de diretórios ocorre quando a estrutura de diretórios de um site pode ser navegada arbitrariamente devido a falhas de configuração. Isso pode levar à divulgação de informações sensíveis que um invasor pode usar para comprometer ainda mais o site.
Solução
Verifique se o acesso aos diretórios funciona conforme o esperado. Ao detectar comportamento anômalo, revise o código relacionado e aplique restrições por lista de bloqueios para impedir sequências de travessia, como ./ e ../.
Ataques baseados em rede
SSRF
Descrição
Server-Side Request Forgery (SSRF) é uma vulnerabilidade que permite a um invasor induzir a aplicação do lado do servidor a enviar requisições HTTP para um destino arbitrário. O invasor pode usar SSRF para acessar sistemas internos que não são diretamente acessíveis pela internet.
Solução
O SSRF ocorre quando o servidor envia requisições com base em parâmetros de entrada fornecidos pelo usuário. Valide os valores dos parâmetros e aplique restrições por lista de permissões aos destinos permitidos.
Consulta DNS maliciosa
Descrição
Invasores podem explorar consultas DNS de várias maneiras. Um invasor pode usar o protocolo DNS para extrair dados sensíveis de redes internas (tunelamento DNS). Também é possível usar consultas DNS para sondar vulnerabilidades em sistemas internos, como SSRF e injeção JNDI.
Solução
Consultas DNS maliciosas ocorrem quando o servidor envia requisições com base em parâmetros controlados pelo usuário. Valide os valores dos parâmetros e aplique restrições por lista de permissões.
Uso de protocolos inseguros
Descrição
Se a URL acessada por um servidor for controlável pelo usuário e a aplicação não restringir o protocolo da URL, um invasor poderá usar protocolos inseguros, como file:// e netdoc://, para ler arquivos sensíveis no servidor.
Solução
Restrinja os protocolos de URL que a aplicação tem permissão para usar. Permita apenas protocolos confiáveis, como HTTP e HTTPS.
Técnicas de persistência
Injeção de memory horse
Descrição
Memory horse é uma técnica emergente de trojan sem arquivo. Um invasor injeta código malicioso diretamente no espaço de memória da aplicação, permitindo que o trojan opere sem gravar arquivos no disco. Essa técnica pode burlar mecanismos de detecção baseados em host e Web Application Firewall (WAF).
Solução
Seu servidor pode ter uma vulnerabilidade de execução de código. Identifique a origem da vulnerabilidade e restrinja as permissões de execução de código.
Ataques a credenciais
Senha fraca de banco de dados
Descrição
Se um banco de dados usar uma senha fraca, um invasor poderá obtê-la por meio de ataques de força bruta. Em seguida, o invasor pode acessar o banco de dados para roubar dados ou escalar privilégios para obter permissões no nível do sistema.
Solução
Use uma senha forte e complexa para todas as contas de banco de dados.