Προγραμματισμός

Πόσο ασφαλής είναι η Java σε σύγκριση με άλλες γλώσσες;

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

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

[Επίσης στο JavaWorld: Υπάρχουν κάποια σημάδια ότι οι προγραμματιστές Java βελτιώνονται με ασφάλεια.]

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

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

Πόσο ασφαλές είναι το Java;

Η πρόσφατη έρευνα για τα τρωτά σημεία των πιο συχνά χρησιμοποιούμενων γλωσσών προγραμματισμού προήλθε από το WhiteSource, μια πλατφόρμα ασφάλειας ανοιχτού κώδικα και συμμόρφωσης με τις άδειες. Η WhiteSource εξέτασε επτά από τις πιο δημοφιλείς γλώσσες προγραμματισμού ανοιχτού κώδικα: C, Java, JavaScript, Python, Ruby, PHP και C ++. Στη συνέχεια, οι αναλυτές χρησιμοποίησαν μια ποικιλία πηγών για να ταξινομήσουν τις γλώσσες με βάση τον αριθμό των ευπαθών σημείων τους.

Γιατί ανοιχτού κώδικα;

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

Με βάση τη μελέτη WhiteSource, η πιο ευάλωτη γλώσσα προγραμματισμού ήταν η C, με 47% όλων των αναφερόμενων ευπαθειών. Αυτή η κατάταξη δεν θα εκπλήξει τους έμπειρους προγραμματιστές, αλλά και άλλα αποτελέσματα μπορεί. Η PHP έφτασε σε ένα μακρινό δευτερόλεπτο, με 17%, ακολουθούμενη από την Java με 12%, και η JavaScript στρογγυλοποιεί τις πρώτες τέσσερις με 11%. Μετά από αυτούς τους "ηγέτες" ήταν οι Python, C ++ και Ruby.

Κατανόηση της ασφάλειας γλώσσας προγραμματισμού

Στη συνέχεια, πρέπει να ρωτήσουμε γιατί ορισμένες γλώσσες προγραμματισμού είναι πιο ευάλωτες από άλλες. Με βάση την έρευνα που ανέφερα, μπορείτε να συμπεράνετε ότι το C αποτελεί μια τεράστια απειλή για την ασφάλεια. Αλλά σκεφτείτε ότι το C χρησιμοποιείται για πολύ περισσότερο από οποιαδήποτε άλλη γλώσσα στη λίστα. Όπως το γράφει ο Stephen Turner, γράφοντας στο περιοδικό Journal of Technology Research, «οι γλώσσες προγραμματισμού είναι σαν τη γενετική, καθώς υπάρχουν μερικοί πρόγονοι με κοινά χαρακτηριστικά που έχουν πολλαπλασιαστεί».

Ως η παλαιότερη γλώσσα στη λίστα, το C αναπτύχθηκε σε ένα εντελώς διαφορετικό περιβάλλον απειλής από σχετικά νεότερες γλώσσες όπως η Java και το Ruby. Όπως επισημαίνει η WhiteSource, η σχετική ηλικία του Γ σημαίνει ότι έχει αντίστοιχα μεγαλύτερο όγκο γραπτού κώδικα. Το C είναι επίσης μία από τις γλώσσες που χρησιμοποιούνται για μεγάλες υποδομές όπως το OpenSSL και ο πυρήνας Linux. Αυτός ο συνδυασμός όγκου και κεντρικότητας μπορεί να οδηγήσει σε μεγαλύτερο αριθμό γνωστών τρωτών σημείων ανοιχτού κώδικα.

Αν και η Java αποδίδει καλά σε αυτήν την ανάλυση, οι συγγραφείς επισημαίνουν δύο τύπους ευπάθειας που επηρεάζουν ιδιαίτερα την Java. Πρώτον, σημειώνουν ότι το US-CERT μας έχει προειδοποιήσει εδώ και πολύ καιρό για την ευπάθεια της Java σε επιθέσεις με έγχυση, κυρίως μέσω προγραμμάτων περιήγησης στο Web. Τέτοιες επιθέσεις μπορούν να αποφευχθούν μέσω επικύρωσης ή ελέγχου ταυτότητας των υποβαλλόμενων δεδομένων, αλλά οι προγραμματιστές συχνά διστάζουν να επικυρώσουν την εισαγωγή διεξοδικά επειδή φοβούνται ότι αυτό θα μπορούσε να κάνει τις εφαρμογές τους λιγότερο φιλικές προς τον χρήστη.

Δεύτερον, η Java είναι ιδιαίτερα ευάλωτη σε εκμεταλλεύσεις εμπιστοσύνης που ακολουθούν τις ευπάθειες ελέγχου πρόσβασης. Αν και οι διαδικασίες πιστοποίησης έχουν βελτιωθεί από το 2013, πολλοί προγραμματιστές βασίζονται σε πιστοποιητικά από αρχές που είναι λιγότερο αξιόπιστες. Είναι δυνατόν να λάβετε ένα πιστοποιητικό που είναι λιγότερο αυστηρό από το κανονικό. Το US-CERT, που αναφέρεται στο περιοδικό Journal of Technology Research, προειδοποιεί για αυτήν την ανοιχτή πόρτα για απομακρυσμένους εισβολείς που εκτελούν αυθαίρετο κώδικα.

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

Οι ευπάθειες ασφαλείας αυξάνονται - είδος

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

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

Τα συστήματα λογισμικού είναι επίσης μια τάξη μεγέθους πιο περίπλοκη από ό, τι πριν από 10 χρόνια, κάτι που είναι ένας άλλος σημαντικός παράγοντας στον αυξανόμενο αριθμό ευπαθειών που εντοπίζονται στην Java και σε άλλες γλώσσες. Σε έναν κόσμο όπου οι εφαρμογές smartphone μπορούν να αποτελέσουν πηγή μόλυνσης και όπου κάθε εταιρεία πρέπει να διαθέτει ιστότοπο με δυνατότητα JavaScript, δεν αποτελεί έκπληξη το γεγονός ότι ο αριθμός των ευπαθειών ιστότοπων έχει αυξηθεί εκθετικά. Προσθέστε σε αυτό τη μακροπρόθεσμη έλλειψη επαγγελματιών στον κυβερνοασφάλεια και τα πράγματα αρχίζουν να φαίνονται απαίσια για το μέλλον της ασφάλειας στον κυβερνοχώρο.

Τρόπος αποφυγής τρωτών σημείων ασφαλείας Java

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

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

Μετακίνηση σε ροή εργασίας DevSecOps

Ένας τρόπος για να μειώσετε τις ευπάθειες στον κώδικα Java είναι να μετακινηθείτε σε μια ροή εργασίας DevSecOps. Αυτός ο τύπος ροής εργασίας καθιστά την ασφάλεια πρωταρχικό μέλημα σε όλα τα στάδια της διαδικασίας ανάπτυξης. Ως προγραμματιστές, συχνά ξεχνάμε ότι το λογισμικό μας χρησιμοποιείται (και μερικές φορές προσαρμόζεται) από όλα τα μέρη του οργανισμού στον οποίο εργαζόμαστε. Δεν είναι καλό να σκληρύνει τις εφαρμογές ιστού σας από εισβολή εάν η ομάδα μάρκετινγκ είναι αποφασισμένη να υπονομεύσει τις προσπάθειές σας. Συμπεριλάβετε όλες τις ομάδες σας στη διαδικασία ανάπτυξης και βεβαιωθείτε ότι η ασφάλεια είναι μια μέριμνα για κάθε πτυχή του έργου.

Αξιολογήστε την ασφάλεια της ροής εργασίας

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

συμπέρασμα

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

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

Αυτή η ιστορία, "Πόσο ασφαλής είναι η Java σε σύγκριση με άλλες γλώσσες;" δημοσιεύθηκε αρχικά από το JavaWorld.