Διαρροή μυστικών στο Git: ανάκληση και περιορισμός επιπτώσεων — DedSec Project
Η διαγραφή ενός token από το τελευταίο commit δεν αρκεί Επιβεβαίωσε τι ακριβώς εκτέθηκε Αν password, API token ή private key βρέθηκε σε commit ή ZIP, θεώρησέ το δυνητικά εκτεθειμένο ώσπου…
Η διαγραφή ενός token από το τελευταίο commit δεν αρκεί
Επιβεβαίωσε τι ακριβώς εκτέθηκε
Αν password, API token ή private key βρέθηκε σε commit ή ZIP, θεώρησέ το δυνητικά εκτεθειμένο ώσπου να υπάρχουν αξιόπιστα στοιχεία για το αντίθετο. Κατάγραψε repository, εύρος revisions, είδος credential και permissions χωρίς να αντιγράφεις την τιμή σε logs. Βρες τον πάροχο και τις υπηρεσίες που το χρησιμοποιούν, ώστε η ανάκληση να μην προκαλέσει ανεξέλεγκτη διακοπή.
git status --short
git log --oneline -8
# Εξέτασε ονόματα/αλλαγές, όχι τιμές μυστικών:
git log --name-status --oneline -8
Πρώτα ανάκληση και αντικατάσταση
Ακύρωσε το εκτεθειμένο credential από τον πάροχο και ενημέρωσε τις εξαρτημένες υπηρεσίες μέσω ασφαλούς configuration. Η αφαίρεση μιας γραμμής από Git δεν ακυρώνει αντίγραφα που ήδη υπάρχουν. Επαναγραφή ιστορικού μπορεί να μειώσει τυχαία εύρεση αλλά απαιτεί συνεργασία και δεν υποκαθιστά την ανάκληση του μυστικού.
Έλεγξε την πραγματική έκταση
Εξέτασε αν το token είχε read-only ή διοικητικά δικαιώματα, αν μπήκε σε δημόσια artifacts και αν υπάρχουν audit logs πρόσβασης από τον πάροχο. Ξεχώρισε επιβεβαιωμένη χρήση από πιθανή χρήση. Η απουσία γεγονότων από περιορισμένο log δεν αποδεικνύει ότι δεν έγινε πρόσβαση.
Πρόληψη και κλείσιμο περιστατικού
Εφάρμοσε secret scanning, αγνόησε τοπικά .env, περιόρισε δικαιώματα και χρησιμοποίησε μικρής διάρκειας credentials. Βάλε στον release έλεγχο κανόνα αποκλεισμού ευαίσθητων μοτίβων. Επιβεβαίωσε ότι η υπηρεσία δουλεύει με το νέο κλειδί και γράψε αναφορά χωρίς τιμές μυστικών ή προσωπικά δεδομένα.
Στοιχεία ανανέωσης με καταναλωτές και ανάκληση
Η δημιουργία νέου μυστικού είναι ένα μόνο βήμα. Εντόπισε καταναλωτές, διένειμε μέσω εγκεκριμένου καναλιού, επιβεβαίωσε χρήση και ανάκαλε την εκτεθειμένη τιμή. Μεγάλο διάστημα επικάλυψης κρατά το συμβάν ανοιχτό ακόμη κι αν το νέο λειτουργεί.
Ο καθαρισμός ιστορικού μειώνει μελλοντική εύρεση αλλά δεν ανακαλεί ήδη ληφθέντα αντίγραφα. Η διαγραφή γραμμής δεν αποδεικνύει ασφαλές διαπιστευτήριο. Οι σημειώσεις περιέχουν αναγνωριστικά και χρόνους, ποτέ πραγματικές τιμές.
incident={"replacement_created":True,"consumers_verified":False,
"old_revoked":False,"scope_reviewed":True}
def rotation_complete(row):
return all(row[k] for k in ("replacement_created","consumers_verified","old_revoked","scope_reviewed"))
assert not rotation_complete(incident)
incident.update(consumers_verified=True,old_revoked=True)
assert rotation_complete(incident)
print("completion requires revocation evidence")
Το μοντέλο Boolean είναι δοκιμή καταλόγου, όχι υπηρεσία διαχείρισης μυστικών. Έλεγξε το παλιό διαπιστευτήριο μέσω τεκμηριωμένου μηχανισμού παρόχου χωρίς εκτύπωση. Αν το εύρος έκθεσης παραμένει αβέβαιο, κατάγραψέ το και συνέχισε διερεύνηση αντί για αυθαίρετη διαβεβαίωση.