
ROCA: ثغرة مفتاح RSA من Infineon
ترتبط هذه الأداة بـ ورقة مؤتمر ACM CCS 2017 رقم 124 "عودة هجوم كوبرسميث: التحليل العملي لوحدات RSA المستخدمة على نطاق واسع".
تتيح لك اختبار مفاتيح RSA العامة للتأكد من وجود الثغرة الموصوفة.
تحديث 4.11.2017: تم دعم Python 2.7، 3.4+.
تحديث 30.10.2017: الورقة البحثية للهجوم متاحة بالفعل على الإنترنت، نسخة ACM.
تحديث 30.10.2017: تم تنفيذ كاشف اللوغاريتم المتقطع في Python ويُستخدم ككاشف افتراضي. يكتشف البنية في الأعداد الأولية التي تستغلها خوارزمية التحليل.
تدعم الأداة حاليًا تنسيقات المفاتيح التالية:
*.der، *.crt*.pem*.pem*.pem (يجب أن يحتوي على الترويسة الصحيحة -----BEGIN RSA...)*.pub، يبدأ بـ "ssh-rsa"، مفتاح واحد لكل سطر*.pgp، *.asc. عدة مفاتيح لكل ملف، يجب أن يحتوي على الترويسة الصحيحة -----BEGIN PGP...*.apk*.txt، يمكن أن يكون المعامل
أ) رقمًا مشفرًا بصيغة base64، ب) رقمًا مشفرًا بصيغة hex، ج) رقمًا مشفرًا بصيغة عشرية;binary:: يتم محاولة فك تشفيره كشهادة X509--jks-pass-fileأداة الكشف هي تطبيق في ملف واحد بقصد سهولة التكامل / التعامل.
معدلات الكشف الإيجابي الخاطئ:
كاشف اللوغاريتم المتقطع مُنفَّذ فقط في كود Python، ويُستخدم كطريقة الكشف الافتراضية.
إصدارات Java و C# غير مدعومة منذ النشر الأصلي ولا نخطط لترقية هذه الكاشفات إلى الطريقة الأكثر دقة. لكن المساهمات الخارجية مرحب بها!
يستخدم الفاحص عبر الإنترنت خوارزمية كاشف اللوغاريتم المتقطع.
قم بتثبيت مكتبة الكاشف + الأداة باستخدام pip (يقوم بتثبيت جميع التبعيات):
pip install roca-detect
نفّذ في المجلد الجذر للحزمة:
pip install --upgrade --find-links=. .
قد يكون من الضروري تثبيت تبعيات إضافية حتى يتمكن pip من تثبيت حزمة التشفير مثلاً.
CentOS / RHEL:
sudo yum install python-devel python-pip gcc gcc-c++ make automake autoreconf libtool openssl-devel libffi-devel dialog
Ubuntu:
sudo apt-get install python-pip python-dev build-essential libssl-dev libffi-dev swig
لطباعة الاستخدام الأساسي:
# إذا تم التثبيت باستخدام pip / يدويًا
roca-detect --help
# بدون تثبيت (قد تفتقر إلى التبعيات)
python roca/detect.py
تقبل أداة الاختبار أسماء ملفات / أدلة متعددة كوسيط إدخال. تقوم بإرجاع تقرير يوضح عدد الملفات التي تم أخذ بصمتها (وأيها هي).
مثال (لم يتم العثور على ثغرات):
التشغيل التكراري على جميع مفاتيح SSH الخاصة بي وملف known_hosts:
$> roca-detect ~/.ssh
2017-10-16 13:39:21 [51272] INFO ### الملخص ####################
2017-10-16 13:39:21 [51272] INFO السجلات المختبرة: 92
2017-10-16 13:39:21 [51272] INFO .. شهادات PEM: . . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات DER: . . . 0
2017-10-16 13:39:21 [51272] INFO .. ملفات مفاتيح RSA: . 16
2017-10-16 13:39:21 [51272] INFO .. مفاتيح PGP الرئيسية: 0
2017-10-16 13:39:21 [51272] INFO .. إجمالي مفاتيح PGP: 0
2017-10-16 13:39:21 [51272] INFO .. مفاتيح SSH: . . . 76
2017-10-16 13:39:21 [51272] INFO .. مفاتيح APK: . . . 0
2017-10-16 13:39:21 [51272] INFO .. مفاتيح JSON: . . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات LDIFF: . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات JKS: . . . 0
2017-10-16 13:39:21 [51272] INFO .. PKCS7: . . . . . 0
2017-10-16 13:39:21 [51272] INFO لم يتم العثور على مفاتيح ذات بصمة (حسنًا)
2017-10-16 13:39:21 [51272] INFO ################################
مثال (تم العثور على ثغرات):
التشغيل التكراري على جميع مفاتيح SSH الخاصة بي وملف known_hosts:
$> roca-detect ~/.ssh
<b>2017-10-16 13:39:21 [51272] WARNING تم العثور على بصمة في الشهادة</b>
...
2017-10-16 13:39:21 [51272] INFO ### الملخص ####################
2017-10-16 13:39:21 [51272] INFO السجلات المختبرة: 92
2017-10-16 13:39:21 [51272] INFO .. شهادات PEM: . . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات DER: . . . 0
2017-10-16 13:39:21 [51272] INFO .. ملفات مفاتيح RSA: . 16
2017-10-16 13:39:21 [51272] INFO .. مفاتيح PGP الرئيسية: 0
2017-10-16 13:39:21 [51272] INFO .. إجمالي مفاتيح PGP: 0
2017-10-16 13:39:21 [51272] INFO .. مفاتيح SSH: . . . 76
2017-10-16 13:39:21 [51272] INFO .. مفاتيح APK: . . . 0
2017-10-16 13:39:21 [51272] INFO .. مفاتيح JSON: . . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات LDIFF: . . 0
2017-10-16 13:39:21 [51272] INFO .. شهادات JKS: . . . 0
2017-10-16 13:39:21 [51272] INFO .. PKCS7: . . . . . 0
2017-10-16 13:39:21 [51272] INFO تم العثور على مفاتيح ذات بصمة: 1
2017-10-16 13:39:21 [51272] INFO تحذير: ثغرة محتملة
2017-10-16 13:39:21 [51272] INFO ################################
من أجل اختبار مفتاح PGP الخاص بك، يمكنك تصديره من عميل البريد الإلكتروني الخاص بك أو تنزيله من خادم مفاتيح PGP مثل https://pgp.mit.edu/
يمكنك أيضًا استخدام أداة سطر الأوامر gpg لتصدير مفتاحك العام:
gpg --armor --export [email protected] > mykey.asc
تقوم أداة الكشف باستخراج معلومات حول المفتاح يمكن عرضها:
roca-detect.py --dump --flatten --indent ~/.ssh/
يكتشف roca-detect-tls الشهادات من منافذ TLS/SSL البعيدة. قم بتوفير ملف يحتوي على قائمة من إدخالات address:port مفصولة بأسطر جديدة واستخدم هذا الملف كمدخل.
مثال لملف: tls_list.txt
github.com:443
google.com:443
internal.example.com:8080
ثم قم بتشغيل:
roca-detect-tls tls_list.txt
من الممكن إنشاء معاملات تجتاز اختبار بصمة المعاملات ولكنها في الواقع لا تحتوي على البنية التي تستخدمها خوارزمية التحليل. لا يضعها اختبار معاملات dlog كإيجابية.
يوصى عادةً بإنشاء بيئة Python افتراضية جديدة للمشروع:
virtualenv ~/pyenv
source ~/pyenv/bin/activate
pip install --upgrade pip
pip install --upgrade --find-links=. .
لقد اختبرنا الأداة مع Python 2.7.12 وهي تعمل (انظر Travis لمزيد من المعلومات). لدينا تقارير تفيد بأن الإصدارات الأقل (<=2.6) لا تعمل بشكل صحيح، لذلك نوصي بشدة باستخدام Python 2.7 محدثة.
استخدم pyenv لتثبيت إصدار Python جديد محليًا إذا لم تتمكن / لا ترغب في تحديث نظام Python.
يقوم داخليًا بتنزيل مصادر Python وتثبيتها في ~/.pyenv.
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL
pyenv install 2.7.13
pyenv local 2.7.13
تعمل أدوات الكشف أيضًا مع Python 3.4+
قم بتشغيل حاوية Docker لتجنب عدم تناسق البيئة. يمكن مراجعة مصدر Dockerfile على https://hub.docker.com/r/unnawut/roca-detect/.
docker run --rm -v /path/to/your/keys:/keys --network none unnawut/roca-detect
تأكد من استخدام علامات --rm و --network none لتعطيل اتصال الشبكة للحاوية وحذف الحاوية بعد التشغيل.
الكود مرخص بموجب ترخيص MIT المتساهل.
نظرًا لوجود طلبات على الترخيص المزدوج بموجب ترخيص Apache 2.0 (بسبب بعض الشكوك حول التوافق)، فإننا نرخص الكود أيضًا بموجب ترخيص Apache 2.0.
اختر الترخيص الذي يناسبك بشكل أفضل، إما MIT أو Apache 2.0.
يحتوي هذا القسم على روابط لمستودعات GIT مختلفة تحتوي على منافذ لغوية