hntool – uma ferramenta de segurança para Unixes

26 Sep

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 Google Code ou enviando um email para contato arroba hugodoria.org.

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

$ hg clone https://hntool.googlecode.com/hg/ hntool

$ cd hntool

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

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. :)

37 Responses to “hntool – uma ferramenta de segurança para Unixes”

  1. Ataliba 27. Sep, 2009 at 02:10 #

    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.

    • Hugo Doria 14. Oct, 2009 at 11:49 #

      Muito obrigado pelos elogios, Ataliba. :-)

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

      Abraços.

  2. Fernando Henrique 27. Sep, 2009 at 12:55 #

    Legal a ferramenta ! Ta rolando de boa no slackware

    • Hugo Doria 27. Sep, 2009 at 14:28 #

      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 27. Sep, 2009 at 14:22 #

    @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. Alexandro Silva 28. Sep, 2009 at 08:37 #

    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. Alexandro Silva 28. Sep, 2009 at 08:42 #

    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

    • Hugo Doria 12. Oct, 2009 at 17:01 #

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

      E espere novidades sobre o hntool. ;-)

  6. Miguel 05. Oct, 2009 at 14:57 #

    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

  7. Rafael Gomes 11. Oct, 2009 at 03:51 #

    Opa! Comecei meu primeiro módulo! Veja:

    http://techfree.com.br/wordpress/2009/10/11/hntool-meu-primeiro-modulo/

    • Hugo Doria 12. Oct, 2009 at 17:00 #

      Que massa, Rafael.

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

  8. Sebastian SWC 14. Oct, 2009 at 11:40 #

    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?

    • Hugo Doria 14. Oct, 2009 at 11:48 #

      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.

      • Sebastian SWC 14. Oct, 2009 at 11:53 #

        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!

        • Hugo Doria 14. Oct, 2009 at 12:11 #

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

          Abraços.

  9. Luis Henrique 15. Oct, 2009 at 16:37 #

    Muito bom, Hugo!

    Ta rodando certinho no Debian tambem.

    • Hugo Doria 16. Oct, 2009 at 09:17 #

      Valeu pelo relato, Luis.

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

      Abraços.

  10. Sebastian SWC 15. Oct, 2009 at 23:09 #

    Olá Hugo!

    o hntool roda normalmente no fedora 11 x86_64.

    • Hugo Doria 16. Oct, 2009 at 09:17 #

      Opa Sebastian,

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

  11. Rafael Gomes 16. Oct, 2009 at 09:42 #

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

  12. Tiago Al-Alam 19. Oct, 2009 at 19:40 #

    Funcionando perfeitamente no Debian Lenny também!

  13. cochise 18. Nov, 2009 at 09:57 #

    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

  14. irado 09. Jan, 2010 at 17:51 #

    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?

  15. Vinícius 18. Jan, 2010 at 13:53 #

    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.

  16. Rafael Gomes 18. Jan, 2010 at 15:03 #

    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

  17. MrBiTs 05. Apr, 2010 at 12:44 #

    Doria

    Executando o hntool num CentOS 5.4, temos:
    # python ./hntool
    File “./hntool”, line 36
    class HntoolCore():
    ^
    SyntaxError: invalid syntax

    Isso é causado devido ao CentOS, como toda distribuição “descendente” da RedHat, ainda vir com Python 2.4. Uma mudança simples no código, removendo os parênteses, fez com que a ferramenta funcionasse.

    De resto, parabéns pelo trabalho.

    • Hugo Doria 05. Apr, 2010 at 12:53 #

      MrBits,

      Muito obrigado pelo report, cara. Você tem toda razão. :)

      Não há motivo para exigirmos python 2.6, então já removi os () da classe e comitei as mudanças. Você poderia testar agora?

      Abraços e muito obrigado.

      • MrBiTs 05. Apr, 2010 at 13:02 #

        Grande Dória

        Testado e 100% funcional. Fiz um update e as alterações vieram sem problemas.

        O Anderson Rizada que me recomendou a ferramenta e vou disseminá-la aqui no engenho.

        Novamente parabéns.

  18. John Doe 13. May, 2010 at 16:26 #

    A proposito, o plural de “Unix” é “Unices”…

    • Hugo Doria 18. May, 2010 at 09:17 #

      Pô “John Doe”,

      Porque não disse isso antes? Agora vou ter que mudar em vários lugares. hahahaha!

      Valeu pela correção. :-)

  19. Candido Vieira 18. May, 2010 at 10:15 #

    Segundo a wikipedia: “Several plural forms of Unix are used to refer to multiple brands of Unix and Unix-like systems. Most common is the conventional “Unixes”, but “Unices” (treating Unix as a Latin noun of the third declension) is also popular.”

    Ou seja, as duas formas são popularmente aceitas com predominância da forma Unixes.

Trackbacks and Pingbacks

  1. Hntool – Meu primeiro módulo « Techfree - 11. Oct, 2009

    [...] meu amigo Hugo fala em seu post, não é nada difícil colaborar com o hntool. Para aqueles que já conhecem python, a [...]

  2. Techfree » Blog Archive » Hntool – Hardening para servidores Unix - 09. Jan, 2010

    [...] Doria, o seu criador, fez um post em seu blog muito interessante, que explica bastante sobre a ferramenta em termos [...]

  3. Hntool – Hardening para servidores Unix - 18. Jan, 2010

    [...] para hardening de servidores unix, na linguagem python. Hugo Dória, o seu criador, fez um post em seu blog muito interessante, que explica bastante sobre a ferramenta em termos práticos. Até o momento, o [...]

  4. Techfree » Blog Archive » Ficando mais velho… - 23. Jan, 2010

    [...] Iniciei colaborando com código para um projeto de Software Livre do meu amigo Hugo Dória. [...]

  5. Infraestrutura para Aplicações Web Seguras parte 1 – Sistema | Alexos Core Labs - 25. Feb, 2010

    [...] é um novo projeto do meu amigo sergipano Hugo Doria que vem crescendo bem rápido e vem contando com novos contribuidores diariamente. O objetivo desta [...]

Leave a Reply