Ο Λευκός Οίκος θέλει προγραμματισμό ασφαλή για τη μνήμη, αλλά τι είναι αυτό;

Βασικά Takeaways

  • Ο Λευκός Οίκος προτρέπει τη χρήση γλωσσών που είναι ασφαλείς για τη μνήμη, όπως η Rust, για τη μείωση των τρωτών σημείων ασφαλείας στον κώδικα.
  • Παλαιότερες γλώσσες χαμηλότερου επιπέδου, όπως η C, ενέχουν κινδύνους σφάλματος κώδικα που οδηγεί σε συμβάντα ασφαλείας.
  • Γλώσσες που είναι ασφαλείς για τη μνήμη, όπως η Rust, προσφέρουν λειτουργίες αυτόματης διαχείρισης μνήμης και πρόληψης σφαλμάτων.

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

Τι λέει ο Λευκός Οίκος;

Σε μια δήλωση στις 26 Φεβρουαρίου, το Γραφείο του Λευκού Οίκου του Εθνικού Διευθυντή Cyber ​​Cyber ​​(ONCD) προέτρεψε τους προγραμματιστές λογισμικού να υιοθετήσουν γλώσσες προγραμματισμού που είναι ασφαλείς για τη μνήμη, όπως η Rust.

Είπε το ONCD:

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

  9 API αναζήτησης UPC για ακριβείς πληροφορίες μαζικών προϊόντων

Γιατί είναι σημαντικό?

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

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

Ανεξάρτητα από αυτό, η χρήση γλωσσών που είναι ασφαλείς για τη μνήμη —όπως η Rust, η Python και η JavaScript— έχει αυξηθεί εδώ και πολύ καιρό. Το ONCD είναι πιθανό να κάνει αυτή την ανακοίνωση επειδή λιγότερο ασφαλείς γλώσσες όπως η C υπάρχουν τόσο πολύ καιρό που ο κληρονομικός κώδικας τους είναι πλέον ριζωμένος στην υποδομή και σε μεγάλο μέρος του λογισμικού που χρησιμοποιούμε καθημερινά.

Πώς μοιάζει μια μη ασφαλής γλώσσα;

Ο μη ασφαλής κώδικας δεν φαίνεται πάντα τρομακτικός ή ακόμη και περίπλοκος. Πάρτε αυτό το παράδειγμα ενός απλού προγράμματος C:

#include <stdio.h>

int main (void) {
    int arr[3] = { 0, 0, 0 };
    printf("%d\n", arr[3]);
    return 0;
}

Αυτό είναι ένα κλασικό παράδειγμα σφάλματος που μπορεί να οδηγήσει σε επίθεση υπερχείλισης buffer. Ο προγραμματιστής έχει ξεχάσει ότι οι πίνακες στη C (και στις περισσότερες άλλες γλώσσες) έχουν μηδενικό ευρετήριο, που σημαίνει ότι το πρώτο στοιχείο βρίσκεται στο arr[0]κ.λπ. Προσπάθεια πρόσβασης arr[3] είναι επομένως ένα λάθος, αλλά αυτό που το C θα επιτρέψει:

  Διορθώστε το σφάλμα Black Ops 3 ABC στο PS4

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

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

  Βασικά στάδια διαχείρισης συμβολαίου που πρέπει να γνωρίζετε

Πώς είναι ο κωδικός με ασφάλεια στη μνήμη;

Σε μια γλώσσα ασφαλή για μνήμη όπως η Rust, το ίδιο πρόβλημα απλά δεν υπάρχει. Εδώ είναι το ίδιο πρόγραμμα, στο Rust:

fn main() {
    let arr: [u32; 5] = [0;3];
    println!("{}", arr[3]);
}

Ενώ αυτός ο κώδικας είναι συντακτικά έγκυρος, ο Rust θα αποτύχει να τον μεταγλωττίσει:

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

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

Πρέπει να αλλάξω γλώσσα;

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

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