Το σφάλμα στον κρυφό σαρωτή μας που δεν εντόπισαν οι κανάριοι

Αποστολή

Πριν οποιεσδήποτε Εργαλειοθήκη που πουλάμε συμπιεστεί, ένας μηχανισμός ελέγχου τη σαρώνει για τις πραγματικές τιμές των δικών μας μυστικών. Κάθε σάρωση ξεκινά τοποθετώντας κανάρια, ένα από κάθε είδος, και αρνείται να εκτελεστεί αν δεν τα εντοπίσει όλα. Τα εντόπιζε πάντα. Παρ’ όλα αυτά, υπήρχε σφάλμα.

Πώς ο μηχανισμός ελέγχου διαβάζει τα μυστικά

Ο μηχανισμός ελέγχου δεν ψάχνει μόνο για πράγματα με σχήμα κλειδιών. Διαβάζει τα αρχεία όπου βρίσκονται τα μυστικά μας (αρχεία env, ρυθμίσεις JSON, αρχεία κλειδιών), λαμβάνει κάθε τιμή του οποίου το όνομα δηλώνει ότι είναι μυστική και έπειτα αναζητά στο περιεχόμενο που ετοιμαζόμαστε να διανείμουμε αυτές τις ακριβείς τιμές, όπως είναι γραμμένες και base64-κωδικοποιημένες.

Το σφάλμα

Για μια γραμμή όπως αυτή:

DB_PASSWORD='Tr0ub4dor-and-3'  # Αλλαγή τον Μάιο

ο αναγνώστης αφαιρούσε τα περιβάλλοντα εισαγωγικά μόνο όταν η τιμή ξεκινούσε και τελείωνε με χαρακτήρα εισαγωγικών. Με ένα σχόλιο μετά την τιμή, η γραμμή τελειώνει με γράμμα, οπότε τα εισαγωγικά παρέμεναν. Το σχόλιο κοβόταν στη συνέχεια, και ο μηχανισμός ελέγχου συνέχιζε να αναζητά το 'Tr0ub4dor-and-3', με τα εισαγωγικά. Μια Εργαλειοθήκη που περιείχε τον κωδικό χωρίς αυτά τα εισαγωγικά θα είχε περάσει.

Γιατί οι κανάριοι δεν το πρόσεξαν ποτέ

Ένας κανάριος ελέγχει ένα δίκτυο: τοποθετεί μια τιμή που ο σαρωτής ήδη γνωρίζει, και ελέγχει ότι εντοπίζεται. Οι τιμές των καναρίων μας δίνονταν απευθείας στον σαρωτή, οπότε δεν περνούσαν ποτέ από τον κώδικα που διαβάζει μια γραμμή ρύθμισης. Κάθε δίκτυο ελέγχθηκε, αλλά όχι ο αναλυτής που βρισκόταν μπροστά τους.

Πώς το βρήκαμε

Μετατρέπαμε τον μηχανισμό ελέγχου σε προϊόν από μόνο του και γράψαμε μια δοκιμή που του έδινε ένα αρχείο ρυθμίσεων στις μορφές που οι άνθρωποι πραγματικά γράφουν: export, εισαγωγικά, σχόλια στο τέλος. Η δοκιμή απέτυχε στη γραμμή με εισαγωγικά και σχόλιο. Η διόρθωση διαβάζει μια τιμή με εισαγωγικά μέχρι το κλείσιμο των εισαγωγικών και αγνοεί ό,τι ακολουθεί.

Είχε σημασία;

Το ελέγξαμε πριν αλλάξουμε οτιδήποτε. Στη μηχανή δόμησης μας, ο μηχανισμός ελέγχου διαβάζει 133 μυστικές τιμές από τα 59 αρχεία που του δίνονται, και σε μια δεύτερη μηχανή 499· καμία δεν είχε αυτό το σχήμα. Καμία προηγούμενη απόφαση δεν αλλάζει: κάθε Εργαλειοθήκη που έχουμε κυκλοφορήσει σαρώθηκε για τις ίδιες τιμές που θα σαρωνόταν τώρα. Διορθώσαμε τον μηχανισμό ελέγχου και στις τρεις μηχανές ούτως ή άλλως.

Το συμπέρασμα

Αν ένας σαρωτής εξάγει ό,τι αναζητά, ελέγξτε την εξαγωγή με ρεαλιστικά δεδομένα εισόδου, και όχι μόνο την αναζήτηση με τοποθετημένες τιμές. Ένας καναρινός αποδεικνύει ότι το δίχτυ λειτουργεί. Δεν λέει τίποτα για το αν τα σωστά ψάρια φτάνουν ποτέ σε αυτό. Οι δοκιμές του Secret Gate καλύπτουν πλέον και τα δύο, και πριν από την κυκλοφορία του ελέγξαμε ότι διαβάζει ακριβώς τις ίδιες 133 τιμές με τη δική μας πύλη δομής.

Ενημερώθηκε: