Archive | Security RSS feed for this section

HnTool 0.1 liberado

9 Apr

output-html

Seguindo o principio do "release early, release often", estamos orgulhosos de liberar a primeira versão do HnTool, uma ferramenta cujo objetivo é fazer uma análise simples do servidor e dizer quais as falhas de segurança que existem.

Nesta primeira versão você terá:

  • Suporte ao Arch Linux, CentOS, Debian, Fedora, Gentoo e Ubuntu.
  • Testes para Apache, PHP, Portas, PostgreSQL, SSH e outros.
  • Relatório em HTML ou terminal.
  • Estrutura interna modular e fácil de contribuir.

Temos muitas ideias para as próximas versões do HnTool, entre elas:

  • Módulos para MySQL, FTP, DNS, Squid, Iptables, Samba, DHCP, cups
  • Um report mais detalhado, mostrando como corrigir a falha encontrada
  • Opção para atualizar os módulos pela própria ferramenta
  • Analisador web, através de upload de arquivos de configuração
  • Suporte a traduções

Baixando e instalando

Para instalar o HnTool pelo fonte, baixe-o desde endereço e faça:

$ tar xvf hntool-0.1.tar.gz

$ cd hntool-0.1

# python setup.py install --prefix /usr/ --root /

Se você usa Arch Linux você pode instalar o HnTool através do pacote criado:

$ wget http://hntool.googlecode.com/files/hntool-0.1-1-i686.pkg.tar.xz

# pacman -U http://hntool.googlecode.com/files/hntool-0.1-1-i686.pkg.tar.xz

NOTA: Por enquanto só há pacote para o Arch Linux. Se você usa alguma distribuição baseada em rpm ou deb e sabe criar pacote, por favor, não se acanhe. Crie um e adicione em um bug report.  Se precisar de um guia, pode usar o PKGBUILD que fiz para criar o pacote do Arch Linux.

Usando

Para rodar o HnTool basta executar o seguinte comando:

# hntool

Isso irá gerar um relatório no terminal:

Se preferir, você pode gerar um relatório em HTML com o comando:

# hntool -t html > index.html

Para maiores informações rode:

# hntool -h

Reportando Bugs

O HnTool está em um estado tão inicial e com tanto código sendo adicionado frequentemente que, com certeza, você vai encontrar vários bugs. Por favor, não deixe de relatá-los em http://code.google.com/p/hntool/issues/list.

Contribuindo

Contribuir com o projeto é fácil. Você pode dar sugestões, reportar bugs e pedir novas funcionalidades. Além disso, você pode contribuir criando módulos. Veja como é fácil:

Todos os módulos seguem a seguinte estrutura:

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 __init__(self, options):
			pass
		def analyze(self, options):
			check_results = {'ok': [], 'low': [], 'medium': [], 'high': [], 'info': []}
			ssh_conf_file = ['/etc/ssh/sshd_config', '/etc/sshd_config']
 
			for sshd_conf in ssh_conf_file:
				if os.path.isfile(sshd_conf):
					try:
						fp = open(sshd_conf,'r')
					except IOError, (errno, strerror):
						check_results['info'].append('Could not
open %s: %s' % (sshd_conf, strerror))
						continue
 
					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['low'].append('SSH is using the default port')
					else:
						check_results['ok'].append('SSH is not using the default port')
 
					# Closing the sshd_config file
					fp.close()
 
				return check_results
		def type(self):
			return "files"

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.

Autores

Muita gente foi importante para este release, contribuindo com sugestões, bugs reports, código e, claro, apoio. Muito obrigado, Alexandro Silva, Aurélio Heckert, Candido Vieira, Elton Pereira, Italo Valcy, Késsia Pinheiro, Rafael Gomes, Rafael Gonçalves Martins, picoloto, Sebastian SWC. :-)

Bem, é isso. Aguardem novidades na versão 0.2.

GreenSQL – Protegendo seu MySQL de SQL Injection

12 Mar

O número de aplicações WEB tem aumentado bastante nos últimos anos, mas, infelizmente, os desenvolvedores parecem não se preocupar com a segurança delas.

É cada vez mais comum encontrarmos vulnerabilidades nas páginas WEB e uma das mais populares é a SQL Injection.

Felizmente, existem algumas ferramentas que servem para proteger suas aplicações desta falha. Uma delas é o GreenSQL, um um firewall usado para proteger uma base de dados MySQL de ataques de SQL Injection.

Veja o artigo completo aqui.

hntool – uma ferramenta de segurança para Unixes

26 Sep

hntool

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

Scanner de vulnerabilidades do Joomla

24 Sep

Recentemente precisei "consertar" um portal hackeado, que usava o Joomla como CMS. Isso me levou a pesquisar mais sobre a segurança do mesmo e perceber que ele não é nada bom neste quesito.

Durante minha pesquisa encontrei o OWASP Joomla Vulnerability Scanner, um script capaz de:

  • Detectar a versão do Joomla, PHP e do SO
  • Procurar falhas de segurança no Joomla e em seus componentes
  • Gerar relatórios em texto e html
  • Atualizar sua base de vulnerabilidades

Requisitos

Para usar este scanner você só precisa de: perl, perl-libwww, perl-www-mechanize. Todos estão disponíveis nos repositórios das principais distribuições. Para instalá-lo no Arch faça:

# pacman -S perl perl-libwww perl-www-mechanize

Ah! E precisa, obviamente, do próprio scanner. É só baixá-lo daqui e descompactá-lo.

Usando o OWASP Joomla Vulnerability Scanner

O uso básido do scanner é:

$ ./joomscan.pl  -u http://url-do-joomla

O joomscan te mostrará informações como:

Target: http://url-do-joomla

Server: Apache/2.2 (Debian) PHP/5.2.6-1+lenny3
X-Powered-By: PHP/5.2.6-1+lenny3

## Fingerprinting in progress ...

~1.0.x htaccess.txt revealed [1.0.13 - 1.0.15]
~1.0.x joomla.javascript.js revealed [1.0.13 - 1.0.15]
~1.0.x moscode.xml revealed [1.0.0 - 1.0.13]

* Deduced version range is : [1.0.13 - 1.0.13]

## 9 Components Found in front page  ##

com_frontpage     com_content
com_rsgallery2     com_docman     com_contact
com_search     com_banners     com_poll
com_rss

Vulnerabilities Discovered
==========================

# 1
Info -> Generic: htaccess.txt has not been renamed.
Versions Affected: Any
Check: /htaccess.txt
Exploit: Generic defenses implemented in .htaccess are not available, so exploiting is more likely to succeed.
Vulnerable? Yes

# 2
Info -> Core: Authentication Bypass Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /administrator/
Exploit: Backend accepts any password for custom Super Administrator when LDAP enabled
Vulnerable? Yes

# 3
Info -> CoreComponent: com_banners Blind SQL Injection Vulnerability
Versions effected: N/A
Check: /components/com_banners/
Exploit: /index.php?option=com_banners&task=archivesection&id=0'+and+'1'='1::/index.php?option=com_banners&task=archivesection&id=0'+and+'1'='2
Vulnerable? Yes

E por aí vai. Útil, não?

Para ver as outras opções do joomscan rode-o assim:

$ ./joomscan

Ou visite a página do projeto.