Δευτέρα 29 Σεπτεμβρίου 2014

Bash Bug

Το Σεπτέμβριο του 2014 βρέθηκε ένα λάθος στο κέλυφος εντολών του Linux αλλά και του OS Χ (Mac), όπου μπορεί να εκτελεστεί κώδικας χωρίς την θέληση του χρήστη.

Το γιατί υπήρχε αυτό το "άγνωστο" λάθος τόσο καιρό είναι ένας προβληματισμός που δεν έχει βρει τη λύση του. Οπωσδήποτε ο κώδικας του BASH, του κελύφους δηλαδή επεξεργασίας εντολών, δεν είναι ένας κρυφός κώδικας. Υπάρχει όμως ένας κανόνας στο Linux και την γλώσσα C και κατ' επέκταση της C++ που λέει ότι ποτέ δεν γράφουμε για το ίδιο πράγμα νέο κώδικα. Έτσι όλα τα προγράμματα κτίζονται από κομμάτια που βρίσκονται σε μια βιβλιοθήκη έτοιμων λύσεων.

Η κοινή χρήση λύσεων στο Linux και στο OS X έχει ως αποτέλεσμα να περνάει τα τυχόν σφάλματα αυτών σε νέα σύνθετα προγράμματα.

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

Σήμερα συζητάμε το θέμα, ενώ είχε λυθεί όταν πια δημοσιεύτηκε.

Εδώ θέλω να θυμίσω ότι στα λειτουργικά της Microsoft υπήρχαν δυο δυνατότητες. Η χρήση κοινών ρουτινών αλλά και η χρήση ιδιωτικών. Στην πρώτη περίπτωση μάλιστα  μέσω του COM ενός προτύπου διαχείρισης αντικειμένων μπορούσε κανείς να διατηρεί κοινές ιδιωτικές ρουτίνες, δηλαδή κοινές για τις εφαρμογές εκείνες που έχουν το "δικαίωμα" να τις χρησιμοποιήσουν. Το δικαίωμα ή η άδεια χρήσης σε ένα εσωτερικό σημείο είχε έναν πολύ μεγάλο αριθμό ο οποίος ήταν αδύνατο να βρεθεί για να ξεκλειδώσει το αντικείμενο COM και να το χρησιμοποιήσει. Στο λειτουργικό Linux οι βιβλιοθήκες είναι κοινές, και ως αρχεία έχουν περιορισμούς ως προς το ποια ομάδα χρηστών μπορεί να τα χρησιμοποιήσει. Με απλά λόγια βλέπουμε τη διαφορά φιλοσοφίας. Στα μεν Windows...ο παραγωγός λογισμικού αγοράζει άδειες...ενώ στα Linux είναι όλα ελεύθερα και τακτοποιημένα ανά χρήστη.

Οπότε τώρα ήρθε η ώρα να κατανοήσουμε τι σημαίνει έκδοση λογισμικού. Στα μεν Windows με την φιλοσοφία "αγοράζεις λειτουργικότητα"...το σύστημα διατηρεί για τον ίδιο σκοπό διάφορες εκδόσεις ενός λογισμικού, ενώ στο Linux επειδή η φιλοσοφία είναι "διαθέτεις τη λειτουργικότητα που χρειάζεσαι επιλέγοντας ελεύθερο λογισμικό" απλά διατηρείς "φρέσκες" τις βιβλιοθήκες και έχεις όλα τα προγράμματα αναβαθμισμένα. Στα linux δεν θα "επέμενε" ένα πρόγραμμα να χρησιμοποιήσει την παλιά ρουτίνα (βιβλιοθήκης) επειδή δεν είχε ανανεώσει την άδεια χρήσης ο παραγωγός αυτού του λογισμικού. Απαιτείται φυσικά απόλυτη συμβατότητα..και αυτή μπορεί να επιτευχθεί όταν το λογισμικό είναι ανοικτό, ο κώδικάς του.

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

Το Linux παραμένει πάντα ως το λειτουργικό χωρίς ιούς, και θα παραμένει επειδή στη φιλοσοφία του είναι ο αποκλεισμός εκτελέσιμων αρχείων από την ελεύθερη πρόσβαση στους φακέλους του υπολογιστή, ενώ διατηρείται η ελεύθερη χρήση ρουτινών..(ελεύθερα χρησιμοποιείς την βιβλιοθήκη αλλά δεν την αλλάζεις). Οι αλλαγές γίνονται από προγράμματα με προχωρημένα δικαιώματα. Ένας ιός δεν μπορεί να πάρει αυτά τα προχωρημένα δικαιώματα...χωρίς την συγκατάθεση του χρήστη (του υπερ-χρήστη στην ουσία του Administrator).

O Bash είναι η εφαρμογή που τρέχει εφαρμογές τόσο για τον χρήστη όσο και για τον υπερ-χρήστη, οπότε εκεί υπήρχε θέμα "προσβολής" του συστήματος, αν εκτελεστεί με δικαιώματα υπερ-χρήστη κάτι παρά τη θέλησή μας. Όμως θα έπρεπε πιο πριν να είχαμε κατεβάσει μια αναβάθμιση βιβλιοθήκης που εσωτερικά θα είχε προγραμματιστεί να "διαβάλλει" το σύστημα. Με το συνήθη τρόπο ενημέρωσης του συστήματος αυτό είναι αδύνατο να συμβεί. Οι άλλοι δύο τρόποι είναι: η ενημέρωση με εκτελέσιμο κώδικα και η ενημέρωση με πηγαίο κώδικα (που απαιτεί μεταγλώττιση σε εκτελέσιμο κώδικα). Ο πρώτος είναι ο επικίνδυνος, ενώ ο δεύτερος αν και φαινομενικά είναι ακίνδυνος, αποδείχθηκε όπως στον Bash ότι μπορούν να υπάρξουν "τρύπες"...που ενώ είναι εκεί...και ο κώδικας είναι ανοικτός...δεν είναι κατανοητές.

Το Bash Bug λοιπόν είναι ένα από τα λάθη που υπήρχαν για χρόνια και ήταν μη παρατηρήσιμα....Υπάρχουν άλλα; Ποιος ξέρεις...σίγουρα; Αν είναι σπάνιο να βρεθεί ένα τέτοιο σφάλμα, είναι περισσότερο σπάνιο αυτός που θα το βρει να θέλει να επωφεληθεί δημιουργώντας το χάος..





Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.