hntool – uma ferramenta de segurança para Unixes

Resolvi criar uma ferramenta para me ajudar a fazer hardening de servidores linux e facilitar a minha vida no trabalho. Assim nasceu o hntool (hardening tool), uma ferramenta escrita em python cujo objetivo é fazer uma análise simples do servidor e dizer quais as falhas de segurança que existem.

Todas as falhas são niveladas de acordo com risco que podem causar ao servidor. Falhas leves (low), médias (medium) e graves (high). Além destas categorias há mais duas: ok e info.

A ferramenta ainda está em um estágio bem inicial, mas resolvi compartilhá-la logo para ajudar aqueles que querem contribuir com algo e, claro, acelerar o desenvolvimento.

Algumas características:

  • Criei uma estrutura bem modular, baseando-me em outro projeto que mantenho: o namcap. Acredito que com essa estrutura fica muito mais fácil manter e contribuir com o projeto.
  • Não quero que o hntool realize nenhum hardening automaticamente. Quero apenas que ele me avise das falhas que existem. A decisão sobre o que (e como) fazer para consertar a falha cabe ao administrador do sistema.
  • A intenção é fazer com que o hntool sirva para qualquer distribuição, mas no momento eu só tenho testado no Arch Linux.

Usando o hntool

Para testar o hntool é fácil. Baixe-o daqui e descompacte-o. Depois é só entrar no diretório descompactado e rodar:

# python hntool.py

Sim, você só precisa do python.

Segue um exemplo do resultado do hntool (clique para ampliar):

hntool

Acho que deu para entender onde quero chegar, né?

Como contribuir

Você pode contribuir com o hntool de diversas formas: enviando código, patchs, reportando bugs e pedindo recursos. Tudo isso pode ser feito através do bug tracker do github ou enviando um email para contato arroba hugodoria.org.

Todo o código do projeto está disponível no github. Para baixá-lo e gerar seus patchs faça:

$ git clone git://github.com/hdoria/hntool.git

$ cd hntool

(faça suas mudanças no código)

$ git commit -a

$ git format-patch master

Isso irá criar um patch no formato do git. Dessa forma fica melhor para eu aplicá-lo.

A ferramenta também está precisando de um ícone simples e bonito. Sou um zero à esquerda quando se trata de desenho e totalmente incapaz de fazer algo decente. Fica aí a dica. :P

Estrutura modular

Como falei, resolvi criar o hntool de forma modular. A estrutura de um modulo é, mais ou menos, assim:

import os
 
class rule:
	def short_name(self):
		return "ssh"
	def long_name(self):
		return "Checks security problems on sshd config file"
	def analyze(self):
		check_results = [[],[],[],[],[]]
		ssh_conf_file = ['/etc/ssh/sshd_config', '/etc/sshd_config']
 
		for sshd_conf in ssh_conf_file:
			if os.path.isfile(sshd_conf):
				fp = open(sshd_conf,'r')
				lines = [x.strip('\n') for x in fp.readlines()]
 
				# Checking if SSH is using the default port
				if 'Port 22' in lines or '#Port 22' in lines:
					check_results[1].append('SSH is using the default port')
				else:
					check_results[0].append('SSH is not using the default port')				
 
				# Closing the sshd_config file
				fp.close()
 
		return check_results
	def type(self):
		return "config"

Explicando melhor:

  • short_name(self): Uma string contendo o nome curto do modulo. Ele será usado, por exemplo, na hora de listar todos os módulos existentes (hntool -l).
  • long_name(self) : Aqui é a descrição do módulo. Também será mostrada na listagem dos módulos.
  • analyze(self): É aqui que fica o código de verdade. O resultado desse método deve ser sempre uma lista com 5 elementos, que correspondem aos níveis de segurança encontrados - ok, info, low, medium e high, respectivamente.
  • type(self): Cada módulo será de um tipo. "files" para módulos que lidam com arquivos de texto simples(/etc/passwd, por exemplo) ou de configuração. "services" para módulos que lidam com serviços.

Há, também, um arquivo README explicando mais detalhes sobre o hntool. Obviamente, ele será melhorado com o tempo.

Bem, pessoal. É isso. Estarei sempre postando novidades desse projeto à partir de agora. :)

30 Comments / Leave a comment

  1. Muito legal este scanner.
    Vale pena quando instalamos um servidor novo e temos que olhar o que está faltando mexer no final da instalação ou não.
    Mais um ganho ao mudar para o Arch Linux, estou vendo que tem muita coisa legal no Planeta ArchLinux-Br.

    • Muito obrigado pelos elogios, Ataliba. :-)

      Em breve entrarão mais módulos no hntool.

      Abraços.

  2. Legal a ferramenta ! Ta rolando de boa no slackware

    • Opa Fernando,

      Muito obrigado por reportar que o hntool está funcionando no Slackware. Este feedback é bem importante.

      Fique de olho na ferramenta, pois estamos adicionando recursos constantemente.

  3. Candido Vieira

    @Ataliba, @Fernando

    A ideia é que o hntool seja uma ferramenta que funcione em qualquer sistema operacional baseado em Unix como Linux, BSD, Solaris e outros. Inicialmente nós temos em mente suportar as distribuições Linux principais, por isso se você tem outras distribuições e puder testar o hntool nelas, nós agradecemos. Na página do projeto tem um issue tracker (sistema de tickets para bugs/recursos). Você pode usá-lo para solicitar novos recursos e nos alertar sobre bugs.

  4. Putz!! Parabéns cara!!!

    Fiz um teste aqui. Não sei nada de python mas acho que essa é a hora de contribuir e aprender mais.

    Valewz

    Alexandro Silva
    http://blog.alexos.com.br

  5. Putz!!! Parabéns cara!!!

    Estou usando a ferramenta aqui. Muito masssa.
    Não sei nada de python talvez esta seja a hora de contribuir e aprender.

    Valewz

    Alexandro Silva
    http://blog.alexos.com.br

    • Muito obrigado, caro. Se tu precisar de alguma ajuda com python pode contar comigo.

      E espere novidades sobre o hntool. ;-)

  6. Miguel

    ola será que me podia ajudar com um problema que tive com o meu n78?
    gostava de fazer um downgrade do firmware mas nao sei como ficaria-lhe eternamente grato se m podesse ajudar
    obrigado
    jmiguel_santos@hotmail.com

    • Que massa, Rafael.

      Manda o patch para mim para que eu possa commitar. ;-)

  7. Olá hugo, tudo na boa?

    Não sei se isso ajuda, mas eu posso tentar criar um módulo para verificar a segurança do servidor postgresql, o que você acha?

    • Opa Sebastian,

      Ótima ideia. O postgresql é um excelente banco e, com certeza, um módulo dele para o hntool seria fantástico.

      Se precisar de ajuda na hora de criar o módulo é só me avisar.

      • Fico feliz que você se interessou!

        assim que chegar em casa eu vejo isso. Porém eu preciso trocar umas idéias como você sobre os arquivos de configuração que nem sempre ficam no mesmo diretório e como tratar. quem sabe nos falamos pelo gtalk ou algo assim. ou você prefere que eu lhe envie alguns emails?

        um abraço!

        • O que for melhor para você. Estou te enviando, por email, meu contato no gtalk. O email vai de tabela.

          Abraços.

  8. Muito bom, Hugo!

    Ta rodando certinho no Debian tambem.

    • Valeu pelo relato, Luis.

      Vou criar um documento para adicionar as distribuições em que o hntool já está rodando.

      Abraços.

  9. Olá Hugo!

    o hntool roda normalmente no fedora 11 x86_64.

    • Opa Sebastian,

      Obrigado pelo relato. Adicionando o Fedora às distribuições suportadas.

  10. “Suportadas” não seria um boa expressão. “Testadas” seria mais adequada. :D

  11. Tiago Al-Alam

    Funcionando perfeitamente no Debian Lenny também!

  12. bem.. eu também oeio quando fazem isso e comentam uma coisa nada a ver com o post, mas sue formulário de contato está dando 404.
    Gostaria que incluísse meu blog no planeta Archlinux
    A url é http://open.lafactoria.com.br/
    O feed da categoria arch é http://open.lafactoria.com.br/2009/11/18/testando-o-chakra-livecd-arch-linux/ e o feed global do site é http://open.lafactoria.com.br/feed/
    Qualquer coisa, só me mandar um email

  13. irado

    bem.. huh.. pelo visto todo mundo conseguiu fazer funcionar, menos eu :(

    root@CentOS/tmp# : python hdoria-hntool-55ddcf2/hntool
    Traceback (most recent call last):
    File “hdoria-hntool-55ddcf2/hntool”, line 57, in ?
    output_modules[module] = \
    File “/tmp/hdoria-hntool-55ddcf2/lib/output/terminal.py”, line 37
    return ‘[33[1;92m OK 33[0m]‘ if use_colors else ‘[ OK ]‘
    ^
    SyntaxError: invalid syntax

    como não entendo nada de programação, só consigo olhar, olhar.. e mais nada.

    alguma dica?

  14. A idéia é muito boa mas eu achei algumas coisas que podem melhorar. Eu não testei mas notei que no ssh.py você lê o arquivo de configuração do SSH server afim de encontrar alguns padrões usando comparações de string. Esse tipo de checagem: “if ‘Protocol 2′ not in lines” pode causar vários falsos positivos pois vai falhar se eu por exemplo tiver dois espaços ou um tab entre a palavra ‘Protocol’ e ‘2′.

    Não sei ao certo qual seria a solução que cobrisse mais casos (talvez regex), já que muitas pessoas podem alterar o arquivo de configuração de uma maneira diferente da esperada mas ainda sim válida.

    Também notei que só funciona com o Python 2.4 que realmente não é o mais novo mas muitos servidores podem ter versões mais antigas do Python.

  15. Vinicius,

    Sua observação é valida. Convido vc a participar de nossa lista de emails, assim podemos centralizar e discutir as opiniões:

    http://groups.google.com/group/hntool

Ctrl+Enter