Ετικέτα: GitHub

  • Μυστικά σε GitHub repos: πώς τα βρίσκεις πριν τα βρει κάποιος άλλος

    Μυστικά σε GitHub repos: πώς τα βρίσκεις πριν τα βρει κάποιος άλλος

    Κάποια στιγμή, κάποιος στην ομάδα έκανε commit ένα .env. Ίσως το κατάλαβε και το έσβησε στο επόμενο commit. Το κλειδί όμως είναι ακόμα εκεί, στο ιστορικό του git, για όποιον έχει πρόσβαση στο repo, και για πάντα αν το repo γίνει ποτέ δημόσιο.

    Πού κρύβονται συνήθως

    • Αρχεία .env που ξέφυγαν από το .gitignore, ή .env.production που κανείς δεν σκέφτηκε να εξαιρέσει.
    • Αρχεία ρυθμίσεων: wp-config.php, config.json, settings.py με κωδικούς βάσεων.
    • Ιδιωτικά κλειδιά: id_rsa, *.pem, πιστοποιητικά με το κλειδί τους.
    • Κλειδιά στον κώδικα: ένα sk_live_ του Stripe ή ένα sk-ant- της Anthropic «προσωρινά» μέσα σε ένα αρχείο.
    • Σενάρια deploy και αρχεία CI με κωδικούς αντί για secrets.
    • Dumps βάσεων για «δοκιμές», με πραγματικά δεδομένα πελατών.

    Γιατί το «το έσβησα» δεν αρκεί

    Το git κρατά κάθε έκδοση κάθε αρχείου. Ένα αρχείο που σβήστηκε στο επόμενο commit υπάρχει ακόμα στο προηγούμενο. Ακόμα κι αν ξαναγράψεις το ιστορικό, τα αντίγραφα σε laptops, forks και CI caches μένουν. Ένα κλειδί που μπήκε σε repo θεωρείται διαρρεύσαν.

    Πώς τα βρίσκεις

    Η σάρωση ψάχνει μοτίβα που έχουν γνωστή μορφή:

    Τι Πώς μοιάζει
    Stripe live key Ξεκινά με sk_live_ ή rk_live_
    AWS access key Ξεκινά με AKIA και 16 χαρακτήρες
    GitHub token Ξεκινά με ghp_, gho_ ή github_pat_
    Anthropic / OpenAI Ξεκινά με sk-ant- ή sk-
    Ιδιωτικό κλειδί -----BEGIN ... PRIVATE KEY-----
    Αρχείο .env Οποιοδήποτε .env εκτός από .env.example

    Το Devios σαρώνει τα repositories που φέρνει η σύνδεση με το GitHub και, για κάθε εύρημα, κρατά μόνο το hash και μια κομμένη προεπισκόπηση. Η ίδια η τιμή δεν αποθηκεύεται ποτέ. Κάθε νέο εύρημα στέλνει ειδοποίηση ασφαλείας.

    Και το GitHub βοηθάΤο GitHub έχει δικό του secret scanning και push protection, που μπλοκάρει γνωστά κλειδιά πριν φτάσουν στο repo. Άνοιξέ τα σε κάθε οργανισμό· είναι το πρώτο δίχτυ.

    Βρήκες ένα κλειδί. Τι κάνεις

    1. Ανακάλεσέ το στον πάροχο. Φτιάξε νέο κλειδί, βάλ’ το στην εφαρμογή, και μετά σβήσε το παλιό. Αυτό είναι το μόνο βήμα που πραγματικά σε προστατεύει.
    2. Έλεγξε αν χρησιμοποιήθηκε. Στα logs του παρόχου: χρεώσεις, κλήσεις API, συνδέσεις από άγνωστες IP.
    3. Μετέφερε την τιμή εκεί που πρέπει. Στο θησαυροφυλάκιο και στα secrets του CI ή του hosting.
    4. Διόρθωσε το .gitignore ώστε να μην ξανασυμβεί.
    5. Καθάρισε το ιστορικό μόνο αν το repo θα γίνει δημόσιο ή θα δοθεί σε τρίτους. Δεν αντικαθιστά το βήμα 1.

    Πώς δεν ξανασυμβαίνει

    • Ένα .env.example με τα ονόματα των μεταβλητών, χωρίς τιμές, είναι το μόνο .env στο repo.
    • Οι πραγματικές τιμές ζουν στο θησαυροφυλάκιο, ανά περιβάλλον.
    • Σύγκριση των ονομάτων του .env με τα GitHub Actions secrets, για να φαίνεται τι λείπει, χωρίς να φύγει καμία τιμή από τον browser.
    • Push protection ενεργό σε όλο τον οργανισμό.

    Συχνές ερωτήσεις

    Το repo είναι ιδιωτικό. Χρειάζεται να ανησυχώ;

    Ναι. Ιδιωτικό σημαίνει ότι το βλέπουν όλοι όσοι έχουν ή είχαν πρόσβαση, κάθε fork, κάθε CI και κάθε laptop που το έκανε clone. Και τα ιδιωτικά repos γίνονται κάποτε δημόσια κατά λάθος.

    Αρκεί να ξαναγράψω το ιστορικό του git;

    Όχι. Βοηθά για το μέλλον, αλλά τα παλιά αντίγραφα μένουν. Το κλειδί πρέπει να αλλάξει στον πάροχο.

    Πόσο συχνά πρέπει να γίνεται η σάρωση;

    Συνεχώς, με κάθε συγχρονισμό. Ένα κλειδί που μπαίνει σήμερα πρέπει να το μάθεις σήμερα, όχι στον ετήσιο έλεγχο.