Resumo

  • Em 28 de fevereiro de 2018, o GitHub sofreu um ataque distribuído de negação de serviço baseado em reflexão e amplificação via memcached. Segundo o relatório da empresa, o pico chegou a 1,35 Tbps e 126,9 milhões de pacotes por segundo. O monitoramento detectou uma proporção anormal entre tráfego de entrada e de saída às 17:21 UTC. [1]
  • O GitHub.com ficou indisponível entre 17:21 e 17:26 e apresentou indisponibilidade intermitente até 17:30. O GitHub afirmou que a confidencialidade e a integridade dos dados não estiveram em risco. [1]
  • Às 17:26, engenheiros retiraram os anúncios dos prefixos do AS36459 dos provedores normais de trânsito e passaram a anunciá-los exclusivamente pelos enlaces com a Akamai. A reconvergência do BGP e a filtragem na borda da Akamai permitiram a recuperação completa indicada pelo GitHub às 17:30. [1]
  • A alteração de rotas não filtrou os pacotes maliciosos. Ela mudou a rede para a qual a Internet entregava o tráfego destinado aos endereços do GitHub, colocando o fluxo em um caminho com capacidade de mitigação. O roteamento e a filtragem foram controles distintos e complementares.
  • O ataque explorou instâncias de memcached acessíveis pela Internet e com UDP habilitado. Uma solicitação pequena, enviada com o endereço da vítima falsificado como origem, fazia o servidor responder à vítima com uma quantidade muito maior de dados. A Cloudflare estimou um potencial de amplificação de aproximadamente 51.200 para 1 para o protocolo abusado; esse número não representa uma média medida pelo GitHub durante o incidente. [3]
  • A reflexão dependia da falsificação do endereço IP de origem. BCP 38 e BCP 84 descrevem controles para restringir pacotes com origem ilegítima, enquanto CAIDA e MANRS documentam a dimensão operacional do antisspoofing. [9][10][14][15]
  • A validação de origem não fecharia servidores memcached expostos, não substituiria capacidade de mitigação e não garantiria uma transferência de rotas bem-sucedida. O incidente atravessou vários domínios de controle: software, configuração de servidores, redes de acesso, trânsito, roteamento interdomínio, mitigação e operação do serviço.
  • O GitHub tornou públicos horários, taxas de tráfego, o sistema autônomo envolvido, a ação de retirada de rotas e os sinais usados para declarar recuperação. Isso criou um registro verificável da transferência operacional, embora não revele os limiares internos, a política completa de roteamento, as condições contratuais, a lista integral de refletores nem a identidade do atacante.
  • A questão central de responsabilização não é apenas quem iniciou o ataque. É saber se cada organização com controle prático sobre uma parte da infraestrutura consegue demonstrar quais sinais observou, quais decisões podia tomar, quais limites enfrentou, como preservou o tráfego legítimo e o que fez para reduzir a possibilidade de repetição.

Nove minutos que expuseram toda uma cadeia de controle

O relatório do GitHub fornece uma cronologia incomumente concreta para um incidente público de DDoS. Às 17:21 UTC de 28 de fevereiro de 2018, os sistemas de monitoramento identificaram uma anomalia na proporção entre o tráfego que entrava e o que saía da infraestrutura. O GitHub.com ficou indisponível entre 17:21 e 17:26 e, depois, intermitentemente indisponível até 17:30. A empresa declarou que, apesar do impacto sobre disponibilidade, a confidencialidade e a integridade dos dados não estiveram em risco. [1]

Às 17:26, uma ação iniciada pelas ferramentas de ChatOps do GitHub retirou dos provedores de trânsito os anúncios BGP associados ao AS36459 e passou a anunciar essas rotas exclusivamente pelos enlaces com a Akamai. Nos minutos seguintes, as rotas reconvergiram. Listas de controle de acesso na borda da Akamai mitigaram o fluxo, e o GitHub considerou o serviço plenamente recuperado às 17:30 com base nos níveis de tráfego de trânsito e nos códigos de resposta dos balanceadores de carga. [1]

A cronologia não terminou ali. Às 17:34, o GitHub retirou também as rotas anunciadas nos pontos de troca de tráfego, deslocando mais 40 Gbps para longe de sua borda. Pouco depois das 18:00, ocorreu um segundo pico de aproximadamente 400 Gbps, sem reprodução da indisponibilidade inicial. [1] Essa sequência mostra que a recuperação não foi tratada como um único instante mágico. A equipe continuou ajustando a exposição da borda e observando a resposta do sistema.

O valor analítico desses nove minutos não está apenas na velocidade da reação. A cronologia identifica pontos de controle: um sinal de detecção, uma decisão operacional, uma mudança na autoridade de roteamento, a propagação distribuída dessa mudança, a filtragem em outra rede e indicadores de recuperação no serviço. Cada etapa poderia falhar de maneira diferente, e cada uma exigia evidências próprias.

Essa leitura evita reduzir o caso a “um site foi atacado e comprou mais capacidade”. O GitHub já havia ampliado sua capacidade de trânsito e mantinha relações de peering em diversos pontos de troca. Ainda assim, decidiu que aquele volume exigia uma rede parceira com maior capacidade de borda para bloqueio e filtragem. [1] Capacidade direta ajudava a absorver eventos menores e a ganhar tempo, mas não eliminava a necessidade de uma transferência preparada.

A indisponibilidade também precisa ser descrita com precisão. Houve aproximadamente cinco minutos de indisponibilidade e outros minutos de funcionamento intermitente, não uma interrupção uniforme durante todo o período. Essa diferença importa porque recuperação de rede pode ocorrer por etapas. Alguns usuários podem alcançar a nova rota antes de outros; alguns serviços podem se recuperar antes de dependências; filtros podem estabilizar progressivamente. Um relatório responsável distingue esses estados em vez de comprimi-los em um único número.

O incidente é, portanto, um caso de infraestrutura de rede. Se forem removidos a reflexão UDP, a falsificação de origem, o AS36459, a retirada dos anúncios, a reconvergência do BGP, a capacidade de trânsito e a filtragem da Akamai, desaparece a explicação de por que o serviço caiu e como voltou. A dimensão de rede não é um detalhe técnico acrescentado a uma narrativa genérica de segurança; ela é a própria estrutura causal do episódio.

1,35 Tbps e 126,9 Mpps descrevem pressões diferentes

O GitHub informou dois valores de pico: 1,35 terabit por segundo e 126,9 milhões de pacotes por segundo. [1] Eles não são duas maneiras equivalentes de dizer que o ataque foi grande. A taxa em bits indica quanto da capacidade dos enlaces um fluxo pode consumir. A taxa de pacotes indica quantas unidades os equipamentos precisam receber, classificar, encaminhar, limitar ou descartar a cada segundo.

Uma inundação com pacotes relativamente grandes pode saturar um enlace antes de esgotar a capacidade de processamento de pacotes. Outra, formada por enorme quantidade de pacotes pequenos, pode pressionar mecanismos de encaminhamento, filtragem ou contabilização mesmo quando a taxa total em bits é menor. Firewalls, roteadores, balanceadores e sistemas de telemetria não têm necessariamente o mesmo limite nem falham da mesma forma.

Por isso, “capacidade de 1,35 Tbps” não pode ser interpretada automaticamente como o requisito mínimo de todos os componentes do caminho. O ponto onde a medição foi feita, o período durante o qual o pico se manteve e o volume observado antes ou depois da filtragem alteram o significado do número. O relatório fornece valores úteis, mas não expõe cada detalhe da instrumentação. A conclusão correta é limitada: o GitHub observou e atribuiu ao ataque aqueles picos; não se pode presumir que cada enlace ou dispositivo tenha processado a mesma carga.

A mesma disciplina vale para o impacto. A interrupção comprova que a continuidade foi afetada, mas não identifica sozinha o recurso exato que chegou ao limite. Pode haver congestionamento em um enlace, pressão em equipamentos intermediários, queda na eficiência dos filtros ou efeitos sobre os sistemas que entregam tráfego aos aplicativos. Sem telemetria interna adicional, atribuir a indisponibilidade a um componente específico seria especulação.

Uma declaração responsável de resiliência precisa, portanto, dizer qual dimensão foi testada. Largura de banda agregada, pacotes por segundo, capacidade de filtragem, número de sessões, largura do retorno limpo e sucesso de transações de aplicação são medidas diferentes. Publicar mais de uma delas, como fez o GitHub, permite uma análise melhor do que usar apenas o maior valor disponível como símbolo de gravidade.

Como a reflexão via memcached multiplicou uma solicitação forjada

Memcached é um sistema de cache distribuído em memória, normalmente usado para acelerar aplicativos. Ele não foi concebido como um serviço público de distribuição de dados. O vetor explorado em 2018 dependia de instalações que deixavam a interface UDP acessível a redes não confiáveis. [3][6][7][8]

O mecanismo combinava reflexão e amplificação. Na reflexão, a solicitação era enviada a um servidor intermediário com um endereço IP de origem falsificado. Esse endereço pertencia à vítima, não ao remetente real. O servidor respondia ao endereço indicado no cabeçalho e, assim, refletia o tráfego para o alvo. Na amplificação, a resposta era muito maior do que a solicitação que a havia provocado.

A Cloudflare descreveu um potencial de amplificação em torno de 51.200 para 1 para o protocolo abusado. [3] Esse valor expressa uma propriedade possível da interação analisada, não uma proporção média medida no ataque ao GitHub. O resultado efetivo dependia do conteúdo solicitado, dos objetos presentes no cache, do comportamento da instância e da forma de medição. A relevância do número é mostrar a assimetria: o atacante não precisava possuir capacidade de saída igual à inundação recebida pela vítima.

Esse tráfego não deve ser confundido com uma botnet enviando diretamente todos os pacotes ao GitHub. No modelo de reflexão, os servidores memcached expostos forneciam grande parte da largura de banda das respostas. Também não há base para descrever o incidente como um ataque Mirai. Identificar corretamente o mecanismo é essencial porque os controles eficazes são diferentes.

Duas condições técnicas tinham de coexistir. Primeiro, uma instância de memcached aceitava pela Internet uma solicitação UDP e produzia uma resposta desproporcionalmente grande. Segundo, alguma rede permitia que a solicitação saísse com um endereço de origem que não pertencia ao remetente. Se o serviço não estivesse exposto, faltaria o refletor. Se o pacote forjado fosse rejeitado próximo à origem, a resposta não seria desviada para a vítima.

A combinação também explica por que não existe um único “dono” de toda a falha. Mantenedores do software controlavam padrões e orientações. Administradores controlavam interfaces de escuta, firewall, versão e exposição. Provedores de hospedagem podiam localizar serviços perigosamente acessíveis e manter canais de abuso. Redes de acesso podiam validar endereços de origem. O GitHub e a Akamai controlavam a resposta no destino. Cada ator possuía autoridade real apenas sobre um trecho.

A CISA inclui memcached entre protocolos UDP que podem ser explorados em ataques distribuídos de reflexão. [6] Essa classificação ajuda na defesa, mas não substitui a investigação específica. “Amplificação UDP” não informa por si só qual serviço respondeu, quem administrava cada instância, de onde partiram as solicitações forjadas ou qual rede poderia bloqueá-las. O mecanismo orienta as perguntas; ele não fornece automaticamente a atribuição.

O evento atravessou domínios de controle diferentes

A primeira fronteira de controle estava no próprio GitHub. A empresa podia medir o tráfego que chegava à sua borda, ampliar capacidade direta, manter enlaces de trânsito e peering, definir limiares de acionamento e autorizar mudanças em seus anúncios. Também podia observar se balanceadores e aplicações voltavam a responder. Não podia, porém, reconfigurar servidores memcached pertencentes a terceiros nem instalar filtros nas redes que originavam pacotes falsificados.

A segunda fronteira estava na Akamai. Quando os anúncios foram deslocados, a rede de mitigação passou a receber o tráfego destinado aos prefixos do GitHub. Cabia a ela absorver o volume, aplicar seus controles na borda e entregar o tráfego permitido. O relatório do GitHub sustenta que essa combinação contribuiu para a recuperação. [1] Não revela, entretanto, os critérios privados dos filtros, a arquitetura de retorno ou os termos comerciais do serviço.

A terceira fronteira abrangia o projeto memcached e as organizações que operavam instâncias. Os mantenedores podiam alterar o comportamento padrão e publicar orientações de configuração. Os administradores de cada servidor podiam desabilitar UDP, restringir a interface de escuta, bloquear a porta no firewall e atualizar o software. Um padrão seguro reduz acidentes futuros, mas não altera remotamente sistemas antigos ou regras permissivas já implantadas.

A quarta fronteira estava nas redes de origem. A reflexão exigia que pacotes com endereço de origem falsificado alcançassem os servidores. Redes conectando clientes à Internet podiam verificar se os endereços declarados eram compatíveis com os prefixos autorizados naquele ponto. Essa função é distinta da segurança do servidor refletor: uma rede pode bloquear spoofing mesmo que um cliente mantenha memcached exposto, e um servidor pode estar corretamente fechado mesmo que outra rede ainda permita pacotes falsificados.

A quinta fronteira envolvia trânsito, interconexão e coordenação. Provedores propagavam rotas e carregavam tráfego segundo políticas próprias. Pontos de troca ofereciam caminhos adicionais. Contatos de abuso, projetos de medição e normas operacionais ajudavam organizações sem uma relação contratual direta a compartilhar evidências e solicitar correções.

A identidade do atacante e a geração inicial das solicitações formavam outro domínio, mas o registro público não identifica esse ator. Tampouco apresenta a lista completa dos proprietários de refletores ou das redes pelas quais saíram as solicitações. A análise pode mapear o que cada categoria de participante tinha condições de controlar sem converter desconhecidos em acusados.

Responsabilização, nesse contexto, significa ligar uma decisão a uma autoridade e a um registro. Não significa afirmar que todos os atores tinham culpa equivalente, que conheciam o ataque ou que cometeram negligência. Uma organização pode responder por manter um controle verificável sem ser legalmente responsável pelo dano total. Essa distinção mantém a análise útil e proporcional à evidência disponível.

BCP 38 e BCP 84: controles importantes, porém delimitados

A reflexão começa com uma mentira no cabeçalho IP. A solicitação que chega ao refletor apresenta o endereço da vítima como se fosse o endereço do remetente. O servidor responde a esse endereço e não ao sistema que efetivamente gerou a solicitação. A validação de endereço de origem procura rejeitar essa falsificação perto da rede de onde o pacote sai.

O RFC 2827, associado ao BCP 38, descreve filtragem de ingresso voltada a impedir que clientes atrás de um ponto de agregação emitam pacotes com endereços de origem ilegítimos. [9] Se um provedor sabe quais prefixos são válidos para determinado cliente ou interface, pode descartar pacotes que declarem origens incompatíveis.

O RFC 3704, associado ao BCP 84, trata das dificuldades adicionais encontradas em redes multihomed. [10] Nesses ambientes, tráfego legítimo pode entrar por um caminho e sair por outro. Um teste rígido e simplista de caminho reverso pode rejeitar pacotes válidos. A política precisa considerar as topologias e os prefixos efetivamente autorizados, e não apenas assumir simetria.

Essa diferença revela por que “ativar o BCP 38” não é um botão universal. A operadora precisa manter dados corretos sobre prefixos de clientes, atualizar filtros quando as atribuições mudam, lidar com exceções justificadas, observar descartes e oferecer um processo de diagnóstico. Um filtro desatualizado pode causar indisponibilidade legítima; a ausência de filtro transfere risco de abuso para o restante da Internet.

O controle também tem alcance definido. A validação de origem pode impedir ou reduzir ataques que dependem de endereços forjados. Ela não impede que dispositivos comprometidos enviem tráfego direto usando seus endereços reais. Não fecha a interface UDP de um memcached público. Não aumenta a capacidade da borda do GitHub, não filtra o ataque já recebido e não garante que a transferência para um provedor de mitigação funcionará.

Da mesma forma, fechar todos os refletores memcached conhecidos não eliminaria a falsificação de origem nem impediria o abuso de outros protocolos. E contratar mitigação de grande capacidade não resolveria a exposição de servidores de terceiros. Os controles são complementares porque atuam sobre condições diferentes.

A CAIDA mantém o projeto Spoofer para medir se redes permitem o envio de pacotes com endereços de origem forjados. [14] O valor desse tipo de medição está em tornar uma capacidade de abuso tecnicamente observável. Ainda assim, uma medição geral não deve ser usada para afirmar que uma rede específica participou do ataque ao GitHub sem correspondência temporal e evidência do incidente.

A MANRS trata o antisspoofing como uma ação operacional esperada das redes e fornece orientações de implementação. [15] Normas desse tipo transformam um princípio amplo em prática auditável. Elas não demonstram que todos os operadores já a aplicam, nem que um sistema autônomo ausente da documentação pública foi responsável por qualquer parcela do ataque.

Para haver responsabilização no nível adequado, uma rede deveria conseguir mostrar quais prefixos estavam autorizados em cada fronteira, qual política de validação estava ativa, como as exceções foram aprovadas, quais testes de spoofing foram realizados e como os descartes foram investigados. Percentuais globais ajudam a medir o ecossistema; registros locais e temporais são necessários para atribuição concreta.

O problema econômico do antisspoofing

O antisspoofing enfrenta uma assimetria de incentivos. A rede que instala, mantém e atende chamados relacionados aos filtros assume o custo local. A maior parte do benefício aparece em outras redes, que deixam de receber tráfego refletido. O cliente direto talvez nunca perceba que sua conexão poderia ser usada para atacar terceiros.

Essa distribuição enfraquece o sinal econômico. A vítima pode pagar por mitigação porque sente imediatamente o impacto da indisponibilidade. Já a rede de onde sai um pacote falsificado pode não sofrer congestionamento relevante, não receber reclamação de seu cliente e não ter uma relação comercial com a vítima. Sem medição, norma, exigência contratual ou pressão de pares, o investimento compete com prioridades mais visíveis.

A manutenção também é contínua. Prefixos são delegados, transferidos e reconfigurados; clientes mudam de topologia; redes passam a usar múltiplos provedores. Uma política correta no momento da implantação pode se tornar incorreta. O valor do controle depende tanto da exatidão dos registros quanto da presença inicial do filtro.

Contatos de abuso entram nessa equação. A vítima ou um pesquisador pode identificar um endereço de refletor, mas ainda precisa localizar a organização responsável, fornecer evidência compreensível e obter resposta. Informações desatualizadas aumentam o tempo em que uma instância continua disponível para abuso. Um contato funcional não substitui a prevenção, mas reduz o custo de coordenar a correção.

Medição pública, testes voluntários e compromissos operacionais podem aproximar benefício e responsabilidade. Eles permitem que clientes, parceiros e pares perguntem se uma rede valida origem, como comprova a prática e em quanto tempo corrige falhas. O objetivo não é criar certeza absoluta a partir de uma única medição; é tornar a ausência de controle menos invisível.

O incidente do GitHub ilustra por que essa dimensão econômica importa. O alvo teve incentivo imediato para comprar capacidade, aprimorar detecção e acelerar a transferência de rotas. As redes que poderiam impedir solicitações forjadas protegiam principalmente terceiros. Sem mecanismos que valorizem esse benefício compartilhado, o ecossistema tende a investir mais na absorção do dano do que na remoção de uma de suas causas.

A detecção precisava produzir uma decisão acionável

O GitHub informou que seu monitoramento detectou uma anomalia na proporção entre tráfego de entrada e de saída. [1] Esse dado é relevante porque conecta a decisão de mitigação a uma observação concreta. Uma quantidade de entrada muito superior àquela esperada em relação às respostas e ao comportamento normal do serviço pode indicar reflexão, mas também pode resultar de pico legítimo, erro de medição ou outro evento de rede.

Por isso, um único alarme não encerra o diagnóstico. Contadores de interfaces mostram taxa de bits e pacotes. Registros de fluxo ajudam a identificar protocolo, portas, concentração de destinos e distribuição de origens. Telemetria de aplicação mostra se operações legítimas são concluídas. Dados de roteamento confirmam por quais caminhos o tráfego está chegando. Códigos dos balanceadores e sondas externas revelam o impacto percebido pelo usuário.

Essas fontes respondem a perguntas distintas. Uma saturação de enlace não prova intenção maliciosa. Um padrão associado à porta 11211 não transforma automaticamente todo pacote em ataque. A recuperação de um roteador não demonstra que o aplicativo voltou. Uma rota corretamente anunciada não garante que os filtros estejam preservando usuários legítimos. O diagnóstico depende da combinação das evidências.

O desenho dos limiares também é uma decisão de responsabilização. Acionar a mitigação tarde demais aumenta o período de indisponibilidade e deixa pouca margem para a reconvergência. Acioná-la a cada variação curta pode gerar custos, instabilidade de rotas ou dependência desnecessária de outro caminho. Um limiar precisa ter base documentada, sinais observáveis, autoridade definida e revisão após o incidente.

No caso de 2018, cinco minutos separaram a detecção inicial do comando de transferência. Outros quatro minutos se passaram até a indicação de recuperação completa. [1] A cronologia oferece medidas concretas para revisão: tempo de detecção, tempo de decisão, tempo de propagação e tempo de confirmação. Ela não informa, porém, se cada intervalo representou o melhor resultado possível diante das condições internas.

O GitHub afirmou que investigaria formas de automatizar a ativação de provedores de mitigação e reduzir a dependência da intervenção humana. [1] A meta era diminuir o tempo médio de recuperação. Isso é plausível porque políticas pré-autorizadas podem agir mais rapidamente que uma sequência manual. Mas o ganho precisa ser comparado ao risco de uma decisão automática incorreta.

Uma operação madura preserva a evidência que levou à ação: quais métricas ultrapassaram limites, quais protocolos estavam presentes, quais serviços falhavam, quem autorizou a mudança e qual rota era esperada. Sem esse registro, uma resposta pode ser rápida, mas não será plenamente explicável nem reproduzível.

A transferência por BGP moveu a alcançabilidade, não os filtros

O BGP permite que sistemas autônomos anunciem como determinados prefixos IP podem ser alcançados. O GitHub identificou o AS36459 em seu relatório e informou ter retirado anúncios dos provedores de trânsito, passando a anunciar as rotas exclusivamente por seus enlaces com a Akamai. [1]

Essa ação alterou o caminho escolhido por redes externas para entregar pacotes aos endereços do GitHub. Antes da transferência, o tráfego alcançava a infraestrutura por caminhos normais de trânsito e peering. Depois da propagação dos novos anúncios, a Akamai passou a receber uma parcela decisiva do tráfego destinado aos prefixos.

O BGP não inspecionou o conteúdo e não classificou pacotes como bons ou ruins. A retirada de rotas não “limpou” a inundação. Ela colocou o tráfego em uma rede onde listas de controle, capacidade de borda e mecanismos de mitigação podiam atuar. A filtragem ocorreu na borda da Akamai; a mudança de alcançabilidade foi comandada pelo GitHub e propagada pelo sistema de roteamento.

Essa separação é central para compreender o resultado. Se a rota mudasse, mas a Akamai não aceitasse os anúncios ou não tivesse capacidade de absorção, o serviço poderia permanecer indisponível. Se os filtros funcionassem, mas os prefixos não convergissem para a rede de mitigação, grande parte do tráfego continuaria chegando pelos caminhos anteriores. Se o tráfego permitido não tivesse um retorno viável ao GitHub, a filtragem não produziria serviço útil.

A convergência é distribuída. O GitHub podia alterar o que anunciava a seus vizinhos, mas não comandava cada roteador da Internet. Redes processavam a mudança, aplicavam políticas próprias e propagavam a rota selecionada. Durante a transição, alguns usuários podiam seguir o caminho antigo enquanto outros já alcançavam a Akamai.

O relatório não expõe comprimentos de prefixo, comunidades BGP, preferência local, arquitetura regional ou política de retorno. Esses detalhes permanecem desconhecidos e não devem ser reconstruídos por suposição. O que está sustentado é a sequência operacional: retirada, anúncio exclusivo à rede de mitigação, reconvergência, filtragem e recuperação observada.

Uma transferência preparada exige mais do que a existência de uma sessão BGP. A organização precisa saber quais prefixos serão deslocados, como o provedor validará os anúncios, qual capacidade está disponível, como o tráfego legítimo retornará e como a rota normal será restabelecida. Também precisa testar falhas parciais: um prefixo omitido, uma região que converge lentamente, uma conexão de retorno saturada ou uma política que bloqueia tráfego legítimo.

A ação de 17:34 reforça esse caráter gradual. Mesmo depois da indicação de recuperação, o GitHub retirou rotas dos pontos de troca para deslocar mais 40 Gbps de sua borda. [1] Recuperar o serviço não encerrou imediatamente a gestão de alcance; a equipe continuou reduzindo caminhos pelos quais a carga ainda chegava diretamente.

Capacidade, controle de rotas e filtragem não são equivalentes

Capacidade de trânsito oferece margem. Ela permite absorver crescimento normal, eventos menores e parte do período necessário para iniciar uma mitigação. Diversidade de peering pode impedir que um único enlace se transforme em ponto único de falha. O GitHub afirmou ter mais que dobrado sua capacidade de trânsito no ano anterior ao incidente. [1]

Ainda assim, capacidade agregada não é sinônimo de resiliência. Uma rede pode ter ampla capacidade no backbone e um enlace de entrada muito menor em uma instalação específica. Um conjunto de filtros pode atingir seu limite antes de a fibra saturar. Uma rede de mitigação pode possuir grande capacidade, mas ser inútil se os prefixos não puderem ser transferidos ou se o retorno limpo for estreito.

Controle de rotas resolve outro problema. Ele determina para onde a Internet entrega o tráfego. Não decide sozinho quais pacotes serão aceitos. Filtragem, por sua vez, classifica e descarta fluxos, mas depende de receber o tráfego e de preservar um caminho para usuários legítimos. A resiliência emerge da coordenação entre os três elementos.

Essa distinção impede conclusões exageradas. Comprar mais trânsito não fecha refletores memcached e não impede falsificação de origem. Retirar anúncios BGP não classifica pacotes. Aplicar antisspoofing em redes de acesso não substitui a preparação do alvo para ataques diretos ou outros vetores. Um serviço seguro por padrão não fornece à vítima capacidade de absorção.

Também não existe capacidade infinita. O padrão razoável não é prometer que qualquer inundação será inofensiva. É conhecer limites, detectar sua aproximação, deslocar tráfego antes de uma falha total, manter funções essenciais e registrar por que a resposta adotada era adequada à situação.

Termos comerciais como “mitigação sempre ativa” tampouco bastam. Eles podem descrever tráfego permanentemente roteado por um provedor, detecção contínua com desvio sob demanda ou apenas uma modalidade contratual. A responsabilização depende do caminho real, do estado de ativação, dos limites medidos e do comportamento quando uma dependência falha.

A entrega de tráfego legítimo é a medida final da mitigação

Descartar tráfego malicioso não resolve o incidente se os usuários continuarem sem acessar o serviço. A mitigação produz dois resultados inseparáveis: rejeição da inundação e entrega das solicitações legítimas. O primeiro costuma receber mais atenção porque o volume bloqueado gera um número expressivo; o segundo é o que determina a experiência do usuário.

Filtros podem utilizar validade de pacotes, comportamento de protocolo, reputação, taxa, desafios ou contexto de aplicação. Cada método pode gerar falsos positivos. Uma regra específica para respostas memcached pode ser precisa naquele vetor. Um bloqueio amplo de UDP pode atingir serviços legítimos. Limites de taxa podem penalizar usuários atrás de redes compartilhadas. Desafios adequados a navegadores podem falhar para APIs.

O GitHub afirmou que listas de controle na borda da Akamai mitigaram o ataque e que os níveis de trânsito e códigos de resposta dos balanceadores indicaram recuperação às 17:30. [1] A evidência permite dizer que o caminho de mitigação restaurou o serviço em nível geral. Não permite afirmar que toda solicitação legítima, em todas as regiões, foi atendida sem impacto.

Uma avaliação mais completa combinaria visibilidade externa das rotas, telemetria de filtragem, carga nos enlaces de origem, latência, taxa de erros e transações sintéticas executadas de diversas redes. Usuários podem continuar enfrentando falhas mesmo quando a média global parece normal. Da mesma forma, um serviço pode se recuperar antes que todas as rotas antigas desapareçam.

O caminho entre a rede de mitigação e a origem também precisa ser protegido. Se todo o tráfego permitido retornar por uma conexão estreita, ela se torna um novo gargalo. Se o servidor de origem continuar alcançável por uma rota não filtrada, o atacante pode contornar a mitigação. Se ida e volta seguirem caminhos incompatíveis com controles de estado, sessões legítimas podem ser descartadas.

O segundo pico, de aproximadamente 400 Gbps, não provocou o mesmo resultado observado no início. [1] Isso indica que o caminho de resposta continuou capaz de lidar com um volume substancial durante aquele período. Não prova imunidade permanente nem garante o mesmo desempenho diante de outro vetor.

A declaração de recuperação deve, portanto, ser sustentada por sinais de rede e de aplicação. Rotas corretas sem transações concluídas não bastam. Filtros ativos sem tráfego limpo entregue não bastam. O objetivo não é apenas sobreviver à inundação nos equipamentos, mas preservar uma experiência operacionalmente aceitável para quem depende do serviço.

Padrões seguros do software e configuração dos operadores

O memcached documenta que o UDP fica desabilitado por padrão a partir da versão 1.5.6 e adverte contra a exposição do serviço a redes não confiáveis. [7][8] A mudança é um exemplo concreto de redução de risco sistêmico por padrão seguro.

Padrões importam porque muitas instalações seguem a configuração inicial por longos períodos. Se uma função perigosa exige ativação explícita, a probabilidade de exposição acidental diminui. A documentação também oferece aos administradores uma referência clara para revisar ambientes existentes.

Mas um padrão novo não repara todas as instalações antigas. Não modifica firewalls permissivos, não atualiza servidores abandonados e não comprova que cada operador entendeu a mudança. O benefício é real e delimitado: instalações novas ou atualizadas têm menor chance de expor inadvertidamente a interface UDP.

Os administradores dos servidores mantinham controles próprios. Um cache destinado à comunicação entre componentes internos geralmente não precisava responder a qualquer endereço da Internet. Restringir a interface de escuta, bloquear UDP na porta 11211, atualizar o software e inventariar a exposição eram medidas capazes de retirar uma instância da população de refletores.

Provedores de hospedagem também podiam contribuir. Eles tinham condições de detectar exposições de alto risco, notificar clientes, manter contatos de abuso e definir medidas emergenciais compatíveis com contratos e legislação. Isso não significa bloquear silenciosamente todos os serviços UDP. Significa saber quais situações exigem comunicação rápida, quais evidências são necessárias e quais ações são tecnicamente reversíveis.

A existência de um refletor não demonstra intenção maliciosa. Uma instância podia resultar de configuração antiga, desconhecimento ou erro. Da mesma forma, a presença de um endereço em telemetria não identifica automaticamente o proprietário operacional nem estabelece negligência. A responsabilização adequada procura evidência da exposição, da capacidade de correção e do tempo de resposta, preservando a diferença entre falha operacional e intenção.

O provedor de mitigação passou a integrar o caminho crítico

Ao transferir os anúncios para a Akamai, o GitHub tornou a infraestrutura do parceiro parte de seu caminho de serviço. A capacidade, os filtros, os sistemas de controle e os enlaces de retorno da Akamai passaram a influenciar diretamente a disponibilidade percebida pelos usuários.

Essa dependência não é necessariamente uma fragilidade. Pode ser uma decisão responsável quando é intencional, testada e observável. Uma rede especializada pode manter capacidade e conhecimento que não seria econômico reproduzir em cada empresa. O risco aparece quando o cliente não consegue comprovar que o parceiro aceitará as rotas, suportará o volume ou devolverá tráfego legítimo em condições degradadas.

Um acordo operacional precisa antecipar perguntas práticas: quais prefixos estão autorizados, quem pode acionar a transferência, qual evidência confirma que o provedor recebeu a rota, como a filtragem é observada, qual capacidade de retorno está disponível e como ocorre a saída da mitigação. O registro público não revela as respostas específicas do contrato entre GitHub e Akamai.

A responsabilização não exige publicação de métodos de filtragem que ajudariam atacantes, nem exposição de topologia privada. Exige que as organizações envolvidas consigam demonstrar internamente que a transferência foi autorizada, que o caminho estava saudável e que a recuperação foi medida. Um resumo público pode apresentar a sequência e os resultados sem divulgar controles sensíveis.

A operação também precisa considerar falhas do próprio provedor. Uma sessão de roteamento pode cair, um filtro pode bloquear usuários legítimos, uma região pode ficar sem capacidade ou uma conexão limpa pode se tornar gargalo. Exercícios que testam apenas a situação ideal não mostram como a organização reagirá a esses estados parciais.

O incidente evidenciou uma transferência de responsabilidade operacional em tempo real. O GitHub permaneceu responsável pela decisão de mover seus anúncios e por verificar o serviço. A Akamai assumiu o processamento do tráfego que passou a chegar à sua borda. As funções se complementaram, mas não se confundiram.

A automação deve reduzir o tempo sem esconder a autoridade

Após o incidente, o GitHub afirmou que investigaria o uso de sua infraestrutura de monitoramento para automatizar a ativação de provedores de mitigação e reduzir a dependência da intervenção humana. [1] A motivação é clara: minutos de espera podem representar grande quantidade de solicitações fracassadas e pressão adicional sobre a operação.

Automação, entretanto, não é responsável apenas por ser rápida. O sistema precisa saber quais sinais justificam a ação, quais prefixos pode alterar, se o caminho do provedor está saudável e como confirmar que a mudança produziu o resultado esperado. Um falso positivo não deve transformar uma anomalia local em perda global de alcançabilidade.

Um desenho delimitado separa detecção, recomendação e execução. A detecção coleta sinais. Uma política pode recomendar a transferência quando métricas independentes convergem. A execução automática pode ser permitida para vetores conhecidos, prefixos previamente autorizados e limites testados. Condições desconhecidas podem exigir confirmação humana.

A autoridade precisa ser explícita. Devem existir listas atualizadas de prefixos, vizinhos permitidos, limites de anúncio e controles que restrinjam erros. O sistema deve registrar qual condição disparou, qual rota foi alterada, quem aprovou a política e quais observadores externos confirmaram a mudança. Um operador também precisa conseguir interromper ou reverter a ação.

A automação necessita de uma estratégia de retorno. Retirar a mitigação cedo demais pode expor o serviço a uma segunda onda. Mantê-la indefinidamente pode aumentar latência, custo ou dependência. A política deve definir um período estável de observação, retorno gradual e possibilidade de reativação caso o caminho direto se deteriore.

A confirmação não pode depender apenas do roteador que enviou o anúncio. É preciso observar como as rotas aparecem de fora, se a rede de mitigação recebe o tráfego, se a origem permanece dentro de limites seguros e se operações de aplicação são concluídas. Uma configuração local bem-sucedida pode coexistir com propagação incompleta ou filtros inadequados.

A supervisão humana continua necessária porque ataques DDoS são adaptativos. O atacante pode mudar protocolo, tamanho de pacote, destino ou ritmo. Uma regra otimizada para respostas memcached pode não servir para um vetor direto. Operadores precisam ajustar a estratégia, mas devem fazê-lo por controles ensaiados e registrados, não por improvisação invisível.

A melhor automação não elimina a responsabilidade humana; ela torna a autoridade previamente definida e a execução mais verificável. Reduz o tempo de resposta ao mesmo tempo que melhora o registro necessário para entender por que a decisão foi tomada.

Divulgação de incidentes também é um controle de rede

O relatório do GitHub foi útil porque publicou fatos operacionais: horários em UTC, taxa de bits, taxa de pacotes, o AS36459, a ação de retirada de rotas, o parceiro de mitigação e os sinais de recuperação. [1] Isso permite que outros operadores comparem a sequência com seus próprios planos.

Uma divulgação pública não precisa expor todos os detalhes. Regras exatas de filtragem podem ajudar o adversário. Topologia privada, comunicações internas, dados de clientes e termos contratuais podem exigir confidencialidade. Responsabilização não significa transparência irrestrita em tempo real.

Ela exige, porém, informação suficiente para distinguir causa, ação e resultado. Dizer apenas que “um ataque sofisticado foi mitigado” não informa quando o problema foi detectado, qual controle mudou ou como a recuperação foi confirmada. Um relato delimitado pode indicar vetor, escala observada, intervalo de impacto, ação principal e trabalho corretivo.

Observação e inferência também devem permanecer separadas. O GitHub descreveu o que mediu e fez. A Cloudflare analisou o potencial de amplificação do protocolo. A CISA catalogou o memcached como vetor de reflexão. A CAIDA mede a possibilidade de spoofing em redes. [1][3][6][14] Nenhuma dessas fontes, isoladamente, identifica todos os servidores ou redes envolvidos no ataque específico.

Combinar as fontes explica o mecanismo, mas não cria atribuição individual. Um servidor que respondeu a uma solicitação forjada pode estar mal configurado, comprometido ou conscientemente exposto; o pacote não comprova intenção. Uma rede observada no caminho pode ser trânsito, não origem. O registro deve apoiar correções sem transformar telemetria incompleta em acusação.

A divulgação posterior ajuda o ecossistema a agir. Administradores podem buscar a porta exposta, atualizar padrões, testar validação de origem e preparar transferências de rota. O valor é maior quando o relato indica o que foi medido e o que continua desconhecido. Precisão encoraja mudanças concretas; exagero incentiva contestação defensiva.

Uma matriz prática de responsabilização

Para o GitHub, os artefatos essenciais incluíam alertas de anomalia, taxas de tráfego, autoridade para acionar a mitigação, registros dos comandos de rota, visibilidade da convergência e sinais de aplicação. O relatório público demonstra partes dessa cadeia. Os limiares e exercícios internos não estão disponíveis.

Para a Akamai, os controles relevantes eram a aceitação dos anúncios, a capacidade de absorção, a filtragem na borda e a entrega do tráfego permitido. A recuperação relatada sustenta que o caminho funcionou durante o evento. Não informa os métodos exatos nem a taxa de falsos positivos.

Para os mantenedores do memcached, o controle estava nos padrões e na documentação. Desabilitar UDP por padrão e advertir contra exposição pública reduziu a probabilidade de novas implantações inseguras. [7][8] Esse avanço não comprova a correção de todo o legado.

Para operadores de instâncias, os artefatos seriam inventários de exposição, configuração das interfaces, regras de firewall, versão do software e resposta a notificações. Um serviço destinado a uma rede privada deve ter uma justificativa clara se estiver acessível globalmente.

Para redes de acesso, a evidência seria uma política de validação de origem vinculada a registros corretos de prefixos, testes de spoofing, monitoramento de descartes e tratamento das necessidades de clientes multihomed. BCP 38 e BCP 84 fornecem referências, mas a prática precisa ser demonstrada localmente. [9][10]

Para hospedagem, trânsito e interconexão, os controles incluem canais de abuso funcionais, capacidade de localizar o cliente responsável, preservação de telemetria e procedimentos proporcionais para conter uma fonte de dano. Nenhum desses participantes controla sozinho todo o fluxo.

Para o ecossistema, projetos de medição e compromissos operacionais ajudam a comparar práticas. CAIDA e MANRS tornam a validação de origem mais verificável e comunicável. [14][15] Seu papel é produzir visibilidade e orientação, não emitir uma conclusão jurídica sobre o ataque.

A matriz evita julgamentos binários. O GitHub podia estar preparado para mover rotas enquanto o ecossistema permanecia fraco no controle de spoofing. O memcached podia adotar um padrão melhor enquanto servidores antigos continuavam expostos. A Akamai podia filtrar com sucesso sem que todos os usuários tivessem uma experiência idêntica.

Progresso em um domínio deve ser reconhecido sem declarar que o problema inteiro foi resolvido. A responsabilização se torna útil quando cada participante consegue apresentar artefatos compatíveis com a autoridade que possuía, os limites que enfrentava e as mudanças que implementou.

O que as fontes públicas não demonstram

As fontes não identificam o atacante. O relatório do GitHub não fornece atribuição definitiva, e não é legítimo importar identidades de outros incidentes ou casos envolvendo botnets. O mecanismo via memcached não revela quem escolheu o alvo ou gerou as solicitações.

Também não existe no conjunto público uma lista completa de refletores e proprietários. Não se sabe, a partir dessas fontes, quais sistemas autônomos hospedavam cada servidor, quais redes carregaram as solicitações falsificadas nem qual política de validação estava ativa em cada borda. Medições gerais não podem ser aplicadas retroativamente sem correspondência temporal.

A política privada de roteamento do GitHub permanece desconhecida. Não há base para afirmar quais comunidades BGP, comprimentos de prefixo, preferências ou salvaguardas foram usados além das ações descritas publicamente. Da mesma forma, não se conhecem as condições contratuais, os limites comerciais ou a arquitetura de retorno da Akamai.

O pico de 1,35 Tbps não prova que todos os equipamentos processaram essa taxa. A localização da medição importa. Os 126,9 Mpps não identificam qual componente limitou o serviço. O impacto e a recuperação são observáveis; a causa interna de cada falha não está totalmente exposta.

Não há quantificação pública de prejuízo individual de clientes. A indisponibilidade de uma plataforma de desenvolvimento pode afetar projetos e operações, mas atribuir um valor financeiro sem evidência seria especulativo. Também não há uma conclusão pública de negligência ou responsabilidade jurídica.

O segundo pico de 400 Gbps não demonstra imunidade permanente. Mostra apenas que, sob as condições observadas depois da transferência, aquele volume não reproduziu a interrupção inicial. Vetores, capacidade, filtros e dependências mudam.

Esses limites fortalecem a análise. Em vez de preencher lacunas com suposições, eles delimitam as perguntas que uma investigação interna deveria responder: quais refletores foram observados, quais redes permitiam spoofing, quais limiares acionaram a mudança, como o tráfego legítimo foi medido e quais dependências permaneceram frágeis.

O registro mínimo para futuros ataques volumétricos

Um registro útil começa antes do incidente. A organização deve manter inventário dos prefixos que podem ser desviados, dos enlaces envolvidos, das autorizações do provedor e da capacidade de retorno. Exercícios precisam registrar tempo de ativação, convergência observada e comportamento das aplicações.

Durante o ataque, o registro deve preservar taxas de bits e de pacotes, protocolos, portas, destinos afetados, distribuição das origens observadas e indicadores de impacto. Os dados precisam ter horários coerentes para que decisões de rede sejam relacionadas a mudanças no serviço.

A decisão de ativar a mitigação deve registrar o limiar atingido, a autoridade que aprovou a ação, os prefixos afetados e o estado do provedor. Se a ação for automática, a política e a versão que a autorizou devem ser recuperáveis.

A fase de roteamento deve incluir os anúncios retirados e introduzidos, a visibilidade externa das rotas e os desvios encontrados. O objetivo não é publicar detalhes sensíveis, mas permitir que a organização determine se a mudança ocorreu como planejado.

A mitigação deve produzir evidência de volume recebido, tráfego descartado e tráfego permitido. Esses números precisam ser interpretados junto com transações de aplicação, latência e erros. Um grande volume bloqueado não é sucesso se o serviço continuar inacessível.

A recuperação deve registrar quando as rotas, os enlaces e os aplicativos atingiram níveis estáveis. Também deve documentar o segundo pico ou mudanças de vetor. O encerramento da mitigação precisa ser tratado como outra transição controlada.

Por fim, a revisão deve separar fatos conhecidos, inferências e desconhecidos. Deve ligar cada recomendação a uma falha observada ou a uma lacuna de evidência. Esse formato permite verificar se as mudanças posteriores realmente reduziram tempo de resposta, exposição e dependência.

O padrão adequado é continuidade demonstrável

Nenhuma rede pode garantir defesa perfeita contra qualquer ataque. Adversários podem reunir mais capacidade, explorar outros protocolos, atingir dependências ou migrar de volume para exaustão em camada de aplicação. Exigir invulnerabilidade seria um padrão impossível e incentivaria promessas vagas.

Um padrão mais útil é a continuidade demonstrável sob condições definidas. O operador precisa conhecer limites do caminho direto, tempo de ativação, hipóteses de convergência, capacidade de retorno e sondas críticas. Precisa testar a transferência e registrar exceções.

Para redes de acesso, continuidade demonstrável inclui comprovar que clientes não conseguem emitir pacotes com origens não autorizadas sem bloquear topologias legítimas. Para provedores de hospedagem, inclui localizar exposições de alto risco e contatar responsáveis. Para projetos de software, inclui padrões seguros e documentação explícita.

O padrão também reconhece compensações. Filtros rígidos podem prejudicar redes assimétricas se forem mal implantados. Regras agressivas de DDoS podem bloquear usuários. Desvios podem aumentar latência e dependência. Desabilitar um protocolo pode afetar aplicações existentes. Operação responsável registra essas consequências e usa controles proporcionais.

É nesse ponto que responsabilização se distingue de culpa. Culpa procura um ator a quem atribuir o dano. Responsabilização pergunta quem controlava uma decisão, quais evidências a sustentaram, quais limites existiam, como o resultado foi observado e o que mudou depois.

O ataque ao GitHub torna essa estrutura visível. Instâncias expostas produziram respostas amplificadas. Endereços falsificados redirecionaram essas respostas. O monitoramento detectou a inundação. A autoridade de roteamento transferiu a alcançabilidade. A Akamai filtrou o fluxo. Os indicadores do serviço confirmaram a recuperação.

Cada etapa pode ser testada. Nenhuma explica sozinha todo o incidente. A resiliência surge quando os controles se sobrepõem e os registros permitem verificar a transição entre eles.

Conclusão

O ataque via memcached sofrido pelo GitHub em 2018 foi mais do que um marco de volume. Ele testou, sob pressão, como a autoridade de rede se desloca. O GitHub detectou uma relação anormal entre entrada e saída, retirou anúncios normais do AS36459, direcionou a alcançabilidade para a Akamai e declarou recuperação após reconvergência, filtragem e melhora dos sinais de aplicação. [1]

O mecanismo expôs uma cadeia distribuída. Servidores memcached públicos ampliavam respostas. Pacotes com origem forjada desviavam essas respostas para a vítima. Redes transportavam o tráfego. GitHub e Akamai precisavam preservar a alcançabilidade enquanto rejeitavam a inundação. Padrões de software, configuração de servidores, antisspoofing, trânsito, BGP, capacidade de mitigação e entrega limpa tinham funções diferentes.

Nenhum controle isolado resolveria tudo. Mais trânsito não fecharia refletores. A retirada de anúncios não filtraria pacotes. BCP 38 e BCP 84 não configurariam servidores nem substituiriam a mitigação. Um padrão mais seguro do memcached não atualizaria todo o legado. A Akamai não poderia agir sem uma transferência preparada.

O padrão de responsabilização deve ser uma cadeia de evidências. Alvos precisam mostrar quando detectaram o dano, quem podia mover rotas, como verificaram o caminho de mitigação e quais sinais comprovaram a recuperação. Provedores precisam demonstrar filtragem e entrega legítima. Operadores de servidores precisam controlar exposição. Redes de acesso precisam validar origem. Projetos de software precisam oferecer padrões seguros.

O relatório do GitHub tornou partes importantes dessa cadeia visíveis sem fingir que todos os desconhecidos haviam sido resolvidos. Essa é a lição duradoura: resiliência de rede é crível quando as organizações com controle prático conseguem demonstrar como mediram o tráfego, como transferiram autoridade, como protegeram usuários legítimos e como reduziram as condições que tornaram o ataque possível.

Fontes

  1. https://github.blog/news-insights/company-news/ddos-incident-report/
  2. https://github.blog/news-insights/the-library/denial-of-service-attacks/
  3. https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
  4. https://blog.cloudflare.com/the-root-cause-of-large-ddos-ip-spoofing/
  5. https://blog.cloudflare.com/the-rise-of-multivector-amplifications/
  6. https://www.cisa.gov/ncas/alerts/ta14-017a
  7. https://docs.memcached.org/advisories/ddos/
  8. https://github.com/memcached/memcached/wiki/ConfiguringServer
  9. https://datatracker.ietf.org/doc/rfc2827/
  10. https://datatracker.ietf.org/doc/rfc3704/
  11. https://datatracker.ietf.org/doc/rfc4948/
  12. https://www.akamai.com/site/en/documents/brochure/memcached-reflection-attacks-launch-a-new-era-for-ddos-brochure.pdf
  13. https://www.akamai.com/site/en/documents/state-of-the-internet/soti-summer-2018-attack-spotlight.pdf
  14. https://www.caida.org/projects/spoofer/
  15. https://docs.manrs.org/docs/network-guide/anti-spoofing/
  16. https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/
  17. https://www.cloudflare.com/learning/ddos/famous-ddos-attacks/
  18. https://www.ietf.org/archive/id/draft-qin-savnet-incentive-00.html