Home / Vulnerabilities / IIS: ευπάθεια μπορεί να οδηγήσει σε «blue screen of death»

IIS: ευπάθεια μπορεί να οδηγήσει σε «blue screen of death»

bsod

Σοβαρό κίνδυνο αντιμετωπίζουν κρίσιμα συστήματα που χρησιμοποιούν IIS, καθώς οι μη ενημερωμένες με τα τελευταία patch εκδόσεις του Internet Information Services (IIS) της Microsoft παρουσιάζουν ευπάθεια σε επίθεσης denial of service (DoS).

Η ευπάθεια, που διορθώθηκε από τη Microsoft με την ενημέρωση MS15-034, μπορεί να προκαλέσει το φαινόμενο BSOD, δηλαδή τη γνωστή σε όλους μας μπλε οθόνης ή «blue screen of death». Αν και δεν υπάρχουν ενδείξεις για πιθανή απομακρυσμένη εκτέλεση κώδικα, είναι αρκετά σημαντικό οι IT administrators να προχωρήσουν στην ενημέρωση των συστημάτων τους, ειδικά σε περιπτώσεις που αυτά χρησιμοποιούνται χωρίς διακοπή.

Πρόβλημα αντιμετωπίζουν οι ακόλουθες εκδόσεις:

  • Windows 7
  • Windows Server 2008 R2
  • Windows 8/8.1
  • Windows Server 2012/2012 R2

Τι είναι το HTTP Protocol Stack;

Ο IIS web server διαθέτει έναν HTTP listener, ως μέρος του υποσυστήματος δικτύωσης των Windows. Αυτό υλοποιείται σαν driver συσκευής σε kernel-mode, που αποκαλείται HTTP protocol stack (HTTP.sys). Μεταφέρει το HTTP request και επιστρέφει έπειτα απάντηση στον client.

Το HTTP.sys παρέχει τα ακόλουθα πλεονεκτήματα:

  • Kernel-mode caching. Τα request για απαντήσεις cached εξυπηρετούνται χωρίς να υπάρχει μετάβαση σε user mode.
  • Kernel-mode request queuing. Τα request προκαλούν λιγότερο overhead σε context switching, καθώς ο kernel προωθεί τα request απευθείας στη σωστό επεξεργαστή διεργασίας. Αν δεν υπάρχει διαθέσιμος επεξεργαστής για να δεχθεί ένα request, η kernel-mode request queue διατηρεί τα request μέχρι ένας επεξεργαστής να το αναλάβει.
  • Προ-επεξεργασία Request και φιλτράρισμα ασφαλείας.

Για να προκαλέσει κίνδυνο η συγκεκριμένη ευπάθεια, θα πρέπει στο IIS να ενεργοποιηθεί το kernel caching – κάτι που γίνεται by default. Πολλά modules στο IIS εκτελούν διεργασίες σχετικές με το caching στο σωλήνα επεξεργασίας των request. Το caching βελτιώνει την απόδοση με την αποθήκευση των επεξεργασμένων πληροφοριών (όπως ιστοσελίδων) στη μνήμη του server, και τα ίδια δεδομένα επανα-χρησιμοποιούνται όταν υπάρξουν αιτήματα για τις ίδιες πληροφορίες. Ο IIS Manager διαθέτει το «output caching», που ελέγχεται με τις ακόλουθες ρυθμίσεις:

iis 1
Εικόνα 1. To HTTP request που θα προκαλέσει την ευπάθεια

Σενάριο επίθεσης & exploit

Την ευπάθεια αυτή μπορεί κάποιος να την εκμεταλλευτεί χρησιμοποιώντας το Range HTTP header. Αυτό το HTTP header επιτρέπει σε clients να στείλουν request για συγκεκριμένο περιεχόμενο από το server. Για παράδειγμα, ένας client που χρειάζεται μόνο μερικά byte ενός αρχείου, μπορεί να ζητήσει με request μόνο τα συγκεκριμένα τμήματα, αντί ολόκληρου του αρχείου. To RFC 2616 εξηγεί τον ορισμό των Range headers. Υπάρχει ένας header (Accept-Ranges) που χρησιμοποιείται από τους servers για την ενημέρωση των clients ότι υποστηρίζουν το Range header.

Συνήθως, ο Range header περιέχει τιμή όπως αυτή:

Range:  bytes=124-5656

Μπορεί όμως και να περιέχει τιμή όπως αυτή:

Range: bytes=0-

Αν το άνω όριο του Range header απουσιάζει, τότε θεωρείται ότι ο client ζητάει το σύνολο των δεδομένων. Είναι το ίδιο πράγμα σαν να μη χρησιμοποιείται καθόλου το Range header. Κι αν ο επιτιθέμενος ορίσει ένα αρκετά υψηλό άνω όριο;

Το μόνο που έχει να κάνει ο επιτιθέμενος είναι να στείλει ένα συγκεκριμένο HTTP request με συγκεκριμένες τιμές Range, που θα μπορούσε να προκαλέσει overflow στη μεταβλητή Range του server. Αυτό γίνεται ήδη με κώδικα exploit που είναι διαθέσιμος online:

iis 2
Εικόνα 2. To HTTP request που θα προκαλέσει την ευπάθεια

Η ενδολή cURL μπορεί επίσης να χρησιμοποιηθεί ως εξής, για να στείλει το ίδιο exploit:

$ curl -v example.com  -H "Host: example.com" -H "Range: bytes=0-18446744073709551615"

Το άνω όριο του Range header είναι 0xFFFFFFFFFFFFFFFF, που είναι η μεγαλύτερη 64-bit μη προσημασμένη ακέραια τιμή. Αυτή η τιμή θα προκαλέσει υπερχείλιση ακεραίου (integer overflow). Ένας προβληματικός server, λοιπόν, θα απαντήσει στο request με το status «Requested Range Not Satisfiable».

iis 3
Εικόνα 3. Η απάντηση στο αίτημα ενός unpatched server

Αυτό σημαίνει ότι ο client ζήτησε ένα κομμάτι του αρχείου που υπερβαίνει το τέλος του αρχείου στον server. Μια επιτυχημένη επίθεση θα προκαλούσε BSOD, οδηγώντας σε denial of service. Η Microsoft αναφέρει ότι αυτή η ευπάθεια θα μπορούσε να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα, αν και δεν υπάρχει κάποιο ευρέως γνωστό exploit διαθέσιμο.

Μετά την επιδιόρθωση, τα HTTP headers ελέγχονται πρώτα για τυχόν σφάλματα. Η απάντηση είναι διαφορετική στην περίπτωση αυτή, αν υποθέσουμε ότι συμβαίνει η ίδια επίθεση:

iis 4
Εικόνα 4. Η απάντηση στο αίτημα ενός patched server

Η απάντηση που περιλαμβάνει το string “The request has an invalid header name” δείχνει ότι ο server είναι patched και η επίθεση θα αποτύχει. Κώδικας Proof-of-concept χρησιμοποιεί ήδη αυτή την πληροφορία, όπως φαίνεται στη συνέχεια:

iis 5
Εικόνα 5. Πηγαίος κώδικας Proof of concept

Συμπέρασμα

Πρόκειται για μια ευπάθεια που μπορεί κάποιος να εκμεταλλευθεί πολύ εύκολα. Ένας απομακρυσμένος μη εξουσιοδοτημένος επιτιθέμενος θα μπορούσε εύκολα να πραγματοποιήσει επιθέσεις denial of service σε servers που λειτουργούν με προβληματικές εκδόσεις του IIS. Αν και επί του παρόντος δεν υπάρχουν γνωστά exploits απομακρυσμένης εκτέλεσης κώδικα, τίποτα δεν αποκλείει την εμφάνισή τους στο μέλλον.

Το cybersecurity.gr συμβουλεύει τους διαχειριστές συστημάτων να εφαρμόσουν το patch το συντομότερο δυνατό. Αν κάτι τέτοιο δεν είναι εφικτό άμεσα, τότε υπάρχει η εναλλακτική προσωρινή επιλογή της απενεργοποίησης του kernel caching στον IIS.

Πηγή: Trend Labs

Χρήσιμο
Ευανάγνωστο

User Rating: 4.8 ( 1 votes)

About CyberG

Check Also

Σοβαρή ευπάθεια στα Juniper NetScreen firewall

Οι εταιρεία Juniper ανακοίνωσε ότι εντόπισε “μη εξουσιοδοτημένο κώδικα”  στο ScreenOS, το οποίο είναι το …

Leave a Reply

Your email address will not be published. Required fields are marked *