Principais fontes de vulnerabilidade no Linux
O Linux é seguro? A resposta é enfática: não. Ou mais flexivelmente: depende. Mas depende de quê? Depende de quem o administra. Um Linux mal configurado pode ser tão ou até mais vulnerável do que outro sistema qualquer. Nesse artigo apresentaremos as principais fontes de vulnerabilidade do Linux e algumas medidas para torná-lo mais seguro.
Parte 3: Serviços desnecessários
As diversas distribuições do GNU/Linux diferem bastante em relação a quais serviços de rede são habilitados como parte da instalação inicial padrão. É comum, por exemplo, usuários iniciantes que estão instalando o Linux pela primeira vez optarem por uma instalação "full" ou mesmo selecionarem todos os pacotes de softwares de rede para serem instalados. Cada serviço de rede instalado introduz no sistema um ponto de vulnerabilidade, visto que qualquer serviço de rede ativo representa uma porta de comunicação com o mundo exterior.
Portanto, cabe ao administrador definir quais serviços são realmente necessários ao sistema e desabilitar aqueles que não são absolutamente necessários. Isso ajuda a reduzir os pontos de vulnerabilidade. Para verificar os serviços de rede ativos, existem algumas possibilidades. Uma delas é verificar todos os processos correntes e tentar identificar os serviços de rede:
# ps aux
Outra maneira é verificando portas do sistema que estão abertas. Para esse fim, podemos utilizar uma poderosa ferramenta para verificação de rede: o "nmap" (port-scanner):
# nmap -sS 127.0.0.1
A saída do "nmap" será algo do tipo:
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-04-21 22:38 BRT
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1670 closed ports
Através dessa saída, é possível verificar quais as portas estão abertas em nosso sistema e a partir disso, julgarmos o que é necessário continuar aberto e o que deve ser fechado ou filtrado.
Serviços de rede que rodam como "daemons", geralmente são iniciados no momento do boot (pelos scripts de inicialização presentes em /etc/init.d) e permanecem o tempo todo na memória aguardando que alguém se conecte a ele. Serviços executados como "daemons" aparecem no sistema como um processo qualquer e podem ser verificados facilmente utilizando-se o comando "ps".
Serviços iniciados pelo "inetd" são carregados na memória somente no momento em que são solicitados. A configuração de quais serviços podem ser carregados pelo "inetd" e seus parâmetros é feita através do arquivo /etc/inetd.conf. O "inetd" lê as configurações deste arquivo e permanece na memória, aguardando a conexão dos clientes.
<nome_serviço> <tipo_soquete> <proto> <opção> <usuário> <caminho_servidor> <argumentos>
Em que:
Portanto, cabe ao administrador definir quais serviços são realmente necessários ao sistema e desabilitar aqueles que não são absolutamente necessários. Isso ajuda a reduzir os pontos de vulnerabilidade. Para verificar os serviços de rede ativos, existem algumas possibilidades. Uma delas é verificar todos os processos correntes e tentar identificar os serviços de rede:
# ps aux
Outra maneira é verificando portas do sistema que estão abertas. Para esse fim, podemos utilizar uma poderosa ferramenta para verificação de rede: o "nmap" (port-scanner):
# nmap -sS 127.0.0.1
A saída do "nmap" será algo do tipo:
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-04-21 22:38 BRT
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1670 closed ports
PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 716/tcp open unknown 842/tcp open unknown 2049/tcp open nfs 3306/tcp open mysqlNmap finished: 1 IP address (1 host up) scanned in 0.144 seconds
Através dessa saída, é possível verificar quais as portas estão abertas em nosso sistema e a partir disso, julgarmos o que é necessário continuar aberto e o que deve ser fechado ou filtrado.
Controle dos serviços de rede
Alguns serviços de rede oferecem a opção de serem executados como "daemons" ou através do "inetd". É recomendável executar um serviço no modo "daemon" se este for um serviço solicitado freqüentemente (tais como servidores web, proxy, etc), ou através do "inetd", caso contrário (tais como servidores de ftp, ssh, etc).Serviços de rede que rodam como "daemons", geralmente são iniciados no momento do boot (pelos scripts de inicialização presentes em /etc/init.d) e permanecem o tempo todo na memória aguardando que alguém se conecte a ele. Serviços executados como "daemons" aparecem no sistema como um processo qualquer e podem ser verificados facilmente utilizando-se o comando "ps".
Serviços iniciados pelo "inetd" são carregados na memória somente no momento em que são solicitados. A configuração de quais serviços podem ser carregados pelo "inetd" e seus parâmetros é feita através do arquivo /etc/inetd.conf. O "inetd" lê as configurações deste arquivo e permanece na memória, aguardando a conexão dos clientes.
inetd.conf
O arquivo inetd.conf possui uma sintaxe simples, em que cada linha descreve um serviço que se deseja oferecer. A sintaxe é a seguinte:<nome_serviço> <tipo_soquete> <proto> <opção> <usuário> <caminho_servidor> <argumentos>
Em que:
- "serviço" é o serviço que se deseja oferecer
- "tipo_soquete" é o tipo do soquete que este item utilizará (geralmente stream para serviços baseados em TCP ou dgram para serviços baseados em UDP)
- "protocolo" é o tipo de protocolo de transporte utilizado (geralmente TCP ou UDP)
- "opção" indica se o serviço de rede libera o soquete após ele ser iniciado (nowait) ou se o "inetd" deve aguardar e assumir que qualquer servidor já em execução pegará a nova requisição de conexão (wait).
- "usuário" define o dono do "daemon" de rede
- "caminho_servidor" é o caminho para o programa servidor atual que será executado.
- "argumentos" são argumentos da linha de comando que se deseje passar para o daemon servidor quando for iniciado.
Realmente nenhum sistema é seguro sem que o Administrador tenha pelo menos um conhecimento básico sobre segurança!
Meus parabéns pelo artigo, ficou simplesmente ótimo!
Abraços