lunes, 27 de marzo de 2017

Tips&Tricks.- Webtutil.- Incident response o borrado de huellas.

Estimados amigos de Inseguros!!!

En este pequeño post vamos a hablar de la herramienta Wevtutil. Una herramienta para gestionar los eventos del sistema.

El truco más sencillo para entender la herramienta es, aparte de leer su descripción, usarla.

Imagina el caso de un incident response que busca persistencia en un ataque mediante la adición de un usuario al sistema, lo típico que haces cuando consigues vulnerar un sistema, garantizar la persistencia.

Con este sencillo comando podemos listar todos los eventos relativos a la creación de usuarios en el sistema.

wevtutil qe security /q:”*[System[(EventID=4720)]]” /c:5 /f:text


Como se puede apreciar, la ejecución del comando tiene un montón de parámetros que podemos ajustar para nuestras necesidades.

La lista de eventos que podemos buscar es infinita, pero los normales en estos casos son:

4720.- usuario creado
4722.- usuario habilitado
4732.- usuario añadido a grupo.
7035,. servicio parado.

Ahora bien, vamos a ponernos en el caso de una auditoria de seguridad, en el que "los malos" somos nosotros. Sería interesante borrar nuestras huellas en forma de eventos.

Los comandos que nos pueden ser útiles son:

wevtutil el. Lista todas las categorías de eventos.
wevtutil cl <LogName>. Borra todos los eventos en la categoría indicada.
wevtutil el | Foreach-Object {wevtutil cl "$_"}.- Borra todos los eventos en todas las categorias.

Recuerda que para poder borrar eventos debes tener permisos de administrador, por lo que espero que en tu intrusión al sistema hayas conseguido el "poder".



Gracias por leerme, espero que os guste.



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 !!!


jueves, 2 de marzo de 2017

Scripts en Bash para banear ip desde línea de comandos. Fortinet y Sonicwall

Estimados amigos de Inseguros !!!


En el capítulo de hoy voy a liberar un par de truquitos que uso en mis despliegues para banear una dirección IP.

https://github.com/kinomakino/Ban-ip-Bash-Scripts/tree/master

El escenario es muy sencillo, tienes un Fortinet o un SonicWall, tienes tu regla BLACKLIST creada, tienes tu grupo de direcciones ip, y tienes tus objetos. Hasta la fecha bien.


Si en tus tareas de revisión de sistemas encuentras una ip maliciosa, tienes que loguearte en el firewall, entrar en la sección correspondiente, crear el objeto dirección. Luego meterlo en el grupo... Es lento.

Mejor usar un script que pasándole la dirección IP, haga esta labor. La única gracia de estos scripts es que al contrario que cuando lanzas un comando remoto mediante SSH, puedes enviar todo el "churro" del comando, en estos sistemas (Firewalls físicos) suele haber una linea de comando que espera precisamente eso, un comando.

Mediante Expect -f podemos pasarle un fichero en el que vamos reproduciendo los "prompts" que nos presenta el firewall y le vamos pasando los parámetros. Ejemplo:

#!/usr/bin/expect -f
set IP [lindex $argv 0]
set timeout 60
spawn ssh user@ip
expect "password:"
send "password\r"
expect "fortinet_name"
send "config firewall address\r"
expect "fortinet_name (address)"
send "edit IP\r"
expect ")"
send "set subnet IP/32\r"
expect ")"
send "end\r"
expect "fortinet_name"
send "config firewall addrgrp\r"
expect ")"
send "edit BLACKLIST\r"
expect ")"
send "append member IP\r"
expect ")"
send "end\r"
expect "fortinet_name"
send "exit\r"

Aparte, este script lo puedes usar como acción en Fail2ban para banear a nivel perimetral y no a nivel de hosts.
También lo puedes usar como acción para un evento en OSSIM (Puedes leer más en la segunda parte del post: http://kinomakino.blogspot.com.es/2014/08/ossim-13-conectando-un-sensor-snort.html )

El poder acceder al firewall desde un único punto por línea de comandos es algo que al final vas a tener que usar. Tiene algunas pegas, como la autenticación contra el sistema. Lo suyo es generar una política de claves privadas para confiar entre los dos equipos, pero dependemos del fabricante.

Otro problema que me he encontrado es que por ejemplo, si usas este script en un sistema Debian, y actualizas Openssh por un fallo, el sistema se configura de manera que NO acepta cifrados inseguros. Bien, tu actualizas tu Openssh, pero si el fabricante no cambia el cifrado, no actualizas el firewall, puede ser que de repente el script ya no conecte por no cumplir con los requisitos mínimos...

Todo esto son cosas que irás viendo o no, según tus implementaciones.

La semana que viene publicaré el mismo script para Cisco ASA e intentaré crear un script que solvente el problema de Fortinet de no tener más de 300 direcciones IP por grupo. Tendré que ir balanceando los baneos en varios grupos con algún contador...

Buenos, espero que os sirva de ayuda, gracias por leerme !!!


miércoles, 1 de marzo de 2017

OSSIM 28. Usando el servidor NAGIOS en OSSIM de manera sencilla.

Estimados amigos de Inseguros !!!

Este y más artículos sobre OSSIM bajo la etiqueta correspondiente.

En el artículo de hoy voy a intentar explicar un poco el modo monitorización de OSSIM sobre Nagios. 
Aunque es bastante sencillo, muchos de vosotros me escribís para preguntarme como se implementa y es muy sencillo, tienes que tener claros los conceptos de OSSIM y de NAGIOS, por separado. Con eso, "juntarlos" es muy sencillo.

En la primera parte del proyecto vamos a usar la capacidad gráfica de OSSIM para configurar una monitorización básica de equipos y servicios mediante click, click, click.
Lo primero que vamos a hacer en OSSIM, en activos, seleccionar que equipo vamos a empezar a monitorizar, y habilitar la opción. Por defecto, el único equipo que se monitoriza es el propio OSSIM.

 
 

Bien vale, ahora tenemos dos equipos monitorizados. Podemos apreciar como localhost, el servidor OSSIM identifica 6 servicios, en la imagen los puedes ver, como 5 en ok y 1 en warning.
Si queremos realizar lo mismo con nuestro equipo monitorizado, tan sencillo como irnos otra vez a la pestaña de Activos (Assets) y en la sección de servicios, incluir los servicios que queremos monitorizar. 


Como pasos previos, por eso decía lo de los conceptos de OSSIM y NAGIOS, tenemos que tener nuestro inventario de equipos controlado bajo ASSETS/ACTIVOS y tener programado un descubrimiento de servicios para la red/subred que queramos, con el fin de tener lo más completa posible la información de nuestra infraestructura.

El resultado de la acción.


Si estás pensando en migrar un sistema previo, recuerda que podemos importar nuestra lista de equipos en CSV en OSSIM.

Bien ahora otro punto básico para la monitorización es la notificación. Vamos a configurar el perfil del contacto asociado a las alertas, algo tan facil como añadir nuestra dirección de correo al fichero  contacts_nagios2.cfg de /etc/nagios3/conf.d/ 

Hasta el momento, no hemos usado nada más que no podamos hacer con un nmap para comprobar si un equipo/servicio está activo. 

Ahora es cuando empieza realmente la parte de NAGIOS. Si quieres saber cuanto espacio tienes en un disco duro, o cuanta memoria, o cualquiera de las configuraciones que se te ocurran monitorizar, tendrás que tener alguna manera de obtener esa información. En otros sistemas como PRTG se usan protocolos de comunicación con los equipos como WMI y SSH para hacer de estos sistemas monitorización sin agente. 


El caso de NAGIOS no es ese, y se necesita de un agente que mediante el protocolo NRPE se comunique con el servidor NAGIOS para pasarle todo el settings.

A diferencia de otros sistemas engorrosos, en los debian-based, como es el caso de OSSIM, con un apt-get install nagios-nrpe-server tenemos instalada la parte servidora de este protocolo.

En el servidor accedemos al fichero de servicios que es donde definimos qué queremos comprobar y sobre qué grupo queremos hacerlo./etc/nagios3/conf.d/services_nagios2.cfg

Es el turno de instalar un cliente Nagios en el sistema, bien sea Windows o Linux. En este caso accede a la web de Nagios e instala el cliente Nagios sin mayor complicación. Eso sí, pon un contraseña y guárdala.

Antes de seguir configurando, y para delimitar errores de redes y firewalls, vamos a realizar una comprobación desde OSSIM para conectarnos al cliente Windows "a pelo". Debes pasar por este paso antes de seguir con la parte de NAGIOS en el servidor.

 /usr/local/nagios/libexec/check_nrpe -H ip_del_servidor_Windows.

Con este ejemplo, tenemos que indicar que el comando recibe una contraseña, que es la que se configuró en la instalación del cliente Windows. Accedemos y configuramos correctamente el comando en el fichero /etc/nagios-plugins/config/nt.cfg

define command {
        command_name    check_nt
        command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -p 12489 -n -s clave  -v $ARG1$ $ARG2$
}

Ahora en voy a dar de alta el servicio que quiero comprobar, lo hago en  /etc/nagios3/conf.d/services_nagios2.cfg de esta manera, para un par de equipos.

define service {
    use                 generic-service
    host_name           equipo1,equipo2
    service_description NSClient++ Version
    check_command       check_nt!CLIENTVERSION
}

Ahora el turno de un reinicio y ver si todo ha ido bien.

Si todo ha ido bien, procedemos a configurar realmente los servicios asociados a Windows, porque hasta solo hemos configurado la conexión con el client Windows. Algunos ejemplos:

define service {
    use                 generic-service
    host_name           
    service_description W3SVC
    check_command       check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}

define service {
    use                 generic-service
    host_name           
    service_description Memory Usage
    check_command       check_nt!MEMUSE!-w 80 -c 90
}
define service {
    use                 generic-service
    host_name           
    service_description CPU Load
    check_command       check_nt!CPULOAD!-l 5,80,90
}

Las opciones a monitorizar y como las organices es cosa tuya, de la parte que debes aprender de NAGIOS. El propósito de este post es que veas lo fácil que es montar tu infraestructura NAGIOS bajo el servidor OSSIM y ahorrarnos una máquina :-)


Como puedes ver, hay que tener claros los conceptos de OSSIM para genere el inventario y los conceptos de NAGIOS para conectar al servidor y definir los equipos y servicios.

Sobre esto hay un mundo de literatura, como siempre, espero sembrar la semilla para que desarrolles tu proyecto.

Espero que te guste, gracias por leerme !!!