
Snoopy: إطار عمل موزع للتتبع واعتراض البيانات
| || | | || || || || | | |
| _____|| |_| || _ || _ || _ || |_| |
| |_____ | || | | || | | || |_| || |
|_____ || _ || |_| || |_| || ___||_ _|
_____| || | | || || || | | |
|_______||_| |__||_______||_______||___| |___|
V0.1
"Amy, technology isn't intrinsically good or evil. It's how it's used. Like the Death Ray."
-Professor Farnsworth
مرحبًا بك في Snoopy؛ إطار عمل تتبع وتوصيف موزع. Snoopy قيد التطوير، لذا لا تتردد في تقديم الاقتراحات و/أو التصحيحات. توضح هذه الوثيقة الاستخدام الأساسي. لفهم الخلفية أكثر قليلاً، ألق نظرة على ما يلي:
يعمل برنامج جانب العميل على ما نسميه "الطائرات". يمكن أن تكون الطائرة أي جهاز يعمل بنظام Linux وبه واجهة WiFi (مع برامج تشغيل حقن) واتصال بالإنترنت الصادر. تم اختبار Snoopy على Nokia N900 وجهاز كمبيوتر محمول يعمل بنظام BackTrack. تقوم الطائرات بالعمليتين التاليتين:
يتم تحميل طلبات الفحص المجمعة (مثل iPhone الخاص بـ Bob الذي يبحث عن BTHomeHub-4123) إلى خادم Snoopy في فترات منتظمة. جميع الأجهزة التي تتصل بنقطة الوصول المزيفة يتم توجيه اتصالها بالإنترنت عبر خادم Snoopy.
يقوم الخادم بإدخال جميع طلبات الفحص في قاعدة بيانات، ويستخدم Wigle لتحديد إحداثيات GPS، وخرائط Google لتحديد عناوين الشوارع (والصور الفوتوغرافية من Street View). هذا يعني أنه إذا كنت تبحث عن شبكة منزلك، فقد أحصل على صورة لمنزلك.
تتصل كل طائرة بالخادم عبر OpenVPN، ولها شبكة فرعية خاصة بها. يتلقى العملاء المتصلون عنوان IP من الطائرة، ويتم توجيه حركة المرور عبرها. هذا يعني أنه على الخادم يمكننا مطابقة عناوين IP الخاصة بالعملاء (وبالتالي عناوين MAC) بنشاط الإنترنت.
على الخادم، يحدث ما يلي:
يبدو مخطط الشبكة كالتالي:
Client1 Drone1 Snoopy Server
+----------+ +-----------------------+ +-----------------------+
| wlan0-|<---WiFi--->|-at0 | | eth0|<-squid-sslstrip-mitmproxy->Internet
| | | | 10.2.0.1 | | 11.22.33.44| |
| dhclient | | | | | | Traffic inspection
| | | | tap0-|<-openvpn----->|-tap0 | Social media analysis
+----------+ | | 192.168.42.2 | +--/| 192.168.42.1 |
10.2.0.2 | +-----------------------+ | +-----------------------+
| |
| | route 10.2.0.0 via 192.168.42.2
| | route 10.3.0.0 via 192.168.42.3
Client2 | |
+----------+ | |
| wlan0-|<---+ |
| | |
| dhclient | |
| | |
+----------+ |
10.2.0.3 |
|
|
|
Client3 Drone2 |
+----------+ +-----------------------+ |
| wlan0-|<---WiFi--->|-at0 | |
| | | | 10.3.0.1 | |
| dhclient | | | | |
| | | | tap0-|<-openvpn--+
+----------+ | | 192.168.42.3 |
10.3.0.2 | +-----------------------+
|
|
|
Client4 |
+----------+ |
| wlan0-|<---+
| |
| dhclient |
| |
+----------+
10.3.0.3
كتب والتر واجهة ويب لـ Snoopy. يمكن الوصول إليها من http://your-snoopy-server.com:5000/
توجد العديد من تحويلات Maltego لاستكشاف البيانات المجمعة بيانيًا (انظر أدناه للحصول على مزيد من المعلومات).
التثبيت ================ يجب أن يكون تثبيت الخادم مباشرًا. تم اختباره فقط على تثبيت قياسي لـ Ubuntu 12.04 LTS 32bit. يتم إجراء تغييرات على عدة مكونات خادم، لذا يُوصى بشدة بتشغيل برنامج التثبيت على تثبيت أساسي، وعدم تشغيل أي شيء آخر على هذا الجهاز (إن أمكن). في حالة الشك، اذهب من خلال ملف install.sh وقم بإجراء التغييرات يدويًا. وإلا، فقط قم بتشغيل (./install.sh) أداة التثبيت.
الاستخدام ======== بمجرد اكتمال التثبيت، يجب أن تكون قادرًا على كتابة 'snoopy' لتحميل قائمة الخادم. إذا لم يحدث ذلك (أو في حالة الشك)، اذهب إلى الدليل الرئيسي للمستخدم الذي تم إنشاؤه أثناء مرحلة التثبيت. داخل الدليل 'snoopy/server/' يوجد ملف 'snoopy.sh' يمكنك تشغيله. فيما يلي القائمة:
+---------------------------------------------------------------+
| Welcome to Snoopy V0.1 |
| SERVER SIDE |
| |
| SensePost Information Security |
| [email protected] / www.sensepost.com |
+---------------------------------------------------------------+
Date: Thu Nov 1 16:37:08 CET 2012
Snoopy Server Status: Stopped
Connected Drones: 0
Wigle User: setYourWigleAccount
Would you like to:
[1] (Re)Start Snoopy server components
[2] Stop Snoopy server components
[3] Manage drone configuration packs
[4] Configure server options
[5] Set web traffic injection string
[6] Observe logs
[X] Exit
[?] Help
إنشاء حزم الطائرات الخيار [3] في القائمة سيسمح لك بإنشاء 'حزم' جانب العميل لأجهزة الطائرات الخاصة بك. تحصل كل طائرة على مفاتيح OpenVPN وSSH الخاصة بها، ونطاقات DHCP، وجداول التوجيه. سيتم تزويدك بعنوان URL للتنزيل لكل جهاز طائرة. تأكد من ضبط الوقت بشكل صحيح على الخادم والطائرة وإلا لن يتم إنشاء اتصال VPN.
تثبيت وتشغيل Snoopy على الطائرة يمكن أن يكون لديك ما يصل إلى 100 طائرة (إذا كنت تريد المزيد، راجع المصدر أو أرسل لي بريدًا إلكترونيًا، لا يوجد حد فعلي). يتكون التثبيت من تنزيل حزمة التكوين من الخطوة السابقة، وتشغيل البرنامج النصي للإعداد المناسب. بالنسبة لـ Nokia N900، سيتم وضع رمز على سطح المكتب الخاص بك. على سبيل المثال:
يمكن تطبيق تحويلات مختلفة على كل كيان Snoopy. اسحب كيان 'Snoopy' إلى الرسم البياني الخاص بك للبدء. إذا لم تحدد تاريخ بدء أو انتهاء في خصائص الكيانات، فسيتم جلب نتائج آخر 5 دقائق بشكل افتراضي (يمكن تغيير هذه القيمة في قائمة تكوين الخادم).
تسمح لك آلات Snoopy بترتيب التحويلات تلقائيًا، وتصفية/حذف العقد بناءً على المتطلبات. يجب أن توضح المصادر/التعليقات كيفية عملها بشكل كافٍ.
الاعتبارات القانونية ======================= قد تكون كل أو بعض مكونات Snoopy غير قانونية في المكان الذي تعيش فيه. يرجى التأكد قبل استخدام البرنامج. في المملكة المتحدة، يعتبر مكون جمع الفحوصات قانونيًا بسبب طبيعة البث لحركة المرور. ومع ذلك، فمن المرجح أن يكون مكون نقطة الوصول المزيفة غير قانوني في معظم المناطق. لا تتحمل SensePost أي مسؤولية عن تعرضك للمشاكل بسبب استخدام هذه الأداة.
اعتبارات الأمان ========================== تحتوي كل 'حزمة طائرة' على مفاتيح OpenVPN وSSH. إذا تم اختراق طائرة (عن طريق السرقة أو غير ذلك) فقد تشكل خطرًا أمنيًا على الخادم الخاص بك. يُوصى بشدة بأن يعمل خادم Snoopy الخاص بك مخصصًا لغرضه. المستخدم الذي تم إنشاؤه على الخادم لديه ما يلي مضاف تلقائيًا إلى ملف .ssh/authorized_hosts، للحصول على القليل من الأمان الإضافي:
"no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync ${SSH_ORIGINAL_COMMAND#* }""
العمل المستقبلي =============== لا يزال هناك الكثير من الأشياء التي يجب القيام بها / إضافتها. هذا الإصدار هو إثبات مفهوم إلى حد ما.
شكرًا للمساعدة/النصيحة/المدخلات من:
س. نحن نعلم أن جاسوسًا أجنبيًا يصل إلى هيثرو في 11 نوفمبر، لكننا لا نعرف متى أو في أي رحلة. تشير معلوماتنا الاستخباراتية إلى أنه سيقيم في فندق هيلتون بعد وصوله، وسيلتقط رحلة من مطار لوتون في 14 نوفمبر (مرة أخرى لا نعرف الوقت أو الوجهة). إنه سيد التنكر. كيف يمكننا التعرف عليه؟
ج. انشر طائرات Snoopy في هيثرو وهيلتون ولوتون. ستلاحظ تحويل 'CommonLocation' في Maltego تقاطع جميع الأجهزة الموجودة في تلك المواقع الثلاثة. نأمل أن تكون هناك نتيجة واحدة فقط - هدفنا البشري. بمجرد اكتشافه، يمكننا فحص خرائط Google وصور الشوارع للمكان الذي سافر إليه جاسوسنا. يمكن الكشف عن هويته إذا تم خداع أجهزته للاتصال بنقطة الوصول المزيفة لـ Snoopy (مثل Facebook أو Twitter أو البريد الإلكتروني الخاص به).
اطلب من Snoopy ملاحظة جميع الأفراد الذين اتصلوا بنقطة واي فاي في بعض البلدان الرملية ^W غير المرغوب فيها.
انشر Snoopy في 10 متاجر لديك. لاحظ حركة الزبائن، العملاء المتكررين، أنواع العملاء.
احقن كودًا خبيثًا للسيطرة على أجهزة العملاء وتثبيت البرامج الضارة. يمكن إطلاق الاستغلالات مباشرة من الخادم إلى الضحايا المتصلين، وذلك بفضل جداول التوجيه.
يمكن لـ TFL نشر طائرة Snoopy في كل محطة من مترو أنفاق لندن. يمكنهم مراقبة حركة الركاب، مع ملاحظة أوقات الذروة والانخفاض / الأيام، وتخصيص / تقليل عدد الموظفين وفقًا لذلك.
انشر 500 طائرة Snoopy في جميع أنحاء لندن. راقب تحركات الأشخاص عندما يمرون بجوار طائرة. ستظهر أنماط حركة بشرية مثيرة للاهتمام بالتأكيد إذا تم تطبيقها على مدى أسابيع / أشهر.
بالنسبة لسطح المكتب/الكمبيوتر المحمول الذي يعمل بنظام Linux، فإن بطاقة Alfa AWUS036H تؤدي أداءً متوسطًا. هناك بطاقة أكثر موثوقية وهي Ubiquity SR-71. أي تعليقات حول ما يعمل / لا يعمل بالنسبة لك من حيث دعم برامج تشغيل الحقن ستكون موضع تقدير.
بالنسبة لـ N900، ستلاحظ أن تحميل برامج تشغيل الحقن يقلل بشكل كبير من عمر البطارية. حزمة البطارية TecNet 6600mAh أعطت حوالي 6-8 ساعات في الاختبار. ستحتاج، مع ذلك، إلى محول لتوصيل N900 بأي حزمة بطارية. سيؤدي تقليل (أو تعطيل) تردد استقصاء GPS أيضًا إلى خدمة أفضل لعمر البطارية.
نصائح حول توصيل N900 بجهاز الكمبيوتر المحمول الخاص بك عبر USB (بغرض SSH) يمكن العثور عليها هنا
أختبر حاليًا على RaspberryPi و Alfa R36 mini AP و SheevaPlug. النتائج قريبًا.
يمكنك إنشاء تحويلات Maltego الخاصة بك لاستكشاف البيانات المجمعة. تلك المقدمة هي في الغالب لتوضيح ما يمكن عمله. راجع الكود المصدري، واقرأ:
اتصل بـ [email protected] إذا كان لديك أي استفسارات (أو اسأل فريق Maltego الرائع).
كود واجهة المستخدم للويب يمكن الوصول إليه عبر ~user/snoopy/server/bin/snoopy/src/snoopy/
تتكون الإضافات من جزأين:
الإضافة هي كائن قابل للاستدعاء يتم تحميله ديناميكيًا بواسطة تطبيق Snoopy. لنبدأ بمثال:
from snoopy import db, pluginregistry
@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')
def ssid_list(mac):
with db.SessionCtx() as session:
query = session.query(
distinct(db.Probe.probe_ssid) # SELECT DISTINCT probe_ssid FROM probes
).filter_by(
device_mac=mac # WHERE device_mac=$mac
).order_by(
db.Probe.probe_ssid # ORDER BY probe_ssid
)
return query.all()
الآن تحليل تفصيلي...
from snoopy import db, pluginregistry
نحتاج إلى db للوصول إلى قاعدة بيانات Snoopy وpluginregistry لتسجيل
الإضافة الخاصة بنا.
@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')
هذه هي الطريقة التي نسجل بها الإضافة الخاصة بنا (يمكن أن تكون أي كائن قابل للاستدعاء). تحدد الوسيطة الأولى اسم المجموعة التي تقع تحتها هذه الإضافة. لقد
حددنا client-data، لأن هذه الإضافة تقبل عنوان MAC وتعيد
بيانات ليتم عرضها في نافذة بيانات العميل. بصرف النظر عن client-data، هناك
أيضًا مجموعة الإضافات session-data التي تعمل على جلسات
القرب. المعامل الثاني هو اسم الإضافة. هذا الاسم للاستخدام الداخلي فقط
ويجب أن يكون متوافقًا مع JSON. المعامل الثالث هو عنوان الإضافة.
في الأساس هو نفس الاسم، لكن العنوان يُعرض في واجهة المستخدم.
بشكل أكثر تحديدًا، هذا هو عنوان قسم البيانات في نافذة بيانات العميل.
جميع وسائط الكلمات المفتاحية بعد العنوان تُحفظ كخيارات. بينما لا يتطلب نظام الإضافات أي خيارات، يدعم Snoopy خيار js. يحدد
هذا الخيار URL (من جانب المتصفح، وليس من جانب Snoopy/الخادم)
للمكون JavaScript لهذه الإضافة.
def ssid_list(mac):
هذه الإضافة هي دالة بسيطة. تقبل سلسلة عنوان MAC، كما
هو محدد لتعريف إضافات client-data. اسم الكائن قابل للاستدعاء غير مستخدم.يُجري جسم هذا المثال الإضافي استعلامًا بسيطًا باستخدام SQLAlchemy يفعل أساسًا SELECT DISTINCT probe_ssid FROM probes WHERE device_mac=$mac ويعيد النتائج كقائمة. عادةً ما تُضاف قيم الإرجاع للإضافات كجزء من استجابة JSON. لذلك، فإن النتائج محدودة بشرط أن تكون متوافقة مع JSON (كما تدعمها دالة jsonify() الخاصة بـ Flask).
بهذه البساطة!
يُشار إلى الإضافات الأمامية لبيانات العميل باسم معالجات بيانات العميل. يتم تسجيلها عبر دالة Snoopy.registerPlugin(sectionName, dataHandler). sectionName هو اسم قسم البيانات الذي يريد معالج البيانات التعامل معه. هذا الاسم هو نفس اسم الإضافة الخلفية التي أنشأت البيانات. يجب أن يكون dataHandler دالة بالتوقيع التالي: function($section, clientData) {...}. $section هو كائن jQuery لعنصر div حيث يمكن لمعالج البيانات عرض البيانات أو التأثير على التغييرات. يتم توفير بيانات العميل (التي تم إنشاؤها بواسطة الإضافة الخلفية) في المعامل clientData.
نظرًا لأن المخرجات المسموح بها لمعالج البيانات تقتصر على التغييرات على div المعطى ($section)، فلا حاجة لقيمة إرجاع.
haxor@drone001# wget http://snoopy-server.com/secretdir/drone001.tar.gz
haxor@drone001# tar xzvf drone001.tar.gz
haxor@drone001# cd snoopy && ./setup_n900.sh
البحث عن مواقع SSID أنشئ حسابًا على www.wigle.net، وقم بتعيين بيانات الاعتماد الخاصة بك عبر 'Configure server options'
واجهة الويب يمكنك الوصول إلى واجهة الويب عبر http://your-snoopy-server:5000/. يمكنك كتابة الإضافات الخاصة بك لاستعراض البيانات وعرضها. جعل والتر الأمر سهلاً لك (راجع الملحق لهذه الوثيقة).
استكشاف البيانات باستخدام Maltego في قائمة خادم Snoopy، اذهب إلى 'Configure Server Options' > 'Maltego'. هنا سترى عناوين URL لتنزيل كيانات Snoopy والآلات وعناوين URL للتحويلات. لاستخدام تحويلات Maltego، ستحتاج إلى: