
أداة جمع بيانات Active Directory تعتمد على واجهة نصية (TUI)، تقوم بجمع كائنات LDAP، وتنفيذ عمليات جمع عن بُعد عبر RPC/SMB/HTTP، وتوليد مخرجات متوافقة مع BloodHound CE لتحليل مسارات الهجوم.
واجهة مستخدم طرفية (TUI) لجمع معلومات Active Directory.
الأهداف الرئيسية لهذا المشروع هي:
يقوم Flashingestor بتنفيذ 3 خطوات أساسية منفصلة: استيراد LDAP والجمع عن بُعد والتحويل، على عكس المجمعات الأخرى التي تقوم بتشغيل الطرق المحددة في خطوة واحدة:
الاستيراد (Ctrl+l) - يجمع بيانات سمات الكائنات الأولية من LDAP ويخزنها تحت output/ldap في ملفات msgpack وسيطة. يمكن تخصيص الاستعلامات في config.yaml.
الجمع عن بُعد (Ctrl+r) - يقرأ هذه الملفات الوسيطة في الذاكرة، ويحسب قائمة أجهزة الكمبيوتر المراد جمعها، ويقوم بسلسلة من طلبات RPC/SMB/HTTP للحصول على المعلومات البعيدة ذات الصلة لكائنات Computer وEnterpriseCA، والتي تُخزن تحت output/remote.
التحويل (Ctrl+s) - يقرأ الملفات الوسيطة في الذاكرة، ويدمج المعلومات من خطوات الاستيراد والجمع عن بُعد، ويُنتج تفريغًا متوافقًا مع Bloodhound تحت output/bloodhound - هذه الخطوة غير متصلة بالإنترنت بالكامل.
لمزيد من التفاصيل والرؤى الفنية، راجع 📖 Wiki.
$ git clone https://github.com/Macmod/flashingestor
$ cd flashingestor
# للبناء فقط:
$ go build ./cmd/flashingestor
# لتثبيت الملف التنفيذي إلى $GOBIN أو $GOPATH/bin:
$ go install ./cmd/flashingestor
[!ملاحظة] يمكنك أيضًا استخدام الملفات الثنائية المعدة مسبقًا من Releases المتاحة.
أولاً، قم بالمصادقة باستخدام إحدى الطرق التالية:
# مجهول
# [يتطلب dSHeuristics بقيمة 0000002 في كائن DirectoryServices
# وقد تكون الرؤية محدودة بسبب عدم وجود أذونات Read ACEs]
$ ./flashingestor -u '@<DOMAIN>' -p '' [...]
# مستخدم + كلمة مرور
$ ./flashingestor -u <USER>@<DOMAIN> -p <PASSWORD> [-k] [...]
# مستخدم + NTHash
$ ./flashingestor -u <USER>@<DOMAIN> -H <NTHASH> [-k] [...]
# مستخدم + PFX
$ ./flashingestor -u <USER>@<DOMAIN> --pfx <PFXPATH> [--pfx-password <PFXPASS>] [-k] [...]
# مستخدم + PEM
$ ./flashingestor -u <USER>@<DOMAIN> --cert <PEMPATH> --key <KEYPATH> [-k] [...]
# مستخدم + AESKey
$ ./flashingestor -u <USER>@<DOMAIN> --aes-key <AESKEY> -k [...]
# مستخدم + تذكرة
$ ./flashingestor -u <USER>@<DOMAIN> --ccache /path/to/ticket.ccache -k [...]
أو
$ KRB5CCNAME=/path/to/ticket.ccache ./flashingestor -u <USER>@<DOMAIN> -k [...]
ثم قم بتشغيل الخطوات حسب الرغبة. لجمع LDAP فقط (DCOnly باستثناء GPOLocalGroup وCertServices)، فقط نفذ Ctrl+l، وتحقق من نجاح الاستيراد، ثم نفذ Ctrl+s لإنشاء التفريغ النهائي.
يوصى بتحديد --dc و--dns لتشغيل flashingestor. إذا لم تحدد --dc، سيحاول flashingestor العثور عليه عبر استعلامات SRV / A، مما قد يؤخر خطوة الاستيراد الأولية.
يجب عليك بعد ذلك تحديد --dns إذا كان خادم DNS القياسي الخاص بك لا يعرف المجال - عند استخدام DNS المتكامل مع Active Directory، فقط وجه --dns إلى DC المستضيف له. بالإضافة إلى ذلك، بغض النظر عن --dc، إذا كنت تريد تشغيل خطوة الجمع عن بُعد وكان خادم DNS الخاص بك لا يعرف أجهزة الكمبيوتر في المجال، فيجب عليك تحديد --dns للاستعلامات.
[!تلميح] في بيئات ذات DCs متعددة، يمكنك أيضًا استخدام أداة
dcprobeلقياس زمن الوصول إلى جميع DCs والعثور على هدف جيد للاستيراد:$ go build ./cmd/dcprobe $ ./dcprobe --dns 192.168.88.6 -d creta.local -r 10
إذا لم يكن ملف التكوين موجودًا في الدليل الحالي باسم config.yaml أو في المسار المقدم عبر --config، سيتم افتراض الخيارات الافتراضية (نفس تلك الموجودة في config.yaml المقدم) - وهي مضمنة في config/fallback.go. لمزيد من المعلومات، اقرأ Configuration File.
ضع في اعتبارك استخدام --log لتحديد ملف إخراج للسجلات (في حالة احتياجك لمراجعتها بعد إغلاق TUI) و-vv لرؤية رسائل سجل التصحيح، حيث قد تساعد هذه في استكشاف المشكلات المحتملة. للحصول على مرجع كامل لوسائط سطر الأوامر، اقرأ Command-Line Arguments.
[!ملاحظة] الاستعلامات الافتراضية في
config.yamlالمقدم مصممة مع وضع المعلومات المطلوبة لتحويل Bloodhound في الاعتبار. يمكنك اختيار تخصيص الاستعلامات أو السمات فيconfig.yaml، ولكن من الأفضل محاولة تجنب إزالة السمات الضرورية، وتجنب تغيير معنى مرشحات البحث.
إذا تم تعيين recurse_trusts على true، فسيقوم باستيراد أي مجالات موثوقة يتم العثور عليها بشكل متكرر باستخدام بيانات الاعتماد الأولية المقدمة للاستيراد.
إذا تم تعيين search_forest على true، فسيقوم باستيراد المجالات التي تشكل جزءًا من نفس الغابة مثل المجال الأولي من قسم Configuration - لن يتم إصدار استعلامات إضافية، لأن هذا جزء بالفعل من خطة الاستيراد الافتراضية. يمكن تعيين كلا الخيارين في نفس الوقت، وسيقوم flashingestor باستيراد أي مجال يتم العثور عليه مرة واحدة فقط (إما عبر ثقة، أو عبر الغابة الحالية).
إذا تم تمكين recurse_trusts وتم تعيين recurse_feasible_only أيضًا على true، فسيحاول فقط استيراد مجال موثوق إذا كانت الثقة:
هذا يعني أن الثقات الصادرة فقط لن يتم اجتيازها، وبصرف النظر عن المستوى الأول من الثقات، تتوقف مسارات الاستيراد عند الثقات غير المتعدية - إذا كانت B تثق في A بشكل غير متعدٍ، فلا يزال بإمكان A المصادقة في B؛ ولكن إذا كانت C أيضًا تثق في B بشكل غير متعدٍ، فلا يمكن لـ A المصادقة على C.
[!هام]
recurse_trusts/search_forestستصادق فقط على LDAP في المجالات المكتشفة باستخدام بيانات الاعتماد المحددة من المجال المصدر عندما تكون بيانات الاعتماد المقدمة إماكلمة مرور عاديةأوتجزئة NT؛ استخدام TGT لإصدار تذكرة إحالة لهذا الغرض ممكن نظريًا ولكن لم يتم تنفيذه بعد في مكتبةadauth.
يمكن أيضًا استخدام سلاسل الوسائط الوسيطة من Macmod/ldapx مباشرة مع flashingestor لتشويش استعلامات LDAP في خطوة الاستيراد باستخدام الخيارات -f (--ldapx-filter)، و-a (--ldapx-attrs)، و-b (--ldapx-basedn). مع -vv، سيتم أيضًا عرض الاستعلامات الأولية قبل وبعد التشويش في السجل.
إذا كنت تنوي تشغيل خطوة الجمع عن بُعد، تحقق من methods الممكّنة - تتوافق هذه تقريبًا مع الطرق التي تقدمها SharpHound ويمكن استخدامها لتبديل مجموعات محددة عبر RPC أو HTTP.
يمكن استخدام وسائط --remote-* لتحديد مجموعة منفصلة من بيانات الاعتماد للجمع عن بُعد. إذا لم يتم تحديدها، سيحاول flashingestor استخدام نفس بيانات الاعتماد للمستخدم المقدم في وسائط الاستيراد القياسية (--user، --password، إلخ).