Образ Docker, который предоставляет упрощенный набор инструментов OSINT для импорта и анализа содержимого сообщений из файлов электронной почты MBOX и других данных CSV (например, текстовых сообщений) с использованием Elasticsearch и Kibana. Это обеспечивает единую команду, которая запускает полный стек аналитического программного обеспечения OSINT, а также импортирует в него все ваши сообщения, готовые для анализа с помощью Kibana и ElasticSearch.
Этот проект управляет файлом Dockerfile для создания образа, который при запуске запускает как ElasticSearch, так и Kibana, а затем при необходимости импортирует данные связи, используя следующие инструменты, включенные в контейнер:
ВАЖНО: ссылки ниже являются ВИЛОЧКАМИ исходных проектов из-за нерешенных проблем с исходными проектами, которые не были исправлены на момент разработки этих проектов.
Отсюда... ну, вы можете анализировать и визуализировать практически все, что связано с вашими сообщениями. Наслаждаться.
Прежде чем запускать приведенный ниже пример, вам необходимо установить Docker.
Примечание для Windows . Когда вы git clone
этот проект в Windows перед сборкой, обязательно добавьте флаг git clone --config core.autocrlf=input
. Пример git clone https://github.com/bitsofinfo/comms-analyzer-toolbox.git --config core.autocrlf=input
. читайте больше здесь
После установки Docker откройте оболочку командной строки и введите следующую команду, чтобы создать образ Docker для набора инструментов:
docker build -t comms-analyzer-toolbox .
Набор инструментов Docker для заметок Windows
Созданная default
виртуальная машина докера, скорее всего, будет недостаточно мощной для запуска этого из коробки. Вам нужно будет сделать следующее, чтобы увеличить ЦП и память локальной машины виртуального ящика.
Откройте «Терминал быстрого запуска Docker».
Удалите машину по умолчанию: docker-machine rm default
Воссоздайте его: docker-machine create -d virtualbox --virtualbox-cpu-count=[N cpus] --virtualbox-memory=[XXXX megabytes] --virtualbox-disk-size=[XXXXXX] default
Ошибка устранения неполадок: «Максимальное количество областей виртуальной памяти vm.max_map_count [65530] слишком мало, увеличьте как минимум до [262144]»
Если вы видите эту ошибку при запуске панели инструментов (об ошибке сообщает Elasticsearch), вам нужно будет выполнить следующие действия на хосте Docker, на котором запускается контейнер.
sysctl -w vm.max_map_count=262144
Если вы используете Docker Toolbox, вам необходимо сначала войти в виртуальную машину boot2docker с помощью docker ssh default
чтобы запустить эту команду. Или сделайте следующее, чтобы сделать его постоянным: docker/machine#3859.
Для каждого сообщения электронной почты в вашем файле MBOX каждое сообщение становится отдельным документом в ElasticSearch, где все заголовки электронных писем индексируются как отдельные поля, а все содержимое тела индексируется и удаляется из html/css/js.
Например, каждое электронное письмо, импортированное в индекс, имеет следующие поля, доступные для поиска и анализа в Kibana (плюс многие, многие другие):
Как только Docker станет доступен в вашей системе, перед запуском comms-analyzer-toolbox
вам потребуется электронная почта для анализа в формате MBOX. В качестве примера ниже показано, как экспортировать электронную почту из Gmail.
Войдите в свою учетную запись Gmail с помощью веб-браузера на компьютере.
Перейдите по адресу: https://takeout.google.com/settings/takeout.
На экране с надписью «Загрузить данные» в разделе «Выберите данные для включения» нажмите кнопку «Выбрать нет» . Все «Продукты», перечисленные под ним, станут серыми.
Теперь прокрутите вниз и найдите серый раздел с надписью «Почта» и установите флажок X справа. Теперь он станет зеленым, указывая, что эти данные готовы для загрузки.
Прокрутите вниз и нажмите синюю кнопку «Далее».
Оставьте настройки «Настроить формат архива» как есть и нажмите кнопку «Создать архив».
Теперь вы перейдете к «Мы готовим ваш архив». экран. Это может занять несколько часов в зависимости от размера всех имеющихся у вас писем.
Вы получите электронное письмо от Google, когда архив будет готов к загрузке. Когда вы его получите, загрузите zip-файл на жесткий диск вашего локального компьютера. Он будет называться примерно так: takeout-[YYYMMMDDD..].zip
После сохранения на жесткий диск вам нужно будет разархивировать файл. После разархивирования вся ваша экспортированная почта из Gmail будет храниться в файле экспорта mbox в папке Takeout/Mail/
, а имя файла со всей вашей почтой находится в папке: All mail Including Spam and Trash.mbox
Вам следует переименовать этот файл во что-нибудь более простое, например my-email.mbox
Запишите расположение вашего файла .mbox , поскольку вы будете использовать его ниже при запуске набора инструментов.
Прежде чем запускать приведенный ниже пример, вам необходимо установить Docker.
Откройте терминал или командную строку на своем компьютере и выполните следующие действия. Прежде чем сделать это, вам необходимо заменить PATH/TO/YOUR/email.mbox
и PATH/TO/ELASTICSEARCH_DATA_DIR
ниже на соответствующие пути в вашей локальной системе.
Примечание. При использовании Docker Toolbox для Windows : все смонтированные ниже тома должны находиться где-то в вашем домашнем каталоге c:Users[your username]...
из-за проблем с разрешениями.
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
Установка --init=True
удалит и заново создаст индекс comm_data
. Установка --init=False
сохранит все уже существующие данные.
Консоль будет регистрировать вывод о том, что происходит. Когда система загрузится, вы можете открыть веб-браузер на рабочем столе и перейти по адресу http://localhost:5601, чтобы начать использовать Kibana для анализа ваших данных. Примечание. Если вы используете панель инструментов Docker; «localhost» может не работать, выполните docker-machine env default
, чтобы определить IP-адрес вашего хоста докера, затем перейдите по адресу http://[machine-ip]:5601»
На первом экране с надписью Configure an index pattern
» в поле « Index name or pattern
вы вводите comm_data
, затем увидите автоматически выбранное поле date_ts
, а затем нажмите кнопку Create
. После этого Кибана готова к использованию!
Запуск выполняет несколько действий в следующем порядке
Когда импортер mbox будет запущен, вы увидите следующие записи в журналах, пока система выполняет свою работу по импорту вашей почты из файлов 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
...
При запуске образа comms-analyzer-toolbox
одним из аргументов является вызов сценария elasticsearch-gmail, который принимает следующие аргументы. Вы можете настроить приведенную выше команду docker run
, чтобы она передавала следующие флаги по вашему усмотрению:
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)
При импорте данных электронной почты MBOX в выводе журнала вы можете увидеть предупреждения/ошибки, подобные следующим.
Они ожидаемы и ок, это просто предупреждения о некоторых специальных символах, которые невозможно декодировать и т. д.
...
/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.
...
Инструмент импорта CSV csv2es
, встроенный в набор инструментов, может импортировать ЛЮБОЙ файл CSV, а не только этот пример формата ниже.
Для каждой строки данных в файле CSV каждая строка становится отдельным документом в ElasticSearch, где все столбцы CSV индексируются как отдельные поля.
Например, каждая строка в файле данных CSV ниже (текстовые сообщения с iPhone), импортированная в индекс, имеет следующие поля, доступные для поиска и анализа в 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"
....
Приведенный выше экспорт текстовых сообщений в формате CSV является лишь примером. Инструмент csv2es
, входящий в состав набора инструментов, может импортировать ЛЮБОЙ набор данных, который вам нужен, а не только формат примера, приведенный выше.
Как только Docker станет доступен в вашей системе, перед запуском comms-analyzer-toolbox
вам необходимо иметь некоторые данные для анализа в формате CSV. В качестве примера ниже показано, как экспортировать текстовые сообщения с iPhone в файл CSV.
Экспортируйте сообщения iPhone с помощью iExplorer для Mac или Windows
Отредактируйте сгенерированный файл CSV и измените значение заголовка первой строки "Time"
на "date_ts"
, сохраните и выйдите.
Запишите местоположение вашего файла .csv , поскольку вы будете использовать его ниже при запуске панели инструментов.
Прежде чем запускать приведенный ниже пример, вам необходимо установить Docker.
Этот пример ниже предназначен специально для файла данных CSV, содержащего данные текстового сообщения, экспортированные с помощью IExplorer.
Содержимое 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"
....
Содержимое 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"}
}
}
Откройте терминал или командную строку на своем компьютере и выполните следующие действия. Прежде чем сделать это, вам необходимо заменить PATH/TO/YOUR/data.csv
, PATH/TO/YOUR/csvdata.mapping.json
и PATH/TO/ELASTICSEARCH_DATA_DIR
ниже с соответствующими путями в вашей локальной системе.
Примечание. При использовании Docker Toolbox для Windows : все смонтированные ниже тома должны находиться где-то в вашем домашнем каталоге c:Users[your username]...
из-за проблем с разрешениями.
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
При работе с уже существующим индексом comm_data
обязательно включите только флаг --existing-index
. Если вы хотите заново создать индекс comm_data
перед импортом, включите только флаг --delete-index
.
Консоль будет регистрировать вывод о том, что происходит. Когда система загрузится, вы можете открыть веб-браузер на рабочем столе и перейти по адресу http://localhost:5601, чтобы начать использовать Kibana для анализа ваших данных. Примечание. Если вы используете панель инструментов Docker; «localhost» может не работать, выполните docker-machine env default
, чтобы определить IP-адрес вашего хоста докера, затем перейдите по адресу http://[machine-ip]:5601»
На первом экране с надписью Configure an index pattern
» в поле « Index name or pattern
вы вводите comm_data
, затем увидите автоматически выбранное поле date_ts
, а затем нажмите кнопку Create
. После этого Кибана готова к использованию!
Запуск выполняет несколько действий в следующем порядке
Когда запустится импортер mbox, вы увидите следующие записи в журналах, пока система выполняет свою работу по импорту вашей почты из файлов mbox.
При запуске образа comms-analyzer-toolbox
одним из аргументов является вызов сценария csv2es, который принимает следующие аргументы. Вы можете настроить приведенную выше команду docker run
, чтобы она передавала следующие флаги по вашему усмотрению:
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.
Работа в этом режиме просто запустит elasticsearch и kibana и ничего не импортирует. Он просто открывает панель инструментов, чтобы вы могли проанализировать ранее импортированные данные, находящиеся в elasticsearch.
Примечание. При использовании Docker Toolbox для Windows : все смонтированные ниже тома должны находиться где-то в вашем домашнем каталоге c:Users[your username]...
из-за проблем с разрешениями.
docker run --rm -ti -p 5601:5601
-v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
comms-analyzer-toolbox:latest
analyze-only
Если вы хотите управлять параметрами кучи памяти JVM ElasticSearch по умолчанию, вы можете сделать это с помощью переменной среды докера, например -e ES_JAVA_OPTS="-Xmx1g -Xms1g"
и т. д.
Для hotmail/outlook вам необходимо экспортировать в PST, а затем на втором этапе преобразовать в MBOX.
Использование этого инструмента полностью локально для любого компьютера, на котором вы запускаете этот инструмент (т. е. вашего хоста Docker). В случае запуска на вашем ноутбуке или настольном компьютере он на 100% локальный.
Данные никуда не загружаются и не передаются.
Данные не передаются никуда, кроме как на локальный диск хоста Docker, на котором он работает.
Чтобы полностью удалить проанализированные данные, вы можете docker rm -f [container-id]
контейнера comms-analyzer-toolbox
работающего на вашем компьютере.
Если вы смонтировали каталог данных elasticsearch через том на хосте (т. е. -v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
), в этом локальном каталоге все индексированные данные находятся локально на диске.