Το προφίλ μας στο Google Plus
1

Ο Μάγος με το Mπλε Kαπέλο

<story mode='on'>

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

Ο καιρός περνούσε κι ο μάγος μας ήταν ένας χαρούμενος freelancer, έχοντας και τη δική του –μαγική– startup. Οι μέρες έγιναν μήνες, οι μήνες έγιναν χρόνια, ώσπου έφτασε σε σημείο να γνωρίζει τόσα πολλά πράγματα γύρω από τον κόσμο της φωτογραφίας, όσο κανείς άλλος στον κόσμο. Γνωρίζοντας για πάνω από 200 image formats, και χρησιμοποιώντας και το Internet of Things, απέκτησε παγκόσμια φήμη με το ψευδώνυμο “ImageMagick” κι έγινε ο νούμερο ένα μάγος που προσέφερε σύγχρονες υπηρεσίες επεξεργασίας φωτογραφίας στο Διαδίκτυο.

Μέχρι που του συνέβη κάτι τραγικό… πραγματικά τραγικό.

<story mode='off'>

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

ImageMagick: το Photoshop των hackers
Το ImageMagick είναι μια σουίτα ελεύθερου λογισμικού ανοιχτού κώδικα, η οποία ειδικεύεται στην εμφάνιση, στη μετατροπή και στην επεξεργασία εικόνων μέσω της γραμμής εντολών. Υποστηρίζει πάνω από 200 image file formats και διατίθεται υπό την άδεια χρήσης Apache 2.0. Πρόκειται για ένα εξαιρετικά χρήσιμο utility, το οποίο μας βοηθάει να πετυχαίνουμε μικρά, καθημερινά και πολύ συγκεκριμένα πράγματα σχετικά με τα αρχεία εικόνας. Όσο περίεργο κι αν σας ακούγεται, πρόκειται πράγματι για ένα εργαλείο που αφορά στα γραφικά και την ίδια στιγμή το βασικό περιβάλλον αλληλεπίδρασης που χρησιμοποιεί είναι το τερματικό της γραμμής εντολών. Μάλιστα, αυτός ίσως να ‘ναι κι ο κύριος λόγος πίσω από τη μεγάλη του διάδοση. Δεν θα ήταν καθόλου υπερβολή αν λέγαμε ότι, σήμερα, έχει καθιερωθεί τόσο πολύ, που χρησιμοποιείται σχεδόν από κάθε webserver (αρκεί βέβαια αυτός να σερβίρει αρχεία εικόνας).

Ποιοι είναι όμως αυτοί οι webservers που ασχολούνται με εικόνες; Πρακτικά, όλοι. Κάθε φορά που ανεβάζετε μια φωτογραφία στο Internet, αυτή αποστέλλεται σ’ έναν απομακρυσμένο server που σπάνια τη δέχεται ως έχει. Αντίθετα, την επεξεργάζεται και τη φέρνει στα δικά του μέτρα και σταθμά. Συνήθως τη μετατρέπει σε format JPEG (JPG), αλλάζοντας πιθανόν τα χρώματα και τις παλέτες, με απώτερο σκοπό τη μείωση του όγκου του αντίστοιχου αρχείου στο δίσκο. Αν σκεφτείτε πόσοι χρήστες ανεβάζουν καθημερινά φωτογραφίες στο Facebook, στο Instagram, στο cloud και σε διάφορες άλλες δικτυακές πλατφόρμες (π.χ., fora), τότε καταλαβαίνετε πόσο σημαντικό ρόλο παίζει το μέγεθος που καταλαμβάνει μια εικόνα στο δίσκο ενός server.

Την επόμενη φορά λοιπόν που θα ανεβάσετε κάπου μια φωτογραφία, ας έχετε υπόψιν ότι κατά πάσα πιθανότητα οι μετατροπές ή/και η επεξεργασία που μόλις περιγράψαμε θα λάβει χώρα αυτόματα στον απομακρυσμένο server, από κάποιο script που θα χρησιμοποιεί τα μαγικά του ImageMagick στο παρασκήνιο. Αν μάλιστα ο server τρέχει Linux, BSD ή OS X, τότε δεν μιλάμε για πιθανότητα αλλά για βεβαιότητα. Εσείς προφανώς δεν θα παρατηρήσετε τίποτε απ’ όλα αυτά, αφού η όλη διαδικασία λαμβάνει χώρα στο απομακρυσμένο μηχάνημα. Αν βέβαια το αρχείο που επιχειρήσατε ν’ ανεβάσετε δεν συμμορφώνεται με τους όρους χρήσης της εκάστοτε υπηρεσίας, τότε θα λάβετε κάποιο μήνυμα σφάλματος που ίσως σας προτρέπει να δοκιμάσετε ξανά με μικρότερο μέγεθος αρχείου ή άλλο τύπο εικόνας ή κάτι σχετικό με τις ρυθμίσεις και τα permissions του server. Από τη στιγμή που υπάρχει δυνατότητα για αποστολή τέτοιων μηνυμάτων, αυτό σημαίνει ότι το απομακρυσμένο μηχάνημα είναι σε θέση να καταλαβαίνει αν το υπό επεξεργασία αρχείο είναι εικόνα ή όχι. Αν είναι, χρησιμοποιώντας τότε κάποιο πρόγραμμα ανάλυσης, όπως, π.χ., το εργαλείο identify του ImageMagick, εφαρμόζει τους επιθυμητούς ελέγχους.

<story mode='on'>

Όλα ξεκίνησαν όταν μία ομάδα πονηρών ξωτικών αποφάσισαν να ξεγελάσουν το Μάγο με το μπλε καπέλο.

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

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

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

Μετά από μια σειρά δυσάρεστα περιστατικά, δεν άργησε να διαδοθεί ένα παρατσούκλι για τον μάγο μας. Κάποιοι κατάφεραν και του κόλλησαν τ’ όνομα “ImageTragick”, έτσι ώστε να μη χρησιμοποιήσει κανείς τις υπηρεσίες του, ποτέ ξανά!

<story mode='οff'>

Τι σημαίνει όμως “εικόνα” για τον υπολογιστή και πώς τη “βλέπει”; Θα κάνουμε μία στάση εδώ, καθώς είναι αρκετά ενδιαφέρον θέμα, το οποίο αν το γνώριζε καλά ο μάγος της ιστορίας μας δεν θα έπεφτε ποτέ στην παγίδα των σατανικών ξωτικών.

Picture Element > Pict-el > Pixel
Αν κι ο γράφων έχει ασχοληθεί εκτενέστερα με θέματα computer vision και face detection, φοβούμαστε ότι ίσως ξεφύγει (περισσότερο) αν ξεκινήσει ν’ αναλύει τι είναι η ψηφιακή φωτογραφία. Ωστόσο, είναι σημαντικό να καταλάβουμε ότι για τον υπολογιστή μια ψηφιακή φωτογραφία δεν είναι παρά ένα ακόμα αρχείο σαν όλα τ’ άλλα, γεμάτο κώδικα. Και τι κώδικα; Εντελώς ασυνάρτητο!

Έχετε ανοίξει ποτέ ένα αρχείο εικόνας τύπου JPEG, με κάποιο πρόγραμμα επεξεργασίας κειμένου ή έναν text editor; Αν η απάντησή σας είναι καταφατική, τότε ξέρετε ακριβώς για τι πράγμα μιλάμε. Το ακατανόητο, σε άτομα χωρίς μαγικές ικανότητες, περιεχόμενο, οφείλεται στο γεγονός ότι το JPEG είναι στην πραγματικότητα ένα συμπιεσμένο αρχείο. Η κατάληξη (extension) στο τέλος του αρχείου (jpeg ή jpg) υποδηλώνει συνήθως τον αλγόριθμο που χρησιμοποιήθηκε για να γίνει αυτή η συμπίεση. Βέβαια η κατάληξη από μόνη της δεν φανερώνει πάντοτε τον τύπο του αρχείου, αφού αυτή μπορούμε να την αλλάζουμε και φυσικά με κάθε αλλαγή δεν θα αλλάζει και το περιεχόμενο του αντίστοιχου αρχείου. Αυτό που χρειαζόμαστε, λοιπόν, είναι ένα πρόγραμμα που αφενός μπορεί και διαβάζει το περιεχόμενο ενός οποιουδήποτε αρχείου, αφετέρου καταλαβαίνει περί τίνος πρόκειται. Μετά την αναγνώριση του τύπου ενός αρχείου είναι εύκολο να προχωράμε στους επιθυμητούς ή κατάλληλους χειρισμούς, όπως, π.χ., είναι η εμφάνιση της εικόνας ή το άνοιγμα του αντίστοιχου αρχείου με μια εφαρμογή που ξέρει πώς να αποδίδει το περιεχόμενό του.

Να πώς αντιλαμβάνεται μια εικόνα το Octave, όταν την ανοίγουμε με τη βοήθεια της συνάρτησης imread().

Να πώς αντιλαμβάνεται μια εικόνα το Octave, όταν την ανοίγουμε με τη βοήθεια της συνάρτησης imread().

Χωρίς τη συμπίεση και στην περίπτωση μίας δυαδικής εικόνας (μαύρο=0, άσπρο = 1), τα πράγματα θα ήταν πολύ πιο απλά και κατανοητά. Για παράδειγμα, αν πάρετε έναν μαύρο μαρκαδόρο, ζωγραφίσετε τον αριθμό ένα (1), τον βγάλετε μία φωτογραφία, τη σαρώσετε στον υπολογιστή και, τέλος, την αποθηκεύσετε σε δυαδική μορφή με ανάλυση 5×7 εικονοστοιχεία, ουσιαστικά θα έχετε κάτι τέτοιο:

Κάπως έτσι μοιάζει μια απλή ασπρόμαυρη εικόνα, για έναν υπολογιστή.

Κάπως έτσι μοιάζει μια απλή ασπρόμαυρη εικόνα, για έναν υπολογιστή.

Βέβαια, σήμερα που έχουμε ήδη μπει στη μετά High-Definition εποχή και κινούμαστε στον κόσμο του 4K, η απουσία συμπίεσης θα είχε σημαντικότατο αντίκτυπο στον αποθηκευτικό χώρο που διαθέτουμε. Η ανάγκη για συμπίεση, λοιπόν, είναι επιτακτική. Αυτός είναι κι ο βασικός λόγος που όλοι, μα όλοι οι webservers που επιτρέπουν το uploading φωτογραφιών και εικόνων, χρησιμοποιούν από πίσω κάποιο πρόγραμμα σαν το ImageMagick, για τη μετατροπή των σχετικών αρχείων σε μορφές που στοιχίζουν σαφώς λιγότερο σε bytes.

Κώδικας μέσα σε εικόνες
Μαζί με όλα τ’ άλλα, το ImageMagick υποστηρίζει και την επεξεργασία διανυσματικών εικόνων (Scalable Vector Graphics, αρχεία SVG). Με απλά λόγια, πρόκειται για εικόνες οι οποίες σχηματίζονται από τη σύνθεση βασικών γεωμετρικών σχημάτων, όπως, π.χ., είναι οι γραμμές, τα ορθογώνια, οι ελλείψεις και τα τόξα. Χάρη στο σχετικό format, τα αρχεία SVG υπερτερούν έναντι άλλων ψηφιακών εικόνων: Αφενός καταλαμβάνουν εξωφρενικά λίγο χώρο στο δίσκο, αφετέρου το περιεχόμενό τους αναπαράγεται σε τέλεια ποιότητα ανεξαρτήτως της μεγέθυνσης (δηλαδή του zoom level).

Επόμενο είναι, λοιπόν, τέτοιες εικόνες να είναι ιδανικές για το Internet, αφού φορτώνουν πολύ γρήγορα (λόγω του μικρού τους μεγέθους) και την ίδια στιγμή προσφέρουν τέλεια ποιότητα ανεξαρτήτως της ανάλυσης της οθόνης του χρήστη. Ως παράδειγμα, δείτε πόσο εύκολο είναι να ενσωματώσουμε σε μια σελίδα HTML κώδικα SVG, προκειμένου να ζωγραφίσουμε έναν κύκλο:

<html>
	<svg width="100" height="100">
	<circle cx="50" cy="50" r="40" stroke="black" stroke-width="4" fill="red" />
	</svg>
</html>

Νομίζουμε ότι ο κώδικας της εικόνας είναι κατανοητός — και μάλιστα όχι μόνο από οντότητες με μαγικές ικανότητες.

Μέχρι τώρα έχουμε δει τι είναι το ImageMagick, για ποιο λόγο χρησιμοποιείται παρασκηνιακά από τους webservers, ενώ έχουμε εξηγήσει και τη σημασία της συμπίεσης/μετατροπής των εικόνων που ανεβαίνουν στους servers. Επίσης, είδαμε πώς μπορούμε να γράψουμε κώδικα μέσα σε μία εικόνα (τύπου SVG) αλλά και πόσο εύκολο είναι αυτό. Ήρθε λοιπόν η στιγμή να μιλήσουμε για το σατανικό σενάριο των ξωτικών της ιστορίας: την εκτέλεση κακόβουλου κώδικα μέσα σε εικόνες.

CVE-2016–3714 ή αλλιώς ImageTragick
Ένας γλόμπος φωτίστηκε πάνω από τα κεφάλια των ρώσων χάκερς stewie και Nikolay Ermishkin, των πονηρών ξωτικών της ιστορίας μας, όταν εντόπισαν το συγκεκριμένο κενό ασφαλείας (CVE-2016–3714) στον κώδικα του ImageMagick.

Στις αρχές του Μαΐου δημοσιεύτηκαν αρκετές ευπάθειες (vulnerabilities) που αφορούσαν στο ImageMagick, οι οποίες για τους λόγους που είδαμε πιο πάνω (κώδικας μέσα σε εικόνες) ήταν αρκετά σημαντικές για να προκαλέσουν πανικό σε όλους τους υπευθύνους servers, στους οποίους επιτρέπεται το uploading εικόνων. Τέτοια μηχανήματα είναι πολύ πιθανό να φιλοξενούν πλατφόρμες όπως είναι ένα forum (π.χ., IPB, phpBB3 κ.ά.) ή ένα CMS (σαν το WordPresss) — μέχρι και cloud services όπως τα CloudFlare και Amazon Cloud. Πανικός! Βλέπετε, σ’ αυτές τις υπηρεσίες, όταν ο χρήστης ανεβάζει μια εικόνα, συνήθως λαμβάνει αυτομάτως χώρα μια διαδικασία μετατροπής της εικόνας σε μικρότερο μέγεθος, για καλύτερη διαχείριση του αποθηκευτικού χώρου.

Το πρόβλημα λοιπόν προκύπτει όταν κάποιος από τους απομακρυσμένους servers χρησιμοποιεί το ImageMagick, π.χ., για την παραγωγή thumbnails. Σε μια τέτοια –καθόλου σπάνια– περίπτωση, αν ο κακόβουλος χρήστης ανεβάσει μια κατάλληλα διαμορφωμένη εικόνα (τα σκαθάρια της ιστορίας), το ImageMagick (το ραβδί της ιστορίας), ξεγελιέται κι επιτρέπει στον uploader να τρέξει απομακρυσμένα κώδικα (Remote Code Execution, RCE) στο μηχάνημα όπου λαμβάνει χώρα η μετατροπή (το τραγικό συμβάν της ιστορίας). Στη συνέχεια, χρησιμοποιώντας αυτό το κενό ασφάλειας, ο επιτιθέμενος μπορεί κάλλιστα να κατεβάσει τα δικά του εργαλεία στον ευπαθή server, τα οποία θα του επιτρέψουν στη συνέχεια να αποκτήσει τον πλήρη έλεγχο του box. Αυτό συνήθως επιτυγχάνεται τρέχοντας ένα shell, μέσω του οποίου παρέχεται η δυνατότητα για ελεύθερη εκτέλεση εντολών στο σύστημα-στόχο.

Γενικά, προκειμένου να καταφέρεις και να τρέξεις ένα τέτοιο exploit αποκρυσμένα, απαιτείται πολύ καλή γνώση και κατανόηση του όποιου προβλήματος, της διαχείρισης της μνήμης και της Assembly. Μιλάμε δηλαδή για γνώσεις που λίγοι εκλεκτοί κατέχουν (Σ.τ.Ε. και μην ψαρώνετε από τους hackers-wannabe ή/και από τους αυτοχαρακτηριζόμενους ως experts).

Δυστυχώς, το συγκεκριμένο bug στο ImageMagick αφαιρεί την προϋπόθεση της καλής γνώσης, που συνήθως απαιτείται για επιτυχημένη επίθεση σε απομακρυσμένο server. Θα το πούμε και διαφορετικά: Το εν λόγω vulnerability επιτρέπει στον επιτιθέμενο να πάρει στην κατοχή του τον πλήρη έλεγχο του άλλου υπολογιστή (π.χ., του webserver) με πολύ μεγάλη ευκολία, και να τρέξει εκεί τον κώδικα που επιθυμεί. Ακόμη κι ένα script-kiddie είναι δυνατό να πετύχει εντυπωσιακά αποτελέσματα.

Φρίκη.

Στα δύο επόμενα άρθρα της μίνι σειράς μας (μέρος 2 και μέρος 3), θα αναλύσουμε το συγκεκριμένο bug από τη ματιά του περίεργου –με την καλή έννοια– χρήστη Linux. Με τις λίγες αλλά βασικές γνώσεις που έχουμε, θα…

  • ψάξουμε να βρούμε την αιτία του προβλήματος
  • δοκιμάσουμε να τρέξουμε το exploit και να καταλάβουμε πώς λειτουργεί
  • δοκιμάσουμε παραπλήσια exploits, που επίσης σχετίζονται με το ImageTragick
  • διορθώσουμε το πρόβλημα στο σύστημά μας (openSUSE Leap 42.1)
  • μελετήσουμε τη λύση που δίνεται μέσω σχετικού patch

Στο τέλος της αναζήτησής μας, είναι σίγουρο ότι θα έχουμε μάθει πολλά πράγματα όχι μόνο για το ImageTragick, αλλά και για το Linux γενικότερα.

Καλή συνέχεια ευχόμαστε!

One Response to “Ο Μάγος με το Mπλε Kαπέλο”

  1. artizda | 23/05/2016 at 23:03

    Πολύ ενδιαφέρον άρθρο. Κάτι αντίστοιχο σε ήχο?

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων