
LAVA: बड़े पैमाने पर स्वचालित भेद्यता जोड़ना
वर्तमान में बग-खोज उपकरणों का मूल्यांकन और सुधार करना मुश्किल है क्योंकि ग्राउंड ट्रुथ कॉर्पोरा (यानी, ऐसा सॉफ्टवेयर जिसमें ज्ञात बग और उन्हें ट्रिगर करने वाले इनपुट हों) की कमी है। LAVA इस समस्या को सॉफ्टवेयर में स्वचालित रूप से बग डालकर हल करने का प्रयास करता है। प्रत्येक LAVA बग के साथ एक इनपुट होता है जो इसे ट्रिगर करता है, जबकि सामान्य इनपुट के ऐसा करने की बहुत कम संभावना होती है। ये कमजोरियाँ कृत्रिम हैं, लेकिन हम तर्क देते हैं कि ये अभी भी यथार्थवादी हैं, इस अर्थ में कि ये प्रोग्राम में गहराई से अंतर्निहित हैं और वास्तविक इनपुट द्वारा ट्रिगर होती हैं। हमारा काम मांग पर बड़े ग्राउंड-ट्रुथ भेद्यता कॉर्पोरा उत्पन्न करने के लिए एक दृष्टिकोण का आधार बनता है, जो कठोर उपकरण मूल्यांकन को सक्षम बनाता है और उपकरण डेवलपर्स के लिए एक उच्च-गुणवत्ता वाला लक्ष्य प्रदान करता है।
LAVA, MIT लिंकन प्रयोगशाला, NYU, और नॉर्थईस्टर्न विश्वविद्यालय के बीच सहयोग का उत्पाद है।
LAVA के master ब्रांच का नवीनतम संस्करण स्वचालित रूप से Ubuntu 22.04 पर आधारित एक Docker इमेज के रूप में बनाया जाता है और Docker Hub पर प्रकाशित किया जाता है। अधिकांश उपयोगकर्ता lava कंटेनर का उपयोग करना चाहेंगे, जिसमें PANDA और LAVA उनके रनटाइम निर्भरताओं के साथ स्थापित हैं, लेकिन कंटेनर के आकार को कम करने के लिए कोई बिल्ड आर्टिफैक्ट या स्रोत कोड नहीं है।
lava कंटेनर का उपयोग करने के लिए आप इसे Docker Hub से खींच सकते हैं:
$ docker pull pandare/lava
या इस रिपॉजिटरी से बना सकते हैं:
$ DOCKER_BUILDKIT=1 docker build lava .
Ubuntu 22.04 चलाने वाले सिस्टम पर, आपको केवल bash install.sh चलाने में सक्षम होना चाहिए।
ध्यान दें कि यह इंस्टॉल स्क्रिप्ट पैकेज स्थापित करेगी और आपके सिस्टम में बदलाव करेगी।
आप sudo apt-get remove lava का उपयोग करके बाइनरी को हटा सकते हैं।
एक बार बाइनरी स्थापित करने के बाद, आप pip install python/ चलाकर स्थानीय रूप से स्थापित कर सकते हैं।
नोट कि पायथन पैकेज को बाइनरी के संकलन से उत्पन्न एक SQL फ़ाइल की आवश्यकता होती है जो python/src/pyroclastic/data/lava.sql में रखी जाती है।
इस फ़ाइल के बिना, पायथन पैकेज सही ढंग से काम नहीं करेगा।
वैकल्पिक रूप से, आप मैन्युअल रूप से LAVA की निर्भरताएँ स्थापित कर सकते हैं और फिर स्रोत से निर्माण कर सकते हैं।
रिलीज़ में स्थित Debian पैकेज डाउनलोड करें। फिर पायथन पैकेज स्थापित करें pip install pyroclastic।
इसके बाद, अपनी ~/.lava निर्देशिका में host.json उत्पन्न करने के लिए init_host चलाएँ।
इस फ़ाइल का उपयोग LAVA द्वारा आपकी मशीन के लिए विशिष्ट सेटिंग्स संग्रहीत करने के लिए किया जाता है। आप इन सेटिंग्स को आवश्यकतानुसार संपादित कर सकते हैं, लेकिन डिफ़ॉल्ट मान काम करने चाहिए, vars.py देखें।
ध्यान रखने योग्य कुछ मान निम्नलिखित हैं:
postgres हैdatabase पर डिफ़ॉल्ट है, हालांकि यदि आपने LAVA स्थानीय रूप से स्थापित किया है, तो आपको इसे localhost में बदलना चाहिएनोट: आपको Postgres SQL डेटाबेस के लिए दो पर्यावरण चरों की भी आवश्यकता है:
POSTGRES_PASS यह Postgres SQL उपयोगकर्ता का पासवर्ड हैPOSTGRES_USER यह Postgres SQL डेटाबेस का होस्टनाम हैप्रोजेक्ट कॉन्फ़िगरेशन target_configs निर्देशिका में स्थित हैं, जहाँ प्रत्येक कॉन्फ़िगरेशन target_configs/projectname/projectname.json पर स्थित है।
इन कॉन्फ़िगरेशन फ़ाइलों में निर्दिष्ट पथ आपकी host.json फ़ाइल में निर्धारित मानों के सापेक्ष हैं।
जैसा कि संकेत दिया गया है, आपको एक Postgres SQL उपयोगकर्ता बनाना चाहिए। आप पर्यावरण चर का उपयोग करने के लिए एक स्क्रिप्ट का उपयोग कर सकते हैं:
अंत में, आप किसी प्रोग्राम में वास्तव में बग इंजेक्ट करने के लिए lava चला सकते हैं।
बस उस प्रोजेक्ट का नाम प्रदान करें जो target_configs निर्देशिका में है, उदाहरण के लिए:
lava -ak toy
अब आपके पास toy की एक बगी प्रतिलिपि होनी चाहिए!
यदि आप किसी नए लक्ष्य में बग इंजेक्ट करना चाहते हैं, तो संभवतः आपको कुछ संशोधन करने की आवश्यकता होगी। मार्गदर्शन के लिए How-to-Lava देखें।
आरंभ करने के लिए docs फ़ोल्डर देखें।
LAVA कई लोगों द्वारा कई वर्षों के विकास का परिणाम है; योगदानकर्ताओं की एक आंशिक (वर्णमाला क्रम में) सूची नीचे दी गई है: