segunda-feira, 8 de janeiro de 2007

Detectando possíveis trojans e lkms em seu servidor

Neste artigo vamos conhecer o trojan-scan, um software criado para detectar qualquer processo que venha ficar em modo listen em nosso sistema e assim, enviar um e-mail para o administrador para notificá-lo de que há um daemon não autorizado rodando no servidor.

O objetivo neste artigo é montar um sistema de monitoração de processos locais em um servidor, pois quando houver algum processo que não esteja autorizado no arquivo de configuração do trojan-scan, ele informa o administrador sobre tal evento, podendo assim, tomar uma ação mais eficiente caso alguma backdoor for instalada no servidor e levantar uma porta alta.

Instalação do trojan-scan


OBS: Para a instalação e utilização do PSAD estou levando em consideração que o leitor possua conhecimentos prévios em manipulação de arquivos compactados (.tar.gz).

Sistema Operacional: Debian Stable 3.1

Primeiramente instale o lsof:

# apt-get install lsof

Agora vamos fazer download do trojan-scanHomepage:

# wget http://www.derks.it/trojan-scan-1.2.tgz

Agora vamos descompactar:

# tar zxvf trojan-scan-1.2.tgz

Ele irá descompactar 2 arquivos:

  • trojan-scan.conf

  • trojan-scan.sh


Crie o diretório trojan-scan no /etc e copie o trojan-scan.conf pra ele:

# mkdir /etc/trojan-scan
# cp trojan-scan.conf /etc


Agora copie o trojan-scan.sh para /usr/local/sbin/:

# cp trojan-scan.sh /usr/local/sbin/














































Para configuração vamos até o diretório /etc/trojan-scan, lá encontraremos o arquivo a seguir:

# cd /etc/trojan-scan
# ls -l

-rw-r--r--   1 root root 1628 2005-10-07 11:21 trojan-scan.conf

Vamos editar este arquivo:

# vi trojan-scan.conf

Vamos mudar as variáveis:
RECIPIENTS="security@security.com"
Coloque nesta variável seu e-mail.
SUBJECT="[`hostname -s`] Trojan scanner report"
Esta variável se refere ao assunto que será enviado junto a mensagem, você pode alterar se quiser e deixar algo como "ALERTA!!! TROJAN".
ALLOWED="$ALLOWED httpd:{80,443}:{apache,root}"
ALLOWED="$ALLOWED mysqld:3306:mysql"
ALLOWED="$ALLOWED named:53:named"
ALLOWED="$ALLOWED sendmail:25:mail"
ALLOWED="$ALLOWED ftpd:21:!@any@!"
ALLOWED="$ALLOWED sshd:22:sshd"
ALLOWED="$ALLOWED xinetd:113:root"
Estas variáveis se referem a quais daemons ele não vai checar, no exemplo acima, estas variáveis vem por padrão, no meu caso, eu instalei em um firewall, então ficou assim:
#ALLOWED="$ALLOWED httpd:{80,443}:{apache,root}"
#ALLOWED="$ALLOWED mysqld:3306:mysql"
#ALLOWED="$ALLOWED named:53:named"
ALLOWED="$ALLOWED postfix:25:postfix"
#ALLOWED="$ALLOWED ftpd:21:!@any@!"
ALLOWED="$ALLOWED sshd:22:root"
ALLOWED="$ALLOWED master:25:root"
#ALLOWED="$ALLOWED xinetd:113:root"
Eu comentei todas as outras e deixei somente o ssh e o postfix.

No ssh eu mudei o final e deixei como root e não mais como sshd, pois meu ssh roda como root.

No postfix eu alterei a linha ALLOWED="$ALLOWED sendmail:25:mail" deixando assim:

ALLOWED="$ALLOWED postfix:25:postfix"

e adicionei a linha:

ALLOWED="$ALLOWED master:25:root"

Como podemos ver, a configuração é bem simples, agora vamos para a ultima variável:
LSOF_MD5="00000000000000000000000000000000"
Esta variável vem assim por padrão, precisamos alterar esta linha e adicionar o md5sum do binário lsof nela. Podemos fazer assim:

$ whereis lsof
lsof: /usr/bin/lsof /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

$ md5sum /usr/bin/lsof
44323131e794221f135f7356ce75e5cd /usr/bin/lsof

Bom...este foi o retorno do meu comando md5sum, agora vamos adicionar este valor na variável LSOF_MD5, ficando assim:
LSOF_MD5="44323131e794221f135f7356ce75e5cd"
Agora salve o arquivo e saia.

Vamos adicionar o trojan-scan no nosso crontab:

# crontab -e

Agora adicione esta linha dentro dele:
*/5 * * * * /usr/local/sbin/trojan-scan.sh -F
Salve e saia.








Testando o trojan-scan

Agora que já configuramos basicamente o trojan-scan, vamos testá-lo.

Vou levantar o inetd, pois não liberei ele no arquivo de configuração, logo, qualquer processo que subir que não esteja no meu arquivo de configuração, o trojan-scan vai me avisar.

# /etc/init.d/inetd start

Agora vamos verificar nosso e-mail:
De: 	root <root@server>
Para: security@security.com
Assunto: [firewall] Trojan scanner report 2005/Out/07 12:21
Data: Fri, 7 Oct 2005 12:21:23 -0300 (BRT)

The following (probable) trojans where found:

UNKNOWN: /usr/sbin/inetd (inetd:113:root)

ls: -rwxr-xr-x 1 root root 20216 2004-10-24 13:28 /usr/sbin/inetd*
ps: root 10752 1 0 12:20 ? 00:00:00 /usr/sbin/inetd
lsof:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
inetd 10752 root cwd DIR 8,2 536 2 /
inetd 10752 root rtd DIR 8,2 536 2 /
inetd 10752 root txt REG 8,8 20216 3830 /usr/sbin/inetd
inetd 10752 root mem REG 8,2 90248 6200 /lib/ld-2.3.2.so
inetd 10752 root mem REG 8,2 1244688 6203 /lib/libc-2.3.2.so
inetd 10752 root mem REG 8,2 34520 6211 /lib/libnss_files-2.3.2.so
inetd 10752 root 0u CHR 1,3 406 /dev/null
inetd 10752 root 1u CHR 1,3 406 /dev/null
inetd 10752 root 2u CHR 1,3 406 /dev/null
inetd 10752 root 4u IPv4 86201 TCP *:auth (LISTEN)

BINGO!!

Nosso sistema detectou a porta 113 listen e nos avisou via e-mail.  Como vimos, é fácil implantar o trojan-scan e tornar nosso sistema mais seguro contra backdoors e quaisquer serviços que subam em modo listen em nossa máquina sem que tenhamos autorizado.

Espero ter ajudado a todos com este artigo e que ele venha tornar a vida de nós, administradores de rede, mais tranqüila.

Abraços

Bruno Moreira Zanelato
Administrador de Redes Linux
Linux Security Certified
Conectiva Linux Certified
Unix Administration Certified
chroot_@hotmail.com

0 comentários:

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger | Printable Coupons