
rhabdomancer v0.10.0
भेद्यता अनुसंधान सहायक जो बाइनरी फ़ाइल में संभावित रूप से असुरक्षित API फ़ंक्शंस के कॉल्स का पता लगाता है।
rhabdomancer
"शोषणयोग्य बग तक का रास्ता अशोषणयोग्य बगों से पटा हुआ है।"
-- Mark Dowd
Rhabdomancer एक अत्यंत तेज़ IDA हेडलेस प्लगइन है जो किसी बाइनरी फ़ाइल में संभावित रूप से असुरक्षित API फ़ंक्शनों के कॉल का पता लगाता है। ऑडिटर इन उम्मीदवार बिंदुओं से बैकट्रेस करके ऐसे मार्ग खोज सकते हैं जो अविश्वसनीय इनपुट तक पहुँच की अनुमति देते हैं।

विशेषताएँ
- IDA 9.x और idalib-rs Rust बाइंडिंग्स के कारण अत्यंत तेज़, हेडलेस उपयोगकर्ता अनुभव।
- IDA द्वारा कार्यान्वित किसी भी आर्किटेक्चर के लिए कंपाइल किए गए C/C++ बाइनरी लक्ष्यों का समर्थन।
- खराब API फ़ंक्शन कॉल स्थान stdout पर प्रिंट किए जाते हैं और IDB में चिह्नित किए जाते हैं।
- IDA द्वारा पहचाने गए लाइब्रेरी कोड में कॉल स्थान (जैसे, FLIRT सिग्नेचर से मेल खाने वाला स्टैटिकली लिंक्ड रनटाइम)
(lib)के रूप में लेबल किए जाते हैं। - स्टब्स के माध्यम से कॉल (जैसे, ELF बाइनरी के
.pltएंट्री या PE और Mach-O बाइनरी के इम्पोर्ट स्टब्स, जो थंक्स के रूप में सूचीबद्ध होते हैं) को उनके कॉलर्स तक ट्रेस किया जाता है। - ELF बाइनरी में, एक फ़ंक्शन को जानबूझकर समान कॉल स्थानों के साथ दो बार सूचीबद्ध किया जाता है: एक बार इसके
.pltस्टब के रूप में (थंक के रूप में चिह्नित) और एक बार इसके इम्पोर्ट के रूप में। प्रत्येक कॉल स्थान IDB में केवल एक बार चिह्नित किया जाता है।
- IDA द्वारा पहचाने गए लाइब्रेरी कोड में कॉल स्थान (जैसे, FLIRT सिग्नेचर से मेल खाने वाला स्टैटिकली लिंक्ड रनटाइम)
- ज्ञात खराब API फ़ंक्शन ऑडिट कार्य को प्राथमिकता देने में मदद करने के लिए खराबी के स्तरों में समूहीकृत हैं।
- [BAD 0] उच्च प्राथमिकता - वे फ़ंक्शन जिन्हें आम तौर पर असुरक्षित माना जाता है।
- [BAD 1] मध्यम प्राथमिकता - रोचक फ़ंक्शन जिन्हें असुरक्षित उपयोग मामलों के लिए जाँचा जाना चाहिए।
- [BAD 2] निम्न प्राथमिकता - इन फ़ंक्शनों से जुड़े कोड पथों की सावधानीपूर्वक जाँच की जानी चाहिए।
- ज्ञात खराब API फ़ंक्शनों की सूची अंतर्निहित है और इसे
conf/rhabdomancer.tomlपर आधारित कॉन्फ़िगरेशन फ़ाइल के साथ आसानी से अनुकूलित किया जा सकता है। - फ़ंक्शन नाम इन सजावटों के बिना मिलाए जाते हैं: अग्रणी बिंदु और अंडरस्कोर (जैसे,
_strcpy), लाइब्रेरी उपनामों के उपसर्ग (जैसे, Universal CRT में__o_malloc, glibc में__libc_systemऔर__GI___snprintf), और, केवल स्टब्स और ऐसे उपनामों के लिए, वह संख्यात्मक प्रत्यय जो IDA पहले से उपयोग में आने वाले नामों में जोड़ता है (जैसे,memset_0)।
[!NOTE] फ़ोर्टिफाइड फ़ंक्शन (जैसे,
__strcpy_chk, जिसका उपयोग_FORTIFY_SOURCEके साथ बिल्ड करते समयstrcpyके बजाय किया जाता है) जानबूझकर मिलाए नहीं जाते, क्योंकि वे सूचीबद्ध फ़ंक्शनों के चेक किए गए संस्करण हैं। उनके कॉल को भी चिह्नित करने के लिए, उन्हें स्पष्ट रूप से कस्टम कॉन्फ़िगरेशन में जोड़ें (जैसे,"__strcpy_chk"कोstrcpyके समान प्राथमिकता के साथ)।
लेख
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
यह भी देखें
- https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java
- https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib
- https://github.com/idalib-rs/idalib
- https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html
इंस्टॉल करना
नवीनतम रिलीज़ प्राप्त करने का सबसे आसान तरीका crates.io के माध्यम से है:
- IDA डाउनलोड करें, इंस्टॉल करें और कॉन्फ़िगर करें (देखें https://hex-rays.com/ida-pro)।
- LLVM/Clang इंस्टॉल करें (देखें https://rust-lang.github.io/rust-bindgen/requirements.html)।
- Linux/macOS पर, निम्नानुसार इंस्टॉल करें:
Windows पर, इसके बजाय, निम्नलिखित कमांड का उपयोग करें:export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo install rhabdomancer --locked$env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo install rhabdomancer --locked
संकलन
वैकल्पिक रूप से, आप स्रोत से बना सकते हैं:
- IDA डाउनलोड, इंस्टॉल और कॉन्फ़िगर करें (देखें https://hex-rays.com/ida-pro)।
- LLVM/Clang इंस्टॉल करें (देखें https://rust-lang.github.io/rust-bindgen/requirements.html)।
- Linux/macOS पर, इस प्रकार संकलित करें:
Windows पर, इसके बजाय, निम्नलिखित कमांड का उपयोग करें:git clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo build --release --lockedgit clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer $env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo build --release --locked
उपयोग
- सुनिश्चित करें कि IDA एक वैध लाइसेंस के साथ ठीक से कॉन्फ़िगर किया गया है।
- वैकल्पिक रूप से ज्ञात बुरे API फ़ंक्शनों की सूची को अनुकूलित करें:
conf/rhabdomancer.tomlकी प्रतिलिपि बनाएँ (इसकी सटीक अंतर्निहित सूची के लिए वह टैग चुनें जो आपके इंस्टॉल किए गए संस्करण से मेल खाता हो), प्रतिलिपि को संपादित करें, औरRHABDOMANCER_CONFIGपर्यावरण चर को उसके पथ पर सेट करें। फ़ाइल मेंhigh,medium, औरlowसरणियाँ परिभाषित होनी चाहिए, और कोई अन्य कुंजी नहीं। अन्यथा, अंतर्निहित सूची का उपयोग किया जाता है, जो बिल्ड समय परconf/rhabdomancer.tomlसे बाइनरी में एम्बेड की जाती है (उस फ़ाइल को संपादित करने के लिए पुनर्निर्माण आवश्यक है)। - सुनिश्चित करें कि यदि आपकी IDA स्थापना किसी गैर-मानक स्थान में है तो
IDADIRपर्यावरण चर सेट है। - निम्नानुसार चलाएँ:
कोई भी मौजूदाrhabdomancer <binary_file>.i64IDB फ़ाइल अपडेट की जाएगी; अन्यथा, एक नई IDB फ़ाइल बनाई जाएगी। - परिणामी
.i64IDB फ़ाइल को IDA के साथ खोलें। View>Open subviews>Bookmarksचुनें- अपने परिणामों का आनंद लें जो सुविधाजनक रूप से एक IDA विंडो में एकत्र किए गए हैं।
[!NOTE] Rhabdomancer चिह्नित कॉल स्थानों पर टिप्पणियाँ भी जोड़ता है। बुकमार्क और टिप्पणियाँ दोनों को
[BAD n] <function_name>के रूप में टैग किया जाता है, जहाँnप्राथमिकता स्तर है (0 = उच्च, 1 = मध्यम, 2 = निम्न), ताकि स्क्रिप्ट्स उनके लिए IDB में खोज कर सकें। यह प्रारूप रिलीज़ के अनुसार स्थिर है।
संगतता
केवल नवीनतम IDA रिलीज़ आधिकारिक रूप से समर्थित है, लेकिन पुराने संस्करण भी काम कर सकते हैं। निम्नलिखित तालिका प्रत्येक IDA संस्करण के लिए नवीनतम संगत रिलीज़ का सारांश प्रस्तुत करती है:
| IDA संस्करण | नवीनतम संगत रिलीज़ |
|---|---|
| v9.0.240925 | v0.2.4 |
| v9.0.241217 | v0.3.5 |
| v9.1.250226 | v0.6.2 |
| v9.2.250908 | v0.7.6 |
| v9.3.260213 | v0.8.1 |
| v9.3.260327 | v0.9.0 |
| v9.3.260421 | v0.9.3 |
| v9.4.260714 | वर्तमान रिलीज़ |
| v9.4.260915 | वर्तमान रिलीज़ |