Bot Manager Lite
Consulte as 26 regras contra as quais o Bot Manager Lite pontua uma requisição, cada uma com o seu ID, pontuação e classe, e os argumentos com padrão entregue.
O Bot Manager Lite é a edição de autosserviço do Bot Manager, instalada a partir do Azion Marketplace e executada como uma instância de função em um Firewall. A função instalada está na versão 0.2.0, é escrita em JavaScript e tira toda a sua configuração de um objeto JSON de argumentos.
A função pontua cada requisição contra 26 regras estáticas. Cada regra que a requisição corresponde soma um número fixo de pontos e, quando o total alcança ou passa o argumento threshold, a função aplica o argumento action. Uma requisição que fica abaixo do threshold segue pelo Rules Engine for Firewall até a aplicação. As regras pontuam as marcas que clientes de raspagem e de força bruta deixam: um user agent ausente, um cabeçalho Accept-Language ausente, um cookie de sessão que não verifica.
Esta página lista as 26 regras com os seus IDs, pontuações e classes, os argumentos para os quais a função entrega um padrão e o log de report que ela escreve.
Regras
Cada regra abaixo soma o seu incremento de pontuação ao total corrente da requisição, e a classe nomeia o comportamento que a regra pontua. Uma regra cujo ID está listado no argumento disabled_rules não é processada e não soma nada.
| ID | O que corresponde | Pontuação | Classe |
|---|---|---|---|
| 1 | ${http_user_agent} está vazio | 8 | Bad bot signatures |
| 2 | ${http_content_type} está vazio e ${request_body} não está vazio | 8 | Bad bot signatures |
| 3 | ${http_referer} está vazio e ${request_method} é POST, PUT, PATCH ou DELETE | 6 | Malicious intent |
| 4 | ${http_user_agent} contém a string Dalvik | 4 | Bad bot signatures |
| 5 | ${http_user_agent} contém a string Trident | 6 | Bad bot signatures |
| 6 | ${http_user_agent} contém a string Headless | 6 | Bad bot signatures |
| 7 | ${http_user_agent} tem mais de 200 caracteres ou menos de 10 caracteres | 4 | Bad bot signatures |
| 8 | ${http_user_agent} corresponde a um user agent de bot malicioso conhecido | 8 | Scripted bots |
| 9 | ${http_accept} está vazio | 8 | Bad bot signatures |
| 10 | ${http_accept_language} está vazio | 8 | Bad bot signatures |
| 11 | ${http_range} está vazio | 6 | Malicious intent |
| 12 | ${request_method} é TRACE | 8 | Malicious intent |
| 13 | ${http_content_length} está vazio e ${request_method} é POST, PUT ou PATCH | 8 | Bad bot signatures |
| 14 | O IP do cliente é encontrado em uma Network List de reputação | 6 | Reputation Intelligence |
| 15 | ${request_method} é POST, PUT ou PATCH e ${cookie_az_botm} está ausente | 8 | Malicious browser behavior |
| 16 | ${request_method} é POST, PUT ou PATCH e ${cookie_az_asm} está ausente | 8 | Malicious browser behavior |
| 17 | A verificação de integridade do cookie de sessão falha | 16 | Malicious browser behavior |
| 18 | ${http_sec_fetch_mode} está vazio | 4 | Malicious intent |
| 19 | ${http_sec_fetch_dest} está vazio | 4 | Malicious intent |
| 20 | ${http_sec_fetch_site} está vazio | 4 | Malicious intent |
| 21 | ${server_fingerprint} corresponde a uma entrada em bad_fingerprint_list | 32 | Malicious browser behavior |
| 22 | ${http_user_agent} corresponde a um user agent de navegador desatualizado conhecido | 6 | Bad bot signatures |
| 23 | ${server_protocol} é HTTP/1.0 ou HTTP/1.1 | 6 | Scripted bots |
| 24 | ${geoip_asn} corresponde a um ASN de provedor de nuvem conhecido | 4 | Cloud provider |
| 25 | ${http_user_agent} corresponde a um user agent de navegador headless conhecido | 4 | Bad bot signatures |
| 26 | ${http_user_agent} corresponde a um user agent de cliente scriptado conhecido | 8 | Bad bot signatures |
A regra 14 verifica o IP do cliente contra as Network Lists cujos IDs estão listados em reputation_network_lists, e soma 6 pontos para cada lista em que o IP é encontrado.
Dois argumentos tiram uma requisição da tabela antes de ela ser pontuada. Uma requisição cujo fingerprint está listado em good_fingerprint_list pula todas as regras acima. Com block_ai_bots definido como true, uma requisição de um user agent de IA conhecido é bloqueada antes do pipeline de pontuação, então ela não alcança regra nenhuma e não carrega ID de regra na sua linha de log.
Os IDs que uma requisição correspondeu são escritos no log de report, então os valores de disabled_rules vêm do seu próprio tráfego, e não desta tabela.
Argumentos
Uma instância do Bot Manager Lite tira toda a sua configuração de um objeto JSON, e nenhum argumento é obrigatório. O Azion Console renderiza o objeto como a seção Arguments de uma instância de função, na aba Functions Instances do firewall, e a Azion API e o Azion CLI o carregam como args. A função instalada não publica esquema de argumentos, então o editor de Arguments não tem formulário para construir a partir dele e o objeto é escrito como JSON puro.
Nada verifica esse objeto. Toda chave que uma instância carrega é armazenada e lida de volta exatamente como foi enviada, incluindo uma chave que a função nunca lê. Escreva thresold no lugar de threshold e a instância guarda thresold, a função segue pontuando contra 30 e nenhuma interface relata um problema. Um argumento alcança a função apenas sob o nome que a função lê.
Os padrões entregues são um fallback de execução, não uma cópia. Uma instância criada com {} armazena {}, então ler uma instância mostra quais argumentos essa instância define, não os valores com que a função é executada.
O Bot Manager Lite v0.2.0 entrega um padrão para oito argumentos:
| Argumento | Tipo | Padrão | O que faz |
|---|---|---|---|
action | string | deny | O que a função faz com uma requisição cuja pontuação está no threshold ou acima dele. Os sete valores estão listados em Argumentos |
bad_fingerprint_list | array de strings | [] | Os fingerprints contra os quais a regra 21 pontua, a 32 pontos por correspondência |
disabled_rules | array de números | [] | Os IDs das regras que a função não processa. Uma regra desabilitada não soma nada à pontuação |
good_fingerprint_list | array de strings | [] | Os fingerprints que pulam a tabela de regras inteira |
internal_logs | number | 0 | Para quais requisições a função escreve uma linha de log de report. Os quatro valores estão listados abaixo |
log_headers | array de strings | Os nove cabeçalhos abaixo | Os cabeçalhos de requisição que a função escreve no log de report |
log_tag | string | bot-manager-instance | A tag que identifica a instância no log de report. Dê a cada instância a sua própria tag |
threshold | number | 30 | A pontuação que uma requisição alcança antes de action ser executada. Um valor mais baixo age sobre mais requisições, um valor mais alto sobre menos |
log_headers é entregue com nove cabeçalhos: accept, accept-encoding, accept-language, content-type, host, referer, user-agent, x-forwarded-for e x-request-id. O array nomeia os cabeçalhos que a função escreve, e não os cabeçalhos a manter fora do log. Sete cabeçalhos nunca são escritos, qualquer que seja o conteúdo do array: authorization, cookie, proxy-authorization, set-cookie, x-csrf-token, x-api-key e x-amz-security-token. Os valores dos cabeçalhos são escritos em base64.
Os sete argumentos abaixo são documentados para o Bot Manager Lite e não são entregues com padrão na função, então Padrão documentado é o valor que a documentação informa, e não um valor lido da função instalada.
| Argumento | Tipo | Padrão documentado | O que faz |
|---|---|---|---|
block_ai_bots | boolean | false | Bloqueia uma requisição de um user agent de IA conhecido antes de as regras de pontuação serem executadas |
custom_html | string | — | O HTML que a ação custom_html devolve. Ausente, ou não sendo uma string, a função executa allow |
custom_status_code | number | 200 | O status code que a resposta custom_html carrega. Ausente, ou não sendo um número, é 200 |
redirect_to | string | — | A URL para onde a ação redirect envia a requisição. Ausente, ou não sendo uma string, a função executa allow |
reputation_network_lists | array de números | [] | Os IDs das Network Lists contra os quais a regra 14 verifica o IP do cliente, a 6 pontos para cada lista correspondida |
session_signature_key | string | az | A chave HMAC que assina o cookie de sessão az_asm. Ausente, ou inválida, a função usa az |
should_write_warning_logs | boolean | false | Se a função escreve logs de aviso no Real-Time Events |
O Bot Manager documenta outros argumentos que o Bot Manager Lite não documenta, e os valores que action aceita estão listados uma vez para as duas edições. Para mais informações, consulte Argumentos.
Internal logs
internal_logs seleciona para quais requisições a função escreve uma linha de log de report. Um valor que a função não reconhece é lido como 0.
| Valor | O que a função registra |
|---|---|
0 | Uma requisição cuja pontuação está acima de 0. Este é o padrão |
1 | Uma requisição cuja pontuação está acima de 0, e uma requisição classificada como bot bom |
2 | Todas as requisições |
3 | Nenhuma requisição |
Defina internal_logs como 2 enquanto você calibra uma instância. Uma requisição que pontuou 0 ainda produz uma linha, que é o único jeito de ver que as regras foram executadas e não corresponderam a nada.
Log de report
O Bot Manager Lite escreve uma linha por requisição pontuada. A linha abre com o produto e o
log_tag da instância entre colchetes, e depois carrega um objeto JSON de catorze campos:
O log_tag fica no prefixo, não no objeto, então um firewall que executa várias instâncias é
diferenciado pelo colchete, e não por um campo. O objeto carrega request_id, remote_addr,
fingerprint, host, http_user_agent, request_uri, geoip_country, geoip_region, asn,
score, bot_category, classified, action e matched_rules. O Bot Manager escreve um objeto
mais longo; o dicionário de campos das duas edições está em Logs.
score é o total acumulado da requisição em todas as regras que ela correspondeu, e
matched_rules carrega os IDs que dispararam, que é de onde vêm os valores de disabled_rules. Os
dois concordam com a tabela acima: a linha mostrada correspondeu às regras 1, 10, 18, 19 e 20, cujos
incrementos de 8, 8, 4, 4 e 4 somam o score de 28.
bot_category é uma lista unida por vírgula das classes das regras que corresponderam, não um valor
único: as regras 1 e 10 são Bad bot signatures e as regras 18, 19 e 20 são Malicious intent.
classified é um veredito relativo ao threshold, não uma propriedade da requisição em si. A mesma
pontuação de 28 pelas mesmas regras é lida como legitimate sob um threshold de 30 e como
bad bot sob um threshold de 1. Elevar um threshold impede que a ação seja executada e muda como o
tráfego é etiquetado nos logs.
geoip_country carrega um código de país, e fingerprint carrega quatro segmentos separados por
sublinhado, não um hash único. request_id correlaciona a linha com a mesma requisição nas outras
ferramentas de observabilidade da Azion, e remote_addr é o IP do cliente que a regra 14 verifica
contra as listas de reputação.