Ασφαλίστε ένα API με ρυθμιζόμενα δεδομένα μοντελοποιώντας ποιος θα μπορούσε να το καταχραστεί, ελέγχοντας την εξουσιοδότηση σε κάθε αντικείμενο και πεδίο, συλλέγοντας και επιστρέφοντας όσο το δυνατόν λιγότερα δεδομένα, και κρατώντας τα μυστικά και τα αρχεία ελέγχου υπό αυστηρό έλεγχο. Οι αδυναμίες που μετρούν περισσότερο στην πράξη είναι τα κενά στην εξουσιοδότηση και οι αποκρίσεις που εκθέτουν υπερβολικά πολλά δεδομένα, όχι η σπασμένη κρυπτογράφηση.
Ξεκινήστε με ένα μοντέλο απειλών για τα δεδομένα, όχι για το framework
Πριν επιλέξετε εργαλεία, καταγράψτε τι εκθέτει το API και ποιος θα μπορούσε να το καταχραστεί. Για μια τράπεζα αυτό σημαίνει δεδομένα λογαριασμών και συναλλαγών· για μια εταιρεία ενέργειας ή κοινής ωφέλειας μπορεί να σημαίνει δεδομένα μετρήσεων, συμβάσεις πελατών και λειτουργικές μετρήσεις από το δίκτυο.
Ένα χρήσιμο μοντέλο απειλών είναι σύντομο. Απαριθμεί τα ευαίσθητα δεδομένα, κάθε καλούντα που μπορεί να τα φτάσει, τις ενέργειες που πρέπει να μπορεί να κάνει κάθε καλών, και τι γίνεται αν κάποιος από αυτούς παραβιαστεί. Αυτό το έγγραφο καθοδηγεί στη συνέχεια κάθε έλεγχο που ακολουθεί, και λέει σε όσους κάνουν τον έλεγχο τι να δοκιμάσουν.
- Ποια δεδομένα είναι προσωπικά, εμπιστευτικά ή ρυθμιζόμενα, και πού αποθηκεύονται.
- Κάθε καταναλωτής του API: εσωτερικές υπηρεσίες, συνεργάτες, εφαρμογές κινητών και διαχειριστές.
- Τι επιτρέπεται σε κάθε καταναλωτή να διαβάζει, να αλλάζει ή να ενεργοποιεί.
- Οι συνέπειες ενός token που διέρρευσε, ενός κακόβουλου εσωτερικού χρήστη ή ενός παραβιασμένου συστήματος συνεργάτη.
Αυθεντικοποιήστε κάθε καλούντα και μετά εξουσιοδοτήστε κάθε αντικείμενο
Χρησιμοποιήστε ένα τυπικό πρωτόκολλο όπως το OAuth 2.0 με OpenID Connect για τους χρήστες, και βραχύβια tokens ή mutual TLS για τις κλήσεις μεταξύ υπηρεσιών. Αποφύγετε τα μακρόβια κοινόχρηστα κλειδιά API, γιατί κανείς δεν μπορεί να πει ποιο σύστημα τα χρησιμοποίησε ούτε να τα ανακαλέσει χωρίς να χαλάσει άλλα.
Η αυθεντικοποίηση αποδεικνύει μόνο ποιος καλεί. Η πρώτη θέση στο OWASP API Security Top 10 είναι το broken object level authorization: ένας έγκυρος χρήστης αλλάζει ένα αναγνωριστικό στο αίτημα και διαβάζει την εγγραφή κάποιου άλλου. Ελέγχετε στον διακομιστή την κυριότητα ή τον ενοικιαστή (tenant) για κάθε αντικείμενο, κάθε λειτουργία και κάθε ευαίσθητο πεδίο, και μην εμπιστεύεστε ποτέ ένα αναγνωριστικό ή έναν ρόλο που στέλνει ο client.
Δώστε σε κάθε client και υπηρεσία τα ελάχιστα δικαιώματα που χρειάζεται
Τα ελάχιστα δικαιώματα περιορίζουν τη ζημιά όταν κάτι πάει στραβά. Εκδώστε ξεχωριστά διαπιστευτήρια ανά καταναλωτή, περιορίστε τα tokens σε συγκεκριμένες λειτουργίες και κρατήστε τα endpoints διαχείρισης σε ξεχωριστή διαδρομή με αυστηρότερους ελέγχους.
Εφαρμόστε τον ίδιο κανόνα κάτω από το API. Ο λογαριασμός υπηρεσίας που διαβάζει δεδομένα μετρητών δεν πρέπει να μπορεί να τα διαγράψει, και μια εργασία αναφορών πρέπει να συνδέεται με ρόλο βάσης δεδομένων μόνο για ανάγνωση. Αναθεωρείτε τα δικαιώματα σε τακτά διαστήματα, γιατί η πρόσβαση που δόθηκε για μια μεμονωμένη εργασία τείνει να μένει για πάντα.
Συλλέξτε λιγότερα, επιστρέψτε λιγότερα και κρατήστε τα λιγότερο
Η ελαχιστοποίηση των δεδομένων είναι ταυτόχρονα αρχή του GDPR και ισχυρό μέτρο ασφάλειας: δεδομένα που δεν αποθηκεύετε ποτέ δεν μπορούν να διαρρεύσουν. Ρωτήστε για κάθε πεδίο αν η υπηρεσία το χρειάζεται πραγματικά, και αφαιρέστε ή ψευδωνυμοποιήστε ό,τι δεν χρειάζεται.
Εφαρμόστε την ίδια πειθαρχία στις αποκρίσεις. Ορίστε ρητά σχήματα απόκρισης αντί να σειριοποιείτε ολόκληρα αντικείμενα της βάσης δεδομένων, αποκρύψτε αναγνωριστικά όπως οι αριθμοί λογαριασμών όπου δεν χρειάζεται η πλήρης τιμή, και ορίστε χρόνους διατήρησης ώστε οι παλιές εγγραφές να διαγράφονται. Τεκμηριώστε τη νομική βάση για κάθε σκοπό επεξεργασίας και υπογράψτε συμβάσεις εκτελούντος την επεξεργασία με κάθε προμηθευτή που χειρίζεται τα δεδομένα. Αυτά είναι τεχνικές πρακτικές, όχι νομική συμβουλή, οπότε εμπλέξτε τον υπεύθυνο προστασίας δεδομένων (DPO) ή τον νομικό σας σύμβουλο για τη νομική αξιολόγηση.
Επικυρώστε κάθε είσοδο και περιορίστε όσα μπορεί να καταναλώσει ένας καλών
Αντιμετωπίστε κάθε αίτημα ως εχθρικό μέχρι να επικυρωθεί. Επιβάλετε ένα σχήμα για κάθε endpoint, απορρίψτε τα άγνωστα πεδία και χρησιμοποιήστε παραμετροποιημένα queries, ώστε η είσοδος να μη γίνεται ποτέ μέρος μιας εντολής στη βάση δεδομένων.
Αρκετοί κίνδυνοι API της OWASP προέρχονται από όρια που λείπουν και όχι από κακό κώδικα. Βάλτε όριο αιτημάτων ανά client, όριο στο μέγεθος σελίδας και στο μέγεθος του payload, και προστατέψτε τις ευαίσθητες επιχειρησιακές ροές, όπως πληρωμές ή αλλαγές συμβάσεων, από αυτοματοποιημένη κατάχρηση. Αν το API ανακτά απομακρυσμένα URL για λογαριασμό των καλούντων, περιορίστε τους προορισμούς για να αποτρέψετε το server-side request forgery (SSRF).
Κρατήστε τα μυστικά έξω από τον κώδικα, τα images και τα αρχεία καταγραφής
Οι κωδικοί βάσεων δεδομένων, τα κλειδιά υπογραφής και τα διαπιστευτήρια συνεργατών ανήκουν σε έναν αποκλειστικό διαχειριστή μυστικών, εισάγονται κατά την εκτέλεση και ανανεώνονται σε τακτά διαστήματα. Σαρώνετε τα αποθετήρια και τα container images για μυστικά μέσα στο pipeline του build, και θεωρήστε παραβιασμένο κάθε μυστικό που φτάνει στον έλεγχο εκδόσεων.
Χωρίστε τα μυστικά ανά περιβάλλον, ώστε ένα διαπιστευτήριο δοκιμών που διέρρευσε να μην ανοίγει ποτέ την παραγωγή. Περιορίστε ποιος μπορεί να διαβάζει μυστικά στην παραγωγή και καταγράφετε κάθε πρόσβαση σε αυτά.
Καταγράφετε για έλεγχο και σχεδιάστε για λιγότερα περιστατικά
Τα ρυθμιζόμενα περιβάλλοντα πρέπει να απαντούν εκ των υστέρων σε ένα απλό ερώτημα: ποιος είχε πρόσβαση σε ποια δεδομένα, πότε και μέσω ποιου client. Καταγράψτε το για κάθε ευαίσθητη ανάγνωση και εγγραφή, αποθηκεύστε τα αρχεία καταγραφής εκεί όπου οι χειριστές της εφαρμογής δεν μπορούν να τα αλλοιώσουν, και κρατήστε τα προσωπικά δεδομένα έξω από τα μηνύματα καταγραφής.
Συνδυάστε την καταγραφή με ειδοποιήσεις για ασυνήθιστα μοτίβα, όπως ένας client που διαβάζει πολύ περισσότερες εγγραφές απ' ό,τι συνήθως, και με ένα δοκιμασμένο σχέδιο απόκρισης σε περιστατικά. Μέσω της Sopra Steria, οι μηχανικοί μας κατασκεύασαν ασφαλή API για ευαίσθητα δεδομένα κοινής ωφέλειας υπό κανονιστικούς περιορισμούς και ηγήθηκαν ενός εργαλείου επιχειρησιακής εποπτείας όπου τα επιβεβλημένα πρότυπα ασφάλειας συνοδεύτηκαν από λιγότερα περιστατικά στην παραγωγή. Η SDK Enterprises εφαρμόζει σήμερα τις ίδιες πρακτικές στα έργα των πελατών της.
Τα βασικά σημεία
- Ένα σύντομο, γραπτό μοντέλο απειλών για τα δεδομένα πρέπει να καθοδηγεί κάθε μέτρο ασφάλειας στο API.
- Ελέγχετε την εξουσιοδότηση στον διακομιστή για κάθε αντικείμενο, λειτουργία και ευαίσθητο πεδίο, όχι μόνο κατά τη σύνδεση.
- Τα ελάχιστα δικαιώματα ισχύουν εξίσου για tokens, λογαριασμούς υπηρεσιών και ρόλους βάσεων δεδομένων.
- Η ελαχιστοποίηση των δεδομένων μειώνει τόσο την έκθεση στον GDPR όσο και τις συνέπειες κάθε παραβίασης.
- Τα αρχεία ελέγχου πρέπει να δείχνουν ποιος είχε πρόσβαση σε τι και πότε, χωρίς να διαρρέουν τα ίδια προσωπικά δεδομένα.
Συχνές ερωτήσεις
Αρκεί το HTTPS για να ασφαλίσετε ένα API;
Όχι. Το TLS προστατεύει τα δεδομένα κατά τη μεταφορά, αλλά πολλές παραβιάσεις API αφορούν αυθεντικοποιημένους καλούντες που φτάνουν σε δεδομένα που δεν θα έπρεπε να βλέπουν. Οι έλεγχοι εξουσιοδότησης, η επικύρωση εισόδων, τα όρια αιτημάτων και η καταγραφή για έλεγχο εξακολουθούν να είναι απαραίτητα.
Τι είναι το broken object level authorization;
Είναι ένα κενό όπου το API ελέγχει ότι ο καλών έχει συνδεθεί, αλλά όχι ότι η εγγραφή που ζητά του ανήκει. Αν αλλάξει ένα αναγνωριστικό στο URL ή στο σώμα του αιτήματος, εκτίθενται τα δεδομένα άλλων χρηστών. Η λύση είναι ένας έλεγχος κυριότητας ή ενοικιαστή στον διακομιστή για κάθε αντικείμενο.
Ορίζει ο GDPR συγκεκριμένα μέτρα ασφάλειας για τα API;
Ο GDPR απαιτεί κατάλληλα τεχνικά και οργανωτικά μέτρα ανάλογα με τον κίνδυνο, χωρίς να επιβάλλει συγκεκριμένα εργαλεία. Μέτρα όπως ο περιορισμός της πρόσβασης, η ελαχιστοποίηση, η ψευδωνυμοποίηση και η καταγραφή είναι συνηθισμένοι τρόποι να καλυφθεί αυτή η απαίτηση, και οι νομικοί σας σύμβουλοι πρέπει να επιβεβαιώσουν τι ισχύει στη δική σας περίπτωση.