
ROP गैजेट डिटेक्शन के लिए एक ML-संचालित ग्राफ-आधारित बहु-आर्किटेक्चर दृष्टिकोण
LCSAJdump एक स्थैतिक विश्लेषण फ्रेमवर्क है जो रिटर्न-ओरिएंटेड प्रोग्रामिंग (ROP) और जंप-ओरिएंटेड प्रोग्रामिंग (JOP) गैजेट खोजने के लिए डिज़ाइन किया गया है। पारंपरिक स्कैनर के विपरीत, LCSAJdump आर्किटेक्चर-अज्ञेय है और सामान्य रैखिक उपकरणों के लिए अदृश्य कमजोरियों को उजागर करने के लिए ग्राफ़-आधारित दृष्टिकोण का उपयोग करता है।
सामान्य ROP स्कैनर बाइनरी के निष्पादन योग्य बाइट्स पर एक रैखिक "स्लाइडिंग-विंडो" दृष्टिकोण का उपयोग करते हैं। यह विधि व्यवस्थित रूप से छाया गैजेट (Shadow Gadgets) की पहचान करने में विफल रहती है: निष्पादन श्रृंखलाएं जो बिना शर्त जंप या सशर्त शाखाओं द्वारा जुड़े गैर-सन्निहित मेमोरी ब्लॉकों को पार करती हैं।
LCSAJdump LCSAJ (लीनियर कोड सीक्वेंस एंड जंप) विश्लेषण के माध्यम से कंट्रोल-फ्लो ग्राफ़ (CFG) का पुनर्निर्माण करके इस सीमा को दूर करता है। बाइनरी को बेसिक ब्लॉकों के एक निर्देशित ग्राफ़ के रूप में मॉडल करके, उपकरण पहचानता है:
.text अनुभाग को LCSAJ बेसिक ब्लॉकों में विभाजित करता है और एक कस्टम-निर्मित रिवर्स कंट्रोल-फ्लो ग्राफ़ (हल्का आसन्नता प्रतिनिधित्व, कोई भारी ग्राफ़ निर्भरता नहीं) के माध्यम से प्रवाह संबंधों का पुनर्निर्माण करता है।--depth हॉप के भीतर गैजेट टेल से पहुंच योग्य नोड्स को बनाए रखता है, जिससे बड़ी बाइनरी (जैसे, libc) पर मेमोरी और बिल्ड समय में भारी कमी आती है, जबकि समान परिणाम देता है।(देखें बेंचमार्क)
LCSAJdump को सार्वभौमिक बनाने के लिए डिज़ाइन किया गया है। वर्तमान में समर्थित:
config.py में नई प्रोफाइल परिभाषित करके आसानी से कार्यान्वित किया जा सकता है।pip install lcsajdump
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt
LCSAJdump सटीक बाइनरी विश्लेषण के लिए एक शक्तिशाली CLI प्रदान करता है:
मानक विश्लेषण (डिफ़ॉल्ट RISC-V):
python LCSAJdump.py <path_to_binary>
उन्नत विश्लेषण (आर्किटेक्चर और आउटपुट फ़ाइल निर्दिष्ट करना):
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
JSON के रूप में निर्यात करें बैड-चार फ़िल्टर के साथ:
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <path_to_binary>
नोट: JSON को फ़ाइल में सहेजने के लिए
--jsonके बाद-oका उपयोग करें।--jsonके बिना,-oसादा टेक्स्ट सहेजता है।
सादा टेक्स्ट आउटपुट सहेजें:
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
सभी निष्पादन योग्य अनुभागों का विश्लेषण करें:
lcsajdump --all-exec -d 25 -k 10 -l 30 <path_to_binary>
सख्ती से एल्गोरिथमिक रैंकिंग बलपूर्वक लागू करें (ML को बायपास करें):
lcsajdump --algo <path_to_binary>
LCSAJdump benchmarkTests/ निर्देशिका में स्थित एक कठोर, क्रमिक रूप से मान्य परीक्षण सूट द्वारा समर्थित है।
सिमैंटिक फीचर इंजीनियरिंग के 14 प्रमुख पुनरावृत्तियों के माध्यम से, हाइब्रिड मॉडल ने विशुद्ध रूप से वाक्यात्मक ह्यूरिस्टिक के बजाय वास्तविक मेमोरी साइड-इफेक्ट्स (angr प्रतीकात्मक निष्पादन के माध्यम से निकाले गए) के आधार पर गैजेट को अलग करना सीख लिया है।
समूह-जागरूक 5-फोल्ड क्रॉस-वैलिडेशन (प्रशिक्षण के दौरान परीक्षण बाइनरी कभी नहीं देखी गई) के साथ मूल्यांकन किया गया, रैंकर NDCG@1 = 0.914 ± 0.047 और NDCG@10 = 0.922 ± 0.052 प्राप्त करता है, जिसका अर्थ है कि सबसे उपयोगी गैजेट लगातार आउटपुट के शीर्ष पर रखे जाते हैं। दो-चरणीय इंजन सफलतापूर्वक स्वच्छ स्टैक-पॉपिंग अनुक्रमों और ret2csu-जैसे कॉल को प्राथमिकता देता है, जबकि क्रैश-प्रोन फिक्स्ड-ऑफ़सेट जंप को भारी दंडित करता है जो पारंपरिक स्थैतिक स्कैनर को धोखा देते हैं।
रिपॉजिटरी को अंतिम उपयोगकर्ताओं और ML शोधकर्ताओं दोनों का समर्थन करने के लिए संरचित किया गया है।
lcsajdump/ml_study/ निर्देशिका में मॉडलों को प्रशिक्षित करने के लिए उपयोग की जाने वाली पूर्ण पाइपलाइन शामिल है:
build_dataset.py: CTF बाइनरी के एक कोर्पस से संरचनात्मक और शब्दार्थ सुविधाएं निकालता है।train_model.py: LightGBM LambdaRank मॉडल को प्रशिक्षित करता है और .pkl मॉडल आउटपुट करता है।kfold_cv.py: K-Fold क्रॉस वैलिडेशन का उपयोग करके डेटासेट को मान्य करता है।फ्रेमवर्क नए कार्यान्वयन के लिए खुला है। कोई नया आर्किटेक्चर जोड़ने के लिए:
lcsajdump/core/config.py खोलें।ARCH_PROFILES शब्दकोश में एक नई प्रोफाइल जोड़ें, वांछित आर्किटेक्चर (जैसे, x86_64) के लिए जंप मेनमोनिक, रिटर्न मेनमोनिक और रजिस्टर को परिभाषित करें।यह प्रोजेक्ट MIT लाइसेंस के तहत जारी किया गया है। विवरण के लिए LICENSE फ़ाइल देखें।
प्रोजेक्ट वेब पेज पर जाएं: LCSAJdump वेब पेज
| फ़्लैग | प्रकार | डिफ़ॉल्ट | विवरण |
|---|
-a, --arch | टेक्स्ट | auto | लक्ष्य आर्किटेक्चर (auto, riscv64, x86_64, arm64). ELF हेडर से स्वतः पता लगाया गया. |
-d, --depth | पूर्णांक | 20 | LCSAJ ब्लॉकों में अधिकतम खोज गहराई। श्रृंखला की लंबाई नियंत्रित करता है. |
-k, --darkness | पूर्णांक | 5 | प्रूनिंग थ्रेशोल्ड — प्रति नोड अधिकतम विज़िट। उच्च = अधिक गैजेट, धीमा स्कैन. |
-l, --limit | पूर्णांक | 10 | आउटपुट में प्रदर्शित करने के लिए गैजेट की अधिकतम संख्या. |
-s, --min-score | पूर्णांक | 0 | परिणामों में प्रकट होने के लिए गैजेट के लिए न्यूनतम ह्यूरिस्टिक स्कोर. |
-i, --instructions | पूर्णांक | 15 | एकल LCSAJ नोड में निहित निर्देशों की अधिकतम संख्या. |
-v, --verbose | ध्वज | — | विस्तृत प्रति-गैजेट परिणामों के लिए वर्बोज़ आउटपुट सक्षम करें. |
-o, --output | पथ | — | आउटपुट को फ़ाइल में लिखें। डिफ़ॉल्ट रूप से सादा टेक्स्ट; JSON आउटपुट के लिए --json के साथ उपयोग करें. |
-b, --bad-chars | टेक्स्ट | — | गैजेट पतों से फ़िल्टर करने के लिए हेक्स बाइट्स (जैसे "000a0d"). |
--json | ध्वज | — | गैजेट को संरचित JSON के रूप में आउटपुट करें। फ़ाइल में सहेजने के लिए -o के साथ संयोजित करें. |
--all-exec | ध्वज | — | सभी निष्पादन योग्य अनुभागों का विश्लेषण करें, केवल .text नहीं. |
-al, --algo | ध्वज | — | सख्ती से एल्गोरिथमिक रैंकिंग का उपयोग करें (ML को बायपास करें). |
--version | ध्वज | — | स्थापित संस्करण दिखाएं और बाहर निकलें. |
--help | ध्वज | — | सहायता संदेश दिखाएं और बाहर निकलें. |