Fw: Re: [Cascavel-pm] PIGMEET: Quem puder ajudar

Fabiano Reese Righetti frighetti em cascavel.pm.org
Sexta Julho 18 14:12:15 CDT 2003


   Seria então um Distributed IDS?
   Gostaria de dar uma olhada nos sources. :)

[]'s
--
Fabiano Reese Righetti - frighetti at {cascavel.pm.org, cpan.org, unipan.br}

---------- Forwarded Message -----------
From: Ramoni <ramoni em databras.com.br>
To: "Fabiano Reese Righetti" <frighetti em cascavel.pm.org>
Sent: Fri, 18 Jul 2003 13:30:47 -0300
Subject: Re: [Cascavel-pm] PIGMEET: Quem puder ajudar

Sim claro.

A ideia eh fazer uma suite IDS completa com mais recursos do que qualquer 
outra,
por isso o pigmeet esta sendo feito bem segmentado.
Basicamente voce tera maquinas detectando ataques (com snort se kiser)
em varios pontos da rede que voce kiser, e podera bloquear os ips dos 
atacantes
em outros varios pontos da rede como em firewalls, algum fireone, pix etc

O pigmeet consiste no seguinte conjunto de programas:

- pigserverd
	Um servidor tcp que recebe comandos dos clients que falem o devido
	protocolo que jah esta criado, e toma as acoes devidas.
	Bloqueia IPs sem suar system iptables, em vez disso uso o modulo 
IPTables::IPv4
	e atravez de hashes ele vai direto ao netfilter. Estou evitando ao 
maximo o uso de systems
	e o unico ateh agora sao os proprios programas usando o pigclient.
- pigclient
	O cliente basico usado por todos os monitores/sensores, ele abstrai a 
camada
	do protocolo, sendo chamado via linha de comando com parametros 
legiveis.
- pigmonitord
	Por enquanto soh fiz o monitor preparado para snort, que 
	le os alerts do snort e seguindo suas configuracoes, usa o
	pigclient para bloquear o atacante em todos os pigservers 
configurados.
- pigcontrol
	Shell interativa onde voce controla de uma soh vez todos os seus 
pigservers
	rodando. Utiliza tambem o pigclient para conexao.
- pigsyncd
	Assegura a sincronia caso queira entre os pigservers,
	sincronizando por somente os ips bloqueados em comum ou
	bloqueando em todos eles o que ha de novo em algum

Alguns outros poderao ser desnvolvidos, e coisas como uma pagina php
para controle vai ser facil a partir do momento em que voce poder usar o php
para fazer uma conexao tcp e consultar os dados de cada pigserverd. Mas sei 
php hehe.

Da pra fazer tb um script que para jogar os dados em um mysql/postgre/oracle 
da vida.
Mas nao sei nada de sql :)

O protocolo de comunicacao eh bem simples, e para evitar DoS,
cada comunicacao entre pigclient e pigserver eh feita da seguinte forma:

1- client -> server # enviando informacoes de autenticacao toda em MD5
2 - Ou o servidor fecha a conexao ou emite um "ok"
3 - client -> server # client envia o comando
4 - server -> client # servidor devolve um resumo da operacao feita e FECHA a 
conexao.

O servidor nao aceita 3 envios de comando do client e nao aceita conexoes 
paradas por mais de 2 segundos.
O pigclient eh chama em linha de comando e qnd vc executa ele faz isso tudo 
sozinho, nao havendo interacao do user
com o server. Evitando Dos prevenindo conexoes idles abertas e envio de 
muitos dados em cada requisicao.

O pigmonitor pro snort (unico feito ateh entao) evita um possivel ataque DoS 
no server porque
mesmo q receba 400 ataques do mesmo ip, ele nao vai tentar conectar 400 vezes 
por guarda em hash um timestamp
onde voce estabelece um minimo delay entre hits do mesmo ip.

A parte de fork tanto do server quanto do client nao gerou processos defunct 
mesmo sob intenso uso.

Estou afzendo o pigmeet dessa forma para tentar fazer mais do q as outras 
ferramentas fazem,, o snort sam eh bom,
mas nao faz o q eu quero, o guardian coitado, eh mto fraco, o block-it nem se 
fala...
O snort inline eh otimo pq embarreira somente o pacote, mas nao bloqueia 
remotamente... 
mas vc pode usar o pgimeet junto com o snort_inline.
A unica ferramenta q ja ouvi falar q faz o q o pigmeet tem o intuito de fazer 
se chama dragon da enterasys e
custa U$ 25.000,00

A programacao eh facil, estah aberta, nao sou o mestre do perl e por isso 
peco ajuda. A ideia
eu acho mto boa e o fundamental eh desenvolver de forma que possa crescer sem 
que tenhamos que remendar o programa,
como foi o caso do pigmeat. (o pigmeet foi o nome q dei pra nova serie do 
antigfo pigmeat)

Nada impede que usemos libpcap para em vez de usar o snort, interagir direto 
neste nivel sem precisar dele,
isso seria trabalho para um novo programa monitor.
Bloquear em pix,fireone, seria somente desenvolver um outro pigclient...
Cada maquina rodaria um monitor diferente se fosse necessario e todos se 
comunicariam usando o pigclient unico.

Os fontes estao bem desorganizados e ainda nao fiz instalacao, embora vc 
possa rodar tudo apenas descompactando.
O que jah estah estavel:
- pigserverd -> funcionando ok, falta somente trabalhar melhor com signal 
handlers e pidfile
- pigmonitord -> pronto. nada em mente a melhorar. Aceita log do snort 
formato fast e normal assim como pelo syslog
- pigclient -> pronto e funcionando.

Exemplo de uso do pigclient manualmente:

# perl pigclient 127.0.0.1 2222 admin admin block 4.4.4.4
[pigclient ] (127.0.0.1)        ordered:1 blocked:1 total:1 (ok)
# perl pigclient 127.0.0.1 2222 admin admin block 4.4.4.4 400.6.6.6
[pigclient ] (127.0.0.1)        ordered:2 blocked:0 total:1 (Not a valid ip)
# perl pigclient 127.0.0.1 2222 admin admin blocked
[pigclient ] (127.0.0.1)        total 1: 4.4.4.4

Pigmonitor em execucao bloqueando ataques:
[pigmonitor] Adding hosts...
[pigmonitor] + Server 127.0.0.1:2222 (admin/admin)
[pigmonitor] Added 1 host(s)
[pigmonitor] Snort alerts from: /var/log/snort/alert
[pigmonitor] Hit delay set to: 10
[pigmonitor] Here we go !
[pigmonitor]  (monitor)         Attack from 192.168.13.51
[pigmonitor]  (timehash)        Timing(10): 192.168.13.51
[pigclient ] (127.0.0.1)        ordered:1 blocked:1 total:2 (ok)
[pigmonitor]  (monitor)         Attack from 192.168.13.51
[pigclient ] (127.0.0.1)        ordered:1 blocked:0 total:2 (Already blocked)
[pigmonitor]  (monitor)         Attack from 192.168.13.51
[pigmonitor]  (hitdelay)        WoW, going Fast !!! (Again in less than 10 
secs)

seria bom haver bloqueio por determinado numero de segundos, mas nao quiz 
fazer isso usando:
block xxxx; sleep $secs; unblock xxx pq criaria mtos processos.

desculpem o testamento :P
quem kiser os fontes eu mendo em pvt.

On Thursday 17 July 2003 19:28, you wrote:
> On Thu, 17 Jul 2003 13:58:30 -0300, Ramoni wrote
>
> > Oi pessoal,
> > bom, estou desenvolvendo o projeto pigmeet, (pigmeat versao 2)
> > e jah cheguei num status aceitavel para uso.
> > Consiste em programas monitoradores que conectam em programas
> > servidores e mandam bloquear IPs resumindo. Feito pra ser acoplado
> > ao snort fazendo um IDS mais legal. Se alguem quiser ajudar solto
> > mais informacoes sobrbe o projeto e libero os scripts valeu
>
>    Olá Ramoni! Como esta o senhor?
>    Bom, estou disposto a ajudar neste seu projeto. Poderia descreve-lo
> melhor?
>
> []'s
> --
> Fabiano Reese Righetti - frighetti at {cascavel.pm.org, cpan.org,
> unipan.br}

-- 
Ramoni
Databras treinamento e Consultoria Linux
Tel.: (21) 2518-2363
------- End of Forwarded Message -------




Mais detalhes sobre a lista de discussão Cascavel-pm