صورة 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 build -t comms-analyzer-toolbox .
صندوق أدوات Docker لملاحظات Windows
من المحتمل أن يكون جهاز الإرساء default
الذي تم إنشاؤه VM غير قادر على تشغيل هذا خارج الصندوق. ستحتاج إلى القيام بما يلي لزيادة وحدة المعالجة المركزية (CPU) والذاكرة الخاصة بجهاز الصندوق الظاهري المحلي
إظهار "محطة Docker Quickstart"
قم بإزالة الجهاز الافتراضي: 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)، فستحتاج إلى القيام بما يلي على مضيف عامل الإرساء الذي يتم تشغيل الحاوية عليه.
sysctl -w vm.max_map_count=262144
إذا كنت تستخدم Docker Toolbox، فيجب عليك أولاً الدخول إلى boot2docker VM أولاً باستخدام 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 الموجود على الجانب الأيمن. سيتحول الآن إلى اللون الأخضر للإشارة إلى أنه سيتم إعداد هذه البيانات لتنزيلها.
قم بالتمرير لأسفل وانقر على زر "التالي" الأزرق
اترك إعدادات "تخصيص تنسيق الأرشيف" كما هي واضغط على الزر "إنشاء أرشيف".
سينقلك هذا الآن إلى "نحن نجهز أرشيفك". شاشة. قد يستغرق هذا بضع ساعات اعتمادًا على حجم كل رسائل البريد الإلكتروني لديك.
ستتلقى بريدًا إلكترونيًا من جوجل عندما يكون الأرشيف جاهزًا للتنزيل. عندما تحصل عليه، قم بتنزيل الملف المضغوط على القرص الصلب بجهاز الكمبيوتر المحلي الخاص بك، وسيتم تسميته بشيء مثل 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-machine env default
لتحديد عنوان 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
، تتمثل إحدى الوسائط في استدعاء البرنامج النصي 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-machine env default
لتحديد عنوان IP الخاص بمضيفي عامل الإرساء، ثم انتقل إلى http://[machine-ip]:5601"
في الشاشة الأولى التي تقول Configure an index pattern
، في الحقل المسمى Index name or pattern
، اكتب comm_data
، وسترى بعد ذلك حقل date_ts
محددًا تلقائيًا، ثم اضغط على الزر Create
. ومن هناك يصبح Kibana جاهزًا للاستخدام!
يؤدي الإطلاق إلى القيام بعدة أشياء بالترتيب التالي
عند تشغيل برنامج استيراد 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
إذا كنت ترغب في التحكم في خيارات كومة ذاكرة ElasticSearch JVM الافتراضية، فيمكنك القيام بذلك عبر متغير بيئة عامل الإرساء، مثل -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
) فإن الدليل المحلي هو المكان الذي توجد فيه جميع البيانات المفهرسة محليًا على القرص.