¿Por qué debemos de informar sobre 0Day?

En las últimas semanas no cesan de aparecer noticias relacionadas con PRISM desde que lo filtrara Edward Snowden, que trabajaba para Booz Allen Hamilton, contratista de defensa para la NSA.

Un resultado interesante de estas filtraciones es el acceso por parte de la NSA a vulnerabilidades 0Day por parte de Microsoft y quién sabe si de otras grandes compañías (Google, Apple, Adobe, etc.) bajo los programas de colaboración Microsoft Active Protections Progam (MAPPS) y el Security Cooperation Program (SCP). El primero es para empresas de seguridad y el segundo para organismos gubernamentales -por ejemplo la agencia de inteligencia española (CNI) es miembro de este programa- con el objetivo de ser informados los primeros cuando aparecen vulnerabilidades para poder protegerse antes de que salgan los conocidos parches y actualizar sus productos de seguridad.

Estos programas se crearon con fines defensivos pero plantean una interesante cuestión: el uso de esta información para fines ofensivos.

Encontrar vulnerabilidades en productos de las grandes compañías es cada vez más costoso, por lo que el acceso a información sobre 0Day por parte de las agencias de inteligencia les hace ganar tiempo y ahorrar recursos. Ahora solo tienen que desarrollar exploits para atacar cualquier sistema, ya que recordemos que aún no se ha publicado el parche de seguridad.

Los países que quieran establecer unas capacidades ofensivas y defensivas deberían crear programas nacionales que ofrezcan una recompensa económica (en función de una escala) a los individuos que les informen de 0Day.

Las grandes compañías de software e Internet son principalmente americanas, pero muchas vulnerabilidades son identificadas y reportadas por expertos en seguridad extranjeros. Si existiera un programa nacional sobre vulnerabilidades podrían informar primero a su gobierno y no a las compañías de software.

La cuestión es ¿por qué debemos informar de vulnerabilidades a las compañías de software para que ellos a su vez informen a sus agencias de inteligencia para realizar actos ofensivos a otras naciones?

Recordemos que las vulnerabilidades 0day y exploits tienen valor económico hoy en día, y muchas empresas públicas y privadas pagan un buen dinero por ello.

En el fondo no deberían sorprendernos los actos de la NSA, ya que al fin y al cabo su misión es la seguridad nacional utilizando todos los medios posibles (legales ¿?), igual que hacen las agencias de inteligencia de muchos países.

Lo que está claro es que el caso PRISM puede que tenga más repercusiones para los EE.UU. de lo que parecía en un principio, y seguramente muchos países cambien su política de ciberseguridad defensiva / ofensiva.

Sin duda será interesante observar cómo las políticas de ciberseguridad evolucionan en los países durante los próximos años.

¿Qué cambios crees que son necesarios en las políticas de ciberseguridad?

— Simon Roses Femerling

Publicado en Hacking, Seguridad, Tecnologia | Etiquetado , , , , , , , | Deja un comentario

Una historia de troyanos gubernamentales

Mucho se está hablando estos días sobre el posible uso de troyanos por parte de las Fuerzas y Cuerpos de Seguridad del Estado debido al anuncio de un borrador de la comisión Gallardón, que propone el uso de troyanos y colaboración de hackers para acceder a ordenadores, tabletas y móviles en el curso de investigaciones de delitos de especial gravedad.

Disclaimer: soy el fundador de VULNEX, una boutique española altamente especializada en ciberseguridad que ofrece servicios y productos ofensivos y defensivos por lo que quizás no sea objetivo, pero tampoco pretendo serlo.

Como era de esperar, se están diciendo auténticas barbaridades en muchos medios de prensa, imagino que por la falta de conocimiento en la materia, por lo que expresaré mi opinión al respecto e intentaré arrojar un poco de luz sobre el asunto.

Personalmente no estoy en contra de la utilización de troyanos por parte de las Fuerzas y Cuerpos de Seguridad SIEMPRE Y CUANDO sea para capturar criminales (pederastas, terroristas, mafias, etc.) y NUNCA para otros fines (políticos, espionaje, etc.). Aunque estando en España y con la clase política que tenemos esta cuestión es realmente preocupante.

Vayamos por partes:

  1. Los criminales se han modernizado y utilizan sofisticadas medidas de seguridad informática (equipos de última generación, cifrado seguro, servidores por diferentes países sin tratados de extradición, etc.), por lo que es absolutamente necesario que las Fuerzas y Cuerpos de Seguridad se modernicen y utilicen las últimas tecnologías ofensivas y defensivas para la seguridad nacional.
  2. Pensemos que esto es el equivalente a las escuchas telefónicas (por las que nadie protesta) en el mundo digital.
  3. El uso de troyanos por parte de los gobiernos no es nada nuevo, solo que se mantiene en secreto o se intenta al menos (por ejemplo, Alemania o el FBI en los EE.UU.).
  4. Lo que se propone en el borrador no es pecata minuta, ya que escribir un troyano no es nada trivial. Para esta tarea vamos a requerir un equipo muy preparado con diferentes perfiles (jefes de proyecto, programadores para las diferentes tecnologías, expertos en vulnerabilidades, equipo de testeo, etc.). Vamos, unas capacidades ofensivas que actualmente no existen en este país y sobre todo que no son baratas. (Ejemplo estimación del equipo desarrollo de Stuxnet)
  5. Aparte del troyano con soporte para diferentes plataformas hay que contar con una infraestructura de comunicaciones, soporte y almacenamiento de datos. ¿Cómo y dónde se almacena la información recolectada? ¿Podrían los criminales atacar la infraestructura o subvertir el troyano?
  6. Si este troyano existiera, ¿cómo se haría llegar e instalaría en los equipos de los sospechosos? La seguridad en los entornos desktops (Windows, Linux, MacOS) no tiene el mismo nivel de seguridad que en móviles (Android, iPhone/iOS, BlackBerry, Windows Phone, Firefox OS, etc.). Hoy en día existen varias compañías que ofrecen troyanos profesionales y que aún no han resuelto este problema.
  7. Respecto a la colaboración de hackers, tendremos que ver en que consiste exactamente la colaboración. La cuestión es si será por la fuerza y gratis o remunerada. ¿Qué tipo de hackers: buenos/éticos o detenidos anteriormente? ¿Tendrían acceso al troyano? ¿A qué tipo de información tendrían acceso? ¿Podrían sabotear la operación?, etc.
  8. Los antivirus no serían un impedimento como se dice en algún medio, ya que esta tecnología presenta diversos problemas (por mucho que lo nieguen y les pese a las casas antivirus). Si son tan fiables que se lo digan a Google, RSA, Lockheed-Martin entre otros muchos que han sido atacados y comprometidos y que por supuesto contaban con antivirus, así como otros mecanismos de seguridad (ojo, estoy a favor del uso de los antivirus, pero como una medida más dentro de una estrategia de Defensa en Profundidad).
  9. El desarrollo y uso de tecnologías ofensivas y defensivas por parte de agentes del gobierno deberían estar enmarcados dentro de un plan nacional (Estrategia de CiberSeguridad), que tanto reclama el sector privado. Tema que la EU está trabajando.
  10. Nos quejamos del uso de troyanos por parte de los gobiernos, que lo que buscan es capturar criminales, argumentando que se vulneran nuestros derechos cuando nosotros mismos no paramos de subir información y fotos tanto propias como de nuestro entorno totalmente gratis a todo tipo redes sociales, que son empresas privadas que ganan mucho dinero ofreciendo esta información a terceros y que saben demasiado.

En España hemos sufrido y seguimos sufriendo el azote del terrorismo y demás lacras, todo lo que sea acabar con ello me parece fantástico siempre que se respete la libertad y el derecho de los ciudadanos.

¿Y cuál es tu opinión al respecto sobre esta cuestión: a favor o en contra?

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Malware, Privacidad, Seguridad, Tecnologia | Etiquetado , , , , , , , | 5 comentarios

AppSec: Cómo detectar Rooted en tu app

Por diferentes motivos muchas apps necesitan detectar si el teléfono ha sido “rooteado”, por lo que en este artículo veremos diferentes técnicas para averiguarlo. He pensado que un post sobre el tema sería de interés para muchos lectores, ya que es frecuente ver este tipo de preguntas en foros de desarrollo.

En este post de StackOverflow podemos encontrar técnicas comúnmente utilizadas en apps para detectar Rooted. El siguiente código hace uso de 3 métodos para detectar Rooted: el primero busca la cadena “test-keys”, que es una llave genérica para firmar paquetes; el segundo método comprueba si existe el Superuser.apk en el disco, esta app gestiona el acceso al comando su (privilegios administrador) para las demás apps; y por último el tercer método llama directamente a su y ejecuta un comando con privilegios de root.


 /**
 * @author Kevin Kowalewski
 * 
 */
public class Root {

    private static String LOG_TAG = Root.class.getName();

    public boolean isDeviceRooted() {
        if (checkRootMethod1()){return true;}
        if (checkRootMethod2()){return true;}
        if (checkRootMethod3()){return true;}
        return false;
    }

    public boolean checkRootMethod1(){
        String buildTags = android.os.Build.TAGS;

        if (buildTags != null && buildTags.contains("test-keys")) {
            return true;
        }
        return false;
    }

    public boolean checkRootMethod2(){
        try {
            File file = new File("/system/app/Superuser.apk");
            if (file.exists()) {
                return true;
            }
        } catch (Exception e) { }

        return false;
    }

    public boolean checkRootMethod3() {
        if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){
            return true;
        }else{
            return false;
        }
    }
}

/**
 * @author Kevin Kowalewski
 *
 */
public class ExecShell {

    private static String LOG_TAG = ExecShell.class.getName();

    public static enum SHELL_CMD {
        check_su_binary(new String[] {"/system/xbin/which","su"}),
        ;

        String[] command;

        SHELL_CMD(String[] command){
            this.command = command;
        }
    }

    public ArrayList executeCommand(SHELL_CMD shellCmd){
        String line = null;
        ArrayList fullResponse = new ArrayList();
        Process localProcess = null;

        try {
            localProcess = Runtime.getRuntime().exec(shellCmd.command);
        } catch (Exception e) {
            return null;
            //e.printStackTrace();
        }

        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(localProcess.getOutputStream()));
        BufferedReader in = new BufferedReader(new InputStreamReader(localProcess.getInputStream()));

        try {
            while ((line = in.readLine()) != null) {
                Log.d(LOG_TAG, "--> Line received: " + line);
                fullResponse.add(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        Log.d(LOG_TAG, "--> Full response was: " + fullResponse);

        return fullResponse;
    }

}

Las apps en un teléfono que no este rooteado no podrían ejecutar cualquiera de estos métodos, ya que todas las apps en Android están dentro de una sandbox (un sistema de aislamiento de procesos) y con privilegios limitados.

Los tres métodos descritos posiblemente sean los más comunes y si hacemos ingeniería inversa de forma frecuente los podemos encontrar en conocidas apps.

Otras técnicas incluyen el uso de la fantástica librería RootTools que facilita el desarrollo de apps que necesitan root ofreciendo diversas herramientas. Muchas apps utilizan esta librería.

Las funcionalidades de esta librería incluyen comprobar si existe o instalar BusyBox (programa que combina muchas utilidades estándares de Unix en un solo ejecutable pequeño), comprobar si existe o instalar SuperUser, comprobar que se tiene acceso root, herramientas nativas o suficiente espacio en la SD Card.

Como ejercicio para comprobar las técnicas de detección de Rooted he escrito el VULNEX ROOT TESTER que combina diferentes técnicas, desde las básicas aquí presentadas a algunas más sofisticadas de las que hablaremos en otro post. A continuación algunas capturas de la herramienta.

vulnex_root_tester1

vulnex_root_tester2

vulnex_root_tester3

vulnex_root_tester4

Sin duda la capacidad de detectar Rooted puede ser necesaria para determinadas apps que requieren un elevado nivel de seguridad, pero igualmente para muchas apps legítimas, como diversas apps de seguridad, requieren de root para funcionar correctamente o aprovechar al máximo la plataforma Android.

Tenemos que tener en cuenta que a la hora de escribir una app segura no es suficiente con detectar Rooted, sino que también debemos pensar en realizar un modelo de amenazas de los posibles riesgos para nuestra app, desarrollar de forma segura (por ejemplo OWASP Mobile) y aplicar técnicas de ofuscación de código (entre otras muchas medidas) para mitigar vulnerabilidades y dificultar la ingeniería inversa. Mi recomendación es que si no estamos familiarizados con estos conceptos hablemos con algún profesional en desarrollo seguro.

¿Y vuestra app que técnicas utiliza para detectar Rooted?

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Modelo de Amenazas, OWASP, Privacidad, SDL, Seguridad | Etiquetado , , , , , , , , , | Deja un comentario

OSINT + Python = hacking a medida

El pasado 10 y 11 de mayo se celebró el curso de Perito Informático Forense en Reus (España) por la Asociación Nacional de Tasadores y Peritos Judiciales Informáticos (ANTPJI), de la que soy miembro y profesor en los cursos, donde tuve el placer de dar una charla sobre dos de mis pasiones como son Python y OSINT (Open Source Intelligence).

Python es un estupendo lenguaje para desarrollar rápidamente todo tipo de aplicaciones potentes y con multitud de librerías para realizar exploits, ingeniería inversa, herramientas web y más. Sin duda un conocimiento útil para cualquier experto en seguridad.

Internet es inmenso y abarca toda información inimaginable, por ello las técnicas OSINT son de vital importancia para recolectar, analizar y presentar esta información.

Para este curso decidí que sería interesante para los asistentes aprender a desarrollar simples herramientas (scripts) que les permitan realizar OSINT mediante Python con una serie de ejercicios prácticos con un objetivo concreto cada uno.

La presentación y el código están disponibles en la web de VULNEX.

Nota: he quitado la query de Google Hacking de los scripts para que el lector pueda meter su propia query.

Herramienta #1

Objetivo: buscar miembros ANTPJI en LinkedIn mediante Google Custom Search API

Estos scripts son muy sencillos y hacen lo mismo pero de forma diferente. El primero utiliza el Google API Client, mientras que el segundo utiliza la fantástica librería Requests.

En este script estamos utilizando un poco de Google Hacking para buscar miembros de la asociación en LinkedIn.


# File: ex1_a.py
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Basic Google Hacking 
#
# VULNEX (C) 2013
# www.vulnex.com

import const
from apiclient.discovery import build
import pprint

# your google hacking query
query=''
query_params=''

doquery=query+query_params

service = build("customsearch","v1",developerKey=const.cse_token)

res = service.cse().list(
	q=doquery,
	cx=const.cse_id,
	num=10).execute()

pprint.pprint(res)

# VULNEX EOF

# File: ex1_b.py        
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Simple Google Hacking                
#
# VULNEX (C) 2013
# www.vulnex.com

import requests
import json
import urllib
import const

site="https://www.googleapis.com/customsearch/v1?key="

# Your Google Hacking query
query='' 
query_params='' 

url=site+const.cse_token+"&cx="+const.cse_id+"&q=" + urllib.quote(query+query_params)
response = requests.get(url)
print json.dumps(response.json,indent=4)

# VULNEX EOF

Al ejecutar cualquiera de estos scripts obtenemos el siguiente resultado:

py_osint_img1

No demasiado interesante por el momento 🙂

Herramienta #2

Objetivo: obtener las fotos de los miembros ANTPJI en LinkedIn mediante Google Custom Search API.

El siguiente script obtiene las fotos de los miembros de la asociación en LinkedIn y de paso sacamos los metadatos 😉 El script genera una página HTML con todas las fotos.

Librerías utilizadas: Google API Client, PIL, Requests y Markup.


# File: ex2.py         
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Download picture and extract metadata               
#
# VULNEX (C) 2013
# www.vulnex.com

import const
from apiclient.discovery import build
import pprint
import os
from PIL import Image
from StringIO import StringIO
from PIL.ExifTags import TAGS
import requests
import markup

def do_query(istart=0):
	if istart == 0:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10).execute()
	else:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10,
		start=istart).execute()
	return res

pic_id=1
do_stop=10
cnt=1

page=markup.page()

# Set page title
page.init(title="ANTPJI OSINT") 
page.h1("ANTPJI OSINT")

# Set output directory
out_dir = "pics_gepl"

# Your Google Hacking query 
query=''
query_params=''

doquery=query+query_params

service = build("customsearch","v1",developerKey=const.cse_token)

if not os.path.exists(out_dir):
	os.makedirs(out_dir)

res=[]
while True:
	if cnt==1:
		res = do_query()
	else:
		if not res['queries'].has_key("nextPage"): break
		res = do_query(res['queries']['nextPage'][0]['startIndex'])
	cnt+=1
	if cnt > do_stop: break
	if res.has_key("items"):
		for item in res['items']:
			name=""
			if not item.has_key('pagemap'): continue
			if not item['pagemap'].has_key('hcard'): continue
			hcard = item['pagemap']['hcard']
			for card in hcard:
				pic_url=""
				if 'title' in card:
					if 'fn' in card: name = card['fn']
					if 'photo' in card: pic_url = card['photo']
				if pic_url != "":	
					image = requests.get(pic_url)
					pic_n = os.path.join(out_dir,"%s.jpg") % pic_id
					file = open(pic_n,"w")
					pic_id+=1
					try:
						i = Image.open(StringIO(image.content))
						if hasattr(i,"_getexif"):
							ret = {}
							info = i._getexif()
							if info:
								for k,v in info.items():
									decode = TAGS.get(k,v)
									ret[decode] = v
								print ret
						i.save(file,"JPEG")
						page.p(name.encode('ascii','ignore')) 
						page.img(src=pic_n)
						page.br()
						page.br()
					except IOError, e:
						print "error: %s" % e
					file.close()			

# Set your output filename
with open('index_gepl.html','w') as fp:
	fp.write(str(page))

# VULNEX EOF

Y este es el resultado:

py_osint_img2

Con unas pocas líneas de código hemos conseguido una herramienta bastante interesante.

Herramienta #3

Objetivo: ¿cuál es la relación de los miembros de ANTPJI en LinkedIn?

Con este script buscamos la relación entre los miembros de la asociación en LinkedIn y creamos un gráfico que relaciona las palabras.

Librerías utilizadas: Google API Client, NetworkX y Matplotlib.


# File: ex3.py         
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Build graph from profiles                
#
# VULNEX (C) 2013
# www.vulnex.com

import const
from apiclient.discovery import build
import networkx as nx
import matplotlib.pyplot as plt

def do_query(istart=0):
	if istart == 0:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10).execute()
	else:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10,
		start=istart).execute()
	return res

do_stop=10
cnt=1

# Your Google Hacking query here
query=''
query_params=''

doquery=query+query_params

service = build("customsearch","v1",developerKey=const.cse_token)

G=nx.DiGraph()
res=[]
while True:
	if cnt==1:
		res = do_query()
	else:
		if not res['queries'].has_key("nextPage"): break
		res = do_query(res['queries']['nextPage'][0]['startIndex'])
	cnt+=1
	if cnt > do_stop: break
	if res.has_key("items"):
		for item in res['items']:
			name=""
			if not item.has_key('pagemap'): continue
			if not item['pagemap'].has_key('hcard'): continue
			hcard = item['pagemap']['hcard']
			for card in hcard:
				if 'title' in card:
					if 'fn' in card: name = card['fn']
				G.add_edge(name,card["fn"])		
			
plt.figure(figsize=(30,30))
nx.draw(G)
# Set your output filename
plt.savefig('antpji_rela_map.png')

# VULNEX EOF

Y este es el gráfico que se genera:

py_osint_img3

Herramienta #4

Objetivo: ¿de qué se habla en el Twitter de la asociación?

Este script baja los últimos tweets de la cuenta de la asociación y genera una nube de palabras. Útil para ver rápidamente de qué se habla.

Librerías utilizadas: Requests, pytagcloud.


# File: ex4.py         
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Create word cloud               
#
# VULNEX (C) 2013
# www.vulnex.com

import requests
import json
import urllib
import const

from pytagcloud import create_tag_image, make_tags
from pytagcloud.lang.counter import get_tag_counts

site="http://search.twitter.com/search.json?q="

# Your query here
query=""

url=site+urllib.quote(query)

response = requests.get(url)

tag = []
for res in response.json["results"]:
	tag.append(res["text"].encode('ascii','ignore'))

text = "%s" % "".join(tag)	
tags = make_tags(get_tag_counts(text),maxsize=100)
# Set your output filename
create_tag_image(tags,"antpji_word_cloud.png", size=(600,500), fontname="Lobster")

# VULNEX EOF

Y esta es la nube de palabras:

py_osint_img4

Herramienta #5

Objetivo: ¿dónde tienen cuenta los alias que participan en el Twitter de ANTPJI?

El siguiente script extrae los alias que han publicado o mencionado en el Twitter de la asociación y se comprueba si existe ese alias en 160 redes sociales.

Librerías utilizadas: Requests.


# File: ex5.py         
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Check usernames on 160 social network sites               
#
# VULNEX (C) 2013
# www.vulnex.com

import requests
import json
import urllib
import const
import pprint

site="http://search.twitter.com/search.json?q="

# Your query here
query=""

url=site+urllib.quote(query)

print "Recolectando alias en Twitter: %s\n" % query
response = requests.get(url)

users = []

for res in response.json["results"]:
	if res.has_key('to_user'):
		if not res['to_user'] in users: users.append(str(res["to_user"]))
	if res.has_key('from_user'):
		if not res['from_user'] in users: users.append(str(res["from_user"]))

print "ALIAS-> %s" % users

print "\nComprobrando alias en 160 websites\n"
for username in users:	
	for service in const.services:  
      		try:    
			res1 = requests.get('http://checkusernames.com/usercheckv2.php?target=' + service + '&username=' + username, headers={'X-Requested-With': 'XMLHttpRequest'}).text
			if 'notavailable' in res1: 
				print ""
				print username + " -> " + service 
				print "" 
      		except Exception as e:  
           		print e 

# VULNEX EOF

Y el resultado es el siguiente:

py_osint_img5

Herramienta #6

Objetivo: ¿se pueden obtener los metadatos en las fotos de ANTPJI?

Este script baja las fotos relacionadas con la asociación en Google y extrae los metadatos.

Librerías utilizadas: Requests, PIL y Markup.


# File: ex6.py         
# Date: 05/14/13
# Author: Simon Roses Femerling
# Desc: Download pictures from Google and extract metadata               
#
# VULNEX (C) 2013
# www.vulnex.com

import const
from apiclient.discovery import build
import pprint
import os
from PIL import Image
from StringIO import StringIO
from PIL.ExifTags import TAGS
import requests
import markup

def do_query(istart=0):
	if istart == 0:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10).execute()
	else:
		res = service.cse().list(
		q=doquery,
		cx=const.cse_id,
		num=10,
		start=istart).execute()
	return res

pic_id=1
do_stop=10
cnt=1

page=markup.page()
# Set your page title
page.init(title="ANTPJI OSINT") 
page.h1("ANTPJI OSINT")

# Set output directory
out_dir = "pics_gepl"

# Define your Google hacking query here
query=''
query_params=''

doquery=query+query_params

service = build("customsearch","v1",developerKey=const.cse_token)

if not os.path.exists(out_dir):
	os.makedirs(out_dir)

res=[]
while True:
	if cnt==1:
		res = do_query()
	else:
		if not res['queries'].has_key("nextPage"): break
		res = do_query(res['queries']['nextPage'][0]['startIndex'])
	cnt+=1
	if cnt > do_stop: break
	if res.has_key("items"):
		for item in res['items']:
			name=""
			if not item.has_key('pagemap'): continue
			if not item['pagemap'].has_key('hcard'): continue
			hcard = item['pagemap']['hcard']
			for card in hcard:
				pic_url=""
				if 'title' in card:
					if 'fn' in card: name = card['fn']
					if 'photo' in card: pic_url = card['photo']
				if pic_url != "":	
					image = requests.get(pic_url)
					pic_n = os.path.join(out_dir,"%s.jpg") % pic_id
					file = open(pic_n,"w")
					pic_id+=1
					try:
						i = Image.open(StringIO(image.content))
						if hasattr(i,"_getexif"):
							ret = {}
							info = i._getexif()
							if info:
								for k,v in info.items():
									decode = TAGS.get(k,v)
									ret[decode] = v
								print ret
						i.save(file,"JPEG")
						page.p(name.encode('ascii','ignore')) 
						page.img(src=pic_n)
						page.br()
						page.br()
					except IOError, e:
						print "error: %s" % e
					file.close()			

# Set your output filename
with open('index_gepl.html','w') as fp:
	fp.write(str(page))

# VULNEX EOF

Una imagen vale más que mil palabras!

py_osint_img6

Como hemos visto a lo largo de este artículo podemos escribir sofisticadas herramientas de OSINT de forma sencilla con un poco de Python que nos
permiten recabar mucha información sobre individuos o colectivos.

Si te gustaría que profundizara sobre algún tema en Python y OSINT por favor házmelo saber 🙂

¿Y tú qué herramientas utilizas para OSINT?

— Simon Roses Femerling

Referencias

Publicado en Hacking, Hacking Etico, Privacidad, Seguridad, Tecnologia | Etiquetado , , , , , , , | Deja un comentario

Mi lista de 10 ciberarmas

Hace un par de semanas los medios publicaban que el US Air Force ha clasificado 6 herramientas como ciberarmas, sin duda un hot topic. Para este post yo haré lo mismo y pondré un listado de 10 herramientas que podrían ser ciberarmas.

Mi criterio de selección va en función de su utilidad, capacidades y que sea open source o gratis por lo menos.

Lógicamente existen más herramientas que me gustan o que utilizo, pero creo que esta lista es una estupenda recopilación para realizar ataques en red y sistemas, ingeniería inversa, análisis de tráfico, ingeniería social, búsqueda de vulnerabilidades y desarrollo de exploits, vamos, que debería estar en el toolkit de todo pentester 🙂

  1. Metasploit: la herramienta de hacking ético por excelencia.
  2. SET: amplias opciones para realizar ataques de ingeniería social.
  3. Dsploit: nada como llevar un toolkit de hacking ético en el móvil, para Android.
  4. Nmap: el popular escáner de puertos y más.
  5. WireShark: para analizar el tráfico de red de forma simple y potente.
  6. Ettercap: todo tipo de ataques en red.
  7. Immunity Debugger: un poco de ingeniería inversa combinada con scripting en Python.
  8. Mona: potente script para la herramienta anterior o Wingdb para desarrollar exploits.
  9. Peach: completo framework para buscar vulnerabilidades mediante fuzzing.
  10. Androguard: ingeniería inversa para Apps Android.

¿Cuál es tu lista de 10 ciberarmas?

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Seguridad, Tecnologia | Etiquetado , , , , , , | Deja un comentario

AppSec: Mejora la seguridad de tu software con GCC Stack Protector Strong

El otro día ayudando a un cliente a desarrollar software seguro se me ocurrió que este tema podría ser de interés para mis lectores. Lógicamente esta temática es bastante amplia, pero en este artículo me centraré: es un patch para el compilador GCC que mejora la protección de stack protector (stack canary) mitigando las vulnerabilidades del tipo buffer overflow.

Stack Protector Strong es un patch desarrollado en Google y aplicado al Proyecto Chromium (Navegador Chromium y Chromium OS) que mejora sustancialmente esta defensa. Por defecto en GGC tenemos los parámetros –fstack-protector y –fstack-protector-all: el primero analiza cada función en el código y si detecta una posible vulnerabilidad aplica la defensa al compilar el programa (el programador no tiene que hacer nada, bueno sí, desarrollar de forma segura ;)), mientras que el segundo parámetro aplica esta defensa a TODAS las funciones del programa sin validar si son vulnerables.

Ambas opciones tienen sus respectivos problemas: la primera opción (-fstack-protector) está limitada por el código que considera vulnerable, mientras que la segunda (-fstack-protector-all) es demasiado agresiva y afecta al rendimiento de la aplicación.

Debido a estos problemas en Google optaron por desarrollar un tercer parámetro, -fstack-protector-strong, que abarca más casos de código vulnerable sin sacrificar rendimiento. En la figura 1 podemos ver una comparativa entre –fstack-protector y –fstack-protector-strong.

stack_protector_VS
Fig. 1 – -fstack-protector vs. –fstack-protector-strong

Claramente es una mejora sustancial que abarca más clases de posibles vulnerabilidades en código, pero basta de teoría y pasemos a un ejercicio práctico donde vamos a instalar el patch a la última versión de GCC 4.8.0 publicada recientemente en un Linux Debian 6.0.

El primer paso es bajarnos la versión GCC que nos interese parchear. El parche se escribió para la versión 4.6, aunque he probado con las versiones 4.7 y 4.8 y funciona correctamente. Para ello ejecutamos el comando wget con la URL de GCC y luego lo descomprimimos (ver figura 2).

gcc_cap1
Fig. 2 – Bajando GCC

Para compilar GCC debemos tener una serie de librerías instaladas por lo que utilizaremos el comando apt-get para su instalación (ver figura 3):

  • Build-essential
  • libgmp3-dev
  • libmpfr-dev
  • libmpc-dev
  • zip
  • autogen

gcc_cap2
Fig. 3 – Instalando paquetes necesarios para compilar GCC

Ahora bajamos el parche –fstack-protector-strong de aquí. El parche está compuesto por 5 ficheros diff.

gcc_cap4
Fig. 4 – Parches bajados

A continuación procedemos a parchear GCC y debemos seguir el orden que aparece en la figura 5. Prestad especial atención al orden de los directorios dentro de GCC.

gcc_cap5
Fig. 5 – Aplicando parches a GGC

Una vez que tengamos GCC parcheado podemos compilarlo, para su instalación en el sistema necesitamos tener privilegios de administrador (ver figura 6). Mientras el comando se ejecuta podemos leer otros artículos de este blog ya que el proceso tarda bastante 🙂

gcc_cap7
Fig. 6 – Compilando e instalando GCC

Ahora ya estamos listos para compilar programas con la última versión de GCC y con una mejor defensa ante vulnerabilidades buffer overflow.

En la figura 7 compilamos un programa vulnerable con el parámetro –fstack-protector-strong.

gcc_cap9
Fig. 7 – Probando –fstack-protector-strong

Al desensamblar (reversing) myapp podemos ver que se ha aplicado esta defensa en varias funciones y que con –fstack-protector no se hubiera aplicado (aunque este ejercicio lo dejo para otro artículo).

Actualmente este parche no está por defecto en GCC pero esperemos que lo esté en futuras versiones, así como nuevas y mejores defensas.

Es cierto que existen vectores de ataque para saltarse esta protección, aunque toda defensa es poca y hoy en día todos los compiladores modernos (GCC, Visual Studio y LLVM) incorporan diversas defensas que los programadores deberían utilizar siempre.

Sin duda el uso de estas defensas en los compiladores no quita la necesidad de desarrollar software de forma segura utilizando un marco de desarrollo seguro como son el MS SDL o el OpenSAMM.

¿Qué parámetros de seguridad utilizas al compilar software?

— Simon Roses Femerling

Publicado en Hacking Etico, Modelo de Amenazas, Privacidad, SDL, Seguridad, Tecnologia | Etiquetado , , , , , , , | Deja un comentario

Reseña Libro: The IDA Pro Book, 2º edición

Si te gusta la ingeniería inversa y quieres aprender todos los secretos de IDA Pro, este es tu libro. Esta obra escrita por Chris Eagle, un experto en la materia, nos revela toda la potencia de la mejor herramienta para ingeniería inversa. The IDA Pro, 2º edición (ISBN-13: 978-1593272890) a lo largo de sus 26 capítulos describe cómo utilizar IDA Pro y todas sus opciones, así como el decompilador, debugger y el emulador, y por supuesto el desarrollo de herramientas con los lenguajes IDC y Python (IDAPython).

IDA Pro es una compleja herramienta para analizar todo tipo de binarios pero este libro facilita a los no expertos su aprendizaje, y los que ya lo sean también sacarán provecho de leerlo.

Las secciones avanzadas de cómo extender IDA Pro mediante el uso de IDC o Python no tienen precio, el autor incluye bastantes scripts muy bien explicados. Personalmente soy un apasionado de Python, por lo que todos los capítulos relacionados con IDAPython para mí son los más interesantes.

En la web del libro podemos encontrar más información y una serie de plugins para IDA Pro, de especial interés el x86 Emulator plugin.

El código que la obra analiza es para x86 bajo Windows, pero IDA Pro soporta muchas más plataformas como ARM o binarios para Linux (ELF) y MacOS (Mach-O) entre otros.

Sin duda una lectura obligatoria para los tiempos que corren en ciber seguridad, donde es vital poseer las habilidades necesarias para buscar vulnerabilidades en software o analizar malware.

Puntuación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Libro, Seguridad, Tecnologia | Etiquetado , , , , , | Deja un comentario

De vuelta en Black Hat Europa y mi charla sobre software antirrobo

El pasado jueves 14 y viernes 15 de marzo se celebró el congreso Black Hat Europa en la estupenda ciudad de Ámsterdam, un evento obligatorio para expertos en ciberseguridad.

Por segundo año consecutivo participé con una ponencia sobre I+D en la que se exponía el estado de seguridad de los programas antirrobo para ordenadores y Smartphones.

Como siempre el evento tuvo charlas interesantes y otras menos, pero recomiendo al lector que las consulte y decida por sí mismo. Los temas fueron bastante variados como forense, pentesting, vulnerabilidades y desarrollo seguro.

En lo que respecta a mi charla, ya podéis encontrar la presentación en la web de VULNEX (aquí).

Desde aquí saludar a la gente de MundoHacker y demás españoles que andaban por el congreso!

Un saludo y nos vemos en el próximo congreso 🙂

— Simon Roses Femerling

Publicado en Conferencia, Hacking Etico, Privacidad, Seguridad, Tecnologia | Etiquetado , , , , , , , , , | Deja un comentario

Medre, AutoCAD Malware: El espía dentro del cad

El pasado junio se identificó un malware que infectaba AutoCAD para Windows y que es responsable del robo de miles de documentos. AutoCAD es un popular programa para dibujo 2D y 3D que se utiliza para diseñar todo tipo de productos como viviendas, automóviles, industria aeroespacial así como en defensa, por lo que es realmente interesante para el espionaje industrial. En este post estudiaremos a un malware conocido como Medre.

Desde un punto de vista técnico es un malware sencillo, escrito en AutoLISP y scripts/payloads en VBS, pero ingenioso ya que infecta múltiples versiones de AutoCAD en Windows (ver Fig. 1) con el objetivo de robar ficheros y enviarlos por correo a servidores en China.

Fig. 1 – Versiones soportadas de AutoCAD por Medre

En la Fig. 2 podemos ver los servidores chinos donde se envía la información robada, Medre utiliza diversas cuentas de correo en estos servidores. A pesar de utilizar servidores chinos no está del todo claro si el origen del ataque proviene de allí.

Fig. 2 – Servidores Chinos

Y en la Fig. 3 podemos ver parte del código responsable de comprimir los ficheros robados utilizando WinRAR estableciendo la contraseña “1”.

Fig. 3 – Código WinRAR

Si pensamos que AutoCAD es uno de los programas más populares para diseño que corre en múltiples plataformas como Windows, MacOS y móviles (Android y iOS), nos llama la atención lo ingenioso de este ataque, simple y eficaz. ¿Quizás futuras versiones del malware sean multiplataforma?

Sin duda los ataques al tejido industrial ya sea a sistemas SCADA o utilizando malware como Medre para el robo de información son realmente interesantes y peligrosos para muchas organizaciones y Estados-Naciones.

¿Qué malware de espionaje industrial te ha parecido interesante?

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Malware, Seguridad | Etiquetado , , , , , , , , , | Deja un comentario

Mi experiencia en AppSec USA 2012

Sabes que estás en Texas cuando al salir del avión escuchas música country por el aeropuerto y efectivamente, el pasado 25 y 26 de octubre se celebró el congreso OWASP AppSec USA en Austin, Texas, donde un servidor participó con una ponencia sobre Web Honeypots.

El congreso contó con más de 800 asistentes, cursos gratis y de pago sobre diferentes temas de seguridad de aplicaciones durante los días 23 y 24, y por supuesto una selección de ponentes impresionante.

Mi experiencia como ponente fue inmejorable ya que la organización, la misma gente que organiza LASCON, puso mucho esfuerzo y ganas en que todo saliera bien. A los ponentes nos organizaron una barbacoa estilo Texas en un conocido restaurante con vistas a un lago.

Y qué decir del Happy Hour para todo el congreso, donde hubo un toro mecánico, la estupenda música del rapero Dual Core y auténticos armadillos para hacer carreras, sin lugar a dudas estaba en Texas, yee haw!

Con tantas ponencias donde elegir en demasiadas ocasiones no sabías cual escoger, pero en breve se colgarán los vídeos y ponencias de todas las charlas para poder verlas con toda la calma y rigor que se merecen.

Yo tuve el placer de hablar sobre Web Honeypots, un tema muy interesante y con mucho trabajo por hacer. En concreto hablé sobre un proyecto en el que llevo trabajando desde hace tiempo y que he rescatado del baúl de los recuerdos, y que a través de VULNEX podré dedicarle recursos profesionales 🙂

Cómo se nota que las empresas americanas tienen una actitud diferente a las empresas españolas, basta observar la foto del panel de trabajo (Job Board) con conocidas empresas buscando todo tipo de perfiles en seguridad de aplicaciones.

Desde aquí dar las gracias a toda la organización por el estupendo evento y nos vemos en la próxima cita AppSec USA 2013 en Nueva York.

Nota: En un par de semanas se publicarán los vídeos, os mantendré al tanto!

Feliz Halloween queridos lectores!

— Simon Roses Femerling




Publicado en Conferencia, Hacking, Hacking Etico, Modelo de Amenazas, OWASP, Privacidad, SDL, Seguridad, Tecnologia | Etiquetado , , , , , , , , | Deja un comentario