TwLocation en Python y un viejo script en Ruby: La API de Twitter sigue dando juego con la info GPS
Éste es un tema que no es nada nuevo. La geolocalización de los tuits es algo antiguo, es más, nosotros en ElevenPaths hace unos años hicimos una herramienta que analizaba los tuits de un usuario y los posicionaba en un mapa, siempre y cuando el usuario tuviera activa la geolocalización de los tuits en su cuenta.
Aún recuerdo las pruebas con nuestras cuentas, creando alguna cuenta y configurando la geolocalización de los tuits. Todo comenzó con un script escrito en Ruby y acabo siendo un servicio interno. Quizá fueran los comienzos del departamento de ideas locas y de pruebas de concepto, pero de ello hablaré más tarde.
Echando un ojo por Internet, he topado con una herramienta escrita en Python muy similar a lo que os comentaba. En este caso la herramienta se llama TwLocation y permite fijar unas coordenadas, un rango alrededor y el número de tuits que queremos encontrar en ese radio en tiempo real. La herramienta la vi en KitPloit y tiene una pinta interesante, pero no solo por lo que proporciona, si no por el cómo está hecha. Permite saber quién pone mensajes en Twitter con ubicación GPS activada, en un determinado rango de localización, al estilo del mapa de WatchDogs.
La herramienta se puede descargar desde Github y tiene unos pocos días, al menos en esta versión, subida al repositorio. El funcionamiento es sencillo, la herramienta utiliza OAuth para poder realizar peticiones a la API de Twitter.
Cuando descargamos la aplicación de TwLocation, ésta tiene unos requisitos que se pueden encontrar en el fichero de requirements.txt. Para instalar los requisitos ejecutamos el pip install –r requirements.txt. En el fichero config.txt, encontramos la configuración de la App OAuth. En el caso de Twitter requerimos: Consumer_Key, Consumer_Secret, Access_Key y Access_Secret. Esta información se puede obtener con una cuenta de Twitter y accediendo al dominio dev.twitter.com o developer.twitter.com.
Cuando se configura el fichero config.txt con lo necesario para poder utilizar la API de Twitter, se ejecuta con Python el script. Al arrancar el script nos solicita datos sobre latitud, longitud, el rango alrededor de ello y el número de resultados máximos que se van a obtener y almacenar en un fichero CSV.
En la imagen superior, se puede ver los datos introducidos y con el paso del tiempo se van recibiendo en tiempo real diferentes tuits que cumplen las condiciones de geolocalización indicadas. Por ejemplo, si fijamos un punto concreto, estaremos viendo lo que se tuitea alrededor de dicho punto. Es más, veremos quién tuitea, ya que el username también se obtiene.
Además, la herramienta facilita la posición en un mapa a través del enlace a Google Maps. Esto es interesante para pintarlo. Esta parte tiene relación con el ‘viejo’ script de Ruby llamado Poc_Twitter.rb que en su día realicé. Al finalizar la ejecución, se obtiene un fichero CSV, el cual, como se puede ver en la imagen, proporciona los siguientes campos:
El viejo script ‘Poc_Twitter.rb’
Este script que data de finales de 2014 tiene bastante historia. Jugando con OAuth por aquel entonces, jugando con Twitter y con el libro Got Root en la cabeza, ya que algo aparece allí, decidí hacer una pequeña prueba de concepto. Primero, identificar si un usuario tenía la geolocalización activa. Esto es algo que la API de Twitter te indicaba a través de un campo. Rápidamente, puedes saber si un usuario tiene la geolocalización activa, y como vimos, famosos y terroristas tenían activada esta geolocalización en Twitter.
Esto no acaba aquí, si el tuit tiene coordenadas es que ese tuit iba con información GPS. Generalmente, puede que el usuario sepa que su tuit está geolocalizado y sea consciente de ello, es más, quiere que la gente vea desde dónde lo tuiteó. El problema venía cuando el usuario no es consciente de ello. Esto supone un riesgo. Por supuesto, yo hice mi script para ver si mi cuenta tenía habilitada la geolocalización y mis tuits estaban enviando demasiada información ;-)
A continuación, se puede ver el comienzo del ‘viejo’ script. Como se puede ver, necesita los mismos parámetros que TwLocation.
Cuando se obtienen los tuits de la cuenta @pablogonzalezpe, en este ejemplo, se verificaba el campo geo y geo_enabled. En el caso de que estos campos fueran positivos, tendrían la localización desde dónde yo tuiteé. Al final, la suma de los tuits puede provocar un timeline de posicionamiento por dónde cualquiera sepa por dónde vas. Hay que tener cuidado con ello y comprobar si nuestros tuits están enviando nuestra ubicación.
Para finalizar, os muestro una ejecución desde una cuenta que tenía antigua y que tenía tuits geolocalizados para la prueba de concepto. Como se puede ver, es un ejemplo muy similar a lo que hemos visto con TwLocation.
Sin duda, eran sin saberlo, los comienzos del departamento de ideas locas de CDO. Cosas que hacíamos en ElevenPaths a finales del año 2014, aunque por aquel entonces mi responsabilidad era Faast, siempre teníamos tiempo para esas pequeñas ideas locas. En el año 2016 impartí un taller sobre el uso de la API de Twitter con Python con mi amigo Alberto Sánchez, en la HoneyCON, dónde ampliamos casos con la Streaming API de Twitter. Realmente interesante. Al final un pequeño script y una pequeña idea puede dar para varias cosas, cuando poco a poco se va desarrollando y aprendiendo.
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
Figura 1: TwLocation en Python y un viejo script en Ruby: La API de Twitter sigue dando juego con la info GPS |
Aún recuerdo las pruebas con nuestras cuentas, creando alguna cuenta y configurando la geolocalización de los tuits. Todo comenzó con un script escrito en Ruby y acabo siendo un servicio interno. Quizá fueran los comienzos del departamento de ideas locas y de pruebas de concepto, pero de ello hablaré más tarde.
Figura 2: Geolocalización de Twitts de SteveWozniak con nuestra tool |
Echando un ojo por Internet, he topado con una herramienta escrita en Python muy similar a lo que os comentaba. En este caso la herramienta se llama TwLocation y permite fijar unas coordenadas, un rango alrededor y el número de tuits que queremos encontrar en ese radio en tiempo real. La herramienta la vi en KitPloit y tiene una pinta interesante, pero no solo por lo que proporciona, si no por el cómo está hecha. Permite saber quién pone mensajes en Twitter con ubicación GPS activada, en un determinado rango de localización, al estilo del mapa de WatchDogs.
Figura 3: Mapa de Londres We Are Data del juego de WatchDogs |
La herramienta se puede descargar desde Github y tiene unos pocos días, al menos en esta versión, subida al repositorio. El funcionamiento es sencillo, la herramienta utiliza OAuth para poder realizar peticiones a la API de Twitter.
Figura 4: TwLocation en Twitter |
Cuando descargamos la aplicación de TwLocation, ésta tiene unos requisitos que se pueden encontrar en el fichero de requirements.txt. Para instalar los requisitos ejecutamos el pip install –r requirements.txt. En el fichero config.txt, encontramos la configuración de la App OAuth. En el caso de Twitter requerimos: Consumer_Key, Consumer_Secret, Access_Key y Access_Secret. Esta información se puede obtener con una cuenta de Twitter y accediendo al dominio dev.twitter.com o developer.twitter.com.
Figura 5: Instalación de TwLocation |
Cuando se configura el fichero config.txt con lo necesario para poder utilizar la API de Twitter, se ejecuta con Python el script. Al arrancar el script nos solicita datos sobre latitud, longitud, el rango alrededor de ello y el número de resultados máximos que se van a obtener y almacenar en un fichero CSV.
Figura 6: Usuarios que twittean en una determinada ubicación GPS con el tiempo |
Figura 7: Fichero CSV de salida |
Además, la herramienta facilita la posición en un mapa a través del enlace a Google Maps. Esto es interesante para pintarlo. Esta parte tiene relación con el ‘viejo’ script de Ruby llamado Poc_Twitter.rb que en su día realicé. Al finalizar la ejecución, se obtiene un fichero CSV, el cual, como se puede ver en la imagen, proporciona los siguientes campos:
• UsernameEl fichero es automatizable, es decir, podríamos procesarlo con otro script para procesar la información obtenida. Como se puede entender es interesante, cuando manejamos un gran volumen de información. En el siguiente vídeo se puede ver cómo funciona TwLocation.
• Profile URL
• Latitude
• Longitude
• Google Maps
• Tweet
Este script que data de finales de 2014 tiene bastante historia. Jugando con OAuth por aquel entonces, jugando con Twitter y con el libro Got Root en la cabeza, ya que algo aparece allí, decidí hacer una pequeña prueba de concepto. Primero, identificar si un usuario tenía la geolocalización activa. Esto es algo que la API de Twitter te indicaba a través de un campo. Rápidamente, puedes saber si un usuario tiene la geolocalización activa, y como vimos, famosos y terroristas tenían activada esta geolocalización en Twitter.
Figura 9: Tuits de un terrorista con ubicación GPS |
Esto no acaba aquí, si el tuit tiene coordenadas es que ese tuit iba con información GPS. Generalmente, puede que el usuario sepa que su tuit está geolocalizado y sea consciente de ello, es más, quiere que la gente vea desde dónde lo tuiteó. El problema venía cuando el usuario no es consciente de ello. Esto supone un riesgo. Por supuesto, yo hice mi script para ver si mi cuenta tenía habilitada la geolocalización y mis tuits estaban enviando demasiada información ;-)
Figura 10: Mensajes de una cuenta Twitter de un famoso con ubicación GPS |
A continuación, se puede ver el comienzo del ‘viejo’ script. Como se puede ver, necesita los mismos parámetros que TwLocation.
Figura 11: Token OAuth para consultar la API de Twitter |
Cuando se obtienen los tuits de la cuenta @pablogonzalezpe, en este ejemplo, se verificaba el campo geo y geo_enabled. En el caso de que estos campos fueran positivos, tendrían la localización desde dónde yo tuiteé. Al final, la suma de los tuits puede provocar un timeline de posicionamiento por dónde cualquiera sepa por dónde vas. Hay que tener cuidado con ello y comprobar si nuestros tuits están enviando nuestra ubicación.
Figura 12: Captura de tuits con ubicación GPS activada |
Para finalizar, os muestro una ejecución desde una cuenta que tenía antigua y que tenía tuits geolocalizados para la prueba de concepto. Como se puede ver, es un ejemplo muy similar a lo que hemos visto con TwLocation.
Figura 13: Nuestra PoC con info similar a TwLocation |
Sin duda, eran sin saberlo, los comienzos del departamento de ideas locas de CDO. Cosas que hacíamos en ElevenPaths a finales del año 2014, aunque por aquel entonces mi responsabilidad era Faast, siempre teníamos tiempo para esas pequeñas ideas locas. En el año 2016 impartí un taller sobre el uso de la API de Twitter con Python con mi amigo Alberto Sánchez, en la HoneyCON, dónde ampliamos casos con la Streaming API de Twitter. Realmente interesante. Al final un pequeño script y una pequeña idea puede dar para varias cosas, cuando poco a poco se va desarrollando y aprendiendo.
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
1 comentario:
disculpa, pero, no es esto contra los terminos y condiciones de la twitter API que expone presisamente que:
"
User Protection.
Twitter Content, and information derived from Twitter Content, may not be used by, or knowingly displayed, distributed, or otherwise made available to:
any public sector entity (or any entities providing services to such entities) for surveillance purposes, including but not limited to:
investigating or tracking Twitter's users or their Content; and,
tracking, alerting, or other monitoring of sensitive events (including but not limited to protests, rallies, or community organizing meetings);
any public sector entity (or any entities providing services to such entities) whose primary function or mission includes conducting surveillance or gathering intelligence;
any entity for the purposes of conducting or providing surveillance, analyses or research that isolates a group of individuals or any single individual for any unlawful or discriminatory purpose or in a manner that would be inconsistent with our users' reasonable expectations of privacy;
any entity to target, segment, or profile individuals based on health (including pregnancy), negative financial status or condition, political affiliation or beliefs, racial or ethnic origin, religious or philosophical affiliation or beliefs, sex life or sexual orientation, trade union membership, data relating to any alleged or actual commission of a crime, or any other sensitive categories of personal information prohibited by law;
any entity that you reasonably believe will use such data to violate the Universal Declaration of Human Rights (located at http://www.un.org/en/documents/udhr/), including without limitation Articles 12, 18, or 19.
If law enforcement personnel request information about Twitter or its users for the purposes of an ongoing investigation, you must refer them to Twitter's Guidelines for Law Enforcement located at https://t.co/le.
"
Publicar un comentario