Apache Airflow Security
मूल जानकारी
Apache Airflow एक मंच के रूप में काम करता है जो डेटा पाइपलाइन्स या वर्कफ्लोज को ऑर्केस्ट्रेट और शेड्यूल करने के लिए है। डेटा पाइपलाइन्स के संदर्भ में "ऑर्केस्ट्रेशन" शब्द का अर्थ है विभिन्न स्रोतों से आने वाले जटिल डेटा वर्कफ्लोज की व्यवस्था, समन्वय और प्रबंधन की प्रक्रिया। इन ऑर्केस्ट्रेटेड डेटा पाइपलाइन्स का प्राथमिक उद्देश्य प्रोसेस्ड और उपभोग योग्य डेटा सेट्स प्रदान करना है। ये डेटा सेट्स व्यापक रूप से अनेक अनुप्रयोगों द्वारा उपयोग किए जाते हैं, जिनमें व्यापार खुफिया उपकरण, डेटा विज्ञान और मशीन लर्निंग मॉडल शामिल हैं, जो सभी बिग डेटा अनुप्रयोगों के कार्यान्वयन के लिए मौलिक हैं।
मूल रूप से, Apache Airflow आपको कोड के निष्पादन को शेड्यूल करने की अनुमति देगा जब कुछ (इवेंट, क्रॉन) होता है।
स्थानीय लैब
Docker-Compose
आप https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml से docker-compose कॉन्फ़िग फ़ाइल का उपयोग करके पूर्ण apache airflow docker वातावरण लॉन्च कर सकते हैं। (यदि आप MacOS में हैं तो सुनिश्चित करें कि डॉकर VM को कम से कम 6GB रैम दें)।
Minikube
apache airflow को minikube के साथ चलाने का एक आसान तरीका है:
Airflow विन्यास
Airflow अपने विन्यास में संवेदनशील जानकारी संग्रहीत कर सकता है या आपको कमजोर विन्यास मिल सकते हैं:
pageAirflow ConfigurationAirflow RBAC
Airflow पर हमला करने से पहले आपको समझना चाहिए कैसे अनुमतियाँ काम करती हैं:
pageAirflow RBACहमले
वेब कंसोल गणना
यदि आपके पास वेब कंसोल तक पहुँच है तो आप निम्नलिखित जानकारी में से कुछ या सभी तक पहुँच सकते हैं:
वेरिएबल्स (यहाँ कस्टम संवेदनशील जानकारी संग्रहीत की जा सकती है)
कनेक्शन्स (यहाँ कस्टम संवेदनशील जानकारी संग्रहीत की जा सकती है)
इन्हें
http://<airflow>/connection/list/
में एक्सेस करेंविन्यास (संवेदनशील जानकारी जैसे कि
secret_key
और पासवर्ड यहाँ संग्रहीत किए जा सकते हैं)उपयोगकर्ता और भूमिकाओं की सूची
प्रत्येक DAG का कोड (जिसमें दिलचस्प जानकारी हो सकती है)
वेरिएबल्स मान प्राप्त करना
वेरिएबल्स को Airflow में संग्रहीत किया जा सकता है ताकि DAGs उनके मानों तक पहुँच सकें। यह अन्य प्लेटफॉर्म्स के सीक्रेट्स के समान है। यदि आपके पास पर्याप्त अनुमतियाँ हैं तो आप उन्हें GUI में http://<airflow>/variable/list/
पर एक्सेस कर सकते हैं।
Airflow डिफ़ॉल्ट रूप से GUI में वेरिएबल के मान को दिखाएगा, हालांकि, इस के अनुसार यह संभव है कि एक सूची वेरिएबल्स को सेट किया जाए जिनका मान GUI में तारांकन के रूप में दिखाई देगा।
हालांकि, ये मान अभी भी CLI के माध्यम से प्राप्त किए जा सकते हैं (आपको DB तक पहुँच होनी चाहिए), मनमाने DAG के निष्पादन, API के माध्यम से जो वेरिएबल्स एंडपॉइंट तक पहुँचता है (API को सक्रिय किया जाना चाहिए), और यहाँ तक कि GUI स्वयं भी! GUI से उन मानों तक पहुँचने के लिए बस वेरिएबल्स का चयन करें जिन्हें आप एक्सेस करना चाहते हैं और Actions -> Export पर क्लिक करें। एक और तरीका है छिपे हुए मान पर ब्रूटफोर्स करना, खोज फिल्टरिंग का उपयोग करते हुए जब तक आप इसे प्राप्त नहीं कर लेते:
विशेषाधिकार वृद्धि
यदि expose_config
विन्यास True पर सेट है, तो User भूमिका से ऊपर के उपयोगकर्ता वेब में कॉन्फ़िग पढ़ सकते हैं। इस कॉन्फ़िग में, secret_key
दिखाई देता है, जिसका मतलब है कि इस मान्यता वाला कोई भी उपयोगकर्ता अपनी स्वयं की हस्ताक्षरित कुकी बना सकता है किसी अन्य उपयोगकर्ता खाते का अनुकरण करने के लिए।
DAG बैकडोर (Airflow worker में RCE)
यदि आपके पास DAGs सहेजे जाने वाले स्थान पर लिखने का अधिकार है, तो आप बस एक बना सकते हैं जो आपको रिवर्स शेल भेजेगा। ध्यान दें कि यह रिवर्स शेल airflow worker container के अंदर निष्पादित किया जाएगा:
DAG बैकडोर (Airflow scheduler में RCE)
यदि आप कुछ ऐसा सेट करते हैं जिसे कोड के रूट में निष्पादित किया जाना है, इस लेखन के समय, यह scheduler द्वारा निष्पादित किया जाएगा DAG के फोल्डर के अंदर रखने के कुछ सेकंड बाद।
DAG निर्माण
यदि आप DAG क्लस्टर के अंदर किसी मशीन को समझौता करने में सफल होते हैं, तो आप dags/
फोल्डर में नए DAGs स्क्रिप्ट्स बना सकते हैं और वे DAG क्लस्टर के अंदर बाकी मशीनों में प्रतिलिपि बन जाएंगे।
DAG कोड इंजेक्शन
जब आप GUI से कोई DAG निष्पादित करते हैं तो आप उसमें आर्ग्युमेंट्स पास कर सकते हैं। इसलिए, यदि DAG ठीक से कोडित नहीं है तो वह कमांड इंजेक्शन के लिए संवेदनशील हो सकता है। यही इस CVE में हुआ था: https://www.exploit-db.com/exploits/49927
DAGs में कमांड इंजेक्शन की तलाश शुरू करने के लिए आपको जो जानना जरूरी है वह यह है कि पैरामीटर्स को dag_run.conf.get("param_name")
कोड के साथ एक्सेस किया जाता है।
इसके अलावा, वही संवेदनशीलता वेरिएबल्स के साथ भी हो सकती है (ध्यान दें कि पर्याप्त अधिकारों के साथ आप GUI में वेरिएबल्स के मूल्य को नियंत्रित कर सकते हैं). वेरिएबल्स को एक्सेस किया जाता है:
Last updated