يصف هذا المستند آليتي أمان RADIUS:
تغطي هذه الوثيقة ما هي آليات الأمان، وكيف يتم إستخدامها، ومتى يجب أن تتوقع فشل التحقق من الصحة.
وفقا لمعيار RFC 2865، يبلغ طول رأس المصدق 16 بايت. وعند إستخدامه في طلب الوصول، يسمى مصدق الطلب. عند إستخدامه في أي نوع من الاستجابة، يطلق عليه مصدق الاستجابة. تستخدم من أجل:
إذا استجاب الخادم باستخدام "مصدق الاستجابة" الصحيح، يمكن للعميل إجراء الحساب إذا كانت الاستجابة مرتبطة بطلب صالح.
يرسل العميل الطلب مع رأس المصدق العشوائي. بعد ذلك، يقوم الخادم الذي يرسل الاستجابة بحساب مصدق الاستجابة باستخدام حزمة الطلب مع السر المشترك:
ResponseAuth = MD5(Code + ID + Length + RequestAuth + Attributes + Secret)
يقوم العميل الذي يستقبل الاستجابة بتنفيذ العملية نفسها. إذا كانت النتيجة هي نفسها، فإن الحزمة صحيحة.
يحدث فشل التحقق من الصحة إذا لم يعد المحول يقوم بتخزين الطلب مؤقتا (على سبيل المثال، بسبب المهلة). قد تواجه أيضا هذا الأمر عندما يكون السر المشترك غير صالح (نعم - يتضمن Access-Reject أيضا هذا الرأس). بهذه الطريقة، يمكن لجهاز الوصول إلى الشبكة (NAD) اكتشاف عدم تطابق السر المشترك. عادة ما يتم الإبلاغ عنه بواسطة خوادم/عملاء المصادقة والتفويض والمحاسبة (AAA) كعدم تطابق مشترك للمفتاح، ولكنه لا يكشف التفاصيل.
كما يتم إستخدام رأس المصدق لتجنب إرسال سمة كلمة مرور المستخدم في نص عادي. أولا، يتم حساب ملخص الرسالة 5 (MD5 - سري، المصدق). ثم يتم تنفيذ العديد من عمليات XOR بأجزاء كلمة المرور. تعد هذه الطريقة عرضة للهجمات غير المتصلة (جداول قوس قزح) نظرا لأنه لم يعد ينظر إلى MD5 على أنه خوارزمية قوية أحادية الإتجاه.
هنا ال بايثون نص أن يحسب المستعمل كلمة:
def Encrypt_Pass(password, authenticator, secret):
m = md5()
m.update(secret+authenticator)
return "".join(chr(ord(x) ^ ord(y)) for x, y in zip(password.ljust
(16,'\0')[:16], m.digest()[:16]))
إذا تم تغيير أي من السمات في طلب وصول RADIUS (مثل معرف RADIUS واسم المستخدم وما إلى ذلك)، فيجب إنشاء حقل المصدق الجديد ويجب إعادة حساب كافة الحقول الأخرى التي تعتمد عليه. إذا كان هذا إعادة إرسال، لا ينبغي أن يتغير شيء.
يختلف معنى رأس المصدق بالنسبة إلى طلب الوصول وطلب المحاسبة.
بالنسبة لطلب الوصول، يتم إنشاء المصدق بشكل عشوائي ومن المتوقع أن يتلقى إستجابة تم حساب ResponseAuthenticator عليها بشكل صحيح، مما يثبت أن الاستجابة كانت مرتبطة بذلك الطلب المحدد.
بالنسبة لطلب المحاسبة، فإن المصدق ليس عشوائيا، ولكنه يتم حسابه (وفقا ل RFC 2866):
RequestAuth = MD5(Code + ID + Length + 16 zero octets + Attributes + Secret)
بهذه الطريقة، يمكن للخادم التحقق من رسالة المحاسبة فورا وإفلات الحزمة إذا لم تتطابق قيمة إعادة الحساب مع قيمة المصدق. ترجع Identity Services Engine (ISE):
11038 RADIUS Accounting-Request header contains invalid Authenticator field
السبب النموذجي لهذا هو المفتاح السري المشترك غير الصحيح.
سمة مصدق الرسائل هي سمة RADIUS المحددة في RFC 3579. تستخدم لغرض مشابه: التوقيع والتصديق. ولكن هذه المرة، لا يتم إستخدامها للتحقق من صحة إستجابة ما بل الطلب.
يقوم العميل الذي يرسل طلب الوصول (يمكن أيضا أن يكون خادما يستجيب باستخدام اعتراض الوصول) بحساب رمز مصادقة الرسائل المستندة إلى التجزئة (HMAC)-MD5 من الحزمة الخاصة به، ثم يضيف سمة مصدق الرسائل كتوقيع. وبعد ذلك، يمكن للخادم التحقق من تنفيذه لنفس العملية.
تبدو الصيغة مماثلة لرأس المصدق:
Message-Authenticator = HMAC-MD5 (Type, Identifier, Length, Request Authenticator,
Attributes)
تأخذ الدالة HMAC-MD5 في وسيطتين:
يجب إستخدام مصدق الرسائل لكل حزمة، والتي تتضمن رسالة بروتوكول المصادقة المتوسع (EAP) (RFC 3579). ويتضمن ذلك كل من العميل الذي يرسل طلب الوصول والخادم الذي يستجيب مع "تحدي الوصول". يجب أن يقوم الجانب الآخر بإسقاط الحزمة بصمت إذا فشل التحقق من الصحة.
سيحدث فشل التحقق من الصحة عندما يكون السر المشترك غير صالح. بعد ذلك، لا يمكن لخادم AAA التحقق من صحة الطلب.
يخبر ال ISE:
11036 The Message-Authenticator Radius Attribute is invalid.
ويحدث ذلك عادة في المرحلة اللاحقة عند إرفاق رسالة EAP. لا تتضمن حزمة RADIUS الأولى لجلسة عمل 802.1x رسالة EAP؛ لا يوجد حقل مصدق رسالة ولا يمكن التحقق من الطلب، ولكن في تلك المرحلة، يمكن للعميل التحقق من الاستجابة باستخدام حقل المصدق.
هنا مثال لتوضيح كيفية حساب القيمة يدويا للتأكد من حسابها بشكل صحيح.
تم إختيار الحزمة رقم 30 (طلب الوصول). هو في منتصف جلسة EAP، وتتضمن الحزمة حقل مصدق الرسالة. الهدف هو التحقق من صحة مصدق الرسالة:
pluton # cat packet30-clear-msgauth.bin | openssl dgst -md5 -hmac 'cisco'
(stdin)= 01418d3b1865556918269d3cf73608b0
نفس الشيء يمكن حسابه باستخدام برنامج Python النصي:
pluton # cat hmac.py
#!/usr/bin/env python
import base64
import hmac
import hashlib
f = open('packet30-clear-msgauth.bin', 'rb')
try:
body = f.read()
finally:
f.close()
digest = hmac.new('cisco', body, hashlib.md5)
d=digest.hexdigest()
print d
pluton # python hmac.py
01418d3b1865556918269d3cf73608b0
يوضح المثال السابق كيفية حساب حقل مصدق الرسائل من طلب الوصول. بالنسبة لتحدي الوصول وقبول الوصول ورفض الوصول، فإن المنطق هو نفسه تماما، ولكن من المهم تذكر أنه يجب إستخدام مصدق الطلب، والذي يتم توفيره في حزمة طلب الوصول السابقة.
المراجعة | تاريخ النشر | التعليقات |
---|---|---|
1.0 |
20-Jan-2016 |
الإصدار الأولي |