CircleCI Security
Βασικές Πληροφορίες
CircleCI είναι μια πλατφόρμα Συνεχούς Ενσωμάτωσης όπου μπορείτε να ορίσετε πρότυπα που υποδεικνύουν τι θέλετε να κάνει με κάποιον κώδικα και πότε να το κάνει. Με αυτόν τον τρόπο μπορείτε να αυτοματοποιήσετε τις δοκιμές ή τις αναπτύξεις απευθείας από τον κύριο κλάδο του αποθετηρίου για παράδειγμα.
Δικαιώματα
Το CircleCI κληρονομεί τα δικαιώματα από το github και το bitbucket που σχετίζονται με τον λογαριασμό που συνδέεται. Στις δοκιμές μου επιβεβαίωσα ότι όσον αφορά τα δικαιώματα εγγραφής στο αποθετήριο στο github, θα μπορείτε να διαχειριστείτε τις ρυθμίσεις του έργου στο CircleCI (ορίστε νέα κλειδιά ssh, λάβετε κλειδιά api του έργου, δημιουργήστε νέα κλαδιά με νέες ρυθμίσεις του CircleCI...).
Ωστόσο, πρέπει να είστε διαχειριστής του αποθετηρίου για να μετατρέψετε το αποθετήριο σε έργο του CircleCI.
Μεταβλητές Περιβάλλοντος & Μυστικά
Σύμφωνα με τα έγγραφα υπάρχουν διάφοροι τρόποι για να φορτώσετε τιμές σε μεταβλητές περιβάλλοντος μέσα σε ένα ροή εργασίας.
Ενσωματωμένες μεταβλητές περιβάλλοντος
Κάθε εικονική μηχανή που εκτελείται από το CircleCI θα έχει πάντα συγκεκριμένες μεταβλητές περιβάλλοντος που έχουν καθοριστεί στα έγγραφα όπως CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
ή CIRCLE_USERNAME
.
Καθαρό κείμενο
Μπορείτε να τις δηλώσετε σε καθαρό κείμενο μέσα σε μια εντολή:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον run:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον build-job:
Μπορείτε να τα δηλώσετε σε καθαρό κείμενο μέσα στο περιβάλλον ενός container:
Μυστικά του Έργου
Αυτά είναι τα μυστικά που θα είναι προσβάσιμα μόνο από το έργο (από οποιοδήποτε κλαδί). Μπορείτε να τα δείτε να δηλώνονται στο https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
Η λειτουργία "Εισαγωγή Μεταβλητών" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό.
Μυστικά Πλαίσιο Πληροφοριών
Αυτά είναι μυστικά που ισχύουν για ολόκληρο τον οργανισμό. Από προεπιλογή, οποιοδήποτε αποθετήριο θα μπορεί να έχει πρόσβαση σε οποιοδήποτε μυστικό που αποθηκεύεται εδώ:
Ωστόσο, σημειώστε ότι μπορεί να επιλεγεί μια διαφορετική ομάδα (αντί για Όλα τα μέλη) για να δοθεί πρόσβαση στα μυστικά μόνο σε συγκεκριμένα άτομα. Αυτή είναι αυτήν τη στιγμή μία από τις καλύτερες τρόπους για να αυξηθεί η ασφάλεια των μυστικών, να μην επιτραπεί σε όλους να τα αποκτήσουν αλλά μόνο σε μερικά άτομα.
Επιθέσεις
Αναζήτηση Μυστικών Καθαρού Κειμένου
Εάν έχετε πρόσβαση στο VCS (όπως το github), ελέγξτε το αρχείο .circleci/config.yml
για κάθε αποθετήριο σε κάθε κλαδί και αναζητήστε πιθανά μυστικά καθαρού κειμένου που αποθηκεύονται εκεί.
Απαρίθμηση Μεταβλητών Περιβάλλοντος & Πλαισίων Πληροφοριών
Ελέγχοντας τον κώδικα μπορείτε να βρείτε όλα τα ονόματα των μυστικών που χρησιμοποιούνται σε κάθε αρχείο .circleci/config.yml
. Μπορείτε επίσης να πάρετε τα ονόματα του πλαισίου πληροφοριών από αυτά τα αρχεία ή να τα ελέγξετε στην ιστοσελίδα: https://app.circleci.com/settings/organization/github/<org_name>/contexts.
Εξαγωγή Μυστικών του Έργου
Για να εξαχθούν ΟΛΑ τα μυστικά του έργου και των πλαισίων πληροφοριών, απαιτείται να έχετε πρόσβαση ΕΓΓΡΑΦΗΣ σε μόνο 1 αποθετήριο σε ολόκληρο τον οργανισμό του github (και ο λογαριασμός σας πρέπει να έχει πρόσβαση στα πλαίσια, αλλά από προεπιλογή όλοι μπορούν να έχουν πρόσβαση σε κάθε πλαίσιο).
Η λειτουργία "Εισαγωγή Μεταβλητών" επιτρέπει την εισαγωγή μεταβλητών από άλλα έργα σε αυτό. Έτσι, ένας επιτιθέμενος μπορεί να εισαγάγει όλες τις μεταβλητές του έργου από όλα τα αποθετήρια και στη συνέχεια να εξάγει όλες μαζί.
Όλα τα μυστικά του έργου ορίζονται πάντα στο περιβάλλον των εργασιών, οπότε απλά καλώντας το env και αποκρύπτοντάς το σε base64 θα εξαχθούν τα μυστικά στην κονσόλα καταγραφής του ιστολογίου των ροών εργασίας:
Αν δεν έχετε πρόσβαση στην κονσόλα του web αλλά έχετε πρόσβαση στο αποθετήριο και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να δημιουργήσετε ένα ροή εργασίας που ενεργοποιείται κάθε λεπτό και που αποστέλλει τα μυστικά σε μια εξωτερική διεύθυνση.
Εξαγωγή Μυστικών Πληροφοριών Περιβάλλοντος
Πρέπει να καθορίσετε το όνομα του περιβάλλοντος (αυτό θα εξάγει επίσης τα μυστικά του έργου):
Αν δεν έχετε πρόσβαση στην κονσόλα του web αλλά έχετε πρόσβαση στο αποθετήριο και γνωρίζετε ότι χρησιμοποιείται το CircleCI, μπορείτε απλά να τροποποιήσετε ένα ροή εργασίας που ενεργοποιείται κάθε λεπτό και που αποστέλλει τα μυστικά σε μια εξωτερική διεύθυνση:
Απλά δημιουργώντας ένα νέο .circleci/config.yml
σε ένα αποθετήριο δεν είναι αρκετό για να ενεργοποιηθεί μια διαδικασία κατασκευής στο circleci. Πρέπει να το ενεργοποιήσετε ως ένα έργο στην κονσόλα του circleci.
Απόδραση στο Cloud
Το CircleCI σας δίνει τη δυνατότητα να εκτελέσετε τις διαδικασίες κατασκευής σας στις μηχανές τους ή στις δικές σας. Από προεπιλογή, οι μηχανές τους βρίσκονται στο GCP και αρχικά δεν θα μπορέσετε να βρείτε κάτι σχετικό. Ωστόσο, αν ένα θύμα εκτελεί τις διαδικασίες στις δικές του μηχανές (πιθανώς, σε ένα περιβάλλον cloud), μπορείτε να βρείτε ένα σημείο πρόσβασης σε μεταδεδομένα του cloud με ενδιαφέρουσες πληροφορίες.
Παρατηρήστε ότι στα προηγούμενα παραδείγματα εκτελέστηκαν όλα μέσα σε έναν docker container, αλλά μπορείτε επίσης να ζητήσετε να εκτελεστεί μια εικονική μηχανή VM (η οποία μπορεί να έχει διαφορετικές άδειες cloud):
Ή ακόμη και ένας docker container με πρόσβαση σε απομακρυσμένη υπηρεσία docker:
Διατήρηση
Είναι δυνατόν να δημιουργηθούν διακριτικά χρήστη στο CircleCI για πρόσβαση στα σημεία της API με τις δικαιώσεις του χρήστη.
https://app.circleci.com/settings/user/tokens
Είναι δυνατόν να δημιουργηθούν διακριτικά έργων για πρόσβαση στο έργο με τις δικαιώσεις που έχουν δοθεί στο διακριτικό.
https://app.circleci.com/settings/project/github/<org>/<repo>/api
Είναι δυνατόν να προστεθούν κλειδιά SSH στα έργα.
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
Είναι δυνατόν να δημιουργηθεί ένα προγραμματισμένο έργο σε κρυφή κλαδί σε ένα απρόσμενο έργο που διαρρέει όλες τις μεταβλητές περιβάλλοντος του περιβάλλοντος καθημερινά.
Ή ακόμα και να δημιουργηθεί σε ένα κλαδί / τροποποιηθεί ένα γνωστό έργο που θα διαρρέει όλα τα περιβαλλοντικά και τα μυστικά των έργων καθημερινά.
Εάν είστε κάτοχος του github, μπορείτε να επιτρέψετε μη επαληθευμένες σφαίρες και να διαμορφώσετε μια σε ένα έργο ως πίσω πόρτα
Μπορείτε να βρείτε μια ευπάθεια εντολών εισαγωγής σε κάποια εργασία και να εισάγετε εντολές μέσω ενός μυστικού τροποποιώντας την τιμή του
Last updated