Man in the Middle and SSLStrip

MitM & SSLStrip

Para comenzar a trabajar en el uso de SSLStrip, vamos a tener que entender primero como funciona un ataque Man in the Middle o MitM.

Man In The Middle

Un ataque MitM tiene como objetivo el capturar o modificar información entre un Emisor y un Receptor. Esto se logra desde la PC del atacante efectuando modificaciones en la PC de la víctima en la tabla ARP donde figuran las IPs asociadas a las MACs de los equipos que tuvo comunicación la pc de la víctima. De esta forma cambiamos la MAC del Gateway por la de la PC del atacante. Este ataque se conoce como ARP Spoofing.

mitm

 

Para comprender mejor como funciona, vamos a dividir MitM en dos clases. Vale aclarar que sin importar la clase para La victima el ataque es completamente transparente.

MitM Pasivo

Es un ataque en el cual solo se hace lectura/guardado de la información capturada.Un ejemplo de esto es SSLStrip el cual explicaremos a continuación.

Requisitos:

  • Ettercap
  • IPTABLES
  • Dsniff
  • Python y python-twisted-web
  • SSLStrip (http://www.thoughtcrime.org/software/sslstrip/)

SSLStrip sirve como una especie de Proxy transparente interceptando la consulta por HTTP de la PC víctima y efectuando el mismo la consulta al Host remoto para de esta forma iniciar la comunicación vía HTTPS contra el Host remoto y por HTTP contra la PC víctima.

sslstrip

Para iniciar el ataque vamos a ejecutar los siguientes comandos:

  • echo 1 > /proc/sys/net/ipv4/ip_forward
  • arpspoof -i (interface) -t (IP victima) (GW)
  • sudo iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-ports 443
  • sslstrip -l 443 -w data

En el último comando donde especificamos con el -w el archivo a crear, veremos la información obtenida por el programa SSLStrip y dependiendo de como sea el login de la web obtendremos la info. A partir de este momento deberemos ingresar a las webs sin HTTPS colocando solamente en el navegador por ejemplo linkedin.com y veremos que no figura el simbolo de SSL y al dar login en el archivo “data generado” veremos lo siguiente:

app=&session_key=test%40asd.com&session_password=123456&signin

Esos son los datos que utilicé, ustedes deberían ver el mail y password de prueba que hayan puesto para hacer login.

NOTA: Recuerden siempre colocar la URL fuera de SSL como linkedin.com, facebook.com, etc.

MitM Activo

Es un ataque donde se ejecutan modificaciones en los paquetes que pasan por la PC del atacante. Un ejemplo de esto es DNS Spoof.

Para ejecutar este ataque necesitamos tener Ettercap instalado (sudo apt-get install ettercat-texty-only -y) y dependiendo de hacia donde queramos efectuar el cambio en los DNS un Apache instalado con contenido infectado. En algunos casos se levanta un Apache local con código malicioso para dirigir a la infección a la víctima.

Ya con esto aclarado vamos a cargar una web en nuestro Apache en caso de tenerlo local y de solo querer hacer una prueba rápida, pueden redireccionar a cualquier otro sitio.

Editamos el archivo “/etc/ettercap/etter.dns” y colocamos el registro DNS que queremos modificar:

################################
# microsoft sucks ;)
# redirect it to www.linux.org
#
google.com      A       192.168.50.103
microsoft.com      A   198.182.196.56
*.microsoft.com    A   198.182.196.56
www.microsoft.com  PTR 198.182.196.56      # Wildcards in PTR are not allowed

Guardamos y ejecutamos el ataque en cuestión con el siguiente comando:

sudo ettercap -T -q -i (interface atacante) -P dns_spoof -M arp /(ip de la victima)///

Reemplazamos obviamente donde dice (interface atacante) por nuestra interface eth0, wlan0 o la que sea y en (ip de la víctima) por la dirección IP que vamos a atacar.

dns_spoof

Al hacer ping desde la PC víctima, veremos que responde la IP que nosotros cargamos en el DNS de nuestro Ettercap.

dns_spoof
Para prevenir este tipo de ataques basta con una configuración a nivel Firewall (para hacer las pruebas si tienen firewall hay que desactivarlo) y el uso de plugins en navegadores que verifiquen siempre se utilice HTTPS como es el caso de “https everywhere” y principalmente en lugar de utilizar ARP dinámico utilizar ARP estático.

De esta forma terminamos de ver MitM y SSLStrip, cualquier duda pueden dejarnos un comentario.

FacebookTwitterGoogle+Share
Hacking, MitM, Security, SSLStrip

How to encrypt your Hard Drive

Encrypt your Hard Drive

Introducción:

Antes de hablar sobre herramientas y modos, vamos a definir que significa encriptar algo.

Para ponerlo de una forma simple, encriptar implica:

Establecer un método mediante el cual basado en ciertos algoritmos una información que es completamente legible se transforma en algo completamente inentendible e ilegible para quien no conoce que algoritmo utilizar para descifrar esa información y permite a su ves establecer un sistema de autentificación para brindar mayor seguridad a la información que se necesita acceder.

Para poder entonces encriptar la información en nuestros discos, vamos a utilizar de base los Sistemas Operativos y recomendar sobre cada uno el como hacerlo:

Microsoft Windows

La mayoría de los usuarios poseen de Ultimate o Enterprice, con lo cual vamos a darle el visto bueno a BitLocker y vamos a hacer un “BitLocker Tutorial“. Este sistema ya viene por default en dichas versiones. En el caso de no querer utilizar este sistema podemos efectuar la compra de alguno como el de Symantec y varios más que andan dando vueltas por internet.

En mi caso particular como lo hago de una virtual deshabilito el TPM que hace un chequeo a nivel de Hardware y utilizo una llave USB. Al caso es lo mismo, lo recomendable es activar el TPM y seguido de esto lanzar el Wizard del BitLocker.

Activamos primero BitLocker en la unidad que queremos encriptar:

img01

Seleccionamos la opción “Usar BitLocker sin llaves adicionales” solo en el caso de TPM y si lo hacen como en mi VM seleccionen “Requiere una llave para cada inicio”. Seleccionan “Guardar llave en un USB” y luego de seleccionado el USB verán un archivo en el mismo con información, la más importante es la “BitLocker Recovery Key:” que es la que utilizaremos si por algún motivo fallara el USB.

img02

img03

Luego hacemos el System Check, lo que reiniciara la PC y podremos seleccionar Encriptar disco.

img04

Finalizado este proceso al iniciar la PC nos pedirá colocar en el caso del USB el USB con la llave y si falla podremos utilizar la linea antes mencionada. De utilizar el TPM si llegáramos a cambiar el disco de Hardware llevándolo a otro equipo el mismo se vería inaccesible pudiendo solo formatearlo para reutilizarlo, dejando nuestra información segura.

GNU/Linux

En GNU/Linux vamos a trabajar con LUKS sobre Ubuntu. En la misma instalación (nosotros tomamos la 14.04 de base) nos consulta con respecto a generar la encriptación completa del sistema la cual tildaremos como muestro a continuación.

Luego colocamos la clave para acceder a la información:

Desde la gráfica podremos efectuar el encriptado de otros discos desde la opción “Disks” y ahí mismo vamos a poder seleccionar Formatear y configurar las opciones que se muestran a continuación para efectuar el formateo con la encriptación.

Luego al intentar acceder a la unidad nos pedirá la clave cargada en el proceso de formateo.

En caso de querer efectuar dicho proceso desde la linea de comandos, podremos hacerlo de la siguiente manera:

cryptsetup -v –cipher aes-xts-plain64 –key-size 512 –hash sha512 –iter-time 5000 –use-random –verify-passphrase luksFormat <device>

En este ejemplo estamos modificando los valores por default y tenemos las siguientes opciones:

    • –cipher: Es el tipo de cifrado a utilizar, en este caso es AES en modo XTS ya que el default es cbc y se puede atacar en base a esta explicación.
    • –key-size: Por default es 256, pero XTS divide a la mitad la llave con lo cual utilizaremos 512.
    • –hash: Es el algoritmo a utilizar.
    • –iter-time: Tiempo de procesamiento utilizado por PBKDF2.
    • –use-urandom: En /dev/random para trabajar sobre la información.

En el caso de ser una partición que necesitemos trabajar porque en lugar de ser un disco externo es una partición de un disco interno nuevo, podremos efectuar el montado automático de la siguiente manera:

sudo dd if=/dev/urandom of=/root/key.sdc1 bs=2048 count=4
sudo chmod 400 /root/key.sdc1

Con esto generamos una llave para que la tome automáticamente al montar el volumen en el momento de boot. Luego deberemos añadir la misma a LUKS.

sudo cryptsetup luksAddKey /dev/sdc1 /root/key.sdc1

Verificamos el UUID con el comando “sudo cryptsetup luksUUID /dev/sdc1” y dicho ID lo utilizamos para efectuar el mapeo de la unidad editando “/etc/crypttab” y colocando lo siguiente:

sdc1 /dev/disk/by-uuid/UUID-obtenido /root/key.sdc1 luks

Con estos pasos completados editamos en “/etc/fstab” y cargamos la unidad y donde queremos que se monte la misma.

NOTA: Para MAC se recomienda FileVault2, pero no poseo un equipo con dicho sistema, así que más adelante haremos una guía completa del mismo.

Encryption, Security

Apache Security

Apache Security

El servidor HTTP Apache es empleado en el 70% de los sitios web en el mundo debido a su versatilidad en plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras.

En este post veremos la seguridad general del servidor, en caso de implementar mas módulos (php, MySQL, MongoDB, etc) se deben aplicar mas configuraciones correspondientes a los mismos.

Directorio root:

/var/www (Debian/Ubuntu)
/var/www/html (RHEL/CentOS/Fedora)

Archivo de configuración:

/etc/apache/apache2.conf (Debian/Ubuntu)
/etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

Archivos de error y acceso:

Debian/Ubuntu:

/var/log/apache2/error_log
/var/log/apache2/access_log

RHEL/CentOS/Fedora:

/var/log/httpd/error_log
/var/log/httpd/access_log

Comprobar la versión de apache y mantenerlo actualizado:

# Apachectl –v (Debian/Ubuntu)
# apt-get install apache2

# httpd –v (RHEL/CentOS/Fedora)
# yum update httpd

Ocultar la versión de apache y OS:
# vi /etc/apache2/conf.d/security (Debian/Ubuntu)
# vi /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

ServerTokens Prod #Solo muestra el nombre “Apache”
ServerSignature Off #Oculta la firma del servicio
TraceEnable Off #previene ataques de cross-site scripting

Agregar pagina de error:

# vi /etc/apache2/sites-enables/website.com
# vi /etc/httpd/sites-enables/website.com

<VirtualHost *:80>

ServerName website.com

ErrorDocument 404 /var/www/website.com/error.html

DocumentRoot /var/www/website.com

# Other directives here

</VirtualHost>

Deshabilitar el listado de directorio donde no se encuentra el archivo index:
Agregar en la configuración del sitio:

</Directory /var/www/website>
Options -Indexes
</Directory>

Deshabilitar los módulos innecesarios:

Deshabilitamos los módulos status (monitoreo web del servidor) y autoindex (entrega un listados de todos los archivos en los directorio que no contienen index)

# a2dismod status
# a2dismod autoindex

Deshabilitar la ejecución de CGI:
Agregar en la configuración del sitio:

</Directory /var/www/website>
Options –Indexes -ExecCGI
</Directory>

Limitar el tamaño de la request:
Por default no tiene límite, lo que puede permitir realizar un ataque DDOS, el valor se puede ajustar acorde a la necesidad del sitio, en este ejemplo el límite es de 500K

<Directory “/var/www/website/upload_web”>
LimitRequestBody 512000
</Directory>

Activar SSL y forzar el tráfico por el puerto 443:

Activar SSL:

a2enmod ssl (Activa el modulo SSL)
a2ensite website (Activa el sitio website)

SSL por default por el módulo rewrite:

a2enmod rewrite

Modificar el archivo:

# vi /etc/apache2/sites-enables/website-ssl

</Directory /var/www/website>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

Tiene que quedar así:

</Directory /var/www/website>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>

Protección ante ataques DDOS:
# vi /etc/apache/apache2.conf (Debian/Ubuntu)
# vi /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

TimeOut: Limita el timeout de las sesiones creadas, por default el valor es 300 segundos, dependiendo del tipo de request el servidor maneje es conveniente mantener el valor bajo en los sitios susceptibles a ataques.
MaxClients: Limita la cantidad de conexiones simultaneas que el servidor va a manejar, el valor default es 256.
KeepAliveTimeout: Es el tiempo límite que el servidor va a esperar la próxima request antes de cerrar la conexión, el valor default es 5.
LimitRequestFieldSize: Limita el tamaño del header de HTTP Request.
LimitRequestFields: Limita el número de campos del header HTTP Request que va a aceptar del cliente. El valor default es 100, es conveniente mantener el valor bajo debido a los ataques DDos mediante http request headers.

Habilitar mod_evasive:

Instalación:

# apt-get install libapache2-mod-evasive (Debian/Ubuntu)
# yum update && yum install mod_evasive (RHEL/CentOS/Fedora)

Activar modulo:

# a2enmod mod-evasive (Debian/Ubuntu)
# LoadModule evasive20_module modules/mod_evasive20.so (RHEL/CentOS/Fedora)

Modificar valores de modulo:

# vi /etc/apache2/mods-available/mod-evasive.load (Debian/Ubuntu)
# vi /etc/httpd/conf.d/mod_evasive.conf (RHEL/CentOS/Fedora)

DOSHashTableSize: Define el tamaño de la tabla de Hash, es útil aumentar su tamaño si nuestro servidor recibe una gran cantidad de peticiones, pero así mismo la memoria del servidor deberá ser también mayor.

DOSPageCount: Número de peticiones de una misma página (url) que se pueden realizar dentro del intervalo definido en DOSPageInterval. Si excede este valor, el cliente queda en la lista de bloqueo.

DOSSiteInterval: Periodo en segundos en segundos, para el umbral de petición de cualquier tipo.

DOSSiteCount: Número de peticiones que un cliente puede hacer dentro del intervalo definido en DOSSiteInterval. Si excede este valor, el cliente queda en la lista de bloqueo.

DOSPageInterval: Periodo en segundos para el umbral de petición de páginas.

DOSBlockingPeriod: Periodo en segundos en el que una ip recibe el bloqueo.

DOSLogDir: Directorio donde se encuentra el log de la actividad del módulo.

DOSWhitelist: La dirección ip o rango indicado no va a ser tenida en cuenta por el modulo, Para cada dirección IP a excluir ha de añadirse una nueva línea con el parámetro:

DOSWhitelist aaa.bbb.ccc.ddd
DOSWhitelist aaa.bbb.ccc.*

Limitar solo al usuario de apache a tener uso del directorio web:

(Debian/Ubuntu)
# chown –R www-data:www-data /var/www
# chmod 775 /var/www

(RHEL/CentOS/Fedora)
# chown –R apache:apache /var/www/html
# chmod 775 /var/www

Después de cada cambio es necesario reiniciar el servicio:

# service apache2 restart (Debian/Ubuntu)
# service httpd restart (RHEL/CentOS/Fedora)

Apache, Security

Cpanel Security

Cpanel Security Config

Para trabajar tranquilos con Cpanel deberemos efectuar algunas configuraciones básicas y algunas no tanto, para dejar la seguridad lo más alta posible.

Configuraciones Generales:

MySQL

  • Deshabilitar LOAD DATA LOCAL editando el archivo “/etc/my.cnf” y agregando al final del mismo “local-infile=0” y reiniciar el servicio de MySQL.

Apache

En Apache Configuration deberemos configurar las siguientes opciones:

  • SSL Cipher Suite: Dejar seleccionado “ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP:!kEDH“.
  • Trace Enable: Dejar esta opción en Off.
  • Server Signature: Dejar esta opción en Off.
  • Server Tokens: Dejar esta opción en ProductOnly (De esta forma la respuesta del server en el Header sera solo “Apache” sin mostrar versiones de OS y demás info).
  • File ETag: Dejar en None.

En Security Center cambiamos los siguientes valores:

  • Enable mod_userdir Protection: Debemos tildar esta opción para que se active en todas las cuentas.

Por último verificar el Handler de PHP en “Configure PHP and suEXEC” este como suPHP. De esta manera estaremos protegiendo el server de Scripts webs en PHP que pueden ser peligrosos.

PHP Configuration

Para configurar PHP vamos a ingresar al archivo “/usr/local/lib/php.ini”.

  • Cambiar el valor enable_dl y dejarlo en Off.
  • Editar la la variable disable_functions y agregar las siguientes opciones “show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open, ini_set“. Estas son funciones que suelen ser muy utilizadas al momento de vulnerar un server.
  • Cambiar la variable register_globals a Off.

Luego en Security Center vamos a la opción “php open_basedir Tweak” y habilitamos la opción que dice “Enable php open_basedir Protection

WHM Configuration

Las configuraciones del WHM son mayormente efectuadas desde “Tweak Settings“.

  • Dejar en On la opción “Always redirect to SSL“.
  • Desactivar o dejar en OffEnable BoxTrapper spam trap“. Esto puede hacer que el server sea listado en las RBLs incrementando la carga de spam enviada y por eso lo dejamos en Off.
  • Setear un máximo de Mails por hora “Max hourly emails per domain“. Esto queda a criterio de cada uno, pero lo normal es que con una reputación Base no se manden más de 300 cada 30 min.
  • Cambiamos la selección de “Accounts that can access a cPanel user account” y dejamos tildada “Account-Owner and cPanel User Only“.
  • Habilitar la opción “Blank referrer safety check“.
  • Habilitar la opción “Referrer safety check“.
  • Deshabilitar “Allow other applications to run the cPanel and admin binaries“.
  • Deshabilitar “cpsrvd username domain lookup“.
  • Deshabilitar “Hide login password from cgi scripts“.

Por último en Security Center vamos a configurar lo siguiente:

  • En “SMTP Restrictions” deberemos deshabilitarlo.
  • Deberemos deshabilitar “Compilers Tweak“.

FTP Configuration

Las configuraciones son 3 y bastantes básicas:

  • Dejar en NoAllow Anonymous Logins“, “Allow Anonymous Uploads” y “Allow Anonymous Uploads

SSH Configuration

Tenemos varios pasos en SSH entre los cuales también se encuentra el generar un Certificado, con lo cual vamos primero a las configuraciones generales y luego a como se hace el certificado.

  • En Security Center hay que deshabilitarSSH Password Authorization Tweak“.
  • Nuevamente en Security Center activamos “Shell Fork Bomb Protection“.
  • En System Health ingresamos a “Background Process Killer” y tildamos todos los procesos y guardamos para que quede configurado.

Archivo “/etc/ssh/sshd_config” dejamos las siguientes lineas:

  • UseDNS no
  • Protocol 2
  • Cambiar puerto default

Generación de Certificado:

En Security Center deberemos ingresar a “Manage root’s SSH Keys” y seguimos estos pasos:

  • Generar nueva llave.
  • Completamos los campos y deberá ser DSA de 4096.
  • Con esta llave generada vamos a autorizarla desde Manage Authorization. Simplemente le damos click al botón autorizar.
  • Luego desde la sección “Private Keys” vamos a descargar la llave.

Con esto ya tenemos la llave necesaria para el ingreso al server.

Instalación de Firewall:

Descargaremos desde csf el firewall para incluir a Cpanel. Luego de descomprimirlo deberemos ejecutar el instalador para Cpanel.

# ./install.cpanel.sh

Esto nos permitirá ingresar vía WEB a la consola de administración de Cpanel y desde dicha consola acceder a la configuración del Firewall.

Configuraciones básicas del firewall:

  • Quitar del modo Test.
  • Dejar en 1LF_SCRIPT_ALERT“.
  • Dejar en 2000 la opción “SYSLOG_CHECK“.
  • Dejar en 1 la opción “FASTSTART“.
  • Dejar en 2 el valor de “URLGET“.
  • Dejar en 1 el valor de “PT_ALL_USERS“.
  • Dejar en 3 el valor de “RESTRICT_SYSLOG“.
  • Dejar en 1 el valor de “SMTP_BLOCK“.
  • Dejar en 1 el valor de “RESTRICT_UI

Con esto tenemos cubierto con detalles más detalles menos los puntos más importantes al momento de trabajar en Cpanel de manera segura.

Apache, Cpanel, Firewall, PHP, Security, SSH

SSH Security

SSH Security

SSH es uno de los servicios más utilizados por su versatilidad y facilidad de uso. Por este motivo es importante tener en cuenta todos los detalles que abarcan la seguridad sobre dicho servicio. En este caso vamos a estar trabajando sobre como dejar la seguridad al máximo.

Todos los cambios mencionados deben hacerse en el archivo “/etc/ssh/sshd_config”.

Puerto:

Para evitar que en los escaneos salga el tipo de servicio por asociación de puertos, vamos a cambiar el puerto que viene por default en 22 por cualquiera que nos guste del 1023 para arriba. Esto lo logramos editando la linea que dice “Port”.

Tipo de Cifrado:

Configurar los tipos de cifrado a utilizar también es importante para poder trabajar con los más seguros. Para esto en el caso de no tener, deberemos agregar una linea como se ejemplifica abajo:

# Secure Ciphers and MACs
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour
MACs hmac-sha1,umac-64@openssh.com,hmac-ripemd160

Opciones generales:

Estas opciones es complicado describirlas en sectores con lo cual vamos a cargar todas en una sola y comento cada una en cada linea.

AllowTcpForwarding no #No muestra la versión de SSH
UseDNS no #No permite Hostname lookup
ClientAliveInterval 300 #Esto indica cada cuanto se debe recibir un mensaje de KeepAlive.
ClientAliveCountMax 0 #Cuantos mensajes deben ser enviados antes de cerrar la sesión.
X11Forwarding no # Deshabilita el uso remoto de aplicaciones gráficas.
MaxStartups 5 #Máximo de sesiones activas al mismo tiempo.
AllowUsers nventre support@192.168.1.47 #Usuarios que podrán acceder por SSH

Interface configuration:

Podemos en el caso de tener varias IPs configuradas, especificar en cual vamos a tener el servicio escuchando, por default escucha en todas con lo cual que deberemos descomentar la linea y agregar la IP:

#ListenAddress 0.0.0.0
ListenAddress 192.168.1.50 (debe quedar así)

Authentication:

En la sección “Authentication” podrá encontrar las siguientes opciones:

LoginGraceTime 30 #Dejar en 30 segundos ya que es el tiempo que posee el usuario para hacer login
PermitRootLogin no #Dejar en no ya que de lo contrario root puede hacer login por SSH y no es recomendable.

Banner config:

Banner /etc/issue.net  #Mostrar un mensaje de bienvenida antes de conectarse al servidor.

Llave SSH

Esta llave la crearemos de la PC cliente. Para crear la llave seguiremos estos pasos:

# ssh-keygen -t dsa -b 1024
# cat id_dsa.pub | ssh sergio@servidor “cat – >> ~/.ssh/authorized_keys”

Con esto al ingresar al server podremos establecer la conexión sin colocar la clave.

NOTA: Hacer esto en la PC cliente con el usuario autorizado en el archivo de config.

Remote, Security, SSH