Μονάδα 11 / 12

Επαλήθευση κώδικα, τρωτά σημεία και κίνδυνοι εξόδου AI

Κέρδη:

  • Δυνατότητα επαλήθευσης της εξόδου AI σε τρία επίπεδα: ακρίβεια, ασφάλεια και πηγή/άδεια χρήσης
  • Δυνατότητα κάλυψης κινδύνων όπως ένεση, πακέτα παραισθήσεων και θαμμένα μυστικά με ασφαλή καλούπια και εργαλεία
  • Δυνατότητα παρουσίασης του κρίσιμου για την ασφάλεια κώδικα σε έγκριση αρμόδιου μηχανικού και κατανόηση της μη μεταβίβασης ευθύνης

Η δημιουργία κώδικα AI είναι εύκολη. Το να τον εμπιστεύεσαι είναι ακριβό. Ο μοναδικός σκοπός αυτής της ενότητας είναι να μετατρέψει την αρχή "επαλήθευση", την οποία έχουμε επαναλάβει σε όλες τις προηγούμενες ενότητες, σε μια συστηματική πειθαρχία μηχανικής. Επειδή ο κώδικας που παράγεται από την τεχνητή νοημοσύνη, ακόμα κι αν φαίνεται σωστός με την πρώτη ματιά, εγκυμονεί τρεις διαφορετικούς κινδύνους: να είναι μη λειτουργικός/λανθασμένος (ψευδαίσθηση), να είναι ανασφαλής (τρωτότητα) και να εγκυμονεί νομικούς/αδειοδοτικούς κινδύνους. Το να γνωρίζεις αυτά τα τρία και να δημιουργήσεις μια πόρτα για καθένα από αυτά σε κάνει επαγγελματία.

Εδώ εξετάζουμε την "επικύρωση" σε τρία επίπεδα: ορθότητα (ο κώδικας κάνει πράγματι τη δουλειά του;), ασφάλεια (αντέχει κακόβουλη εισαγωγή;) και προέλευση/άδεια (έχω το δικαίωμα να χρησιμοποιήσω αυτόν τον κωδικό;). Κάθε επίπεδο έχει τα δικά του μέσα ελέγχου και κανένα από αυτά δεν μπορεί να παρακαμφθεί με "αυτό είπε το AI".

Τρία στρώματα κινδύνου

1. Κίνδυνος ακρίβειας (ψευδαίσθηση). Το μοντέλο μπορεί να καλέσει μια ανύπαρκτη συνάρτηση, να κάνει κακή χρήση ενός API, να παρακάμψει αθόρυβα μια θήκη άκρων. Ο κώδικας φαίνεται "λογικός" αλλά είναι λάθος. Αντίδοτο: συλλογή, δοκιμή, στατική ανάλυση και οπτική επιθεώρηση.

2. Κίνδυνος ασφάλειας. Η τεχνητή νοημοσύνη μπορεί να επαναλάβει μη ασφαλή μοτίβα στα δεδομένα εκπαίδευσης: ερώτημα ευάλωτο στην έγχυση SQL, μη επιβεβαιωμένη είσοδος χρήστη, αδύναμη κρυπτογράφηση, ανασφαλής deserialization, ανοιχτή ανακατεύθυνση. Ο κώδικας λειτουργεί αλλά είναι ευάλωτος σε επίθεση. Αντίδοτο: αναθεώρηση εστιασμένη στην ασφάλεια, αυτοματοποιημένοι σαρωτές (SAST) και επιβλητικά γνωστά ασφαλή μοτίβα.

3. Κίνδυνος πηγής/άδειας. Η τεχνητή νοημοσύνη μπορεί να παράγει αποτελέσματα που μοιάζει πολύ με κώδικα που προστατεύεται από πνευματικά δικαιώματα ή περιοριστική άδεια χρήσης ή μπορεί να προτείνει μια ακατάλληλη εξάρτηση με άδεια χρήσης. Αντίδοτο: έλεγχος εξάρτησης και άδειας, έλεγχος πρωτοτυπίας, εταιρική πολιτική.

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

Βήμα προς βήμα: Πύλη ελέγχου ταυτότητας σε επίπεδα

  1. Διαβάστε με κατανόηση. Κατανοήστε πραγματικά τον κώδικα πριν τον αποδεχτείτε. Μην συγχωνεύετε κώδικα που δεν καταλαβαίνετε. Εάν δεν μπορείτε να εξηγήσετε "γιατί λειτουργεί", δεν έχει επικυρωθεί ακόμα.
  2. Επαληθεύστε ότι υπάρχει. Βεβαιωθείτε ότι κάθε συνάρτηση, API και πακέτο που χρησιμοποιείται υπάρχει στην πραγματικότητα και χρησιμοποιείται σωστά (πύλη ψευδαισθήσεων).
  3. Εκτελέστε αυτοματοποιημένα εργαλεία. Compiler, linter (σαρωτής στυλ/σφαλμάτων), έλεγχος τύπων, δοκιμές μονάδων και, αν είναι δυνατόν, SAST (Static Application Security Testing — εργαλείο που σαρώνει τον πηγαίο κώδικα για τρωτά σημεία).
  4. Δείτε το από την άποψη της ασφάλειας. Είναι επικυρωμένη η εισαγωγή; Είναι το ερώτημα παραμετροποιημένο; Είναι θαμμένο το μυστικό; Υπάρχει έλεγχος εξουσιοδότησης;
  5. Ελέγξτε την πηγή και την άδεια χρήσης. Έχουν άδεια οι νέες εξαρτήσεις; Μήπως η έξοδος μοιάζει υπερβολικά με μια γνωστή βάση κώδικα;
  6. Εάν είναι κρίσιμο για την ασφάλεια, ζητήστε την έγκριση ειδικού. Η ανεξάρτητη εξέταση από μηχανικό ικανό σε τομείς όπως η πιστοποίηση ταυτότητας, η πληρωμή, η κρυπτογραφία, ο έλεγχος πρόσβασης είναι υποχρεωτική.

Τρεις Μίνι Θήκες

Περίπτωση 1 — Η έγχυση SQL πιάστηκε στην πύλη επιθεώρησης. Ο κώδικας που δημιουργείται από AI που συνενώνει την είσοδο του χρήστη απευθείας στο ερώτημα SQL για ένα τελικό σημείο αναζήτησης ("... WHERE name = '" + q + "'"). Ο κώδικας λειτουργούσε και πέρασε τη δοκιμή. Η επιθεώρηση εστιασμένη στην ασφάλεια και η σάρωση SAST το έπιασαν. Μετατράπηκε σε παραμετροποιημένο ερώτημα (prepared statement). Αν δεν είχε εντοπιστεί, θα ήταν μια κλασική ευπάθεια διαρροής δεδομένων.

Περίπτωση 2 — Πακέτο ψευδαισθήσεων. Το AI πρότεινε ένα ανύπαρκτο πακέτο npm (γρήγορη-ασφαλής ανάλυση) για μια εργασία. Όταν ο προγραμματιστής προσπάθησε να το εγκαταστήσει, το πακέτο δεν βρέθηκε. Χειρότερα: σε ορισμένες περιπτώσεις, οι εισβολείς μπορούν να γεμίσουν τέτοια ονόματα πακέτων "φαντάσματα" με πραγματικά, κακόβουλα πακέτα (σύγχυση εξάρτησης). Μάθημα: επαληθεύστε κάθε προτεινόμενο πακέτο σε σχέση με το επίσημο μητρώο και το ιστορικό λήψης/συντήρησης.

Περίπτωση 3 — Ασυμβατότητα άδειας χρήσης. Μια έξυπνη συνοδευτική βιβλιοθήκη που προτάθηκε από την AI είχε μια ισχυρή άδεια copyleft που δεν ήταν συμβατή με την άδεια προϊόντος του ιδρύματος. Η σάρωση άδειας εξάρτησης ανέφερε αυτό. Η ομάδα αντικατέστησε την άδεια με μια κατάλληλη εναλλακτική. Χωρίς επαλήθευση, θα προέκυπτε νομική επιβάρυνση στη διανομή προϊόντων.

Τέσσερα αντιγράψιμα πρότυπα

Αυτοέλεγχος πριν από την εισαγωγή:

Πριν αποδεχτείτε τον ακόλουθο κώδικα που δημιουργήθηκε με AI, ελέγξτε: 1) Υπάρχει πράγματι κάθε λειτουργία/API/πακέτο που χρησιμοποιεί; Επισημάνετε τους ύποπτους.2) Υπάρχουν μη επικυρωμένα δεδομένα εισόδου, συνένωση SQL/εντολών, θαμμένο μυστικό, αδύναμη κρυπτογράφηση; 3) Ποιες είναι οι αδιευκρίνιστες περιπτώσεις σφαλμάτων/ακρών; Επισημάνετε κάθε εύρημα ως "βέβαιο / πιθανό" και προτείνετε διορθώσεις.{{κώδικας}}

Επισκόπηση εστιασμένη στην ασφάλεια:

Εξετάστε αυτόν τον κωδικό με ένα μάτι ασφαλείας. Αναζητήστε κοινά τρωτά σημεία του στυλ OWASP: έγχυση, κατεστραμμένος έλεγχος ταυτότητας/εξουσιοδότηση, αποκάλυψη ευαίσθητων δεδομένων, μη ασφαλής deserialization, ανακατεύθυνση χωρίς έλεγχο ταυτότητας. Για κάθε εύρημα: κίνδυνος, σενάριο εκμετάλλευσης, αποκατάσταση. Αυτή είναι μια προκαταρκτική εξέταση. παραπέμψτε τα κρίσιμα ευρήματα στην αναθεώρηση ανθρώπινης ασφάλειας.{{code}}

Έλεγχος εξάρτησης και άδειας:

Καταχωρίστε τις εξαρτήσεις που προστέθηκαν/προτείνονται από αυτόν τον κωδικό. Για καθένα: υπάρχει πράγματι το πακέτο, διατηρείται, ποια θα ήταν η τυπική του άδεια (ΠΡΕΠΕΙ ΝΑ ΕΠΑΛΗΘΕΥΘΕΙ) και είναι πραγματικά απαραίτητο για το έργο ή μπορεί να γίνει με ένα υπάρχον εργαλείο;{{κώδικας ή λίστα εξαρτήσεων}}

Ασφαλής επιβολή ξυλότυπου (στην παραγωγή):

Γράψτε κώδικα για {{εργασία}}. ΥΠΟΧΡΕΩΤΙΚΟΙ κανόνες ασφαλείας:- Επικύρωση/εξυγίανση όλων των εξωτερικών εισροών.- Χρησιμοποιήστε μόνο παραμετροποιημένο ερώτημα στην πρόσβαση στη βάση δεδομένων.- Μην ενσωματώνετε μυστικά στον κώδικα. Υποθέστε μεταβλητή περιβάλλοντος/διαχειριστή μυστικών - Μην καταπιείτε σφάλματα. Σκεφτείτε το με νόημα. Εξηγήστε πώς ο κώδικας συμμορφώνεται με αυτούς τους κανόνες σε 3 στοιχεία.

Αδύναμη προτροπή / Ισχυρή προτροπή

Αδύναμο: "Γράψτε ένα ερώτημα που πραγματοποιεί αναζήτηση με βάση το όνομα χρήστη." (Ενδέχεται να εμφανιστεί ένας κώδικας ευάλωτος στην ένεση.)
Ισχυρή: "Γράψτε μια συνάρτηση που πραγματοποιεί αναζήτηση με βάση το όνομα χρήστη. Ποτέ μην συνδέετε την είσοδο χρήστη σε ένα ερώτημα ως συμβολοσειρά. Χρησιμοποιήστε ένα ερώτημα παραμετροποιημένο (προετοιμασμένη δήλωση). Επικυρώστε την είσοδο για μήκος και χαρακτήρα. Εξηγήστε με 2 προτάσεις γιατί ο κώδικας είναι κλειστός για ένεση."

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

Επίπεδο ελέγχου ταυτότητας

Εργαλείο/μέθοδος

Αρκεί το "AI είπε";

ακρίβεια

Σύνταξη, δοκιμή, οπτική επιθεώρηση

όχι

API/πραγματικότητα πακέτου

Επίσημος έλεγχος εγγράφων/αρχείων

όχι

Ασφάλεια

SAST, έλεγχος ασφαλείας

όχι

Άδεια/πηγή

Έλεγχος εξάρτησης και άδειας

όχι

Ασφάλεια-κρίσιμη λογική

Έγκριση ειδικού μηχανικού

Απολύτως όχι

Η ευθύνη δεν μπορεί να μεταβιβαστεί

Η ευθύνη για λάθη, ευπάθειες ή παραβιάσεις που προκύπτουν από τον κώδικα που παράγεται από ένα εργαλείο τεχνητής νοημοσύνης ανήκει στην ομάδα που συγκεντρώνει και διανέμει αυτόν τον κώδικα και όχι στον πάροχο του εργαλείου. Αυτό είναι επαγγελματικό και νομικό γεγονός: υπογράφεις. Άρα το "AI το παρήγαγε" δεν είναι δικαιολογία, αλλά δικαιολογία για επιπλέον προσοχή. Ιδιαίτερα σε κρίσιμα για την ασφάλεια συστήματα, η έξοδος τεχνητής νοημοσύνης δεν υποκαθιστά σε καμία περίπτωση την επανεξέταση και την έγκριση από ειδικευμένο μηχανικό. Το πολύ, η τεχνητή νοημοσύνη παρέχει ένα σχέδιο που επιταχύνει αυτόν τον μηχανικό.

Συμβουλή: Δημιουργήστε μια σύντομη λίστα ελέγχου στην ομάδα σας την οποία αποκαλείτε "πύλη επικύρωσης για κώδικα που δημιουργείται από AI" (κατασκευή + δοκιμή + σάρωση ασφαλείας + οπτική επιθεώρηση). Μόλις αυτή η πύλη γίνει συνήθεια, η απώλεια ταχύτητας είναι ελάχιστη και η μείωση του κινδύνου είναι μέγιστη.

Συνήθη λάθη

  • Μπερδεύοντας τα «έργα» με το «ασφαλές». Ο κώδικας που περνάει τη δοκιμή μπορεί να είναι ευάλωτος σε επίθεση.
  • Χρήση του πακέτου/API χωρίς επαλήθευση. Τα παραισθησιογόνα πακέτα αλλοιώνονται και αποτελούν κίνδυνο για την ασφάλεια.
  • Παράκαμψη αυτοματοποιημένων εργαλείων. Το στόμιο, το πούλι τύπων και το SAST πιάνουν φτηνά ό,τι χάνουν οι άνθρωποι.
  • Αγνοώντας την άδεια. Η ακατάλληλη αδειοδοτημένη εξάρτηση δημιουργεί νομική επιβάρυνση στη διανομή.
  • Αναθέτοντας την ευθύνη στο όχημα. Η ομάδα είναι υπεύθυνη για τον κώδικα στην παραγωγή. Το «AI το έκανε» δεν αποτελεί δικαιολογία.

Συνοπτικά

Η αποδοχή της εξόδου AI απαιτεί τρία επίπεδα επαλήθευσης: ορθότητα (μεταγλώττιση, δοκιμή, οπτική επιθεώρηση), ασφάλεια (SAST και εστιασμένη στην ασφάλεια αναθεώρηση) και πηγή/άδεια (έλεγχος εξάρτησης). Επιβεβαιώστε ότι κάθε πακέτο και API που χρησιμοποιούνται υπάρχουν στην πραγματικότητα, επιβάλετε ασφαλή μοτίβα από την αρχή και υποβάλετε τον κρίσιμο για την ασφάλεια κώδικα για έγκριση από πιστοποιημένο μηχανικό. Το "Works" δεν σημαίνει ασφαλές και το "AI που παράγεται" δεν αίρει την ευθύνη. Η πύλη επαλήθευσης είναι το τίμημα του επαγγελματισμού, όχι η ταχύτητα.

Εργασία εφαρμογής

Δώστε σκόπιμα σε μια τεχνητή νοημοσύνη μια εργασία ευαίσθητη στην ασφάλεια (π.χ. "μια λειτουργία που αναζητά τη βάση δεδομένων με στοιχεία χρήστη"), αυτή τη φορά χωρίς να επιβάλετε ένα ασφαλές μοτίβο. Διαβιβάστε τον εισερχόμενο κώδικα μέσω των προτύπων "αυτοέλεγχο πριν από την εισαγωγή" και "αναθεώρηση εστιασμένη στην ασφάλεια": υπάρχει κάποια ένεση, θαμμένο μυστικό, ένα πακέτο με παραισθήσεις ή μη επιβεβαιωμένη είσοδος; Στη συνέχεια, ζητήστε ξανά την ίδια εργασία με το πρότυπο "επιβολή ασφαλούς μοτίβου" και συγκρίνετε τις δύο εξόδους. Εάν είναι δυνατόν, εκτελέστε ένα εργαλείο linter/SAST και συγκρίνετε τα ευρήματα με την αυτορρύθμιση του AI.

λίστα ελέγχου

  • [ ] Επαληθεύω την έξοδο AI σε τρία επίπεδα: ακρίβεια, ασφάλεια και άδεια χρήσης.
  • [ ] Επιβεβαιώνω ότι κάθε συνάρτηση, API και πακέτο που χρησιμοποιούνται υπάρχουν στην πραγματικότητα.
  • [ ] Εκτελώ εργαλεία compile, test, linter και, αν είναι δυνατόν, SAST.
  • [ ] Επιβάλλω ασφαλή μοτίβα (παραμετροποιημένο ερώτημα, επικύρωση εισόδου, διαχείριση μυστικών) από την αρχή.
  • [ ] Ελέγχω την αδειοδότηση και την απαίτηση νέων εξαρτήσεων.
  • [ ] Υποβάλλω κωδικό κρίσιμου για την ασφάλεια για έγκριση από αρμόδιο μηχανικό και κατανοώ ότι είμαι υπεύθυνος.