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

martes, 14 de enero de 2020

Detectar enumeración de usuarios en Active Directory mediante honeytoken: Anti BloodHound, Empire, etc

Estimados amigos de Inseguros !!!

En este artículo vamos a comentar algunas cositas de Blue Team o fortificación de sistemas Windows mediante honeypots.

En este blog hemos hablado mucho de honeypots de todo tipo, he dado charlas que podéis ver en video, en fin, que me gusta...

Bien, vamos al concepto. Hay muchas herramientas hoy en día que se usan para explotar fallos en el Directorio Activo. De las más conocidas está Empire y su módulo para reconocer usuarios o como pueda ser el ingestor de BloodHoud.


La idea es crearnos un usuarios "honeypot" en el directorio para que, si algún proceso accede a él, nos salte una alarma en la que nos haga sospechar e investigar quien está realizando esa operación de enumeración, que da como resultado un usuario.

Os pongo otro ejemplo en el mundo web por si sirve de concepto. Imagina una web como esta www.miempresa.com en la que no existe www.miempresa.com/rrhh/nominas.  Si por cualquier motivo detecto una petición a ese recurso, es alguien que está buscando por mi web ese directorio... es decir, está enumerando.  El concepto es el mismo pero llevado a Active Directory.

Para ello vamos a hacer lo mismo que hicimos el otro día para auditar los cambios del registro, pero está vez lo vamos a hacer sobre un usuario, el comodín.

Creamos un usuario con un nombre cantoso, que no usamos, por ejemplo uso cebo, de "gancho" y de mi pasión por el jamón illooooooo. Ahora accedemos a las opciones avanzadas de seguridad y configuramos la auditoría de acceso sobre este objeto, al final, es un objeto de Active Directory.

Con esto estamos creando un honeyUser, un usuario que si alguien pregunta por él, es porque está haciendo un trabajo masivo de enumeración...

Si todo ha ido bien, cualquier acceso a este fichero daría un evento...

Pero ojo, qué pasa cuando entras a usuarios y equipos de Active Directory o usas cualquier comando powershell? Get-ADUser -filter *

Aquí tendrías un falso positivo como una casa...

El trabajo del analista de eventos es recibir esta alerta, y tratar de discernir si es un usuario administrador haciendo trabajo de administrador, o es una herramienta intentando ejecutar su acometido.

Espero que te sirva de ayuda, ya no tanto para estas herramientas, sino en general como idea de las capacidades de detección mediante auditorías.

Si quieres aprender a detectar Empire por ejemplo podrás mirar en la monitorización de procesos, buscar codificación de Powershell, consultas de red y muchas más cosas, esto es solo una idea para cualquier enumeración.

Para la detección en entorno local forense me gusta este post. https://holdmybeersecurity.com/2019/02/27/sysinternals-for-windows-incident-response/

y para monitorización remota me gusta este: https://www.swelcher.com/blog/2018/3/29/detecting-powershell-empire

Gracias por leerme !!!

sábado, 25 de marzo de 2017

Honeypots XVII. Dionaea con interface gráfico

Estimados amigos de Inseguros !!!

Dentro la ya clásica seria de honeypots, voy a documentar uno de los clásicos que tenía en borrador desde hace años con algunas chuletas, pero no como artículo.

El famoso Dionaea para cazar malware. El artículo original contenía los pasos para instalar de base, compilando, pero me ha surgido la necesidad de instalarlo en un ambiente nuevo y he descubierto algunas modificaciones que lo hacen tan sencillo como apt-get. Para darle un poco más de gracia vamos a instalar un visor y darle algún toque.


Espero que os guste, los clásicos no mueren !!!

Si quereis buena información de parte de un maestro, el señor Adastra en su blog The Hackerway hizo muy buenos artículos sobre Dionaea. Uno y Dos.

El proceso de instalación base sobre un Ubuntu es tan sencilla como este:

apt-get install software-properties-common
sudo add-apt-repository ppa:honeynet/nightly
sudo apt-get update
sudo apt-get install dionaea
sudo service dionaea start

Hasta aquí tenemos nuestro honeypot por defecto instalado con todos los servicios emulados al descubierto.

Puedes probar de esta manera netstat -tnlp | grep dionaea

En mi caso hago el nateo de todos los puertos desde el exterior menos el https que uso para otras cosas, y tiro un Nmap para ver como veo en el espejo del mundo exterior. Guapo guapo guapo !!!


Como se puede observar, canta el honeypot tanto en el smb como en el sqlserver.

Si dejamos esto así, pueden pasar varias cosas:

1.- que el atacante no haga nada.
2.- que el atacante tenga una jodido 0day para dionaea y nos de guerra.
3.- que el atacante nos tire un dos/ddos para que nuestros logs y capturas no sirvan para nada.

Primera solución, editamos vim /opt/dionaea/lib/dionaea/python/dionaea/smb/include/smbfields.py y cambiamos el grupo de trabajo y el nombre del equipo a nuestro gusto. cuanto mas "financial" y cosas así mejor no?


Tras un reinicio parece que le sienta bien. 


Qué podemos hacer con el sqlserver? estoy por quitarlo, porque por mucho anti-fingerprint que use, al final, la combinación de puertos también puede ser un indicador para un atacante manual y experimentado.

De todas formas, editando vim /opt/dionaea/lib/dionaea/python/dionaea/mssql/mssql.py y cambiando r.VersionToken.TokenType = 0x00 por  0xAA funciona.


Vamos a seguir con el componente gráfico para ir viendo cosas simpáticas.

El paso para la instalación del componente gráfico es el siguiente:

apt-get install python-pip python-netaddr unzip

pip install Django *****pip install Django==1.8.0****
pip install pygeoip
pip install django-pagination
pip install django-tables2
pip install django-compressor
pip install django-htmlmin


cd /opt/
wget https://github.com/benjiec/django-tables2-simplefilter/archive/master.zip -O django-tables2-simplefilter.zip
unzip django-tables2-simplefilter.zip
mv django-tables2-simplefilter-master/ django-tables2-simplefilter/
cd django-tables2-simplefilter/
python setup.py install

git clone https://github.com/bro/pysubnettree.git
cd pysubnettree/

python setup.py install

cd /opt/
wget http://nodejs.org/dist/v0.8.16/node-v0.8.16.tar.gz
tar xzvf node-v0.8.16.tar.gz
cd node-v0.8.16
./configure
make

make install

npm install -g less npm install -g promise

cd /opt/
wget https://github.com/RootingPuntoEs/DionaeaFR/archive/master.zip -O DionaeaFR.zip
unzip DionaeaFR.zip
mv DionaeaFR-master/ DionaeaFR

cd /opt/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoLiteCity.dat.gz
gunzip GeoIP.dat.gz
mv GeoIP.dat DionaeaFR/DionaeaFR/static
mv GeoLiteCity.dat DionaeaFR/DionaeaFR/static

cp /opt/DionaeaFR/DionaeaFR/settings.py.dist /opt/DionaeaFR/DionaeaFR/settings.py
vim /opt/DionaeaFR/DionaeaFR/settings.py

**aquí debes indicar la base de datos sqlite que usa Dioanaea, en mi caso es:
/opt/dionaea/var/dionaea/dionaea.sqlite**

mkdir /var/run/dionaeafr 
cd /opt/DionaeaFR/
python manage.py collectstatic "yes"

python manage.py runserver 0.0.0.0:8000

Las librerías y dependencias me han dado mucha guerra. Cosas de linux. Librerías que no guardan compatibilidad hacia abajo, señores programadores, cuando actualizo Django o Six tengo que reprogramar mi aplicación? Con las versiones actuales así te debe ir. Dentro de unos meses quizás no.

El resultado es el esperado.



Seguro que no es necesario porque lo primero que hiciste al instalar Dionaea es mirar el fichero de configuración, pero por si acaso, el fichero de logs lo tienes en /opt/dionaea/var/log/dionaea.log y si has cazado algún payload o malware, lo tendrás en /opt/dionaea/var/dionaea/binaries.

Seguro que tampoco es necesario decir que limites el extremo de origen al que se puede conectar al servidor django para que no cante aún más el honeypot. 

Puedes cambiar el puerto pero mejor natear con restricción en origen.

Espero que te sirva de apoyo este pequeño manual de instalación y uso de Dionaea y que detectes mucho malware y salves el mundo !!!

Gracias por leerme !!!


sábado, 3 de diciembre de 2016

Honeypots XVI. Los honeypots no sirven para nada, larga vida a los honeypots...

Estimados amigos de Inseguros !!!

En este episodio de hoy vamos a hablar de Honeypots !!! Siii ,no es el primero que publico, creo que llevo ya 15. Puedes leerlos desde esta búsqueda. Todos los artículos de Honeypots en Inseguros.

Cuando uno quiere aprender sobre una materia, yo siempre aconsejo que lea. No que lea esta u otra página. Esto puede servir para ahorrarte un tiempo, para entender un proceso, o para seguir un procedimiento concreto, pero los libros son los libros. Si quieres introducirte DE VERDAD en el mundo de los honeypots, tendrás que leer los clásicos. Para mi, estos son:
Honeypots: Tracking Hackers
Honeypots for Windows.
Know Your Enemy
Virtual Honeypots

Como es normal, todo el material vale. Recuerdo la primera Navaja Negra con Pedro Candel y su magistral introducción a los Honeypots.

Otra persona que le ha dado mucha cera a esto es mi lider Fran. Un tipo humilde que tiene un gran recorrido en esta materia. Quizás sea de los pocos que conozco que realmente le saca provecho a todo esto. GRANDE  FRAN !!!

Siempre que leo post sobre honeypots, aparece el típico manual de Kippo, un honeypot para SSH y una breve aproximación del autor.

La finalidad de los honeypots siempre se menciona, pero luego en las implementaciones o usos que se le dan detecto que se usan como meros recopiladores de direcciones ip de "atacantes", un IoC con muy poco valor. Siempre lo digo en mis charlas sobre Threat Intelligence, una IP no es un dato muy relevante, y mucho menos si es un "ataque" de hace 1 mes... También podríamos discutir un poco de si un portscan es un ataque. Yo prefiero cortarlo y banear un rato por si acaso, al igual que si detecto un user-agent peligroso, pero realmente la información que se obtiene con este tipo de implementaciones es poca.

Que hay bots recorriendo el espacio ipv4 en busca de vulnerabilidades, es muy conocido, basta con tener los sistemas actualizados y listo. Me dirás que te pueden servir para detectar nuevos ataques y zero days, un clásico en la berborrea de las funcionalidades de los honeypots, pero si tienes un honeypots con un ids (basado en firmas CONOCIDAS) y miles de ataques, algunos los detectará el IDS, otros no, ahí van los zero days, y yo me pregunto, vas a revisar todos los logs y capturas de red para detectar ese ataque? Como discriminas los ataques conocidos al Tinymce de Wordpress con nuevos ataque? DIFICIL.

Otra de las "bondades" que leo para usar los honeypots es la distracción. Yo me pregunto, si tienes un servidor por el mundo con un puerto 22 abierto o un web server, que NO tienen vinculación con tu organización o empresa, no estás distrayendo a nadie. Estás recopilando ataques NO DIRIGIDOS con poco o ningún valor. Algo de valor tienen, pero cualquier blacklist que manejes medio decente tendrá estas direcciones, y lo dicho, son ataques muy conocidos y detectados por las soluciones de seguridad.


Para detectar ataques dirigidos debes usar herramientas de seguridad "de verdad" como un SIEM que detecte que tienes un ataque de fuerza bruta, desde la red tor, a varios sistemas ssh de una organización con varias ip públicas, y que está usando un diccionario fragmentado en el que la ip1 se prueba con claves de la A  la F, la ip2 se prueba con claves G a M y así sucesivamente, por decir algo....

Después de esta aproximación, llanto, queja o como quieras llamarlo, vamos a hacer algo interesante para mi con un honeypots. En un entorno de pruebas, voy a instalar un servidor web con Modsecurity y voy a redirigir el tráfico malicioso hacia un honeypot. De esta manera SI que estaré distrayendo la atención del atacante ya que el tiempo que invierte en atacar al honeypot lo puedo usar para investigar COMPLETAMENTE sus movimientos.

Lo importante de esta aproximación es que el honeypot debe estar completamente capado a nivel de red del resto del entorno de producción. Yo voy a usar un mismo sistema por comodidad, pero debería ser equipos distintos.

Lo único que voy a hacer es meter una regla básica que detecte un user-agent concreto, en este caso Nikto, y que me haga un redirect a Google:

SecRule REQUEST_HEADERS:User-Agent "Nikto" "phase:1,id:1,log,redirect:http://www.google.es"

--9935a602-A--
[03/Dec/2016:19:51:41 +0100] WEMUPX8AAQEAABu53GIAAABE 192.168.1.242 54461 192.168.1.206 80
--9935a602-B--
GET /administrator/ HTTP/1.1
Host: 192.168.1.206
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 nikto
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-ES,es;q=0.8
If-None-Match: "61-542c580c7d636-gzip"
If-Modified-Since: Sat, 03 Dec 2016 18:48:40 GMT


--9935a602-H--
Message: Access denied with redirection to http://www.google.es using status 302 (phase 1). Pattern match "nikto" at REQUEST_HEADERS:User-Agent. [file "/etc/modsecurity/modsecurity.conf"] [line "226"] [id "130"]


Entonces, tenemos un webserver en producción, con mod_security y este tipo de reglas. Tenemos otra máquina honeypot con tcpdump o similar corriendo. Si quieres meter ahí un IDS me parece bien, pero lo interesante es el contenido completo del tráfico.

Una de las cosas que tenemos que hacer es jugar con la opción EXEC de las reglas para ejecutar comandos. Sería una buena idea redirigir TODO el tráfico de la ip de origen hacia el honeypot, no solo mediante el redirect a nivel http, comprendes? Me explico:

Si el mod_security detecta un "ataque" en base a una regla, por ejemplo, que has buscado el directorio /administrator/ de un Joomla, podemos hacer el redirect comentado. Imagina que el atacante sigue buscando información pero usa un "zero day" o algo que el Waf no detecta, como no se ejecuta ninguna regla, se procesaría contra el servidor en producción. Si previamente hemos hecho un redirect a nivel TCP/IP en el firewall, TODO el tráfico del atacante pasará hacia el honeypot. Una manera de redirigir el tráfico una vez hemos obtenido la dirección ip del atacante es mediante este sencillo procedimiento. para el caso de iptables. Esta acción debería hacerse en el firewall que hay delante del webserver, por lo que si es un vps o servidor publicado no hay problema. Si es una DMZ de una empresa, deberíamos hacerlo a nivel del firewall perimetral, no del instalado en el webserver...

**********PEGAS: Cuando usamos la opción EXEC de mod_security podemos usar cualquier lenguaje instalado en el servidor, pero si queremos recoger una variable del log, como en el caso mencionado, la dirección ip de origen del ataque, debemos usar el lenguaje LUA. Esto complica un poco el asunto.
Yo en mis despliegues suelo tener un script.sh "baneador" que pasandole un parámetro IP, se conecta por ssh al firewall y mete la ip en una blacklist. Esto lo puedes hacer en cualquier tipo de firewall. Sin embargo, programar eso en LUA me cuesta. Qué hago? Escribo en lua un log en un fichero, y con eso, ejecuto el script con la ip. Poco elegante pero funcional. Sería algo así...

function main()
 local remote_addr = m.getvar("REMOTE_ADDR");
        if remote_addr == nil then
                return nil
        end
     local log_file = "/var/log/ñampazampa/modsec_full.log"
        file = io.open(log_file,"a")
        file:write("IP: "..remote_addr.."\n"..")
        file:close()
os.execute("/var/scripts/router_ban.sh "..remote_addr.."'")
end

*******

Podemos "jugar" con la opción de redirect con distintas aproximaciones. Por ejemplo, vamos a hacer una redirect para un recurso concreto si no es de la ip designada:

SecFilterSelective REMOTE_ADDR “!192.168.1.2” chain
SecFilterSelective REQUEST_URI “/wp-login.php” log,deny,redirect:http://www.google.es

Un detalle importante, si controlas el acceso desde httaccess con user-agents, direcciones ip, extesiones o directorios, no se procesa la regla en modsecurity y no se ejecuta el redirect.

Si queremos hacer el redirect con algún tipo extensión podemos hacer algo así:

SecRule REQUEST_LINE "@rx .php" "log,deny,redirect:http://www.google.es'"

No controlo mucho más ModSecurity ni esto es un tutorial al respecto, pero el concepto de introducir el Redirect tanto a nivel conexiones como a nivel http me parece muy interesante para usar con honeypots para realmente distraer y aprender, cualificar un poco más los ataques, y sobre todos, aquellos dirigidos hacia nuestras infraestructuras.

Ahora nos vamos a poner un poco en plan golfo. En España es ILEGAL atacar a nadie, aunque este te esté atacando a ti, pero qué pasaría si ponemos de señuelo un fichero exe con un malware, meterpreter o similar? Que pasaría si hacemos lo mismo con una macro y un password.doc? Sería la risa detectarle el tipo de router y meter un CSRF pero todo esto es Ilegal. Aprovecho tambien para decir que si tu pones un honeypot para que te ataquen, y te consiguen vulnerar el sistema, la ley no te ampara. La ley nunca nos ampara !!! pero al haber incitado al "delito" lo mismo el que te metes en un lio eres tu.

Lo más sencillo y solo para esta prueba, es hacer una redirección al atacante hacia BEEF, un framework de explotación web que mediante un script "secuestra" el navegador para realizar distintas bondades.


Esto sería un claro ejemplo de atacando al atacante :-)

Gracias a todos por leerme !!!


PD: Este artículo se lo voy a dedicar a Sauron, el señor que todo lo ve. Para mi es una persona de las mas valiosas que hay en este mundillo. Siempre me ha tratado como si fuera importante, me hace sentir importante. Esta cualidad solo la tiene la gente IMPORTANTE de verdad. Gracias por todo. Espero que te guste !!!











miércoles, 23 de marzo de 2016

Honeypots XV.Conpot. Gasolineras, Scada... Honeypot y algunos Metasploit

Estimados amigos de Inseguros !!!


Hemos hablado en este blog en alguna ocasión que otra sobre sistemas Honeypots. Ya sabeis, sistemas que emulan ser servicios en producción  con el único fin de detectar ataques, distraer al enemigo, levantar alarmas etc. Puedes leer más en profundidad por aquí:

1234 ,56 , 7. 8 9 11 12 1314 

En esta ocasión vamos a desplegar un sencillo Honeypot que simula ser un sistema Scada con diferentes configuraciones. El nombre del sistema es Conpot y es del creador de Glastopf como ya vimos aquí. Teniendo un vídeo, porque seguir yo?





La instalación es muy sencilla, siguiendo el manual claro. teniendo la versión Debian y por si alguien se ha equivocado, sobre Ubuntu :-)

Los ficheros de configuración andan un poco ocultos, bajo:  /usr/local/lib/python2.7/dist-packages/conpot/conpot.cfg y /usr/local/lib/python2.7/dist-packages/conpot/templates/default en el caso de la plantilla por defecto.

El sistema nos permite ampliar las plantillas. Por defecto aparecen estos sistemas PLC:


Como siempre os recomiendo visitar los ficheros y adaptar posibles configuraciones a vuestros sistemas, por ejemplo si queréis cambiar algún banner o puerto, o cualquier otra cosa. Para esta prueba vamos a seguir los pasos básicos. Uno de los básicos podría ser habilitar el syslog pero siendo un honeypot aislado, me conformo con acceder al conpot.log para extraer las direcciones ip y llamadas.

Por si no os habéis fijado, el guardian_ast es un sistema de control de gas que sufrió varios ataques detectados a mediados del 2015. Podéis leer el trabajo de la gente de Trend Micro aquí. Más adelante lo veremos. Por ahora vamos a ver el Honeypot por defecto de un Siemens PLC.

Ejecutamos.


Solo por saber que estamos haciendo, el sistema imitado corresponde a este PLC de Siemens. 


El acceso web tiene esta pinta.



Y para comprobar el resto de puertos de comunicaciones del PLC realizamos un NMAP

PORT      STATE    SERVICE
80/tcp    open     http
102/tcp   open     iso-tsap
161/tcp   filtered snmp
502/tcp   open     mbap
623/tcp   closed   oob-ws-http
47808/tcp closed   unknown

Host is up (0.18s latency).
PORT      STATE         SERVICE
161/udp   open          snmp
623/udp   open|filtered asf-rmcp
47808/udp open|filtered bacnet

No hubiera hecho mucha falta realizar las pruebas. en 1 minuto ya tengo un MassScan indizando el honeypot.


Vamos a usar un módulo de Metasploit para scanear la red en busca del servicio IPMI que por supuesto emula nuestro honeypot.


He comprobado el log y el honeypoy no detecta el ataque de cipher_zero que lanzo con el módulo use auxiliary/scanner/ipmi/ipmi_cipher_zero. Tampoco detecta el fallo de dumpeo de hashes explotado mediante el módulo use auxiliary/scanner/ipmi/ipmi_dumphashes

Podemos conectarnos mediante un cliente simple del protocolo Modbus e intentar cambiar parámetros del supuesto PLC.


Si disponemos del sistema de control del fabricante podemos interactuar un poco más mediante su protocolo de comunicación pero no he podido descargar legalmente el software de Siemens.

Ahora vamos a jugar con la plantilla Guardian_ast, la que emula ser una gasolinera con sus surtidores. Tener este honeypot en funcionamiento creo que aporta información de inteligencia de primera mano ya que no es un simple portscan masivo de Internet hecho por cualquier. Bajo mi punto de vista si alguien te escanea este servicio, e intenta interactuar con comandos conocidos. algo busca.

Para realizas las pruebas, lo mejor es ejecutar el honeypot y atacar mediante un cliente como netcat o similar. Os paso una lista de comandos que he probado. La lista completa la tenéis en el documento de Trend Micro





.
Las mentes calientes malignas malosas que estáis pensando en barrer la red al puerto 10001 para buscar estos sistemas, recuerda que Shodan lo hace gratis para nosotros, y detecta muchos. Imagino que después del estudio y la publicación del Honeypot, muchos serán fakes. La cuestión sería tirarle comandos que no estén contemplados en el Honeypot, pero que si sean del fabricante, lo mismo haces bingo, regalas gasolina y vas a la cárcel :-)





Espero que os haya gustado este artículo.

Gracias por leerme.














viernes, 29 de enero de 2016

Honeypots XIV. Webcam Honeypots. El dormitorio de una chica.

Estimados amigos de Inseguros !!!

Hemos hablado en numerosas ocasiones en este blog sobre sistemas Honeypots. En concreto en estos artículos. (1234 ,56 , 7. 8 9 11 12 13)

Como rápido resumen podemos definir un honeypot por su traducción de idioma, Tarro de Miel. Un "caramelo" un "reclamo" un "cebo" un atractivo reclamo para los atacantes que usamos para distintos propósitos, como pueda ser distraer en cuestión de tiempo a una atacante, adquirir conocimiento de los ataques que circulan por Internet, crear blacklist de redes maliciosas etc.

HACKING

En esta ocasión vamos a montar un Honeypot sencillo de la mano del señor Alexander Bredo. Honeypot-webcam.

El proceso de instalación es simplemente clonar el proyecto git a nuestro entorno local, instalar los módulos necesarios y a correr. *Para mi Debian 8 he tenido que instalar apt-get isntall python-imaging en vez de Pil mediante PIP.*

La gracia del proyecto es que corre sobre un web framework Tornado ligero como una pluma.

El desarrollado del proyecto ha usado una imagen exterior de una casa, y ha implementado una función para según la hora del día, aplicar efectos de luminiscencia para conseguir dar el efecto coherente según la hora. Aparte, implementa un simple refresh cada 5 segundos para hacer real la webcam, no una imagen estática.

HACKING

Para realizar esta prueba, y conociendo al personal, he cambiado el fichero que muestra la ímágen por una imagen al azar sacada de Internet de lo que podría ser un dormitorio femenino, por eso de atraer más público. He cambiado los textos de la marca de la cámara y poco más, a recolectar ataques web.

HACKING

Espero que os sirva de ayuda, gracias por leerme.

El honeypot está vigente durante un tiempo aquí:

http://137.135.109.64/

lunes, 13 de abril de 2015

Honeypots XIII. Phpmyadmin + modsecurity+lua parser.

Amigos de Inseguros.

Hemos escrito ya algunos artículos sobre Honeypots (1, 2, 3, 4 ,5, 6 , 7. 8 9 11 12 ).

Dentro de los artículos que estoy escribiendo sobre recolección de inteligencia, vamos a hablar hoy de un pequeño Honeypot llamado PHPMYADMIN. Podemos usarlo para crear nuestra base de datos de reputación online. Con nuestro sistema de despliegue automático de Honeypot.

El título lo explica todo. Es un honeypot de interacción media. No solo tenemos el formulario de login sino un interface de uso "parecido" al real.




La instalación del honeypot es muy sencillo, seguimos el manual, simplemente copiamos el directorio del proyecto bajo nuestro webserver, le damos unos permisos al fichero de log y listo. En el fichero de login.php podemos habilitar el usuario/contraseña que dará acceso al falso phpmyadmin.

Lo interesante de este honeypot para mí es la pequeña interacción que le permite al atacante, ya que el sistema de logs que proporciona es muy escueto, quedando reducido a fecha, ip, recurso.


Con esta información podría trabajar con la dirección IP, pero prefiero saber qué está pasando realmente. Para ello, he instalado Mod Security sobre el Apache que sirve al honeypot, para recolectar toda la información sobre el ataque. El proceso lo he realizado sobre una máquina Honeydrive, por lo que el proceso de instalación de mod security para debian/ubuntu genérico me sirve. 

apt-get install libapache2-modsecurity
mv /etc/modsecurity/modsecurity.conf-recommended modsecurity.conf
service apache2 reload

Modifico el fichero modsecurity.conf para indicarle que me haga log de todos los eventos, no solo los 400 y 500 como se marca por defecto SecAuditLogRelevantStatus lo dejó así: SecAuditLogRelevantStatus "^(?:5|2|4(?!04))" y por supuesto hago un apache2 reload.

Para quitarme los Internal Dummy de Apache, configuro en apache2.conf la siguiente directiva:

SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf User-Agent ".*internal dummy connection.*" dontlog

De esta manera ya podemos ver la información detallada de la actividad maliciosa sobre el honeypot.


Bien, ahora tenemos un honeypot funcionando y modsecurity generando fichero de logs. Todos sabemos lo complicado de parsear este log, y mucho mas si modificamos las opciones de "profundidad" de log. Para solventar este problema, voy a usar la posibilidad de mod security para ejecutar scripts.

Podemos ejecutar cualquier scripts en sh, pero si queremos tomar variables de mod security debemos emplear un script en LUA. La directiva está bien documentada en el manual de referencia. SecRuleScript y el script en LUA podría tener algo de este aspecto.

function main()
        local remote_addr = m.getvar("REMOTE_ADDR");
        if remote_addr == nil then
                return nil
        end
local request_uri = m.getvar("REQUEST_URI");
        if request_uri == nil then
                return nil
        end
-- INFO:::RULE_ID. Contiene el id de la regla que se ha ejecutado.
        local rule_id = m.getvar("RULE.id");
        if rule_id == nil then
                return nil
        end
-- INFO:::RULE_MSG. Contiene una descripcion de la rule que se ha ejecutado.
        local rule_msg = m.getvar("RULE.msg");
        if rule_msg == nil then
                return nil
        end
 local log_file = "/turuta//modsec_full.log"
        file = io.open(log_file,"a")
        file:write("IP: "..remote_addr.."\n".."Metodo: "..request_method.."\n".."Protocolo: "..request_protocol.."\n"..Matched by: "..matched_vars_names.."\n".."Regla id: "..rule_id.."\n".."Regla msg: "..rule_msg.."\n".."Hora: "..time.."\n".."----------------------".."\n")
        file:close()
end

De esta manera podemos obtener en un único registro, todas las variables o campos que nos interesan del log de Mod Security. Con esa información podemos alimentar nuestro sistema de inteligencia o de base de datos de reputación online con la información que nos llega de este honeypot, basado en PhpMyAdmin.

Como siempre, gracias por leerme, espero que os guste.

lunes, 16 de marzo de 2015

Honeypots XIII nuevo cada noche + sistema de control aislado de la red para analizar la información. HoneyDrive+Vmware+Powercli

Estimados amigos de inseguros.

Después de tantos artículos sobre el asunto de Honeypots, creo que podemos darle forma con un proyecto concreto basado en un despliegue sobre VMware, muy asequible como vps en cualquier operador, y un conjunto de máquinas y configuraciones dedicadas específicamente a mantener un Honeypot.

Uno de los retos con el Honeypot es mantener su integridad. Si creamos una estrategia para generar automaticamente una máquina virtual con el honeypot cada noche, nos aseguramos que en caso de compromiso, al menos, el atacante deberá realizar las mismas acciones cada día de explotación para tener acceso. No vamos a tener un Honeypot comprometido realizando el mal a sus anchas, y nosotros recolectando logs... Legalmente creo que seríamos los responsables de las acciones del criminal.


La idea general es tener en un host VMware, una máquina virtual firewall gratuita como pueda ser pfsense, o un cfs sobre iptables, un mikrotik virtual o similar. Esto nos permite dar visibilidad hacia la parte "interna" de nuestro sistema, las máquinas virtuales con los Honeypots y sobre todo, un sistema aislado y seguro para conectarnos hacia nuestro "Command & Control" y no tener que abrir una puerta conectando nuestros sistemas hacia un Honeypot, un sistema que a priori se despliega para que te "ciber-zurran" :-).

Basando nuestro Honeypot en la distro. Honeydrive versión actual .
El proceso de instalación sobre ESXi lo puedes leer aquí.

Aparte de cambiar el teclado a tu gusto, debes realizar el cambio de clave honeydrive por una que NO TENGA NADA QUE VER CON SISTEMAS que tengamos en producción. No uses ni la misma combinación, totalmente distinta. sudo passwd es más que suficiente.

Aparte de la máquina virtual instalada como Honeydrive, vamos a crear un disco duro secundario con VMware de 20 gb, que usaremos para montar/desmontar la información de los sistemas en el Honeypot y luego pasárselo a una máquina de confianza para recolectar la información.

Importante este punto. Para crear el disco duro que pueda ser accesible por distintas máquinas tenemos que hacer una configuración un tanto distinta de como estamos acostumbrados.

Para empezar, debemos acceder al ESXi por ssh y desde el directorio del volumen donde reside nuestra máquina, crear un disco eagerzerothick con este comando:

vmkfstools -d eagerzeroedthick -c 20G -a lsilogic intercambio.vmdk
desde la ruta: /vmfs/volumes/

Una vez creado el disco, lo agregamos a la máquina virtual como siempre.

Ahora cambiamos la configuración del adaptador SCSI para que sea Virtual, y así poder acceder desde varias máquinas virtuales en el mismo host.



Podemos montar el disco, según si has particionado ya algo, con los pasos en este enlace. Recuerda que crear la partición solo lo realizarás la primera vez, en las operaciones diarias solo realizaremos la parte de montaje/desmontaje entre las distintas máquinas virtuales.

No olvides modificar tu /etc/fstab en ambas máquinas para que se monte el disco al inicio.

Un dato importante, no podrás tener las dos máquinas instaladas corriendo debido al disco, la VM activa bloquea el disco.

Esto implicaría coordinar con el proceso de restauración del Honeypot mediante Powercli, el encendido de la máquina control y posterior envio de información. Esta tarea la realizaremos con el script modificado al final del artículo en Powershell, asociado a una tarea programada.

Ya tenemos el Honeypot y un disco duro para logs, vamos a montar algún servicio honey y a cambiar la configuración para que escriba en el disco.

Antes de nada, me gusta iniciar tcpdump al arrancar la máquina virtual, filtrando solo los puertos que ofrecemos como Honeypot. De esta manera, podemos tener un pcap diario de la actividad contra al servicio Honey. Si enfocamos la captura a solo unos puertos puede que perdamos el sentido del Honeypot si lo que queremos es encontrar patrones de actividad basados en el acceso a distintos puertos, por ejemplo, si estamos detectando un bot que explota algún port knocking por defecto. Para el caso de obtener estadísticas, ip reputation, y algunos comando o la descarga de malware, me basta con hacer el tcpdump normal.

Podría valer este: =tcpdump -i eth0  -n dst port 22 or 24 -w /media/disk1/pcap.pcap

Empezamos con el famoso Kippo, que ya vimos alguna configuración por aquí.

Lo que voy a hacer es copiar todos los logs que genera, incluido la bbdd Kippo para verlo luego en Kippo-Graph, con un cron programado 10 minutos antes de apagar la máquina.

Qué cosas voy a copiar en ese disco duro? que datos voy a necesitar para visualizar en mis sistemas?
Para el ejemplo de Kippo y Kippo-graph podemos copiar:

#! /bin/bash
clave=cacadevaca
vacio=`ls -l /honeydrive/kippo/dl | grep -v total | wc -l`
now=$(date +"%m_%d_%y")
if [ ! -d /media/disk1/log-kippo/$now ]
then
mkdir /media/disk1/log-kippo/$now
fi
cp /honeydrive/kippo/log/kippo.log* /media/disk1/log-kippo/$now
if [ $vacio != 0 ]
then
cp /honeydrive/kippo/dl/* /media/disk1/log-kippo/$now
fi
if [ -f /media/disk1/pcap.pcap ]
then
cp /media/disk1/pcap.pcap /media/disk1/log-kippo/$now/pcap.pcap
fi
rm -f /media/disk1/pcap.pcap
rm -f /honeydrive/kippo/dl/*
cat /dev/null > /honeydrive/kippo/log/kippo.log
mysql -u root --password=$clave kippo -e "select * from auth" -B > /media/disk1/log-kippo/$now/auth.csv
mysql -u root --password=$clave kippo -e "select * from clients" -B > /media/disk1/log-kippo/$now/clients.csv
mysql -u root --password=$clave kippo -e "select * from downloads" -B > /media/disk1/log-kippo/$now/downloads.csv
mysql -u root --password=$clave kippo -e "select * from input" -B > /media/disk1/log-kippo/$now/input.csv
mysql -u root --password=$clave kippo -e "select * from sensors" -B > /media/disk1/log-kippo/$now/sensors.csv
mysql -u root --password=$clave kippo -e "select * from sessions" -B > /media/disk1/log-kippo/$now/sessions.csv
mysql -u root --password=$clave kippo -e "select * from ttylog" -B > /media/disk1/log-kippo/$now/tty.csv


Ten en cuenta en cambiar el path donde has montado tu disco duro de intercambio.

Preparamos un cron para que a las 23:45 realice la copia, ya que vamos a programar que a las 24:00 la máquina Honeypot se apague, se borre, se regenere desde una plantilla y se inicie.

Ahora es el turno de montar un sistema de control. Una máquina aislada del Honeypot, en la que solo se permita el acceso por ssh desde lo que denominaría la sede. En esta máquina vamos a montar el disco duro en el que se guarda toda la información del Honeypot, para poder extraer la información. De esta manera, el honeypot NUNCA tendrá una conexión hacia ningún sistema de producción, el intercambio lo haremos montando el disco duro de datos en otra máquina que si tiene acceso al sistema de producción. Esta máquina debe estar muy capada.

Cualquier máquina linux que montes es buena. El asunto ahora es agregarle en Vmware un segundo disco, que será el mismo segundo disco que hemos montado en la máquina Honeypot, osea, el de intercambio...

Comprobamos que accedemos al disco duro de intercambio.

Ahora es el turno de coordinar el tiempo entre que el Honeypot está apagado, arrancamos la máquina de control, realizamos el volcado de información hacia nuestra sede, apagamos la máquina de control e iniciamos el Honeypot de nuevo. Aquí deberías tener un script al inicio para volcar la información. Omito de momento esta parte ya que mi destino, de momento, será la propia máquina Honeypot control.

Recuerda este artículo para automatizar la tarea.

El final del script es este:

Connect-VIServer -Server ip-server-esxi -User usuario -Password contraseña
Stop-VM -VM "nombre de la clonada" -Kill -Confirm:$false
Remove-VM "nombre de la clonada" -DeletePermanently -Confirm:$false
Clone-MasterVM -MasterName "nombre de la original"  -CloneName "nombre de la clonada" -DatastoreName "nombre del datastore" -Register -PowerON

Vamos a realizar una modificación. Trás apagar la máquina virtual Honeypot, vamos a añadir:

Connect-VIServer -Server ip-server-esxi -User usuario -Password contraseña
*conexión al vmware
Stop-VM -VM "nombre de la clonada" -Kill -Confirm:$false
*parar el honeypot
Start-Sleep -s 60
*espera 1 minuto a que se apague.
Remove-VM "nombre de la clonada" -DeletePermanently -Confirm:$false
*borra la máquina honeypot
Start-VM -VM control-honeypot
*arranco la máquina de control
Start-Sleep -s 300
*espero 5 minutos para que arranque y ejecute un script de inicio volcando información.
Stop-VM -VM "control-honeypot" -Kill -Confirm:$false
*apago la máquina de control.
Clone-MasterVM -MasterName "nombre de la original"  -CloneName "nombre de la clonada" -DatastoreName "nombre del datastore" -Register -PowerON
*clono el honeypot plantilla a una máquina nueva y la inicio.

De momento el esquema es:

EQUIPO VMWARE ESXi.
-Máquina firewall para natear la IP pública con las máquinas virtuales y el propio Vsphere client.
 - Ip pública al firewall.
 - Nateos al puerto ssh y vsphere client al host Vmware. Ip privada el host.
 - Nateos al puerto del Honyepot configurado.
 - Nateo a vlan distinta para la máquina de control. Todos puertos cerrados salvo ssh filtrado a sede.
-Máquina Honeypot Honeydrive.
-Máquina Debian para recibir la información.
*Disco duro compartido entre la máquina Honeypot y Control.
*script modificado del artículo anterior con este.

Tenemos un Honeypot con kippo que se regenera todas las noches y guarda la información en un disco duro compartido con otra máquina virtual, que será la que usemos para trabajar la información. Digamos que es la parte de infraestructura.

En el próximo capítulo de la serie completaremos el script Powershell con las típicas mejoras que habrás podido observar, y realizaremos algún trabajo con la clasificación de los logs que nos ha generado Kippo. Tambien pasaremos por snort y similares el fichero pcap de captura.

Espero que os guste el artículo, gracias por leerme !!!