em Sem categoria

Fazendo um Check-list nos Servi?os do Sistema

Artigo retirado do site Dicas-L da Unicamp

Configurar servi?os hoje em um sistema Linux, n?o ? mais t?o complicado como antigamente. Muitos servi?os, depois de instalado j? saem funcionando com a sua configura??o padr?o, ou muitos j? vem instalados no sistema. Embora quando pensamos em seguran?a j? ? assumido que n?o devemos colocar um servi?o em produ??o com configura??es padr?es sem que as mesmas sejam testadas pensando nos principios de seguran?a.

Mas o que muitos administradores iniciantes e at? mesmo experientes n?o sabem tirar proveito de ferramentas cl?ssicas para checar se o servi?o est? funcionando corretamente, verificar em qual porta ele est? trabalhando, se ele est? recebendo requisi??es corretamente e at? mesmo, em alguns casos, ver se nenhum invasor fez algo em seu sistema que possa prejudica-lo, para isso mostrarei alguns comandos que podem formar o que costumo chamar de Check-List.

Primeiramente temos que saber a qual porta determinado servi?o est? associado. Podemos ver algumas portas padr?es do sistema no arquivo /etc/services. Exemplo de algumas portas

# cat /etc/services
# cat /etc/services | grep -i ssh
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp

Ap?s termos uma no??o das portas em que os servi?os rodam, podemos utilizar um comando chamado netstat. Esse comando vai nos fornecer algumas informa??es sobre os servi?os de rede do nosso sistema. ? v?lido lembrar que encontramos implementa??es do netstat em outros sistemas operacionais e n?o necess?riamente as op??es e mesmos os recursos s?o implementados da mesma forma.

# netstat -nlt

-n : Op??o para fazer o netstat n?o resolver os IP’s para nomes.
-l : Listar os Sockets que est?o Ouvindo(Listen), ou seja, que est?o prontos para receber uma conex?o.
-t : Listar somente os Sockets no protocolo TCP. Poderiamos utilizar o -u para protocolos UDP.

Com isso podemos ver v?rias informa??es sobre os Sockets que est?o aguardando conex?es. Exemplo:

Proto Recv-Q Send-Q Endere?o Local Endere?o Remoto Estado
tcp 0 0 0.0.0.0:22 0.0.0.0:* OU?A

Proto ? o protocolo que este Socket est? trabalhando. No Endere?o Local vemos que a porta 22 pode responder a qualquer interface de rede no sistema (0.0.0.0:22), no Endre?o Remoto mostra que n?o h? nenhuma conex?o relacionada ? aquela porta e que no Estado ela est? em OU?A, ou seja, aguardando conex?es.

Poderiamos utilzar o netstat com o -a tamb?m, no lugar do -t para vermos todos os Sockets tanto os que est?o ouvindo, que n?o est?o ouvindo e os Estabelecidos, que v?o ser muito importantes. Nos Estabelecidos podemos ver em qual interface o servi?o est? conectado e a qual porta e de onde est? vindo a conex?o.

# netstat -nat
Proto Recv-Q Send-Q Endere?o Local Endere?o Remoto Estado
tcp 0 0 192.168.0.1:32778 200.123.123.123:143 ESTABELECIDA
tcp6 0 0 ::ffff:192.168.0.1:22 ::ffff:192.168.0.8:32796 ESTABELECIDA

Agora que sabemos quais sockets est?o dispon?veis, podemos ver qual processo(servi?o) est? rodando nesse socket com o comando fuser.

# fuser -v 22/tcp
-v: Modo Verbose
USER PID ACCESS COMMAND
22/tcp root 3943 f…. sshd

Com ele podemos ver qual usu?rio est? rodando o processo, o PID que ? o n?mero do processo e o programa que est? rodando que nesse caso ? o sshd. Para cada processo que est? rodando, o sistema cria um diret?rio com PID dele no /proc, onde podemos obter algumas informa??es do processo, um deles ? o arquivo cmdline que mostra o caminho completo do programa, nos mostrando assim que aquele programa ? ele mesmo e n?o um program forjado.

# cat /proc/3943/cmdline
/usr/sbin/sshd

Outra ferramenta que poderiamos utilizar ? a lsof, que vai nos mostrar informa??es parecidas com a do netstat e a fuser, s? que em uma ?nica ferramenta. A lsof mostrar? os Socktes que est?o Ouvindo, que est?o Estabelecidos e entre outros, e nos mostrar? tamb?m o usu?rio, o PID e o programa que est? rodando, ou seja, poderiamos dizer que a lsof ? uma jun??o da netstat e a fuser. Por?m a lsof n?o vem instalada em todas as distro Linux, sendo necess?rio instala-l? via pacotes ou pelo source.

# lsof -i

-i : Listar? todos os processos ou arquivos relacionados a uma interface de rede, se n?o for especificado uma interface de rede, como fizemos ele mostrar? do todas as interfaces.

firefox-b 4652 user 36u IPv4 22723 TCP 192.168.0.1:38138->64.233.161.19:www (ESTABLISHED)
ssh 8342 root 3u IPv4 100376 TCP 192.168.0.1:54751->192.168.0.8:ssh (ESTABLISHED)

Uma coisa que muitos administradores tamb?m esquecem de olhar s?o os Raw Sockets, que s?o os Sockets que n?o dependem de um protocolo espec?fico, permite acesso direto a protocolos de baixo n?vel como ICMP, TCP, UDP, e IP, mais considerados por muitos como como um potencial foco de problemas de seguran?a devido ao fato que poucos administradores verificam as atividades de Raw Sockets de seus sistemas.

Podemos ver se existe algum Raw Socket aberto no nosso sistema utilizando o netstat com uma outra op??o.

# netstat -nlw
-w : Lista os Raw Sockets.

Provavelmente n?o ter? nenhum aberto, ent?o retorna um resposta vazia. Mas devemos ter muito cuidado com os Raw Sockets pois muitas BackDoors mais modernas utilizam o Raw Socket para abrir o seu sistema sem depender de um protocolo. O hping pode ser utilizado como uma BackDoor em seu sistema aproveitando-se do Raw Socket para poder executar comandos remotamente em seu sistema. Veja mais detalhes na documenta??o do hping.

Sa?da de uma respota positiva, utilizando o netstat para listar os Raw Sockets.

Proto Recv-Q Send-Q Endere?o Local Endere?o Remoto Estado
raw 0 0 0.0.0.0:255 0.0.0.0:* 7

E um ?ltimo programa que podemos utilizar ? o nmap que ? um poderoso programa para varreduras de portas ,nesse caso vamos ter a possibilidade de fazer uma an?lise interna ou externa do nosso sistema para vermos quais portas/servi?os est?o dispon?veis. O nmap n?o vem por padr?o nas distribui??es Linux, sendo necess?rio instala-lo. Ent?o de uma outra m?quina podemos fazer o seguinte teste.

Para Portas TCP.

# nmap -sT 192.168.0.1

-sT : Varredura de portas TCP completas.
192.168.0.1 -> Seu IP.

PORT STATE SERVICE
9/tcp open discard
13/tcp open daytime
21/tcp open ftp
22/tcp open ssh

Ou podemos testar localmente.

# nmap -sT localhost

# nmap -sT -p 22 localhost

PORT STATE SERVICE
22/tcp open ssh

Para Portas UDP

# nmap -sU 192.168.0.1

-sT : Varredura de portas TCP completas.
192.168.0.1 -> Seu IP.

PORT STATE SERVICE
9/udp open|filtered discard
53/udp open|filtered domain
111/udp open|filtered rpcbind

Ou podemos testar localmente.

# nmap -sU localhost

# nmap -sU -p 53 localhost

PORT STATE SERVICE
53/udp open|filtered domain

Ou ainda olhando as portas TCP e UDP simultaneamente

# nmap -sU -sT 192.168.0.1

Em alguns casos o uso do Nmap pode ser interessante para fazer o checklist de todas as portas ativas no servidor.

# nmap -sU -sT -F 192.168.0.1

-F: Todas as portas decladas no services

Ou olhar porta a porta at? 65535

# nmap -sU -sT -p- 192.168.0.1

Sendo assim conseguiremos ver todas as portas que est?o dispon?veis em nosso sistema.

Podemos ver tamb?m os banners dos servi?os que est?o rodando. Que para um invasor pode ser um informa??o preciosas.

# nmap -sV 192.168.0.1

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.8.1p1 (protocol 2.0)
25/tcp open smtp Exim smtpd 4.50
111/tcp open rpcbind 2 (rpc #100000)
113/tcp open ident OpenBSD identd
MAC Address: 00:50:BF:63:D0:E7 (Mototech)

O nmap possui muitas op??es, veja o manual dele para ver todas as op??es de uso.
CONCLUS?O.

Com o conhecimentos dessas ferramentas um administrador poder? fazer um bom check-list em seu sistema, e ter? um total dom?nio de todos os servi?os que est?o rodando no sistema.