Quanto custa, em dólares,
atacar o seu mecanismo anti-bot?
O Intruso responde com um número medido, não com uma opinião. Treina adversários de raiz contra o mecanismo, mede a que ritmo aprendem, extrapola onde chegam com dados ilimitados — e converte isso no preço da via de ataque mais barata.
Cada resolução custa ao atacante $0,000026 e rende-lhe $0,0200. Faltam 2,89 ordens de grandeza.
A percentagem de bloqueio não é uma medida de segurança
É uma medida de esforço. Um atacante não desiste quando é bloqueado 99% das vezes — desiste quando a centésima tentativa fica mais cara do que aquilo que ele ganha.
A frase «bloqueamos 99,4% dos bots» é verdadeira e não significa nada. Não diz de que população, não tem unidade económica, e degrada-se sem aviso quando o modelo seguinte sai.
Ponha os seus próprios números. O bloqueio entra na conta do atacante como um multiplicador de custo — nada mais.
Os valores por omissão são os da medição de referência. Note que a margem aqui sai −0,66 e não −2,89: o M do topo da página mede o mecanismo sozinho, e este mede-o já com uma camada de bloqueio de 99,4% por cima. Bloquear 99 em cada 100 tentativas compra 2,2 ordens de grandeza — e deixa a margem negativa na mesma.
E há um teto que o desafio mais difícil do mundo não atravessa
Se a percentagem de bloqueio não mede segurança, a reação natural é endurecer o desafio até a percentagem subir. O problema é que o valor de uma resolução não é fixado pela dificuldade dela: é fixado pelo preço a que o resultado dela se revende. A partir desse preço, quem ataca deixa de resolver e passa a comprar — e a dificuldade deixa de ter qualquer palavra a dizer.
Pior: mede-se uma resolução, mas o atacante não compra uma resolução — compra tudo o que ela autoriza. Se o token que o seu servidor aceita vale cinco minutos e não está ligado a nada, cada resolução comprada paga 600 ações, e o custo por ação desmorona 2,78 ordens de grandeza por um caminho onde nenhum puzzle chega.
O Λ dessa queda é calculável a partir de coisas que a sua equipa já sabe de cor, sem dado nenhum, sem credenciais e sem tráfego. O instrumento corre no seu browser: nada do que escrever lá sai de lá, nem para nós.
Três definições, e mais nenhuma
O custo da via de ataque mais barata, em dólares por resolução. É um mínimo, não uma média: um atacante racional escolhe o elo mais fraco.
A margem, em ordens de grandeza, entre o que custa atacar e o que vale atravessar. A é o valor de uma resolução para o atacante — esse número é do cliente.
A unidade, por resolução. Ancorada a um preço publicado em 2010 e fixa para sempre, como o decibel. Uma unidade que se move deixa de ser uma unidade.
Porquê logaritmo: porque o que interessa é quantas ordens de grandeza faltam. E porque o compute baratece exponencialmente — uma escala logarítmica em dólares é aproximadamente linear no tempo. M = 2 não é «duas vezes melhor» que M = 1. É mais uns anos.
Um CAPTCHA de texto, medido
Do tipo que ainda hoje se encontra em formulários de registo. Corpus sintético, semente fixa, cinco pontos de curva, três conjuntos disjuntos.
curva de aprendizagem do adversário IC 95% de Wilson n=120 26,3% 21,7 – 31,6 n=300 80,0% 75,1 – 84,1 n=600 96,0% 93,1 – 97,7 n=1000 96,0% 93,1 – 97,7 n=1500 99,3% 97,6 – 99,8 extrapolado → s∞ = 100% [99,5 – 100,0] r² = 0,997 V* = $0,000026/resolução → 0,026 intrusos → M = −2,89
Porque V* é o mínimo
| Via de ataque | $/resolução | |
|---|---|---|
| Bot próprio | 0,000026 | medido |
| Modelo de visão | 0,000101 | assumido |
| Trabalho humano | 0,001053 | assumido |
A via mais barata é 40× mais barata do que o trabalho humano. Reportar a média das três daria uma margem 1,2 ordens de grandeza melhor — uma conta que só descreve um atacante que escolhe ao acaso.
As contramedidas, medidas e não estimadas
Cada uma regenera o mecanismo com a alteração aplicada e volta a atacá-lo de raiz. Nada é extrapolado de uma tabela.
| Contramedida | Queda na taxa | Efeito em M |
|---|---|---|
| Ondulação | 73,3 pp | +0,48 |
| Multi-fonte | 35,3 pp | +0,09 |
| Rotação | 26,6 pp | +0,03 |
| Sobreposição | 4,0 pp | −0,08 |
A melhor move a margem em +0,48 e M continua negativo. A leitura correcta não é «instalem-se as quatro»: é que este mecanismo não serve como barreira única.
Repare na última linha. A sobreposição piora a margem — aumenta o custo de servir sem reduzir proporcionalmente a taxa de resolução. Uma métrica de taxa de bloqueio reportaria isso como uma melhoria.
O instrumento a medir-se a si próprio
Uma página que vende um número medido e não mede nada é um folheto. Abaixo está um Cloudflare Turnstile a sério. O token que ele emitir vai para um recoletor nosso, que o valida no siteverify da Cloudflare com a nossa chave secreta — e regista uma coisa que o siteverify não sabe dizer: se teve de o incomodar.
O atrito que o Intruso modela é o desafio visível: a fração de pessoas legítimas que o mecanismo faz parar e clicar. Do lado do servidor isso é invisível — quem clicou na caixa e quem passou sem dar por nada são os dois success:true.
Por isso o sinal é lido no browser, no instante em que o widget muda para modo interativo, e viaja com o token. Contar só as recusas daria ≈0% de atrito em tráfego legítimo — um número lisonjeiro e errado.
a ressalva esta população é «quem leu até aqui», não o checkout de um cliente. Serve como demonstração do percurso, não como o atrito do seu site — e fica etiquetada à parte para nunca se misturar com a medição de ninguém. Não se guarda o IP nem o token; de cada sessão fica o veredito, se houve desafio visível e quanto tempo levou.
Medir, decidir, tarifar
- Intruso Medir. Audita um mecanismo e devolve V*, M, e o que muda se endurecer. Cada contramedida é medida a sério: o mecanismo é regenerado com a alteração e reatacado de raiz.
- Intruso Fronteira. Traduz a medição em decisão. Tornar o ataque caríssimo é fácil — basta afastar metade dos clientes. Esta camada procura a configuração que maximiza a receita líquida, e é capaz de recomendar que não se instale nada.
- Intruso Passaporte. A proposta. Em vez de perguntar «isto é um humano?» — uma pergunta que deixou de ter resposta — perguntar «quem responde por isto, e quanto paga?». Um mandato assinado com âmbito, ritmo, validade e tarifa. Não bloquear agentes: tarifá-los.
A pergunta «quem responde por isto, e quanto paga?» tem uma.
O que o Intruso não faz
Isto está aqui, e não numa nota de rodapé, porque é o que separa uma medição de uma brochura.
- Os corpora são gerados em laboratório. Medem o mecanismo, não o tráfego real do cliente. Com tráfego dele corre o mesmo código e os números passam a ser dele.
- Os preços são pressupostos explícitos. Compute, dados, trabalho humano, APIs de visão: todos visíveis e editáveis. Quem discorde muda-os e volta a correr.
- O que não foi medido vem marcado como assumido e traz uma banda em vez de um ponto. Nunca é apresentado como observação.
- M é optimista. A bateria de adversários tem data. Um atacante com um modelo melhor tem custos menores do que os medidos — a escala erra para o lado de dizer que se está mais seguro do que se está.
- As previsões ainda não foram validadas contra dados de incidentes reais. É o maior buraco, e está escrito em primeiro lugar na especificação.
- Não resolve CAPTCHAs de terceiros. Os adversários existem para estabelecer o custo de ataque de um mecanismo que o cliente possui, e correm apenas contra corpora gerados pelo próprio software.
A medida não é minha. O instrumento é.
A definição de V*, de M e da unidade intruso está publicada sob CC BY 4.0, com os onze requisitos que uma medição tem de cumprir para se poder dizer «em intrusos». Qualquer pessoa a pode implementar, traduzir, ou contestar em público.
Não é generosidade — é uma condição de existência. Uma unidade que só uma pessoa pode usar não é uma unidade: é jargão interno. O decibel funciona porque qualquer pessoa o aplica sem pedir licença a ninguém.
E a calculadora desta página não é excepção. As contas que ela faz — as
tentativas que um sucesso custa, o custo real dessa via, o
M que sai daí e o preço por resolução que tornaria
o ataque inútil — estão num arnês que corre no seu computador e não pede
nada a ninguém. Ele lê o script que esta página embute, e não uma
cópia dele, por isso guarde-a como medida/index.html e ponha os
dois ficheiros ao lado:
/dom_faz_de_conta.mjs — o browser de faz-de-conta onde ela corre
+ esta página, guardada em medida/index.html
$ node teste_medida.mjs
Pedir uma medição Ler a especificação v1.0 Ver as outras opções