Image Docker qui fournit un ensemble d'outils OSINT simplifié pour l'importation et l'analyse du contenu des communications à partir de fichiers de courrier électronique MBOX et d'autres données CSV (telles que des messages texte) à l'aide d'Elasticsearch et Kibana. Cela fournit une commande unique qui lance une pile logicielle analytique OSINT complète et y importe toutes vos communications, prêtes à être analysées avec Kibana et ElasticSearch.
Ce projet gère un Dockerfile pour produire une image qui, une fois exécutée, démarre à la fois ElasticSearch et Kibana, puis importe éventuellement les données de communication à l'aide des outils suivants regroupés dans le conteneur :
IMPORTANT, les liens ci-dessous sont des FORKS des projets originaux en raison de problèmes en suspens avec les projets originaux qui n'ont pas été résolus au moment du développement de ce projet.
À partir de là... eh bien, vous pouvez analyser et visualiser pratiquement tout ce qui concerne vos communications. Apprécier.
Avant d'exécuter l'exemple ci-dessous, vous devez installer Docker.
Remarque Windows : lorsque vous git clone
ce projet sous Windows avant de le construire, assurez-vous d'ajouter l'indicateur git clone --config core.autocrlf=input
. Exemple git clone https://github.com/bitsofinfo/comms-analyzer-toolbox.git --config core.autocrlf=input
. en savoir plus ici
Une fois Docker installé, affichez un shell de ligne de commande et tapez ce qui suit pour créer l'image Docker pour la boîte à outils :
docker build -t comms-analyzer-toolbox .
Boîte à outils Docker pour les notes Windows
La VM de la machine Docker default
créée est probablement sous-alimentée pour l'exécuter immédiatement. Vous devrez procéder comme suit pour augmenter le processeur et la mémoire de la machine virtuelle locale
Afficher un "Terminal de démarrage rapide Docker"
Supprimer la machine par défaut : docker-machine rm default
Recréez-le : docker-machine create -d virtualbox --virtualbox-cpu-count=[N cpus] --virtualbox-memory=[XXXX megabytes] --virtualbox-disk-size=[XXXXXX] default
Erreur de dépannage : « Le nombre maximal de zones de mémoire virtuelle vm.max_map_count [65530] est trop faible, augmentez-le jusqu'à au moins [262144] »
Si vous voyez cette erreur lors du démarrage de la boîte à outils (l'erreur est signalée par Elasticsearch), vous devrez procéder comme suit sur l'hôte Docker sur lequel le conteneur est lancé.
sysctl -w vm.max_map_count=262144
Si vous utilisez Docker Toolbox, vous devez d'abord ouvrir la machine virtuelle boot2docker avec docker ssh default
pour exécuter cette commande. Ou procédez comme suit pour le rendre permanent : docker/machine#3859
Pour chaque e-mail de votre fichier MBOX, chaque message devient un document distinct dans ElasticSearch où tous les en-têtes d'e-mail sont indexés en tant que champs individuels et tout le contenu du corps est indexé et débarrassé du html/css/js.
Par exemple, chaque e-mail importé dans l'index comporte les champs suivants disponibles pour la recherche et l'analyse dans Kibana (et bien d'autres encore) :
Une fois Docker disponible sur votre système, avant d'exécuter comms-analyzer-toolbox
vous devez disposer d'e-mails à analyser au format MBOX. À titre d'exemple, vous trouverez ci-dessous comment exporter des e-mails depuis Gmail.
Connectez-vous à votre compte Gmail avec un navigateur Web sur un ordinateur
Accédez à : https://takeout.google.com/settings/takeout
Sur l'écran qui dit "Téléchargez vos données" , sous la section "Sélectionner les données à inclure", cliquez sur le bouton "Ne sélectionner aucune" . Cela grisera tous les "Produits" répertoriés en dessous
Maintenant, faites défiler vers le bas et trouvez la section grisée intitulée « Mail » et cliquez sur la case à cocher X sur le côté droit. Il deviendra maintenant vert, indiquant que ces données seront prêtes à être téléchargées.
Faites défiler vers le bas et cliquez sur le bouton bleu "Suivant"
Laissez les paramètres "Personnaliser le format d'archive" tels quels et cliquez sur le bouton "Créer une archive".
Cela vous amènera maintenant à un message « Nous préparons vos archives ». écran. Cela peut prendre quelques heures en fonction de la taille de tous les e-mails dont vous disposez.
Vous recevrez un e-mail de Google lorsque l'archive sera prête à être téléchargée. Lorsque vous l'obtenez, téléchargez le fichier zip sur le disque dur de votre ordinateur local, il s'appellera quelque chose comme takeout-[YYYMMMDDD..].zip
Une fois enregistré sur votre disque dur, vous souhaiterez décompresser le fichier. Une fois décompressé, tous vos courriers exportés depuis Gmail vivront dans un fichier d'exportation mbox dans le dossier Takeout/Mail/
et le nom de fichier contenant tous vos courriers se trouve dans : All mail Including Spam and Trash.mbox
Vous devriez renommer ce fichier en quelque chose de plus simple comme my-email.mbox
Prenez note de l'emplacement de votre fichier .mbox car vous l'utiliserez ci-dessous lors de l'exécution de la boîte à outils.
Avant d'exécuter l'exemple ci-dessous, vous devez installer Docker.
Affichez un terminal ou une invite de commande sur votre ordinateur et exécutez ce qui suit. Avant de le faire, vous devez remplacer PATH/TO/YOUR/email.mbox
et PATH/TO/ELASTICSEARCH_DATA_DIR
ci-dessous par les chemins appropriés sur votre système local, le cas échéant.
Remarque : si vous utilisez Docker Toolbox pour Windows : tous les volumes montés ci-dessous doivent se trouver quelque part dans votre répertoire personnel sous c:Users[your username]...
en raison de problèmes d'autorisations.
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
Le paramètre --init=True
supprimera et recréera l'index comm_data
. Le paramètre --init=False
conservera toutes les données déjà existantes
La console enregistrera le résultat de ce qui se passe. Lorsque le système démarre, vous pouvez ouvrir un navigateur Web sur votre bureau et accéder à http://localhost:5601 pour commencer à utiliser Kibana pour analyser vos données. Remarque : si vous exécutez la boîte à outils Docker ; 'localhost' peut ne pas fonctionner, exécutez une docker-machine env default
pour déterminer l'adresse IP de vos hôtes docker, puis accédez à http://[machine-ip]:5601"
Sur le premier écran qui dit Configure an index pattern
, dans le champ intitulé Index name or pattern
vous tapez comm_data
, vous verrez alors le champ date_ts
sélectionné automatiquement, puis appuyez sur le bouton Create
. À partir de là, Kibana est prêt à être utilisé !
Le lancement fait plusieurs choses dans l'ordre suivant
Lorsque l'importateur mbox est en cours d'exécution, vous verrez les entrées suivantes dans les journaux pendant que le système effectue son travail en important votre courrier à partir des fichiers 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
...
Lors de l'exécution de l'image comms-analyzer-toolbox
, l'un des arguments consiste à appeler le script elasticsearch-gmail qui prend les arguments suivants. Vous pouvez ajuster la commande docker run
ci-dessus pour transmettre les indicateurs suivants à votre guise :
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)
Lors de l'importation de données de courrier électronique MBOX, dans la sortie du journal, vous pouvez voir des avertissements/erreurs comme les suivants.
Ils sont attendus et ok, ce sont simplement des avertissements concernant certains caractères spéciaux qui ne peuvent pas être décodés, 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.
...
L'outil d'importation CSV csv2es
intégré à la boîte à outils peut importer N'IMPORTE QUEL fichier CSV, pas seulement cet exemple de format ci-dessous.
Pour chaque ligne de données d'un fichier CSV, chaque ligne devient un document distinct dans ElasticSearch où toutes les colonnes CSV sont indexées en tant que champs individuels.
Par exemple, chaque ligne du fichier de données CSV ci-dessous (messages texte provenant d'un iPhone) importé dans l'index comporte les champs suivants disponibles pour la recherche et l'analyse dans 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"
....
L'exportation de messages texte ci-dessus au format CSV n'est qu'un exemple. L'outil csv2es
fourni avec la boîte à outils peut importer N'IMPORTE QUEL ensemble de données de votre choix, pas seulement l'exemple de format ci-dessus.
Une fois Docker disponible sur votre système, avant d'exécuter comms-analyzer-toolbox
vous devez disposer de certaines données à analyser au format CSV. À titre d'exemple, vous trouverez ci-dessous comment exporter des messages texte d'un iPhone vers un fichier CSV.
Exporter des messages iPhone à l'aide d'iExplorer pour Mac ou Windows
Modifiez le fichier CSV généré et modifiez la valeur d'en-tête de la première ligne, "Time"
en "date_ts"
, enregistrez et quittez.
Prenez note de l'emplacement de votre fichier .csv car vous l'utiliserez ci-dessous lors de l'exécution de la boîte à outils.
Avant d'exécuter l'exemple ci-dessous, vous devez installer Docker.
Cet exemple ci-dessous concerne spécifiquement un fichier de données CSV contenant des données de message texte exportées à l'aide d'IExplorer.
Contenu de data.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"
....
Contenu 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"}
}
}
Affichez un terminal ou une invite de commande sur votre ordinateur et exécutez ce qui suit. Avant de le faire, vous devez remplacer PATH/TO/YOUR/data.csv
, PATH/TO/YOUR/csvdata.mapping.json
et PATH/TO/ELASTICSEARCH_DATA_DIR
ci-dessous avec les chemins appropriés sur votre système local, le cas échéant.
Remarque : si vous utilisez Docker Toolbox pour Windows : tous les volumes montés ci-dessous doivent se trouver quelque part dans votre répertoire personnel sous c:Users[your username]...
en raison de problèmes d'autorisations.
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 vous utilisez un index comm_data
préexistant, assurez-vous d'inclure uniquement l'indicateur --existing-index
. Si vous souhaitez recréer l'index comm_data
avant l'importation, incluez uniquement l'indicateur --delete-index
.
La console enregistrera le résultat de ce qui se passe. Lorsque le système démarre, vous pouvez ouvrir un navigateur Web sur votre bureau et accéder à http://localhost:5601 pour commencer à utiliser Kibana pour analyser vos données. Remarque : si vous exécutez la boîte à outils Docker ; 'localhost' peut ne pas fonctionner, exécutez une docker-machine env default
pour déterminer l'adresse IP de vos hôtes docker, puis accédez à http://[machine-ip]:5601"
Sur le premier écran qui dit Configure an index pattern
, dans le champ intitulé Index name or pattern
vous tapez comm_data
, vous verrez alors le champ date_ts
sélectionné automatiquement, puis appuyez sur le bouton Create
. À partir de là, Kibana est prêt à être utilisé !
Le lancement fait plusieurs choses dans l'ordre suivant
Lorsque l'importateur mbox est en cours d'exécution, vous verrez les entrées suivantes dans les journaux pendant que le système effectue son travail en important votre courrier à partir des fichiers mbox.
Lors de l'exécution de l'image comms-analyzer-toolbox
, l'un des arguments consiste à appeler le script csv2es qui prend les arguments suivants. Vous pouvez ajuster la commande docker run
ci-dessus pour transmettre les indicateurs suivants à votre guise :
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.
L'exécution dans ce mode lancera simplement elasticsearch et kibana et n'importera rien. Il affiche simplement la boîte à outils afin que vous puissiez analyser les données précédemment importées qui résident dans elasticsearch.
Remarque : si vous utilisez Docker Toolbox pour Windows : tous les volumes montés ci-dessous doivent se trouver quelque part dans votre répertoire personnel sous c:Users[your username]...
en raison de problèmes d'autorisations.
docker run --rm -ti -p 5601:5601
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
analyze-only
Vous souhaitez contrôler les options de tas de mémoire ElasticSearch JVM par défaut, vous pouvez le faire via une variable d'environnement Docker, c'est-à-dire -e ES_JAVA_OPTS="-Xmx1g -Xms1g"
etc.
Pour Hotmail/Outlook, vous devez exporter vers PST, puis dans un deuxième temps convertir en MBOX
L'utilisation de cet outil est entièrement locale sur la machine sur laquelle vous exécutez cet outil (c'est-à-dire votre hôte Docker). Dans le cas de son exécution sur votre ordinateur portable ou de bureau, il est 100 % local.
Les données ne sont téléchargées ou transférées nulle part.
Les données ne vont nulle part ailleurs que sur le disque localement vers l'hôte Docker sur lequel elles s'exécutent.
Pour supprimer complètement les données analysées, vous pouvez docker rm -f [container-id]
du conteneur comms-analyzer-toolbox
exécuté sur votre machine.
Si vous avez monté le répertoire de données elasticsearch via un volume sur l'hôte (c'est-à-dire -v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
), ce répertoire localement est l'endroit où toutes les données indexées résident localement sur le disque.