Μέρος 1: DevSecOps

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

 

Νότης Ηλιόπουλος

MSc InfoSec, MSc MBIT, CISA, CISM, ISO27k LA

Information Security & Compliance Officer

MR HealthTech Ltd.

 

 

Η παρούσα συμβολή προσεγγίζει το ζήτημα της ενσωμάτωσης των απαιτήσεων της ασφάλειας πληροφοριών στην διαδικασία της ανάπτυξης λογισμικού (development) και της λειτουργίας (operations) των πληροφοριακών συστημάτων και αναλύει τους τρόπους που αυτή μπορεί να επιτευχθεί μέσω της υιοθέτησης και πρακτικής εφαρμογής της φιλοσοφίας DevSecOps.

Η φιλοσοφία DevOps και η πρακτική της εφαρμογή ως εταιρική διεργασία καλείται να γεφυρώσει την έλλειψη συνεργασίας μεταξύ των τμημάτων ανάπτυξης λογισμικού (Software Development) και των τμημάτων λειτουργίας υποδομών πληροφορικής (Operations), με στόχο τη βελτίωση της αξιοπιστίας του λογισμικού, τη συντόμευση των κύκλων υλοποίησης νέων εκδόσεών του, καθώς και τη συντόμευση του χρόνου που απαιτείται για την εν λόγω υλοποίηση. Η διεργασία DevOps (προπομπός του DevSecOps) υιοθετήθηκε γρήγορα τόσο από τις από τις εταιρείες ανάπτυξης λογισμικού, όσο και από τους Οργανισμούς που βασίζουν σε μεγάλο βαθμό τη λειτουργία τους σε συστήματα και εφαρμογές πληροφορικής. Ωστόσο, κατέστη άμεσα εμφανές ότι οι απαιτήσεις αναφορικά με την ασφάλεια πληροφοριών, την κανονιστική συμμόρφωση, την προστασία των προσωπικών δεδομένων και την ανθεκτικότητα του παραγόμενου λογισμικού (στο εξής: ασφάλεια πληροφοριών) πρέπει ν’ αποτελέσουν μέρος της διεργασίας DevOps. Συνεπεία αυτού υπήρξε η εμφάνιση της φιλοσοφίας DevSecOps, η οποία συμπεριλαμβάνει όλα τα ανωτέρω .

 

DevOps + Sec η αναγκαιότητα και ο τρόπος ενσωμάτωσης των απαιτήσεων ασφάλειας

Η ταχύτητα και η συχνότητα με την οποία υλοποιούνται και διατίθενται προς χρήση οι νέες εκδόσεις λογισμικού καθιστούν αναποτελεσματικές και παρωχημένες τις καθιερωμένες μεθόδους διαχείρισης των απαιτήσεων που αφορούν στην ασφάλεια των πληροφοριών, στην προστασία της ιδιωτικότητας και στην κανονιστική συμμόρφωση, αναφορικά με την ανάπτυξη λογισμικού. Η υιοθέτηση της προσέγγισης DevSecOps έχει ως στόχο την εφαρμογή μιας νέας διεργασίας που αφορά στην ενσωμάτωση των απαιτήσεων ασφάλειας πληροφοριών καθ’ όλη τη διάρκεια του κύκλου ζωής του παραγόμενου λογισμικού, η ανάπτυξη του οποίου στηρίζεται πλέον σε πιο ευέλικτες μεθόδους (Agile). Η εν λόγω διεργασία συνιστά τη φυσική εξέλιξη της διεργασίας DevOps, και έχει ως επιπλέον στόχο την ενσωμάτωση των απαιτήσεων ασφάλειας πληροφοριών σε κάθε βήμα των νέων ευέλικτων μεθοδολογιών ανάπτυξης λογισμικού. Με τον τρόπο αυτόν, οι ανωτέρω απαιτήσεις αποτελούν μέρος του κάθε κύκλου ανάπτυξης λογισμικού (sprint) και δεν αντιμετωπίζονται μόνο στο πέρας της συναφούς διαδικασίας, κατά τα ειωθότα στις παραδοσιακές μεθόδους,

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

Στη συνέχεια παρατίθενται οι βασικές απαιτήσεις ως προς την ασφάλεια πληροφοριών για κάθε μία από τις φάσεις ανάπτυξης λογισμικού και οι οποίες πρέπει να εμπεριέχονται στη διεργασία DevSecOps:

Σχεδιασμός και ανάλυση – Στη φάση του σχεδιασμού, η ομάδα υλοποίησης αναγνωρίζει τις ανάγκες που αφορούν στην ασφάλεια πληροφοριών σε κάθε φάση του έργου και κατανέμει τις σχετικές αρμοδιότητες σε μηχανικούς που έχουν τις κατάλληλές δεξιότητας. Ταυτόχρονα, διενεργείται η αρχική αξιολόγηση των απειλών και των κινδύνων που άπτονται της ασφάλειας πληροφοριών με σκοπό την καταγραφή των σχετικών απαιτήσεων και προδιαγραφών ασφάλειας του τελικού παραδοτέου (νέο προϊόν ή νέα έκδοση). Ένας αποτελεσματικός τρόπος για να γίνει αυτό είναι η κατάρτιση και τεκμηρίωση του «Σχεδίου Ασφάλειας» (security plan) του υπό ανάπτυξη προϊόντος, το οποίο περιλαμβάνει τη χαρτογράφηση των απειλών ασφάλειας, τα σημεία τα οποία θα μπορούσαν να πυροδοτήσουν τις εν λόγω απειλές, καθώς και τα προτεινόμενα μέτρα προστασίας. Περαιτέρω, το σχέδιο αυτό πρέπει να αναφέρει τις απαιτήσεις τόσο αναφορικά με την προστασία των προσωπικών δεδομένων όσο και αναφορικά με την κανονιστική συμμόρφωση.

Αρχιτεκτονικός σχεδιασμός του προϊόντος: Υιοθέτηση της φιλοσοφίας «ασφάλεια κατά τη σχεδίαση» (Secure by design), σύμφωνα με οποία το κάθε προϊόν, ή η κάθε νέα έκδοση του προϊόντος σχεδιάζεται εξ’ αρχής λαμβάνοντας υπ’ όψη τις βέλτιστες πρακτικές ασφάλειας πληροφοριών, οι οποίες αφορούν σε κάθε συστατικό του προϊόντος, από τον πηγαίο κώδικα έως την υποδομή στην οποία θα εγκατασταθεί. Κατά το σχεδιασμό της αρχιτεκτονικής, το προαναφερθέν «Σχέδιο Ασφάλειας» αποτελεί το βασικό εργαλείο προκειμένου να σχεδιαστούν οι απαραίτητες δικλείδες ασφάλειας και να ληφθούν υπ’ όψη οι εκάστοτε απαιτήσεις κανονιστικής συμμόρφωσης.

Ανάπτυξη και ανασκόπηση πηγαίου κώδικα – Κύριο μέλημα αποτελεί η συνεχής βελτίωση της ποιότητας, της ασφάλειας και της ανθεκτικότητας του τελικού προϊόντος μέσω του πηγαίου κώδικα. Προς τον σκοπό αυτόν, είναι απαραίτητη η συνεχής εκπαίδευση των προγραμματιστών σε πρακτικές ασφαλούς προγραμματισμού και ανθεκτικότητας. Πέρα από την εκπαίδευση αναγκαία είναι και η έκδοση κατευθυντήριων οδηγιών που αφορούν στην ασφάλεια από τις οποίες οι προγραμματιστές δε θα πρέπει να παρεκκλίνουν. Κατά τη φάση της ανάπτυξης του πηγαίου κώδικα, θα πρέπει οι ως άνω αρχές να είναι γνωστές στους μηχανικούς λογισμικού και να τηρούνται απαρέγκλιτα.

Ανασκόπηση και έλεγχοι λογισμικού – Οι ομάδες ανάπτυξης λογισμικού πρέπει να είναι επιφορτισμένες με την τακτική εξέταση του παραγόμενου κώδικα προκειμένου να εντοπίζονται πιθανές ευπάθειες ως προς την ασφάλεια πληροφοριών και ζητήματα ανθεκτικότητας. Αυτό μπορεί να επιτευχθεί με τη συνδυαστική χρήση αυτοματοποιημένων εργαλείων και χειρωνακτικών ελέγχων και να αποτελέσει μέρος των τακτικών ελέγχων του παραγόμενου λογισμικού. Σε αντίθεση με τον παραδοσιακό τρόπο, κατά τον οποίο ο έλεγχος ασφάλειας του λογισμικού διενεργείται από συγκεκριμένη ομάδα στο τέλος της φάσης ανάπτυξης του λογισμικού, η διεργασία DevSecOps τοποθετεί τους ελέγχους ασφάλειας του λογισμικού καθ’ όλη τη φάση της ανάπτυξης, έτσι ώστε να είναι δυνατή η έγκαιρη ανάδειξη των αδυναμιών προκειμένου να είναι αντίστοιχα εφικτή η διόρθωση. Επιπροσθέτως, οι Οργανισμοί που υιοθετούν την εν λόγω διεργασία επιβάλλεται να εξελίξουν ακόμη περαιτέρω τους ελέγχους που αφορούν στην ασφάλεια του παραγόμενου λογισμικού, δεδομένης της ήδη ισχύουσας πρακτικής της συνεχούς ενσωμάτωσης νέων λειτουργιών και συνεχούς κυκλοφορίας νέων εκδόσεων λογισμικού (continuous integration / continuous deployment), η οποία είναι απόρροια της υιοθέτησης των ευέλικτων μεθοδολογιών ανάπτυξης λογισμικού (agile). Σ’ ένα τέτοιο περιβάλλον, κρίνεται αναγκαία η ενσωμάτωση ελέγχων οι οποίοι θ’ αξιολογούν το παραγόμενο λογισμικό στην τελική του μορφή και θα προβαίνουν στον απαραίτητο έλεγχο προκειμένου να εντοπίζονται οι πιθανές αδυναμίες ασφάλειας τόσο σε επίπεδο λογικής ροής του λογισμικού όσο και σ΄ επίπεδο επικοινωνίας μεταξύ των διαφορετικών συστατικών του προϊόντος και των επικοινωνιών που διενεργούνται μέσω των προγραμματιστικών διεπαφών (ΑΡΙς). Οι συγκεκριμένοι έλεγχοι μπορούν να πραγματοποιηθούν με τη χρήση αυτοματοποιημένων εργαλείων (δυναμικός έλεγχος πηγαίου κώδικα) καθώς και με τη διενέργεια δοκιμών παρείσδυσης (penetration tests). Ιδανικά, τα παραπάνω θα πρέπει ν’ αποτελέσουν μέρος των προδιαγεγραμμένων σεναρίων ελέγχου (test cases) του τελικού παραδοτέου, έτσι ώστε να υπάρχει συνολική διαχείριση των ελέγχων και δοκιμών που πραγματοποιούνται σε κάθε στάδιο.

Εγκατάσταση – Η νέα έκδοση ενός προϊόντος λογισμικού εγκαθίσταται στο περιβάλλον παραγωγής μέσω αυτοματοποιημένων διαδικασιών, οι οποίες αποσκοπούν στην εξασφάλιση της ασφαλούς και αξιόπιστης εγκατάστασης της νέας έκδοσης στο παραγωγικό περιβάλλον. Επιπρόσθετα, η ασφάλεια του παραγωγικού περιβάλλοντος στο οποίο εγκαθίσταται το προϊόν χρίζει ιδιαίτερης προσοχής και οφείλει ν’ ακολουθεί τις βέλτιστες πρακτικές ασφάλειας σε όλα τα επίπεδα (δίκτυο, βάσεις δεδομένων συστήματα).

Λειτουργία – Κατά τη φάση της παραγωγικής λειτουργίας του νέου λογισμικού, γίνεται χρήση αυτοματοποιημένων διαδικασιών εντοπισμού των τεχνικών αδυναμιών ασφάλειας. Για τον σκοπό αυτό χρησιμοποιούνται συστήματα παρακολούθησης τυχόν κακόβουλων επιθέσεων, συστήματα ανίχνευσης εισβολών και συστήματα ανίχνευσης τεχνικών αδυναμιών ασφάλειας. Με τον τρόπο αυτόν, αυξάνεται η αποτελεσματικότητα των ελέγχων που αφορούν σε πιθανές τεχνικές αδυναμίες τις οποίες μπορούν να εκμεταλλευτούν κακόβουλοι επιτιθέμενοι. Ταυτόχρονα, συλλέγονται πληροφορίες σε πραγματικό χρόνο με σκοπό τον εντοπισμό πιθανών προσπαθειών παραβίασης της ασφάλειας του παραγωγικού περιβάλλοντος, συμπεριλαμβανομένου και του λογισμικού. Τυχόν ελαττώματα ή τρωτά σημεία τα οποία προκύπτουν από τις αναλύσεις, γνωστοποιούνται στους υπεύθυνους λειτουργίας του παραγωγικού περιβάλλοντος προκειμένου να επιλυθούν έτσι ώστε να υπάρχει συνεχής βελτίωση και να διασφαλίζεται η αξιοπιστία και η ασφάλεια του προϊόντος.

Σημεία προς αποφυγή

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

Ο Οργανισμός επικεντρώνεται αποκλειστικά στη χρήση εργαλείων που αυτοματοποιούν μέρη της διεργασίας DevSecOps – Προκειμένου ο Οργανισμός να αποκομίσει τα πλήρη οφέλη από την υιοθέτηση της διεργασίας DevSecOps, χρειάζεται να ενσωματώσει την ασφάλεια πληροφοριών σε όλες τις φάσεις της διαδικασίας ανάπτυξης προϊόντων λογισμικού. Πρωτίστως, χρειάζεται ν’ υιοθετήσει τη διεργασία DevSecOps και να δημιουργήσει μία δια-τμηματική ομάδα επαγγελματιών οι οποίοι θα συμμετέχουν και θα παρέχουν τις υπηρεσίες τους σε όλες τις φάσεις της διαδικασίας ανάπτυξης προϊόντων λογισμικού, ενώ ταυτόχρονα θα βελτιστοποιούν τις υπηρεσίες που προσφέρουν και το επίπεδο αυτοματοποίησής τους.

Αδυναμία εξασφάλισης της υποστήριξης της διοίκησης – Προκειμένου να εξασφαλιστεί η υποστήριξη της διοίκησης του κάθε Οργανισμού, καθίσταται αναγκαίο ν’ αναδειχθούν τα γενικότερα οφέλη από την υιοθέτηση της εν λόγω διεργασίας, με έμφαση στην αύξηση τόσο της αποτελεσματικότητας της ευρύτερης διεργασίας ανάπτυξης και εγκατάστασης λογισμικού, όσο και του παρεχομένου επιπέδου ασφάλειας και αξιοπιστίας του παραγόμενου λογισμικού.

Εφαρμογή της διεργασίας DevSecOps μόνο σε νέα προϊόντα – Η υιοθέτηση της διεργασίας DevSecOps καθίσταται σαφώς ευκολότερη κατά την ανάπτυξη νέων προϊόντων λογισμικού, όμως, η άμεση αξία της για τον Οργανισμό μπορεί να γίνει αντιληπτή ήδη από την εφαρμογή της σε υφιστάμενα προϊόντα λογισμικού, εμφανίζοντας άμεσα αποτελέσματα, όπως η μεγιστοποίηση της ευελιξίας ανάπτυξης, η ασφάλεια και η αξιοπιστία των νέων εκδόσεων. Ως εκ τούτου, πρέπει να εμπεδωθεί η προστιθέμενη αξία της νέας διεργασίας και να εφαρμοστεί κατά προτεραιότητα στους τομείς που καταδεικνύουν άμεσα τη χρησιμότητά της.

Παράλειψη ή αδυναμία δημιουργίας της απαιτούμενης κουλτούρας και των απαραίτητων δεξιοτήτων – Η υιοθέτηση της διεργασίας DevSecOps απαιτεί την αλλαγή κουλτούρας αφού πλέον την ευθύνη για την ασφάλεια πληροφοριών, την αξιοπιστία και την ανθεκτικότητα του παραγόμενου προϊόντος φέρουν όλοι οι συμμετέχοντες στην παραγωγή του και όχι απαραίτητα μια συγκεκριμένη ομάδα. Επιπρόσθετα, η εκπαίδευση και η δημιουργία των απαιτούμενων δεξιοτήτων συμβάλλουν αποφασιστικά στην επιτυχία του όλου εγχειρήματος.

Αποτελεσματική υιοθέτηση και εξέλιξη

Η πρώτη και ιδιαίτερα σημαντική αλλαγή στον υφιστάμενο τρόπο λειτουργίας αφορά στη δημιουργία οριζόντιων, διατμηματικών ομάδων εργασίας, οι οποίες θα αποτελούνται από επαγγελματίες με διαφορετικές δεξιότητες οι οποίες απαντώνται κατά κανόνα σε οργανωτικές μονάδες που ασχολούνται κάθετα με συγκεκριμένο γνωστικό αντικείμενο. Αυτό συνεπάγεται την ανάγκη κατάργησης των οργανωτικών σιλό μέσα στα οποία λειτουργούν οι διαφορετικές ομάδες και τμήματα ενός Οργανισμού. Χρειάζεται να δημιουργηθεί, είτε μία μόνιμη Οργανωτική μονάδα DevSecOps στην οποία θα προσχωρήσουν επαγγελματίες διαφόρων ειδικοτήτων και δεξιοτήτων ή μία αντίστοιχη εικονική διατμηματική ομάδα η οποία θα απαρτίζεται από επαγγελματίες συγκεκριμένων δεξιοτήτων από διαφορετικά τμήματα.

Σαφώς, η μεγαλύτερη και πιο σημαντική αλλαγή που πρέπει να κάνει ένας οργανισμός είναι η κουλτούρα του, τόσο όσον αφορά στην ευελιξία, όσο και στην λειτουργία και τις υπηρεσίες που καλείται να προσφέρει η διεργασία DevSecOps. Προς αυτήν την κατεύθυνση, ο Οργανισμός χρειάζεται ν’ αναγνωρίσει και να ενσωματώσει στις τάξεις των παραγωγικών του μονάδων εκείνα τα άτομα που μπορούν να συμβάλλουν ακριβώς σε αυτήν την αλλαγή της υφιστάμενης προσέγγισης και νοοτροπίας. Με το τρόπο αυτόν, θα συγκροτηθεί και θα λειτουργεί μία δια-τμηματική ομάδα, η οποία μπορεί είτε να είναι απολύτως αυτόνομη, είτε να αποτελεί μια εικονική ομάδα εργασίας. Στόχος είναι η μεταλαμπάδευση της αποκτηθείσας γνώσης σε όσο το δυνατόν μεγαλύτερο , μέρος του Οργανισμού, προκειμένου τελικά η ασφάλεια πληροφοριών να αποτελέσει αναπόσπαστο μέρος του σχεδιασμού και ανάπτυξης νέων προϊόντων λογισμικού.

Οι ομάδες DevSecOps (είτε αυτόνομες, είτε εικονικές) θα πρέπει να είναι στελεχωμένες με μηχανικούς οι οποίοι δε θα έχουν μονοδιάστατη γνώση και ειδίκευση (π.χ. απόλυτα εξειδικευμένοι σ΄ ένα και μοναδικό αντικείμενο), αλλά θα έχουν την ικανότητα να εμπλουτίσουν ακόμη περισσότερο τις δεξιότητές τους προκειμένου να είναι σε θέση να διεκπεραιώσουν μια σειρά διαφορετικών μεταξύ τους εργασιών,, στο πλαίσιο ανάπτυξης μιας νέας έκδοσης ενός προϊόντος λογισμικού, οι οποίες άπτονται της ανάπτυξης λογισμικού, της υλοποίησης και βελτιστοποίησης των δικλείδων ασφάλειας πληροφοριών του λογισμικού και της λειτουργίας και υποστήριξης των υποδομών πληροφορικής. Κάθε μέλος της ομάδας καθίσταται υπεύθυνο για την ασφάλεια και την αξιοπιστία του παραγόμενου προϊόντος, είτε πρόκειται για προϊόν που απευθύνονται σε πελάτες είτε για εσωτερική χρήση.

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

Επίλογος

Η διεργασία DevSecOps διέπεται από μια νέα φιλοσοφία που οδηγεί σε μία νέα προσέγγιση αναφορικά με την ανάπτυξη νέων προϊόντων και νέων εκδόσεων λογισμικού. Στις περισσότερες των περιπτώσεων δεν καθίσταται αναγκαία η δημιουργία μιας συγκεκριμένης οργανωτικής μονάδας η οποία θ’ ασχολείται με τις δραστηριότητες οι οποίες περιλαμβάνονται DevSecOps. Η αποτελεσματικότητά της μεγιστοποιείται από τη στιγμή που θα καταστεί πράξη για τον Οργανισμό βίωμα και θα αποτελέσει μέρος της κουλτούρας αναφορικά με τη ανάπτυξη νέων προϊόντων και νέων εκδόσεων λογισμικού. Οι σχετικές προβλέψεις κάνουν λόγο για την ευρύτερη υιοθέτηση των παραπάνω και την μετεξέλιξη του DevSecOps σε BizDevSecOps, μιας νέας προσέγγισης στην ανάπτυξη προϊόντων λογισμικού που εξαλείφει τα όρια μεταξύ του επιχειρηματικού κόσμου και των τεχνικών ομάδων, με στόχο οι εταιρείες να μπορούν να κατασκευάζουν με μεγαλύτερη ταχύτητα και αξιοπιστία προϊόντα λογισμικού προσανατολισμένα στις ανάγκες του τελικού χρήστη.