
भेद्यता अनुसंधान सहायक जो बाइनरी फ़ाइल में संभावित रूप से असुरक्षित API फ़ंक्शंस के कॉल्स का पता लगाता है।
# rhabdomancer [](https://github.com/0xdea/rhabdomancer) [](https://crates.io/crates/rhabdomancer) [](https://crates.io/crates/rhabdomancer) [](https://hex-rays.com/ida-pro) [](https://twitter.com/0xdea) [](https://infosec.exchange/@raptor) [](https://github.com/0xdea/rhabdomancer/actions/workflows/build.yml) [](https://github.com/0xdea/rhabdomancer/actions/workflows/doc.yml) > "शोषणयोग्य बग तक का रास्ता अशोषणयोग्य बगों से पटा हुआ है।" > > -- 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 में केवल एक बार चिह्नित किया जाता है। - ज्ञात खराब 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](https://crates.io/crates/rhabdomancer) के माध्यम से है: 1. IDA डाउनलोड करें, इंस्टॉल करें और कॉन्फ़िगर करें (देखें <https://hex-rays.com/ida-pro>)। 2. LLVM/Clang इंस्टॉल करें (देखें <https://rust-lang.github.io/rust-bindgen/requirements.html>)। 3. Linux/macOS पर, निम्नानुसार इंस्टॉल करें: ```sh export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo install rhabdomancer --locked ``` Windows पर, इसके बजाय, निम्नलिखित कमांड का उपयोग करें: ```powershell $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 ``` ## संकलन वैकल्पिक रूप से, आप [स्रोत](https://github.com/0xdea/rhabdomancer) से बना सकते हैं: 1. IDA डाउनलोड, इंस्टॉल और कॉन्फ़िगर करें (देखें <https://hex-rays.com/ida-pro>)। 2. LLVM/Clang इंस्टॉल करें (देखें <https://rust-lang.github.io/rust-bindgen/requirements.html>)। 3. Linux/macOS पर, इस प्रकार संकलित करें: ```sh 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 --locked ``` Windows पर, इसके बजाय, निम्नलिखित कमांड का उपयोग करें: ```powershell git 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 ``` ## उपयोग 1. सुनिश्चित करें कि IDA एक वैध लाइसेंस के साथ ठीक से कॉन्फ़िगर किया गया है। 2. वैकल्पिक रूप से ज्ञात बुरे API फ़ंक्शनों की सूची को अनुकूलित करें: [`conf/rhabdomancer.toml`](https://github.com/0xdea/rhabdomancer/blob/master/conf/rhabdomancer.toml) की प्रतिलिपि बनाएँ (इसकी सटीक अंतर्निहित सूची के लिए वह टैग चुनें जो आपके इंस्टॉल किए गए संस्करण से मेल खाता हो), प्रतिलिपि को संपादित करें, और `RHABDOMANCER_CONFIG` पर्यावरण चर को उसके पथ पर सेट करें। फ़ाइल में `high`, `medium`, और `low` सरणियाँ परिभाषित होनी चाहिए, और कोई अन्य कुंजी नहीं। अन्यथा, अंतर्निहित सूची का उपयोग किया जाता है, जो बिल्ड समय पर `conf/rhabdomancer.toml` से बाइनरी में एम्बेड की जाती है (उस फ़ाइल को संपादित करने के लिए पुनर्निर्माण आवश्यक है)। 3. सुनिश्चित करें कि यदि आपकी IDA स्थापना किसी गैर-मानक स्थान में है तो `IDADIR` पर्यावरण चर सेट है। 4. निम्नानुसार चलाएँ: ```sh rhabdomancer <binary_file> ``` कोई भी मौजूदा `.i64` IDB फ़ाइल अपडेट की जाएगी; अन्यथा, एक नई IDB फ़ाइल बनाई जाएगी। 5. परिणामी `.i64` IDB फ़ाइल को IDA के साथ खोलें। 6. `View` > `Open subviews` > `Bookmarks` चुनें 7. अपने परिणामों का आनंद लें जो सुविधाजनक रूप से एक 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 | वर्तमान रिलीज़ | > [!NOTE] > अतिरिक्त जानकारी के लिए [idalib-rs](https://github.com/idalib-rs/idalib) दस्तावेज़ देखें। ## श्रेय इस परियोजना के विकास को निम्नलिखित संगठनों द्वारा समर्थन दिया गया है: - [HN Security](https://hnsecurity.it) - [Hex-Rays](https://hex-rays.com) उनके [Contributor Program](https://hex-rays.com/contributor-program) के माध्यम से ## परिवर्तन लॉग - [CHANGELOG.md](https://github.com/0xdea/rhabdomancer/blob/master/CHANGELOG.md) ## करने योग्य - ज्ञात बुरे API फ़ंक्शन सूची को और समृद्ध करें (देखें <https://github.com/0xdea/semgrep-rules>)। - `.plt` खंडों के बाहर थंक्स के माध्यम से कॉल का अनुसरण करें (जैसे, MSVC incremental-linking `j_` थंक्स)। - IDA द्वारा पहचाने गए लाइब्रेरी कोड में कॉल स्थानों को चिह्नित करना छोड़ने पर विचार करें (अभी केवल `(lib)` लेबल किया गया है)। - स्वचालित पार्सिंग और विश्लेषण की सुविधा के लिए क्रमबद्ध आउटपुट लागू करें। - [VulFi](https://github.com/Accenture/VulFi) और [VulnFanatic](https://github.com/Martyx00/VulnFanatic) की शैली में एक बुनियादी नियमसेट लागू करें।