SSH. Un poco de seguridad Parte 5

En esta ocasión generaremos un par de claves (publica/privada) para conectarnos a nuestra maquina sin necesidad de introducir nuestra contraseña, aunque esto también tiene sus riesgos,  por eso daremos unos consejos para una utilización segura de este sistema de acceso.

Primero generamos un par de claves de protocolo 2 con ssh-keygen -t RSA , donde RSA puede ser sustituido por RSA1 para el protocolo 1, o DSA  para el protocolo 2,  también las podemos generar indicando el numero de bits (-b 1024,-b 2048,-b 4096)

mrpako@ecorp$ ssh-keygen -t RSA
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mrpako/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):***************************
Enter same passphrase again:***************************
Your identification has been saved in /home/mrpako/.ssh/id_rsa.
Your public key has been saved in /home/mrpako/.ssh/id_rsa.pub.

Esto crea dos archivos, id.rsa (clave privada) e id.rsa.pub (clave publica) este ultimo debemos incluirlo en el archivo /home/mrpako/.ssh/authorized_keys.

mrpako@ecorp$ echo `cat ~/id.rsa.pub` >> ~/.ssh/authorized_keys
Y después procedemos a su eliminación.
mrpako@ecorp$ rm /home/mrpako/id.rsa.pub

Y para finalizar configuramos el archivo /etc/ssh/sshd_config , deshabilitaremos  el acceso como root, según se indica en la parte 1 de esta serie, y podemos añadir algo mas de seguridad siguiendo las indicaciones de la parte  2.

Ahora debemos proteger y distribuir por un canal seguro la clave privada y reiniciar el servicio con service sshd restart, y ya podemos proceder a conectarnos desde cualquier otra ubicación que disponga de la llave con israelgmo@umbrellacorp$ ssh -i id.rsa mrpako@192.251.68.254

 

Hack Windows Login

¡Muy buenas amigos! Otra vez estoy por aquí para martirizaros con uno de mis tips rápidos, en este caso para sistemas Windows.

Vamos a cambiar la contraseña de un usuario de un pc con Windows 10 sin conocer la anterior y sin herramientas de hackers superpros, ni herramientas malignas diseñadas por algún ente estatal empeñado en dominar el mundo libre. ¿Es eso posible? Pues si amigo mío, lo es y además, es mucho más fácil de lo que te parece. Lo vas a ver en breve. Recuerda, nadie es un gurú, esto es tan simple como estudiar, prepararte y volver a estudiar hasta conocer como tu propia mano, el entorno de trabajo, ese es el único secreto, estudio y afán de superación..

Un par de cosas más, la primera es que este truco se puede usar desde fines forenses, a fines de hacking ético o también puede ser realizado simplemente por un sufrido y nunca suficientemente reconocido sysadmin porque un usuario la ha liado tocando lo que no debe, o como me tocó a mi no hace mucho un exempleado que no le hizo muchas gracia su despido y bloqueó el pc de los proyectos con un password a mala leche…

Sea por el motivo que sea (y esto nos lleva a la segunda cosilla) yo os voy a enseñar un truco con intención didáctica, constructiva y para ayudar a la gente en sus quehaceres diarios previniendo usos indebidos e ilícitos, cualquier otra intención o uso, escapa a las intenciones de este vuestro humilde servidor y será asumido por quien las realice. Os recomiendo asimismo que, al menos al inicio, lo practiquéis en entornos controlados, virtualizados y nunca en equipos en producción hasta que se controle completamente su realización.

Dicho todo esto, pongámonos manos a la obra.

PLANTEAMIENTO:

Debemos cambiar la contraseña de un usuario de un equipo con Windows instalado cuyo usuario ha olvidado la contraseña, o la ha cambiado queriendo o estáis realizando un test de penetración y en su desarrollo podéis tener acceso a un equipo o varios, sin conocer eso si, su contraseña.

¿Cómo se realiza? Muy sencillo con un USB o un DVD de instalación de Windows. Así de simple.

Estos son los pasos del Kung-fu:

1.- Podrás apreciar que a la hora de loguearte en la cuenta de un pc con Windows, tienes la opción de lanzar un teclado en pantalla.

2.- Vamos a decirle al ordenador que cuando le des a la opción de teclado en pantalla, en realidad te lance un cmd con funciones de admin. Desde ahí listaremos los usuarios y podremos modificar su contraseña sin conocer la anterior y una vez cambiada, podremos loguearnos tranquilamente. Y ya está, no hay más. ¿No me creéis? Seguid leyendo…

Intentamos entrar con password al azar y, obviamente no nos va a dejar…

Lo vamos a reiniciar y antes de que arranque, le vamos a indicar que arranque desde el USB o el DVD…

Una vez arrancado, ya sabéis es Windows, siguiente -> siguiente…..

En la segunda página, le damos a reparar…

Solucionar problemas

Seleccionamos símbolo del sistema

Y ya tenemos un cmd

Desde aquí nos movemos a /Windows/System32 y procedemos a renombrar un par de archivos. En concreto al ejecutable osk.exe (teclado en pantalla) lo renombraremos con osk.old (así lo hago yo por hábito, si tu lo quieres llamar pepito_grillo.old,  sin problemas, el tema esta en luego recordar el nombre que se lo puso, para poderlo deshacer una vez logueado) . Una vez realizado este cambio, cambiaremos el nombre a cmd.exe por osk.exe con el comando rename.

.

Ya podemos cerrar el cmd y reiniciar el equipo.

Ya vamos viendo por donde va esto ¿verdad?

¡Exacto! Al arrancar de nuevo y seleccionar teclado en pantalla, nos lanzará un bonito y apañado cmd. Veámoslo, ¿os parece?

Seleccionamos teclado y…

¡Tenemos un cmd! Ahora listaremos los usuarios-víctimas-objetivo y a aquel que nos interese, le cambiaremos la contraseña.

¡Espera! ¿Tan sencillo es?

Pues si, no tiene mÁs misterio… Mira con tus propios ojos.

Listado de usuarios…

Elegimos el usuario y le cambiamos la contraseña, así de simple, no hay mas…

¿No me crees? Veamos si me acepta la nueva contraseña.

Pues si, la ha aceptado y ya se está cargando la cuenta de ese usuario. Mientras tanto, aprovecho para recordar la necesidad de proteger todos los posibles vectores de entrada, BIOS, USB, lector de DVD… etc. Se ha podido realizar este pequeño “hack” (por llamarlo de alguna manera) es porque la BIOS estaba desprotegida, por ejemplo y se pudo manipular el orden de arranque por ejemplo, lo mismo con los USB y el lector de DVD.

Ahí está, el flamante escritorio de Windows 10.

Espero que esto os sirva, os ayude a securizar vuestros entornos de trabajo y el mundo será un lugar mejor (a pesar de Windows). Deseo que os guste el vídeo y no haber aburrido demasiado. Un saludo…

ENLACE AL VÍDEO EN NUESTRO CANAL DE YOUTUBE

Video:

¡Ups! Se me olvidaba decir dos cosas más:

1.- Recordad volver a poner el nombre de antes a los ejecutables que antes habéis cambiado.

2.- Ningún PC sufrió daño alguno durante el proceso de escritura y grabación de vídeo.

Guía Hardening – Configuración de redes y Firewall – IPtables Parte 2

En la primera parte de esta entrada se vio como funcionaba muy básicamente IPtables, y para ver el potencial y funcionamiento de un Firewall con IPtables, hemos decidido coger un script que teníamos a mano, y así poder ver de una manera mas completa el potencial de IPtables. Tenéis que tener en cuenta que este FW se ha puesto como ejemplo, no es que se haya realizado super securizado, es simplemente para que veáis algunos ejemplos de lo que se puede hacer con iptables.

ESQUEMA DE RED

Mr.Pako = KALI
FIREWALL = CERBERO
ECORP = eth2 Debian
UMBRELLA = eth0 Win

ARCHIVO INTERFACE

up /etc/fw.sh start
down /etc/fw.sh stop

ARCHIVO BLACKLIST

Este es un simple archivo de texto en el que para el ejemplo hemos decidido incluir  direcciones URL de sitios web a bloquear, se puede utilizar este mismo ejemplo para otros menesteres,  se invoca desde el script al inicio, por ejemplo.

Variables

BLACKLIST="/etc/blacklist"

ejemplo de contenido:

---- inicio archivo blacklist ----
marca.es
elmundo.es
elpais.com
etc.
--- fin archivo blacklist ----

SCRIPT Firewall

He decidido crear un script e iniciarlo al arrancar el equipo, personalmente me gusta hacerlo así, pero bueno aquí cada cual que elija el método que más le guste.

Hemos comentado todo el script, además consideramos que es auto explicativo. Vamos al tajo.

1.- Stop, borrado de reglas y Start
La primera parte del script elimina todas las reglas anteriormente creadas, de este modo evitamos posibles conflictos con alguna regla existente, para esta tarea utilizamos la opción –flush o -F, acompañada de -X (borra todas las cadenas) y -Z (pone a cero los contadores de paquetes) y finalizamos poniendo todas las políticas por defecto en ACCEPT y aplicando reglas para el Firewall.

 

========= INICIO SCRIPT ==========

#!/bin/sh
#
#
# Variables
BLACKLIST="/etc/blacklist"

stop(){
# Eliminamos reglas (flush)

echo -ne "[.] Eliminando reglas anteriores "
iptables --flush
iptables -X
iptables -Z
iptables --table nat --flush
iptables --table mangle --flush

# Ponemos las politicas por defecto en ACCEPT.

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo -ne " -> [ OK ]\n "
}

start(){
clear 
echo -ne "***** Aplicando Reglas de Firewall *****\n"
 
# Politicas por defecto (drop) 
# creo las politicas por defecto en drop para que 
# lo deniege todo, excepto el PRE Y POSTROUTING.

echo -ne "[.] Estableciendo POLITICAS (DROP) por defecto"
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables --table nat --policy PREROUTING ACCEPT
iptables --table nat --policy POSTROUTING ACCEPT
echo -ne " -> [ OK ]\n "

2.- Protección
Para protegernos frente a algunos ataques comunes debemos habilitar varios módulos, esto lo hacemos con echo 1  >  seguido del modulo que queremos activar, además añadimos protección para 3 tipos de escaneo de red comunes.

# Ahora hacemos enmascaramiento de la red local y activamos el BIT 
# DE FORWARDING (imprescindible)
echo -ne "[.] Estableciendo MASQUERADE Y FORWARD para la red local"
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
echo -ne " -> [ OK ]\n "

# Habilitamos protección broadcast echo.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Habilitamos protección tcp_syn cookie.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Protecciones a 3 tipos de escaneo 
# NULL, XMAS, SYN-FIN-scan
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# Permitir hacer pings al servidor
echo -ne "[.] Permitiendo ping al FW desde la LAN y desde Internet"
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -i eth2 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -j ACCEPT 
echo -ne " -> [ OK ]\n "

3.- SSH
Para poder trabajar a través de SSH debemos indicarle al firewall las direcciones de origen y puertos que se utilizaran normalmente para conectarse utilizando SSH, además podemos indicarle la mac address del equipo para brindar un poco mas de seguridad en la conexiones.

# Reglas para poder acceder al servidor por ssh
echo -ne "[.] Permitiendo ACCESO SSH hacia CERBERO desde puesto de trabajo y laptop Mr.Pako"
iptables -A INPUT -i eth2 -s IP ORIGEN -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -s IP ORIGEN.46 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth2 -s IP ORIGEN.179 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -s IP ORIGEN.179 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth2 -s IP ORIGEN.46 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -s IP ORIGEN.46 -p udp --dport 22 -j ACCEPT
#iptables -A INPUT -m mac --mac 00:00:00:00:00:00 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -m mac --mac 00:00:00:00:00:00 -p udp --dport 22 -j ACCEPT
#iptables -A INPUT -m mac --mac 00:00:00:00:00:11 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -m mac --mac 00:00:00:00:00:11 -p udp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s IP ORIGEN.80.1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth2 -s IP ORIGEN.1 -m state --state ESTABLISHED,RELATED -j ACCEPT
echo -ne " -> [ OK ]\n "

 

# ntp 
iptables -A FORWARD -p udp --dport 123 -j ACCEPT
iptables -A FORWARD -p tcp --dport 123 -j ACCEPT 
 
# Reglas para el DNS local
echo -ne "[.] Permitiendo peticiones DNS desde ECORP hacia inet" 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
echo -ne " -> [ OK ]\n " 
 
echo -ne "[.] Permitiendo peticiones DNS desde Lan hacia ECORP" 
iptables -A INPUT -i eth2 -p tcp --dport 53 -d IP DESTINO/24 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --dport 53 -d IP DESTINO/24 -j ACCEPT
iptables -A OUTPUT -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
echo -ne " -> [ OK ]\n "

 

4 – VPN, RDP, WEB, VozIP, CITRIX, FTP

 

# Reglas para conexiones VPN desde INTERNET
echo -ne "[.] Permitiendo conexiones vpn desde inet" 
iptables -t nat -A PREROUTING -i eth0 -p 47 -s 0/0 -j DNAT --to IP DESTINO
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 0/0 --dport 1723 -j DNAT --to IP DESTINO:1723
iptables -A FORWARD -i eth0 -o eth2 -d IP DESTINO -p 47 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth2 -d IP DESTINO -p tcp --dport 1723 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Regla para permitir pptp (VPN)
echo -ne "[.] Activando reglas FORWARD para conexion vpn desde el SERVIDOR DE ECORP hacia otros destinos"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 1723 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p 47 -o eth0 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Permito RDP 3389.
echo -ne "[.] Permitiendo conexiones RDP a laptop Mr.Pako" 
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3389 -s IP ORIGEN -j DNAT --to IP DESTINO:3389
iptables -t nat -A PREROUTING -i eth0 -m mac --mac 00:00:00:00:00:00 -p tcp --dport 3389 -j DNAT --to IP DESTINO:3389
iptables -A FORWARD -i eth0 -s IP ORIGEN -o eth2 -d IP DESTINO -p tcp --dport 3389 -j ACCEPT 
iptables -A FORWARD -i eth0 -m mac --mac 00:00:00:00:00:00 -p tcp --dport 3389 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Reglas para permitir al equipo 51 y 57 salir por el puerto 3390 y 3391 por rdp.
echo -ne "[.] Activando reglas FORWARD para conexión RDP"
iptables -A FORWARD -i eth2 -s IP ORIGEN.51 -p tcp --dport 3390:3391 -o eth0 -d IP DESTINO -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN.57 -p tcp --dport 3390:3391 -o eth0 -d IP DESTINO -j ACCEPT
echo -ne " -> [ OK ]\n "

# Regla para navegación web.
echo -ne "[.] Activando reglas FORWARD para www y https"
iptables -A FORWARD -i eth0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 80 -m state --state NEW -o eth0 -j ULOG --ulog-prefix="WEB: -->"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 80 -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 443 -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p udp --dport 443 -m state --state NEW -o eth0 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Regla para permitir el pop3.
echo -ne "[.] Activando reglas FORWARD para pop3"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 110 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p udp --dport 110 -o eth0 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Regla para permitir el smtp.
echo -ne "[.] Activando reglas FORWARD para smtp"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 25 -o eth0 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Reglas para la VOIP.
echo -ne "[.] Activando reglas FORWARD para la VozIP"
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p tcp --dport 5060:5081 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p udp --dport 5060:5081 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p tcp --dport 6060:6061 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p udp --dport 6060:6061 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p tcp --dport 34567 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -s IP ORIGEN/24 -p udp --dport 34567 -o eth0 -j ACCEPT
echo -ne " -> [ OK ]\n "

# Reglas para acceder por CITRIX a los servidores de UMBRELLA CORPORATION.
echo -ne "[.] Activando reglas FORWARD para conectar por CITRIX a UMBRELLA CORPORATION"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 1494 -o eth0 -d IP DESTINO.230 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 1494 -o eth0 -d IP DESTINO.234 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 1494 -o eth0 -d IP DESTINO.235 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p udp --dport 1604 -o eth0 -d IP DESTINO.230 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p udp --dport 1604 -o eth0 -d IP DESTINO.234 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p udp --dport 1604 -o eth0 -d IP DESTINO.235 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 2598 -o eth0 -d IP DESTINO.230 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 2598 -o eth0 -d IP DESTINO.234 -j ACCEPT
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 2598 -o eth0 -d IP DESTINO.235 -j ACCEPT
echo -ne " ->[ OK ]\n "

# Regla para permitir FTP a los servidores.
echo -ne "[.] Activando reglas FORWARD para ftp a la IP de eth2"
iptables -A FORWARD -i eth2 -s IP ORIGEN/24 -p tcp --dport 20:21 -o eth0 -d IP DESTINO -j ACCEPT
echo -ne " -> [ OK ]\n "

iptables -A FORWARD -i eth2 -o eth0 -s 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT }
Lines=0
cat $BLACKLIST | while read line;
do {
 echo -ne "[.]Denegando acceso a $line"
 iptables -A FORWARD -d $line -p tcp --dport 80-j DROP
 echo -ne "-> [ OK ]\n"
 ((Lines++))
   }
done


case "$1" in
 start)
 start
 ;;
 
 stop)
 stop
 ;;
 
 restart)
 stop
 start;;
 *)
 echo -ne " Uso: $0 {start | stop | restart } \n"

esac
exit

============== FIN SCRIPT ==================

Las prisas son malas compañeras y durante la redacción de este post, el becario en lugar de guardar le dió a publicar 🙂 , esperamos que este post (algo distinto de lo habitual) os sirva para tener una idea de lo que se puede hacer. Más adelante, veremos como testear las distintas reglas y algún truco más.

Registro de Windows. Una mirada Forense con tintes de Hacking Ético.

¡Muy buenas a todos amigos! Os pido perdón por la demora en volver a escribir, pero por favor creedme cuando os digo que ha sido un mes de LOCOS y no he tenido apenas tiempo para nada. Aún estoy por averiguar porque todo el mundo se pone a llamar a tu puerta a la vez. En fin, misterios de la vida….

A lo que vamos, enlazando con mi anterior post de Análisis de los registros de eventos en Windows y con los posts del gran @fpalenzuela aquí y aquí, me gustaría, con vuestro permiso of course, el seguir hablando del registro de Windows en general. Amigo InSoMnIA esta ronda, como te prometí, va por ti…

Quede claro que sigue sin gustarme NADA este sistema operativo Windows (esta es una opinión estrictamente personal, no digo que funcione mal, tan solo que a mí, no me gusta), pero es obvio que es el más extendido en Escritorio y es el que te vas en encontrar más pronto que tarde, cuando te toque realizar un análisis forense o un pentest, motivo por el cual es condición sine qua non podéis continuar correctamente o a costa de perder un enorme flujo de información y ¿por qué no decirlo? Posibilidades…

Vale, genial esto está muy bien, pero ¿cuál es su función?

Veamos, es una base de datos jerárquica que juega un papel vital en la configuración del sistema operativo. Dentro lleva todos los parámetros del sistema y las preferencias del usuario (ya sabéis, ese enemigo no declarado…). Es mucho más que un conjunto de datos, es la puerta abierta de par en par a corazón del equipo.

El registro comprende varias secciones lógicas o «subclaves o subárboles»). Las subclaves normalmente se nombran según las definiciones de sus API de Windows, las cuales empiezan siempre por «HKEY». Por ejemplo, con frecuencia se abrevian en un nombre de tres o cuatro letras que empieza con «HK» (por ejemplo  HKCU por HKEY_CURRENT_USER). Técnicamente, se puede decir que se trata de indicadores predefinidos (con valores constantes predefinidos) para claves específicas que se mantienen en la memoria o se almacenan en archivos de la subclave, almacenados en el sistema de archivos local y cargados por el núcleo del sistema en el momento del arranque del sistema, y que, a continuación se comparten (con varios derechos de acceso) entre todos los procesos que se están ejecutando en el sistema.

Estructura

Su estructura se basa en cinco claves raíz:

HKEY_CLASSES_ROOT (HKCR): Almacena todos los elementos relacionado a objetos COM y la información de registro de los objetos

HKEY_CURRENT_USER (HKCU): Almacena todas las configuraciones relacionadas a a la cuenta del usuario que haya iniciado una sesión en el ordenador

HKEY_LOCAL_MACHINE (HKLM): Todos los datos relativos al sistema

HKEY_USERS (HKU): Almacena todas las configuraciones de todos los usuarios del equipo

HKEY_CURRENT_CONFIG (HKCC): Almacena información acerca del perfil actual de hardware del pc

HKEY_PERFORMANCE_DATA: Aquí se guarda información del rendimiento del sistema.

¡Espera! ¿No habías indicado que eran cinco claves raíz? Yo cuento seis…

Cierto, y cuentas muy bien, tan solo las cinco primeras son visibles. Te cuento las seis a modo didáctico, pero en principio, tú solamente verás y podrás manipular las cinco primeras.

La razón de ser de esta sexta clave es que cada componente de software crea claves para sus objetos y contadores cuando se instala, y escribe datos del contador mientras se ejecuta. Estos datos no se almacenan en el Registro, aunque el Registro se utiliza para tener acceso a ellos. En su lugar, la llamada a las funciones de Registro mediante HKEY_PERFORMANCE_DATA hace que el sistema reúna los datos de los administradores de objeto de sistema adecuados.

CUIDADO: Debes tener en cuenta que en esta clave no se puede escribir normalmente; si se intentara editar en ella, se producirá una IOException.

¡Uff! Vaya peñazo eh… No os preocupéis, de momento vamos a dejar por ahora la parte teórica y vamos a embarrarnos un poco en breve, que es lo que nos gusta ¿a qué si? Paciencia, un poco mas de teórica y nos ponemos al lío.

¿Dónde se almacenan?

Una sección del Registro (cualquiera de ellas) en el fondo, es un grupo de claves, subclaves y valores del Registro que cuentan con un conjunto de archivos auxiliares que contienen copias de seguridad de sus datos. Los archivos auxiliares de todas las secciones excepto HKEY_CURRENT_USER están en la carpeta %SystemRoot%\System32\Config. Esta sección se guarda en %SystemRoot%\Profiles\nombreDeUsuarioque corresponda.

A ver… A nivel forense, ¿qué queréis que os diga? Esto debemos analizarlo si o si…

Observad lo que tenemos aquí, esta info para un forense en valiosísima. Podéis probar a parsearla con Regripper (https://github.com/keydet89/RegRipper2.8) y veréis las cositas tan chulas que sacáis. Probad, os va a encantar. Podréis encontrar desde dispositivos usb conectados en la vida del equipo, actualizaciones, software instalado… De verdad, probad y veréis la importancia de la información que se guarda ahí. Los posts del amigo @fpalenzuela antes nombrados os serán de gran ayuda para ello.

Bueno… Hasta aquí más o menos, se ha podido mostrar un poco, realmente muy poco de todo lo que se puede extraer a nivel forense, el problema que se plantea al escribir este tipo de posts es saber cuándo parar a fin de no saturar a quien lo lee y desmotivarlo a no seguir el/ella por su cuenta. Volveré sobre este tema más adelante, os lo prometo, de momento os muestro unas pinceladas para animar a que probéis y aprendáis y en breve volveré por estos temas profundizando aún más.

Pero yo había hablado de forense y de pentest y de momento solo ha salido el tema de forense. He elegido este post para teorizar y compartir una idea con vosotros.

Obviamente analista forense y auditor de seguridad son trabajos muy distintos entre si, pero un buen pentester que conozca bien su trabajo, podría ser ser un gran forense ya que conoce los posibles vectores de entrada en el sistema, del mismo modo que un analista forense que sepa de su trabajo también acertaría en bastantes momentos como pentester. ¿A dónde quiero llegar con esto?

Muy sencillo, yo creo que tenemos que, independientemente de nuestro entorno laboral (sea analista forense o sea pentester) aprender a mirar este fascinante mundo al menos desde esas dos perspectivas. Esto nos hará mucho mas eficaces en cualquiera de ellos. He elegido este post para esta pequeña divagación,  ya que su temática es un buen ejemplo de ello. El conocimiento del registro nos hará unos grandes analistas forenses y unos excelentes auditores de seguridad.

Ahora para relajarnos un poco después de todo esta “charla” vamos a jugar, vamos a ser chicos malos, malotes y vamos a ver qué podemos hacer modificando valores del registro. Quiero dejar claro que lo que vais a ver después de estas líneas son juegos en un entorno controlado, pero son juegos reales que usan los cyberdelincuentes, el malware, incluso (y esto lo he comprobado yo personalmente en mi día a día) lo llegar a usar los insiders. Así pues, no perdamos de vista esto por favor en nuestro trabajo diario.

Modifiquemos valores del registro y veamos sus consecuencias, ¿os parece?

¿Cómo lo hacemos?

Pues muy fácil (como todo lo de Windows, para que nos vamos a engañar), vas a Buscar Aplicaciones y archivos del menú Inicio y escribe: regedit.

¡Listo! Nos pedirá permiso ya que necesita esa autorización y a funcionar…

 

No parece mucha cosa ¿verdad? Veréis que pronto cambiáis de idea…

Pero así sería muy fácil, mejor lo hacemos un poco mas interesante, ¿quién quiere interfaz gráfica? Usemos powershell…

Planteamiento: A través de la técnica que más os guste de todas las que hay, hemos sido capaces de obtener una consola de Powershell dentro de la máquina víctima.

Supongamos que quiero eliminar una entrada del registro en concreto para “limpiar” mis huellas malvadas y malignas:

Tan fácil como:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion –Name nombreclaveoregistroaborrar

Pequeños tips:

Creación De Claves:

New-Item -path hkcu:\Console -Name Nombreclave

Creación De Valores:

 New-ItemProperty -path hkcu:/Console/Nombreclave -propertyType DWord -Name Tipo-DWord -value 0

Para que puedas vaciar el contenido de claves y valores:

Clear-ItemProperty -path hkcu:/Console/Nombreclave

Y así podríamos continuar con muchas mas opciones, estas son tan solo una pequeña muestra. Imaginad lo que un pequeño script en powershell podría hacer en una máquina vulnerada o  bien que tuviéramos acceso físico a ella. Da muchas ideas ¿verdad? Os recomiendo buscar información sobre todas las posibilidades que esta herramienta ofrece, os va a asombrar si no las conocéis.

Esto es todo, no tiene más. Si sabes dónde buscar, con el suficiente conocimiento (que tampoco es tanto),  un cyberdelincuente o un malware (de hecho escribir en registro lo usa MUUUUCHO el malware) o un usuario maligno pueden manipular prácticamente TODO sin más complicación y nos pueden dificultar mucho más nuestra labor como sysadmin o forense.

Ejemplos prácticos:

DISCLAIMER:  Ningún PC sufrió daño alguno durante estas pruebas…

Si quieres recuperar una entrada específica de una clave del Registro, puedes usar uno de los diversos métodos posibles existentes.

En este ejemplo, vas a encontrar el valor de DevicePath en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Con Get-ItemProperty, use el parámetro Path para especificar el nombre de la clave y el parámetro Name para especificar el nombre de la entrada DevicePath.

Puedes listar el contenido de una clave, por ejemplo de HKEY_CURRENT_USER (HKCU):

Puedes usar el parámetro Force para listar elementos ocultos y el parámetro Recurse para poder expandir todo el árbol completo de registro desde ese punto:

Y media hora más tarde…

Con esto, al principio sé que es un poco lioso, pero os quiero mostrar que con una powershell dentro de un equipo Windows se pueden hacer barbaridades con casi total impunidad y de una manera muy limpia para un usuario novel o no suficientemente experto.

Por ejemplo, como ya sabemos dónde se guarda el registro relativo a, por poner una muestra sin importancia, el antivirus nativo de Windows (defender), podríamos crear una clave dentro de su registro del tipo DWORD, ponerle como nombre “DisableAntiSpyware” y como valor : 1.

Una ayudita de Microsoft para que sepáis cuál es el tipo de ProperType a elegir ;-):

¿Qué crees que pasaría?

¿Quieres hacer la prueba?

Al lío…

¿Qué ha pasado? Amigo mío, el antivirus se ha desactivado…

No puede ser… ¿O si?

Veamos, vamos al editor del registro desde ahí buscamos donde está el registro de defender:

Ha aparecido una clave nueva, al mirar su contenido se aprecia que es 1:

Intentamos abrir el antivirus y…

No está funcionando. Así de simple.

Imaginar del mismo modo que este, todas las posibilidades que tenéis, por poner unas pocas:

En el firewall:

  1. Autorizar todo tipo de compartición de archivos.
  2. Autorizar trazas.
  3. Autorizar o bloquear puertos.
  4. Definir excepciones de puertos entrantes.
  5. Definir excepciones de puertos entrantes
  6. Impedir notificaciones

En directivas de red:

  1. Deshabilitar compartir en red
  2. Administrar TODA LA COMUNICACIÓN DE INTERNET
  3. Deshabilitar informe de errores

En periféricos:

  1. Habilitar o no Autorun
  2. Instalar controladores sin control del administrador
  3. Saltarse la firma del código de los controladores de periféricos.

En Seguridad:

  1. Restringir o no descarga de archivos
  2. Bloqueo de protocolos de red
  3. Seguridad del bloqueo de la zona del Equipo Local
  4. Crear usuarios
  5. Dar permisos a usuarios sin control
  6. Borrar trazas de cualquier registro.

En fin, para que seguir, tendría control total sobre todo el equipo ya que aquí se guardan TODAS las configuraciones, no creo que haga falta decir mucho mas acerca de las posibilidades, ¿verdad?

Recordad esto cuando habilitéis edición de macros, ejecutéis cosas bajadas de internet o enchuféis usb encontrados cerca de vuestro puesto de trabajo. Usad en sentido común y disfrutad de la tecnología.

Y con esto ya basta por hoy, para ser una introducción creo que ya vale. Un saludo y hasta la próxima.