Elasticsearch と Kibana を使用して、電子メール MBOX ファイルやその他の CSV データ (テキスト メッセージなど) から通信コンテンツをインポートおよび分析するための、簡素化された OSINT ツールセットを提供する Docker イメージ。これにより、完全な OSINT 分析ソフトウェア スタックを起動する単一のコマンドが提供され、すべての通信がそこにインポートされ、Kibana と ElasticSearch を使用した分析の準備が整います。
このプロジェクトは、Dockerfile を管理してイメージを生成します。このイメージは、実行時に ElasticSearch と Kibana の両方を開始し、オプションでコンテナー内にバンドルされている次のツールを使用して通信データをインポートします。
重要:以下のリンクは、このプロジェクトの開発時に修正されていない元のプロジェクトに関する未解決の問題のため、元のプロジェクトのフォークです。
そこから...そうですね、コミュニケーションに関する実質的にあらゆるものを分析し、視覚化することができます。楽しむ。
以下の例を実行する前に、Docker をインストールする必要があります。
Windows 注: ビルドする前に Windows でこのプロジェクトをgit clone
場合は、必ず 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 .
Windows 用 Docker ツールボックスのメモ
作成されたdefault
Docker マシン VM は、これをそのまま実行するには能力が不足している可能性があります。ローカル仮想ボックス マシンの CPU とメモリを増やすには、次の手順を実行する必要があります。
「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 を使用している場合、このコマンドを実行するには、まずdocker ssh default
を使用して boot2docker VM にシェルを実行する必要があります。または、次の手順を実行して永続化します: docker/machine#3859
MBOX ファイル内のすべての電子メール メッセージについて、各メッセージは ElasticSearch の個別のドキュメントになり、すべての電子メール ヘッダーが個別のフィールドとしてインデックス付けされ、すべての本文コンテンツがインデックス付けされて html/css/js が削除されます。
たとえば、インデックスにインポートされた各電子メールには、Kibana での検索と分析に使用できる次のフィールドがあります (さらに多くのフィールド)
システムで Docker が利用可能になったら、 comms-analyzer-toolbox
実行する前に、MBOX 形式で分析する電子メールを用意する必要があります。例として、Gmail からメールをエクスポートする方法を以下に示します。
コンピューターの Web ブラウザーを使用して Gmail アカウントにログインします
https://takeout.google.com/settings/takeout に移動します。
「データをダウンロード」という画面で、 「含めるデータを選択」セクションの下にある「選択なし」ボタンをクリックします。これにより、その下にリストされているすべての「製品」がグレー表示されます。
次に、下にスクロールして「メール」というグレー表示のセクションを見つけ、右側にあるXチェックボックスをクリックします。緑色に変わり、このデータをダウンロードする準備ができたことを示します。
下にスクロールして青い「次へ」ボタンをクリックします
「アーカイブ形式のカスタマイズ」設定をそのままにして、 「アーカイブの作成」ボタンを押します。
これにより、 「アーカイブを準備しています」という画面が表示されます。画面。すべての電子メールのサイズによっては、これには数時間かかる場合があります。
アーカイブをダウンロードする準備ができると、Google からメールが届きます。入手したら、zip ファイルをローカル コンピュータのハード ドライブにダウンロードします。ファイル名はtakeout-[YYYMMMDDD..].zip
のようなものになります。
ハード ドライブに保存したら、ファイルを解凍します。解凍すると、Gmail からエクスポートされたすべてのメールがTakeout/Mail/
フォルダー内のmboxエクスポート ファイルに保存され、すべてのメールが含まれるファイル名はAll mail Including Spam and Trash.mbox
のとおりです。 All mail Including Spam and Trash.mbox
このファイルの名前をmy-email.mbox
のような簡単な名前に変更する必要があります。
ツールボックスを実行するときに以下で使用するため、 .mboxファイルの場所をメモしておいてください。
以下の例を実行する前に、Docker をインストールする必要があります。
コンピューター上でターミナルまたはコマンド プロンプトを起動し、次のコマンドを実行します。その前に、以下のPATH/TO/YOUR/email.mbox
およびPATH/TO/ELASTICSEARCH_DATA_DIR
を、必要に応じてローカル システム上の適切なパスに置き換える必要があります。
注: Docker Toolbox for 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
設定すると、既存のデータはすべて保持されます。
コンソールには何が起こっているかの出力が記録されます。システムが起動したら、デスクトップで Web ブラウザを起動し、 http://localhost:5601にアクセスして、Kibana を使用してデータの分析を開始できます。注: docker ツールボックスを実行している場合。 「localhost」は機能しない可能性があります。docker docker-machine env default
実行して docker ホストの IP アドレスを確認し、http://[machine-ip]:5601 にアクセスしてください。
Configure an index pattern
という最初の画面で、 Index name or pattern
というラベルの付いたフィールドにcomm_data
と入力すると、 date_ts
フィールドが自動選択されているのが表示され、 Create
ボタンを押します。そこから Kibana を使用する準備が整います。
起動すると、次の順序でいくつかの処理が行われます。
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
イメージを実行するとき、引数の 1 つは次の引数を取る 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 ファイルにエクスポートする方法を以下に示します。
Mac または Windows 用 iExplorer を使用して iPhone メッセージをエクスポートする
生成された CSV ファイルを編集し、最初の行のヘッダー値"Time"
を"date_ts"
に変更し、保存して終了します。
ツールボックスを実行するときに以下で使用するため、 .csvファイルの場所をメモしておいてください。
以下の例を実行する前に、Docker をインストールする必要があります。
以下の例は、IExplorer を使用してエクスポートされたテキスト メッセージ データを含む CSV データ ファイルに特化しています。
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 for 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
フラグのみを含めます。
コンソールには何が起こっているかの出力が記録されます。システムが起動したら、デスクトップで Web ブラウザを起動し、 http://localhost:5601にアクセスして、Kibana を使用してデータの分析を開始できます。注: docker ツールボックスを実行している場合。 「localhost」は機能しない可能性があります。docker docker-machine env default
実行して docker ホストの IP アドレスを確認し、http://[machine-ip]:5601 にアクセスしてください。
Configure an index pattern
という最初の画面で、 Index name or pattern
というラベルの付いたフィールドにcomm_data
と入力すると、 date_ts
フィールドが自動選択されているのが表示され、 Create
ボタンを押します。そこから Kibana を使用する準備が整います。
起動すると、次の順序でいくつかの処理が行われます。
mbox インポーターが実行されている場合、システムが mbox ファイルからメールをインポートする作業を実行すると、ログに次のエントリが表示されます。
comms-analyzer-toolbox
イメージを実行するとき、引数の 1 つは、次の引数を取る 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 for 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
デフォルトの ElasticSearch JVM メモリ ヒープ オプションを制御したい場合は、Docker 環境変数、つまり-e ES_JAVA_OPTS="-Xmx1g -Xms1g"
などを使用して制御できます。
Hotmail/Outlook の場合は、PST にエクスポートしてから、2 番目のステップとして MBOX に変換する必要があります。
このツールの使用は、このツールを実行しているマシン (つまり、Docker ホスト) に対して完全にローカルです。ラップトップまたはデスクトップコンピュータで実行する場合は、100% ローカルです。
データはどこにもアップロードまたは転送されません。
データは、これが実行されている Docker ホストのローカルのディスク上以外には送信されません。
分析されたデータを完全に削除するには、マシン上で実行されているcomms-analyzer-toolbox
コンテナーのdocker rm -f [container-id]
実行します。
ホスト上のボリュームを介して elasticsearch データ ディレクトリをマウントした場合 (つまり、 -v PATH/TO/ELASTICSEARCH_DATA_DIR:/toolbox/elasticsearch/data
)、そのローカル ディレクトリは、すべてのインデックス付きデータがディスク上でローカルに存在する場所になります。