
LAVA: बड़े पैमाने पर स्वचालित भेद्यता जोड़ना
बग-खोज उपकरणों का मूल्यांकन और सुधार वर्तमान में ग्राउंड ट्रुथ कॉर्पोरा (यानी, ऐसा सॉफ़्टवेयर जिसमें ट्रिगर करने वाले इनपुट के साथ ज्ञात बग हों) की कमी के कारण कठिन है। LAVA सॉफ़्टवेयर में स्वचालित रूप से बग इंजेक्ट करके इस समस्या को हल करने का प्रयास करता है। प्रत्येक LAVA बग के साथ एक इनपुट होता है जो उसे ट्रिगर करता है, जबकि सामान्य इनपुट के ऐसा करने की संभावना अत्यंत कम होती है। ये भेद्यताएँ सिंथेटिक हैं, लेकिन हम तर्क देते हैं कि फिर भी ये यथार्थवादी हैं, इस अर्थ में कि वे प्रोग्रामों के भीतर गहराई तक अंतर्निहित हैं और वास्तविक इनपुट द्वारा ट्रिगर की जाती हैं। हमारा कार्य मांग पर बड़े ग्राउंड-ट्रुथ भेद्यता कॉर्पोरा उत्पन्न करने के दृष्टिकोण का आधार बनाता है, जिससे कठोर उपकरण मूल्यांकन संभव होता है और उपकरण डेवलपर्स के लिए एक उच्च-गुणवत्ता वाला लक्ष्य प्रदान होता है।
LAVA MIT Lincoln Laboratory, NYU, और Northeastern University के बीच सहयोग का परिणाम है।
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 में रखी जाती है।
इस फ़ाइल के बिना, Python पैकेज सही ढंग से काम नहीं करेगा।
वैकल्पिक रूप से, आप LAVA की निर्भरताओं को मैन्युअल रूप से इंस्टॉल कर सकते हैं और फिर स्रोत से बिल्ड कर सकते हैं।
releases में स्थित Debian पैकेज डाउनलोड करें। फिर python पैकेज pip install pyroclastic इंस्टॉल करें।
इसके बाद, अपनी ~/.lava डायरेक्टरी में host.json उत्पन्न करने के लिए init_host चलाएँ।
यह फ़ाइल LAVA द्वारा आपकी मशीन के विशिष्ट सेटिंग्स संग्रहीत करने के लिए उपयोग की जाती है। आप आवश्यकतानुसार इन सेटिंग्स को संपादित कर सकते हैं, लेकिन डिफ़ॉल्ट मान काम करने चाहिए, देखें vars.py।
ध्यान में रखने योग्य कुछ मान निम्नलिखित हैं:
postgres हैdatabase है, हालाँकि यदि आपने LAVA को स्थानीय रूप से इंस्टॉल किया है, तो आपको संभवतः इसे localhost में बदलना चाहिएनोट: Postgres SQL डेटाबेस के लिए आपको दो environment variables की भी आवश्यकता होगी:
POSTGRES_PASS यह Postgres SQL उपयोगकर्ता का पासवर्ड है`POSTGRES_USER यह Postgres SQL डेटाबेस का hostname हैप्रोजेक्ट कॉन्फ़िगरेशन target_configs डायरेक्टरी में स्थित हैं, जहाँ
प्रत्येक कॉन्फ़िगरेशन target_configs/projectname/projectname.json पर स्थित है।
इन कॉन्फ़िगरेशन फ़ाइलों के भीतर निर्दिष्ट पथ आपकी host.json फ़ाइल में सेट मानों के सापेक्ष होते हैं।
जैसा कि संकेत दिया गया, आपको एक Postgres SQL उपयोगकर्ता बनाना चाहिए। आप निम्नलिखित के लिए environment variables का उपयोग करके एक स्क्रिप्ट का उपयोग कर सकते हैं:
अंत में, आप वास्तव में किसी प्रोग्राम में बग इंजेक्ट करने के लिए lava चला सकते हैं।
बस target_configs डायरेक्टरी में मौजूद किसी प्रोजेक्ट का नाम प्रदान करें, उदाहरण के लिए:
lava -ak toy
अब आपके पास toy की एक बगी प्रति होनी चाहिए!
यदि आप किसी नए लक्ष्य में बग इंजेक्ट करना चाहते हैं, तो आपको संभवतः कुछ संशोधन करने की आवश्यकता होगी। मार्गदर्शन के लिए How-to-Lava देखें।
शुरू करने के लिए docs फ़ोल्डर देखें।
LAVA कई लोगों द्वारा कई वर्षों के विकास का परिणाम है; योगदानकर्ताओं की आंशिक (वर्णानुक्रमिक) सूची नीचे दी गई है: