1984 – La ficción de Orwell en la actualidad

img1Imagino que los lectores conocerán esta gran obra de George Orwell, y que trágicamente vemos día a día como se entrelazan en nuestra vida los tejemanejes del Partido que Orwell expone de un modo premonitorio en su obra. ¡Al que no conozca esta obra maestra, que deje todo lo que está haciendo y consiga un ejemplar para su lectura y asimilación inmediatamente!

Cada día tenemos más ojos pegados a nuestra nuca, y a pesar de que todos somos conscientes, todos necesitamos un kick a lo inception para despertarnos de nuestro letargo, pasotismo, indiferencia o como queramos denominar el que no actuemos en contra de esta situación. En mi caso, soy una persona bastante consciente de esto, y no suelo dejar demasiado rastro por el mundo, pero soy usuario de Google, uno de los ministerios de nuestro 1984 personal… uno de los más ávidos de información.
[Read more…]

Pokemon Goes big data

By José González (@bitsniper) en colaboración con Damià Poquet (@DamiaPoquet)

Introducción

Como los lectores ya se habrán percatado, “Pokémon Go” está en boca de todos, o más bien en “mano” de todos –incluso este blog tiene ya alguna entrada sobre esto–. Para el lector más despistado, Pokémon Go es un juego de realidad aumentada de la famosa empresa Nintendo en colaboración con Niantic –empresa que algunos podrán recordar del juego similar Ingress–. La finalidad de este juego es la de recorrer diversos emplazamientos físicos en busca de unas criaturitas llamadas “Pokemon”, al igual que en los demás juegos de la misma franquicia.

¿Qué tiene de especial? Pues bien, este juego ha enganchado especialmente a la generación del 80/90 que creció con estos juegos, mezcla de nostalgia y con afán de alimentar al “friki” que llevamos dentro, además de un –como llaman hoy en día– hype descomunal.

[Read more…]

Hackathones: Big Data, Malware y el proyecto.

cc0Hoy hace ya unos días desde que los integrantes de SecurityArtWork finalizaran su aventura en el Hackathon de INCIBE, una aventura que se puede resumir en:

  • Mucho esfuerzo.
  • Litros de café y demás bebidas cafeinadas.
  • Récord de 38 horas seguidas sin dormir.
  • 6 horas dormidas durante el transcurso Hackathon.
  • Mucha diversion.

[Read more…]

El equipo SecurityArtWork va al Hackathon del CyberCamp

Para todos aquellos lectores que no sepan lo que es, el CyberCamp es un evento organizado por el INCIBE (Instituto Nacional de Ciberseguridad) con el objetivo de identificar, atraer, gestionar y en definitiva, ayudar a la generación de talento en ciberseguridad.

Dentro de las actividades organizadas en el CyberCamp se encuentra el Hackathon, que en esta ocasión (al igual que en previas ediciones) la organización ha decidido centrar en el desarrollo de herramientas de seguridad.

[Read more…]

Criptografía, ¿El patito feo de la informática? (III)

Una vez hemos visto la introducción y la aplicación a escenarios y entornos concretos, vamos por último a ver una herramienta que es casi imprescindible conocer para el cifrado de información: el gran GPG.

GNU Privacy Guard es una herramienta de cifrado y firma digital, que de por sí nos daría para un post entero, pero dado que hay literatura de sobra para completar varios libros solo daré unas pinceladas básicas. El principal uso de esta herramienta es el cifrado y firmado de archivos y emails mediante criptografía asimétrica, aunque también soporta el cifrado de datos mediante algoritmos simétricos.

[Read more…]

Criptografía, ¿El patito feo de la informática? (II)

En la anterior entrada vimos una breve introducción a la criptografía. Hoy trataremos de aplicar lo visto a un escenario más práctico.

Cifrado de disco con herramientas nativas

Por suerte todos los sistemas operativos modernos disponen de un conjunto de herramientas que proporcionan «cripto robusta» y todas ellas permiten el cifrado completo de disco o cifrado de la partición de usuario. Debido a la extensión de algunos de los procesos que en sí darían para un post, en ocasiones se enlaza a la documentación original.

[Read more…]

Criptografía, ¿El patito feo de la informática? (I)

Hoy en día usamos innumerables aplicaciones de la criptografía, consciente o inconscientemente, aunque este último suele ser el caso habitual. El simple hecho de acceder a una web segura -https- desencadena una maravilla de la matemática moderna, una explosión de algoritmos, todos ellos con un mismo fin: proteger nuestra privacidad y asegurarnos que el destinatario de esa comunicación es quien dice ser.

Imagino que la mayoría de nuestros lectores ya sabrán lo que es, pero ahí van unas definiciones:

La RAE nos proporciona una descripción realmente vaga del término:

Criptografía (del griego criptos, ‘oculto‘, y grafé, ‘escritura‘).

Arte de escribir con clave secreta o de un modo enigmático.

[Read more…]

Python para el Pentest. OSINT: Twitter (3): Streaming, ríos de datos, y para merendar Tweets.

Repasemos lo visto hasta ahora. En la primera entrada de la serie vimos algunos conceptos básicos para comenzar a trabajar con Python desde el pentesting, que vamos a necesitar durante todo el camino. Tras la introducción, nuestro primer caso práctico ha sido la aplicación de Python para OSINT (“Open Source Intelligence”), en concreto Twitter. Hasta ahora hemos visto (1) los preliminares y (2) hemos desarrollado un pequeño PoC accediendo a la API RESTFull, que como vimos permitía una gran variedad de opciones pero no era lo mejor para obtener información en tiempo real.

Por eso, en esta entrada veremos la utilización de la API de streaming, un poco mas complejo que usar que REST, pero que con un sencillo ejemplo nos quedará claro como utilizar. Como en anteriores entradas, si les queda alguna duda, pueden dejárnosla en los comentarios y la atenderemos encantados.

Si volvemos a la función OAuth() recordaremos que nos devolvía una tupla, y esta la asignamos a dos variables, api y auth, para el siguiente ejemplo utilizaremos la segunda.

[Read more…]

Python para el Pentest. OSINT: Twitter (2): Manos a la obra, pájaros y APIs.

Si recuerdan, en la anterior entrada introdujimos los diferentes elementos que vamos a necesitar para desarrollar un pequeño PoC que nos permita explotar la información de Twitter. Una vez descritos los preliminares, ahora es cuando toca entrar en materia.

Lo primero que haremos será crear una aplicación nueva en Twitter, para ello podemos seguir cualquiera de los innumerables tutoriales que existen y hacernos con el consumer_token y el consumer_secret que serán algo así —estos son inventados, deberemos obtener los nuestros—:

consumer_token = K4a5Evw9bMnWhQDxb5tPBZPzjY
consumer_secret = j7CsoQtFiNArbITSYqYG5hw37NDF0lg1B7MBlBNRQ
RffVWWmug0

Estas claves las necesitaremos para hacer la danza OAuth y permitir a nuestra aplicación usar nuestra cuenta, ya que para acceder a ciertas funcionalidades de la API tendremos que estar logueados.

Ahora, antes de nada, prepararemos la cabecera de nuestro script con su Shebang, la codificación del documento y los imports que necesitaremos para el proyecto.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
from sys import exit
import tweepy
from json import loads

Después de haber definido la cabecera podremos empezar con el código. Para autorizar nuestra aplicación en nuestra cuenta lo haremos de la siguiente forma:

########## CONFIG ##########
consumer_token = 'K4a5Evw9bMnWhQDxb5tPBZPzjY'
consumer_secret = 'j7CsoQtFiNArbITSYqYG5hw37NDF0lg1B7MBlBNR
QRffVWWmug0'
access_token = ''
access_secret = ''
############################

def OAuth():
	''' Returns api object '''
	cToken = consumer_token
	cSecret = consumer_secret
	aToken = access_token
	aSecret = access_secret
	# Instanciamos el gestor de autorización
	auth = tweepy.OAuthHandler(cToken, cSecret)

	'''En el caso de que no tengamos los tokens de autorización de nuestra cuenta 
	solicitaremos la url que nos generará el pin.'''

		if aToken == '' or aSecret == '':
		try:
			redirect_url = auth.get_authorization_url()
			print('Ve a Twitter y autoriza la aplicación: {0}'.format(redirect_url))
		except tweepy.TweepError:
			print('Error al solicitar el token.')

		# Le pasamos el PIN a auth para que solicite los tokens
		verifier = raw_input('Verificador: ').strip()
		auth.get_access_token(verifier)

		'''Guardamos nuestros tokens y los imprimimos en pantalla para añadirlos a las 
		   variables de configuración. Así la próxima vez no tendremos que realizar 
                   este paso.'''

		aToken = auth.access_token.key
		aSecret = auth.access_token.secret
		log('Tu access_token: {0}'.format(aToken))
		log('Tu access_secret: {0}'.format(aSecret))

		# Setea auth token y secret
		auth.set_access_token(aToken, aSecret)

		# Devolvemos una tupla para usarla con la API REST y la API de Streaming
		return (tweepy.API(auth), auth)

Para obtener ahora acceso a los métodos de la API, lo único que tendremos que hacer es llamar a nuestra función y asignar la tupla a nuestras variables —para la API REST solo usaremos la variable api—:

api, auth = OAuth()

Ahora comprobamos que lo que hemos hecho funciona solicitando los trends globales mediante:

print(api.trends_place(1))

Si todo ha ido bien deberemos obtener un JSON que probablemente nos ofusque un poco la salida que esperábamos, así que, sabiendo que es un JSON, procedemos a tratarlo como si fuera un diccionario, y ya que estamos lo ordenamos y metemos en una función.

def getTrends(woeid=1):
''' Devuelve una lista de trends por localización, la localización es un WOEID de Yahoo, 
el ID para todo todo el mundo es 1.'''

'''Hacemos una llamada a la API y recuperamos directamente los elementos que nos interesan 
del diccionario.'''

	trends = api.trends_place(1)[0]['trends']
	
	# Extraemos el nombre de los trends y los devolvemos.
	trendList = [trend['name'] for trend in trends]
	return trendList

y la llamamos solicitando los trending topics de Valencia —el WOEID de Valencia es 776688—:

# Recuperamos los tt y los imprimimos uno por uno
trendingTopics = getTrends(woeid=776688)
for topic in trendingTopics:
print(topic)

Y de esta forma se harían las llamadas a la API, como dijimos al principio, RESTfull. Conforme se ahonda en las opciones de la API te das cuenta que está pensada para gestionar nuestra cuenta, obtener estados, información, recuperar elementos del pasado y casi todo lo que podamos imaginar, pero… para OSINT nos interesa obtener datos en tiempo real, ¿como lo podemos hacer? pues con la segunda forma de acceso, la API de Streaming.

Pero eso lo veremos en la próxima entrada de la serie. Dejadnos en los comentarios cualquier duda o aspecto que os resulte interesante destacar.

Python para el Pentest. OSINT: Twitter (1)

El termino OSINT se refiere a “Open Source Intelligence” —Inteligencia de fuentes abiertas— y es cada vez más usado en las comunidades de inteligencia. Éste es favorecido principalmente por el auge de las redes sociales, una Internet cada vez mas repleta de información y nuestro escaso criterio a la hora de publicar contenido, —como en el ejemplo del tweet de las detenciones a presuntos miembros de ETA—. El concepto de fuentes abiertas se refiere a inteligencia (cuando hablamos de inteligencia nos referimos a información útil extraída de datos en crudo) que puede ser obtenida de medios públicos y de libre acceso.

Una vez que el lector tiene claro el concepto, tal vez no llegue a vislumbrar el impacto que puede tener, así que vamos a realizar un pequeño PoC que trate de recoger datos de una de las fuentes que más afluente de información tiene: Twitter, y a plasmar en una gráfica los resultados para tener una mejor visión de lo que hemos recogido.

Para esto —siguiendo con la serie— usaré Python, con los siguientes paquetes (en cursiva los que vienen por defecto y que no habrá que instalar):

tweepy
NLTK
json

Es recomendable que usemos para instalar los nuevos paquetes un virtualenv como ya explicamos en el artículo anterior de la serie. Veamos algunos conceptos y herramientas que serán de interés a lo largo del post y nos facilitarán la vida a la hora de obtener grandes cantidades de datos y procesarlos.

El primero de ellos es la API de Twitter. Para acceder a ésta actualmente tenemos tres métodos: el acceso a la API RESTfull, por streaming y el Firehose.

Con la API Firehose tendremos acceso a toda la información de twitter en tiempo real y sin restricciones. El acceso a esta API es de pago y con un precio muy elevado. Algunas empresas tienen acceso al Firehose y revenden el acceso a el en pequeñas porciones. Algunas de estas empresas son @gnip que fue comprada este año por twitter y @DataSift.

Para los que no nos podemos permitir el acceso a esta API nos queda el acceso a la RESTfull y la de streaming. La primera nos permite el acceso a la gestión de nuestra cuenta y recuperación de información pasada, está limitada a un determinado número de llamadas y el contador se resetea cada 15 minutos. La segunda opción se asemeja al Firehose exceptuando que solo podremos escuchar aplicando una serie de filtros y tan solo en el 1% de todo el caudal de datos. Aún a pesar de estas limitaciones, con un poco de ingenio y astucia se pueden hacer herramientas muy potentes sin tener que pagar por un pedacito de Firehose.

Dejemos eso ahí y pasemos ahora al NLTK: Natural Language Tool Kit. Éste, como su nombre indica, es un paquete o más bien una serie de herramientas que nos permitirán usar técnicas de procesamiento de lenguaje natural de una manera sencilla.

Para configurarlo —aunque no sea estrictamente necesario, nos servirá para jugar con este fantástico paquete— debemos abrir una consola y entrar en el REPL de python escribiendo simplemente python en la terminal. Cuando se abra el intérprete debemos importar el paquete e iniciar el asistente de descarga de utilidades.

import nltk
nltk.download()

Una vez que tenemos el prompt Downloader> pulsamos d y en el prompt Identifier> escribimos book. Cuando termine de descargarse repetimos el proceso con el package all-corpora y con esto ya dispondremos de literatura para jugar.

Siguiendo con los preliminares, siempre imprescindibles, veamos ahora qué es JSON y como manipularlo con Python. JSON, acrónimo de JavaScript Object Notation, es un lenguaje que sirve para expresar estructuras de datos con mucha eficiencia y simpleza. La API de Twitter nos devolverá toda la información estructurada en JSON.

Para manipular estructuras JSON, python nos provee del paquete json que nuevamente lo tendremos disponible en nuestro script mediante un import import json. Para evitar importar todo el paquete, es recomendable importar tan solo los módulos que necesitemos, como:

from json import loads
from json import dumps

Así a la hora de cargar un string que represente una estructura JSON e imprimir el resultado solo tendremos que hacer lo siguiente:

dataStr = "{'foo': 'bar'}"
dataDict = loads(dataStr)
print('{0}'.format(dumps(dataDict, indent=3)))

En la siguiente parte de esta serie, crearemos una aplicación nueva en Twitter, y continuaremos trabajando para poder obtener y gestionar datos de Twitter. Manténganse a la espera.