Meu primeiro plugin.

Bom, recentemente escrevi sobre o como não me apresentei no congresso acadêmico. Também disse que ia escrever um post explicando melhor sobre o como funciona e como era o meu plugin. Em um planeta onde promessas não precisam ser compridas, resolvi cumprir uma ;). Vou apresentar aqui no meu post o que eu não consegui apresentar no congresso acadêmico. . .

Antes de tudo, o “porque”.

Quando se fala em ataques por força-bruta, normalmente vemos que esses ataques são de fácil de rastreamento e muito perceptíveis. Normalmente agressores usam na verdade maquinas “zumbis”, que tem nenhum rastro para quem esta ordenando o ataque.

Eu estava usando um programa (DenyHosts), que tem como objetivo bloquear ataques de força-bruta em um servidor ssh. Nada mais simples: Caso seja detectado um possível ataque de força-bruta, o programa bloqueia o ip do atacante para que não acesse o servidor ssh, então o ataque de força bruta termina.

Essa abordagem acaba com o problema de ataques de força-bruta, mas isso infelizmente não acaba com o problema como um todo. Porque se o atacante não pode lhe atacar mais, ele passa para o próximo endereço de ip, e continua atacando alguem. Faz-se necessário que o responsável pela rede que tem a maquina comprometida em sua rede ou ate mesmo avisar a quem e dono da maquina que ela esta comprometida.

Essa tarefa(a de informar) é muito trabalhosa :(. Coletar informações sobre um ip e entrar em contato com alguem responsável por esse ip é extremamente custoso. Principalmente quando se tem muito ip’s atacando constantemente o seu servidor ssh. Então, assim como os atacantes tem maneiras de automatizar seus ataques, faz se necessário automatizar a passagem de mensagens para os possíveis responsáveis sobre uma maquina possivelmente comprometida em sua rede.

Foi nesse cenário que eu resolvi usar algum sistema automático para notificação de ISP’s. Comecei a usar um desenvolvido em ruby e feito pelo Nazar da lista do DenyHosts. Depois de um tempo usando esse plugin do Nazar, começou a aparecer os erros. Primeiro, o plugin travava e o programa DenyHosts travava junto com o plugin. Concertei essa parte fazendo uma gambiarra e adicionado uma camada entre o DenyHosts e a chamada do plugin. So que apesar de ter funcionado, ainda existiam outros problemas.

Bom, resumindo. Depois de muito usar e reparar os erros no plugin, e ate entrar em contato com o desenvolvedor( que me afirmou que não ia consertar os bugs que eu passei. . . ), resolvi criar o plugin baseado no antigo só que em bash script, resolvendo todos os problemas do antigo e ainda adicionando algumas coisas que o antigo não tinha.

O que ele faz?

Primeiramente é fornecido um ip para o programa como o primeiro parâmetro.

A idéia básica do plugin e consulta no whois de algum ip dado para obter informações sobre os administradores daquele ip. Dessa consulta ao whois, usando um filtro, e extraido os endereços de e-mail. Todos os endereços de e-mail contidos no whois são de pessoas que são responsáveis de alguma forma por aquele ip.

Depois, se foi passado um ip para o programa, e tentado achar o nome correspondente a aquele ip na internet e depois é feito uma procura de sub-domínio em sub-domínio para se achar mais informações de whois para que se possa extrair e-mails. Nesse caso e necessário para que também se possa avisar ao maior numero de pessoas possíveis.

De posse da lista de e-mail, e verificado se existe alguma mensagem de log para o ip que foi passado para o programa. Se não existir mensagem de log, alguma coisa esta errada e o plugin para. Essas mensagens de log serão passadas para os administradores do ip que foi passado para o programa para que possa ser confirmado o ataque.

Também é verificado se já não foi passado e-mail para esse ip, para evitar repetidas mensagens.

Depois é gerado e passado um e-mail para cada e-mail que foi conseguido extrair do whois. Esse e-mail contem informações do log do ssh, o timezone do computador e o ip de onde veio o ataque.

O que tem a mais?

O que diferencia a minha versão das outras? Que tipos de características a mais o meu plugin tem a mais?

Bom, isso é fácil de dizer ;).

Primeiro, o meu plugin foi feito para não travar. No antigo plugin que eu usava, ele trava quando eu consulto o whois. Por algum motivo tem alguns whois que não acabam de mandar informações ou ficam com problemas. Então, a consulta ao whois “aparentemente” nunca acaba. Então, eu estipulei um tempo para a consulta ao whois, se a consulta não tiver acabado no final desse tempo, ela é finalizada forçadamente e assim o plugin não trava.

Outra vantagem é que você pode colocar uma lista de e-mail que não se deve enviar as mensagens. Essa lista deve ser separada por vírgula. Como por “@lanic.com,@cnnic.com”.

Também pode ser colocado o campo “From” do e-mail de qualquer canto. Também se pode definir um numero máximo de e-mail que se deve ser enviados por ip. log no estilo do syslog, e outras coisinhas a mais. . .

Tudo isso melhor feito ou não implementado no antigo plugin. De fato, ate entrei em contato com o cara desenvolvedor do plugin para colocar o meu no lugar do dele :p.

Mais isso e outra historia.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: