Imagen de Docker que proporciona un conjunto de herramientas OSINT simplificado para la importación y análisis de contenido de comunicaciones desde archivos MBOX de correo electrónico y otros datos CSV (como mensajes de texto) mediante Elasticsearch y Kibana. Esto proporciona un comando único que inicia una pila completa de software analítico OSINT e importa todas sus comunicaciones, listas para el análisis con Kibana y ElasticSearch.
Este proyecto administra un Dockerfile para producir una imagen que, cuando se ejecuta, inicia ElasticSearch y Kibana y luego, opcionalmente, importa datos de comunicaciones utilizando las siguientes herramientas incluidas en el contenedor:
IMPORTANTE, los enlaces a continuación son FORKS de los proyectos originales debido a problemas pendientes con los proyectos originales que no se solucionaron en el momento del desarrollo de este proyecto.
A partir de ahí… bueno, podrás analizar y visualizar prácticamente cualquier cosa sobre tus comunicaciones. Disfrutar.
Antes de ejecutar el siguiente ejemplo, necesita tener instalado Docker.
Nota de Windows : Cuando realices git clone
este proyecto en Windows antes de compilarlo, asegúrate de agregar el indicador git clone --config core.autocrlf=input
. Ejemplo git clone https://github.com/bitsofinfo/comms-analyzer-toolbox.git --config core.autocrlf=input
. leer más aquí
Una vez que Docker esté instalado, abra un shell de línea de comando y escriba lo siguiente para crear la imagen de Docker para la caja de herramientas:
docker build -t comms-analyzer-toolbox .
Caja de herramientas Docker para notas de Windows
Es probable que la máquina virtual acoplable default
creada no tenga suficiente potencia para ejecutar esto de forma inmediata. Deberá hacer lo siguiente para aumentar la CPU y la memoria de la máquina virtual local
Abra una "Terminal de inicio rápido de Docker"
Eliminar la máquina predeterminada: docker-machine rm default
Vuelva a crearlo: docker-machine create -d virtualbox --virtualbox-cpu-count=[N cpus] --virtualbox-memory=[XXXX megabytes] --virtualbox-disk-size=[XXXXXX] default
Error de solución de problemas: "las áreas máximas de memoria virtual vm.max_map_count [65530] son demasiado bajas; aumente al menos a [262144]"
Si ve este error al iniciar la caja de herramientas (el error lo informa Elasticsearch), deberá hacer lo siguiente en el host de la ventana acoplable en el que se está iniciando el contenedor.
sysctl -w vm.max_map_count=262144
Si está utilizando Docker Toolbox, primero debe iniciar sesión en la máquina virtual boot2docker con docker ssh default
para ejecutar este comando. O haga lo siguiente para hacerlo permanente: docker/machine#3859
Para cada mensaje de correo electrónico en su archivo MBOX, cada mensaje se convierte en un documento separado en ElasticSearch donde todos los encabezados de correo electrónico se indexan como campos individuales y todo el contenido del cuerpo se indexa y se elimina de html/css/js.
Por ejemplo, cada correo electrónico importado al índice tiene los siguientes campos disponibles para búsqueda y análisis en Kibana (y muchos, muchos más)
Una vez que Docker esté disponible en su sistema, antes de ejecutar comms-analyzer-toolbox
deberá tener algún correo electrónico para analizar en formato MBOX. Como ejemplo, a continuación se muestra cómo exportar correo electrónico desde Gmail.
Inicie sesión en su cuenta de Gmail con un navegador web en una computadora
Vaya a: https://takeout.google.com/settings/takeout
En la pantalla que dice "Descarga tus datos" , bajo la sección "Seleccionar datos para incluir", haz clic en el botón "No seleccionar ninguno" . Esto desactivará todos los "Productos" enumerados debajo.
Ahora desplácese hacia abajo y busque la sección atenuada denominada "Correo" y haga clic en la casilla de verificación X en el lado derecho. Ahora se volverá verde, lo que indica que estos datos estarán preparados para que los descargue.
Desplácese hacia abajo y haga clic en el botón azul "Siguiente".
Deje la configuración "Personalizar formato de archivo" como está y presione el botón "Crear archivo"
Esto ahora lo llevará a "Estamos preparando su archivo". pantalla. Esto puede tardar algunas horas dependiendo del tamaño de todos los correos electrónicos que tenga.
Recibirá un correo electrónico de Google cuando el archivo esté listo para descargar. Cuando lo obtenga, descargue el archivo zip en el disco duro de su computadora local, se llamará algo así como takeout-[YYYMMMDDD..].zip
Una vez que lo guarde en su disco duro, querrá descomprimir el archivo; una vez descomprimido, todo su correo exportado desde Gmail vivirá en un archivo de exportación de mbox en la carpeta Takeout/Mail/
y el nombre del archivo con todo su correo estará en: All mail Including Spam and Trash.mbox
Deberías cambiar el nombre de este archivo a algo más simple como my-email.mbox
Tome nota de la ubicación de su archivo .mbox , ya que lo usará a continuación cuando ejecute la caja de herramientas.
Antes de ejecutar el siguiente ejemplo, necesita tener instalado Docker.
Abra una terminal o símbolo del sistema en su computadora y ejecute lo siguiente; antes de hacerlo, debe reemplazar PATH/TO/YOUR/email.mbox
y PATH/TO/ELASTICSEARCH_DATA_DIR
a continuación con las rutas adecuadas en su sistema local, según corresponda.
Nota: si usa Docker Toolbox para Windows : todos los volúmenes montados a continuación deben estar en algún lugar de su directorio de inicio en c:Users[your username]...
debido a problemas de permisos.
docker run --rm -ti
--ulimit nofile=65536:65536
-v PATH/TO/YOUR/my-email.mbox:/toolbox/email.mbox
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
python /toolbox/elasticsearch-gmail/src/index_emails.py
--infile=/toolbox/email.mbox
--init=[True | False]
--index-bodies=True
--index-bodies-ignore-content-types=application,image
--index-bodies-html-parser=html5lib
--index-name=comm_data
Configurar --init=True
eliminará y volverá a crear el índice comm_data
. La configuración --init=False
retendrá los datos que ya existen
La consola registrará el resultado de lo que está sucediendo; cuando se inicie el sistema, puede abrir un navegador web en su escritorio e ir a http://localhost:5601 para comenzar a usar Kibana para analizar sus datos. Nota: si ejecuta Docker Toolbox; Es posible que 'localhost' no funcione, ejecute un docker-machine env default
para determinar la dirección IP de su host de Docker y luego vaya a http://[machine-ip]:5601"
En la primera pantalla que dice Configure an index pattern
, en el campo etiquetado Index name or pattern
escribe comm_data
, luego verás el campo date_ts
seleccionado automáticamente y luego presionas el botón Create
. ¡A partir de ahí, Kibana está listo para usar!
El lanzamiento hace varias cosas en el siguiente orden.
Cuando se esté ejecutando el importador de mbox, verá las siguientes entradas en los registros mientras el sistema realiza su trabajo importando su correo desde los archivos de mbox.
...
[I 170825 18:46:53 index_emails:96] Upload: OK - upload took: 467ms, total messages uploaded: 1000
[I 170825 18:48:23 index_emails:96] Upload: OK - upload took: 287ms, total messages uploaded: 2000
...
Al ejecutar la imagen comms-analyzer-toolbox
, uno de los argumentos es invocar el script elasticsearch-gmail que toma los siguientes argumentos. Puede ajustar el comando docker run
anterior para pasar las siguientes banderas como desee:
Usage: /toolbox/elasticsearch-gmail/src/index_emails.py [OPTIONS]
Options:
--help show this help information
/toolbox/elasticsearch-gmail/src/index_emails.py options:
--batch-size Elasticsearch bulk index batch size (default
500)
--es-url URL of your Elasticsearch node (default
http://localhost:9200)
--index-bodies Will index all body content, stripped of
HTML/CSS/JS etc. Adds fields: 'body',
'body_size' and 'body_filenames' for any
multi-part attachments (default False)
--index-bodies-html-parser The BeautifulSoup parser to use for
HTML/CSS/JS stripping. Valid values
'html.parser', 'lxml', 'html5lib' (default
html.parser)
--index-bodies-ignore-content-types
If --index-bodies enabled, optional list of
body 'Content-Type' header keywords to match
to ignore and skip decoding/indexing. For
all ignored parts, the content type will be
added to the indexed field
'body_ignored_content_types' (default
application,image)
--index-name Name of the index to store your messages
(default gmail)
--infile The mbox input file
--init Force deleting and re-initializing the
Elasticsearch index (default False)
--num-of-shards Number of shards for ES index (default 2)
--skip Number of messages to skip from the mbox
file (default 0)
Al importar datos de correo electrónico MBOX, en la salida del registro es posible que vea advertencias/errores como los siguientes.
Son esperados y están bien, son simplemente advertencias sobre algunos caracteres especiales que no se pueden decodificar, etc.
...
/usr/lib/python2.7/site-packages/bs4/__init__.py:282: UserWarning: "https://someurl.com/whatever" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client like requests to get the document behind the URL, and feed that document to Beautiful Soup.
' that document to Beautiful Soup.' % decoded_markup
[W 170825 18:41:56 dammit:381] Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
[W 170825 18:41:56 dammit:381] Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
...
La herramienta de importación CSV csv2es
integrada en la caja de herramientas puede importar CUALQUIER archivo CSV, no solo este formato de ejemplo a continuación.
Para cada fila de datos en un archivo CSV, cada fila se convierte en un documento separado en ElasticSearch donde todas las columnas CSV se indexan como campos individuales.
Por ejemplo, cada línea del archivo de datos CSV siguiente (mensajes de texto de un iPhone) importada al índice tiene los siguientes campos disponibles para búsqueda y análisis en Kibana.
"Name","Address","date_ts","Message","Attachment","iMessage"
"Me","+1 555-555-5555","7/17/2016 9:21:39 AM","How are you doing?","","True"
"Joe Smith","+1 555-444-4444","7/17/2016 9:38:56 AM","Pretty good you?","","True"
"Me","+1 555-555-5555","7/17/2016 9:39:02 AM","Great!","","True"
....
La exportación de mensajes de texto CSV anterior es solo un ejemplo. La herramienta csv2es
que viene incluida con la caja de herramientas puede importar CUALQUIER conjunto de datos que desee, no solo el formato de ejemplo anterior.
Una vez que Docker esté disponible en su sistema, antes de ejecutar comms-analyzer-toolbox
necesita tener algunos datos para analizar en formato CSV. Como ejemplo, a continuación se muestra cómo exportar mensajes de texto desde un iPhone a un archivo CSV.
Exporte mensajes de iPhone usando iExplorer para Mac o Windows
Edite el archivo CSV generado y cambie el valor del encabezado de la primera fila de "Time"
a "date_ts"
, guarde y salga.
Tome nota de la ubicación de su archivo .csv , ya que lo usará a continuación cuando ejecute la caja de herramientas.
Antes de ejecutar el siguiente ejemplo, necesita tener instalado Docker.
El siguiente ejemplo es específicamente para un archivo de datos CSV que contiene datos de mensajes de texto exportados usando IExplorer.
Contenido de datos.csv
"Name","Address","date_ts","Message","Attachment","iMessage"
"Me","+1 555-555-5555","7/17/2016 9:21:39 AM","How are you doing?","","True"
"Joe Smith","+1 555-444-4444","7/17/2016 9:38:56 AM","Pretty good you?","","True"
"Me","+1 555-555-5555","7/17/2016 9:39:02 AM","Great!","","True"
....
Contenido de csvdata.mapping.json
{
"dynamic": "true",
"properties": {
"date_ts": {"type": "date" },
"name": {"type": "string", "index" : "not_analyzed"},
"address": {"type": "string", "index" : "not_analyzed"},
"imessage": {"type": "string", "index" : "not_analyzed"}
}
}
Abra una terminal o símbolo del sistema en su computadora y ejecute lo siguiente; antes de hacerlo, debe reemplazar PATH/TO/YOUR/data.csv
, PATH/TO/YOUR/csvdata.mapping.json
y PATH/TO/ELASTICSEARCH_DATA_DIR
a continuación con las rutas adecuadas en su sistema local según corresponda.
Nota: si usa Docker Toolbox para Windows : todos los volúmenes montados a continuación deben estar en algún lugar de su directorio de inicio en c:Users[your username]...
debido a problemas de permisos.
docker run --rm -ti -p 5601:5601
-v PATH/TO/YOUR/data.csv:/toolbox/data.csv
-v PATH/TO/YOUR/csvdata.mapping.json:/toolbox/csvdata.mapping.json
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
python /toolbox/csv2es/csv2es.py
[--existing-index ]
[--delete-index ]
--index-name comm_data
--doc-type txtmsg
--mapping-file /toolbox/csvdata.mapping.json
--import-file /toolbox/data.csv
--delimiter ','
--csv-clean-fieldnames
--csv-date-field date_ts
--csv-date-field-gmt-offset -1
Si se ejecuta contra un índice comm_data
preexistente, asegúrese de incluir solo el indicador --existing-index
. Si desea volver a crear el índice comm_data
antes de importarlo, incluya únicamente el indicador --delete-index
.
La consola registrará el resultado de lo que está sucediendo; cuando se inicie el sistema, puede abrir un navegador web en su escritorio e ir a http://localhost:5601 para comenzar a usar Kibana para analizar sus datos. Nota: si ejecuta Docker Toolbox; Es posible que 'localhost' no funcione, ejecute un docker-machine env default
para determinar la dirección IP de su host de Docker y luego vaya a http://[machine-ip]:5601"
En la primera pantalla que dice Configure an index pattern
, en el campo etiquetado Index name or pattern
escribe comm_data
, luego verás el campo date_ts
seleccionado automáticamente y luego presionas el botón Create
. ¡A partir de ahí, Kibana está listo para usar!
El lanzamiento hace varias cosas en el siguiente orden.
Cuando se esté ejecutando el importador de mbox, verá las siguientes entradas en los registros mientras el sistema realiza su trabajo importando su correo desde los archivos de mbox.
Al ejecutar la imagen comms-analyzer-toolbox
, uno de los argumentos es invocar el script csv2es que toma los siguientes argumentos. Puede ajustar el comando docker run
anterior para pasar las siguientes banderas como desee:
Usage: /toolbox/csv2es/csv2es.py [OPTIONS]
Bulk import a delimited file into a target Elasticsearch instance. Common
delimited files include things like CSV and TSV.
Load a CSV file:
csv2es --index-name potatoes --doc-type potato --import-file potatoes.csv
For a TSV file, note the tab delimiter option
csv2es --index-name tomatoes --doc-type tomato --import-file tomatoes.tsv --tab
For a nifty pipe-delimited file (delimiters must be one character):
csv2es --index-name pipes --doc-type pipe --import-file pipes.psv --delimiter '|'
Options:
--index-name TEXT Index name to load data into
[required]
--doc-type TEXT The document type (like user_records)
[required]
--import-file TEXT File to import (or '-' for stdin)
[required]
--mapping-file TEXT JSON mapping file for index
--delimiter TEXT The field delimiter to use, defaults to CSV
--tab Assume tab-separated, overrides delimiter
--host TEXT The Elasticsearch host
(http://127.0.0.1:9200/)
--docs-per-chunk INTEGER The documents per chunk to upload (5000)
--bytes-per-chunk INTEGER The bytes per chunk to upload (100000)
--parallel INTEGER Parallel uploads to send at once, defaults
to 1
--delete-index Delete existing index if it exists
--existing-index Don't create index.
--quiet Minimize console output
--csv-clean-fieldnames Strips double quotes and lower-cases all CSV
header names for proper ElasticSearch
fieldnames
--csv-date-field TEXT The CSV header name that represents a date
string to parsed (via python-dateutil) into
an ElasticSearch epoch_millis
--csv-date-field-gmt-offset INTEGER
The GMT offset for the csv-date-field (i.e.
+/- N hours)
--tags TEXT Custom static key1=val1,key2=val2 pairs to
tag all entries with
--version Show the version and exit.
--help Show this message and exit.
Al ejecutarlo en este modo, simplemente se iniciará elasticsearch y kibana y no se importará nada. Simplemente abre la caja de herramientas para que pueda analizar datos previamente importados que residen en elasticsearch.
Nota: si usa Docker Toolbox para Windows : todos los volúmenes montados a continuación deben estar en algún lugar de su directorio de inicio en c:Users[your username]...
debido a problemas de permisos.
docker run --rm -ti -p 5601:5601
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
analyze-only
Si desea controlar las opciones predeterminadas del montón de memoria de ElasticSearch JVM, puede hacerlo a través de una variable de entorno de la ventana acoplable, es decir, -e ES_JAVA_OPTS="-Xmx1g -Xms1g"
etc.
Para Hotmail/Outlook, necesita exportar a PST y luego, como segundo paso, convertir a MBOX.
El uso de esta herramienta es completamente local para cualquier máquina en la que esté ejecutando esta herramienta (es decir, su host Docker). En el caso de ejecutarlo en tu computadora portátil o de escritorio es 100% local.
Los datos no se cargan ni transfieren a ningún lado.
Los datos no van a ningún otro lugar que no sea el disco localmente al host Docker en el que se está ejecutando.
Para eliminar completamente los datos analizados, puede docker rm -f [container-id]
del contenedor comms-analyzer-toolbox
que se ejecuta en su máquina.
Si montó el directorio de datos de elasticsearch a través de un volumen en el host (es decir, -v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
), ese directorio local es donde todos los datos indexados residen localmente en el disco.