Πώς να προστατέψετε ευαίσθητα μυστικά και διαπιστευτήρια στο αποθετήριο Git σας
Οι χάκερ που αποκτούν πρόσβαση στον κώδικα της εφαρμογής σας μπορεί να είναι καταστροφικό για το αποκλειστικό λογισμικό, αλλά η αποθήκευση διαπιστευτηρίων στο Git μπορεί να τους δώσει αυξημένη πρόσβαση στη βάση δεδομένων. Ακόμα κι αν δεν σκοπεύετε να παραβιαστεί το αποθετήριο Git σας, είναι καλή διαχείριση κινδύνου να ελαχιστοποιήσετε τις πιθανές ζημιές.
Έλεγχος πηγής Πρόσβαση ως διάνυσμα επίθεσης
Το λογισμικό ανοιχτού κώδικα δεν είναι ανασφαλές. Εξάλλου, μεγάλο μέρος του λογισμικού που χρησιμοποιείται για την εκτέλεση του Διαδικτύου αναπτύσσεται δημόσια στο GitHub. Αν και ο δημόσιος κώδικας σημαίνει ότι οι χάκερ μπορούν να βρουν πιο εύκολα εκμεταλλεύσεις, ο ανοιχτός κώδικας έχει αποδείξει ότι μπορεί να είναι εξαιρετικός για τη διαφάνεια και τη διόρθωση σφαλμάτων της κοινότητας.
Ωστόσο, αυτό δεν σημαίνει ότι το λογισμικό κλειστού κώδικα είναι εγγενώς πιο ασφαλές. Όταν οι προγραμματιστές υποθέτουν ότι ο έλεγχος πηγής είναι ιδιωτικός, συχνά χρησιμοποιούν την πιο εύκολη λύση όταν διαχειρίζονται μυστικά όπως κλειδιά API ή διαπιστευτήρια βάσης δεδομένων: κωδικοποιούν σκληρά στην εφαρμογή αντί να χρησιμοποιούν τη σωστή διαχείριση μυστικών.
Ένας από τους σημαντικότερους φορείς επίθεσης για τους χάκερ είναι η απόκτηση πρόσβασης στον έλεγχο πηγής και η σάρωση έργων για κλειδιά API ή άλλα μυστικά που δεν θα έπρεπε να υπάρχουν. Αυτό τους επιτρέπει να αυξήσουν τα δικαιώματά τους και να επιτεθούν στο υπόλοιπο δίκτυο, αποκτώντας συχνά πρόσβαση σε ευαίσθητα δεδομένα πελατών ή βάσεις δεδομένων.
Πρόσφατα, η λίστα «Απαγορευμένων πτήσεων» της TSA
διέρρευσε με αυτήν ακριβώς τη μέθοδο
. Ένας ανασφαλής διακομιστής κατασκευής Jenkins έμεινε ανοιχτός στο κοινό, ένα συνηθισμένο λάθος που γίνεται κατά την εγκατάσταση λογισμικού που υποτίθεται ότι βρίσκεται σε ιδιωτικά υποδίκτυα πίσω από τον έλεγχο πρόσβασης. Στον διακομιστή Jenkins, ο χάκερ μπόρεσε να αποκτήσει πρόσβαση στο ιστορικό κατασκευής, το οποίο περιείχε τον κώδικα, και βρήκε τα διαπιστευτήρια AWS S3 για την αεροπορική εταιρεία που ήταν κωδικοποιημένα στην εφαρμογή.
Μην αποθηκεύετε μυστικά στο Source Control
Κάθε εφαρμογή θα έχει διαφορετικές μεθόδους για την ασφαλή αποθήκευση κλειδιών API και διαπιστευτηρίων βάσης δεδομένων, αλλά υπάρχουν μερικές κοινές μέθοδοι.
Το πρώτο είναι η χρήση αρχείων διαμόρφωσης, τα οποία μπορούν να αναπτυχθούν κατά την παραγωγή στον διακομιστή και να διαβαστούν από την εφαρμογή κατά το χρόνο εκτέλεσης. Για παράδειγμα, το ASP.NET προβάλλει από προεπιλογή τη χρήση ενός
appsettings.json
αρχείο που είναι κενό ενώ είναι αποθηκευμένο στον έλεγχο προέλευσης. Εναπόκειται στον διαχειριστή που αναπτύσσει την εφαρμογή να αναπτύξει το αρχείο διαμόρφωσης παραγωγής.
Μπορείτε επίσης να χρησιμοποιήσετε μεταβλητές περιβάλλοντος, οι οποίες ορίζονται από το σύστημα πριν από την εκτέλεση μιας εφαρμογής. Αυτό χρησιμοποιείται συνήθως για κοντέινερ Docker, καθώς είναι ένας εύκολος τρόπος εισαγωγής διαπιστευτηρίων σε ένα ήδη κατασκευασμένο κοντέινερ. Για παράδειγμα, το Portainer προσφέρει διαχείριση μεταβλητών περιβάλλοντος ως μέρος της διεπαφής ιστού Docker.
Συνήθως, είναι καλή ιδέα να εναλλάσσετε τακτικά μυστικά, καθώς τα ξεπερασμένα διαπιστευτήρια αποτελούν κίνδυνο για την ασφάλεια. Ένα από τα εργαλεία που μπορούν να διαχειριστούν τα περιστρεφόμενα μυστικά είναι το AWS’s Secrets Manager, το οποίο λειτουργεί ως σύστημα αποθήκευσης που μπορεί εύκολα να παρέχει μυστικά στις εφαρμογές σας AWS.
Για εφαρμογές εκτός AWS ή οποιαδήποτε εφαρμογή που χρησιμοποιεί παρόμοια υπηρεσία, υπάρχει ένα μικρό πρόβλημα στο ότι θα χρειαστείτε ακόμα ένα κλειδί IAM για πρόσβαση στο Secrets Manager, πράγμα που σημαίνει ότι θα πρέπει να διαχειριστείτε ένα κλειδί IAM, το οποίο είναι ακριβώς πρόβλημα με το οποίο ξεκίνησες.
Ωστόσο, το σύστημα IAM της AWS επιτρέπει τη διακριτή διαχείριση ρόλων και αδειών. Θα μπορούσατε, για παράδειγμα, να δημιουργήσετε έναν χρήστη για κάθε διακομιστή που διαθέτετε και να ελέγχετε ποια κλειδιά στο Secrets Manager μπορούν να έχουν πρόσβαση. Μπορείτε επίσης να επιβάλλετε πολιτικές ασφαλείας στους χρήστες IAM, απαιτώντας επίσης την τακτική εναλλαγή τους.
ΣΧΕΤΙΖΕΤΑΙ ΜΕ:
Μην αφήνετε κωδικούς πρόσβασης στον Κώδικά σας. Αντ’ αυτού χρησιμοποιήστε το Secrets Manager της AWS
Μην αποθηκεύετε μυστικά σε Build Scripts
Ένα από τα χειρότερα λάθη ασφαλείας που μπορούν να κάνουν οι προγραμματιστές είναι η αποθήκευση κλειδιών για την ανάπτυξη παραγωγής σε σενάρια έκδοσης που χρησιμοποιούνται σε μια διοχέτευση CI/CD.
Για παράδειγμα, μπορεί να έχετε ένα σενάριο κελύφους ή ένα αρχείο YAML που χρησιμοποιείται για τον έλεγχο της δημιουργίας, της δοκιμής και, κυρίως, της ανάπτυξης της εφαρμογής σας στους διακομιστές σας ή μιας υπηρεσίας αποθήκευσης όπως το
Amazon
S3. Ωστόσο, εάν ένας εισβολέας επρόκειτο να αποκτήσει πρόσβαση σε αυτό το σενάριο, θα μπορούσε να αναπτύξει οτιδήποτε στους διακομιστές σας ή στους κάδους αποθήκευσης.
Ένας από τους πιο συνηθισμένους τρόπους για να το αντιμετωπίσετε αυτό είναι η χρήση ενός εργαλείου διαχείρισης μυστικών, όπως το GitHub Secrets, το οποίο αποθηκεύει διαπιστευτήρια στο αποθετήριό σας, στα οποία μπορείτε να έχετε πρόσβαση ονομαστικά στα σενάρια κατασκευής GitHub Actions.
Εάν η εφαρμογή σας αναπτύσσεται αυτόματα χρησιμοποιώντας το GitHub Actions και χρειάζεται διαπιστευτήρια για να λειτουργήσει, μπορείτε επίσης να χρησιμοποιήσετε τα Secrets για να τα εισαγάγετε στη διαδικασία δημιουργίας κατά το χρόνο εκτέλεσης, είτε δημιουργώντας τα απαραίτητα αρχεία διαμόρφωσης είτε ορίζοντας τις απαραίτητες μεταβλητές περιβάλλοντος. Με αυτόν τον τρόπο, το αποθετήριο σας θα μπορούσε ακόμη και να είναι δημόσιο και να εξακολουθεί να δημιουργεί μια εφαρμογή που θα λαμβάνει διαπιστευτήρια παραγωγής πριν από την ανάπτυξη.
Τα μυστικά GitHub που δημιουργούνται σε έναν οργανισμό μπορούν ακόμη και να κοινοποιηθούν σε πολλαπλά αποθετήρια, παρέχοντας έναν εύκολο τρόπο κεντρικής διαχείρισης ασφαλών κλειδιών. Άλλα εργαλεία διακομιστή κατασκευής όπως το Jenkins ή το TeamCity θα έχουν επίσης ενσωματωμένη διαχείριση μυστικών.


