Ir para o conteúdo

Como identifico padrões de tráfego invocados pelas regras de SQLi e XSS no AWS WAF?

4 minuto de leitura
0

Quero identificar padrões de tráfego invocados pelas regras de injeção de SQL (SQLi) e cross-site scripting (XSS) no AWS WAF.

Breve descrição

Para identificar padrões de tráfego invocados pelas regras de SQLi e XSS, crie regras do AWS WAF e ative o registro em log do AWS WAF. Envie os logs para um grupo de logs no Amazon CloudWatch Logs ou em um bucket do Amazon Simple Storage Service (Amazon S3). Em seguida, use o Amazon CloudWatch Log Insights ou o Amazon Athena para consultar os logs.

Resolução

Os logs do AWS WAF incluem os padrões que invocaram as regras de SQLi e XSS no campo de log terminatingRuleMatchDetails. É possível usar os padrões para solucionar problemas de falsos positivos das regras de SQLi e XSS. Para obter mais informações, consulte Campos do log para tráfego do pacote de proteção (ACL da Web) e Exemplos de log para tráfego do pacote de proteção (ACL da Web).

Exemplo de log do AWS WAF

O registro em log do AWS WAF registra detalhes de cada solicitação inspecionada, incluindo a regra que avaliou a solicitação e, quando aplicável, informações sobre o padrão correspondente.
Exemplo:

{
  "terminatingRuleId": "CustomRule",
  "terminatingRuleType": "REGULAR",
  "action": "BLOCK",
  "terminatingRuleMatchDetails": [
    {
      "conditionType": "SQL_INJECTION",
      "location": "BODY",
      "matchedData": ["<redacted>"],
      "matchedFieldName": "",
      "sensitivityLevel": "LOW"
    }
  ]
}

conditionType define qual tipo de inspeção corresponde. No exemplo anterior, condtionType é injeção de SQL.

location define qual parte da solicitação o AWS WAF inspecionou. No exemplo anterior, location é BODY, URL ou QUERY_STRING.

matchedData contém as strings específicas na solicitação que invoca a regra.Se a supressão de log estiver ativada no AWS WAF, alguns campos podem ser parcial ou totalmente suprimidos na saída do log.

sensitivityLevel define o nível de sensibilidade de inspeção usado pela regra. Por padrão, sensitivityLevel na entrada do log é definido como LOW em grupos de regras gerenciadas pela AWS, como AWS Managed Rules para SQLi e XSS. Isso reduz a probabilidade de falsos positivos. Para instruções de inspeção de SQLi personalizadas que você define em seus próprios grupos de regras, é possível configurar o nível de sensibilidade da inspeção como Low ou High.

Examine campos como terminatingRuleId, terminatingRuleMatchDetails e action para correlacionar solicitações com avaliações e resultados de regras.

Quando você usa grupos de regras gerenciadas pela AWS, o AWS WAF expõe muitas detecções por meio de rótulos de regras nos eventos de logs. Para identificar quais assinaturas de regras gerenciadas correspondem às solicitações recebidas, consulte as informações da regra de encerramento e os rótulos das regras.

Dependendo da ação configurada para uma regra, uma solicitação pode aparecer nos logs mesmo quando o AWS WAF não a bloqueia. Use os campos action e terminatingRuleId para distinguir entre solicitações avaliadas, contadas e bloqueadas.

Consultas do CloudWatch Logs Insights

Se seus logs do AWS WAF estiverem armazenados no Amazon CloudWatch Logs, use o CloudWatch Logs Insights para executar consultas para identificar padrões de tráfego.
Execute uma consulta do CloudWatch Logs Insights com o campo de log terminatingRuleMatchDetails para identificar padrões de tráfego. O exemplo de consulta a seguir retorna o carimbo de data/hora, o endereço IP do cliente, o país de origem, os detalhes da correspondência e o ID da solicitação:

fields @timestamp
| parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData
| filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/)
| display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
| limit 100

Para obter mais informações, consulte Como analiso os logs do AWS WAF no CloudWatch?

Consultas do Amazon Athena

Se seus logs do AWS WAF estiverem armazenados no Amazon S3, use as consultas do Amazon Athena para identificar padrões de tráfego. Execute uma consulta do Amazon Athena com o campo de log terminatingRuleMatchDetails para identificar padrões de tráfego. A consulta a seguir retorna o carimbo de data/hora, o endereço IP do cliente, o país de origem, os detalhes da correspondência e o ID da solicitação:

SELECT
    to_iso8601(from_unixtime(timestamp / 1000)) as timestamp,
    terminatingRuleId,
    action,
    httpRequest.requestId as RequestID,
    httpRequest.clientIp as ClientIP,
    httpRequest.country as Country,
    termmatchrules.conditionType as ConditionType,
    termmatchrules.location as Location,
    termmatchrules.matchedData as MatchedData
FROM waf_logs  
CROSS JOIN UNNEST(terminatingRuleMatchDetails) as t(termmatchrules)
WHERE termmatchrules.conditionType in ('XSS', 'SQL_INJECTION')

Para obter mais informações, consulte How do I analyze AWS WAF logs in Amazon Athena? (Como analiso os logs do AWS WAF no Amazon Athena?)

Informações relacionadas

Analyzing AWS WAF Logs in Amazon CloudWatch Logs (Análise de logs do AWS WAF no Amazon CloudWatch Logs)

Como faço para excluir URIs específicos da inspeção de XSS ou SQLi para solicitações HTTP no AWS WAF?

AWS OFICIALAtualizada há 6 meses