• Nenhum resultado encontrado

Checklist nos serviços do sistema

No documento Hardening em Linux (páginas 103-108)

q

Instalação e configuração de serviços básicos no Linux:

1 Não é complicado. Depois da instalação, já estarão funcionando. 2 No entanto, é preciso avaliar, testar e revisar suas configurações.

Instalar e configurar serviços básicos em um sistema Linux não é tão complicado. Muitos serviços, depois de instalados, já estão funcionando, mas com configuração padrão. Alguns já vêm instalados e habilitados por padrão já na instalação do sistema Linux. Entretanto, ao pensar em segurança, sabemos que não se deve colocar um serviço em produção com configurações padrão sem que estas sejam avaliadas, testadas e revisadas.

Muitos administradores, talvez por serem iniciantes, não sabem tirar proveito de ferra- mentas clássicas para verificar e avaliar se o serviço está funcionando corretamente, além de verificar em qual porta o serviço está trabalhando e se está recebendo requisições corretamente. Em alguns casos, também é necessário ver se nenhum incidente de segu- rança motivou alguma mudança no funcionamento do serviço ou mesmo se foi um vetor de ameaça para um acesso indevido que possibilitou um invasor fazer alterações no sistema que poderiam prejudicá-lo.

Diante desse cenário, começaremos este capítulo mostrando alguns comandos que podem formar uma lista de ações e recursos que poderão ser chamados de “checklist”, o que permi- tirá uma avaliação, embora pontual, mais interessante dos serviços de redes ativos.

Primeiramente, é recomendável identificar a porta definida pelo serviço, mas isso geral- mente é uma tarefa simples, pois os serviços possuem portas pré-definidas. Podemos ver algumas portas padrão do sistema no arquivo /etc/services. Exemplos de algumas portas:

# cat /etc/services

H ar de ni ng e m L inu x

ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp

Após ter identificado as informações das portas em que os serviços são ativados, devemos usar algum comando que permita consultar informações de porta, como o netstat, lsof e fuser. Esses comandos vão fornecer algumas informações sobre os serviços de rede do ativo no sistema. É válido lembrar que são encontradas implementações do netstat em outros Sistemas Operacionais Unix e também Windows, mas que não necessariamente possuem as mesmas opções ou os recursos funcionarão da mesma forma.

# netstat -nltp Onde:

1 -n: é a opção para fazer o netstat não resolver os IPs para nomes;

1 -l: lista os sockets que estão ouvindo (listen), ou seja, que estão prontos para receber uma conexão;

1 -t: lista somente os sockets no protocolo TCP. Podemos também utilizar o -u para proto- colos UDP;

1 -p: lista informações sobre o processo do serviço vinculado à porta consultada.

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 1 Proto: é o protocolo em que esse socket está trabalhando;

1 Endereço Local: é indicado que a porta 22 pode responder a qualquer interface de rede no sistema (0.0.0.0:22);

1 Endereço Remoto: mostra que não há nenhuma conexão relacionada àquela porta, cujo Estado é OUÇA, ou seja, aguarda conexões.

Podemos usar o netstat com o -a no lugar do -t para consultar todos os “sockets”, tanto os que estão ouvindo como os que não estão ouvindo e os com “conexões estabelecidas”, o que é muito interessante para o sysadmin. Quando se solicita informações de “conexões estabelecidas”, podemos ver a qual interface e porta (cliente e do serviço) está conectada, e a origem da conexão.

# netstat -nat

Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 10.0.0.1:32778 200.123.123.123:143 ESTABELECIDA

tcp6 0 0 ::ffff:10.0.0.1:22 ::ffff:192.168.0.8:32796 ESTABELECIDA Com a saída do comando netstat, anteriormente ilustrada, sabemos quais sockets estão dispo- níveis e podemos ver qual processo (serviço) está rodando nesse socket com o comando fuser.

Ca pí tu lo 4 - S er vi ço s d e R ed es – P ar te 1 # fuser -v 22/tcp

USER PID ACCESS COMMAND 22/tcp root 3943 f.... sshd Onde -v é o modo verbose.

Podemos ver qual usuário está rodando o processo, o PID (número do processo) e o pro- grama que está rodando, que nesse caso é o sshd. Para cada processo que está rodando, o sistema cria um diretório com seu PID no /proc, onde é possível obter algumas de suas informações. Uma delas é o arquivo cmdline, que mostra o caminho completo do programa e nos permite saber que aquele programa é real, e não um programa forjado.

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

Outra ferramenta que podemos usar é o lsof, que nos mostra informações parecidas com o netstat e o fuser, só que em uma única ferramenta. O comando lsof mostrará os sockets que estão ouvindo, que estão estabelecidos e, entre outros, nos mostrará também o usuário, o PID e o programa que está rodando. Ou seja, percebemos que o comando lsof é uma junção entre o netstat e o fuser. Porém, em algumas distribuições Linux ou mesmo dependendo da instalação, o comando lsof pode não ser instalado por padrão, sendo necessário instalá-lo via pacotes ou pelo source.

# lsof -i

firefox-b 4652 user 36u IPv4 22723 TCP 10.0.0.1:38138- >64.233.161.19:www (ESTABLISHED)

ssh 8342 root 3u IPv4 100376 TCP 10.0.0.1:54751- >192.168.0.8:ssh (ESTABLISHED)

Onde -i lista todos os processos ou arquivos relacionados a uma interface de rede. Se não for especificada uma interface de rede, como ilustrado, ele mostrará todas as interfaces. Uma coisa que muitos administradores também se esquecem de olhar são os raw sockets, sockets que não dependem de um protocolo específico e permitem acesso direto a proto- colos de baixo nível como ICMP, TCP, UDP e IP.

Podemos ver se existe algum raw socket aberto no nosso sistema utilizando o netstat com outra opção.

# netstat –nlw Onde -w lista os raw sockets.

Provavelmente não haverá nenhum aberto via Raw Socket, então se retorna uma resposta vazia. Mas deve-se também ter muita atenção com a comunicação Raw Sockets, pois é comum backdoors mais sutis que utilizam o raw socket. Um bom exemplo é uma backdoor que utilize o protocolo ICMP para permitir a execução de comandos remotamente.

Saiba mais

Os raw sockets são considerados por muitos como um poten- cial foco de problemas de segurança devido ao fato de que poucos administradores veri- ficam as atividades de raw sockets de seus sistemas.

l

Saiba mais

Veja mais detalhes na documentação do hping.

H ar de ni ng e m L inu x

Saída de uma resposta 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

Um último programa sugerido, que pode ser usado para validação de portas ativas, é o nmap, um portascanner muito poderoso para varreduras de portas. Nesse caso, temos a possibilidade de fazer uma análise interna ou externa de um determinado servidor ou grupo de servidores para que seja possível inventariar quais portas/serviços estão disponíveis. O nmap não vem por padrão nas distribuições Linux, sendo necessário instalá-lo.

Exemplo de uso para portas TCP: # nmap -sT –n –P0 10.0.0.1

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

1 -sT: faz a varredura completa de portas TCP; 1 -n: não resolver nomes via DNS;

1 -P0: não realizar teste para verificar se o servidor alto está ativo (icmp Request e ack na porta 80);

1 10.0.0.1: representa seu IP.

Exemplificação de uso nmap tendo como alvo a interface loopback: # nmap -sT –n –P0 localhost

# nmap -sT –n –P0 -p 22 localhost

PORT STATE SERVICE 22/tcp open ssh Exemplo de uso para portas UDP:

# nmap -sU –n –P0 10.0.0.1

PORT STATE SERVICE 9/udp open|filtered discard

Portascanner

Ferramenta que faz uma varredura nas portas, testando a segurança do firewall e verificando se as portas estão abertas ou fechadas para acesso através da internet.

Ca pí tu lo 4 - S er vi ço s d e R ed es – P ar te 1

53/udp open|filtered domain 111/udp open|filtered rpcbind Onde:

1 -sT: faz a varredura completa de portas TCP; 1 10.0.0.1: representa seu IP.

No contexto local:

# nmap –sU –n –P0 localhost

# nmap -sU –n –P0 -p 53 localhost

PORT STATE SERVICE 53/udp open|filtered domain

Exemplo de uso para portas TCP e UDP simultaneamente: # nmap -sU –sT –n –P0 10.0.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 –n –P0 -F 10.0.0.1

Onde -F representa todas as portas de serviços clássicos no (/etc/services do nmap). Ou usar a opção -p- porta a porta até de 1 a 65535. Sendo assim, é possível consultar todas as portas que estão disponíveis em nosso sistema.

# nmap -sU -sT –n –P0 -p- 10.0.0.1

Podemos ver também os banners dos serviços que estão rodando. Para um invasor, essa pode ser uma informação preciosa.

# nmap –sV –n –P0 10.0.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. Podemos consultar em outro momento seu manual, para ver todas as opções de uso.

H ar de ni ng e m L inu x

Não devemos deixar o nmap instalado em um servidor sem controles rígidos de permissionamento, pois, por padrão, um usuário comum pode executá-lo para realização de varredura do tipo TCP Connect. Apesar de ser uma ferramenta que fornece informações preciosas, ele pode fornecer essas mesmas informações para um usuário mal-intencionado ou mesmo para alguém que teve algum tipo de acesso arbitrário ao sistema.

Exercício de fixação 1 e

No documento Hardening em Linux (páginas 103-108)