DDOS é uma família de ataques que sobrecarrega os principais sistemas do datacenter, incluindo:
- A conexão de rede do centro de hospedagem com a internet
- A rede interna e os roteadores do centro de hospedagem
- Seu firewall e balanceadores de carga
- Seus servidores web, servidores de aplicativos e banco de dados.
Antes de começar a construir sua defesa DDOS, considere qual é o valor em risco de pior caso. Para um serviço não crítico e gratuito para uma pequena comunidade, o valor total em risco pode ser amendoim. Para um sistema pago, voltado para o público e de missão crítica para um negócio estabelecido de bilhões de dólares, o valor pode ser o valor da empresa. Neste último caso, você não deve usar StackExchange :) De qualquer forma, para se defender contra DDOS, você precisa de uma abordagem de defesa em profundidade:
- Trabalhe com seu centro de hospedagem para entender os serviços que eles oferecem, incluindo IP e filtragem de porta em suas conexões de rede com a Internet e serviços de firewall que oferecem. Isso é crítico: muitos sites são retirados da Internet pela empresa de hospedagem, pois a empresa de hospedagem lida com a interrupção de todo o data center causada pelo DDoS para um cliente. Além disso, durante um ataque DDOS, você trabalhará em estreita colaboração com a equipe do centro de hospedagem, portanto, conheça seus números de emergência e mantenha uma boa relação com eles :) Eles devem ser capazes de bloquear regiões internacionais inteiras, bloquear completamente serviços ou redes específicas protocolos e outras medidas defensivas de amplo espectro ou, alternativamente, permitir apenas IPs da lista de permissões (dependendo do seu modelo de negócios)
- Enquanto estiver no centro de hospedagem - use uma Content Delivery Network para distribuir serviços (principalmente estáticos) perto de seus usuários finais e esconder seus servidores reais dos arquitetos DDOS. O CDN completo é muito grande para um DDOS remover todos os nós em todos os países; se o DDOS se concentra em um país, pelo menos outros usuários ainda estão OK.
Mantenha todos os seus sistemas e pacotes de software atualizados com os patches de segurança mais recentes - e todos eles:
- Switches gerenciados - sim, eles às vezes precisam ser atualizados
- Roteadores
- Firewalls
- Balanceadores de carga
- Sistemas operacionais
- Servidores web
- Línguas e suas bibliotecas
Certifique-se de ter um bom firewall ou dispositivo de segurança configurado e regularmente revisado por um especialista em segurança qualificado . Regras fortes no firewall são uma boa defesa contra muitos ataques simples. Também é útil ser capaz de gerenciar a largura de banda disponível para cada serviço aberto.
Tenha boas ferramentas de monitoramento de rede - isso pode ajudá-lo a entender:
- Que você está sob ataque, em vez de simplesmente estar sob carga pesada
- De onde vem o ataque (o que pode incluir países com os quais você normalmente não faz negócios) e
- O que o ataque realmente é (portas, serviços, protocolos, IPs e conteúdo de pacote)
O ataque pode ser simplesmente o uso pesado de serviços de sites legítimos (por exemplo, acessando URIs 'legais' executando consultas ou inserindo / atualizando / excluindo dados) - milhares ou milhões de solicitações provenientes de dezenas a milhões de endereços IP diferentes trarão um site para seu joelhos. Como alternativa, alguns serviços podem ser tão caros para executar que apenas algumas solicitações causam um DOS - pense em um relatório realmente caro. Portanto, você precisa de um bom monitoramento no nível do aplicativo do que está acontecendo:
- Quais serviços foram invocados e quais argumentos / dados são enviados (ou seja, registrar em seu aplicativo)
- Quais usuários estão fazendo a invocação e de quais IPs (ou seja, logando em seu aplicativo)
- Quais consultas e inserções / atualizações / exclusões o banco de dados está executando
- Média de carga, utilização de CPU, i / o de disco, tráfego de rede em todos os computadores (e VMs) em seu sistema
- Certifique-se de que todas essas informações sejam facilmente recuperáveis e que você possa correlacionar os logs de diferentes computadores e serviços (ou seja, certifique-se de que todos os computadores estejam sincronizados com o tempo usando o ntp).
Restrições e limites sensatos em sua aplicação . Por exemplo, você pode:
- Use um recurso de QoS no balanceador de carga para enviar todas as sessões anônimas para separar servidores de aplicativos em seu cluster, enquanto os usuários conectados usam outro conjunto. Isso evita que um DDOS anônimo em nível de aplicativo tire clientes valiosos
- Usando um CAPCHA forte para proteger serviços anônimos
- Tempo limite de sessão
- Tenha um limite de sessão ou limite de taxa em certos tipos de solicitação, como relatórios. Certifique-se de que você pode desligar o acesso anônimo, se necessário
- Certifique-se de que um usuário tenha um limite para o número de sessões simultâneas (para evitar que uma conta invadida se conecte um milhão de vezes)
- Ter diferentes usuários de aplicativos de banco de dados para diferentes serviços (por exemplo, uso transacional vs. uso de relatórios) e usar o gerenciamento de recursos de banco de dados para evitar que um tipo de solicitação da web sobrecarregue todos os outros
- Se possível, torne essas restrições dinâmicas ou pelo menos configuráveis. Dessa forma, enquanto você está sob ataque, você pode definir limites temporários agressivos no local ('estrangulando' o ataque), como apenas uma sessão por usuário e nenhum acesso anônimo. Isso certamente não é ótimo para seus clientes, mas muito melhor do que não ter nenhum serviço.
Por último, mas não menos importante, escreva um documento do Plano de Resposta do DOS e faça com que ele seja revisado internamente por todas as partes relevantes: Negócios, Gerenciamento, a equipe de desenvolvimento de SW, a equipe de TI e um especialista em segurança. O processo de redação do documento fará com que você e sua equipe reflitam sobre os problemas e os ajudem a se preparar caso o pior aconteça às 3 da manhã do seu dia de folga. O documento deve abranger (entre outras coisas):
- O que está em risco e o custo para o negócio
- Medidas tomadas para proteger os ativos
- Como um ataque é detectado
- A resposta planejada e o procedimento de escalonamento
- Processos para manter o sistema e este documento atualizados
Portanto, preâmbulo à parte, aqui estão algumas respostas específicas:
DDoS geralmente são bloqueados no nível do servidor, certo?
Na verdade, não - a maioria dos piores ataques DDOS são de baixo nível (no nível do pacote IP) e são tratados por regras de roteamento, firewalls e dispositivos de segurança desenvolvidos para lidar com ataques DDOS.
Existe uma maneira de bloqueá-lo em um nível de PHP, ou pelo menos reduzi-lo?
Alguns ataques DDOS são direcionados ao próprio aplicativo, enviando URIs e solicitações HTTP válidas. Quando a taxa de solicitações aumenta, seu (s) servidor (es) começam a ter problemas e você terá uma interrupção do SLA. Nesse caso, existem coisas que você pode fazer no nível do PHP:
Monitoramento no nível do aplicativo: certifique-se de que cada solicitação de registro de serviço / página de uma forma que você possa ver o que está acontecendo (para que você possa tomar medidas para mitigar o ataque). Algumas ideias:
Tenha um formato de registro que você possa carregar facilmente em uma ferramenta de registro (ou Excel ou similar) e analisar com ferramentas de linha de comando (grep, sed, awk). Lembre-se de que um DDOS gerará milhões de linhas de registro. Você provavelmente precisará fatiar e cortar seus logs (especialmente com relação ao URI, tempo, IP e usuário) para descobrir o que está acontecendo e precisa gerar dados como:
- Quais URIs estão sendo acessados
- Quais URIs estão falhando em uma taxa alta (um provável indicador dos URIs específicos que os invasores estão atacando)
- Quais usuários estão acessando o serviço
- De quantos IPs cada usuário acessa o serviço de
- Quais URIs são acessados por usuários anônimos
- Quais argumentos estão sendo usados para um determinado serviço
- Auditar ações de usuários específicos
Registre o endereço IP de cada solicitação. NÃO reverta o DNS - ironicamente, o custo de fazer isso torna um DDOS mais fácil para os invasores
- Registre todo o URI e método HTTP, por exemplo, "GET http://example.com/path/to/service?arg1=ddos "
- Registre a ID do usuário, se presente
- Registrar argumentos HTTP importantes
Limites de taxa razoáveis: você pode implementar limites de quantas solicitações um determinado IP ou usuário pode fazer em um determinado período de tempo. Um cliente legítimo poderia fazer mais de 10 solicitações por segundo? Os usuários anônimos podem acessar relatórios caros?
CAPTCHA para acesso anônimo: implemente um CAPTCHA para todas as solicitações anônimas para verificar se o usuário é uma pessoa, não um bot DDOS.
Qual é a maneira mais rápida e comum de interromper os ataques DDOS?
O mais rápido provavelmente é ceder à chantagem, embora isso possa não ser desejável.
Caso contrário, a primeira coisa a fazer é entrar em contato com seu provedor de hospedagem e / ou CDN e trabalhar com eles (se eles ainda não o contataram perguntando o que diabos está acontecendo ...). Quando ocorre um DDOS, provavelmente afetará colateralmente outros clientes do provedor de hospedagem, e o provedor pode estar sob pressão considerável para encerrar seu site simplesmente para proteger seus recursos. Esteja preparado para compartilhar seus logs (toda e qualquer informação) com o provedor; esses logs, combinados com seus monitores de rede, podem, juntos, fornecer informações suficientes para bloquear / mitigar o ataque.
Se você está esperando um DDOS, é uma boa ideia qualificar seu provedor de hospedagem no nível de proteção que ele pode oferecer. Eles devem ter experiência em DDOS e ferramentas para mitigá-lo - compreender suas ferramentas, processos e procedimentos de escalonamento. Também pergunte sobre o suporte que o provedor de hospedagem tem de seus provedores upstream. Esses serviços podem significar um custo inicial ou mensal, mas trate isso como uma apólice de seguro.
Enquanto estiver sob ataque, você precisará pegar seus logs e extraí-los - tente descobrir o padrão do ataque. Você deve considerar desligar o acesso anônimo e limitar os serviços sob ataque (ou seja, diminuir o limite de taxa do aplicativo para o serviço).
Se tiver sorte e você tiver uma base de clientes pequena e fixa, poderá determinar os endereços IP válidos de seus clientes. Se for esse o caso, você pode mudar para uma abordagem de lista branca por um curto período. Certifique-se de que todos os seus clientes saibam que isso está acontecendo para que possam ligar se precisarem de acesso de um novo IP :)
Doug McClean tem ótimos conselhos em: https://stackoverflow.com/a/1029613/1395668