Εξαρτήσεις και αλυσίδα λογισμικού — DedSec Project
Ακεραιότητα εξαρτήσεων — σταθερή έκδοση και έλεγχος αποτυπώματος Σενάριο και κριτήρια επιτυχίας Ένα τοπικό εργαλείο χρειάζεται συγκεκριμένο πακέτο. Το αναμενόμενο αρχείο περιγραφής…
Ακεραιότητα εξαρτήσεων — σταθερή έκδοση και έλεγχος αποτυπώματος
Σενάριο και κριτήρια επιτυχίας
Ένα τοπικό εργαλείο χρειάζεται συγκεκριμένο πακέτο. Το αναμενόμενο αρχείο περιγραφής καθορίζει όνομα, ακριβή έκδοση και αποτύπωμα SHA-256. Πρέπει να απορρίπτονται επιπλέον πεδία, λανθασμένες εκδόσεις και αλλαγμένα byte. Η άσκηση ελέγχει την ακεραιότητα έναντι ενός ήδη έμπιστου αποτυπώματος· δεν υποστηρίζει ότι ένα αποτύπωμα από τον ίδιο παραβιασμένο διακομιστή αποδεικνύει γνησιότητα.
Εκτελέσιμο εργαστήριο
Αποθήκευσε ως 12_dependencies.py και εκτέλεσε με Python 3 και την ενσωματωμένη βιβλιοθήκη. Τα δεδομένα είναι τεχνητά, χωρίς πρόσβαση σε προσωπικά αρχεία ή δίκτυο.
import hashlib, json, re
payload = b"offline reference fixture"
trusted_digest = hashlib.sha256(payload).hexdigest()
manifest = json.dumps({"name":"fixture","version":"2.4.1","sha256":trusted_digest})
def verify(manifest_text, blob):
meta = json.loads(manifest_text)
if set(meta) != {"name","version","sha256"}:
raise ValueError("unexpected manifest fields")
if meta["name"] != "fixture" or not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+",meta["version"]):
raise ValueError("untrusted name or unpinned version")
if not re.fullmatch(r"[0-9a-f]{64}", meta["sha256"]):
raise ValueError("invalid checksum")
if hashlib.sha256(blob).hexdigest() != meta["sha256"]:
raise ValueError("integrity failure")
return True
assert verify(manifest, payload)
for bad in (payload+b"x", payload[:-1]):
try: verify(manifest,bad)
except ValueError: pass
else: raise AssertionError("tamper undetected")
print("PASS pinned offline integrity fixture")
Τεχνική ερμηνεία
Η δέσμευση έκδοσης κάνει εμφανείς τις ανεπιθύμητες αλλαγές, αλλά έχει σημασία και η πηγή του πακέτου και του αποτυπώματος. Έλεγξε το δέντρο εξαρτήσεων, κράτησε το αρχείο κλειδώματος και εξέτασε τα έμμεσα πακέτα. Αν ένας επιτιθέμενος αλλάξει τόσο το αρχείο όσο και το αποτύπωμα, ένας απλός έλεγχος σύγκρισης μπορεί να περάσει. Για πραγματικές διανομές χρειάζονται αξιόπιστη πηγή και, όπου υπάρχει, επαλήθευση υπογραφής δημιουργού.
Περιορισμένες δοκιμές
Άλλαξε ένα byte και παρατήρησε την απόρριψη. Δοκίμασε επιπλέον πεδίο, έκδοση latest, κεφαλαία γράμματα στο αποτύπωμα και διαφορετικό όνομα πακέτου. Εξήγησε την αποτυχία της κάθε δοκιμής. Σύγκρινε σταθερές εκδόσεις με ελεύθερα εύρη και όρισε διαδικασία ελέγχου ανακοινώσεων ευπαθειών. Δεν γίνεται καμία εγκατάσταση.
Διάγνωση
Όταν διαφέρει ένα αποτύπωμα, σταμάτησε την εγκατάσταση και ερεύνησε την πηγή και την έκδοση. Μην καταργείς τους ελέγχους για να φανεί πράσινη η διαδικασία. Στα αρχεία καταγραφής μην αποθηκεύεις κωδικούς πρόσβασης ή κλειδιά υπηρεσιών.