Verifique a sua fortaleza com lsat - software de auditoria em servidores e desktops

Você pode até estar "vivo na vida real", mas estará "morto na vida virtual" enquanto não estiver conectado à rede global. Mas antes disso, você deve ter ciência e certeza que seu sistema está mais seguro do que antes fazendo auditorias. Este é o foco deste artigo.

[ Hits: 10.011 ]

Por: Mauro Risonho de Paula Assumpção A.K.A firebits em 26/02/2010


Introdução



Linux Security Auditing Tool (lsat) é uma ferramenta de auditoria de segurança pós-instalação. Foi feita para design modular e novas funcionalidades podem ser adicionadas rapidamente. Ele verifica as entradas inetd e faz varreduras em pacotes RPM desnecessários. Ela está sendo desenvolvida e expandida para trabalhar com outras distribuições Linux além do Red Hat (originalmente criada para esta distro) e verifica as versões do kernel.

A saída da varredura do relatório fica em um arquivo lsat.out. Em execuções subsequentes a saída estará no lsat.old anterior.

Para instalar esta ferramenta nós utilizamos o Ubuntu 9.10, mas provavelmente como toda boa ferramenta, há versões em outros variantes do Linux. Não vamos entrar em detalhes nisso, de como instalar em outros Linux, mas seguindo a receita "a la Debian"...

Passo 1:

# apt-get install lsat

Passo 2:

# man lsat

Sintaxe:

lsat [OPÇÂO]



Suas principais opções são:
  • -d - verifica se há inconsistência através de uma comparação com o comando diff entre o número de integridade gerado pelo md5 com um outro anterior, no formato lsatmd5.diff
  • -m <distribuição> - força um teste específico para uma distro. Você pode checar na sua distro usando os nomes: redhat, debian, mandrake, solaris, gentoo
  • -h - ajuda
  • -a - exibe ajuda avançada
  • -o <arquivo> - arquivo de saída (resultados), o padrão é last.out
  • -r - verifica a integridade de um arquivo rpm. Apenas para RedHat ou Mandrake
  • -s - verificação silenciosa, sem arquivo de saída
  • -x <arquivo> - aqui "arquivo" é um arquivo de texto contendo os módulos que não serão usados na verificação. Eles são separados por vírgulas, tab ou "nova linha", com os nomes dos módulos que você NÃO quer usar.
  • -v - modo verbose
  • -w - saída de arquivo no formato .html

Nomes do módulos (uma pequena descrição):
  • bpass - verifica a senha do carregador de boot
  • cfg - verifica runlevel daemons (redhat)
  • dotfiles - verifica dotfiles
  • files - verifica sticky bits etc
  • forward - verifica network forwarding
  • ftpusers - verifica arquivos dos usuários com falhas em ftp
  • inetd - verifica serviços desnecessários
  • inittab - verifica runlevel etc.
  • ipv4 - verifica por outras coisas sobre ipv4
  • issue - verifica banners no arquivo issue
  • kbd - verifica permissões kbd/login
  • limits - verifica limites dos arquivos
  • logging - verifica tamanho do que está sendo logado
  • md5 - testa o md5 de todos os arquivos do sistema
  • modules - verifica por módulos carregados no kernel.
  • net - verifica rede
  • open - verifica arquivos abertos
  • passwd - verifica arquivo passwd com falhas
  • perms - verifica permissões nos arquivos
  • pkgs - verifica por pacotes não achados
  • promisc - verifica se você está em modo promíscuo na interface de rede
  • rc - verifica arquivos perdidos em arquivos rc
  • rpm - testa/verifica a integridade de arquivos rpm
  • securetty - verifica se o terminal tty se é seguro
  • set - verifica por arquivos SUID
  • ssh - verifica arquivo de configuração do ssh
  • startx - verifica se há alguma porta tcp "ouvindo" no X
  • umask - verifica umask padrão
  • write - verifica arquivos de leitura/gravação
  • www - saída de arquivo em formato .html

Módulos:

Atualmente estes são os módulos usados numa varredura padrão: checkbpass, checkdotfiles, checkfiles, checkftpusers, checkhostsfiles, checkinetd, checkipv4, checkissue, checkkbd, checklimits, checkmodule, checkmd5, checknet, checknetforward, checknetp, checkopenfiles, checkpasswd, checkperms, checkpkgs, checkrc, checkrpm, checksecuretty, checkset, checkssh, checkumask, checkwrite e checkwww. Há também uma breve descrição em cada módulo.

Escrever novos módulos é muito simples, basta ver o arquivo README.modules para mais informações. ;)

Quem sabe no próximo artigo?

Exemplo:

# lsat
Starting LSAT...
Getting system information...
Running modules...
Running checkpkgs module...
Running checkinetd module...
Running checkhostsfiles module...
Running checkinittab module...
Running checklogging module...
Running checkset module...
Running checkwrite module...
Running checkdotfiles module...
Running checkpasswd module...
Running checkfiles module...
Running checkumask module...
Running checkftpusers module...
Running checkrc module...
Running checkkbd module...
Running checklimits module...
Running checkssh module...
Running checkopenfiles module...
Running checkissue module...
Running checkwww module...
Running checkmd5 module...

Dependendo do seu sistema o arquivo gerado pode conter 1,2MB ou mais (o equivalente a quase 25000 linhas de log e comentários de segurança), no caso de HD de 160GB.

Fizemos uma máquina virtual e testamos, veja.

Vamos ver alguns comentários no arquivo lsat.out:

# cat lsat.out | less
ou
# gedit lsat.out

Por favor, considere a remoção dos pacotes
****************************************
Please consider removing these packages.

bind9-host
libbind9-50
libindicate-gtk1
libindicate3
libmail-sendmail-perl
webmin

Por favor, comente todas as informações do intetd.conf
****************************************
Please comment out all of these from inetd.conf.


****************************************
Lines found in hosts.allow
Make sure you wish to allow the following:


****************************************
Did not find ALL:ALL in hosts.deny.
Lines found in hosts.deny:


Por padrão o init level não está setado em nível 5. Bom!
****************************************
default init level is not set to 5. Good.


****************************************
Consider placing: auth.*				
/var/log/secure
 in your /etc/syslog.conf file.


****************************************
Consider placing: authpriv.*				
/var/log/secure
in your /etc/syslog.conf file.

Os últimos 100 (ou menos) login falhados no seu sistema
****************************************
The last 100 (or less) failed login attempts on the system

Login Falhas Máximo Recente Em

root            0        0   12/31/69 21:00:00 -0300  
daemon          0        0   12/31/69 21:00:00 -0300  
bin             0        0   12/31/69 21:00:00 -0300  
sys             0        0   12/31/69 21:00:00 -0300  
sync            0        0   12/31/69 21:00:00 -0300  
games           0        0   12/31/69 21:00:00 -0300  
man             0        0   12/31/69 21:00:00 -0300  
lp              0        0   12/31/69 21:00:00 -0300  
mail            0        0   12/31/69 21:00:00 -0300  
news            0        0   12/31/69 21:00:00 -0300  
uucp            0        0   12/31/69 21:00:00 -0300  
proxy           0        0   12/31/69 21:00:00 -0300  
www-data        0        0   12/31/69 21:00:00 -0300  
backup          0        0   12/31/69 21:00:00 -0300  
list            0        0   12/31/69 21:00:00 -0300  
irc             0        0   12/31/69 21:00:00 -0300  
gnats           0        0   12/31/69 21:00:00 -0300  
nobody          0        0   12/31/69 21:00:00 -0300  
libuuid         0        0   12/31/69 21:00:00 -0300  
syslog          0        0   12/31/69 21:00:00 -0300  
messagebus      0        0   12/31/69 21:00:00 -0300  
hplip           0        0   12/31/69 21:00:00 -0300  
haldaemon       0        0   12/31/69 21:00:00 -0300  
kernoops        0        0   12/31/69 21:00:00 -0300  
polkituser      0        0   12/31/69 21:00:00 -0300  
saned           0        0   12/31/69 21:00:00 -0300  
gdm             0        0   12/31/69 21:00:00 -0300  
speech-dispatcher       0        0   12/31/69 21:00:00 -0300  
supervisor      0        0   12/31/69 21:00:00 -0300  
snort           0        0   12/31/69 21:00:00 -0300  
havp            0        0   12/31/69 21:00:00 -0300  
clamav          0        0   12/31/69 21:00:00 -0300  
mysql           0        0   12/31/69 21:00:00 -0300  
Debian-exim     0        0   12/31/69 21:00:00 -0300  
dansguardian    0        0   12/31/69 21:00:00 -0300  
festival        0        0   12/31/69 21:00:00 -0300  
ntp             0        0   12/31/69 21:00:00 -0300  
mrpa            0        0   12/31/69 21:00:00 -0300  
logcheck        0        0   12/31/69 21:00:00 -0300  


Lista de arquivos com permissão SUID no sistema:
****************************************
This is a list of SUID files on the system:

/sbin/mount.ecryptfs_private
/bin/umount
/bin/su
/bin/fusermount
/bin/ping
/bin/mount
/bin/ping6
/lib/dbus-1.0/dbus-daemon-launch-helper


Lista de arquivos/diretórios com permissão SGID no sistema:
****************************************
This is a list of SGID files/directories on the system:

/sbin/unix_chkpwd
/etc/ppp/peers
/etc/chatscripts
/etc/logcheck/violations.d
/etc/logcheck/cracking.ignore.d
/etc/logcheck/cracking.d
/etc/logcheck/ignore.d.paranoid
/etc/logcheck/ignore.d.workstation
/etc/logcheck/ignore.d.server
/etc/logcheck/violations.ignore.d
/srv/cvs
/srv/cvs/CVSROOT
/srv/cvs/CVSROOT/Emptydir

Lista de arquivos normais em /dev. MAKEDEV está ok, mas
os outros não
****************************************
List of normal files in /dev. MAKEDEV is ok, but there
should be no other files:

/dev/.blkid.tab
/dev/.blkid.tab.old
/dev/.udev/queue.bin
/dev/.udev/db/block:sda9
/dev/.udev/db/block:sda8
/dev/.udev/db/block:sda7
/dev/.udev/db/block:sda6
/dev/.udev/db/block:sda5
/dev/.udev/db/block:sda15
/dev/.udev/db/block:sda14
/dev/.udev/db/block:sda12
/dev/.udev/db/block:sda11
/dev/.udev/db/block:sda10
/dev/.udev/db/input:event6
/dev/.udev/db/sound:card0
/dev/.udev/db/sound:controlC0
/dev/.udev/db/sound:hwC0D0
/dev/.udev/db/sound:audio
/dev/.udev/db/sound:pcmC0D0c
/dev/.udev/db/sound:adsp
/dev/.udev/db/sound:pcmC0D1c
/dev/.udev/db/sound:pcmC0D2c
/dev/.udev/db/sound:pcmC0D1p
/dev/.udev/db/sound:dsp
/dev/.udev/db/sound:pcmC0D0p
/dev/.udev/db/sound:mixer
/dev/.udev/db/sound:card1
/dev/.udev/db/net:wlan0
/dev/.udev/db/sound:adsp1
/dev/.udev/db/sound:dsp1
/dev/.udev/db/sound:pcmC1D0c
/dev/.udev/db/sound:controlC1
/dev/.udev/db/sound:audio1
/dev/.udev/db/sound:pcmC1D1c
/dev/.udev/db/sound:mixer1
/dev/.udev/db/video4linux:video0
/dev/.udev/db/video4linux:vbi0
/dev/.udev/db/video4linux:radio0
/dev/.udev/db/input:event5
/dev/.udev/db/sound:sequencer2
/dev/.udev/db/sound:sequencer
/dev/.udev/db/block:sda1
/dev/.udev/db/block:sda13
/dev/.udev/db/block:sda2
/dev/.udev/db/block:sdd
/dev/.udev/db/block:sda
/dev/.udev/db/block:sdc
/dev/.udev/db/block:sde
/dev/.udev/db/block:sdb
/dev/.udev/db/sound:seq
/dev/.udev/db/sound:timer
/dev/.udev/db/input:mouse1
/dev/.udev/db/input:event4
/dev/.udev/db/input:event1
/dev/.udev/db/input:event3
/dev/.udev/db/input:event0
/dev/.udev/db/input:event2
/dev/.udev/db/block:sr0
/dev/.udev/db/block:ram9
/dev/.udev/db/block:loop7
/dev/.udev/db/block:ram7
/dev/.udev/db/block:ram5
/dev/.udev/db/block:ram2
/dev/.udev/db/block:loop2
/dev/.udev/db/block:ram4
/dev/.udev/db/block:ram0
/dev/.udev/db/block:ram14
/dev/.udev/db/block:ram15
/dev/.udev/db/block:ram12
/dev/.udev/db/block:ram13
/dev/.udev/db/block:ram11
/dev/.udev/db/block:loop1
/dev/.udev/db/block:ram10
/dev/.udev/db/net:eth0
/dev/.udev/db/block:loop3
/dev/.udev/db/block:ram1
/dev/.udev/db/block:loop5
/dev/.udev/db/block:loop6
/dev/.udev/db/block:ram8
/dev/.udev/db/block:loop4
/dev/.udev/db/block:ram3
/dev/.udev/db/block:ram6
/dev/.udev/db/block:loop0
/dev/.udev/db/usb:1-9
/dev/.udev/db/usb:usb2
/dev/.udev/db/usb:usb1
/dev/.initramfs/varrun/sendsigs.omit
/dev/.initramfs-tools

Lista de arquivos com permissão de gravação
****************************************
This is a list of world writable files

/etc/rc.local

Esta é uma lista de grupo de arquivos graváveis
****************************************
This is a list of group writable files

/etc/pam.d/webmin
/etc/rc.local
/srv/cvs/CVSROOT/.#cvswrappers
/srv/cvs/CVSROOT/.#checkoutlist
/srv/cvs/CVSROOT/.#preproxy
/srv/cvs/CVSROOT/.#posttag
/srv/cvs/CVSROOT/.#rcsinfo
/srv/cvs/CVSROOT/.#verifymsg
/srv/cvs/CVSROOT/.#loginfo
/srv/cvs/CVSROOT/val-tags
/srv/cvs/CVSROOT/.#modules
/srv/cvs/CVSROOT/.#postproxy
/srv/cvs/CVSROOT/.#commitinfo
/srv/cvs/CVSROOT/.#config
/srv/cvs/CVSROOT/history
/srv/cvs/CVSROOT/.#postwatch
/srv/cvs/CVSROOT/.#notify
/srv/cvs/CVSROOT/.#postadmin
/srv/cvs/CVSROOT/.#taginfo

Lista de grupo de diretórios de graváveis:
****************************************
List of group writable directories:

/file0001
/backup
/file0004
/tmp
/file0003
/file0002

Lista de pastas com permissão de gravação
****************************************
List of world writable directories:

/backup0001
/backup0002
/tmp
/srv/cvs
/srv/cvs/CVSROOT
/srv/cvs/CVSROOT/Emptydir
/file0002

Lista dos arquivos .exrc encontrados no sistema
****************************************
This is a list of .exrc files found

Lista dos arquivos .forward encontrados no sistema
****************************************
This is a list of .forward files found on the system:

Lista dos arquivos .rhosts encontrados no sistema
****************************************
This is a list of .rhosts files found on the system:

Lista dos arquivos .netrc encontrados no sistema
****************************************
This is a list of .netrc files found on the system

Lista dos arquivos dotfiles encontrados no sistema
****************************************
This is a list of dotfiles found on the system

Por favor, considere a remoção destas contas de sistema.
Verifique se você irá precisar delas para aplicações de seu 
sistema antes de remover. Além disso, consulte o arquivo 
securitylinks.txt para mais informações.
****************************************
Please consider removing these system accounts.
Check to see if you need them for your system applications before 
removing. Also, consult the securitylinks.txt file for more 
information.

sync
man
lp
news
uucp

As seguintes contas são SUID 0 no arquivo /etc/passwd.
Retire se necessário.
****************************************
The following accounts are SUID 0 in /etc/passwd.
Remove if needed.

Remova as seguintes entradas (se houver) dos
respectivos arquivos passwd/group
****************************************
Remove the following entries (if any) from the
 respective passwd/group file(s)

As seguintes contas não tem senhas, ou não estão vazias
****************************************
The following accounts have no/empty passwords

Saída de pwck, nota diretórios inexistentes etc
****************************************
Output of pwck, note non existent directories, etc

Saída de grpck, nota em grupos que acho que devem ser excluídos.
****************************************
Output of grpck, note groups it think should be deleted.

Verificar por sticky bits em arquivos tmp
****************************************
Checks for sticky bits on tmp files

-> is not chmod 644.
Check above files for chmod 644.
Check above dirs to ensure root ownership.
****************************************

Lista de arquivos com nenhum usuário ou grupo:
****************************************
List of files with no user or group:

/home/firebits
/home/firebits/.profile
/home/firebits/.gegl-0.0
/backup/DVD1/registro/rfc/rfc3245.txt.pdf
.
.
.
(continua)


****************************************
Checking default umask on system:

Default umask should be 022, 027 or 077. 002 is ok for RedHat.
Here are the filenames, and the umask number
found in each. Please read through the file and ensure that is what you want.

/etc/oinkmaster.conf: = 0027
/etc/profile: 022

****************************************
While checking ftpusers...
/etc/ftpusers does not exist or is not readable.
This is ok if you are not root, not
running ftp or your ftp daemon
does not use /etc/ftpusers.
Please triple check your configuration
and ensure you do not need /etc/ftpusers.

*****************************************

****************************************
Checking rc startup scripts:


These services were found in /etc/rc(2/3).d
Consider removing or disabling unneeded services.
****************************************

****************************************
Default limits hashed out in limits.conf.
Check /etc/security/limits.conf for the default entry.
Make sure to set hard and soft limits for default "*",
or for individual users.


****************************************
Output from ulimit, check to see if these are reasonable limits.
Resource limits can help prevent DOS attacks,
read up on them if you need to.

time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        8192
coredump(blocks)     0
memory(kbytes)       unlimited
locked memory(kbytes) 64
process              unlimited
nofiles              1024
vmemory(kbytes)      unlimited
locks                unlimited

****************************************
sshd config file entries
Make sure these are commented out.

****************************************
Protcol 2 not found in sshd config, or you are doing 1,2.
Change to protcol 2 only.

****************************************
This is the lsof output, diff this against a previous run.

COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox 23640 supervisor   58u  IPv4 148387      0t0  TCP 
192.168.1.2:40714->avocado.canonical.com:www (ESTABLISHED)

****************************************
/etc/issue exists. Make sure it does not have any 
 system specific information in it.


****************************************
/etc/issue.net exists. Make sure it does not have any 
 system specific information in it.


****************************************
/etc/motd exists. Make sure it does not have any 
 system specific information in it.


****************************************
/etc/banners dir not found. 
Check securitylinks.txt for more info.


****************************************
No ExecCGIs found. Good.

****************************************
Check lsatmd5.out for output of checkmd5.
If this is a subsequent run, old one is called lsatmd5.out.old

Bom, não vou traduzir todo o log, você tem que se iterar também. ;)

Caso você tenha habilitado o módulo checkmd5, será gerado um enorme arquivo lsatmd5.out:

# gedit lsatmd5.out

.
.
.
a54d861749157cc576744d50d8d2d773 /etc/apache2/mods-available/authn_default.load
ea99aba14e9aa25c27653b9958239a6e /etc/apache2/mods-available/cache.load
bf972e82336c72b20d67d871ef77d4ce /etc/apache2/mods-available/authz_groupfile.load
2db2247ae37ae1e2bf9bf35413c14ab7 /etc/apache2/mods-available/status.conf
17f662fd023dbaaab9d89f9a11ae58c1 /etc/apache2/mods-available/dav_fs.load
ba7d09162b65d09397bd58be33138e4d /etc/apache2/mods-available/headers.load
e058e03c1d4f9e4d8e2c439ed75cc501 /etc/apache2/mods-available/proxy_ajp.load
f9b9a0503caeb92985bd840a28f5e5b9 /etc/apache2/mods-available/asis.load
d65845f053d08b82da239c73c9094c35 /etc/apache2/mods-available/authnz_ldap.load
86e21a672a4f245715a788f9873174ed /etc/apache2/mods-available/authn_dbd.load
9ed1ea15654bb594453438154b642539 /etc/apache2/mods-available/authz_owner.load
faad09687e64ebb9670aa0b8095d6642 /etc/apache2/mods-available/dav_lock.load
8a36e9a5542c8e24df6170052a31b62b /etc/apache2/mods-available/info.conf
8c13524d3a4955810e6434ff388c3168 /etc/apache2/mods-available/deflate.conf
51f3d40cb47a4bd739dedf1e6d69e646 /etc/apache2/mods-available/authz_dbm.load
50e63dc17612e22484a88f537e8aec8e /etc/apache2/mods-available/substitute.load
ed469867552a1145b8c3ffa5780ff83e /etc/apache2/mods-available/dav.load
3e8963a7df7c047be50a552d80a4f853 /etc/apache2/mods-available/env.load
b6882491a6d2b823da960f19a50b132f /etc/apache2/mods-available/dir.conf
735ac5f246738e11a53f6c515b8dfc48 /etc/apache2/mods-available/ldap.load
f03fe275174a5ed97b0f5f5726ccea60 /etc/apache2/mods-available/dbd.load
e3516d1fe624e456789497996a8c731c /etc/apache2/mods-available/dav_fs.conf
3d3719c88d01152e817f74fc2fd6ce9e /etc/apache2/mods-available/proxy.load
7177e2427eb7c78f1ab10c034a809793 /etc/apache2/mods-available/log_forensic.load
.
.
.

Caso haja uma diferença do md5sum de cada arquivo, algo mudou automaticamente (por exemplo, novas configurações e atualizações, outra situação, talvez você mesmo tenha mudado ou provavelmente você teve seu computador invadido).

Bom, depois de uma longa demora, afinal esta ferramenta verifica todo seu sistema, qual gerará muito acesso a disco, corre-se o risco do computador ficar lento a ponto de quase travar todo o sistema.

Obs.: Não é recomendável realizar o uso desta ferramenta em horário comercial, produção ou de pico, pois você poderá ter problemas com os usuários que irão reclamar da demora dos serviços.

Por isso, programe a varredura no CRON, para varrer à noite ou em outro horário menos utilizado, gerando menos problemas de lentidão.

Espero ter ajudado.

Visite o site www.backtrack.com.br/forum.html para outras novidades.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Double Dragon: chkrootkit e portsentry, agora vai rolar pancadaria nos intrusos!

CheckSecurity - Ferramenta para segurança simples e eficaz, com opção para plugins

Os 5 princípios básicos de segurança para empresas

A vida de quem vive de TI: It Crowd!

PHPIDS - PHP Intrusion Detection System, deixe seu site livre de intrusos!

Leitura recomendada

Utilizando hping

ttyrec - Ferramenta para auditoria de sistemas Linux

Fundamentos da criptografia assimétrica

webCalendar: a agenda e o PAM

Suporte TCP Wrapper - Serviços stand-alone no Debian 6

  
Comentários
[1] Comentário enviado por TiMbe em 26/02/2010 - 09:48h

Gostei do artigo, achei bem útil, simples e funcional, parabéns !!!!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts