Οι αναλυτές καλωσορίζουν τη συμβουλή της NSA για προγραμματιστές για την υιοθέτηση γλωσσών που είναι ασφαλείς στη μνήμη PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Οι αναλυτές καλωσορίζουν τη συμβουλή της NSA για προγραμματιστές να υιοθετήσουν γλώσσες που είναι ασφαλείς στη μνήμη

Οι αναλυτές ασφαλείας χαιρέτησαν μια σύσταση από την Υπηρεσία Εθνικής Ασφάλειας των ΗΠΑ (NSA) την περασμένη εβδομάδα προς τους προγραμματιστές λογισμικού να εξετάσουν το ενδεχόμενο υιοθέτησης γλωσσών όπως C#, Go, Java, Ruby, Rust και Swift για τη μείωση των ευπαθειών που σχετίζονται με τη μνήμη στον κώδικα.

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

The Case for Memory Safe Languages

Η κάπως ασυνήθιστη συμβουλευτική της NSA στις 10 Νοεμβρίου έδειξε ότι οι ευρέως χρησιμοποιούμενες γλώσσες όπως η C και η C++ στηρίζονται πολύ σε προγραμματιστές να μην κάνει λάθη που σχετίζονται με τη μνήμη, τα οποία σημείωσε, εξακολουθεί να είναι η κύρια αιτία για τρωτά σημεία ασφαλείας στο λογισμικό. Προηγούμενες μελέτες — μία από Η Microsoft το 2019 και ένα άλλο από Google το 2020 σχετίζεται με το πρόγραμμα περιήγησής της Chrome—για παράδειγμα, και οι δύο διαπίστωσαν ότι το 70% των τρωτών σημείων ήταν ζητήματα ασφάλειας της μνήμης, είπε η NSA.

«Οι κοινώς χρησιμοποιούμενες γλώσσες, όπως η C και η C++, παρέχουν μεγάλη ελευθερία και ευελιξία στη διαχείριση της μνήμης, ενώ βασίζονται σε μεγάλο βαθμό στον προγραμματιστή για να εκτελέσει τους απαραίτητους ελέγχους στις αναφορές μνήμης», ανέφερε η NSA. Αυτό συχνά οδηγεί σε εκμεταλλεύσιμα τρωτά σημεία που συνδέονται με απλά λάθη, όπως σφάλματα υπερχείλισης buffer, ζητήματα εκχώρησης μνήμης και συνθήκες αγώνα.

Η C#, η Go, η Java, η Ruby, η Rust, η Swift και άλλες γλώσσες που είναι ασφαλείς για τη μνήμη δεν εξαλείφουν πλήρως τον κίνδυνο αυτών των ζητημάτων, ανέφερε η NSA στη συμβουλευτική της. Τα περισσότερα από αυτά, για παράδειγμα, περιλαμβάνουν τουλάχιστον μερικές κλάσεις ή λειτουργίες που δεν είναι ασφαλείς για τη μνήμη και επιτρέπουν στον προγραμματιστή να εκτελέσει μια δυνητικά μη ασφαλή λειτουργία διαχείρισης μνήμης. Οι γλώσσες που είναι ασφαλείς για μνήμη μπορεί μερικές φορές να περιλαμβάνουν επίσης βιβλιοθήκες γραμμένες σε γλώσσες που περιέχουν δυνητικά μη ασφαλείς λειτουργίες μνήμης.

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

Ο Tim Mackey, κύριος υπεύθυνος στρατηγικής ασφάλειας στο Synopsys Cybersecurity Research Center, χαιρετίζει τη σύσταση της NSA. Η χρήση γλωσσών που είναι ασφαλείς για τη μνήμη θα πρέπει, στην πραγματικότητα, να είναι η προεπιλογή για τις περισσότερες εφαρμογές, λέει. «Για πρακτικούς σκοπούς, το να βασιζόμαστε στους προγραμματιστές για να επικεντρωθούν σε ζητήματα διαχείρισης μνήμης αντί του προγραμματισμού νέων νέων χαρακτηριστικών αντιπροσωπεύει φόρο επί της καινοτομίας», λέει. Με τις ασφαλείς για μνήμη γλώσσες προγραμματισμού και τα σχετικά πλαίσια, οι δημιουργοί της γλώσσας είναι αυτοί που διασφαλίζουν τη σωστή διαχείριση της μνήμης και όχι οι προγραμματιστές εφαρμογών, λέει ο Mackey.

Η μετατόπιση μπορεί να είναι προκλητική

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

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

Υπάρχουν μυριάδες μεταβλητές στο παιχνίδι όταν προσπαθείτε να μεταφέρετε μια εφαρμογή από τη μια γλώσσα στην άλλη, λέει ο Mike Parkin, ανώτερος τεχνικός μηχανικός της Vulcan Cyber. «Σε ένα σενάριο της καλύτερης περίπτωσης η αλλαγή είναι απλή και ένας οργανισμός μπορεί να την ολοκληρώσει σχετικά ανώδυνα», λέει ο Πάρκιν. "Σε άλλες, η εφαρμογή βασίζεται σε χαρακτηριστικά που είναι ασήμαντα στην αρχική γλώσσα, αλλά απαιτούν εκτεταμένη και δαπανηρή ανάπτυξη για να αναδημιουργηθούν στη νέα."

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

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

Ο Mackey προτείνει στους οργανισμούς να εξετάσουν το ενδεχόμενο χρήσης μικροϋπηρεσιών όταν πρόκειται για αλλαγή γλωσσών. "Με μια αρχιτεκτονική μικροϋπηρεσιών, η εφαρμογή αποσυντίθεται σε ένα σύνολο υπηρεσιών που είναι κοντέινερ", λέει ο Mackey. «Από την οπτική γωνία μιας γλώσσας προγραμματισμού, δεν υπάρχει τίποτα που να απαιτεί εγγενώς κάθε microservice να προγραμματίζεται στην ίδια γλώσσα προγραμματισμού με άλλες υπηρεσίες στην ίδια εφαρμογή».

Κάνοντας την κίνηση

Πρόσφατα στοιχεία από το Statista δείχνουν ότι πολλοί προγραμματιστές χρησιμοποιούν ήδη γλώσσες που θεωρούνται ασφαλείς για τη μνήμη. Σχεδόν τα δύο τρίτα (65.6%), για παράδειγμα, χρησιμοποιούν JavaScript, σχεδόν τα μισά (48.06%) χρησιμοποιούν Python, το ένα τρίτο χρησιμοποιούν Java και σχεδόν το 28% χρησιμοποιούν C#. Ταυτόχρονα, ένα σημαντικό ποσοστό εξακολουθεί να χρησιμοποιεί μη ασφαλείς γλώσσες όπως η C++ (22.5%) και η C (19.25%).

«Πιστεύω ότι πολλοί οργανισμοί έχουν ήδη απομακρυνθεί από το C/C++ όχι μόνο για το ζήτημα της ασφάλειας της μνήμης, αλλά και για τη συνολική ευκολία ανάπτυξης και συντήρησης», λέει ο Johannes Ullrich, κοσμήτορας έρευνας στο SANS Technology Institute. «Αλλά θα εξακολουθήσουν να υπάρχουν βάσεις κωδικών παλαιού τύπου που θα πρέπει να διατηρηθούν για πολλά χρόνια ακόμη».

Η συμβουλή της NSA πρόσφερε ελάχιστη εικόνα για το τι θα μπορούσε να προκάλεσε τη σύστασή της σε αυτή τη συγκυρία. Αλλά ο John Bambenek, κύριος κυνηγός απειλών στο Netenrich, συμβουλεύει οι οργανισμοί να μην το αγνοούν. «Τα τρωτά σημεία της μνήμης και οι επιθέσεις είναι διάχυτα από τη δεκαετία του 1990, οπότε γενικά, αυτή είναι καλή συμβουλή», λέει. «Λέγοντας αυτό, καθώς αυτό προέρχεται από την NSA, πιστεύω ότι αυτή η συμβουλή πρέπει να είναι πιο επείγουσα και καθοδηγείται από τη γνώση που έχουν και εμείς όχι».

Σφραγίδα ώρας:

Περισσότερα από Σκοτεινή ανάγνωση