Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 13773|Resposta: 0

[Tutorial de Segurança] Ataques SYN Flood, defesa de cookies SYN e modificação de parâmetros do kernel para Linux/FreeBSD

[Copiar link]
Publicado em 27/10/2014 21:37:19 | | |

HackerÉ uma carreira desejável e promissora. Eu aprecio hackers bons e odeio hackers ruins. O chamado hacker mau é o tipo de cara que faz alguém do outro lado fazer hora extra.

    Ataques SYN Flood são um ataque típico de negação de serviço. O chamado ataque de negação de serviço é para alcançar indiretamente o propósito do ataque ao tornar o host ou a rede vítima incapaz de fornecer um bom serviço. Hackers gostam de jogar isso para mostrar que são equilibrados, capazes e corajosos, fazendo o outro lado trabalhar horas extras, mas, na verdade, não é nada.

   1: O que é um ataque SYN Flood?

    Os ataques SYN Flood aproveitam o processo de handshake triplo do protocolo TCP no IPv4. Esse protocolo estipula que, se uma extremidade quiser iniciar uma conexão TCP para a outra extremidade, ela precisa primeiro enviar um pacote TCP SYN (synchronize) para a outra parte, e a outra parte envia um pacote TCP SYN + ACK de volta após recebê-lo, e então o iniciador envia um pacote TCP ACK (ACKnowledge Character) de volta, de modo que os três handshakes terminem.

    No processo acima, há alguns conceitos importantes:

    A fila não está conectada: No protocolo de handshake de três vias, o servidor mantém uma fila não conectada que abre uma entrada para cada pacote SYN do cliente (syn=j) que indica que o servidor recebeu o pacote SYN e emite uma confirmação ao cliente, aguardando o pacote de confirmação do cliente. A conexão identificada por essas entradas está em estado Syn_RECV no servidor, e quando o servidor recebe um pacote de confirmação do cliente, a entrada é deletada e o servidor entra no estado ESTABELECIDO. Em outras palavras, quando o servidor TCP recebe o pacote de requisição TCP SYN, antes de enviar o pacote TCP SYN+ACK de volta ao cliente TCP, o servidor TCP deve primeiro alocar uma área de dados para atender à conexão TCP formada por essa mão. Geralmente, o estado de conexão é quando o pacote SYN é recebido, mas o pacote ACK ainda não foi recebidoConexão semiaberta(Conexão meio aberta)。

    Parâmetro de backlog: Indica o número máximo de filas desconectadas.

    Número de retransmissões SYN-ACK: Após o servidor enviar o pacote SYN-ACK, se o pacote de confirmação do cliente não for recebido, o servidor realiza a primeira retransmissão, espera por um período de tempo e não recebe o pacote de confirmação do cliente, e realiza a segunda retransmissão; se o número de retransmissões exceder o número máximo especificado pelo sistema, o sistema exclui as informações de conexão da fila semi-conexão. Note que o tempo de espera para cada repasse não é necessariamente o mesmo.

    Tempo de sobrevivência semi-conectado: Refere-se ao tempo máximo que uma entrada na fila semi-conexão sobrevive, ou seja, o tempo máximo desde o momento em que o serviço recebe o pacote SYN até o momento em que o pacote é confirmado como inválido, e o valor do tempo de tempo é a soma do tempo máximo de espera para todos os pacotes de retransmissão solicitados. Às vezes também chamamos de tempo de sobrevivência semi-conectado, SYN_RECV tempo de sobrevivência.

    No ataque de inundação SYN mais comum, o atacante envia um grande número de pacotes TCP SYN para a vítima em um curto período de tempo, momento em que o atacante é o cliente TCP e a vítima é o servidor TCP. De acordo com a descrição acima, a vítima atribuiria uma zona de dados específica a cada pacote TCP SYN, desde que os pacotes SYN tivessem endereços de origem diferentes (o que seria fácil para atacantes falsificarem). Isso vai sobrecarregar bastante o sistema de servidor TCP e, eventualmente, fazer com que o sistema não funcione direito.

    2. O princípio dos cookies SYN

    Uma das formas de prevenir efetivamente ataques SYN Flood são os cookies SYN. Motivo D. Cookie SYN. Inventado por J. Bernstain e Eric Schenk.

    Cookies SYN são uma modificação do protocolo TCP de handshake triplo do lado do servidor para prevenir ataques SYN Flood.Seu princípio é:Quando o servidor TCP recebe um pacote TCP SYN e retorna um pacote TCP SYN+ACK, ele não aloca uma área de dados dedicada, mas calcula um valor de cookie com base nesse pacote SYN. Quando um pacote TCP ACK é recebido, o servidor TCP verifica a legitimidade do pacote TCP ACK com base nesse valor de cookie. Se legal, uma área de dados dedicada é alocada para gerenciar futuras conexões TCP.

    Vamos falar sobre como configurar parâmetros do kernel para implementar cookies SYN no Linux e FreeBSD

    Três: Configurações Linux

    Se a configuração do seu servidor não for boa, o número de sockets TIME_WAIT TCP chega a 20.000 ou 30.000, e o servidor pode facilmente ser arrastado até a exaustão. Ao modificar os parâmetros do kernel do Linux, o número de soquetes de TIME_WAIT no servidor pode ser reduzido.

    TIME_WAIT pode ser visualizado com o seguinte comando:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Copiar código

No Linux, como o CentOS, você pode conseguir isso modificando o arquivo /etc/sysctl.conf.

    Adicione as seguintes linhas:

  1. 以下是代码片段:
  2. net.ipv4.tcp_fin_timeout = 30
  3. net.ipv4.tcp_keepalive_time = 1200
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_tw_recycle = 1
  7. net.ipv4.ip_local_port_range = 1024    65000
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_synack_retries = 2
  11. net.ipv4.tcp_syn_retries = 2
Copiar código

Ilustrar:

net.ipv4.tcp_syncookies = 1 significa que os cookies SYN estão habilitados, o que é um BOOLEANO. Quando o SYN espera a fila transbordar, permita que cookies lidiem com isso, o que pode evitar um pequeno número de ataques SYN, e o padrão é 0, o que significa que está fechado.
net.ipv4.tcp_tw_reuse = 1 significa que o reuso está ativado, o que é um BOOLEANO. Permite reutilizar soquetes TIME-WAIT para novas conexões TCP, com padrão em 0, indicando fechamento;
net.ipv4.tcp_tw_recycle = 1 significa permitir a reciclagem rápida de sockets TIME-WAIT em conexões TCP, que é BOOLEANO, e o padrão é 0, o que significa que está fechado.
net.ipv4.tcp_fin_timeout = 30 significa que, se o socket for fechado por uma solicitação local, esse parâmetro determina por quanto tempo permanecerá no estado FIN-WAIT-2. A unidade é de segundos.
net.ipv4.tcp_keepalive_time = 1200 indica com que frequência o TCP envia mensagens keepalive quando o keepalive é utilizado. O padrão é 2 horas, alterado para 20 minutos. A unidade é de segundos.
net.ipv4.ip_local_port_range = 1024 65000 indica o alcance das portas usadas para conexões externas. O caso padrão é pequeno: 32768 para 61000, alterado para 1024 para 65000.
net.ipv4.tcp_max_syn_backlog = 8192 indica o comprimento da fila SYN, que é 1024 por padrão, e o comprimento da fila aumentada é 8192 para acomodar mais conexões de rede aguardando conexão.
net.ipv4.tcp_max_tw_buckets = 5000 indica o número máximo de soquetes que o sistema mantém ao mesmo tempo TIME_WAIT e, se esse número for ultrapassado, TIME_WAIT soquetes serão imediatamente apagados e uma mensagem de aviso será impressa. O padrão é 180.000, alterado para 5.000. Para servidores como Apache e Nginx, os parâmetros nas linhas anteriores podem reduzir TIME_WAIT o número de sockets, mas para o Squid, o efeito não é bom. Esse parâmetro controla o número máximo de soquetes TIME_WAIT para evitar que o servidor Lula seja arrastado por um grande número de soquetes TIME_WAIT.
net.ipv4.tcp_synack_retries e net.ipv4.tcp_syn_retries definem o número de tentativas SYN.

Execute o seguinte comando para que a configuração entre em vigor:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Copiar código

Se você não quiser modificar /etc/sysctl.conf, também pode usar o comando para isso:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Copiar código

Quarto, configurado sob FreeBSD

    Ponto de vista pessoal de aprendizado do yayu: a defesa contra syn no FreeBSD pode não ser a mesma do Linux, os parâmetros configurados não são exatamente os mesmos, e a configuração e compreensão relevantes podem não estar corretas :)

    Há um no link TCPMSL (vida útil máxima do segmento)O conceito deTempo máximo de geraçãoO valor MSL é tomado por 30 segundos em implementações gerais, e algumas levam 2 minutos. "Desligamento passivo" na máquina de estados TCP: De CLOSE_WAIT a LAST_ACK, existe uma regra da seguinte forma: Quando o TCP realiza um desligamento ativo e envia de volta o último ACK, a conexão deve permanecer no estado TIME_WAIT por duas vezes mais tempo que o MSL. Isso permite que o TCP envie novamente o último ACK caso ele seja perdido (a outra extremidade expira e reenvia o último FIN).

    A existência dessa regra tem como consequência que o link (endereço do cliente, porta e endereço do lado do servidor, porta) nesse endereço não pode ser usado durante esse tempo de 2*MSL. Por exemplo, se fecharmos um link após criá-lo e depois reiniciarmos rapidamente o link, a porta ficará indisponível.

    TIME_WAIT tempo é 2*MSL. Assim, você pode reduzir TIME_WAIT tempo ajustando net.inet.tcp.msl. Para o servidor web, esse valor pode ser ajustado para 7500 ou 2000 (acesse uma web, a página não pode ser flasheada por mais de 4~15 segundos, você pode considerar abrir mão -_-)

    Referência de definição de parâmetro:

  1. 以下是引用片段:
  2. net.inet.tcp.syncookies=1
  3. 防止DOS攻击

  4. net.inet.tcp.msl=7500
  5. 防止DOS攻击,默认为30000

  6. net.inet.tcp.blackhole=2
  7. 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  8. net.inet.udp.blackhole=1
  9. 接收到一个已经关闭的端口发来的所有UDP包直接drop
Copiar código

No FreeBSD, yayu não viu um comando como "/sbin/sysctl -p" que pudesse tornar o conteúdo de /etc/sysctl.conf eficaz, então ele apenas usou o comando:

  1. 以下是代码片段:
  2. sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Copiar código






Anterior:Uma carta de um estudante do Instituto de Tecnologia de Wuchang para a mídia
Próximo:Restaurar a verdade sobre a organização da prostituição em hotéis em faculdades e universidades "Instituto de Tecnologia de Wuchang: Rumores param em...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com