Το Hacking εργαστήριο μας και η μελέτη ενός τοπικού exploit

dsyrmalis | Κυρ, 03/04/2012 - 22:34 | 9' | 8



Η λέξη Hacker στις μέρες μας έχει αποκτήσει μια μάλλον αρνητική χροιά που σχετίζεται κυρίως με deface σελίδων και γενικότερα με τις διάφορες κυβερνοεπιθέσεις. Στην πραγματικότητα βέβαια ο Hacker είναι κάτι εντελώς διαφορετικό. Ένα όμως είναι βέβαιο. Όλοι οι Hackers χρησιμοποιούν κάποιο λειτουργικό σύστημα τύπου Unix. Γιατί όμως;

Η απάντηση είναι απλή. Οι δυνατότητες που δίνει η γραμμή εντολών όλων των Unix ή τύπου Unix λειτουργικών συστημάτων σε σχέση με άλλα λειτουργικά είναι πολύ μεγαλύτερες.

Ας δούμε λοιπόν σύντομα πως μπορούμε να φτιάξουμε ένα Lan δίκτυο στο σπίτι μας ώστε να κάνουμε τα πειράματα μας νόμιμα και να μάθουμε πως σκέφτονται και τι κάνουν οι Hackers. Κυρίως όμως κάνουμε την ανάρτηση αυτή για να μάθουμε να σκεφτόμαστε σαν Linux χρήστες και να αποφεύγουμε επικίνδυνες συμβουλές με Windows νοοτροπία όπως: Κάνε κλικ εδώ, χρησιμοποίησε το τάδε (άγνωστο) πρόγραμμα με γραφικό περιβάλλον, πήγαινε στη ΧΥΖ ιστοσελίδαπου σου εξασφαλίζει πρόσβαση, ανωνυμία, κωδικούς κλπ.

Για τέτοια πειράματα και για τη δημιουργία του"κατάλληλου περιβάλλοντος" μπορείτε να χρησιμοποιείτε το Damn Vulnurable Linux. Πρόκειται για μια διανομή η οποία επίτηδες άφηνε διάφορα κενά ασφαλείας χωρίς να τα διορθώνει, ώστε οι χρήστες να τα εντοπίζουν και να εκπαιδεύονται έτσι στην ασφάλιση των συστημάτων τους. Και λέμε "άφηνε" γιατί δυστυχώς η διανομή σταμάτησε την ανάπτυξη της. Παρόλα αυτά μπορεί να μας χρησιμεύσει για αρκετό καιρό ακόμα. Σαν μηχάνημα επίθεσης μπορεί να χρησιμοποιηθεί κάποιο με το Backtrack που είναι εξειδικευμένο για τέτοιες περιπτώσεις. Φυσικά μπορούμε να χρησιμοποιήσουμε οποιαδήποτε άλλη διανομή Linux.

Το Damn Vulnurable Linux μπορούμε να το κατεβάσουμε σε μορφή torrentκαι σε καμία περίπτωση δεν το συνιστούμε σαν κύριο λειτουργικό παρά μόνο για τα πειράματα μας.

Επίσης, το exploit που δείχνουμε δεν πρόκειται να λειτουργήσει σε καμία διανομή αφού διορθώθηκε πριν πολύ πολύ καιρό. Σκοπός είναι να πάρουμε μια γεύση και να χρησιμοποιήσουμε λίγο τον gcc και τη γραμμή εντολών!

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

Τι είναι όμως exploit; Πρόκειται για κακόβουλο κώδικα ο οποίος όταν εκτελεστεί εκμεταλλεύεται κάποιες αδυναμίες του λειτουργικού συστήματος και μας δίνει μη εξουσιοδοτημένη πρόσβαση ή αυξημένα προνόμια, όπως αυτά του Root.Υπάρχουν δύο ειδών exploits. Τα Local και τα Remote. Ως local εννοούμε αυτά που για να εκτελεστούν απαιτείται τοπική πρόσβαση με ένα λογαριασμό απλού χρήστη. Τρέχοντας για παράδειγμα ένα τοπικό exploit μπορούμενα αποκτήσουμε δικαιώματα υπερχρήστη.Ως Remote εννοούμε αυτά που μπορούν να μας δώσουν πρόσβαση χωρίς καν να έχουμε κάποιο λογαριασμόστον απομακρυσμένο υπολογιστή. Έτσι για παράδειγμα μπορούμε να εκμεταλλευτούμε μια αδυναμία της εφαρμογής Sendmail* που τρέχει σε ένα server και να αποκτήσουμε δικαιώματα υπερχρήστη ελέγχοντας πλήρως το συγκεκριμένο υπολογιστή.

Τέλος, ως Zero day exploit λέμε αυτά που είναι άγνωστα και οι διαχειριστέςτων συστημάτων δεν μπορούν ουσιαστικά να προστατεύσουν τα συστήματα τους αφού δεν ξέρουν καν πως υπάρχει πρόβλημα.

Ας μπούμε όμωςστη δράση:

Πάμε στην παρακάτωδιεύθυνση: http://www.exploit-db.com/exploits/15704/

Βλέπουμε ένα τοπικό exploit που εκμεταλλευόταν τρεις αδυναμίες στον τότε Linux πυρήνα (2.6.37) και μας έδινε root προνόμια.

Ο κώδικας που μας αφορά ξεκινά απο τη γραμμή που γράφει #include <stdio.h> και τελειώνει στο άγκιστρο}. Οτιδήποτε βλέπουμε ανάμεσα στα σύμβολα*/ και *\ είναι σχόλια και δεν εκτελούνται στο πρόγραμμά μας. Για παράδειγμα η γραμμή που γράφει/*Shouldn't get here... */

Ήδη απο την αρχή του κώδικα βλέπουμε πως έχει γραφτεί στη γλώσσα προγραμματισμού C.

Έτσι λοιπόν θα κάνουμε αντιγραφή και επικόλληση τον επίμαχο κώδικα και θα σώσουμε το αρχείο με την κατάληξη .c. Στην περίπτωση μας θα το σώσουμε με την ονομασία full-nelson.c με τη βοήθεια ενός επεξεργαστή κειμένου.

Ας το τρέξουμε τώρα με το μεταγλωττιστή gcc:

gcc full-nelson.c -o full-nelson

Τι εντολή δώσαμε μόλις τώρα; Ουσιαστικά του λέμε να μας μεταγλωττίσει το αρχείο full-nelson.c και να μας το δώσει (με το διακόπτη -o να το κάνει output) με την ονομασίαfull-nelson.

Αφού σημειωθεί αυτό το μόνο που χρειάζεται είναι να τρέξουμε το αρχείο ως εξής: ./full-nelson.

Αν τώρα είχαμε μια παλιά διανομή με τον τότε προβληματικό πυρήνα και γράφαμε την εντολή whoami, θα βλέπαμε την απάντηση Root!Λίγο πιο πριν θα παίρναμε κάποια μηνύματα όπως τα εξής:

[*]Linux kernel >= 2.6.30 RDS socket exploit

[*]by Dan Rosenberg

[*]Restoring function pointer...

[*]Got root!

Σε περίπτωσηπου η διαδικασία αποτύγχανε θα βλέπαμε το εξής:

[*]Exploit failed to get root.

Μια καλή άσκηση θα ήταν να μαθαίνατε κάποια βασικά πάνω στη γλώσσα C και να ψάχνατε μέσα στον κώδικα τα παραπάνω μηνύματα.Τι ρόλο να παίζει άραγε η printf;

Αν τώρα προσπαθήσετε να εφαρμόσετε όλα τα παραπάνω είναι σίγουρο πως δεν θα πετύχετε τίποτα.Εξάλλου για αυτό το λόγο παρουσιάζουμε ένα παλιό exploit και μάλιστα τοπικό. Για να μην μπορείτε να το χρησιμοποιήσετε με επιτυχία...

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

 

*Το πρόγραμμα Sendmail στη αρχή της ανάπτυξης του αντιμετώπιζε πολλά προβλήματα ασφαλείας. Στους τότε κόλπους των Hackers το Sendmail είχε γίνει κάτι ανέκδοτο. Πολλοί μάλιστα περιπαικτικά έλεγαν: "Whats the Sendmail bug of this week? "

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Τέτοιου είδους post σας ενδιαφέρουν; Θέλετε να ακολουθήσουν και άλλα σε αυτό το στυλ;

     Έξοχο άρθρο Διονύση. Μέχρι  τώρα  μεταγλώττιζα  μόνο  source tarballs  με το GCC , καθώς  δεν  γνωρίζω  από  προγραμματισμό  σε  C , μόνο  ένα  στοιχειώδες  πρόγραμμα  για  Java  έχω  φτιάξει .  Θα  δοκιμάσω  το  exploit  σε  κάποια  παλιά  διανομή  με  ''γερασμένο'' πυρήνα  &  θα  ποστάρω. Πολύ  χρήσιμο  αυτό  το  κείμενο  ,  μου  ''άνοιξε'' η  όρεξη  να  διαβάσω  & κανένα  βιβλίο  !  !  !Laughing      Συνέχισέ  το !  !  !

dsyrmalis]Τέτοιου είδους post σας ενδιαφέρουν; Θέλετε να ακολουθήσουν και άλλα σε αυτό το στυλ;

Και βεβαια μας ενδιαφερει. Πολυ καλη παρουσιαση!
Ισως να ζητησουμε απο τον admin να φτιαξει ενα section "Hacking"
σε μια γωνια εδω στο linuxinside. Cool

Ας επλίσουμε πως δεν θα με βάλει μέσα ο Σφακιανάκης :))
Για να σοβαρευτούμε όμως τώρα, μου είχε κάνει εντύπωση το γεγονός πως το συγκεκριμένο exploit λειτουργούσε (τότε) άψογα και στα Ubunto-ειδή, που έχουν απενεργοποιημένο το λογαριασμό Root.
Στο Lubuntu πήρα Root κανονικότατα!
@zenwalk Αν το κάνεις, δείξε μας και το αποτέλεσμα του uname -a.

@dsyrmalis το θέμα δεν είναι ότι είσαι πηγή γνώσης ρε φίλε,

αλλά έχεις και το χάρισμα να την μεταδίδεις με κάθε σου ποστ.

Και αυτό είναι χάρισμα ή τόχεις ή δεν τόχεις.-

Θα μπορούσες να εμβαθύνεις λίγο ακόμα; αφού το έχεις; :D

riziti Σε ευχαριστώ! Αυτά τα θέματα όμως είναι και λίγο στην "κόψη" του ξυραφιού. Οπότε θέλουν "ειδική μεταχείριση". Δεν μπορώ και δεν πρέπει να ξεπεράσω κάποια όρια. Σκοπός μου είναι όσοι τα διαβάζουν να στραφούν στον προγραμματισμό, κάποιοι στην ασφάλεια κλπ αλλά πάντοτε νόμιμα και χωρίς να κάνουν επιπολαιότητες.
Δεν είμαι πάντως πηγή γνώσης και δεν το λέω αυτό να κάνω επίδειξη μετριοφροσύνης. Μπορεί ο vagrale13 να ξέρει πιο πολλά απο εμένα στο πως ρυθμίζεις για παράδειγμα τον εκτυπωτή σου ή πολλά περισσότερα ο Τσιομπίκας που γράφει κώδικα για τον linux πυρήνα. Όλοι μαθαίνουμε πάντα ακόμα και απο αρχάριους.
Όταν βρεθεί χρόνος θα προσπαθήσω να γράψω ένα θεματάκι για το πως στέλνεται η πλαστή αλληλογραφία, τι εκμεταλλεύονται οι spammers, πώς θα τους εντοπίσουμε κλπ. Όχι όμως με έτοιμες φόρμες του δικτύου, αλλά σαν linuxαδες, μέσα απο τη γραμμή εντολών και με απλά προγράμματα που ήδη τα έχουμε αλλά δεν τα χρησιμοποιούμε.