Apache Airflow Security
Βασικές Πληροφορίες
Το Apache Airflow λειτουργεί ως πλατφόρμα για την οργάνωση και προγραμματισμό των αγωγών δεδομένων ή ροών εργασιών. Ο όρος "ορχήστρα" στο πλαίσιο των αγωγών δεδομένων σημαίνει τη διαδικασία της διάταξης, της συντονισμού και της διαχείρισης πολύπλοκων ροών δεδομένων που προέρχονται από διάφορες πηγές. Ο κύριος σκοπός αυτών των οργανωμένων αγωγών δεδομένων είναι να παρέχουν επεξεργασμένα και καταναλώσιμα σύνολα δεδομένων. Αυτά τα σύνολα δεδομένων χρησιμοποιούνται εκτενώς από πολλές εφαρμογές, συμπεριλαμβανομένων, αλλά όχι περιοριστικά, εργαλείων επιχειρηματικής νοημοσύνης, μοντέλων επιστήμης δεδομένων και μηχανικής μάθησης, τα οποία είναι θεμελιώδη για τη λειτουργία εφαρμογών μεγάλων δεδομένων.
Βασικά, το Apache Airflow θα σας επιτρέψει να προγραμματίσετε την εκτέλεση κώδικα όταν κάτι (συμβάν, cron) συμβεί.
Τοπικό Εργαστήριο
Docker-Compose
Μπορείτε να χρησιμοποιήσετε το αρχείο διαμόρφωσης docker-compose από το https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml για να ξεκινήσετε ένα πλήρες περιβάλλον apache airflow με τη χρήση του Docker. (Αν είστε σε MacOS, βεβαιωθείτε ότι δίνετε τουλάχιστον 6GB μνήμης RAM στην εικονική μηχανή του Docker).
Minikube
Ένας εύκολος τρόπος να τρέξετε το apache airflow είναι να το τρέξετε με το minikube:
Ρύθμιση του Airflow
Το Airflow μπορεί να αποθηκεύει ευαίσθητες πληροφορίες στις ρυθμίσεις του ή μπορεί να υπάρχουν αδύναμες ρυθμίσεις:
Airflow ConfigurationAirflow RBAC
Πριν αρχίσετε να επιτίθεστε στο Airflow, πρέπει να κατανοήσετε πώς λειτουργούν οι άδειες:
Airflow RBACΕπιθέσεις
Απαρίθμηση του Web Console
Εάν έχετε πρόσβαση στον ιστότοπο του Airflow, μπορείτε να έχετε πρόσβαση σε ορισμένες ή όλες τις παρακάτω πληροφορίες:
Μεταβλητές (Εδώ μπορεί να αποθηκεύονται προσαρμοσμένες ευαίσθητες πληροφορίες)
Συνδέσεις (Εδώ μπορεί να αποθηκεύονται προσαρμοσμένες ευαίσθητες πληροφορίες)
Αποκτήστε πρόσβαση σε αυτές στο
http://<airflow>/connection/list/
Ρυθμίσεις (Ευαίσθητες πληροφορίες όπως το
secret_key
και οι κωδικοί πρόσβασης μπορεί να αποθηκεύονται εδώ)Λίστα χρηστών και ρόλων
Κώδικας κάθε DAG (ο οποίος μπορεί να περιέχει ενδιαφέρουσες πληροφορίες)
Ανάκτηση τιμών μεταβλητών
Οι μεταβλητές μπορούν να αποθηκευτούν στο Airflow, έτσι ώστε οι DAGs να μπορούν να έχουν πρόσβαση στις τιμές τους. Είναι παρόμοιο με τα μυστικά άλλων πλατφορμών. Εάν έχετε επαρκείς δικαιώματα, μπορείτε να τις αποκτήσετε στο γραφικό περιβάλλον στο http://<airflow>/variable/list/
.
Το Airflow από προεπιλογή θα εμφανίζει την τιμή της μεταβλητής στο γραφικό περιβάλλον, ωστόσο, σύμφωνα με αυτό, είναι δυνατόν να οριστεί μια λίστα μεταβλητών οι οποίες η τιμή τους θα εμφανίζεται ως αστερίσκοι στο γραφικό περιβάλλον.
Ωστόσο, αυτές οι τιμές μπορούν ακόμα να ανακτηθούν μέσω CLI (χρειάζεστε πρόσβαση στη βάση δεδομένων), αυθαίρετη εκτέλεση DAG, API πρόσβαση στο τέλος των μεταβλητών (το API πρέπει να είναι ενεργοποιημένο) και ακόμα και το ίδιο το γραφικό περιβάλλον! Για να αποκτήσετε πρόσβαση σε αυτές τις τιμές από το γραφικό περιβάλλον, απλά επιλέξτε τις μεταβλητές που θέλετε να αποκτήσετε πρόσβαση και κάντε κλικ στην επιλογή Ενέργειες -> Εξαγωγή. Μια άλλη μέθοδος είναι να εκτελέσετε μια επίθεση βίας στην κρυφή τιμή χρησιμοποιώντας την αναζήτηση φιλτραρίσματος μέχρι να την ανακτήσετε:
Ανέβασμα Προνομίων
Εάν η ρύθμιση expose_config
έχει οριστεί σε True, από τον ρόλο Χρήστη και πάνω, μπορούν να διαβάσουν την διαμόρφωση στον ιστό. Σε αυτήν τη διαμόρφωση, εμφανίζεται το secret_key
, πράγμα που σημαίνει ότι οποιοσδήποτε χρήστης με αυτό το έγκυρο κλειδί μπορεί να δημιουργήσει το δικό του υπογεγραμμένο cookie για να προσομοιώσει οποιονδήποτε άλλο λογαριασμό χρήστη.
Παρασιτική πόρτα DAG (RCE στον Airflow worker)
Εάν έχετε δικαιώματα εγγραφής στον τόπο όπου αποθηκεύονται οι DAGs, μπορείτε απλά να δημιουργήσετε έναν που θα σας στείλει ένα αντίστροφο κέλυφος. Σημειώστε ότι αυτό το αντίστροφο κέλυφος θα εκτελεστεί μέσα σε έναν εργατικό container του airflow:
Παρασκηνιακή πίσω πόρτα DAG (RCE στον προγραμματιστή του Airflow)
Εάν ορίσετε κάτι να εκτελείται στη ρίζα του κώδικα, τη στιγμή που γράφεται αυτό, θα εκτελεστεί από τον προγραμματιστή μετά από μερικά δευτερόλεπτα αφού το τοποθετήσετε μέσα στον φάκελο του DAG.
Δημιουργία DAG
Εάν καταφέρετε να διακινδυνεύσετε ένα μηχάνημα μέσα στο DAG cluster, μπορείτε να δημιουργήσετε νέα scripts DAGs στον φάκελο dags/
και θα αντιγραφούν στα υπόλοιπα μηχανήματα μέσα στο DAG cluster.
Ενσωμάτωση Κώδικα στο DAG
Όταν εκτελείτε ένα DAG από το GUI, μπορείτε να περάσετε ορίσματα σε αυτό. Επομένως, εάν το DAG δεν έχει κατασκευαστεί σωστά, μπορεί να είναι ευάλωτο σε εντολές ενσωμάτωσης. Αυτό συνέβη σε αυτό το CVE: https://www.exploit-db.com/exploits/49927
Όλο όσο χρειάζεται να αρχίσετε να ψάχνετε για εντολές ενσωμάτωσης στα DAGs είναι ότι οι παράμετροι προσπελαύνονται με τον κώδικα dag_run.conf.get("param_name")
.
Επιπλέον, η ίδια ευπάθεια μπορεί να συμβεί και με τις μεταβλητές (σημειώστε ότι με επαρκή δικαιώματα μπορείτε να ελέγξετε την τιμή των μεταβλητών στο GUI). Οι μεταβλητές προσπελαύνονται με:
Εάν χρησιμοποιηθούν για παράδειγμα μέσα σε μια εντολή bash, μπορείτε να πραγματοποιήσετε μια εντολή εισχώρησης.
Last updated