
IPMI सामग्री DARPA कार्य से
मैंने IPMI को explore करने के लिए कुछ सॉफ़्टवेयर लिखा; यहाँ कुछ परिणाम दिए गए हैं। मैंने सामान्य detect, get data, और audit जैसे चक्र को करने के बारे में सोचा। इनमें से प्रत्येक अपने आप में काफ़ी दिलचस्प समस्या निकली, कम से कम मेरे लिए।
**BTW/FYI ** - मैंने IPMI को explore करने के लिए एक नया टूल जारी किया - https://github.com/zenfish/zipmi - साथ ही Qemu के अंतर्गत BMCs को virtual systems के रूप में चलाने के लिए Qemu recipies/images/etc. का एक सेट https://github.com/zenfish/zbmc पर।
http://fish2.com/ipmi से papers n things
यहाँ एक छोटा Perl प्रोग्राम है जो किसी remote BMC पर किसी account का अनुमान लगाने, उसका hash निकालने, और फिर उसका (HMAC hashed) पासवर्ड क्रैक करने का प्रयास करता है। मैंने इस पर जिज्ञासुओं के लिए एक छोटा सा लेख लिखा है। भारी टिप्पणियों के साथ, यह कुछ उपयोगिता प्रदान कर सकता है।
IPMI spec कहता है कि आप बिना किसी authentication के किसी remote system का cipher प्राप्त कर सकते हैं, लेकिन मुझे ऐसा कोई टूल नहीं पता जो वास्तव में ऐसा करता हो (वे सभी auth की आवश्यकता रखते हैं, हालाँकि निश्चित रूप से आप चाहें तो raw hex bytes इनपुट कर सकते हैं!) इसलिए मैंने ऐसा करने के लिए यह छोटा सा टूल लिखा; यह अधिकतर ipmitool के output का अनुसरण करने का प्रयास करता है; ऐसा करते हुए मुझे विश्वास है कि मुझे उस utility में एक bug मिला (अंतिम पंक्ति में कभी-कभी systems कुछ garbage उत्सर्जित करते हैं जिसे गलत तरीके से समझा जाता प्रतीत होता है), लेकिन कौन जाने, मेरे पास परीक्षण के लिए पर्याप्त systems नहीं हैं। खैर... ipmi-get-ciphers.py।
अगर कुछ नहीं तो, Cipher0 systems को पहचानने के लिए उपयोगी (ध्यान दें - यह केवल उन ciphers की ओर संकेत करता है जो समर्थित हैं - इसका मतलब यह नहीं है कि वे वास्तव में चालू हैं), लेकिन जंगल में दिलचस्प चीज़ें मौजूद हैं।
यहाँ दो प्रोग्राम हैं, एक सरल Python remote prober है (मैं Perl से घृणा करने लगा हूँ, आपको बता दूँ) और दूसरा जो FreeIPMI की utilities का उपयोग करके credentialed configuration data प्राप्त करता है।
एक छोटा python प्रोग्राम (50% से अधिक inline comments, 2.5k gzip'd) जो BMC को एक single packet भेजता है और response पर विचार करता है। कोई पूछ सकता है कि केवल एक single packet से आप क्या कर सकते हैं? शुरुआत के लिए, IPMI के लिए 10+ विभिन्न security tests। खैर, शुरुआत के लिए और अंत के लिए, यह केवल एक packet है :) काम करने के लिए python, एक BMC और UDP port 623 तक एक खुला path आवश्यक है। उपयोग सरल है "ipmi-get-auth.py target"।
ipmi-get-auth.py /
एक बहुत छोटा विवरण
इसे चरम तक ले जाते हुए... खैर, यहाँ ऊपर का एक तरह का mega संस्करण है जो इसे सभी channels, सभी privs, सभी... खैर, आप समझ गए। monomaniacal लोगों के लिए (comments पढ़ें या मेरा लिखा post पढ़ें कि यह जो करता है वह क्यों करता है!)
mega_chan.py /
Mega mega mega ... chan chan chan...
और यहाँ एक सरल प्रोग्राम है जो किसी system को Get Device ID packet (IPMI v 2 spec का p250 देखें) भेजता है। सिद्धांत रूप में, यह बिना authentication के काम करना चाहिए। एक छोटे सर्वेक्षण में लगभग 90% systems ने इसका उत्तर दिया (हालाँकि सभी ने valid info के साथ नहीं!) आप कभी-कभी vendor और अन्य जानकारी, जैसे model numbers इत्यादि, प्राप्त कर सकते हैं, लेकिन अधिक दिलचस्प बात वास्तव में एक unique ID प्राप्त करना है, जो पारंपरिक रूप से net के माध्यम से प्राप्त करना कठिन काम है।
get-ipmi-guid.py /
Get Device ID
Supermicro के BMC से password file disclosure को लेकर कुछ समस्याएँ रही हैं - उदाहरण के लिए, यह और अन्य write-ups देखें:
a-penetration-testers-guide-to-ipmi
इस स्क्रिप्ट का उपयोग करने के लिए बस कहें:
dump_SM.py password_file
मेरे लिए काम करता है, कोई वारंटी निहित नहीं, गारंटीकृत, आदि।
ठीक है, अगर आप UDP पोर्ट 623 से बात कर सकते हैं, तो यह पता लगाना काफी आसान है कि कोई रिमोट सिस्टम IPMI चला रहा है या नहीं। हालाँकि, जब तक आप किसी डेटा सेंटर के अंदर नहीं हैं, अधिकांश लोग UDP को ब्लॉक कर देते हैं। और भले ही वे न करें... UDP स्कैनिंग उतनी ही धीमी है जितनी आप कल्पना कर सकते हैं। इसलिए मैं वर्तमान में दो बुनियादी विधियों का उपयोग कर रहा हूँ, प्रतिष्ठित Nmap और ipmiping (FreeIPMI Gnu टूल्स से) का लाभ उठाते हुए। सबसे आसान काम यह है:
</p> <p>
चूँकि Nmap बड़े पैमाने के नेटवर्क को स्कैन करने में ipmiping की तुलना में कहीं अधिक कुशल है,
इसलिए इस विधि का उपयोग केवल तब किया जाता है जब Nmap कहे कि किसी होस्ट का
UDP 623 खुला है।
</p> <p>
अच्छे या बुरे के लिए यह पोर्ट अक्सर ब्लॉक होता है, इसलिए अधिकांश समय
अन्य विधियों से परोक्ष रूप से यह पता लगाने की अधिक संभावना होती है कि
IPMI चल रहा है या नहीं।
</p> <p>
पोर्ट्स को उनकी संकेतक क्षमता और इस बात के आधार पर भार दिया जाता है कि
Nmap उन्हें खुला, फ़िल्टर्ड, या अन्य स्थितियों में पाता है या नहीं।
</p> <p>
Nmap उन सेवाओं के बैनर भी दिखा सकता है जिनसे कनेक्ट किया गया है। मैं
लक्ष्यों की तलाश के लिए रेगुलर एक्सप्रेशन का उपयोग करता हूँ - उदाहरण के लिए स्ट्रिंग्स
"iLO" और "DRAC" अच्छे संकेतक हैं कि कोई सिस्टम HP की Integrated Lights Out सेवा,
या iLO चला रहा हो सकता है।
</p> <p>
<strong>नोट:</strong> वर्तमान में मैं ब्रॉडकास्ट
पिंग विधि का उपयोग नहीं करता (जो उस सबनेट से जल्दी गुज़रने का बहुत तेज़ तरीका है
जिसमें आप हैं); इसकी प्रभावशीलता पर मेरे पास बस कोई डेटा नहीं है; जब यह काम करती है तो बहुत तेज़ होती है
लेकिन मुझे नहीं लगा कि यह मनमाने स्कैन के नियंत्रण और विश्वसनीयता की अनुमति देती है।
मेरे तीन में से दो सिस्टम (Dell और HP) ने RMCP पिंग का जवाब दिया। किसी ने भी
idiscover (ipmiutil discover) द्वारा ब्रॉडकास्ट पिंग का जवाब नहीं दिया। हालाँकि, सभी ने
नीचे दिए गए मेरे Python ऑडिट टूल का जवाब दिया।
</p> <p>