Μια από τις πιο χρονοβόρες, αλλά απαραίτητες διαδικασίες στο hacking είναι το reconnaissance, κοινώς η αναγνώριση του στόχου. Πριν δοκιμάσουμε να χακάρουμε ένα σύστημα, πρέπει να γνωρίζουμε ποιο λειτουργικό σύστημα τρέχει, ποιες θύρες είναι ανοιχτές, ποιες υπηρεσίες εκτελούνται, ποιες εφαρμογές είναι εγκατεστημένες και εκτελούνται.
Η αναγνώριση αυξάνει τις πιθανότητες επιτυχίας μας και μειώνει τις πιθανότητες του εντοπισμού μας. Ένα από τα καλύτερα εργαλεία για αυτή τη δουλειά είναι το hping3.
Λόγω της ευελιξίας του, το hping3 αναφέρεται συχνά ως “εργαλείο δημιουργίας πακέτων”, πράγμα που σημαίνει ότι μπορεί να δημιουργήσει σχεδόν κάθε τύπο πακέτου που μπορείτε να φανταστείτε. Αυτό μπορεί να είναι πολύ χρήσιμο στην αναγνώριση, καθώς διαφορετικά πακέτα θα προκαλέσουν διαφορετικές απαντήσεις από τη στοίβα TCP/IP του λειτουργικού συστήματος, δίνοντάς μας στοιχεία για το υποκείμενο λειτουργικό σύστημα, τις θύρες αλλά και τις υπηρεσίες.
Επιπλέον, μπορούμε να δοκιμάσουμε διάφορες τεχνικές παράκαμψης του IDS και του τείχους προστασίας, όπως fragmenting πακέτων, αργές σαρώσεις κ.λ.π. Υπάρχουν τόσα πολλά πράγματα που μπορούμε να κάνουμε με το hping3, αλλά θα περιοριστώ σε μερικά μόνο σε αυτόν τον οδηγό.
Table of Contents
Βήμα 1: Εκτελούμε το Hping3
Το hping3 είναι ένα ισχυρό εργαλείο με πολλά χαρακτηριστικά και λειτουργίες. Θα εξετάσουμε μερικές από τις βασικές λειτουργίες που είναι απαραίτητες στους χάκερς εδώ, αλλά αν επενδύσετε λίγο χρόνο για να μάθετε τις πρόσθετες λειτουργίες του, θα σας φανεί πολύ χρήσιμο. Ας δούμε πρώτα την οθόνη βοήθειας.
kali > hping -h
Όπως μπορείτε να δείτε, η οθόνη βοήθειας για το hping3 είναι πολύ μεγάλη και λεπτομερής.
kali >hping3 -h |more
Σημειώστε ότι το hping3 μπορεί να δημιουργήσει πακέτα TCP, RAW IP, ICMP και UDP, με το TCP να είναι η προεπιλογή. Περίπου στη μέση της οθόνης παρατηρήστε ότι:
-
-a Το switch μας επιτρέπει να πλαστογραφήσουμε τη διεύθυνση IP μας
-
–rand-dest παράγει πακέτα με τυχαίες θύρες προορισμού
-
–rand-source παράγει πακέτα με τυχαίες διευθύνσεις
-
-t ορίζει το χρόνο ζωής (TTL) των πακέτων
-
-f κατακερματίζει τα πακέτα
Αν τώρα μετακινηθούμε λίγο προς τα κάτω στη σελίδα βοήθειας, θα δούμε τις ακόλουθες επιλογές. Σημειώστε ότι όπως και στο nmap, μπορούμε να ορίσουμε οποιαδήποτε από τα flags στο πακέτο μας (FSPURA).
Θέλω να παρατηρήσετε τις ακόλουθες εναλλαγές.
-
-Q εμφανίζει μόνο τον αριθμό ακολουθίας
-
-S σάρωση χρησιμοποιώντας πακέτα SYN
-
–tcp-timestamp παίρνει το timestamp από το tcp πακέτο
Βήμα 2: Προεπιλογή hping3
Ένα από τα πιο σημαντικά χαρακτηριστικά που πρέπει να κατανοήσετε για το hping3 είναι ότι το προεπιλεγμένο πακέτο του είναι το TCP. Αυτό σημαίνει ότι όταν μια συσκευή δικτύου, όπως ένας δρομολογητής ή ένα τείχος προστασίας, μπλοκάρει το ICMP (ping), μπορούμε ακόμα να κάνουμε αναγνώριση των κεντρικών υπολογιστών με το hping3.
Ας δοκιμάσουμε να τρέξουμε το flag SYN (αυτό θα ήταν ουσιαστικά το ίδιο με το nmap -sS scan) και να ελέγξουμε αν η θύρα 80 είναι ανοιχτή (-p 80).
kali > hping3 -S 192.168.1.116 -p 80
Σημείωση: στο παραπάνω στιγμιότυπο οθόνης τα πακέτα επιστρέφουν με τα flags SA ρυθμισμένες, που σημαίνει ότι η θύρα είναι ανοιχτή. Αν η θύρα ήταν κλειστή, η θύρα θα απαντούσε με RA.
Αν θέλουμε να σαρώσουμε όλες τις θύρες που ξεκινούν από το 1, μπορούμε απλά να προσθέσουμε τον διακόπτη increment (++) μετά το switch port (p) και τον αριθμό της θύρας από όπου θέλουμε να ξεκινήσουμε τη σάρωση (σε αυτή την περίπτωση το 1), όπως παρακάτω:
kali > hping -S 192.168.1.116 -p ++1
Βήμα 3: Κατακερματισμός πακέτων με το hping3
Το TCP σχεδιάστηκε για να είναι ένα ισχυρό πρωτόκολλο που θα συνέχιζε να επικοινωνεί ακόμη και σε δυσμενείς συνθήκες. Ένα χαρακτηριστικό που εξασφαλίζει αυτή την ευρωστία είναι η ικανότητά του να δουλεύει με πακέτα που έχουν κατακερματιστεί ή αλλοιωθεί σε πολλά κομμάτια. Το TCP θα ανασυνθέσει αυτά τα πακέτα όταν φτάσουν στο σύστημα-στόχο.
Αυτό το χαρακτηριστικό του TCP μπορεί να χρησιμοποιηθεί εναντίον του, χρησιμοποιώντας ένα εργαλείο όπως το hping3 για τον κατακερματισμό μιας επίθεσης σε πολλαπλά πακέτα, ώστε να παρακάμψει το IDS και το τείχος προστασίας και στη συνέχεια να επανασυναρμολογηθεί το κακόβουλο λογισμικό στο στόχο.
Παρόλο που τα περισσότερα σύγχρονα IDS προσπαθούν πλέον να συλλάβουν fragmentation επιθέσεις (στο Snort, υπάρχει ένας προεπεξεργαστής frag3 που προσπαθεί να ανιχνεύσει τον κατακερματισμό), τα παλαιότερα δεν το κάνουν. Ακόμα και τα νεότερα IDS μπορούν να εντοπίσουν μόνο τον κατακερματισμό για τον οποίο έχουν σχεδιαστεί να ανιχνεύουν. Η ομορφιά του hping3 είναι ότι μας επιτρέπει να σχεδιάζουμε νέες επιθέσεις που το IDS δεν έχει ενημερωθεί ακόμα.
Ας δοκιμάσουμε το fragmentation στο hping3.
kali> hping3 -f 192.168.1.105 -p 80
Βήμα 4: Αποστολή δεδομένων με το hping3
Εκτός από τη δυνατότητα να δημιουργήσουμε ένα πακέτο με σχεδόν οποιαδήποτε χαρακτηριστικά μπορούμε να φανταστούμε, το hping3 μας επιτρέπει επίσης να τοποθετήσουμε όποια δεδομένα θέλουμε σε αυτά τα πακέτα. Παρατηρήστε στην οθόνη βοήθειας από το Βήμα 1 ότι το switch -E μας επιτρέπει να δηλώσουμε ένα αρχείο που θέλουμε να χρησιμοποιήσουμε για να εισάγουμε το payload του πακέτου μας.
Ας πούμε ότι έχουμε ένα αρχείο με το όνομα malware που περιέχει ένα exploit που προσπαθούμε να στείλουμε στο στόχο. Επιπλέον, μας ενδιαφέρει αν αυτό το κακόβουλο λογισμικό μπορεί να εντοπιστεί από το IDS. Θα μπορούσαμε να χρησιμοποιήσουμε τον fragmentation switch και να φορτώσουμε το κακόβουλο λογισμικό σε πολλαπλά πακέτα, όπου θα επανασυναρμολογηθούν από τον στόχο, αποφεύγοντας το IDS ή το λογισμικό AV.
kali > hping3 -f 192.168.1.116 -p 445 -d 100 -E malware
Όπου:
-
-d είναι το μέγεθος των δεδομένων του payload (εδώ το έχουμε ορίσει ως 100 bytes)
-
-E λέει στο hping3 να πάρει τα δεδομένα από το ακόλουθο αρχείο
Αυτή η εντολή στέλνει στη συνέχεια το περιεχόμενο του κακόβουλου αρχείου 100 bytes κάθε φορά στο στόχο στη θύρα 445.
Βήμα 5: Traceroute με το hping3
Το Traceroute είναι ένα εργαλείο που μας επιτρέπει να εντοπίσουμε τη διαδρομή που ακολουθεί ένα πακέτο μέσω του διαδικτύου από τον πελάτη στον στόχο, χειραγωγώντας το TTL (time to live) των πακέτων ICMP.
Μπορεί να αποτελέσει ένα πολύ χρήσιμο εργαλείο για τη διάγνωση προβλημάτων σε ένα δίκτυο, ενώ μπορεί επίσης να χρησιμοποιηθεί από χάκερ για να βρουν συσκευές στο δίκτυο και τη θέση των firewalls, των δρομολογητών κ.λ.π. Για το λόγο αυτό, οι περισσότεροι διαχειριστές δικτύων μπλοκάρουν το ICMP (ping).
Ευτυχώς για εμάς, το hping3 μας επιτρέπει να κάνουμε ακριβώς το ίδιο πράγμα, αλλά χρησιμοποιώντας το TCP, το οποίο σχεδόν κάθε τείχος προστασίας επιτρέπει (διαφορετικά, δεν θα επέτρεπε την κυκλοφορία στο Διαδίκτυο). Ας προσπαθήσουμε να εκτελέσουμε ένα traceroute χρησιμοποιώντας το hping3 με το flag SYN στο google.com.
kali > hping3 -z -t 1 -S google.com -p 80
Όπου:
-
-z συνδέει την εντολή με το ctrl z στο πληκτρολόγιο έτσι ώστε κάθε φορά που το πατάμε, το TTL αυξάνεται κατά 1
-
-t ορίζει το αρχικό TTL (σε αυτή την περίπτωση, χρησιμοποιούμε το 1)
-
-S θέτει το flag σε SYN
-
-p 80 ορίζει τη θύρα προορισμού σε 80
Στο παραπάνω στιγμιότυπο οθόνης, το TTL εξακολουθεί να είναι 1 και το hping3 μας λέει ότι η συσκευή είναι άγνωστη. Μπορούμε στη συνέχεια να πατήσουμε το πλήκτρο CTRL+ z και να αυξήσουμε το TTL κατά ένα και να βρούμε κάθε συσκευή μεταξύ εμάς και του στόχου.
Αυτό το στιγμιότυπο οθόνης μας δείχνει δύο συσκευές μεταξύ εμού και του google.com. Συνεχίζοντας να πατάω το πλήκτρο CTRL+ z θα αυξήσω το TTL και θα βρω κάθε συσκευή μέχρι να φτάσω στο διακομιστή της Google.
Βήμα 6: Πρόβλεψη αριθμών ακολουθίας με το hping3
Ένα άλλο χαρακτηριστικό που έχει ενσωματωθεί στο TCP για να διασφαλίζει την ανθεκτικότητά του είναι η δυνατότητα αναδιάταξης των πακέτων στο στόχο, ακόμη και αν αυτά φτάνουν διάσπαρτα.
Θυμηθείτε ότι τα πακέτα δεν ακολουθούν πάντα την ίδια διαδρομή προς τον στόχο, οπότε πολύ συχνά φτάνουν χωρίς κάποια σειρά. Το TCP τοποθετεί έναν αριθμό ακολουθίας στα πακέτα, ώστε να μπορεί να τα επαναφέρει στη σειρά όπου φτάνουν.
Αυτό το χαρακτηριστικό χρησιμοποιείται από τους χάκερς εδώ και πολλά χρόνια, για επιθέσεις man-in-the-middle (MitM). Για προστασία από επιθέσεις MitM, οι κατασκευαστές λειτουργικών συστημάτων τροποποίησαν τη στοίβα TCP/IP έτσι ώστε οι αριθμοί ακολουθίας να μην αριθμούνται πλέον σειριακά. Αντ’ αυτού, για να γίνει πιο δύσκολη μια επίθεση MitM, το λειτουργικό σύστημα χρησιμοποιεί έναν αλγόριθμο για τη δημιουργία των αριθμών ακολουθίας.
Για να πραγματοποιήσουμε μια επιτυχημένη επίθεση MitM, θα πρέπει να προβλέψουμε τους αριθμούς της ακολουθίας. Το hping3 μπορεί να μας βοηθήσει σε αυτό. Μπορούμε να κάνουμε το σύστημα-στόχο να απαντήσει με τους αριθμούς ακολουθίας του και στη συνέχεια, από τους αριθμούς ακολουθίας μπορούμε να αποκρυπτογραφήσουμε ποιον αλγόριθμο χρησιμοποιεί το λειτουργικό σύστημα. Μπορούμε να το κάνουμε αυτό με την παρακάτω εντολή:
kali > hping3 -Q -S google.com -p 80
Όπου:
-Q εμφανίζει τους αριθμούς της ακολουθίας
Όπως μπορείτε να δείτε, το google.com ανταποκρίνεται με τους αριθμούς ακολουθίας, τους οποίους το hping3 καταγράφει και εμφανίζει.
Βήμα 7: hping3 για το Uptime
Τέλος, μπορούμε να χρησιμοποιήσουμε το hping3 για να διαπιστώσουμε πόσο καιρό είναι σε λειτουργία ο διακομιστής. Αυτή μπορεί να είναι πολύ χρήσιμη πληροφορία για τον χάκερ, καθώς συνήθως ο διακομιστής πρέπει να επανεκκινηθεί για να εφαρμόσει ενημερώσεις και διορθώσεις. Γνωρίζοντας πόσο καιρό το σύστημα είναι σε λειτουργία, μπορούμε να προβλέψουμε ποια patches έχουν εφαρμοστεί και σε ποιες παραβιάσεις είναι ευάλωτο το σύστημα.
Για παράδειγμα, αν βρούμε ένα σύστημα που δεν έχει επανεκκινήσει εδώ και τρία χρόνια, μπορούμε να είμαστε αρκετά σίγουροι ότι δεν έχουν εφαρμοστεί τυχόν επιδιορθώσεις ασφαλείας που έχουν κυκλοφορήσει σε αυτό το χρονικό διάστημα. Αυτό σημαίνει ότι όλα τα τρωτά σημεία που έγιναν γνωστά σε αυτό το διάστημα είναι ακόμη ανοιχτά σε αυτό το σύστημα.
Το Hping3 χρησιμοποιεί το πακέτο tcp-timestamp για να προβλέψει πόσο καιρό το σύστημα ήταν σε λειτουργία.
Ας το δοκιμάσουμε αυτό σε σχέση με το google.com.
kali> hping3 –tcp-timestamp -S google.com -p 80
Όπως βλέπουμε, αυτός ο διακομιστής ιστού google.com είναι σε λειτουργία μόλις 9 ημέρες, 22 ώρες, 21 λεπτά και 40 δευτερόλεπτα. Αν δοκιμάσετε αυτή τη σάρωση σε άλλους διακομιστές, είναι πιθανό να δείτε πολύ μεγαλύτερα χρονικά διαστήματα μεταξύ της τελευταίας επανεκκίνησης, που μερικές φορές μετριούνται σε χρόνια.