Cómo cifrar y descifrar archivos y directorios en Linux

Existen muchas maneras de cifrar un archivo o directorio en Linux, pero quizás la más común es usar GNU Privacy Guard (GnuPG o GPG), la implementación libre del estándar OpenPGP. Entre sus características destacan:

- Mejor funcionalidad que PGP y algunas mejoras de seguridad sobre PGP 2.
- Descifra y verifica los mensajes PGP 5, 6 y 7.
- Soporta ElGamal, DSA, RSA, AES, 3DES, Blowfish, Twofish, CAST5, MD5, SHA-1, RIPE-MD-160 y TIGER.
- Fácil implementación de nuevos algoritmos utilizando módulos de extensión.
- Soporta fechas de caducidad de claves y firmas.
- Soporta múltiples idiomas

Hoy vamos a ver algunos ejemplos para cifrar tanto ficheros como directorios con gpg, además de otras alternativas.

Cifrando archivos con una contraseña

En primer lugar para cifrar un fichero con gpg simplemente tendremos que escribir en nuestra consola:

gpg -c file.to.encrypt

Con la opción "-c" usaremos un cifrado simétrico usando una contraseña o passphrase. El cifrado simétrico por defecto es CAST5 pero podemos usar cualquiera de los disponibles con la opción -cipher-algo. Además, podemos combinar esta opción con -sign para firmar el mensaje, -encrypt para cifrar el mensaje mediante una passphrase o clave privada, o usar ambos simultáneamente.

Luego, para descifrar el fichero simplemente ejecutaremos:

gpg file.to.encrypt.gpg

Cifrando archivos con una clave privada

Antes de nada si queremos usar cifrado simétrico tendremos que crearnos un par de claves (privada/pública):

gpg --gen-key

root@server:/# gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at lun 10 dic 2018 06:36:08 CET
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: vmotos
Email address: hackplayers@ymail.com
Comment: poc
You selected this USER-ID:
    "vmotos (poc) <hackplayers@ymail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Repeat passphrase: 

Durante el proceso de creación de las claves es importante seleccionar una passphrase robusta, la cual se nos pedirá sólo cuando descifremos algo.

Preparan una auditoría de seguridad para OpenVPN 2.4

Private Internet Access ha anunciado que financiará  una auditoría a OpenVPN 2.4, la cual será realizada por el criptógrafo Matthew Green, profesor asistente del Instituto de Seguridad de la Información de Johns Hopkins. El Dr. Green tiene una larga y distinguida historia en los campos de la criptografía aplicada y la ingeniería criptográfica y ha liderado previamente la auditoría de Truecrypt.

Como comentamos, Private Internet Access ha contratado al Dr. Green como consultor independiente para hacer una evaluación exhaustiva de la versión de OpenVPN que actualmente está disponible en GitHub y buscar vulnerabilidades de seguridad. Una vez que OpenVPN 2.4 esté fuera de beta y se haya liberado, la versión final será comparada y evaluada para completar la auditoría de seguridad.

La auditoría de OpenVPN 2.4 es importante para toda la comunidad, ya que OpenVPN está disponible en casi todas las plataformas y se utiliza en muchas aplicaciones de producto tales como el cliente VPN de Private Internet Access o Cisco AnyConnect. En lugar de ir a un enfoque de crowdfunding, Private Internet Access ha decidido financiar la totalidad de la auditoría de OpenVPN 2.4 debido a la naturaleza integral de OpenVPN para asegurar la privacidad de la comunidad y de su propia empresa.

Una vez completada la auditoría independiente, Private Internet Access compartirá el informe final con OpenVPN antes de hacer públicos los resultados y asegurarse de que cualquier vulnerabilidad descubierta se corrija antes de publicarla.

Esperamos ver la seguridad de OpenVPN 2.4 y que mantengan a la comunidad informada sobre el desarrollo de la auditoría de OpenVPN 2.4. Excelente iniciactiva.

Fuente: Private Internet Access funds OpenVPN 2.4 audit by noted cryptographer Dr. Matthew Green

Exfiltración de credenciales a través de WLAN SSIDs

"Aparcó el coche lo más cerca posible de las oficinas y reflejado en los cristales de sus ventanas, ahora convertidas por la luz del día en auténticos espejos, veíamos la silueta de nosotros, como observadores furtivos contemplando ante nosotros una muralla infranqueable. Teníamos como misión robar las credenciales del director ejecutivo para acceder a su cuenta de correo en la nube y poder interceptar ciertos mensajes, pruebas irrefutables para destapar al mundo su podrida corrupción.

Mi socio acarició la tapa de su portátil cuidadosamente decorada por varias pegatinas testigos de su presencia en mil y una conferencias de hacking, la abrió y observó pensativo la pantalla de login, que proyectaba un tenue reflejo sobre su (sin embargo) relajado rostro. A continuación desbloqueó su blackphone y, como por arte de magia, una de las redes WiFi a su alcance tenía como nombre el anhelado usuario y contraseña del director, en seguida comprobó el acceso al correo y desaparecimos raudos del lugar con tremebundo trofeo.

Al día siguiente, un caso más de corrupción abría las portadas de todos los telediarios matinales e instigados por el CISO, los equipos de redes escudriñaron palmo a palmo los paquetes que atravesaron los firewalls, el tráfico de cada dispositivo de seguridad perimetral, cada log de navegación del proxy, cada una de las alertas generadas por los IPS, ... pero no encontraron ni rastro de la exfiltración de las credenciales. Nadie imaginó que durante unas horas la contraseña fue emitida al aire en un SSID ligeramente ofuscado, y nadie pudo demostrar nunca que nosotros la obtuvimos simplemente viendo las redes dentro del alcance de un simple smartphone, pues cualquiera que pasaba por ahí las podría haber leído..."


Con esta breve historia quiero ilustrar que hasta las técnicas más rocambolescas, más inesperadas, pueden ser de una efectividad máxima. Y es que aunque los nombres de SSID admiten un máximo de 32 bytes pueden ser utilizados para exfiltrar información tan sensible como una contraseña. Precisamente, Nikhil SamratAshok Mittal se dió cuenta de llo jugando con la característica de Windows Hosted Network y elaboró un script de PowerShell que permite hacerlo, es decir, exfiltrar datos usando sólo nombres SSID.

El script es Invoke-SSIDExfil.ps1 y proporciona múltiples opciones para exfiltrar datos. Usa la lógica de Invoke-CredentialsPhish de Nishang para mostrar un mensaje de credenciales al usuario y poder capturar las credenciales en texto claro. Las credenciales capturadas se codifican mediante ROT13, crea una red Windows Hosted y se inicia con el nombre SSID con el formato Dominio: Nombre de usuario: Contraseña. 

A continuación se muestra el script en acción. Ten en cuenta que el script se debe ejecutar desde un shell con privilegios:


Y, si tenemos proximidad física con el objetivo - veremos el SSID tal que así:


Ahora, podemos decodificar las credenciales de usuario usando la opción -Decode del script:


El script se puede utilizar como payload en ataques dirigidos al cliente, dispositivos de interfaz humana (Kautilya), ejecución de comandos autenticados y otras técnicas.

Utilizando los parámetros -StringToExfiltrate y -ExfilOnly, también es posible exfiltrar un pequeño fragmento de datos sin mostrar un mensaje de solicitud de credenciales al usuario.

Además, el autor creó un backdoor llamado Gupt que es capaz de ejecutar comandos recibiendo las órdenes mediante redes WiFi cercanas con SSID con nombres especiales. ¡Impresionante!

Fuentes:
- Exfiltration of User Credentials using WLAN SSID
- Introducing Gupt: A Backdoor which uses Wireless network names for command execution

AntiFooling, simula que tu máquina es virtual para que el malware no se ejecute

Hoy nos llegaba una petición de un amigo en nuestro grupo de Telegram para que echáramos un vistazo a una herramienta publicada por Scorpio en Indetectables, concretamente AntiFooling.

AntiFooling es una sencilla pero útil herramienta hecha con AutoIt para simular que un sistema Windows es una máquina virtual, pero ¿para qué?. Pues hoy en día la mayoría del malware es analizado dinámicamente en máquinas virtuales y sandboxes, por lo que el software malicioso suele implementar medidas que lo detectan y detienen su ejecución en tal caso. Por lo tanto, si "engañamos" al malware para que crea que está en un entorno de análisis de este tipo podremos conseguir que tampoco se ejecute en nuestra máquina, obteniendo así un eficaz "antivirus".

Por el momento, AntiFooling puede simular ser un sistema virtualizado con VirtualBox o VMWare, para lo cuál utiliza los siguientes artefactos:

Processes:
'VBoxService.exe' (VBOX)
'VBoxTray.exe' (VBOX)
'VMwareUser.exe' (VMWARE)
'VMwareTray.exe' (VMWARE)
'VMUpgradeHelper.exe' (VMWARE)
'vmtoolsd.exe' (VMWARE)
'vmacthlp.exe' (VMWARE)

Files:
@WindowsDir & '\System32\drivers\VBoxMouse.sys' (VBOX)
@WindowsDir & '\System32\drivers\VBoxGuest.sys' (VBOX)
@WindowsDir & '\System32\drivers\VBoxSF.sys' (VBOX)
@WindowsDir & '\System32\drivers\VBoxVideo.sys' (VBOX)
@WindowsDir & '\System32\vboxdisp.dll' (VBOX)
@WindowsDir & '\System32\vboxhook.dll' (VBOX)
@WindowsDir & '\System32\vboxmrxnp.dll' (VBOX)
@WindowsDir & '\System32\vboxogl.dll' (VBOX)
@WindowsDir & '\System32\vboxoglarrayspu.dll' (VBOX)
@WindowsDir & '\System32\vboxoglcrutil.dll' (VBOX)
@WindowsDir & '\System32\vboxoglerrorspu.dll' (VBOX)
@WindowsDir & '\System32\vboxoglfeedbackspu.dll' (VBOX)
@WindowsDir & '\System32\vboxoglpackspu.dll' (VBOX)
@WindowsDir & '\System32\vboxoglpassthroughspu.dll' (VBOX)
@WindowsDir & '\System32\VBoxService.exe' (VBOX)
@WindowsDir & '\System32\VBoxTray.exe' (VBOX)
@WindowsDir & '\System32\VBoxControl.exe' (VBOX)
@WindowsDir & '\System32\drivers\vmmouse.sys' (VMWARE)
@WindowsDir & '\System32\drivers\vmhgfs.sys' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Tools\VMwareUser.exe' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Workstation\VMwareTray.exe' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Tools\VMUpgradeHelper.exe' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Tools\vmtoolsd.exe' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Tools\vmacthlp.exe' (VMWARE)

Directories:
@ProgramFilesDir & '\Oracle\Virtualbox Guest Additions\' (VBOX)
@ProgramFilesDir & '\VMWare\' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Tools' (VMWARE)
@ProgramFilesDir & '\VMWare\VMware Workstation' (VMWARE)

Por el momento, añade sólo técnicas Anti-Virtualización, pero también se le puede hacer creer al malware que esta siendo debuggeado o emulado para prevenir su ejecución en equipos legítimos.

Descarga:
-Compilados x64 & x86: https://www.sendspace.com/file/rph4dh
-Source Code (AutoIt): https://www.sendspace.com/file/lvdx2x

Documentación:
-http://www.xylibox.com/2011/05/anti-vmware.html
-https://github.com/LordNoteworthy/al-khaser

Fireaway, una herramienta para evadir firewalls de nueva generación

Fireaway es una herramienta escrita en Python para auditar, bypassear y exfiltrar datos contra las reglas de inspección de capa 7/AppID en firewalls de próxima generación o NGFW. Sus tácticas se basan en el principio de tener que permitir que las conexiones se establezcan a través del NGFW para ver los datos de capa 7 a filtrar, comportándose como aplicaciones falsas que intentan ocultar canales de comunicación dentro de los logs del firewall como si fueran tráfico normal de usuario, como navegación hacia Internet.

Inicio del servidor FireAway: Normalmente, el servidor FireAway se iniciará fuera del perímetro del firewall (como cualquier servidor en Internet) y escuchará en un puerto que se cree cerrado para ver si alguna regla basada en aplicaciones permite el tráfico en este puerto:

python fa_server.py

Todos los datos recibidos por el servidor en ese puerto se guardarán en el archivo ReceivedData.txt del directorio donde se inició el servidor. Si el servidor detecta diferentes tamaños en la suma de los datos recibidos (indicando que se ha iniciado el filtrado del firewall), esta salida se mostrará en la consola del servidor:

Got the same or lower amount of data on two consecutive runs.  If sending test data, maximum data leak size may have been reached.

Inicio del cliente FireAway / Application Spoofer: El cliente FireAway tiene dos modos:

- Modo de prueba (modo 0): envía datos aleatorios dentro de trozos (chunks) que va incrementando para ver cuántos datos se pueden enviar antes de que el AppID del cortafuegos funcione y detenga el flujo de tráfico.
- Modo Exfiltración (modo 1): abre un archivo y lo envía fragmentado a través del cortafuegos.

Para iniciar el cliente básico:

python fa_client.py

Para iniciar el cliente de suplantación de aplicaciones:

python fa_spoof.py

El spoofing de aplicaciones insertará aleatoriamente encabezados HTTP con los trozos de datos para contaminar los registros con varias aplicaciones con el fin de enmascarar la exfiltración de datos.

Descarga y más información de Fireaway: https://github.com/tcstool/fireaway

PoisonTap, el nuevo monstruo de las galletas

Muchos de nosotros siempre nos hemos preocupado de conseguir las mejores herramientas para hacer nuestro trabajo de pentesting, ya sea en cuanto a software y hardware, en muchos de los casos, el software es gratuito debido a que se ha publicado en GitHub o en cualquier otra web por el simple hecho de compartir descubrimientos y algún tipo de conocimiento; al contrario que el hardware, la mayoría de las veces (por no decir siempre) cuesta dinero, y también, de vez en cuando, suele costar un ojo de la cara, y si ya hablamos de material dedicado a seguridad informática, añadimos al ojo de la cara, también un riñón.

Hace unos días hice un post de como crear un USB Rubber Ducky "low cost" , bueno pues hoy os traigo un nuevo ataque low-cost (con hardware incluido) que podréis añadir a vuestro inventario por tan solo... ¡5$!

Estoy hablando de una nueva herramienta creada por Samy Kamkar, conocido por detectar vulnerabilidades en geolocalización y su accesorio RollJam (que podréis encontrar en su web), para ello, simplemente utiliza una Raspberry Pi Zero, un cable USB y como software, Node.js. Esta herramienta, llamada PoisonTap, es capaz de emular una conexión Ethernet a través de USB (o Thunderbolt) que funciona de "gateway" para por ejemplo, poder capturar las cookies de las 1.000.000 webs más usadas, la creación de puertas traseras, también llamadas backdoors, o capturar sesiones, todo esto desde un servidor remoto.

Cabe decir, que una de las mayores ventajas de esta herramienta es que funciona también en ordenadores que se encuentran bloqueados.

Características de la herramienta:
  • Mediante la conexión USB, es capaz de emular una conexión Ethernet, ya mencionada anteriormente.
  • Captura todo el trafico de internet que tenga la maquina atacada. 
  • Captura y almacena todas las cookies HTTP de 1.000.000 de sitios web.
  • Expone el enrutador interno, lo que da la posibilidad al atacante de conectarse remotamente.
  • Instala backdoors persistentes en el cache HTTP para multitud de dominios, todo esto con acceso a las cookies del usuario mediante el envenenamiento de cache (cache poisoning).
  • Permite al atacante realizar peticiones HTTP remotamente con las cookies del usuario víctima en cualquier dominio con backdoor.
  • No requiere que la maquina esté desbloqueada.
  • Los backdoors y el acceso remoto persiste, incluso si el dispositivo de removido de la máquina víctima.
Si tienes una Raspberry Pi 1/2/3, también estás de suerte, podrás usarlo en sustitución a la Raspberry Pi Zero, pero necesitaras un cable Ethernet-USB.

PoC de PoisonTap:

Tor Phone, el prototipo de Tor hacia un teléfono seguro

Esperamos ver pronto y en la calle el llamado 'Tor Phone', un nuevo teléfono que ha sido diseñado por el desarrollador de Tor Mike Perry y que se basa en Copperhead OS, una distribución de Android que viene con múltiples mejoras de seguridad. Recordemos que el equipo de seguridad de Android de Google ha aceptado muchos parches de Copperhead en su base de código de Android.

"Copperhead es también la única ROM de Android que soporta el boot verificado, lo que evita que los exploits modifiquen las particiones de arranque, sistema, recuperación y proveedor
", explica Perry.

Tor Phone también usa OrWall, un firewall para Android que dirige todo el tráfico a través de la red Tor y bloquea otras conexiones, de forma similar a lo que hace la distro Tails Linux Live CD.
Además OrWall permite tener el control completo del smartphone, pudiendo elegir qué aplicación debe tener el tráfico cifrado por Tor.

De momento el prototipo actual tiene muchas "piezas" inacabadas. En el futuro, el proyecto desea añadir más soporte de dispositivos, soporte de MicroG, API de Netfilter, reducibilidad, estabilidad de Orbot, etc.

Inicialmente el modelo del hardware elegido es el Google Nexus 6P. Podéis ver el detalle del proceso de instalación del prototipo en la web de Tor Project, además o animamos a colaborar o contribuir con el proyecto:

https://blog.torproject.org/blog/mission-improbable-hardening-android-security-and-privacy

IP sobre códigos QR

Ya hemos visto algunas y variopintas formas de transmitir información por canales poco habituales y hoy vamos a ver otra muy curiosa de la mano de Eric Seifert, que es capaz de enviar datos usando tan sólo un monitor y una cámara web mediante ¡códigos QR!

La idea es sencilla: usar un interfaz tun para enviar datos bidireccionalmente usando códigos qr que son mostrados en los monitores y leídos mediante webcams. Aunque para implementarlo Eric tuvo que resolver algunos problemas.

Primero, idear alguna manera de confirmar que el otro extremo recibe y lee el mensaje, para lo cuál agregó un simple encabezado SEQ/ACK que incrementa la secuencia con cada nuevo qrcode e incrementa el acknowledge cuando lee con éxito el del otro lado.
En segundo lugar, necesitaba una forma de codificar los datos. Los Códigos QR soportan un modo binario, pero este es el menos eficiente por lo que decidió usar en su lugar alfanuméricos y base32 para codificar los datos de los paquetes (base64 no funcionaría porque el código QR en este modo sólo admite letras mayúsculas).
También tuvo un problema con la biblioteca que utilizaba para codificar los datos, qrtools, que generaba un código qr pero los datos no eran los mismos al decodificar y lo arregló mediante la detección de éste y luego añadiendo un padding a los datos y volviéndolo a intentar hasta que funcione, para luego acabar quitando el padding de nuevo en el otro extremo.

De momento el *problema* es la transmisión de los datos. Empezó con tan sólo 100 bytes por segundo y consiguió multiplicar por 10 la velocidad hasta 1-2kBps quitando el header syn/ack. Eso sí, la latencia sigue siendo un gran handicap. De todas formas, no deja de ser interesante como técnica (quizás algo exótica) y posible método de exfiltración de datos, así que os animo a echar un ojo a los vídeos y al código Python en Github:

Videos Poc:
Github:
Fuentes:

"Little Doctor", un gusano capaz de comprometer aplicaciones de chat basadas en JavaScript

Una de las charlas y herramientas más impresionantes de la décima edición de la conferencia de hacking Kiwicon en Wellington fue sin duda "Little Doctor", un gusano capaz de comprometer aplicaciones de chat basadas en JavaScript usando ataques inteligentes con propagación y capacidades de señuelo/decoy.


Los servicios basados en Electron, un framework JavaScript para aplicaciones de escritorio, o que contienen una vista web (webview) incrustada, están en problemas...
Rocket Chat publicó un parche 13 horas después de su divulgación y Ryver lo hizo en un día.  Por otro lado Slack utiliza webviews pero parece ser seguro.

El hacker australiano Shubham Shah, junto con Moloch de Bishop Fox, y su ex colega Matt Bryant, desarrollaron el framework y además encontraron un 0-day en Microsoft Azure Storage Explorer que publicaron al no tener respuesta de Microsoft después de 90 días.

"Éste es un gusano multi-plataforma mediante el cuál podemos robar archivos accediendo a las API de WebRTC y de Cordova", dijo Moloch. "Little Doctor está escrito de forma modular - todo lo que necesitas es tu propio módulo de propagación y puedes crear un gusano básicamente  en cualquier plataforma que desee". "Tan pronto como se inicia el programa se lanza un nuevo canal, se establece el tema en el código de explotación y comienza a buscar e invitar a personas".

Tienes el código en Github en https://github.com/infosec-au/little-doctor.

Puedes usarlo a través de un contenedor docker editando docker-compose.yml y ejecutando docker-compose up, o si "controlas" el servidor, simplemente colocando main.js. Por favor, úsalo con responsabilidad y sólo con propósitos educativos. Sé bueno ;)

ClusterSSH o cómo manejar varias sesiones SSH de forma concurrente

Muchas veces para preparar un DDoS realizar tareas de mantenimiento en un pool de servidores tenemos que teclear los mismos comandos una y otra vez. Afortunadamente con ClusterSSH (cssh) podemos interactuar en varias sesiones SSH a la vez y ejecutar comandos de forma simultánea en un grupo de servidores (cluster).

Básicamente lo que hará esta herramienta tan útil es abrir un xterminal por cada uno de los servidores del clúster y todo lo que escribamos en la consola de administración "central" será replicado a todas ellas. O si eventualmente queremos sólo escribir en un terminal específico sólo tendremos que seleccionarlo y escribir en él. Muy sencillo pero útil.

La mejor manera para acceder por ssh en este escenario es utilizar un par de claves pública/privada sin passphrase de tal manera que no se nos solicite ninguna contraseña durante el acceso. Así que empezamos creándolas:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
SHA256:ST+bpz1QgvzRCGl3sL25buzfzFMkDieNkt+fMDflpeY root@machine01
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|        .        |
|       +.. . o   |
|      =.=o+ = + .|
|     o OSooO B o |
|      E * ++= o .|
|     . o Boo.  . |
|        o =+.+.  |
|         =+.o.+. |
+----[SHA256]-----+

En mi caso utilizaré varias máquinas (droplets) de DigitalOcean por lo que sólo tenemos que crear una nueva key ssh (pegando el contenido del fichero id_rsa.pub) y luego seleccionar la clave al crear nuevos servidores desde un snapshot.