Como configurar o honeypot SSH Kippo no CentOS 5.5
Visão geral
Kippo é um honeypot SSH de interação média projetado para registrar ataques de força bruta e, o mais importante, toda a interação de shell do atacante. Ele é inspirado por outras soluções de honeypot, mas é um projeto distinto. Este tutorial descreve como compilar e instalar o Kippo em um servidor CentOS 5.5.
Importante: este procedimento envolve execução de serviços de rede que simulam sistemas vulneráveis. Utilize ambientes isolados (VMs ou VLANs) e políticas de segurança apropriadas antes de expor qualquer honeypot à Internet.
Intenção e variantes de busca
Objetivo principal: instalar e executar Kippo no CentOS 5.5. Variantes relacionadas: instalar kippo centos, kippo ssh honeypot, configurar kippo, kippo tutorial, honeypot ssh centos.
Requisitos mínimos
- Acesso root ou sudo no servidor CentOS 5.5.
- Conectividade para baixar pacotes (wget).
- Isolamento de rede (recomendado): rede de salto ou ambiente de laboratório.
- Python 2.6 (CentOS 5.5 traz por padrão Python 2.4).
Instalação do Python 2.6
Como o CentOS 5.5 inclui apenas Python 2.4, instale o Python 2.6 seguindo o tutorial indicado no link abaixo:
http://www.geekymedia.com/tech-articles/rhel5-centos5-rpms-for-python-2-5-and-2-6/
Notas importantes:
- Instale os RPMs da versão desejada (pelo menos o pacote base e o libs).
- Para iniciar o Python 2.6 use python26 em vez de python. (O Python 2.4 original permanece instalado.)
- Ao instalar pacotes com setuptools, use a versão correta: python26 setup.py install
Instalação do Twisted, Zope Interface, Pycrypto e pyasn1
Twisted é um motor de rede orientado a eventos para Python. Zope Interface fornece contratos de interface em Python. Pycrypto oferece algoritmos criptográficos. pyasn1 implementa tipos ASN.1 e codecs.
Execute os passos abaixo como root ou com permissão adequada. Os blocos de código são preservados; use python26 conforme mostrado.
cd /tmp
wget http://twistedmatrix.com/Releases/Twisted/10.2/Twisted-10.2.0.tar.bz2
tar -xvf Twisted-10.2.0.tar.bz2
cd Twisted-10.2.0
python26 setup.py build
python26 setup.py install
cd /tmp
wget http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz
tar -xvf zope.interface-3.3.0.tar.gz
cd zope.interface-3.3.0
python26 setup.py build
python26 setup.py install
cd /tmp
wget wget http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz
tar -xvf pycrypto-2.0.1.tar.gz
cd pycrypto-2.0.1
python26 setup.py build
python26 setup.py install
cd /tmp
wget http://sourceforge.net/projects/pyasn1/files/pyasn1-devel/0.0.12a/pyasn1-0.0.12a.tar.gz/download
tar -xvf pyasn1-0.0.12a.tar.gz
cd pyasn1-0.0.12a
python26 setup.py build
python26 setup.py install
Criar usuário regular
Kippo não deve rodar como root. Crie um usuário dedicado ao honeypot:
useradd kippouser
Baixar o código fonte do Kippo
Faça login no usuário kippo e baixe a versão do Kippo disponível no repositório indicado.
su - kippouser
wget http://kippo.googlecode.com/files/kippo-0.5.tar.gz
tar -xvf kippo-0.5.tar.gz
cd kippo-0.5
Configurar o Kippo
Edite o arquivo de configuração principal kippo.cfg conforme suas necessidades. O arquivo abaixo contém comentários e opções; preserve-o como está e ajuste ssh_port, hostname, caminhos e credenciais iniciais.
vi kippo.cfg
#
# Kippo configuration file (kippo.cfg)
#
[honeypot]
# IP addresses to listen for incoming SSH connections.
#
# (default: 0.0.0.0) = any address
#ssh_addr = 0.0.0.0
# Port to listen for incoming SSH connections.
#
# (default: 2222)
ssh_port = 2222
# Hostname for the honeypot. Displayed by the shell prompt of the virtual
# environment.
#
# (default: sales)
hostname = sales
# Directory where to save log files in.
#
# (default: log)
log_path = log
# Directory where to save downloaded (malware) files in.
#
# (default: dl)
download_path = dl
# Directory where virtual file contents are kept in.
#
# This is only used by commands like 'cat' to display the contents of files.
# Adding files here is not enough for them to appear in the honeypot - the
# actual virtual filesystem is kept in filesystem_file (see below)
#
# (default: honeyfs)
contents_path = honeyfs
# File in the python pickle format containing the virtual filesystem.
#
# This includes the filenames, paths, permissions for the whole filesystem,
# but not the file contents. This is created by the createfs.py utility from
# a real template linux installation.
#
# (default: fs.pickle)
filesystem_file = fs.pickle
# Directory for miscellaneous data files, such as the password database.
#
# (default: data_path)
data_path = data
# Directory for creating simple commands that only output text.
#
# The command must be placed under this directory with the proper path, such
# as:
# txtcmds/usr/bin/vi
# The contents of the file will be the output of the command when run inside
# the honeypot.
#
# In addition to this, the file must exist in the virtual
# filesystem {filesystem_file}
#
# (default: txtcmds)
txtcmds_path = txtcmds
# Public and private SSH key files. If these don't exist, they are created
# automatically.
#
# (defaults: public.key and private.key)
public_key = public.key
private_key = private.key
# Initial root password. Future passwords will be stored in
# {data_path}/pass.db
#
# (default: 123456)
password = 123456
# IP address to bind to when opening outgoing connections. Used exclusively by
# the wget command.
#
# (default: not specified)
#out_addr = 0.0.0.0
# Sensor name use to identify this honeypot instance. Used by the database
# logging modules such as mysql.
#
# If not specified, the logging modules will instead use the IP address of the
# connection as the sensor name.
#
# (default: not specified)
#sensor_name=myhostname
# Fake address displayed as the address of the incoming connection.
# This doesn't affect logging, and is only usado by honeypot commands such as
# 'w' and 'last'
#
# If not specified, the actual IP address is displayed instead (default
# behaviour).
#
# (default: not specified)
#fake_addr = 192.168.66.254
# MySQL logging module
#
# Database structure for this module is supplied in doc/sql/mysql.sql
#
# To enable this module, remove the comments below, including the
# [database_mysql] line.
#[database_mysql]
#host = localhost
#database = kippo
#username = kippo
#password = secret
Importante: mantenha cópias de backup do arquivo kippo.cfg e dos arquivos de filesystem/pickle antes de modificar.
Iniciar o Kippo
Para iniciar o honeypot:
./start.sh
Arquivo de log
Por padrão a saída do Kippo é redirecionada para log/kippo.log. Para acompanhar em tempo real:
tail -f log/kippo.log
Tornar o Kippo acessível externamente
Por padrão o Kippo escuta na porta 2222. Para redirecionar conexões da porta 22 para a porta 2222 em Linux (quando você não pode rodar como root na porta 22) use:
iptables -t nat -A PREROUTING -i IN_IFACE -p tcp --dport 22 -j REDIRECT --to-port 2222
Substitua IN_IFACE pela interface real, por exemplo eth0.
Nota: modifique regras de firewall com cuidado e garanta que o honeypot esteja em uma rede controlada.
Testes
Conecte ao servidor Kippo na porta 2222 usando root e a senha inicial 123456 para validar o comportamento:
ssh 127.0.0.1 -p 2222 -l root
Você deve ver o prompt virtual configurado, por exemplo:
sales:~#
Checklist por função
Administrador de sistema:
- Isolar o honeypot em VM/VLAN
- Criar usuário não-root (kippouser)
- Aplicar regras de NAT/iptables para redirecionamento seguro
- Limitar conectividade de saída (egress) para evitar abuso
Analista de segurança / SOC:
- Configurar logging centralizado (syslog/ELK/Graylog)
- Habilitar alertas para novos IPs e downloads
- Armazenar evidências (logs, arquivos dl) em local imutável
Equipe de compliance / legal:
- Revisar retenção de logs e requisitos de privacidade
- Definir política para compartilhamento de amostras de malware
Quando pode falhar
- Dependências incompatíveis: CentOS 5.5 traz bibliotecas antigas; verifique versões do Twisted e Pycrypto.
- Execução sem isolamento: se o honeypot tiver acesso irrestrito à Internet, pode ser usado para propagar malware.
- Permissões incorretas: executar como root ou permitir gravação em locais do sistema pode comprometer a máquina hospedeira.
- Versão do Python: Kippo requer Python 2.x; não é compatível com Python 3 sem modificações.
Abordagens alternativas
- Cowrie: projeto popular derivado/modernizado do Kippo (compatível com Python mais recente) e mantido ativamente.
- Dionaea: focado em captura de malware e serviços diversos (bom para amostras binárias).
- Honeyd: emulação de hosts para protocolos diversos em redes grandes.
Escolha conforme objetivo: registro de sessão interativa (Kippo/Cowrie) versus captura de amostras binárias (Dionaea).
Mini playbook de produção
- Provisionar VM isolada com snapshot.
- Aplicar updates de hypervisor e sistema hospedeiro.
- Instalar Python 2.6 e dependências (Twisted, Pycrypto, etc.).
- Criar usuário não-root e baixar Kippo.
- Configurar kippo.cfg (ports, caminhos, log).
- Aplicar regras de firewall para limitar e monitorar egress.
- Integrar logs a SIEM/ELK.
- Testar com conexões locais e validar prompts e gravação.
- Habilitar alertas e criar playbooks de resposta.
Critérios de aceitação
- O Kippo inicia sem erros e cria log/kippo.log.
- Conexões SSH para a porta configurada apresentam o prompt configurado (ex.: sales:~#).
- Sessões de atacante são registradas e reproduzíveis a partir dos logs.
- Arquivos baixados por atacantes são armazenados em download_path para análise.
- Honeypot não permite elevação de privilégios na máquina hospedeira.
Segurança e privacidade
Boas práticas de segurança:
- Não rode Kippo como root.
- Limite a conectividade de saída (egress) para evitar que o honeypot sirva como trampolim.
- Use snapshots e backups antes de alterações.
- Monitore integridade do sistema hospedeiro.
Privacidade e conformidade (GDPR e leis locais):
- Logs podem conter endereços IP e dados de sessão. Avalie retenção e anonimização conforme sua política de privacidade.
- Se amostras de malware incluírem dados pessoais, trate conforme requisitos legais e informe o time jurídico.
Testes de aceitação (casos de teste)
- CT-01: Iniciar serviço e verificar criação de arquivo log/kippo.log.
- CT-02: Conectar por SSH com credenciais iniciais e verificar gravação da sessão.
- CT-03: Simular download via wget na sessão do honeypot e confirmar arquivo em download_path.
- CT-04: Verificar que regras de firewall impedem tráfego de saída não autorizado.
Perguntas frequentes
Q: Posso executar Kippo em produção?
A: Honeypots devem ficar restritos a ambientes controlados; evite expô-los diretamente em infraestruturas de produção sem isolamento.
Q: Kippo funciona com Python 3?
A: Kippo foi projetado para Python 2.x. Projetos mais novos como Cowrie oferecem compatibilidade atualizada.
Q: Onde encontro análises das sessões gravadas?
A: Logs ficam em log/ e as sessões podem ser processadas por ferramentas de parsing específicas para Kippo/Cowrie.
Links úteis
The Honeynet Project: http://www.honeynet.org/
Honeypot (wikipedia): http://en.wikipedia.org/wiki/Honeypot_(computing)
Kippo Project: http://kippo.googlecode.com/
Iran Honeynet Project: http://www.honeynet.ir/
CentOS: http://www.centos.org/
Resumo
Este guia cobriu a instalação do Kippo no CentOS 5.5, dependências necessárias, configuração básica, testes e medidas de segurança. Para ambientes modernos, considere alternativas mantidas ativamente, como Cowrie.