
NebulousAD أداة تدقيق آلية لبيانات الاعتماد.
اعتبارًا من 14 أبريل، لن تستضيف NuID بعد الآن واجهة برمجة تطبيقات NebulousAD التي يتواصل معها هذا الكود. كفريق صغير من المطورين، وجدنا أنه ليس من المجدي دعم ومراقبة وتطوير كل من بوابة NebulousAD وبوابة المطورين الخاصة بالمصادقة Developer Portal بشكل فعال.
سيستمر الكود الخاص بفحص كلمات مرور Active Directory مقابل مجموعة من بيانات اعتماد المصادقة المخترقة علنًا في العيش في هذا المستودع، وسنقوم بدمج جميع الملاحظات الممتازة التي تلقيناها من خلال تجربتنا مع NebAD لتوفير خدمة قائمة سوداء سلسة لكلمات المرور جنبًا إلى جنب مع واجهة برمجة تطبيقات المصادقة الخاصة بنا في الأشهر القادمة. لذا ترقبوا!
نقدر مشاركتكم وملاحظاتكم في الماضي، ونتطلع إلى الاستماع منكم في المستقبل. لا تترددوا في التواصل معنا بخصوص أسئلة حول NebAD أو NuID أو أي شيء متعلق بالهوية الرقمية.
إلى اللقاء! -فريق NuID
NebulousAD هي أداة لتدقيق كلمات مرور مستخدمي Active Directory مقابل قاعدة بيانات لكلمات المرور المخترقة التي تم العثور عليها في خروقات البيانات. صُممت الأداة لمساعدة مسؤولي أنظمة Windows في العثور على استخدام كلمات المرور المخترقة ومعالجتها اختياريًا. يُوصى بهذا النهج بواسطة NIST 800-63B، ويمكن أن يساعد في الحماية من هجمات رش بيانات الاعتماد وحشوها.
تحتوي قاعدة بيانات Nebulous حاليًا على أكثر من 2.5 مليار تجزئة فريدة لكلمات مرور مخترقة.
تستخدم NebulousAD نموذج k-anonymity افتراضيًا للحفاظ على خصوصية وأمان كلمات المرور التي يتم فحصها مقابل واجهة برمجة التطبيقات. يتم إرسال الأحرف الخمسة الأولى فقط من تجزئة SHA-2 إلى واجهة برمجة التطبيقات. يمكنك قراءة المزيد عن k-anon هنا.
تم إصدار الأداة أصلاً في BSides Las Vegas 2019. فيديو عرض BSides موجود هنا.
الميزات القادمة:
ما عليك سوى تنزيل الإصدار المُجمّع مسبقًا (لا يتطلب مترجم بايثون)، أو البناء من المصدر:
تتطلب هذه الأداة Python2.7 (حاليًا).
قم بتشغيل git clone https://github.com/NuID/nebulousAD.git
بعد ذلك، قم بالتثبيت باستخدام python setup.py install
ثم قم بتهيئة مفتاحك. يمكنك الحصول على مفتاحك من خلال زيارة: https://nebulous.nuid.io/#/register بمجرد التسجيل، انقر فوق الزر لإنشاء مفتاح API الخاص بك وانسخه.
الآن يمكنك تهيئتها على النحو التالي: nebulousAD -init-key <api_key>
يمكنك الآن تشغيل الأداة. إذا لم تتمكن من العثور على مفتاح API الخاص بك، فقد تحتاج إلى إعادة تشغيل جلسة الطرفية الخاصة بك. يتم تخزين مفتاح API في متغير بيئة. تسجيل الخروج والعودة يعمل أيضًا.
يمكنك تنزيل ملف nebulousAD.exe لاستخدامه بدون مترجم هنا. بدلاً من ذلك، يمكنك تجميع الأداة من المصدر بنفسك:
pip install pyinstallergit clone https://github.com/NuID/nebulousAD.gitcd .\nebulousAD\nebulousADpyinstaller --onefile nebulousAD.pyسيقوم Pyinstaller بإخراج موقع الثنائي المُجمّع:

مثال لأمر لتفريغ جميع التجزئات وفحصها مقابل واجهة برمجة التطبيقات:
nebulousAD.exe -v -snap --check
NuID Credential Auditing tool.
optional arguments:
-h, --help show this help message and exit
-ntds NTDS NTDS.DIT file to parse
-system SYSTEM SYSTEM registry hive to parse
-csv CSV Output results to CSV file at this PATH.
-json JSON Output results to JSON file at this PATH
-init-key INIT_KEY Install your Nu_I.D. API key to the current users
PATH.
-c, --check Check against Nu_I.D. API for compromised
credentials.
-dk, --disable-k-anon
Disable k-anon hash searches against the API (speeds
up the audit).
-snap Use ntdsutil.exe to snapshot the system registry
hive and ntds.dit file to <systemDrive>:\Program
Files\NuID\
-shred When performing delete operations on files, use a 7
pass overwrite with sdelete.exe. Download here:
https://docs.microsoft.com/en-
us/sysinternals/downloads/sdelete
-no-backup Do not backup the existing snapshots, just overwrite
them instead.
-clean-old-snaps CLEAN_OLD_SNAPS
Clean backups older than N days.
display options:
-user-status Display whether or not the user is disabled
-pwd-last-set Shows pwdLastSet attribute for each account found
within the NTDS.DIT database.
-history Dump NTLM hash history of the users.
-v Enable verbose mode.
يؤدي تعطيل وظيفة فحص التجزئة باستخدام k-anonymity. هذا مفيد لتسريع وقت البحث، ولكنه سيؤدي إلى إرسال تجزئة SHA-256(NTLM) الكاملة إلى واجهة برمجة التطبيقات. نحن لا نسجل أو نخزن التجزئات المرسلة إلى واجهة برمجة التطبيقات.
ستقوم المعلمة -snap تلقائيًا بأخذ لقطة من Active Directory (باستخدام ntdsutil.exe)، وتفريغ ملف ntds.dit بالإضافة إلى خلية SYSTEM، إذا كانت لديك الصلاحيات.
يمكنك تفريغ هذا يدويًا باستخدام أي مجموعة من الطرق أو أداة ntdsutil.exe.
إذا قمت بالتفريغ يدويًا، يمكنك الإشارة إلى الملفات باستخدام -system path\to\SYSTEM و -ntds path\to\ntds.dit. هذا مفيد إذا كنت تريد تدقيق اللقطات القديمة.
يتطلب هذا مفتاح API من https://nebulous.nuid.io/#/register. بمجرد أن يكون لديك ذلك وقمت بتثبيته باستخدام -init-key، يمكنك فحص التجزئات مقابل واجهة برمجة تطبيقات NuID.
إذا قمت بتحديد -history، فسوف يتحقق أيضًا من تاريخ كلمة المرور لكل حساب لمعرفة ما إذا كانت هناك كلمة مرور استخدمها المستخدم سابقًا وتم اختراقها.
يضيف إخراجًا يشير إلى ما إذا كان الحساب ممكّنًا أو معطلاً في Active Directory.
يضيف إخراجًا يشير إلى تاريخ آخر تعيين لكلمة مرور الحساب. يمكن أن يكون هذا مفيدًا في اكتشاف انتهاكات سياسة الأمان للحسابات التي لا تتم إعادة تعيينها تلقائيًا كما هو محدد في GPO، مثل حسابات الخدمة.
يقوم أيضًا بتدقيق أو تفريغ تاريخ كلمة المرور المخزنة للحسابات.
استخدام تجاوز DoD بـ 7 تمريرات عند محو اللقطات. يتطلب ذلك وجود sdelete.exe في مسارك. يمكنك الحصول عليه من هنا: https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
ما عليك سوى تنزيله ووضعه في دليل %SYSTEMDRIVE\Windows\System32\ الخاص بك، أو إعداد متغير البيئة.
مفيد في تنظيف النسخ الاحتياطية عند تعيين هذا التطبيق للتشغيل مع جدولة المهام. يمكن أن تكون خلية SYSTEM وملف .dit كبيرة جدًا في المجالات الأكبر وتشغل مساحة كبيرة من القرص.
إذا كنت تستخدم جدولة المهام لإجراء تدقيق يومي، يمكنك استخدام هذا الخيار على النحو التالي: -clean-old-snaps 7 لتخزين لقطات أسبوع واحد فقط.
إذا اكتشفنا لقطة قديمة، فإننا نقوم بنسخها احتياطيًا إلى %SYSTEMDRIVE%\Program Files\NuID\snapshot-backups بشكل افتراضي.
يرجع ذلك إلى أن ntdsutil.exe يتطلب دليلاً فارغًا.
إذا كنت تريد تعطيل هذا النسخ الاحتياطي ومجرد محو اللقطة الحالية، استخدم هذه الوسيطة.
يتم توفير واجهة برمجة تطبيقات ويب RESTful تسمح للمستخدمين باستخدام رمز واجهة برمجة تطبيقات NuID، بمجرد إنشائه، لعميلك المخصص. يوضح هذا القسم الوظائف الصحيحة لواجهة برمجة تطبيقات الويب، والطلبات الصالحة، وأنواع الأخطاء، والمزيد.
سيكون الهيكل الأساسي لكل استجابة متطابقًا. دون استثناء، يجب أن تحتوي الاستجابات على الحقول الثلاثة التالية: success و data و error. أول شيء يجب تحديده عند تلقي الاستجابة هو قيمة success. سيحدد هذا ما إذا كان يجب عليك متابعة معالجة كائن data أو معالجة كائن error بدلاً من ذلك. توضح الأمثلة التالية استجابات عامة من الخادم في حالتي النجاح والفشل:
{
success: True, // يشير إلى اكتمال الطلب بنجاح
data: {
/* تعتمد القيمة على نقطة النهاية التي تم الاستعلام عنها */
},
error: {} // فارغ
}
{
success: False, // يشير إلى عدم اكتمال الطلب بنجاح
data: { }, // فارغ
error: {
"ErrorName": "وصف مفيد للخطأ الذي حدث أثناء الطلب"
}
}
يقدم كل خطأ نظرة ثاقبة حول ما حدث بشكل خاطئ أثناء الطلب، مما يسمح للمستخدم بإجراء التغييرات اللازمة.
في الوقت الحالي، يتم دعم نوع تجزئة واحد فقط hash_type. يمكن استخدام هذه القيم (غير حساسة لحالة الأحرف) بدلاً من hash_type. يتم أيضًا توفير حجم تمثيل السلسلة السداسية العشرية لـ hash_value. لا يمكن أن تتجاوز hash_prefix هذا الحجم:
| التجزئة | الطول |
|---|---|
| NTLMSHA2 | 64 |
يجب توفير رأس HTTP التالي في جميع طلبات نقاط نهاية واجهة برمجة التطبيقات، وإلا سيتم إرجاع خطأ:
X-NUID-API-KEY: <مفتاح واجهة برمجة تطبيقات NuID الخاص بك>
تبدأ كل نقطة نهاية بعنوان URL التالي:
https://nebulous.nuid.io
/api/search/kanon/<hash_type>/<hash_prefix>الطريقة: GET
الوصف: الاستعلام عن قاعدة بيانات التجزئات باستخدام نسخة مجهولة من التجزئة. يمكن توفير التجزئة الكاملة، ولكن بدلاً من ذلك، يمكن استخدام تجزئة جزئية في شكل بادئة لا يقل طولها عن 5 أحرف. سيتم إرجاع جميع التجزئات في قاعدة بيانات Nebulous المطابقة لهذه البادئة دون الكشف عن التجزئة نفسها.
الاستجابة:
الاستجابة من عنوان URL التالي: https://nebulous.nuid.io/api/search/kanon/5f4dcc
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
/api/search/kanon/<hash_type>الطريقة: POST بيانات POST:
{
"prefix": "<بادئة التجزئة>"
}
الوصف: الاستعلام عن قاعدة بيانات التجزئات باستخدام نسخة مجهولة من التجزئة. يمكن توفير التجزئة الكاملة، ولكن بدلاً من ذلك، يمكن استخدام تجزئة جزئية في شكل بادئة لا يقل طولها عن 5 أحرف. سيتم إرجاع جميع التجزئات في قاعدة بيانات Nebulous المطابقة لهذه البادئة دون الكشف عن التجزئة نفسها.
الاستجابة:
الاستجابة من عنوان URL التالي: https://nebulous.nuid.io/api/search/kanon مع البيانات {"prefix": "5f4dcc"}
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
يبدو أن هناك خطأ في impacket لا يسمح باستخراج nthash بشكل صحيح.
تجنب استخدام الوسيطة -history في الوقت الحالي.
https://github.com/SecureAuthCorp/impacket/issues/395 https://github.com/SecureAuthCorp/impacket/issues/660
اتصل بنا على [email protected]
| اسم الخطأ | الوصف | رمز الحالة |
|---|
ActionExpired | الإجراء الذي تحاول استدعاءه قد انتهت صلاحيته ولم يعد صالحًا | 401 |
ActionInvalid | الإجراء الذي تحاول استدعاءه غير موجود | 401 |
AuthFailure | مجموعة اسم المستخدم/كلمة المرور غير صالحة | 401 |
AuthMissingToken | لم يتم تقديم رمز مصادقة | 401 |
FieldMissing | حقل واحد أو أكثر مفقود من طلب JSON | 422 |
HashInvalidLength | التجزئة المقدمة والطول المتوقع لنوع التجزئة المحدد غير متطابقين | 422 |
HashInvalidValue | تمثيل تجزئة سداسي عشري متوقع | 422 |
HashInvalidPrefix | يجب أن يكون للبادئة حد أدنى من 5 أحرف | 422 |
HashUnsupported | نوع التجزئة المقدم غير مدعوم | 422 |
InvalidJWT | JWT المقدم غير صالح | 401 |
InvalidRequest | الطلب المقدم غير صحيح أو يفتقد إلى حمولة JSON | 422 |
KeyBadUser | مفتاح API المقدم لا يتطابق مع المستخدم المتوقع | 401 |
KeyDisabled | مفتاح API المقدم معطل | 403 |
KeyInvalid | مفتاح API المقدم غير صالح | 401 |
KeyMissing | لم يتم تقديم مفتاح API | 401 |
NotFound | نقطة النهاية التي تحاول الوصول إليها غير صالحة | 404 |
PasswordIncorrect | كلمة المرور الحالية لا تتطابق | 401 |
UserDisabled | الحساب معطل حاليًا | 401 |
UserKeyLimit | لقد وصلت إلى الحد الأقصى لعدد مفاتيح API | 403 |
UserNotActivated | لم يتم تفعيل حساب المستخدم بعد | 403 |
UserNotFound | لا يمكن العثور على حساب المستخدم | 401 |