
Daemon para randomizar tcp_challenge_ack_limit para prevenir ataques de canal lateral CVE-2016-5696
chackd é um daemon que randomiza a cada segundo o parâmetro do kernel tcp_challenge_ack_limit para prevenir ataques de canal lateral
Um ataque de canal lateral apresentado recentemente atraiu forte atenção da comunidade [1]. Para muitos servidores ou dispositivos smartphone, esse ataque é considerado perigoso para conexões ipv4. Não há dúvida de que o kernel corrigirá esse problema nas próximas versões. No entanto, alguns administradores podem não atualizar o kernel por motivos específicos ou apenas por preguiça.
Ajustar o parâmetro para um valor muito alto [2] funciona bem. Por outro lado, para aplicações de servidor, isso pode resultar em uma quantidade desnecessária de tráfego. Para evitar isso, escrevi o programa chackd. Ele é capaz de ser parametrizado para atingir a solução apresentada em [1].
O daemon chack faz esse trabalho muito bem e de forma simples. Um conceito anterior meu era procurar por um módulo de kernel carregável, mas descartei isso, porque existe uma interface poderosa entre o espaço do utilizador e o espaço do kernel chamada proc vfs. Com os ficheiros proc, podemos fazer o trabalho com um simples daemon.
Este é o meu primeiro projeto de código aberto com um ótimo benefício para administradores que desejam proteger-se contra ataques challenge_ack_limit e não conseguem atualizar os seus kernels. Basta compilá-lo e executá-lo no seu servidor.
Preciso de ajuda da comunidade para tornar este projeto um "padrão da comunidade".
Por favor, procure por TODOs dentro dos ficheiros fonte para algumas coisas em que gostaria de trabalhar. Sinta-se à vontade para criar ramificações (branches) da maneira que quiser. Gostaria de aprender muito com este projeto.
Makefile - O meu desejo para o Makefile é torná-lo uma espécie de padrão com instalação, consultas de versão do kernel e assim por diante.
start_daemon - Qualquer parte do código que possa fazer o daemon falhar deve ser corrigida.
stop_daemon - Qualquer parte do código que não seja um tipo de padrão deve ser corrigida.
init_daemon - Qualquer parte do código que possa fazer o daemon falhar deve ser corrigida.
main - A minha intenção é que os parâmetros do main sejam fornecidos como um simples inteiro; atualmente funciona bem. No entanto, talvez haja uma maneira muito melhor de lidar com isso?
Intervalo de 1 segundo de "sysctl net.ipv4.tcp_challenge_ack_limit"
net.ipv4.tcp_challenge_ack_limit = 222
net.ipv4.tcp_challenge_ack_limit = 227
net.ipv4.tcp_challenge_ack_limit = 191
net.ipv4.tcp_challenge_ack_limit = 178
net.ipv4.tcp_challenge_ack_limit = 229
net.ipv4.tcp_challenge_ack_limit = 167
net.ipv4.tcp_challenge_ack_limit = 189
net.ipv4.tcp_challenge_ack_limit = 229
Bastian Pukallus, por favor envie um e-mail para [email protected]
[1] http://www.cs.ucr.edu/~zhiyunq/pub/sec16_TCP_pure_offpath.pdf
[2] https://www.mail-archive.com/[email protected]/msg705042.html