quarta-feira, 13 de abril de 2011

Iptables - barrando strings (texto plano ou hexa)

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