O ataque de DDOS da Twitter contra si mesma
(sfba.social/@sysop408)- Enquanto o feed inicial da Twitter ficou fora do ar durante boa parte daquela manhã, observou-se uma situação em que o cliente web continuava repetindo solicitações de conteúdo, aparentemente provocando um DDOS contra si próprio
- Mesmo em uma tela que não carregava, as tentativas não paravam; no primeiro vídeo aparecem um erro de rate limited e uma barra de rolagem tremendo
- No segundo vídeo, vê-se a Twitter enviando para si mesma cerca de 10 solicitações por segundo ao tentar buscar conteúdo que não chegava
- A causa apontada como possível foi a recente limitação de leitura para usuários não logados, que pode ter criado uma condição inesperada
- No console de rede do Firefox mostrado em um vídeo posterior, as solicitações também continuavam a jorrar, o que foi interpretado como uma situação de DDOS contra si mesma, com o navegador do usuário repetindo solicitações à Twitter
Solicitações repetidas vistas no cliente web da Twitter
- O feed inicial da Twitter ficou fora do ar durante boa parte daquela manhã e, mesmo sem carregar nada, o site não parava de tentar novamente as solicitações
- O primeiro vídeo mostra uma mensagem de erro dizendo que o usuário está em estado de rate limited e a barra de rolagem à direita tremendo
- O segundo vídeo mostra o motivo de a barra de rolagem estar tremendo: a Twitter tentava buscar conteúdo enviando para si mesma cerca de 10 solicitações por segundo
- Como pano de fundo para o conteúdo não chegar, foi apontada a mudança que impediu usuários não logados de lerem a Twitter
Verificação posterior e materiais anexos
- Uma publicação posterior mostra adicionalmente, pela tela do console de rede do Firefox, que as solicitações de rede continuavam ocorrendo
- A interpretação apresentada foi que o código implantado causou uma condição de corrida (race condition), fazendo com que, no fim, os usuários executassem solicitações com características de DDOS contra a Twitter
- O autor da publicação afirmou que, inicialmente, fechou a conexão, mas que depois a Twitter manteve por algum tempo a situação em que continuava induzindo solicitações
- Materiais anexos:
2 comentários
Twitter muda temporariamente para o modo de taxa limitada
Comentários do Hacker News
Pela minha experiência pessoal bastante dolorosa, poucas coisas abalam tanto uma pessoa quanto ser forçada a executar algo que sabe claramente ser uma ideia terrível
Isso é ainda pior quando você tentou comunicar esse fato à pessoa que está pressionando você a ir contra seu melhor julgamento e falhou, e pior ainda quando depois essa pessoa grita que nunca fez esse pedido, mesmo existindo prova por escrito
Não sei se as pessoas que trabalham no Twitter alertaram que as medidas recentes poderiam causar efeitos colaterais tão grandes, mas, vendo como a liderança opera, isso não seria nada surpreendente
Detesto muito o que o Twitter se tornou nos últimos meses e, mesmo antes da aquisição, já não gostava por causa do formato curto, que elimina nuances, e porque algumas poucas postagens fáceis de incorporar viram base de reportagens, mas sinto muita pena de quem precisa trabalhar sob esse tipo de gestão
Meu palpite é que Elon disse “o site está muito lento”, os engenheiros viram que as requisições do feed principal estavam lentas, mas não entendiam a estrutura, não tinham ferramentas de profiling e foram pressionados a corrigir isso em um prazo irrealista
Então a única coisa que quase podiam fazer era disparar várias requisições em paralelo e torcer para que pelo menos uma fosse rápida
Trabalhando na indústria de games, passei a entender por que jogos são lançados depois de consumir quantidades enormes de dinheiro e tempo e ainda assim saem com até funções básicas quebradas
Esse tipo de pressão extrema de cronograma paradoxalmente cria um imenso lamaçal em que mudar uma coisa quebra dez, e no fim o progresso para
Isso é tratamento básico de erros que já deveria existir há anos
Seja 403 ou qualquer outra resposta que bloqueie tweets, isso jamais deveria provocar tentativas infinitas de novo em intervalos curtos
Criei uma ferramenta para gerenciar os tickets de vulnerabilidade da equipe, e o primeiro caso de uso foi apagar todos os tickets de vulnerabilidade, apesar da minha oposição
Quem está executando isso se preocupa mais em deixar bonito no papel do que em melhorar a segurança de fato
Você sabe disso há muito tempo, sugeriu repetidamente, mas nem sequer tem permissão para tentar, e ainda é tratado como “aquela pessoa” e deixado de lado
Já vivi isso com abordagens técnicas e de negócio que “o jeito de sempre” ainda consegue manter funcionando de algum modo, mas que vão matando a empresa aos poucos
Dito isso, se um superior assume claramente a responsabilidade por algo que julgou arriscado, mas necessário, então há muito mais espaço para lidar bem com o problema quando algo dá errado, e o desenvolvedor precisa aguentar menos sarcasmo tardio
Claro, é bem mais fácil xingar esse tipo de coisa
É preciso lembrar que isso aconteceu em um fim de semana de feriado
Elon empurrou um grande release e basicamente fez os engenheiros irem trabalhar e repetir vários patches nas últimas 12 horas
Estou preocupado com os programadores
O mais impressionante é o quanto a engenharia do Twitter hoje parece baseada em remendos temporários
Eles não gastam esforço cavando fundo no codebase e escolhem só a correção mais simples e curta, e aí surgem os problemas
A esta altura, tanto as condições de trabalho quanto as expectativas do chefe estão muito claras
Seja qual for o motivo para continuarem, é difícil sentir empatia por quem insiste em ficar
É muito improvável que esse bug seja a causa
Um limitador de taxa no lado do servidor tem custo baixo, e o bug no frontend só é acionado quando a limitação de taxa é ativada
Já vi bugs parecidos em sistemas que administro, porque bibliotecas de rede gostam de repetir requisições por padrão sem limites adequados
Mas essas tentativas nunca sobrecarregaram o limitador de taxa
Se você atingir uma API que primeiro faz algum trabalho realmente caro e só depois retorna erro, isso fica um pouco mais incômodo, mas é por isso que colocamos limitação de taxa em todos os endpoints públicos
O webapp provavelmente é a menor parte do tráfego do Twitter, e imagino que os apps nativos não tenham esse problema
É possível que bloquear o acesso anônimo tenha causado o DDoS, isso tenha gerado um pico gigantesco em alguma métrica e, como resultado, Elon tenha concluído que houve aumento de scraping, então puniu os scrapers com o limite de 600 tweets por dia
Parece que minha cota foi reiniciada ou a política mudou, porque consigo acessar o site de novo
Concordo que é pouco provável que esse bug seja a causa fundamental de tudo
Mas também não acredito na história que Musk está vendendo como motivo para basicamente fechar o site
As duas coisas podem ser verdade, e isso faz a gente continuar pensando em outros motivos possíveis, o que é uma perda total de tempo, mas parece uma espécie de isca mental estranha
O livro "Nothing is true and everything is possible" trata de como Putin usa desinformação para controlar o público e eliminar a política democrática, e parece se aplicar aqui também
Os fãs do Musk vão repetir exatamente o que ele mandar, mas a maioria provavelmente sabe que isso é só conversa fiada em benefício próprio
E quem tenta encontrar a causa raiz facilmente escapa para narrativas como este bug, que parecem corretas, mas não têm absolutamente nenhum dado de sustentação
Se você quiser ver um possível caminho futuro dos EUA, recomendo fortemente este livro
https://en.wikipedia.org/wiki/Nothing_Is_True_and_Everything...
Já vi e tentei mitigar casos degenerativos em que tentativas desse tipo sobrecarregaram tanto o backend que o servidor não conseguia nem acompanhar para recusar as requisições
Por causa das tentativas repetidas em várias camadas dos chamadores a montante, a situação piorou tanto que as requisições basicamente expiravam nos buffers/filas TCP antes mesmo de serem processadas pela aplicação
Não sei se o backend da homepage do Twitter tem escala parecida
Situação interessante
Pelos screenshots, parece que está sendo gerado um volume enorme de
GET /TweetDetail, e, como os 429 indicam, isso aparentemente aciona algum limite de taxaSe isso estiver ligado à decisão recente de exigir autenticação para todas as chamadas de API, o culpado pode muito bem ser o API gateway ou algum componente semelhante abaixo dele
E esse comportamento também parece não parar, o que não é o esperado de tentativas com retry usando backoff exponencial
Não estou dizendo que sou um engenheiro melhor do que as pessoas que trabalham no Twitter, mas, mesmo deixando de lado qualquer consideração sobre o Musk, é interessante ver esse tipo de fenômeno em produção
Já vi muitas vezes preferirem um backoff aleatório fixo em vez de backoff exponencial, por julgarem importante demais atender as requisições dos usuários com baixa latência
Já vi em várias reuniões de arquitetura e documentos a decisão explícita de não usar backoff exponencial, entendendo bem o trade-off entre sobrecarga e recuperação do sistema
A mudança no backend, isto é, autenticação obrigatória + limite de taxa, pode ter sido implantada sem testar frontend e backend juntos de forma suficiente
Isso parece um culpado plausível
Pode ser que instâncias do Twitter estejam sendo encerradas à força
A Platformer noticiou em 10 de junho que “o Twitter estava se recusando a pagar pelos serviços de nuvem do Google antes da renovação do contrato em 30 de junho”
Também diz que “o contrato do Twitter com o Google Cloud vinha desde 2018”
https://www.engadget.com/twitter-has-supposedly-started-payi...
Ah, isso parece explicar toda essa bagunça
Eles provavelmente estão tentando sair do GCP, mas não deve ter sido uma perda repentina de acesso ao GCP por se recusarem a pagar
Essa é uma matéria de uma semana atrás
É tudo hospedado pela própria empresa
O Gcloud só dá suporte a jobs em lote e análise de dados
É uma teoria interessante, mas o DDoS veio antes da decisão de desativar o acesso anônimo
Na verdade, essa decisão foi tomada para mitigar o DDoS em andamento[0][1]
Portanto, uma lógica suspeita de retry no frontend web pode ter piorado a situação, mas não é a causa raiz
[0] https://twitter.com/elonmusk/status/1674865731136020505
“É uma medida temporária de emergência. Estávamos sofrendo um saque de dados tão severo que isso estava degradando a qualidade do serviço para usuários normais!”
[1] https://twitter.com/elonmusk/status/1674942336583757825
“Isso será removido em breve. Como dito no post anterior, níveis extremos de raspagem de dados exigiram uma ação drástica e imediata.”
“Quase toda empresa que faz IA, desde startups até algumas das maiores empresas da Terra, estava raspando enormes quantidades de dados.”
“É bastante irritante ter que colocar urgentemente uma grande quantidade de servidores no ar só para ajudar na avaliação ridícula de alguma startup de IA.”
Com certeza há por aí enormes arquivos com todos os tweets anteriores a uma determinada data que essas startups usam
Alguém sabe se essas requisições já existiam antes da mudança para acesso somente com login?
Seria muito engraçado se a enorme operação de scraping na verdade fosse um bug de JavaScript deles
Não me surpreenderia nem um pouco se boa parte do “tráfego de scraping” fosse culpa do próprio Twitter
É um resultado idiota, mas previsível
Provavelmente isso disparava dezenas de requisições em poucos segundos antes de bater no limite de taxa
Muitos bugs pequenos assim, somados, podem ter acabado parecendo algum DDoS ou scraping
Também pode não ser bug
O Elon disse que limitou a 600 os tweets vistos por dia, o que é um limite insano
A maioria das pessoas passaria disso em apenas 5 minutos de rolagem
Quando o Tweetbot mostrava mais de 500 itens no meu feed, eu lembro que isso já dava conteúdo idiota suficiente para ler durante alguns trajetos de bonde de 20 minutos
Não duvido que o Twitter tenha visto um grande aumento recente de tráfego, mas tenho certa convicção de que boa parte disso foi problema criado por ele mesmo
O Elon só precisava ter deixado como estava, mas ah é, tinham 44 bilhões de dólares envolvidos
Parag Agrawal e sua equipe sabiam exatamente o que estavam fazendo
É literalmente o ditado de que um tolo e seu dinheiro logo se separam
Depois que Elon foi obrigado pelo tribunal de Delaware a comprar o Twitter, ele teria ido até ditadores ricos, pegado 44 bilhões de dólares deles e prometido incendiar e destruir o Twitter em nome deles
Sem o Twitter, não há Primavera Árabe, não há atualizações em tempo real sobre desastres, e nem é preciso cortar a internet para impedir que vozes dissidentes se espalhem
Não significa muita coisa, mas o limite de velocidade está sendo afrouxado de novo
6k/600/300 → 8k/800/400 (por volta do meio-dia) → 10k/1k/500 (por volta das 15h)
https://twitter.com/elonmusk/status/1675214274627530754 e com base nas próprias respostas dele
Aparece “Something went wrong”
Pelas novas regras só para usuários logados, acho que mesmo se o site estivesse no ar ainda não daria para ler
Agora links do Twitter viraram links contaminados e, na prática, inúteis
É um circo completo