Nueva herramienta: Neto, nuestra suite de análisis de extensiones Firefox, Chrome y más

martes, 8 de mayo de 2018


En el área de innovación y laboratorio de ElevenPaths, hemos creado una nueva herramienta para analizar extensiones de navegador. Aunque más que una herramienta, supone toda una suite (además, extensible con sus propios plugins) para el análisis de extensiones, es sencilla de usar y proporciona información útil sobre características propias de extensiones tanto de Firefox como de Chrome u Opera.

Neto herramienta imagen

¿Por qué analizar extensiones?
Las extensiones contienen información relevante como la versión, el idioma por defecto, los permisos que requiere para su correcto funcionamiento o las estructuras de las direcciones URL sobre las que la extensión operará. Asimismo, contiene apuntadores a otros archivos como la ruta relativa del fichero HTML que se cargará al hacer clic sobre su icono o referencias a los ficheros JavaScript que se deberán ejecutar tanto en segundo plano (background scripts) como con cada página que cargue el propio navegador (content scripts).

Sin embargo, el análisis los ficheros que conforman una extensión también puede desvelar la existencia de archivos que no deberían estar presentes en aplicaciones en producción. Entre ellos, podrían aparecer archivos vinculados a la gestión de versiones como GIT u otros archivos temporales y de respaldo.

Por supuesto, también existen las extensiones creadas como malware, adware, o para espiar al usuario. Los ejemplos son muchos y variados, sobre todo recientemente en Chrome (donde ya se ha alcanzado cierto nivel de madurez, incluso) y en Firefox. La "moda" en estos momentos, es sobre todo la minería oculta en extensiones.

La herramienta
Es una herramienta escrita en Python 3 y distribuida como paquete de PIP, lo que facilita la instalación automática de dependencias.
$ pip3 install neto
En sistemas en los que no se dispongan de privilegios de administración, se puede instalar el paquete en el usuario actual:
$ pip3 install neto --user
Una vez instalado, se nos creará un entry point en el sistema con el que podremos llamar a la aplicación de línea de comandos desde cualquier ruta.

Funcionalidades principales de Neto imagen
Funcionalidades principales de la herramienta. 

Las funcionalidades que hemos incluido en esta primera versión son dos:
  • El analizador en sí, (extensible a través de plugins para ampliar su potencia)
  • Un daemon con una interfaz JSON RPC que nos permitirá interactuar con el analizador desde otros lenguajes de programación.

Las distintas opciones del analizador se pueden explorar con neto analyser --help. En cualquier caso, Neto nos permitirá procesar extensiones de tres formas diferentes:
  • Indicando la ruta local a una extensión que tengamos descargada (con la opción -e), 
  • Indicando un directorio del sistema en el que tengamos varias extensiones (con la opción -d)
  • Descargándolas directamente desde una URI en internet (con la opción -u). 

En todos estos casos, el analizador almacenará el resultado como JSON en una nueva carpeta llamada output, aunque dicha ruta también es configurable con el comando -o.

Para interactuar desde otros lenguajes de programación hemos creado un daemon que levanta una interfaz JSON-RPC. De esta manera, si lo arrancamos con neto daemon podremos conseguir que el analizador en Python lleve a cabo determinadas tareas, como el análisis de extensiones almacenadas en local (indicándole el método «local») o que están disponibles online a (indicándole el método «remote»). En ambos casos, los parámetros que espera el daemon se corresponden con las rutas locales o remotas de las extensiones a analizar. Las llamadas disponibles se pueden consultar con el método «commands» y se pueden efectuar directamente con curl como sigue.
$ curl --data-binary '{"id":0, "method":"commands", "params":[], "jsonrpc": "2.0"}'  -H 
'content-type:text/json;' http://localhost:14041

En cambio, si estamos programando en Python, Neto también ha sido diseñado para funcionar como una librería.
$ Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from neto.lib.extensions import Extension
>>> my_extension = Extension ("./sample.xpi")

De esta manera, podremos acceder a las diferentes características del análisis realizado contra la extensión, bien accediendo directamente a las propiedades…
$ >>> my_extension.filename
'adblock_for_firefox-3.8.0-an+fx.xpi'
>>> my_extension.digest
'849ec142a8203da194a73e773bda287fe0e830e4ea59b501002ee05121b85a2b'
>>> import json
>>> print(json.dumps(my_extension.manifest, indent=2))
{
  "name": "AdBlock",
  "author": "BetaFish",
  "version": "3.8.0",
  "manifest_version": 2,
  "permissions": [
 "http://*/*",
 "https://*/*",
 "contextMenus",
 "tabs",
 "idle",
…

Os dejamos un pequeño vídeo con un uso básico.



Plugins y cómo contribuir
Siendo software libre, para aquellos que quieran contribuir, existe la posibilidad de hacerlo a través del repositorio de Github. La estructura de plugins que podemos encontrar en la ruta neto.lib.plugins permite la adición de nuevos criterios de análisis estático, teniendo en cuenta en función de las necesidades del analista. Esto convierte a Neto en una suite de análisis que esperamos resulte potente. Además, la ventaja que entraña que se distribuya a través de PyPI como paquete es que siempre que se añada alguna nueva funcionalidad esta podrá ser instalada con pip indicando la opción --upgrade.

$ pip install neto --upgrade
 

Próximamente tendremos más formas de distribuirlo y mucha más información.

Innovación y laboratorio

No hay comentarios:

Publicar un comentario