Στα προηγούμενα δύο μέρη είδαμε πως εγκαθιστούμε το car simulation στο μηχάνημά μας και τα απαραίτητα προγράμματα που θα πρέπει να χρησιμοποιήσουμε μαζί με τον απαραίτητο εξοπλισμό που θα χρειαστούμε. Στο σημερινό άρθρο θα σας παρουσιάσουμε την διαδικασία του exploitation αναλυτικά.
Θα εξετάσουμε τώρα τι είναι το SavvyCAN και θα το χρησιμοποιήσουμε με το ICSIM. Μετά από αυτό, θα εξετάσουμε τον τρόπο εκτέλεσης fuzzing και scripting με το SavvyCAN.
SavvyCAN
Υπάρχουν διάφορα λογισμικά που θα σας βοηθήσουν να παρακολουθείτε και να φιλτράρετε την επικοινωνία CAN.
Υπάρχουν δαπανηρά και ιδιόκτητα εργαλεία, καθώς και δωρεάν – ανοιχτού κώδικα εργαλεία.
Ο σκοπός αυτού του άρθρου είναι να σας βοηθήσει να ξεκινήσετε με το χακάρισμα αυτοκινήτου χωρίς υψηλό κόστος. Έτσι τα ακριβά εργαλεία δεν υπάρχουν στη λίστα μας.
Έχω ήδη γράψει αναλυτικά για τη φθηνή και δωρεάν εναλλακτική για αυτά τα ακριβά εργαλεία επικοινωνίας CAN. Εργαλεία όπως τα can-utils, το Wireshark λειτουργούν μια χαρά.
Όμως το SavvyCAN παρέχει πολύ περισσότερες επιπλέον δυνατότητες. Για αρχάριους, προσφέρει ένα ωραίο GUI, το οποίο σας βοηθά να πλοηγηθείτε εύκολα, να φιλτράρετε τα πακέτα, τα αναγνωριστικά κ.λπ. Για όσους ασχολούνται ήδη με το Car hacking, το SavvyCAN προσφέρει πραγματικά εξαιρετικές δυνατότητες. Τα προσωπικά μου αγαπημένα χαρακτηριστικά περιλαμβάνουν τη δυνατότητα εκτέλεσης scripts σε CAN framework,
Ας δούμε τον ορισμό του SavvyCAN από τον ιστότοπό τους.
«Το SavvyCAN είναι ένα πρόγραμμα C++ που βασίζεται σε πολλαπλές πλατφόρμες QT. Είναι ένα εργαλείο αντίστροφης μηχανικής και σύλληψης διαύλων CAN. Αρχικά γράφτηκε για να χρησιμοποιεί υλικό EVTV όπως τα EVTVDue και CANDue. Έκτοτε έχει επεκταθεί ώστε να μπορεί να χρησιμοποιεί οποιαδήποτε συσκευή συμβατή με socketCAN καθώς και τις πλακέτες Macchina M2 και Teensy 3.x. Μπορεί να συλλάβει και να στείλει σε πολλά bus και CAN συσκευές λήψης ταυτόχρονα.”
Περισσότερες πληροφορίες θα βρείτε εδώ: https://www.savvycan.com/
Θεωρώ ότι είναι πολύ εύκολο να χρησιμοποιήσω το SavvyCAN παρά το can-utils . Και πάλι, ας μην ξεκινήσουμε τη συζήτηση μεταξύ του ποιο εργαλείο είναι καλύτερο και ποιο όχι, εφόσον εξυπηρετεί τον σκοπό σας.
Εγκατάσταση SavvyCAN
Η εγκατάσταση του SavvyCAN είναι μια πραγματικά εύκολη και απλή διαδικασία. Μπορείτε να κάνετε λήψη των προκατασκευασμένων δυαδικών αρχείων για Linux, Mac και Windows από τη διεύθυνση https://www.savvycan.com
Εγκατάσταση και εκτέλεση στο Ubuntu
wget https://github.com/collin80/SavvyCAN/releases/download/V199.1/SavvyCAN-305dafd-x86_64.AppImage
Δεν απαιτείται εγκατάσταση καθώς κατεβάζετε το appimage, κάντε το εκτελέσιμο και τρέξτε το!
chmod 744 SavvyCAN-305dafd-x86_64.AppImage
# και
./SavvyCAN-305dafd-x86_64.AppImage
Μπορείτε να εκτελέσετε το SavvyCAN
Μπορείτε να παίξετε με τη διεπαφή SavvyCAN για λίγο. Εάν θέλετε να χρησιμοποιήσετε το SavvyCAN με Macchina M2 ή οποιοδήποτε άλλο συμβατό υλικό, δεν χρειάζεστε κάποια επιπλέον εγκατάσταση.
Σκοπεύουμε να χρησιμοποιήσουμε το SavvyCAN με το ICSim, επομένως πρέπει να εγκαταστήσουμε το qtserialbus .
Μόλις ανοίξετε το παράθυρο SavvyCAN, εάν πλοηγηθείτε στο Connection -> Open Connection Window -> Add New Connection, και θα δείτε ότι το qtserialbus είναι απενεργοποιημένο.
Ας ξεκινήσουμε με την εγκατάσταση του qtserialbus για να μπορούμε να το χρησιμοποιήσουμε με το ICSim.
Εγκατάσταση του qt5
$ wget https://download.qt.io/official_releases/qt/5.14/5.14.4/qt-opensource-linux-x64-5.14.2.run
Αφού κατεβάσετε το qt5, πρέπει να το εγκαταστήσετε/τρέξετε
$ chmod a+x ./qt-opensource-linux-x64-5.14.2.run
$ sudo ./qt-opensource-linux-x64-5.14.2.run
Σημειώστε το όνομα διαδρομής, θα το χρειαστείτε αργότερα.
Μόλις εγκατασταθεί το qt5, πρέπει να εγκαταστήσετε το qtserialbus, καθώς αυτό δεν συμπεριλαμβάνεται στο επίσημο αποθετήριο του Ubuntu. Πρέπει λοιπόν να το φτιάξουμε μόνοι μας.
Εγκαταστήστε το qtserialbus
$ sudo apt install qtdeclarative5-dev qttools5-dev g++
$ git clone https://github.com/qt/qtserialbus
$ cd qtserialbus
$ /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake .
$ make
$ sudo make install
Κατασκευάστε το SavvyCAN
Για την χρήση του qtserialbus, του SavvyCAN του AppImage, το αρχείο που κατεβάσατε νωρίτερα δεν θα λειτουργήσει. Το SavvyCAN πρέπει να κατασκευαστεί με το qmake.
$ git clone https://github.com/collin80/SavvyCAN $ cd SavvyCAN $ /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake CONFIG+=debug $ make
Θα χρειαστεί λίγος χρόνος για να εγκατασταθεί.
Μόλις εγκατασταθούν όλα, ξεκινήστε τον προσομοιωτή ICSim, ξεκινήστε τα πάντα εκτός από τα can-utils. Αντί να χρησιμοποιούμε το can-utils για να καταγράψουμε την επικοινωνία CAN, θα χρησιμοποιήσουμε το SocketCAN.
Εκκίνηση του SavvyCAN
Εκκινήστε το SavvyCAN που μόλις δημιουργήσαμε και όχι το appimage που κατεβάσαμε νωρίτερα.
Θυμηθείτε, εάν θέλετε να το εκτελέσετε σε ένα πραγματικό αυτοκίνητο και να μην το χρησιμοποιήσετε με το qtserialbus, μπορείτε να συνεχίσετε να χρησιμοποιείτε τα appimage και δεν χρειάζεται να περάσετε όλη αυτή την ταλαιπωρία της κατασκευής του SavvyCAN.
$ cd SavvyCAN $ ./SavvyCAN
Τώρα μπορείτε να ανοίξετε το παράθυρο σύνδεσης και θα παρατηρήσετε ότι το QT SerialBus έχει ενεργοποιηθεί.
Προσθήκη vcan0 στο SocketCAN
Για να κάνετε μια νέα σύνδεση στο SavvyCAN,
- Ανοίξτε το SavvyCAN
- Μετάβαση στο μενού Σύνδεση -> Άνοιγμα παραθύρου σύνδεσης -> Προσθήκη νέας σύνδεσης συσκευής
- Επιλέξτε τη σύνδεση με την παρακάτω ρύθμιση
Τύπος σύνδεσης ως QT SerialBus Devices
SerialBus Τύπος συσκευής ως socketcan
Θύρα ως vcan0
Στη συνέχεια, δημιουργήστε μια νέα σύνδεση.
Μόλις ολοκληρωθεί η σύνδεση, μπορείτε να δείτε τα CAN frameworks να εμφανίζονται στο παράθυρο του SavvyCAN, κάτι που είναι ένα καλό σημάδι ότι όλα λειτουργούν καλά και καλά.
Για να κατανοήσουμε καλύτερα το SavvyCAN, ας κάνουμε τα ίδια πράγματα που κάναμε νωρίτερα χρησιμοποιώντας τα can-utils, αλλά αυτή τη φορά με το SavvyCAN.
Το SavvyCAN παρέχει μια ωραία και διαισθητική διεπαφή για να φιλτράρετε τα καρέ κατά αναγνωριστικό. Μπορείτε να καταργήσετε την επιλογή των αναγνωριστικών που δεν χρειάζεστε, από το δεξί παράθυρο. Με αυτόν τον τρόπο μπορείτε να αναγνωρίσετε γρήγορα το αναγνωριστικό που σχετίζεται.
Ένα άλλο πολύ ωραίο χαρακτηριστικό είναι η “Λειτουργία αντικατάστασης”. Εάν αυτή η επιλογή είναι ενεργοποιημένη, τα καρέ θα αντικατασταθούν στην ίδια σειρά.
Replay Attack
Η εκτέλεση μιας Replay Attack χρησιμοποιώντας το SavvyCAN είναι πολύ πιο εύκολη. Μπορείτε να ανοίξετε τις επιλογές αναπαραγωγής στο μενού Send Frames. Μπορείτε είτε να φορτώσετε δεδομένα από ένα αρχείο είτε να τα φορτώσετε απευθείας από τα δεδομένα που καταγράφηκαν. Μπορείτε επίσης να επιλέξετε ποιο αναγνωριστικό θα επαναληφθεί από το μενού φιλτραρίσματος αναγνωριστικού.
Προσδιορισμός του arbitration ID
Μου κάνουν πολλοί αυτή την ερώτηση, για το πώς να αναγνωρίσω ποιο αναγνωριστικό κάνει τι σε ένα αυτοκίνητο. Η εύρεση των arbitration ID μπορεί μερικές φορές να είναι πολύ δύσκολη.
Το SavvyCAN παρέχει πολλά εργαλεία RE. Ένα από τα οποία χρησιμοποιώ συχνά είναι το “Sniffer”. Αυτό μου επιτρέπει να “ξεθωριάζω” τα ανενεργά byte και να αναγνωρίζω γρήγορα τα αναγνωριστικά.
Για παράδειγμα, ας προσπαθήσουμε να δούμε το αναγνωριστικό για το στροφόμετρο. Για να αναγνωρίσω το αναγνωριστικό στροφόμετρου, θα ανοίξω το Sniffer και θα εξαφανίσω τα ανενεργά byte.
Ο τρόπος με τον οποίο τα προσδιορίζω είναι, ας υποθέσουμε ότι υπάρχουν 20 διαθέσιμα αναγνωριστικά. Απενεργοποιώ τουλάχιστον το ένα τρίτο από αυτά — τρέχω την ενέργεια στο αυτοκίνητο/ICSim— παρατηρώ την αλλαγή στα καρέ. Το κάνω αυτό μέχρι να μείνω με ένα μόνο αναγνωριστικό.
Ας δούμε το Sniffer, ένα από τα εργαλεία RE του SavvyCAN σε δράση.
Εδώ δεν βρήκα καμία αλλαγή στα byte που να αντιστοιχεί στη δράση μου. Οπότε θα κινηθώ για άλλα αναγνωριστικά.
Φαίνεται ότι το 0x244 είναι αυτό που ψάχνουμε. Μπορείτε να παρατηρήσετε το μοτίβο στα byte αλλαγής όταν πατηθεί το γκάζι. Καθώς η ταχύτητα αυξάνεται, το στροφόμετρο εμφανίζει την αλλαγή στο 3ο και 4ο byte (μετρώντας από Zeroth Byte)
Μπορείτε να το κάνετε αυτό για όλες τις ενέργειες που είναι διαθέσιμες στο ICSim.
Αποστολή προσαρμοσμένων frames
Το SavvyCAN έχει επίσης ένα άλλο χαρακτηριστικό που μπορείτε να τροποποιήσετε τα πακέτα εν κινήσει κατά την αποστολή προσαρμοσμένων frames. Για να το κάνετε αυτό, πρέπει να ανοίξετε το Frame Sender μέσα από το μενού Send Frames.
Ας “κοροϊδέψουμε” το στροφόμετρο. Από το παραπάνω παράδειγμα, όταν καθαρίσαμε τα πακέτα, παρατηρήσαμε πώς λειτουργεί το στροφόμετρο.
Το 3ο και το 4ο Byte αυξάνονται με την αύξηση του γκαζιού. Αυτό που θα κάνουμε λοιπόν είναι να στείλουμε το προσαρμοσμένο frame, να τροποποιήσουμε τα byte εν κινήσει για να παρατηρήσουμε την αλλαγή στο στροφόμετρο.
Η στήλη δεδομένων θα αποτελείται από δεκαεξαδικές τιμές, το αναγνωριστικό θα πρέπει να έχει τη μορφή 0x123, το έναυσμα πρέπει να είναι η τιμή σε ms, η καθυστέρηση μεταξύ κάθε καρέ και η τροποποίηση πρέπει να αποτελείται από τροποποίηση σε byte.
Παράδειγμα αυτό που θα ήθελα να κάνω είναι, θέλω να στείλω στο Bus 0, ID 0x244 (στροφόμετρο), δεδομένα ως 0x00 0x00 0x00 0x00 0x00 και να αυξάνω το 3ο byte κατά 2 κάθε φορά, οπότε στην τροποποίηση, μπορείτε να γράψετε d3 =d3+2. Μόλις τελειώσετε, βεβαιωθείτε ότι έχετε επιλέξει το πλαίσιο ελέγχου Ενεργοποίηση (EN).
Κάπου εδώ τελείωσε η σειρά οδηγών Car Hacking.
Εύχομαι να σας άρεσε και να τη βρήκατε ενδιαφέρουσα. Περιμένω τα σχόλια και τις παρατηρήσεις σας, καθώς να προτείνετε και εσείς δικά σας παρόμοια προγράμματα αλλά και μεθόδους που χρησιμοποιείτε.