viernes, noviembre 08, 2019

Instagram y el juego de la insinuación: Como un pequeño "leak" de Machine Learning permite saber el tipo de fotos publicas en cuentas privadas (Parte 1 de 3)

Desde hace un tiempo utilizo más activamente mi cuenta de Instagram (@chemaalonso) donde decidí no seguir a nadie. No es que no siga a nadie realmente, es que prefiero buscar las cuentas que me interesan manualmente y ver lo que publican, que entrar en el juego por el que pasé en Twitter de "¿Por qué no me sigues?". Mi vida es mucho más relajada de esa forma. Y eso lleva a una consecuencia muy curiosa y evidente. Solo puede ver cosas que se publican en cuentas públicas. 

Figura 1: Instagram y el juego de la insinuación: Como un pequeño "leak"
de Machine Learning permite saber el tipo de fotos publicas en cuentas privadas
(Parte 1 de 3)

Todo lo que esté publicado en cuentas privadas está fuera de mi alcance y si veo que una cuenta tiene el perfil privado, fin de la historia. Hasta que descubrí una cosa curiosa. A lo largo de estos años usando Instagram, había algo que me llamaba la atención, sobre todo con cuentas de personas que yo conocía. Y era el sistema de recomendaciones que utiliza Instagram cuando ves una cuenta privada.

Las cuentas sugeridas en cuentas privadas

En la imagen podéis ver una lista de personas que me sugirió Instagram cuando fui a ver la cuenta de una compañera de trabajo con la que me tiré una foto. La busqué para taggearla y vi que tenía el perfil privado. En las recomendaciones me dio cuentas de personas que no conozco, pero la primera de ellas es de una chica aparentemente de su edad, sonriendo, con ropa que parece de hacer deporte. Algo que pega mucho con la chica con la que me hice la foto. Alegre, deportista, de esa misma edad más o menos. 

Figura 2: Recomendaciones en ejemplo 1

Se me quedó la sensación de que las recomendaciones que daba Instagram tenían que ver con los insights que hubiera sacado de las fotos de la cuenta privada. No sé si por similitudes de perfiles socioeconómicos, o por algoritmos de visión artificial para reconocer el tipo de fotos que publicaba. Probándolo con una cuenta privada de una persona que milita en una formación política, se puede ver que evidentemente las recomendaciones pueden tener que con información de la cuenta privada.

Figura 3: Recomendaciones en ejemplo 2

Y con esta otra cuenta privada de alguien que me puso un comentario en una foto, se puede ver que dependiendo del tipo de cuenta privada que tenga la persona las recomendaciones son distintas. Así que había que probar un algoritmo que nos diera algún insights de la cuenta privada tomando información de las fotos de las cuentas recomendadas.

Figura 4: Recomendación en ejemplo 3

Es decir, si la cuenta privada tiene algo que ver en forma de insights con las cuentas recomendadas. Si nosotros podemos inferir de las cuentas recomendadas esos insights podremos saber qué insights son los que comparten con la cuenta privada original. Un proyecto perfecto para hacer con mis compañeros de Ideas Locas, y Enrique Blanco fue el asignado a este proyecto con el que hemos jugado durante unos meses.

Instagram Not Safe/Suitable for Work

Viendo lo anterior, pensamos en quién podría estar interesado en saber el tipo de fotografías que esta publicando una persona, y pensamos en un entorno de "Soft Parental Control". Supongamos que no hemos dejado que nuestro hijo/a tenga acceso a una red social como Instagram y queremos evaluar el contenido de esa cuenta - de la que estamos excluidos por ser sus padres - , para ver si está siguiendo nuestras recomendaciones o no. En esta situación nos encontramos con dos posibles escenarios.

Cabe la posibilidad de que nuestro/a hijo/a no haya sido precavido/a y haya configurado su cuenta como pública. En este caso su contenido multimedia, información de perfil, seguidores, usuarios seguidos, likes, etc. estaría completamente expuesto. En este escenario, cualquier persona, tenga o no cuenta en esta red social, tendrá acceso a su contenido. Esta casuística es de nuestro interés, ya que se puede obtener esa información mediante Instagram Graph API.

Otra opción es que nuestro/a hijo/a haya sido precavido/a, configurando su perfil como privado. Su contenido puede ser sólo visualizado por sus seguidores, por lo que su nivel de exposición es algo menor. Si, como padres, queremos monitorizar la naturaleza de lo que nuestros retoños postean, no nos queda más que crearnos un perfil de Instagram, cruzar los dedos para que nos acepten en su círculo de amistades y juzgar nosotros mismos la idoneidad del contenido que decide publicar.

Sin embargo, puede que nuestras peticiones de amistad sean rechazadas de manera sistemática (no es lo habitual, pero ya sabemos cómo son a ciertas edades). En este caso, ¿cómo podemos obtener información sobre la naturaleza de la cuenta en la que estamos interesados? Como ha explicado Chema Alonso al principio, nos dimos cuenta de que las sugerencias de amistad que Instagram te hace cuando intentas consultar un perfil privado pueden usarse como una fuente de información bastante útil.

Figura 5: Localización en navegador de la región de interés para el análisis de usuarios privados.

Se puede obtener información de un usuario de una esta red social con sólo mirar ese contenido recomendado. Tras buscar información sobre cómo se generan esos perfiles recomendados en cuentas privadas, aprendimos que en el algoritmo utilizado por Instagram, la sugerencia de usuarios a los que seguir queda determinada por los siguientes criterios:
• Si se tienen amigos/seguidores mutuos; 
• Si has aceptado compartir tus contactos telefónicos con Instagram; 
• Si has aceptado vincular cuentas de redes sociales, Instagram puede encontrar a tus amigos de Facebook en Instagram; 
• En base a los mensajes que te han gustado; 
• A quién sigues en Instagram; 
• Por supuesto, también tiene en cuenta aquellos perfiles similares en términos de hashtags que ambos podéis seguir; 
• Lo que buscas en Instagram; 
• Cuentas que son seguidas por alguien a quien sigues.
Que un usuario sea privado, por lo tanto, no garantiza totalmente la privacidad de un perfil. En cierta medida siempre se va a exponer la información del mismo. Por poner un ejemplo, si intentas seguir a un político que tiene perfil privado, entre las cuentas sugeridas suele encontrarse la del partido en la que milita, por lo que ya sabemos su ideología política.

Por otro lado, si un perfil tiende a postear contenido erótico, o insinuante, es más probable que interaccione con contenido de ese tipo (dentro de los filtros ya bastante estrictos de Instagram) y se encuentre en círculos de contenido explícito que te serán convenientemente sugeridos.

PoC: Instagram NSFW (Not Safe/Suitable for Work)

En esta rápida PoC, quisimos crear una Aplicación Web sencilla usando Python Flask y Bootstrap 3 para, realizando scrapping sobre un perfil privado de Instagram, obtener información sobre la explicitud del contenido del mismo. Hay que destacar que la información obtenida desde la API no es tan útil en este caso. Lo único que se va a poder obtener de un perfil privado es la biografía del usuario, la foto de perfil y las imágenes de los perfiles sugeridos; y éstas son nuestro objetivo para hacer un análisis de idoneidad.

Figura 6: Hacking con Python

Esta limitación en la obtención de información de los perfiles privados viene como respuesta a los cambios realizados en las APIs de Facebook e Instagram después del leak de Cambridge Analytica. En el período comprendido entre el 31 de agosto y el 31 de diciembre de 2018 se eliminaron algunas funcionalidades como:
• Acceder a las listas de usuarios seguidos y seguidores; 
• Seguir o dejar de seguir cuentas a través de la API; 
• Postear o eliminar comentarios.
Pipeline y setup del entorno

Este servicio de detección de imágenes sesgado hacia contenido explícito se ha generado mediante una serie de scripts que, haciendo uso de Web Scrapping haciendo uso de Selenium y Beautiful Soup, utiliza Nudity image detection HTTP API. Este proyecto proporciona una API REST lista para implementar que permite predecir si una imagen es ofensiva o tiene contenido para adultos.

Figura 7: Pipeline de Instagram NSFW

En esta PoC NSFW se hace uso de los siguientes WebDrivers para poder hacer el scrapping del contenido HTML, lo cual necesitaremos para apuntar a los contenidos de las páginas que nos interesan:
ChromeDriver - WebDriver for Chrome 
GeckoDriver - WebDriver for Firefox
Para su correcto funcionamiento, hay que incluir en el PATH las rutas en las que los drivers se encuentren. Para GNU/Linux basta con ejecutar:
$ export PATH=$PATH:/path/to/driver/chrome-driver 
$ export PATH=$PATH:/path/to/driver/gecko-driver
Para añadir al PATH en Windows, basta con seguir los siguientes pasos.

Si ya hemos obtenido mediante Web Scrapping todas las URLs del contenido multimedia de interés, sólo nos queda calcular el nivel de explicitud (nudity) de un conjunto de imágenes. Para ello, vamos a necesitar algún recurso que sea capaz de reconocer imágenes explícitas. Esto, por supuesto, ya existe y veremos cómo utilizarlo en nuestro proyecto en la siguiente parte de este artículo.

Autores: Chema Alonso (Contactar con Chema Alonso) y Enrique Blanco (@eblanco_h) miembro del equipo de Ideas Locas en CDO. Puedes contactar con Enrique Blanco en MyPublicInbox.

*****************************************************************************************
- Instagram y el juego de la insinuación (1 de 3)
Instagram y el juego de la insinuación (2 de 3)
Instagram y el juego de la insinuación (3 de 3)
*****************************************************************************************

No hay comentarios:

Entrada destacada

Programa de Especialización "Inteligencia Artificial para Expertos en Ciberseguridad" 2ª Edición.

Hoy, en medio del verano, os traigo información de la 2ª Edición del   Programa de Especialización  de "Inteligencia Artificial para Ex...

Entradas populares