
ROCA: Infineon RSA कुंजी भेद्यता
यह उपकरण ACM CCS 2017 सम्मेलन पेपर #124 Return of the Coppersmith’s Attack: Practical Factorization of Widely Used RSA Moduli से संबंधित है।
यह आपको सार्वजनिक 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, मॉड्यूलस हो सकता है
a) base64 एन्कोडेड संख्या, b) हेक्स कोडित संख्या, c) दशमलव कोडित संख्या;binary:: में समाप्त होने वाले किसी भी फ़ील्ड को X509 प्रमाणपत्र के रूप में डिकोड करने का प्रयास किया जाता है।--jks-pass-file के साथ और अधिक निर्दिष्ट करें।पहचान उपकरण जानबूझकर आसान एकीकरण/हस्तक्षेप के लिए एक-फ़ाइल कार्यान्वयन है।
गलत सकारात्मक पहचान दरें:
असतत लघुगणक डिटेक्टर केवल Python कोड में लागू किया गया है, डिफ़ॉल्ट पहचान विधि के रूप में उपयोग किया जाता है।
Java और C# कोड पोर्ट मूल प्रकाशन के बाद से अनुरक्षित नहीं हैं और हम इन डिटेक्टरों को अधिक सटीक विधि में अपग्रेड करने की योजना नहीं बनाते हैं। हालाँकि PR का स्वागत है!
ऑनलाइन जाँचकर्ता असतत लघुगणक डिटेक्टर एल्गोरिथ्म का उपयोग करता है।
डिटेक्टर लाइब्रेरी + उपकरण को 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] चेतावनी प्रमाणपत्र में फ़िंगरप्रिंट मिला</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.13 के साथ परीक्षण किया और यह काम करता है (अधिक जानकारी के लिए Travis देखें)। हमारे पास रिपोर्ट हैं जो कहती हैं कि निचले संस्करण (<=2.6) ठीक से काम नहीं करते हैं इसलिए हम अद्यतित Python 2.7 का उपयोग करने की अत्यधिक अनुशंसा करते हैं।
यदि आप सिस्टम Python को अपडेट नहीं कर सकते/नहीं चाहते हैं तो स्थानीय रूप से एक नया Python संस्करण स्थापित करने के लिए pyenv का उपयोग करें।
यह आंतरिक रूप से 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 रिपॉजिटरी के लिंक हैं