Com o iptables você pode usar uma string como ponto de checagem para permitir ou descartar um pacote, porém este método é pouco conhecido. Neste post vou mostrar usando um exemplo simples de como utilizar este módulo.
Abaixo segue uma regra do snort que tem uma assinatura de um exploit para o serviço SSHD:
"alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32 overflow"; flow:to_server,established; content:"|00 01|W|00 00 00 18|"; depth:7; content:"|FF FF FF FF 00 00|"; depth:14; offset:8; metadata:policy balanced-ips drop, policy security-ips drop; reference:bugtraq,2347; reference:cve,2001-0144; reference:cve,2001-0572; reference:nessus,10607; classtype:shellcode-detect; sid:1327; rev:10;)"
Nesta regra o que nos interessa é o "content" (que pode ser em texto plano ou em hexa), que permite com que uma regra seja criada e busque pelo valor do "content" no pacote, assim que esse valor for encontrado temos um hit. O Snort usa a função padrão Boyer-Moore para checar se o valor do pacote corresponde ao do "content", no iptables usaremos a opção "--algo bm" para chamar o padrão Boyer-Moore.
Nesta regra temos 2 contents, são eles:
content:"|00 01|W|00 00 00 18|"
content:"|FF FF FF FF 00 00|"
Como ficaria essa regra no iptables?
iptables -A INPUT -p tcp --dport 22 -m string --hex-string "|00 01|W|00 00 00 18|" --algo bm -m string --hex-string "|FF FF FF FF 00 00|" --algo bm -j DROP
Imagine que a regra do Snort não esteja em hexa e sim texto plano, veja o exemplo abaixo:
content:"/bin/sh"
Essa regra seria um pouco diferente:
iptables -A INPUT -p udp --dport 22 -m string --string "/bin/sh" --algo bm -j DROP
obs: uma boa opção seria usando o fwsnort.
Espero que tenham gostado.
by Osvaldo H Peixoto
Nenhum comentário:
Postar um comentário