Mostrando entradas con la etiqueta kippo. Mostrar todas las entradas
Mostrando entradas con la etiqueta kippo. Mostrar todas las entradas

Failed to load application: No module named MySQLdb

Este error puede ser común y aunque yo lo describo para el empleo del honeypot kippo, la solución me imagino que será aplicable a cualquier caso. Si estáis trabajando con kippo y al arrancarlo os suelta el siguiente error,
shell> ./start.sh
Starting kippo in background...Removing stale pidfile /home/javier/kippo-0.5/kippo.pid
Loading dblog engine: mysql
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py", line 626, in run
    runApp(config)
  File "/usr/lib/python2.6/dist-packages/twisted/scripts/twistd.py", line 23, in runApp
    _SomeApplicationRunner(config).run()
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py", line 374, in run
    self.application = self.createOrGetApplication()
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py", line 439, in createOrGetApplication
    application = getApplication(self.config, passphrase)
---  ---
  File "/usr/lib/python2.6/dist-packages/twisted/application/app.py", line 450, in getApplication
    application = service.loadApplication(filename, style, passphrase)
  File "/usr/lib/python2.6/dist-packages/twisted/application/service.py", line 390, in loadApplication
    application = sob.loadValueFromFile(filename, 'application', passphrase)
  File "/usr/lib/python2.6/dist-packages/twisted/persisted/sob.py", line 210, in loadValueFromFile
    exec fileObj in d, d
  File "kippo.tac", line 28, in 
    factory = honeypot.HoneyPotSSHFactory()
  File "/home/javier/kippo-0.5/kippo/core/honeypot.py", line 392, in __init__
    globals(), locals(), ['dblog']).DBLogger(cfg)
  File "/home/javier/kippo-0.5/kippo/dblog/mysql.py", line 5, in 
    import MySQLdb, uuid
exceptions.ImportError: No module named MySQLdb

Failed to load application: No module named MySQLdb
Lo que os falta es la librería de acceso a MySQL desde python. Por lo tanto la solución,
shell> apt-get install python-mysqldb
Con lo que kippo arrancará perfectamente.
shell> ./start.sh
Starting kippo in background...Loading dblog engine: mysql
Leer más

kippo, port redirect

Alguna gente me ha preguntado, a razón del post de cómo instalar kippo, cómo poder poner a kippo en el puerto 22 (tradicionalmente ssh), ya que al tener que ejecutarlo como usuario sin privilegios no deja levantarlo en dicho puerto. La solución no está en ningún fake en el código, simplemente está un poco de empleo de iptables. Así que si por defecto está arrancado en el puerto 2222, únicamente
shell> iptables -t nat -A PREROUTING \
       -i eth0  -p tcp --dport 22 \
       -j REDIRECT --to-port 2222
Como por cierto, muy bien recomiendan en la documentación. Otra forma de hacerlo que también se recomienda desde la documentación de kippo es el empleo de authbind, un software que permite levantar servicios a usuarios sin privilegios en puertos inferiores al 1024, tradicionalmente sólo permitido a root. Este paquete está disponible en los repositorios oficiales de debian, por lo que resulta sencilla la instalación.
shell> apt-get install authbind
Una vez está instalado nos queda configurar el acceso como usuarios normales al puerto 22. Para ello creamos el fichero /etc/authbind/byport/22 y lo establecer del usuario que vaya a ejecutar el software kippo. En mi caso, javier.
shell> touch /etc/authbind/byport/22
shell> chown javier:javier /etc/authbind/byport/22
shell> chmod 777 /etc/authbind/byport/22
Una vez que lo tenemos, únicamente queda modificar el fichero start.sh y añadir al principio de la línea que llame a authbind, quedando tal que así,
#!/bin/sh

echo -n "Starting kippo in background..."
authbind --deep twistd -y kippo.tac -l log/kippo.log --pidfile kippo.pid
Y lógicamente en la configuración (kippo.cfg) cambiar el puerto de 2222 (puerto por defecto) al 22, puerto en el que ahora ya tenemos permisos.
...
ssh_port = 22
...
Leer más

kippo, mysql schema

Ya hemos detallado cómo instalar y configurar kippo como servicio honeypot ssh y las ventajas que supone tener almacenadas los intentos de acceso y los comandos en una base de datos. kippo por defecto no las almacena, para editando un poco su configuración sí se puede habilitar el acceso a base de datos, como bien se detalló aquí. Sin embargo, antes de poder habilitar el acceso e iniciar el servicio hay que crear la base de datos y desplegar el schema de kippo para que todo funcione correctamente. Por supuesto, partimos de un servidor de base de datos MySQL accesible desde la máquina de kippo.
El schema de kippo está en la carpeta doc/sql/ y se llama mysql.sql y únicamente son las definiciones de las tablas que el servicio emplear. Para desplegarlo por lo tanto,
shell> mysql -u root -p
Enter password:

mysql> create database kippo;
Query OK, 1 row affected (0.01 sec)

mysql> use kippo;
Database changed

mysql> source ~/kippo-0.5/doc/sql/mysql.sql
Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

mysql> show tables;
+-----------------+
| Tables_in_kippo |
+-----------------+
| auth            |
| clients         |
| input           |
| sensors         |
| sessions        |
| ttylog          |
+-----------------+
6 rows in set (0.00 sec)
Finalmente damos permisos a un usuario 'normal' para acceder y así no tener que acceder con usuario root.
mysql> GRANT ALL PRIVILEGES
       -> ON kippo.*
       -> TO 'kippo'@'localhost'
       -> IDENTIFIED BY 'kippo';
Query OK, 0 rows affected (0.00 sec)
Leer más

kippo, probando un honeypot ssh

Si estás metido en el mundo de la seguridad informática o en el mundo Linux fijo que alguna vez has escuchado ya este término. Un honeypot no es más que un pequeño tarro de miel que, como éste, atrae a todos los posibles atacantes. La idea es dejar "un equipo" accesible y de fácil acceso para que los posibles atacantes "queden en él" y así no se centren en equipos más importantes de la red.
Existen numerosas aplicaciones de éste tipo, especialmente para servicios tales como ssh o telnet y hoy nos vamos a centrar en un honeypot ssh, en este caso kippo. La verdad es que existen muchos y la decisión de comentar éste no es por nada en particular, sólo que ofrece una gran facilidad de instalación (especialmente en equipos debian) y una gran versatilidad, ofreciendo la posibilidad de enviar de forma automática los reportes a base de datos (mysql), con lo que el análisis estadístico será mucho más fácil de hacer.
Para realizar la instalación seguiremos los pasos que está perfectamente descritos en la wiki del proyecto, con algún añadido que espero os sea de utilidad. Comenzamos.
  • Instalación del software necesario
    Por defecto para poder arrancar kippo necesitamos tener instalado python-twisted y si nos interesa la conexión con la base de datos (mysql), también hay que instalar python-mysqldb.
    shell> apt-get install python-twisted python-mysqldb
    
  • Obtener kippo
    Descargamos desde la web oficial la última versión del honeypot. En este caso la 0.5 y lo descomprimimos.
    shell> wget http://kippo.googlecode.com/files/kippo-0.5.tar.gz
    shell> tar zxvf kippo-0.5.tar.gz
  • Configurar kippo (kippo.cfg)
    Sólo falta configurarlo antes de arrancar. La configuración que trae por defecto es perfectamente válida, pero yo prefiero cambiarle el nombre, para saber a qué 'máquina' de la red me estoy conectado (en real, este nombre mejor no establecerlo) y también configurar la conexión contra la base de datos.
    Antes de arrancar el servicio tenemos que crear la base de datos de kippo y desplegar el schema, ya que no lo hace automáticamente. Pincha aquí para ver cómo se hace.
    ...
    hostname = kippo # nombre del equipo 'fake'
    ...
    fake_addr = 192.168.1.254 # ip del equipo 'fake'
    ...
    [database_mysql]
    host = localhost
    database = kippo
    username = kipoo
    password = kippo
    
  • Establecer las contraseñas fake
    Aunque por defecto la contraseña empleada es '123456', es mejor crear ya una seria de contraseñas que quieras que sean válidas para tu sistema. Para hacerlo ya trae una utilidad (passdb.py) que sirve para tal fin. Permite en tiempo real generar (add), borrar (remove) y listar (list) contraseñas.
    shell> utils/passdb.py ../data/pass.db add root
    shell> utils/passdb.py ../data/pass.db add 1234
    shell> utils/passdb.py ../data/pass.db list
    1234
    root
    
  • Arrancar el honeypot
    Y finalmente sólo queda arrancar la trampa. Aunque no se citó hasta ahora, por defecto y para proteger el sistema no se permite la ejecución como root del honeypot. En caso de que tenga algún fallo y el atacante consiga acceso al sistema, al no ser root no tendrá un acceso completo.
    shell> ./start.sh
    Starting kippo in background...Loading dblog engine: mysql
    
Una vez kippo arrancado, éste queda en segundo plano ejecutándose sin hacer nada a la espera de conexiones. Toda la actividad que sea detectada se queda almacenada en el fichero log/kippo.log, que podrá ser consultado en tiempo real y a mayores, también está metiendo datos de accesos en la base de datos. Aquí vemos un intento de acceso al sistema con el usuario root y la contraseña empleada aunque infructuoso.
shell> tail -f log/kippo.log
2012-08-08 16:24:39+0200 [kippo.core.honeypot.HoneyPotSSHFactory] New connection: 192.168.1.33:40222 (192.168.1.35:2222) [session: 0]
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] Remote SSH version: SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] kex alg, key alg: diffie-hellman-group1-sha1 ssh-rsa
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] outgoing: aes128-ctr hmac-md5 none
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] incoming: aes128-ctr hmac-md5 none
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] NEW KEYS
2012-08-08 16:24:40+0200 [HoneyPotTransport,0,192.168.1.33] starting service ssh-userauth
2012-08-08 16:24:40+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root trying auth none
2012-08-08 16:24:40+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root trying auth keyboard-interactive
2012-08-08 16:24:41+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] login attempt [root/asd] failed
2012-08-08 16:24:41+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root failed auth keyboard-interactive
2012-08-08 16:24:41+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] unauthorized login: 
2012-08-08 16:24:41+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root trying auth keyboard-interactive
2012-08-08 16:24:44+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] login attempt [root/qwer] failed
2012-08-08 16:24:44+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root failed auth keyboard-interactive
2012-08-08 16:24:44+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] unauthorized login: 
2012-08-08 16:24:44+0200 [SSHService ssh-userauth on HoneyPotTransport,0,192.168.1.33] root trying auth keyboard-interactive
2012-08-08 16:24:46+0200 [HoneyPotTransport,0,192.168.1.33] connection lost
Lo mismo lo podemos ver en la base de datos, que también está almacenando dicha información de forma más estructurada. Para este mismo caso se han detectado,
mysql> select * from auth;
+----+-----------+---------+----------+----------+---------------------+
| id | session   | success | username | password | timestamp           |
+----+-----------+---------+----------+----------+---------------------+
|  1 | c9fc90fce |       0 | root     | asd      | 2012-08-11 14:24:41 |
|  2 | 63ef9f098 |       0 | root     | qwer     | 2012-08-11 14:24:44 |
+----+-----------+---------+----------+----------+---------------------+
2 rows in set (0.00 sec)
En caso de que un intento de acceso sea correcto el atacante quedará en una sesión que simula perfectamente un equipo accesible por ssh, pero sin datos reales y almacenando todo lo que ejecuta en la base de datos.
mysql> select * from auth;
+----+-----------+---------+----------+----------+---------------------+
| id | session   | success | username | password | timestamp           |
+----+-----------+---------+----------+----------+---------------------+
|  1 | c9fc90fce |       0 | root     | asd      | 2012-08-11 14:24:41 |
|  2 | 63ef9f098 |       0 | root     | qwer     | 2012-08-11 14:24:44 |
|  3 | a2582fc84 |       1 | root     | 1234     | 2012-08-08 14:30:44 |
+----+-----------+---------+----------+----------+---------------------+
2 rows in set (0.00 sec)

mysql> select * from input;
+----+-----------+---------------------+---------+-----------------+
| id | session   | timestamp           | success | input           |
+----+-----------+-------------------- +---------+-----------------+
|  1 | a2582fc0e | 2012-08-11 14:31:00 |       1 | ls              |
|  2 | a2582fc1e | 2012-08-11 14:32:05 |       1 | cd /etc         |
|  3 | a2582fc2e | 2012-08-11 14:32:10 |       1 | cat fstab       |
|  4 | a2582fc3e | 2012-08-11 14:32:13 |       1 | cat passwd      |
|  5 | a2582fc4e | 2012-08-11 14:32:17 |       1 | ls              |
|  6 | a2582fc5e | 2012-08-11 14:32:46 |       1 | ifconfig        |
|  7 | a2582fc6e | 2012-08-11 14:32:58 |       1 | ping 10.98.55.1 |
|  8 | a2582fc7e | 2012-08-11 14:33:03 |       0 | route -n        |
|  9 | a2582fc8e | 2012-08-11 14:33:06 |       0 | route           |
| 10 | a2582fc9e | 2012-08-11 14:33:09 |       0 | ip a l          |
+----+-----------+---------------------+---------+-----------------+
10 rows in set (0.00 sec)
Como podéis observar la información recolectada es de mucha importancia y da una idea clara de lo que pueden hacer los atacantes a un sistema real, así como saber qué tipo de contraseñas y máquinas emplean.
Todo este entorno es de desarrollo en casa y por lo tanto no tiene mucho sentido. Intentaré probarlo en real y ya os mostraré los datos que aparecen después de un par de días de funcionamiento. Fijo que son sorprendentes.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios