Pentesting CI/CD Μεθοδολογία

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

VCS

VCS σημαίνει Σύστημα Ελέγχου Εκδόσεων (Version Control System), αυτό το σύστημα επιτρέπει στους προγραμματιστές να διαχειρίζονται τον πηγαίο κώδικα τους. Ο πιο κοινός είναι git και συνήθως θα βρείτε εταιρείες να το χρησιμοποιούν σε μία από τις ακόλουθες πλατφόρμες:

  • Github
  • Gitlab
  • Bitbucket
  • Gitea
  • Gitblit
  • Cloud providers (they offer their own VCS platforms)

CI/CD Pipelines

Τα CI/CD pipelines επιτρέπουν στους προγραμματιστές να αυτοματοποιούν την εκτέλεση κώδικα για διάφορους σκοπούς, συμπεριλαμβανομένου του build, των tests και της ανάπτυξης εφαρμογών. Αυτά τα αυτοματοποιημένα workflows ενεργοποιούνται από συγκεκριμένες ενέργειες, όπως code pushes, pull requests ή προγραμματισμένες εργασίες. Είναι χρήσιμα για να απλοποιούν τη διαδικασία από το development μέχρι το production.

Ωστόσο, αυτά τα συστήματα πρέπει να εκτελούνται κάπου και συνήθως με privileged credentials για να deploy-άρουν κώδικα ή να έχουν πρόσβαση σε sensitive information.

VCS Pentesting Μεθοδολογία

Note

Ακόμα κι αν μερικές VCS πλατφόρμες επιτρέπουν τη δημιουργία pipelines, σε αυτή την ενότητα θα αναλύσουμε μόνο πιθανούς επιθέσεις στον έλεγχο του πηγαίου κώδικα.

Οι πλατφόρμες που περιέχουν τον πηγαίο κώδικα του έργου σας περιέχουν ευαίσθητες πληροφορίες και πρέπει να είστε πολύ προσεκτικοί με τα permissions που δίνονται μέσα σε αυτή την πλατφόρμα. Αυτά είναι μερικά κοινά προβλήματα στις VCS πλατφόρμες που ένας attacker θα μπορούσε να εκμεταλλευτεί:

  • Leaks: Αν ο κώδικάς σας περιέχει leaks στα commits και ο attacker μπορεί να έχει πρόσβαση στο repo (επειδή είναι public ή επειδή έχει πρόσβαση), θα μπορούσε να ανακαλύψει αυτά τα leaks.
  • Access: Αν ένας attacker μπορεί να έχει πρόσβαση σε έναν λογαριασμό μέσα στην VCS platform θα μπορούσε να αποκτήσει μεγαλύτερη ορατότητα και permissions.
  • Register: Κάποιες πλατφόρμες απλά επιτρέπουν σε εξωτερικούς χρήστες να δημιουργήσουν account.
  • SSO: Κάποιες πλατφόρμες δεν επιτρέπουν registration, αλλά επιτρέπουν σε οποιονδήποτε να μπει με έγκυρο SSO (οπότε ένας attacker θα μπορούσε να χρησιμοποιήσει το github account του για παράδειγμα).
  • Credentials: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies… υπάρχουν διάφοροι τύποι tokens που ένας χρήστης θα μπορούσε να κλέψει για να αποκτήσει με κάποιον τρόπο πρόσβαση σε ένα repo.
  • Webhooks: Οι VCS πλατφόρμες επιτρέπουν τη δημιουργία webhooks. Αν δεν είναι προστατευμένα με μη ορατά secrets ένας attacker θα μπορούσε να τα εκμεταλλευτεί.
  • Αν δεν υπάρχει κάποιο secret, ο attacker θα μπορούσε να εκμεταλλευτεί το webhook της τρίτης πλατφόρμας
  • Αν το secret είναι στο URL, το ίδιο συμβαίνει και ο attacker αποκτά επίσης το secret
  • Code compromise: Αν ένας κακόβουλος actor έχει κάποιο είδος write πρόσβασης πάνω στα repos, θα μπορούσε να προσπαθήσει να inject malicious code. Για να έχει επιτυχία ίσως χρειαστεί να bypass branch protections. Αυτές οι ενέργειες μπορούν να γίνουν με διαφορετικούς στόχους στη μέση:
    • Compromise the main branch to compromise production.
    • Compromise the main (or other branches) to compromise developers machines (καθώς συνήθως εκτελούν tests, terraform ή άλλα πράγματα μέσα στο repo στους υπολογιστές τους).
  • Compromise the pipeline (check next section)

Pipelines Pentesting Μεθοδολογία

Ο πιο κοινός τρόπος να οριστεί ένα pipeline είναι με τη χρήση ενός CI configuration file που φιλοξενείται στο repository που το pipeline θα χτίσει. Αυτό το αρχείο περιγράφει τη σειρά των jobs που θα εκτελεστούν, τις συνθήκες που επηρεάζουν τη ροή και τις ρυθμίσεις του περιβάλλοντος build.
Αυτά τα αρχεία συνήθως έχουν ένα σταθερό όνομα και format, για παράδειγμα — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) και τα GitHub Actions YAML αρχεία που βρίσκονται κάτω από .github/workflows. Όταν ενεργοποιηθεί, το pipeline job τραβάει τον κώδικα από την επιλεγμένη πηγή (π.χ. commit / branch), και εκτελεί τις εντολές που καθορίζονται στο CI configuration file πάνω σε αυτόν τον κώδικα.

Επομένως ο τελικός στόχος του attacker είναι με κάποιον τρόπο να compromise αυτά τα configuration files ή τις εντολές που εκτελούν.

Tip

Κάποιοι hosted builders επιτρέπουν σε contributors να επιλέξουν το Docker build context και το Dockerfile path. Αν το context είναι υπό τον έλεγχο του attacker, μπορείτε να το ορίσετε εκτός του repo (π.χ., “..”) για να εισάγετε αρχεία του host κατά τη διάρκεια του build και να εξάγετε secrets. Δείτε:

{{#ref}} docker-build-context-abuse.md {{#endref}}

PPE - Poisoned Pipeline Execution

Η Poisoned Pipeline Execution (PPE) διαδρομή εκμεταλλεύεται permissions σε ένα SCM repository για να χειραγωγήσει ένα CI pipeline και να εκτελέσει κακόβουλες εντολές. Χρήστες με τα απαραίτητα permissions μπορούν να τροποποιήσουν CI configuration files ή άλλα αρχεία που χρησιμοποιεί το pipeline job για να συμπεριλάβουν κακόβουλες εντολές. Αυτό “δηλητηριάζει” το CI pipeline, οδηγώντας στην εκτέλεση αυτών των κακόβουλων εντολών.

Για να έχει επιτυχία ένας malicious actor εκτελώντας μια PPE επίθεση χρειάζεται να μπορεί να:

  • Έχει write access στο VCS platform, καθώς συνήθως τα pipelines ενεργοποιούνται όταν γίνει push ή δημιουργηθεί pull request. (Δείτε τη VCS pentesting methodology για περίληψη των τρόπων απόκτησης πρόσβασης).
  • Σημειώστε ότι μερικές φορές ένα external PR μετράει ως “write access”.
  • Ακόμα κι αν έχει write permissions, πρέπει να είναι σίγουρος ότι μπορεί να τροποποιήσει το CI config file ή άλλα αρχεία που το config βασίζεται.
  • Για αυτό, ίσως χρειαστεί να είναι σε θέση να bypass branch protections.

Υπάρχουν 3 flavours της PPE:

  • D-PPE: Μια Direct PPE επίθεση συμβαίνει όταν ο actor τροποποιεί το CI config αρχείο που πρόκειται να εκτελεστεί.
  • I-DDE: Μια Indirect PPE επίθεση συμβαίνει όταν ο actor τροποποιεί ένα αρχείο από το οποίο το CI config αρχείο που πρόκειται να εκτελεστεί εξαρτάται (όπως ένα make file ή μια terraform config).
  • Public PPE or 3PE: Σε μερικές περιπτώσεις τα pipelines μπορούν να ενεργοποιηθούν από χρήστες που δεν έχουν write access στο repo (και που μπορεί να μην είναι καν μέλη της οργάνωσης) επειδή μπορούν να στείλουν ένα PR.
  • 3PE Command Injection: Συνήθως, τα CI/CD pipelines θα ορίζουν environment variables με πληροφορίες για το PR. Αν αυτή η τιμή μπορεί να ελεγχθεί από έναν attacker (όπως ο τίτλος του PR) και χρησιμοποιείται σε ένα επικίνδυνο σημείο (όπως η εκτέλεση sh εντολών), ένας attacker μπορεί να εγχχύσει εντολές εκεί.

Exploitation Benefits

Γνωρίζοντας τις 3 flavours για το poison ενός pipeline, ας δούμε τι θα μπορούσε να αποκτήσει ένας attacker μετά από μια επιτυχή εκμετάλλευση:

  • Secrets: Όπως αναφέρθηκε προηγουμένως, τα pipelines απαιτούν privileges για τα jobs τους (retrieve the code, build it, deploy it…) και αυτά τα privileges συνήθως παρέχονται ως secrets. Αυτά τα secrets συνήθως είναι προσβάσιμα μέσω env variables ή αρχείων μέσα στο σύστημα. Επομένως ένας attacker θα προσπαθήσει πάντα να εξάγει όσο το δυνατόν περισσότερα secrets.
  • Ανάλογα με την πλατφόρμα του pipeline ο attacker μπορεί να χρειαστεί να καθορίσει τα secrets στο config. Αυτό σημαίνει ότι αν ο attacker δεν μπορεί να τροποποιήσει το CI configuration pipeline (I-PPE για παράδειγμα), θα μπορούσε μόνο να εξάγει τα secrets που έχει εκείνο το pipeline.
  • Computation: Ο κώδικας εκτελείται κάπου, ανάλογα με το πού εκτελείται ένας attacker μπορεί να μπορέσει να pivot-άρει περαιτέρω.
  • On-Premises: Αν τα pipelines εκτελούνται on-premises, ένας attacker μπορεί να βρεθεί σε ένα εσωτερικό δίκτυο με πρόσβαση σε περισσότερους πόρους.
  • Cloud: Ο attacker θα μπορούσε να αποκτήσει πρόσβαση σε άλλες μηχανές στο cloud αλλά και να εξάγει IAM roles/service accounts tokens από αυτό για να αποκτήσει περαιτέρω πρόσβαση στο cloud.
  • Platforms machine: Κάποιες φορές τα jobs θα εκτελούνται μέσα στις μηχανές της πλατφόρμας pipelines, οι οποίες συνήθως βρίσκονται σε ένα cloud χωρίς περαιτέρω πρόσβαση.
  • Επιλογή εκτέλεσης: Μερικές φορές η πλατφόρμα pipelines θα έχει ρυθμίσει πολλές μηχανές και αν μπορείτε να τροποποιήσετε το CI configuration file μπορείτε να υποδείξετε που θέλετε να τρέξει ο κακόβουλος κώδικας. Σε αυτή την περίπτωση, ένας attacker πιθανότατα θα τρέξει ένα reverse shell σε κάθε πιθανή μηχανή για να προσπαθήσει να την εκμεταλλευτεί περαιτέρω.
  • Compromise production: Αν είστε μέσα στο pipeline και η τελική έκδοση χτίζεται και deploy-άρεται από αυτό, μπορείτε να compromise-άρετε τον κώδικα που θα τρέχει τελικά σε production.

More relevant info

Tools & CIS Benchmark

  • Chain-bench είναι ένα open-source εργαλείο για auditing του software supply chain stack σας για συμμόρφωση ασφαλείας βασισμένο σε ένα νέο CIS Software Supply Chain benchmark. Το auditing εστιάζει στην ολόκληρη διαδικασία SDLC, όπου μπορεί να αποκαλύψει κινδύνους από το code time μέχρι το deploy time.

Top 10 CI/CD Security Risk

Δείτε αυτό το ενδιαφέρον άρθρο για τους top 10 CI/CD risks σύμφωνα με την Cider: https://www.cidersecurity.io/top-10-cicd-security-risks/

Labs

  • Σε κάθε πλατφόρμα που μπορείτε να τρέξετε τοπικά θα βρείτε οδηγίες για το πώς να την ξεκινήσετε τοπικά ώστε να τη διαμορφώσετε όπως θέλετε για να τη δοκιμάσετε
  • Gitea + Jenkins lab: https://github.com/cider-security-research/cicd-goat

Automatic Tools

  • Checkov: Checkov είναι ένα static code analysis εργαλείο για infrastructure-as-code.

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks