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

Επίθεση για σπάσιμο του WPA/WPA2 (2ο μέρος)

Στο πρώτο μέρος αυτού του αφιερώματος η υποτιθέμενα ισχυρή ασφάλεια του WPA/WPA2-PSK απομυθοποιήθηκε, καθώς είδατε πόσο εύκολα μπορείτε να επιτεθείτε σε δίκτυα που προστατεύονται με αυτό και να ανακτήσετε το πολύτιμο passphrase χρησιμοποιώντας το coWPAtty. Αυτό το μήνα το coWPAtty θα αντικατασταθεί από το πανίσχυρο Pyrit και θα δείτε πώς μπορείτε, με λίγο περισσότερο αρχικό κόπο, να κερδίσετε ακόμα μεγαλύτερη ευκολία και -ειδικά αν διαθέτετε κάποιον σύγχρονο ελεγκτή γραφικών- *πολύ* καλύτερες επιδόσεις. Μήπως έχετε και δεύτερο υπολογιστή; Και τρίτο; Μήπως θέλουν να εμπλακούν και οι φίλοι σας; Χρησιμοποιήστε το δίκτυο για να δημιουργήσετε πανίσχυρα WPA cracking clusters. Τόσο ισχυρά, ώστε να μπορείτε να επιτίθεστε σε οποιοδήποτε WPA δίκτυο την ώρα που το βρίσκετε και ανεξάρτητα από τη σπανιότητα του ονόματός του.

Αρχικά, ας θυμηθούμε τα βασικά βήματα της διαδικασίας επίθεσης στο WPA/WPA2-PSK που περιγράφηκε στο πρώτο μέρος του αφιερώματος:

  • Σύλληψη μιας διαδικασίας handshake κατά το authentication ενός client στο προς επίθεση δίκτυο με τη βοήθεια της σουίτας εργαλείων Aircrack-ng.
  • Λήψη απ’ το internet έτοιμου πίνακα precomputed PMK που αντιστοιχεί στο όνομα (SSID) του προς επίθεση δικτύου ή δημιουργία αυτού από δοσμένο dictionary με το coWPAtty (ακριβέστερα, με το συνοδευτικό εργαλείο genPMK).
  • Αξιοποίηση του capture file (βήμα 1) και του πίνακα (βήμα 2) από το coWPAtty για την ανάκτηση του passphrase.

Το Pyrit είναι ένα εργαλείο που μπορεί, όπως και το coWPAtty, να αναλάβει τις διεργασίες των βημάτων 2 και 3. Ωστόσο, το Pyrit έχει εκτεταμένες δυνατότητες οι οποίες το καθιστούν πολύ πιο εύχρηστο και με σημαντικά καλύτερες επιδόσεις.
Συγκεκριμένα, στον τομέα των επιδόσεων:

  • Σε αντίθεση με το coWPAtty, το οποίο δεν μπορεί να χρησιμοποιήσει πάνω από ένα πυρήνα της CPU, το Pyrit εκμεταλλεύεται όλους τους πυρήνες ταυτόχρονα. Επιπλέον, στον ίδιο μονοπύρηνο επεξεργαστή (ώστε το coWPAtty να τον αξιοποιεί πλήρως), το Pyrit υπολογίζει PMK (βήμα 2) περίπου τέσσερις φορές πιο γρήγορα. Οπότε σε διπύρηνο σύστημα το Pyrit είναι 8 φορές πιο γρήγορο απ’ το coWPAtty, σε τετραπύρηνο 16 κ.ο.κ. Η ίδια σχεδόν διαφορά σε επιδόσεις ισχύει και για την διαδικασία εύρεσης του passphrase με χρήση των ήδη υπολογισμένων PMK (βήμα 3).
  • Αν ο υπολογιστής σας διαθέτει μια σύγχρονη κάρτα γραφικών της nVIDIA ή της ATI, το Pyrit μπορεί να αξιοποιήσει την GPU της κάρτας για να υπολογίσει PMK δεκάδες φορές ταχύτερα απ’ ότι μια σύγχρονη CPU.

coWPAtty (πίσω) εναντίον Pyrit (μπροστά). Τα δύο προγράμματα τρέχουν στον ίδιο υπολογιστή και τους έχει ανατεθεί ακριβώς η ίδια εργασία (επίθεση στο ίδιο capture file, χρησιμοποιώντας το ίδιο dictionary). Χάρη σε μια ATI HD4770, όπως φαίνεται, το Pyrit είναι σχεδόν 100 φορές πιο γρήγορο, ολοκληρώνοντας την επίθεση -που διήρκησε σχεδόν 1,5 ώρα στο coWPAtty- σε 53 δευτερόλεπτα!!!Η αύξηση των επιδόσεων είναι τόσο μεγάλη, ώστε η δημιουργία δικών σας πινάκων precomputed PMK, από δικά σας custom dictionary και για SSID της επιλογής σας, γίνεται πλέον ρεαλιστική. Για παράδειγμα, σε ένα σχετικά απλό σύστημα με ένα Core2Duo@2.6GHz και μια ATI HD4770, οι επιδόσεις αυξάνονται από 180 PMK/sec (coWPAtty) σε 17.000 PMK/sec (Pyrit), και ο χρόνος δημιουργίας ενός πίνακα precomputed PMK για 50 εκατομμύρια πιθανά passphrase (όπως αυτοί της Offensive Security) μειώνεται από 3,5 μέρες σε 49 λεπτά! Στο ίδιο σύστημα, η χρήση του δημιουργημένου πίνακα για την επίθεση στο capture file (βήμα 3) μειώνεται δραστικά. Το coWPAtty ελέγχει τα PMK του πίνακα με ρυθμό 115.000 PMK/sec ενώ το Pyrit κάνει την ίδια δουλειά με ρυθμό 1.450.000 PMK/sec (34 δευτερόλεπτα για ολοκλήρωση της επίθεσης αντί για σχεδόν 7 λεπτά!).   
Στον -δε- τομέα της ευχρηστίας, το Pyrit:

  • Μπορεί να αποθηκεύει όλα τα δεδομένα που το αφορούν (λίστες με πιθανά passphrase και SSID καθώς και τα αντίστοιχα PMK που υπολογίζει) σε μια ειδική ενιαία βάση δεδομένων (προαιρετικά, με τη βοήθεια του SQLAlchemy, το Pyrit μπορεί να δημιουργήσει τη βάση δεδομένων του πάνω σε κάποιο κοινό DBMS, όπως SQLite, MySQL ή PostgreSQL, αλλά αυτό ξεφεύγει από τους σκοπούς αυτού του άρθρου). Μ’ αυτόν τον τρόπο γίνεται πολύ πιο ευέλικτο αφού ο χρήστης μπορεί να προσθέτει όποτε θέλει πιθανά passphrase από νέα dictionary και νέα πιθανά SSID και να ζητά τον υπολογισμό των επιπλέον PMK χωρίς να δημιουργεί πίνακες από την αρχή. Βέβαια, εναλλακτικά, το Pyrit λειτουργεί και με αρχεία, ακριβώς όπως το coWPAtty.
  • Έχει την δυνατότητα να λειτουργήσει ως server εφαρμογή, δανείζοντας είτε την βάση δεδομένων του, είτε την υπολογιστική ισχύ του υπολογιστή όπου εκτελείται σε απομακρυσμένους υπολογιστές που τρέχουν και αυτοί το Pyrit ως client. Έτσι, μπορείτε να δημιουργείτε εύκολα cluster για μαζικό υπολογισμό PMK, να δανείζετε την τεράστια βάση σας ζωντανά σε φίλους, να χρησιμοποιείτε τον υπολογιστή του σπιτιού με την ισχυρή CPU/GPU για να σπάτε WPA δίκτυα ενώ εσείς βρίσκεστε on-site συλλαμβάνοντας handshake με το «ψόφιο» netbook σας κ.ο.κ.

Το τίμημα για όλα αυτά είναι μια «μπελαλίδικη» εγκατάσταση που αποτελείται από δύο στάδια – ένα για το βασικό πρόγραμμα και ένα για την υποστήριξη GPU. Όμως μην ανησυχείτε – αν ακολουθήσετε πιστά τα αναλυτικά βήματα που ακολουθούν, δεν αναμένονται προβλήματα.

Εγκατάσταση βασικού προγράμματος

Το Pyrit διανέμεται από την επίσημη ιστοσελίδα του αποκλειστικά ως πηγαίος κώδικας. Υπάρχουν, βέβαια, κάποιες διανομές Linux «της πιάτσας» -όπως το BackTrack- που παρέχουν έτοιμα binary του Pyrit, τα οποία όμως δεν συνοδεύονται από πρόσθετο υποστήριξης GPU και συνήθως βασίζονται σε παλιές εκδόσεις. Αυτό σημαίνει ότι αν θέλετε ένα πλήρως λειτουργικό Pyrit, θα πρέπει να το μεταγλωττίσετε μόνοι σας.
Το Pyrit μεταγλωττίζεται και τρέχει σε Linux, FreeBSD και MacOS. Για κοινή αναφορά στον οδηγό αυτό, θα υποτεθεί ότι χρησιμοποιείτε μια πλήρως ενημερωμένη εγκατάσταση του Ubuntu 10.04. Και, δυστυχώς, μιας και η κάρτα γραφικών σας πρέπει να είναι διαθέσιμη στο Pyrit, η χρήση VM είναι εκτός συζήτησης (εκτός αν θέλετε να χρησιμοποιήσετε μόνο CPU).
Η εγκατάσταση ξεκινά με την λήψη της πιο πρόσφατης έκδοσης κώδικα του Pyrit με το Subversion. Εκτελώντας τακτικά svn update μέσα στο φάκελο pyrit_svn μπορείτε να έχετε τοπικά ένα ενημερωμένο αντίγραφο. Βέβαια, όταν υπάρχουν αλλαγές θα πρέπει να επαναλαμβάνετε τη μεταγλώττιση.Το πρώτο εμπόδιο συναντάται πριν ακόμα ξεκινήσει η εγκατάσταση. Η έκδοση 3.0, η τελευταία διαθέσιμη stable έκδοση του Pyrit, έχει κάποια προβλήματα με το καινούριο SDK που κυκλοφόρησε η ATI, οπότε θα πρέπει να χρησιμοποιήσετε την πλέον πρόσφατη έκδοση από το trunk. Έτσι, θα πρέπει πρώτα να εγκαταστήσετε το Subversion. Ανοίξτε ένα terminal και πληκτρολογήστε:

sudo apt-get install subversion

Τώρα κατεβάστε το πιο πρόσφατο revision του πηγαίου κώδικα του Pyrit απ’ το trunk στον υποφάκελο pyrite_svn του φακέλου του χρήστη σας:

cd ~
svn checkout http://pyrit.googlecode.com/svn/trunk/ pyrit_svn

Η επιτυχής μεταγλώττιση του Pyrit απαιτεί να υπάρχουν εγκατεστημένα στο σύστημα η Python, το OpenSSL και η βιβλιοθήκη libPCap μαζί με τα header files τους. Και τα τρία πακέτα έρχονται προεγκατεστημένα στο Lucid Lynx αλλά χωρίς τα header files. Συμπληρώστε το κενό πληκτρολογώντας:

sudo apt-get install python-dev libssl-dev libpcap-dev

Πλέον μπορείτε να παραγγείλετε τη μεταγλώττιση:

cd pyrit_svn/pyrit
python setup.py build

Εφόσον ολοκληρωθεί χωρίς σφάλματα, εγκαταστήστε το Pyrit και επιστρέψτε στο φάκελο χρήστη πληκτρολογώντας:

sudo python setup.py install
cd ~

Αν όλα πήγαν καλά, το Pyrit θα πρέπει να είναι επιτυχώς εγκατεστημένο στο σύστημά σας. Για να το δοκιμάσετε πληκτρολογήστε:

pyrit list_cores

Με την εντολή αυτή ζητάτε από το Pyrit να σας αναφέρει τις διαθέσιμες μονάδες υπολογισμού. Και εφόσον δεν έχετε φροντίσει ακόμα για την υποστήριξη GPU, το Pyrit θα πρέπει να σας επιστρέψει μόνο τους πυρήνες της CPU. Αν θέλετε να πάρετε ένα πρώτο δείγμα από την ταχύτητα με την οποία μπορείτε να παράγετε PMK, πληκτρολογήστε

pyrit benchmark

ή

pyrit benchmark_long

για ένα πιο αναλυτικό και πιο χρονοβόρο έλεγχο, με ακριβέστερα αποτελέσματα.
Οι πρώτες εκτελέσεις του Pyrit μετά την μεταγλώττισή του με τις εντολές list_cores και benchmark. Όπως φαίνεται τρέχει σε διπύρηνο σύστημα και μπορεί να υπολογίζει σχεδόν 1400 PMK/sec. Με άλλα λόγια, στο συγκεκριμένο σύστημα -ακόμα και χωρίς υποστήριξη GPU- το Pyrit είναι σχεδόν 8 φορές πιο γρήγορο από το coWPAtty.Μια τελευταία λεπτομέρεια είναι η εγκατάσταση του Scapy. Το Pyrit χρησιμοποιεί το Scapy την ώρα της εκτέλεσης για όσες λειτουργίες αφορούν μεταχείριση capture file (όπως αυτά που εξάγει το airodump-ng). Στo terminal πληκτρολογήστε:

sudo apt-get install python-scapy

Εκτός από την υποστήριξη GPU, το Pyrit είναι πλέον πλήρως λειτουργικό. Αν δεν έχετε κατάλληλη κάρτα γραφικών ή αν –για οποιοδήποτε λόγο- θέλετε να χρησιμοποιήσετε μόνο τη CPU, μπορείτε να προσπεράσετε την επόμενη παράγραφο.

Εγκατάσταση πρόσθετου υποστήριξης GPU

Η διαδικασία αυτή έχει νόημα μόνο αν ο υπολογιστής σας είναι εξοπλισμένος με επεξεργαστή γραφικών nVIDIA που υποστηρίζει την τεχνολογία CUDA (δείτε μια λίστα εδώ) ή ATI που υποστηρίζει την τεχνολογία ATI Stream (δείτε μια λίστα εδώ). Αλλά για κάθε τέτοια GPU που αξιοποιεί το Pyrit, πρέπει να σκλαβώνει και ένα πυρήνα της CPU. Αυτό σημαίνει ότι η υποστήριξη GPU προσθέτει αλλά και αφαιρεί από τις επιδόσεις και ενώ στις περισσότερες περιπτώσεις αυτό είναι ασήμαντο αφού η GPU είναι πολλές φορές ταχύτερη στον υπολογισμό PMK, υπάρχει περίπτωση, αν η GPU σας είναι *αρκετά* χαμηλών προδιαγραφών, εγκαθιστώντας το πρόσθετο να χάσετε τελικά σε επιδόσεις. Με τόσες διαφορετικές CPU και GPU δεν υπάρχει γενικός κανόνας για να το προβλέψετε αυτό από πριν, οπότε ελέγξτε την ταχύτητα πριν και μετά το πρόσθετο και αποφασίστε.
Για να αξιοποιήσει το Pyrit την/τις διαθέσιμες GPU του συστήματός σας, υπάρχουν τρία διαθέσιμα πρόσθετα που μπορούν να συνοδέψουν το βασικό πρόγραμμα:

  • To πρόσθετο cpyrit_cuda για κάρτες γραφικών της nVIDIA που υποστηρίζουν την τεχνολογία CUDA.
  • Το πρόσθετο cpyrit_calpp για κάρτες γραφικών της ATI που υποστηρίζουν την τεχνολογία ATI Stream (AMD CAL).
  • Το πρόσθετο cpyrit_opencl για κάρτες γραφικών που υποστηρίζουν το ανοικτό programming framework OpenCL. Το OpenCL, μεταξύ άλλων, υποστηρίζεται και από τις κάρτες γραφικών nVIDIA και ATI που υποστηρίζουν CUDA ή Stream αντίστοιχα.

Λόγω του τρίτου γενικού πρόσθετου, όποια κατάλληλη κάρτα και να έχετε (nVIDIA ή ATI), υπάρχουν δύο πρόσθετα που σας καλύπτουν. Ωστόσο, θα πρέπει να επιλέξετε ένα γιατί -προς το παρόν- το Pyrit δεν μπορεί να εξοπλιστεί με περισσότερα από ένα πρόσθετα. Το εξειδικευμένο για ATI πρόσθετο (cpyrit_calpp) είναι ακόμα σε πειραματικό στάδιο, οπότε ο γενικός κανόνας που λέει ότι το ειδικό είναι καλύτερο από το γενικό, σ’ αυτή την περίπτωση ισχύει μόνο αν έχετε κάρτα nVIDIA. Έτσι, προς το παρόν, το πιο κατάλληλο πρόσθετο για κάρτες nVIDIA είναι το cpyrit_cuda (λόγω επιδόσεων) και για κάρτες ATI το cpyrit_opencl (λόγω σταθερότητας).
Για να μπορέσετε να μεταγλωττίσετε -και τελικά να εγκαταστήσετε- το κατάλληλο πρόσθετο, πρέπει να προηγηθεί μια διαδικασία, η οποία συνοψίζεται στα εξής δύο βήματα:

  1. Εγκατάσταση του proprietary οδηγού της κάρτας γραφικών σας στο λειτουργικό σύστημα.
  2. Εγκατάσταση του αντίστοιχου GPGPU framework (CUDA Toolkit για nVIDIA ή ATI Stream SDK για ATI).

Από αυτό το παράθυρο του Ubuntu (System --> Administration --> Hardware Drivers) μπορείτε να εγκαταστήσετε με τον πιο εύκολο τρόπο τον proprietary driver για την κάρτα γραφικών σας. Στο στιγμιότυπο φαίνεται ήδη εγκατεστημένος ο driver της ATI.Για την εγκατάσταση του proprietary οδηγού -αν δεν τον έχετε ήδη εγκατεστημένο- μπορείτε να τον κατεβάσετε από το site του κατασκευαστή και να ακολουθήσετε τις οδηγίες που παρέχονται εκεί. Ωστόσο, στο Ubuntu υπάρχει μια πολύ πιο απλή διαδικασία, η οποία μάλιστα είναι κοινή για nVIDIA ή ATI. Από το μενού System –> Administration, επιλέξτε Hardware Drivers. Εκεί, οι ιδιοκτήτες ATI μπορείτε να επιλέξτε το ATI/AMD proprietary FGLRX graphics driver και οι ιδιοκτήτες nVIDIA το NVIDIA accelerated graphics driver (version current). Στη συνέχεια, κάντε κλικ στο κουμπί Activate και, αφού εισάγετε τον κωδικό σας, περιμένετε μέχρι το σύστημα να κατεβάσει και να εγκαταστήσει τον οδηγό. Για την ενεργοποίηση του οδηγού θα χρειαστεί επανεκκίνηση του συστήματος. Οι ιδιοκτήτες ATI θα χρειαστεί να κάνετε μια δεύτερη επανεκκίνηση, αφού πρώτα πληκτρολογήσετε σ’ ένα terminal

sudo aticonfig --initial –force

Ο οδηγός έχει εγκατασταθεί. Σειρά έχει η εγκατάσταση του κατάλληλου framework, οπότε ανάλογα με τον κατασκευαστή της κάρτας σας δείτε το αντίστοιχο πλαίσιο.

Παρατήρηση: Στις εντολές των δύο παρακάτω πλαισίων γίνεται η υπόθεση ότι κατεβάζετε το/τα αναγκαία αρχεία στον προκαθορισμένο φάκελο λήψεων του Ubuntu, δηλαδή τον υποφάκελο Downloads του φακέλου του χρήστη – διαφορετικά προσαρμόστε τις εντολές ανάλογα. Επίσης, αν κατεβάσετε την 64bit έκδοση, όπου στις εντολές αναγράφεται 32 αντικαταστήστε το με 64.

Η σελίδα λήψης του nVIDIA CUDA Toolkit (πίσω) και του ATI Stream SDK (μπροστά) για Linux. Προσέξτε να κατεβάσετε το σωστό πακέτο (για παράδειγμα μην μπερδέψετε το CUDA Toolkit με το CUDA SDK)

nVIDIA

Επισκεφτείτε τη σχετική σελίδα και κατεβάστε το CUDA Toolkit for Ubuntu Linux (μην ανησυχείτε που γράφει 9.04 ενώ εσείς έχετε την 10.04) για την αρχιτεκτονική του λειτουργικού σας (32 ή 64 bit). Στη συνέχεια, σ’ ένα τερματικό, δώστε

cd ~/Downloads
chmod +x cudatoolkit_3.0_linux_32_ubuntu9.04.run

για να πλοηγηθείτε στον κατάλογο που κατεβάσατε το αρχείο και να το δηλώσετε ως εκτελέσιμο. Τώρα εκκινήστε την εγκατάσταση με:

sudo ./cudatoolkit_3.0_linux_32_ubuntu9.04.run

Στην πορεία θα ερωτηθείτε για τον κατάλογο όπου θέλετε να εγκαταστήσετε το Toolkit. Πατήστε απλά Enter για να δεχτείτε την default ρύθμιση (/usr/local/cuda). Όταν η εγκατάσταση ολοκληρωθεί, μένει να προσθέσετε κάποιες νέες διαδρομές στις μεταβλητές περιβάλλοντος του συστήματος. Πληκτρολογήστε

export PATH=/usr/local/cuda/bin:$PATH
export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

εκτός αν κατεβάσατε την 64-bit έκδοση, οπότε αντικαταστήστε την τελευταία γραμμή με:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

ATI

Επισκεφτείτε τη σχετική σελίδα και κατεβάστε την έκδοση Linux του ATI Stream SDK για την αρχιτεκτονική του λειτουργικού σας (32 ή 64 bit). Από την ίδια σελίδα κατεβάστε το αρχείο icd-registration.tgz. Στη συνέχεια, σ’ ένα τερματικό, δώστε:

cd /
sudo tar xvzf ~/Downloads/icd-registration.tgz
cd /opt
sudo tar xvzf ~/Downloads/ati-stream-sdk-v2.1-lnx32.tgz
sudo mv ati-stream-sdk-v2.1-lnx32 ati-stream-sdk

Μ’ αυτά η εγκατάσταση ολοκληρώνεται και μένει να προσθέσετε κάποιες νέες διαδρομές στις μεταβλητές περιβάλλοντος του συστήματος. Πληκτρολογήστε

export ATISTREAMSDKROOT=/opt/ati-stream-sdk
export ATISTREAMSDKSAMPLESROOT=/opt/ati-stream-skd
export LD_LIBRARY_PATH=/opt/ati-stream-sdk/lib/x86

εκτός αν κατεβάσατε την 64-bit έκδοση, οπότε αντικαταστήστε την τελευταία γραμμή με

export LD_LIBRARY_PATH=/opt/ati-stream-sdk/lib/x86_64

Προκειμένου να εκτελούνται κάθε φορά που ξεκινά το bash, οι τρεις εντολές export (στην προκειμένη περίπτωση για ATI και 32bit αρχιτεκτονική συστήματος) πρέπει να προστεθούν στο τέλος του αρχείου ρυθμίσεων.Είτε έχετε κάρτα NVIDIA, είτε ATI, οι τρεις μεταβλητές περιβάλλοντος που ορίζετε με την εντολή export στο τέλος της διαδικασίας πρέπει να είναι ενεργές σε κάθε εκτέλεση του Pyrit. Ένας τρόπος για να το πετύχετε αυτό είναι να ρυθμίσετε το bash να εκτελεί τις τρεις εντολές export κάθε φορά που ξεκινά (οπότε και κάθε φορά που ενεργοποιείται η κονσόλα). Έτσι, προσθέστε τις τρεις export που αφορούν την κάρτα σας (ATI/nVIDIA) και την αρχιτεκτονική σας (32/64 bit) στο κάτω μέρος του ~/.bashrc ή του /etc/bash.bashrc, ανάλογα με το αν θέλετε να ισχύουν μόνο για εσάς ή για κάθε χρήστη του συστήματος αντίστοιχα. Ένας εύκολος τρόπος να γίνει αυτό είναι με το nano:

nano ~/.bashrc

ή

sudo nano /etc/bash.bashrc

αντίστοιχα. Αφού προσθέσετε τις γραμμές, αποθηκεύστε τις αλλαγές με Ctrl-X. Το framework έχει εγκατασταθεί και είναι έτοιμο να χρησιμοποιηθεί απ’ το Pyrit.
Μένει η μεταγλώττιση και η εγκατάσταση του πρόσθετου, που -αν όλα έγιναν σωστά- είναι μια απλή -πλέον- διαδικασία. Μάλιστα, δεν χρειάζεται να κατεβάσετε κάτι επιπλέον, αφού έχετε ήδη κατεβάσει όλα τα διαθέσιμα πρόσθετα όταν κάνατε checkout το svn trunk νωρίτερα. Επιλέξτε το κατάλληλο πρόσθετο με

cd ~/pyrit_svn/cpyrit_cuda

για nVIDIA ή

cd ~/pyrit_svn/cpyrit_opencl

για ATI. Τώρα, όπως κάνατε και για το βασικό πρόγραμμα, παραγγείλτε τη μεταγλώττιση με

python setup.py build

και εφόσον ολοκληρωθεί χωρίς σφάλματα, εγκαταστήστε το πρόσθετο πληκτρολογώντας

sudo python setup.py install

Ελέγξτε ότι το Pyrit αναγνωρίζει πλέον την GPU σας εκτελώντας πάλι

pyrit list_cores

Οι εντολές list_cores και benchmark ξανά, αυτή τη φορά μετά τη μεταγλώττιση του πρόσθετου υποστήριξης GPU (cpyrit_opencl για ATI). Όπως μπορείτε να δείτε, η μια μονάδα υπολογισμού που αντιστοιχούσε στον ένα από τους δύο πυρήνες της CPU, τώρα αντικαταστάθηκε από μια πολύ ταχύτερη μονάδα που αντιστοιχεί στην GPU.Πλέον στις διαθέσιμες μονάδες υπολογισμού θα πρέπει να εμφανίζεται και η GPU σας. Επίσης, όπως αναφέρθηκε νωρίτερα, από τη λίστα θα πρέπει να λείπει ένας πυρήνας από τη CPU σας (οπότε αν έχετε μονοπύρηνη CPU θα υπάρχει μόνο η GPU). Όπως κάνατε και για το βασικό πρόγραμμα, πληκτρολογήστε ξανά

pyrit benchmark

για να δείτε τη διαφορά στις επιδόσεις και να γιορτάσετε το τέλος της εγκατάστασης! :)

Ο μαζικός υπολογισμός PMK μπορεί να ανεβάσει την θερμοκρασία της GPU σας σε επικίνδυνα επίπεδα. Μπορείτε να ελέγχετε την θερμοκρασία την nVIDIA GPU (πάνω) σας από την καρτέλα Thermal Settings στο εργαλείο NVIDIA X Server Settings (System --> Administration). Αν έχετε GPU της ATI (κάτω), μπορείτε να ελέγξετε την θερμοκρασία από το terminal, πληκτρολογώντας aticonfig –odgt.

Χρήση

Το πρώτο βήμα της διαδικασίας επίθεσης στο WPA/WPA2 παραμένει φυσικά η σύλληψη των frame που περιέχουν το 4-way handshake του authentication. Η δουλειά γίνεται με τη σουίτα εργαλείων Aircrack-ng και στο πρώτο μέρος του αφιερώματος είδατε αναλυτικά πώς μπορείτε να καταλήξετε με ένα αρχείο .cap που να περιέχει το handshake. Έτσι, στη συνέχεια θα υποτεθεί ότι έχετε ήδη αυτό το αρχείο (στα παραδείγματα θα αναφέρεται ως capture.cap).
Η γενική σύνταξη του Pyrit είναι:

pyrit [παράμετροι] εντολή

Ήδη, λόγου χάρη, είδατε τις εντολές list_cores, benchmark και benchmark_long που, αν και δεν δέχονται παραμέτρους, ακολουθούν αυτή τη σύνταξη. Ώρα για μερικές πιο ουσιαστικές.

Μεταχείριση capture file

Η εντολή analyze ελέγχει ένα capture file για να δει αν περιέχει ένα ή περισσότερα handshake. Συντάσσεται με την παράμετρο –r που υποδεικνύει το capture file. Για παράδειγμα, πληκτρολογήστε:

pyrit –r capture.cap analyze

Η εντολή analyze. Όπως φαίνεται στην εικόνα σύμφωνα με την ανάλυση του Pyrit στο συγκεκριμένο capture file, κατά τη διάρκεια σύλληψης πακέτων υπήρχαν δύο client συνδεδεμένοι στο AP, αλλά μόνο ο ένας ολοκλήρωσε διαδικασία authentication εκείνο το διάστημα ώστε να χαρίσει το πολύτιμο handshake. Το Pyrit θα αναλύσει το αρχείο και θα σας αναφέρει τον αριθμό των πακέτων που περιέχει, τα AP και τα SSID τους, τους ενεργούς (την στιγμή του capture) client και αν υπάρχουν τα πολύτιμα handshake αυτών με τα AP. Αν δεν εντοπίσει κανένα handshake θα σας επιστρέψει το μήνυμα No valid EAOPL-handshake και αυτό σημαίνει ότι το συγκεκριμένο capture file είναι άχρηστο όσον αφορά την εύρεση του passphrase.
Απ’ την άλλη, το Aircrack-ng μπορεί να αφέθηκε να συλλαμβάνει πακέτα για ώρες ή και μέρες και το αρχείο capture να περιέχει ένα σωρό handshake από διαφορετικούς client, μαζί με *πολλά* άλλα άχρηστα πακέτα. Δεν είναι πρακτικό να δουλεύετε με ένα τόσο μεγάλο capture file και γι’ αυτό μπορείτε να χρησιμοποιήσετε την εντολή strip. Η strip συντάσσεται με τις παραμέτρους –r και –ο που υποδεικνύουν το ογκώδες capture file και το νέο capture file που θα δημιουργηθεί περιέχοντας μόνο τα απαραίτητα. Για παράδειγμα, πληκτρολογήστε:

pyrit –r capture.cap –o handshakes.cap strip

Το Pyrit θα εξάγει μόνο τα ωφέλιμα πακέτα του capture.cap και θα τα αποθηκεύσει στο handshakes.cap, το οποίο μπορείτε πλέον να χρησιμοποιείτε στη θέση του πρώτου. Μάλιστα, το Pyrit παρέχει και την εντολή stripLive, η οποία συντάσσεται ακριβώς όπως και η strip και μπορεί να κάνει ότι και εκείνη σε capture files τα οποία δεν έχουν κλείσει ακόμα (το airodump-ng ακόμα συλλαμβάνει frame).

Αντικατάσταση του coWPAtty

Αφού μάθατε να μεταχειρίζεστε τα capture file, ήρθε η ώρα να επιτεθείτε και σε κάποιο. Μια μέθοδος είναι να χρησιμοποιήσετε το Pyrit όπως χρησιμοποιήσατε το coWPAtty στο πρώτο μέρος του αφιερώματος. Το Pyrit μπορεί να αναγνωρίσει πίνακες precomputed PMK που είναι φτιαγμένοι για το coWPAtty. Έτσι, λόγου χάρη, αν το capture file σας αφορά ένα ασύρματο δίκτυο με όνομα linksys και έχετε στη διάθεσή σας το linksys.wpa, ένα έτοιμο πίνακα με precomputed PMK για το συγκεκριμένο SSID (στο πρώτο μέρος του αφιερώματος είδατε δύο πολύ καλές πηγές όπου μπορείτε να προμηθευτείτε τέτοιους πίνακες), μπορείτε να εκκινήσετε την επίθεση με την εντολή attack_cowpatty που συντάσσεται ως εξής:

pyrit –r handshakes.cap –i linksys.wpa attack_cowpatty

Επίθεση σε capture file με χρήση έτοιμου πίνακα precomputed PMK, όπως κάνει το coWPAtty. Όταν το Pyrit επιτίθεται με ήδη υπολογισμένα PMK δεν κάνει χρήση της GPU ακόμα και αν έχει εγκατασταθεί το ανάλογο πρόσθετο. Όμως, ακόμα κι έτσι, στο υπολογιστή της δοκιμής αυτή η διαδικασία τελείωσε σε 12 φορές λιγότερο χρόνο απ’ ότι με το coWPAtty.Αν δεν έχετε στη διάθεσή σας πίνακα με precomputed PMK μπορείτε να δώσετε στο Pyrit ένα απλό dictionary. Αυτό γίνεται με την εντολή attack_passthrough που συντάσσεται όμοια, μόνο που τώρα η παράμετρος –i υποδεικνύει το dictionary και όχι τον πίνακα:

pyrit –r handshakes.cap –i dict.txt attack_passthrough

Φυσικά, η attack_passthrough θα είναι *πολύ* πιο αργή από την attack_cowpatty, αφού θα πρέπει να υπολογίζει τα PMK από τις λέξεις του dictionary on the fly. Ωστόσο, με μια καλή GPU, η επίθεση παραμένει πρακτική και ρεαλιστική σε αντίθεση με το απελπιστικά αργό coWPAtty. Όπως και να ‘χει, σε αμφότερες τις περιπτώσεις, αν το passphrase του δικτύου περιέχεται στο dict.txt ή στο dictionary που χρησιμοποιήθηκε για την παραγωγή του linksys.wpa, το Pyrit θα το εμφανίσει τελικά στην οθόνη.
Όσον αφορά το genPMK, το Pyrit μπορεί να το αντικαταστήσει και αυτό, δημιουργώντας πίνακες precomputed PMK που είναι συμβατοί με το coWPAtty. Η ανάλογη εντολή είναι η passthrough και ένα παράδειγμα σύνταξης είναι το

pyrit –i dict.txt –e rare_name –o rare_name.wpa passthrough

όπου dict.txt το dictionary-πηγή, rare_name το SSID για το οποίο θα δημιουργηθεί ο πίνακας precomputed PMK και rare_name.wpa το αρχείο όπου θα αποθηκευτεί αυτός.

Δουλεύοντας με βάση δεδομένων

Βέβαια, όπως αναφέρθηκε και στην αρχή, ένα από τα πιο χρήσιμα χαρακτηριστικά του Pyrit είναι η χρήση βάσης δεδομένων και οι τρεις εντολές που μόλις περιγράφηκαν υπάρχουν μόνο για λόγους συμβατότητας με το σύστημα coWPAtty/genPMK. Το πρώτο βήμα για να δημιουργήσετε τη δική σας πρακτική βάση δεδομένων είναι την γεμίσετε με πιθανά passphrase. Αυτό γίνεται με την εντολή import_passwords. Για παράδειγμα, αν dict.txt είναι ένα dictionary, πληκτρολογήστε

pyrit –i dict.txt import_passwords

για να εισάγετε όλα τα password που περιέχονται σ’ αυτό στη βάση δεδομένων του Pyrit. Οπτική αναπαράσταση μιας πολύ μικρής βάσης Pyrit με μόλις 4 password. Οι δύο πίνακες αριστερά συμπληρώνονται από το χρήστη με τις εντολές import_passwords και create_essid. Ο πίνακας δεξιά συμπληρώνεται από το Pyrit όταν ο χρήστης δίνει την εντολή batch. Παρατηρήστε ότι για τα SSID ‘linksys’ και ‘NETGEAR’ η βάση έχει 100% πληρότητα. Για το SSID ‘DLINK’ η πληρότητα είναι στο 75% αφού δεν έχει υπολογιστεί το PMK για το password ‘deltaHacker’.Επαναλάβετε για κάθε dictionary που έχετε, ώστε να δημιουργήσετε μια όσο το δυνατόν πιο πλούσια βάση. Μάλιστα, το Pyrit σας διευκολύνει αγνοώντας αυτόματα τα password των dictionary που δεν μπορούν να αποτελούν WPA/WPA2 passphrase (π.χ. αυτά που είναι κάτω από 8 χαρακτήρες) ενώ ταυτόχρονα ελέγχει για κάθε password αν υπάρχει ήδη μέσα στη βάση. Αυτό, βέβαια, καθυστερεί αρκετά την διαδικασία. Αν είστε σίγουροι ότι το dictionary που θέλετε να εισάγετε δεν περιέχει διπλές καταχωρήσεις και ότι κανένα από τα password που περιέχει δεν υπάρχει ήδη στη βάση, τότε μπορείτε να αντικαταστήσετε την εντολή import_passwords με την import_unique_passwords, η οποία θα διεκπεραιώσει την εισαγωγή πολύ πιο γρήγορα.
Καταχώρηση δύο μεγάλων dictionary στη βάση με την import_passwords. Παρατηρήστε ότι ενώ το σύνολο των password των δύο dictionary είναι σχεδόν 61 εκατομμύρια, τελικά η εντολή eval δείχνει ότι καταχωρήθηκαν μόνο 49 εκατομμύρια. Αυτό σημαίνει ότι τα dictionary πιθανόν περιείχαν πολλές διπλές καταχωρήσεις ή είχαν κοινά password μεταξύ τους ή πολλά password δεν είχαν νόημα ως WPA passphrase. Όπως και να ‘χει, το Pyrit έκανε αυτόματα το ξεσκαρτάρισμα.Αφού τελειώσετε, πληκτρολογήστε

pyrit eval

για να επιβεβαιώσετε την καταχώρηση των password. Η εντολή eval σας ενημερώνει για την κατάσταση της βάσης σας, οπότε σε αυτό το σημείο θα σας εμφανίσει τον αριθμό των password που εισήχθησαν επιτυχώς στη βάση σας.
Τώρα πρέπει να καταχωρήσετε στη βάση και τα ονόματα των δικτύων (SSID) στα οποία θέλετε να επιτεθείτε και για τα οποία –συνεπώς- θέλετε να έχετε ήδη υπολογισμένα τα PMK που αντιστοιχούν στα καταχωρημένα password. Αυτό μπορεί να γίνει με την εντολή create_essid. Έτσι, λόγου χάρη, για να καταχωρήσετε το όνομα δικτύου dHnet, αρκεί να πληκτρολογήσετε:

pyrit –e dHnet create_essid

Καταχώρηση στη βάση δύο SSID με την εντολή create_essid και επαλήθευση με μια eval. Ακόμα δεν ζητήσατε τον υπολογισμό PMK, οπότε –και για τα δύο- η πληρότητα είναι στο 0%.Αφού εισάγετε όσα ονόματα δικτύων σας ενδιαφέρουν, μπορείτε να επιβεβαιώσετε την καταχώρησή τους -όπως κάνατε και για τα password- με μια εντολή eval. Τώρα η eval, εκτός από τον συνολικό αριθμό password θα σας εμφανίσει και τα καταχωρημένα SSID. Επιπλέον, δεξιά του καθενός θα εμφανίσει τον αριθμό και το ποσοστό (πληρότητα) των password της βάσης για τα οποία έχουν υπολογιστεί ήδη τα PMK για το συγκεκριμένο SSID. Φυσικά, εσείς ακόμα δεν παραγγείλατε υπολογισμό PMK, οπότε όλες οι ενδείξεις πληρότητας θα είναι στο 0%. Η παραγγελία αυτή γίνεται με την εντολή batch, οπότε πληκτρολογήστε:

pyrit batch

Υπολογισμός και καταχώρηση στη βάση των PMK που αντιστοιχούν σε όλα τα καταχωρημένα password για όλα τα καταχωρημένα SSID. Αυτό κάνει η εντολή batch, γεγονός που επιβεβαιώνεται από την eval που ακολουθεί και αναφέρει 100% πληρότητα. Η batch στο στιγμιότυπο διήρκησε 70 λεπτά της ώρας, αλλά άξιζε τον κόπο γιατί τώρα μπορούμε να επιτεθούμε στα δύο δίκτυα της περιοχής (με τα σπάνια ονόματα Tania και rouff, για τα οποία δεν υπάρχουν έτοιμοι πίνακες) με 50 εκ. password και να ολοκληρώσουμε κάθε επίθεση σε σχεδόν μισό λεπτό.Με αυτό θα συμπληρωθούν όλα τα κενά της βάσης σας, δηλαδή θα υπολογιστούν τα PMK για όλους τους πιθανούς συνδυασμούς καταχωρημένων password και SSID. Δηλαδή, ουσιαστικά, θα δημιουργηθούν πίνακες precomputed PMK με πηγή όλα τα καταχωρημένα password της βάσης και για όλα τα καταχωρημένα ονόματα δικτύων. Και φυσικά, και αυτοί οι πίνακες θα καταχωρηθούν στην βάση. Όπως καταλαβαίνετε, αυτή είναι η διαδικασία που χρειάζεται την περισσότερη υπολογιστική ισχύ και διαρκεί τον περισσότερο χρόνο. Αν θέλετε να υπολογιστούν τα PMK μόνο για ένα συγκεκριμένο SSID, μπορείτε να χρησιμοποιήσετε την παράμετρο –e για να το δηλώσετε. Για παράδειγμα, η εντολή

pyrit –e dHnet batch

θα έχει ως αποτέλεσμα να υπολογιστούν τα PMK μόνο για δίκτυα με όνομα dHnet (μάλιστα, αν το συγκεκριμένο SSID δεν είναι ήδη καταχωρημένο στη βάση, θα καταχωρηθεί αυτόματα). Με αυτόν τον τρόπο μπορείτε να δώσετε προτεραιότητα σε δίκτυα που είναι πιο σημαντικά. Αν αντίθετα υπάρχουν καταχωρημένα SSID που δεν χρησιμοποιείτε και θέλετε να διαγράψετε, μπορείτε να το κάνετε με την εντολή delete_essid που συντάσσεται όπως και η create_essid. Για παράδειγμα, η εντολή

pyrit –e TXnet delete_essid

θα έχει ως αποτέλεσμα να διαγραφεί το dHnet από την βάση, μαζί με όλα τα ήδη υπολογισμένα PMK που αντιστοιχούν στο συγκεκριμένο SSID.
Η βάση δεδομένων του Pyrit αποθηκεύεται σε ειδικό φορμά (μπορείτε να βρείτε τα σχετικά αρχεία στο ~/.pyrit/blobspace), γεγονός που δεν βοηθά στην περίπτωση που θέλετε να αξιοποιήσετε τα δεδομένα σε κάποια άλλη εφαρμογή. Γι’ αυτό υπάρχουν οι εντολές export_passwords και export_cowpatty. Η πρώτη δημιουργεί ένα dictionary (text file) με όλα τα καταχωρημένα στη βάση password. Για παράδειγμα:

pyrit –o full_wpa_dictionary.txt export_passwords

Η δεύτερη εξάγει από τη βάση τα ήδη υπολογισμένα PMK για ένα συγκεκριμένο SSID σε ένα coWPAtty συμβατό πίνακα. Ένα παράδειγμα σύνταξης για το SSID dHnet είναι το:

pyrit –o dHnet.wpa –e dHnet export_cowpatty

Όλα αυτά μοιάζουν περίπλοκα στην αρχή, αλλά τελικά η χρήση βάσης δεδομένων απ’ το Pyrit προσφέρει ευελιξία. Ανά πάσα στιγμή μπορείτε να ελέγχετε σε τι κατάσταση βρίσκεται με την εντολή eval, να καταχωρείτε νέα password και νέα SSID και, στο τέλος, με μια εντολή batch, να συμπληρώνετε τη βάση υπολογίζοντας *μόνο* τα νέα PMK, χωρίς να χρειάζεται να υπολογίζετε ολόκληρους πίνακες από την αρχή. Επιπλέον, μπορείτε να εκκινήσετε την επίθεση σ’ ένα capture file ανεξάρτητα από την πληρότητα της βάση σας. Αυτό γίνεται με την εντολή attack_batch. Για παράδειγμα, η εντολή

pyrit –r handshakes.cap attack_batch

θα επιτεθεί στο δίκτυο του οποίου τα πακέτα έχουν συλληφθεί στο handshakes.cap *όπως και να ‘χει*. Πρώτα θα επιτεθεί με όσα ήδη υπολογισμένα PMK υπάρχουν στη βάση για το συγκεκριμένο SSID. Αν δεν υπάρχουν ή αν δεν έχουν υπολογιστεί τα PMK για όλα τα καταχωρημένα password (πληρότητα < 100%), θα αρχίσει να τα υπολογίζει on-the-fly καταχωρώντας τα ταυτόχρονα και στη βάση. Αυτό θα γίνει ακόμα και αν το SSID που θα βρει στο handshakes.cap δεν υπάρχει καν καταχωρημένο στη βάση (θα το καταχωρήσει αυτόματα και θα συνεχίσει). Έτσι, αν το ζητούμενο WPA/WPA2 passphrase υπάρχει στα καταχωρημένα password, η attack_batch μπορεί να αργήσει λίγο, αλλά θα το επιστρέψει οπωσδήποτε.
Επιτυχής επίθεση με χρήση της βάσης. Στο παράδειγμα χρησιμοποιείται η attack_batch αλλά η attack_db θα είχε ακριβώς το ίδιο αποτέλεσμα αφού το passphrase βρέθηκε από τα ήδη υπολογισμένα PMK.Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την εντολή attack_db. Η attack_db συντάσσεται ακριβώς όπως και η attack_batch αλλά επιτίθεται χρησιμοποιώντας μόνο τα ήδη υπολογισμένα PMK που υπάρχουν στη βάση. Αυτό σημαίνει ότι, αν η πληρότητα στο συγκεκριμένο SSID είναι 100%, οι δύο εντολές θα συμπεριφερθούν ακριβώς το ίδιο. Διαφορετικά, αν η πληρότητα είναι μικρότερη, η attack_db θα τελειώσει μεν πιο γρήγορα αλλά μπορεί να μην καταφέρει να βρει το passphrase -ακόμα και αν αυτό υπάρχει στη βάση- επειδή δεν έχει υπολογιστεί το PMK του. Η επιλογή είναι δική σας.

Ισχύς εν τη ενώσει

Όπως αναφέρθηκε και στην αρχή, ένα από τα πιο δυνατά χαρακτηριστικά του Pyrit είναι οι δυνατότητες δικτύωσης.
Πρώτα απ’ όλα, το Pyrit μπορεί από τον υπολογιστή σας να συνδεθεί με Pyrit που τρέχουν σε άλλους υπολογιστές, οι οποίοι θα του δανείσουν την υπολογιστική τους ισχύ για να δημιουργηθεί ένα πανίσχυρο WPA cracking cluster. Για να το κάνετε αυτό, πρώτα απ’ όλα φροντίστε ώστε η επικοινωνία με τη θύρα 17935 στους υπολογιστές-σκλάβους να είναι ελεύθερη (να μην εμποδίζεται από κάποιο firewall, να υπάρχει το κατάλληλο port forwarding αν πρόκειται για υπολογιστές εκτός LAN και πίσω από NAT, κ.ο.κ.). Τότε, εκτελέστε σε αυτούς το Pyrit με την εντολή serve, δηλ:

pyrit serve

Το Pyrit θα σκλαβώσει την κονσόλα όπου εκτελέστηκε αναμένοντας σύνδεση από την κύριο υπολογιστή που διαχειρίζεται το cluster. Στον κύριο υπολογιστή, θα πρέπει να ανοίξετε το αρχείο ρυθμίσεων του Pyrit για επεξεργασία. Ένας τρόπος είναι να πληκτρολογήστε:

nano ~/.pyrit/config

Βρείτε την γραμμή

rpc_server = false

και αντικαταστήστε το false με true. Επίσης, βρείτε τη γραμμή

rpc_knownclients =

και μετά το = προσθέστε τις διευθύνσεις (IP ή hostname) των υπολογιστών σκλάβων, χωρισμένες με χαρακτήρες space. Αποθηκεύστε το αρχείο ρυθμίσεων και βγείτε από το nano με Ctrl-X. Πληκτρολογήστε:

pyrit list_cores

Υπόδειγμα τετριμμένου cluster δύο μόνο υπολογιστών. Πίσω, το Pyrit εκτελείται στον υπολογιστή-σκλάβο με την εντολή serve. Στο προσκήνιο, το Pyrit στον κύριο υπολογιστή αναγνωρίζει τον υπολογιστή-σκλάβο ως ένα τρίτο ψευδοπυρήνα με όνομα Network-Clients. Η εντολή benchmark αναφέρει ότι το αδύναμο laptop που ανέλαβε τον ρόλο του σκλάβου στο παράδειγμα μπορεί να συνεισφέρει στους υπολογισμούς με μόλις 270 PMK/sec επιπλέον.Πλέον, εκτός από τους πυρήνες της CPU ή/και την GPU, θα εμφανίζεται μια νέα μονάδα υπολογισμού με όνομα Network-Clients. Ο εικονικός αυτός πυρήνας αντιπροσωπεύει πλέον όλους τους υπολογιστές σκλάβους. Μπορείτε να χρησιμοποιήσετε το Pyrit κανονικά, όπως θα κάνατε και χωρίς τους επιπλέον υπολογιστές. Οι υπολογιστές του cluster θα συνδράμουν στους υπολογισμούς αυτόματα χωρίς κάποια ειδική παράμετρο. Για να δοκιμάσετε το cluster, ζητήστε λόγου χάρη μια:

pyrit benchmark

Αν έχετε πρόσβαση στους υπολογιστές-σκλάβους θα δείτε το Pyrit να σας ενημερώνει για την σύνδεση του κύριου υπολογιστή και την ταχύτητα υπολογισμού. Στον δε κεντρικό υπολογιστή μετά το πέρας του benchmark θα δείτε την συνολική ταχύτητα που μπορεί να επιτύχει το cluster ως ταχύτητα του ψευδο-πυρήνα Network-Clients.
Το δεύτερο δικτυακό χαρακτηριστικό του Pyrit είναι ότι μπορεί να δανείσει την βάση δεδομένων του σε instances του Pyrit που τρέχουν σε άλλους υπολογιστές. Αυτό μπορεί να γίνει εκτελώντας το Pyrit στον υπολογιστή-server με την εντολή relay, δηλ:

pyrit relay

Όπως και με τη serve, φροντίστε πρώτα ώστε η επικοινωνία -αυτή τη φορά- στη θύρα 17934 να μην εμποδίζεται. Τότε, στον υπολογιστή-client μπορείτε να δουλέψετε με την βάση δεδομένων του server αν σε κάθε εντολή προσθέτετε την παράμετρο –u ακολουθούμενη απ’ το http://διεύθυνση_του_server:17934. Για παράδειγμα, αν η διεύθυνση του server είναι 192.168.10.10 και θέλετε να δείτε τι περιέχει η βάση του, πληκτρολογήστε στον client:

pyrit –u http://192.168.10.10:17934 eval

Ή αν θέλετε να επιτεθείτε στο τοπικό capture file handshakes.cap με τα ήδη υπολογισμένα PMK που υπάρχουν στη βάση του server δώστε:

pyrit –r handshakes.cap –u http://192.168.10.10:17934 attack_db

Δανεισμός της βάσης σε απομακρυσμένο υπολογιστή. Πίσω, ο υπολογιστής με την μεγάλη βάση τρέχει το Pyrit με την εντολή relay. Μπροστά, ένας άλλος υπολογιστής με Pyrit, ο οποίος δεν διαθέτει ακόμα βάση όπως προδίδει η πρώτη εντολή eval, αποκτά πρόσβαση στην βάση του πρώτου χρησιμοποιώντας την παράμετρο –u.Σημειώστε, ότι με την εντολή relay όλοι οι υπολογισμοί γίνονται κανονικά στον client και ο server απλά δανείζει την βάση του. Αν θέλετε να έχετε ένα εντελώς dummy Pyrit client, ο οποίος να δανείζεται και την υπολογιστική ισχύ και την βάση δεδομένων από ένα άλλο μηχάνημα (π.χ. σε ένα από εκείνα τα πρώτα netbook που έχουν ιδιαίτερα αδύναμο επεξεργαστή και μόλις 8gb αποθηκευτικό χώρο) μπορείτε να χρησιμοποιήσετε και τις δύο δυνατότητες δικτύωσης του Pyrit ταυτόχρονα. Αυτό σημαίνει ότι στον server το Pyrit θα πρέπει να εκτελεστεί δύο φορές, μια με την εντολή serve και μια με την εντολή relay.

Για το κλείσιμο, food for thought

Φανταστείτε μια κεντρική, δημόσια, online υπηρεσία WPA cracking, όπου οι χρήστες της δανείζουν την υπολογιστική ισχύ των συστημάτων τους, δημιουργώντας ένα τεράστιο υπολογιστικό cluster. Στη συνέχεια ανεβάζουν τα dictionary και τα SSID που τους ενδιαφέρουν, από τα οποία, λόγω του μεγέθους του cluster, δημιουργούνται σχεδόν άμεσα τα αντίστοιχα PMK. Ως αντάλλαγμα για τον δανεισμό υπολογιστικής ισχύος, οι χρήστες απολαμβάνουν online πρόσβαση στην κολοσσιαία βάση δεδομένων της υπηρεσίας, γεγονός που τους επιτρέπει να επιτίθενται σε οποιοδήποτε WPA/WPA2 δίκτυο με εξωφρενικές ταχύτητες και χωρίς ιδιαίτερο hardware. Φαντασία; Τρομακτικό; Κι όμως – με το Pyrit, η υλοποίηση μιας τέτοιας ιδέας είναι βόλτα στο πάρκο…

26 Responses to “Επίθεση για σπάσιμο του WPA/WPA2 (2ο μέρος)”

  1. DarkHacker | 05/12/2011 at 20:41

    poli kalo post :)

    • subZraw | 05/12/2011 at 21:29

      Συμφωνώ, αλλά μη μας γράφεις greeklish σ’ αυτό το site γιατί πολύ στενοχωριόμαστε. Αλήθεια το λέω.

  2. Dim77 | 05/12/2011 at 20:58

    Τέλειο

  3. KeyFr3ak | 12/01/2012 at 17:13

    Συγνώμη αλλά δεν είμαι σίγουρος αν κατάλαβα πρόκειται για Brute-Force??

    • praeto | 12/01/2012 at 18:22

      Πρόκειται ουσιαστικά για dictionary και όχι brute-force attack, αν και το ένα εμπεριέχει το άλλο.

  4. KeyFr3ak | 13/01/2012 at 14:58

    Δεν υπάρχει κάποιος τρόπος για να σπάσουμε ένα WPA/WPA2 key???

  5. KeyFr3ak | 13/01/2012 at 18:54

    Συγνώμη λάθος διατύπωση λόγο κεκτημένης ταχύτητας εννοούσα αν υπάρχει άλλος τρόπος να σπάσεις ένα WPA/WPA2 key, και κάτι ακόμα αν δεν υπάρχει στο dictionary δεν μπορεί να το σπάσει?

    • praeto | 13/01/2012 at 22:05

      Μέχρι στιγμής αυτή είναι η πιο αποδοτική μέθοδος (μιλάμε για την μέθοδο όπως περιγράφηκε στο πρώτο μέρος του αφιερώματος, όχι για συγκεκριμένες υλοποιήσεις).

      Όσον αφορά για την δεύτερη ερώτησή σου φίλε μου, σε παρακαλώ να μην με παρεξηγήσεις, αλλά δεν θα απαντήσω. Προσέγγισε την απάντηση με εις άτοπο απαγωγή – ξεκίνα με “έστω ότι τα dictionary attacks εντοπίζουν και passwords που δεν περιέχονται στο dictionary” και προχώρα.

  6. KeyFr3ak | 14/01/2012 at 00:17

    Δεν παρεξηγώ και ειδικά όταν κάποιος μου δίνει μία απάντηση με ειλικρίνεια ευχαριστώ για την απάντηση και αυτό που αναρωτήθηκα είναι αν το key ενός δικτύου δεν υπάρχει σε ένα συγκεκριμένο dictionary τότε δεν μπορεί να βρεθεί χρησιμοποιώντας το; ή θα το βρει και θα το προσθέσει στο dictionary για μελλοντική χρήση? Συγχωρέστε τις ερωτήσεις μου απλά είμαι στην αρχή ακόμα και προσπαθώ να βγάλω ένα συμπέρασμα.

    • praeto | 14/01/2012 at 00:31

      Όχι. Εφόσον δεν υπάρχει στο dictionary, το password δεν θα βρεθεί. Αυτή είναι ουσιαστικά η διαφορά από ένα dictionary attack με ένα brute force attack.

      Και κάτι άσχετο – προσπάθησε να χρησιμοποιείς το χαρακτηριστικό ιεραρχημένων σχολίων, όπως κάνω εγώ, για να βγάζει νόημα η συζήτησή μας και στους επόμενους που θα διαβάσουν αυτά τα σχόλια. Με λίγα λόγια, αν θες να απαντήσεις σε αυτό το σχόλιο, μην γράφεις ένα νέο ανεξάρτητο σχόλιο αλλά κάνε πρώτα κλικ στο σύνδεσμο “απάντηση” που βρίσκεται ακριβώς κάτω από το σχόλιο στο οποίο θες να απαντήσεις.

      • KeyFr3ak | 14/01/2012 at 00:52

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

  7. sijoune | 23/02/2012 at 01:49

    Μπορώ να εξάγω τη βάση δεδομένων μου (στο filesystem) σε SQL βάση?

    • praeto | 23/02/2012 at 10:22

      Όπως αναφέρεται στο άρθρο, το pyrit, με τη βοήθεια του SQLAlchemy, υποστηρίζει διάφορα DBMS, όπως SQLite, MySQL και PostgreSQL.

      Οπότε, ένας τρόπος είναι να εξάγεις τη βάση σου σε πίνακες τύπου coWPAtty και αφού σετάρεις το pyrit να χρησιμοποιεί το DBMS της επιλογής σου, να εισάγεις πάλι τα δεδομένα σου από τους πίνακες coWPAtty στη βάση.

  8. mtriantafyllos | 16/03/2013 at 01:12

    Εγώ πάντως που έκανα ότι λέτε εδώ μέσα και μετά μια φορά ακόμα ακολούθησα τις οδηγίες στο site του BackTrack δεν κατάφερα να το κάνω. Εγκατάσταση του GPU και πραγματικα τα έχω παίξει με αυτή την ιστορία. Χρησιμοποιώ μια ATI RADEON HD 5470 series και BackTrack 5 R3 64 bit.

    • mtriantafyllos | 20/04/2013 at 12:15

      Λοιπόν ζητώ συγνώμη, το κατάφερα τελικά αλλά η αύξηση των επιδόσεων στο pyrit δεν ήταν πολύ μεγάλη. Ενώ πριν πχ για ένα αρχείο 700.000 κωδικών χρειαζόμουν εννιάμιση λεπτά τώρα χρειάζομαι τρία και μισό. Δε θα έλεγα ότι είχα καμιά πολύ μεγάλη διαφορά αλλά κάτι είναι και αυτό. Χρησιμοποιώ μια ATI Radeon HD mobility series 5470 σε λαπτοπ ASUS A52J. Παρόλα αυτά ευχαριστώ πολύ. Καλή δουλειά.

      • subZraw | 21/04/2013 at 13:35

        Δεν έχω ασχοληθεί με το σπορ, ωστόσο εδώ μιλάμε για υπερδιπλασιασμό της ταχύτητας! Δεν είναι κι ευκαταφρόνητη η βελτίωση, αν το σκεφτείς λίγο…

        Επαναλαμβάνω βέβαια ότι γνώστης δεν είμαι, οπότε δεν γνωρίζω καν πόση πρέπει να είναι η βελτίωση :|

  9. mtriantafyllos | 22/04/2013 at 13:09

    Ναι βέβαια αλλά η ταχύτητα πήγε επί τρία όπως ανέφερες. Πολύ σωστά λοιπόν, αλλά να αναφέρω ότι κατά την διάρκεια των υπολογισμών “κολλάει” όλο το σύστημα και είναι φυσιολογικό διότι τραβάει εκτός από τους επεξεργαστές ΚΑΙ την κάρτα γραφικών. Επομένως δεν μπορείς (εγώ τουλάχιστον και φαντάζομαι και όλοι οι υπόλοιποι αντίστοιχοι χρήστες) να κάνεις κάποια άλλη δουλειά. Είναι τρομερά δύσκολο και αργό.Αυτά ενημερωτικά και ευχαριστώ και πάλι.

    • subZraw | 22/04/2013 at 15:39

      Καταλαβαίνω. Υπάρχει μήπως η δυνατότητα για τον ορισμό της προτεραιότητας εκτέλεσης; Αν, π.χ., τη θέσεις σε “low” ή κάτι παρόμοιο, τότε θα μπορείς να χρησιμοποιείς άνετα το PC…

      • mtriantafyllos | 22/04/2013 at 16:11

        Δεν το γνωρίζω αυτό.Θα το κοιτάξω και αν βρω κάτι θα ενημερώσω.

  10. mitsos123 | 22/04/2013 at 23:44

    Καλησπέρα , Η αλήθεια είναι ότι έχω παιδευτεί και εγώ αρκετά έτσι ώστε να εγκαταστήσω τον οδηγό της κάρτας γραφικών στο backtrack 5 r3 χωρίς όμως αποτέλεσμα. Χρησιμοποιώ nvidia Gefore 9300m gs
    φίλε mtriantafyllos ποιον οδηγό ακολούθησες?

    • mtriantafyllos | 23/04/2013 at 14:50

      Έκανα ότι ακριβώς βρήκα εδώ μέσα. Απλά για ATI και όχι NVidia. Συγκεκριμένα υπάρχει ένα λάθος στην εντολή sudo aticonfig –initial –force η οποία σωστά γράφεται ως εξής: sudo aticonfig –initial –force και επίσης (για ΑΤΙ πάντα) το ATI-STREAM-SDK έχει αλλάξει και έχει γίνει AMD-APP-SDK. Επομένως οι ακόλουθες τρεις εντολές export μετασχηματίζονται ως εξής:

      Λάθος:
      export ATISTREAMSDKROOT=/opt/ati-stream-sdk
      export ATISTREAMSDKSAMPLESROOT=/opt/ati-stream-skd
      export LD_LIBRARY_PATH=/opt/ati-stream-sdk/lib/x86_64

      Σωστό:
      export ATISTREAMSDKROOT=/opt/AMD-APP-SDK
      export ATISTREAMSDKSAMPLESROOT=/opt/AMD-APP-SDK
      export LD_LIBRARY_PATH=/opt/AMD-APP-SDK/lib/x86_64

      Φαντάζομαι ότι μάλλον δεν σε βοήθησα και πολύ μιας και εγώ ακολούθησα οδηγό για κάρτα ΑΤΙ, ενώ εσύ έχεις nvidia και δε γνωρίζω εκεί αν ισχύει κάτι ανάλογο σε αλλαγή, αλλά αυτά δυστυχώς μπορώ να σου πω.

      • mtriantafyllos | 23/04/2013 at 14:55

        Παρόλα αυτά μέσα στην επόμενη εβδομάδα θα φτιάξω το σταθερό μου PC που έχει κάρτα NVidia και θα το δοκιμάσω και εκεί για καλύτερες επιδόσεις φυσικά, και για να δοκιμάσω τις δυνατότητες δικτύωσης που το Pyrit προσφέρει. Μόλις και εάν το καταφέρω θα σου πω πάντως.

  11. h.n.y | 26/03/2014 at 13:45

    “Ο Αχιλλέας Τσιτρούλης (Brunel University, UK), ο Δημήτρης Λαμπούδης (ΠΑΜΑΚ, Θεσσαλονίκη) και Μανώλης Τσεκλεβές (Lancaster University, UK) χρησιμοποίησαν την μέθοδο του de-authentication και παρατήρησαν ότι αποτελεί μεγάλη αδυναμία στη δομή του 802.11.
    Οι ερευνητές δημιούργησαν έναν αλγόριθμο που πραγματοποιεί custom brute force attack για να βρει το password του WPA2 (όσο μεγαλύτερο το password, τόσο περισσότερη ώρα χρειάζεται) και βρήκαν ότι κατά τη διαδικασία του de-authentication (επανασύνδεση και εκ νέου διαμοιρασμός κλειδιού ασφαλείας στις συνδεμένες συσκευές) υπάρχει ένα κενό χρονικό διάστημα που μπορεί να εκμεταλλευτεί κάποιος hacker ή λογισμικό malware.
    Επίσης εντόπισαν τρόπους που η επίθεση μπορεί να γίνει ακόμα πιο εύκολα, γρήγορα και αποτελεσματικά. Δεν σταμάτησαν όμως εκεί.
    Όπως οι ίδιοι δήλωσαν, στόχος τους δεν είναι η παραβίαση του WiFi και το hacking, αλλά η βελτίωση αυτού έτσι ώστε να δημιουργηθεί ένα πρωτόκολλο απολύτως ασφαλές. Για το λόγο αυτό, στην δημοσίευση τους κάνουν λόγο και αναφορές για τρόπους που μπορεί να θωρακιστεί αποτελεσματικά το όλο σύστημα.
    Μέχρι να δούμε κάποιο νέο πρωτόκολλο ασφαλείας, καλό θα είναι να συνεχίσετε να χρησιμοποιείτε το WPA2 με όσο το δυνατόν πιο σύνθετο password και ταυτόχρονα να δηλώνετε τις συσκευές που επιθυμείτε να έχουν πρόσβαση μέσω MAC addres”

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

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