Car Hacking: Ο απόλυτος οδηγός! – Part II


Αυτό είναι το δεύτερο μέρος της σειράς “Car Hacking: Ο απόλυτος οδηγός!”. Στο μέρος Ι, συζητήσαμε, τι είναι το CAN Bus, αρκετές πληροφορίες για να ξεκινήσετε με το CAN Traffic και πώς να δημιουργήσετε ένα εικονικό σύστημα για το Car Hacking χρησιμοποιώντας το ICSim.

05ec55d9 4ea9 57a6 98de 11ff7d78ce17

Σε αυτό το μέρος, θα βουτήξουμε στα βαθιά κάνοντας sniffing τα δεδομένα του αυτοκινήτου μέσω του CAN Traffic.

Πώς μοιάζει ένα μήνυμα CAN;

0 wt a456fspv7l js

Έτσι ακριβώς μοιάζουν τα μηνύματα από το CAN, όταν καταγράφονται. Αν σπάσω τις στήλες, η πρώτη είναι η διεπαφή, η δεύτερη είναι το arbitration ID, το τρίτο είναι το μέγεθος του μηνύματος CAN, αυτό δεν μπορεί να είναι μεγαλύτερο από 8 (Αν κοιτάξετε το CAN framework, θα καταλάβετε καλύτερα γιατί αυτό δεν μπορεί να είναι μεγαλύτερο από 8), το τέταρτο είναι τα ίδια τα δεδομένα του CAN.

Το νόημα του μηνύματος CAN

1 boxp7ufposl0vevaoovrdq

Σε αυτό το παράδειγμα, θα δούμε ένα πλαίσιο των 8 byte. Το μήνυμα αποστέλλεται με αναγνωριστικό 0x111. Μόλις ο πίνακας των οργάνων δει αυτό το μήνυμα, αυτό θα βεβαιωθεί πρώτα, εάν προοριζόταν για τον πίνακα των οργάνων ή όχι. Αν ναι, τότε διαβάζει το μήνυμα που είναι το  0x0BB8, το οποίο μεταφράζεται σε 3000 (δεκαδικά ψηφία). Τώρα ο πίνακας οργάνων σας μετακινεί τη βελόνα στο στροφόμετρο σε 3000.

1 xqzstino0k c8jigvunyww

Μόλις κατανοήσουμε το μήνυμα CAN, μπορούμε περαιτέρω να εγχύσουμε τροποποιημένα πακέτα μέσω του ODB-II στο δίαυλο CAN για παραποίηση του ταχύμετρου ή οτιδήποτε άλλο θέλουμε.

Πριν ξεκινήσουμε να δείχνουμε το ICSim, ας δούμε πώς λειτουργούν τα άλλα βοηθητικά προγράμματα. Για να γίνει αυτό, ας ρυθμίσουμε πρώτα το virtual interface.

Ρύθμιση της εικονικής διεπαφής CAN

sudo modprobe can

Αυτό θα φορτώσει τη μονάδα του πυρήνα για το CAN. Επίσης, πρέπει να φορτώσουμε τη μονάδα του πυρήνα και για την εικονική μηχανή.

sudo modprobe vcan

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

lsmod | grep can

Αυτό θα εμφανιστεί εάν τα CAN και VCAN έχουν φορτωθεί ή όχι.

1 ntqa doikjjitp2tundicw

Ας ρυθμίσουμε τώρα την εικονική διεπαφή

sudo ip link add dev vcan0 type vcan 
sudo ip link setup vcan0

Μπορείτε να επαληθεύσετε εάν η εικονική διεπαφή CAN έχει ρυθμιστεί με την παρακάτω εντολή

ifconfig vcan0

1 imhtux8kwptgspsktdnklg

Μόλις ρυθμιστεί η εικονική διεπαφή CAN, είστε πλέον έτοιμοι να στείλετε/λάβετε το πακέτο CAN σε αυτήν τη διεπαφή. Ας χρησιμοποιήσουμε τώρα ένα από τα βοηθητικά προγράμματα από το can-utils που ονομάζεται cangen για να δημιουργήσουμε τα εικονικά πακέτα CAN.

cangen

1 hkao8pnghdbgkoliwz2gpw

Το cangen δημιουργεί τα CAN frameworks για εκπαιδευτικούς σκοπούς. Για να χρησιμοποιήσετε το cangen, πρέπει να καθορίσετε τη διεπαφή στην οποία θα δημιουργηθεί το CAN framework.

cangen vcan0

Το vcan0 είναι η εικονική διεπαφή CAN που δημιουργήσαμε πριν.

Δεδομένου ότι έχετε ήδη δημιουργήσει το CAN framework, πρέπει να υπάρχει ένας τρόπος να δείτε το framework! Υπάρχουν πολλά διαθέσιμα βοηθητικά προγράμματα, ένα από τα πολλά διαθέσιμα είναι το Wireshark. Εκκινήστε το Wireshark αφού δημιουργήσετε τα CAN frameworks.

1 2yrl lxahgnm0greurwzvg

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

1 alh5 krtqkhkkefkjx owg

Μπορείτε επίσης να δείτε πιο λεπτομερείς πληροφορίες σχετικά με το πλαίσιο CAN.

1 iueyodwb4fxno 7hqicxsg

Επίσης, υπάρχουν άλλα βοηθητικά προγράμματα στο εσωτερικό του vcan0 όπως το cansniffer και το candump που κάνουν λίγο πολύ τα ίδια πράγματα που κάνει το Wireshark. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε εργαλείο ή βοηθητικό πρόγραμμα, με όποιο νιώθετε πιο άνετα.

candump

1 xzaq1f7ipdbv7 hqqytqla

Για να απορρίψετε ή να καταγράψετε τα frames χρησιμοποιώντας το candump , μπορείτε να χρησιμοποιήσετε την εντολή

candump vcan0

Παρακάτω θα δούμε τα αποτελέσματα που θα μας εμφανίσει.

1 zd9j09vip 2s3xzmskwkwa

Σε ένα από τα τερματικά, στο κάτω, δημιουργούνται τα πακέτα του CAN, ενώ το τερματικό στο επάνω μέρος λειτουργεί το candump. Εάν πρέπει να αναλύσω τις στήλες, το πρώτο που βλέπετε είναι η διεπαφή CAN. Το δεύτερο είναι το αναγνωριστικό ID, το τρίτο είναι το μέγεθος του μηνύματος CAN και το τέταρτο είναι το ίδιο το μήνυμα.

Το candump μπορεί επίσης να καταγράψει το framework για εσάς. Εάν επιθυμείτε να εκτελέσετε μια επίθεση επανάληψης, μπορείτε πρώτα να καταγράψετε τα καρέ και στη συνέχεια να χρησιμοποιήσετε μίνι βοηθητικό πρόγραμμα όπως το canplayer για να επαναλάβετε τα καρέ. Η καταγραφή των CAN frameworks μπορεί να ενεργοποιηθεί χρησιμοποιώντας το flag -l.

candump -l vcan0

1 rfzmgla1hnj437zfb3c bg

Όταν καταγράφετε τα CAN frames, θα δημιουργηθεί ένα αρχείο με το πρόθεμα candump ακολουθούμενο από την ημερομηνία της δημιουργίας του.

Εάν θέλετε να δείτε τα περιεχόμενα του αρχείου, μπορείτε πάντα να χρησιμοποιήσετε την εντολή cat στο Linux για να δείτε.

1 7ogxlumf7rc v6lucxecvw

Τα στοιχεία που καταγράψαμε χρησιμοποιώντας το candump μπορούν να αναπαραχθούν χρησιμοποιώντας ένα βοηθητικό πρόγραμμα όπως το canplayer .

canplayer

1 t6izhg26ykim0d5dn fgda

Όπως υποδηλώνει το όνομα, το canplayer θα αναπαράγει τα can frames . Ιδανικά, αυτό είναι χρήσιμο όταν πρέπει να κάνετε την replay attack. Πρώτα θα καταγράψετε τα CAN frames και στη συνέχεια θα αναπαραγάγετε το CAN framework χρησιμοποιώντας το canplayer.

Φανταστείτε ένα σενάριο όπου θέλετε να παραποιήσετε το στροφόμετρο και δεν έχετε ιδέα σε ποιο αναγνωριστικό ID λειτουργεί η ανάγνωση του στροφόμετρου, δεν έχετε ιδέα τι υπάρχει στο μήνυμα CAN. Στην ιδανική περίπτωση, θα πρέπει πρώτα να απορρίψετε και να καταγράψετε τα frames χρησιμοποιώντας το candump με flag -l και στη συνέχεια να χρησιμοποιήσετε το πρόγραμμα αναπαραγωγής can για να επαναλάβετε τα καρέ που καταγράφηκαν.

Το canplayer απαιτεί την επιλογή -i για το αρχείο εισόδου.

canplayer -I canfile.log

Το canplayer έχει αρκετές άλλες πραγματικά χρήσιμες επιλογές, μπορείτε να τις μάθετε χρησιμοποιώντας το man canplayer.

cansniffer

1 dato8g u 54ecwa5x3 46q

Το CAN sniffer το χρησιμοποιείτε για να δείτε την αλλαγή στην κίνηση CAN. Αυτό είναι πολύ χρήσιμο για να δείτε μια αλλαγή σε ένα συγκεκριμένο byte. Το cansniffer έχει μια επιλογή -c πολύ χρήσιμη για να δείτε την αλλαγή του byte με πολύχρωμο τρόπο. Αυτό που κάνει είναι ότι θα συγκρίνει το προηγούμενο byte και το τρέχον byte, αν υπάρχει διαφορά τότε υποδεικνύεται από την αλλαγή στο χρώμα του byte. Αυτό είναι πολύ χρήσιμο όταν θέλετε να μάθετε εάν υπήρξε αλλαγή όταν είχατε πραγματοποιήσει ορισμένες επεμβάσεις σε ένα αυτοκίνητο.

cansniffer -c vcan0

1 tdgde3t7l2cpew58flyhna

Θεωρώ ότι το cansniffer είναι πολύ χρήσιμο επειδή επιτρέπει επίσης φιλτράρισμα με αναγνωριστικά. Έτσι, εάν θέλετε να βλέπετε τα frames μόνο από ένα συγκεκριμένο αναγνωριστικό, ας πούμε 0x011, μπορείτε να το κάνετε.

Αυτό μπορεί να γίνει μόλις αρχίσετε να κάνετε sniffing, πατήστε – και μετά 000000. Αυτό θα καθαρίσει πρώτα όλα τα καρέ. Τώρα, μπορείτε να αρχίσετε να προσθέτετε τα αναγνωριστικά χρησιμοποιώντας το + και στη συνέχεια, το αναγνωριστικό που θέλετε να εμφανίσετε και να πατήσετε Enter. Με αυτόν τον τρόπο μπορείτε να φιλτράρετε τα frames μεμονωμένων αναγνωριστικών.

cansend

1 qg1qojbacysqvmpihnahqw

Το cansend χρησιμοποιείται για την αποστολή των CAN frames σε μια συγκεκριμένη διεπαφή CAN.

cansend interface frame

Θα χρησιμοποιήσουμε όλα αυτά τα βοηθητικά προγράμματα με το ICSim.

Εκκίνηση του ICSim

Ακολουθήστε το πρώτο άρθρο που φτιάξαμε για να μάθετε πώς να εγκαταστήσετε το ICSim.
Ας ξεκινήσουμε το ICSim και ας κάνουμε sniff τα CAN frames.

./icsim vcan0
./controls vcan0

1 mtkvw72yh3tlmgbk umidq

Εάν έχετε ακολουθήσει κάθε βήμα που συζητήθηκε στην προηγούμενη ανάρτηση, θα πρέπει να μπορείτε να τα δείτε. Επίσης, μπορείτε να παρατηρήσετε ότι η βελόνα του ταχύμετρου κινείται μπρος – πίσω, κάτι που είναι αναμενόμενο λόγω του θορύβου που υπάρχει.

Sniff των CAN frames που δημιουργούνται από το ICSim

Θα χρησιμοποιήσουμε το cansniffer, ένα βοηθητικό πρόγραμμα που παρέχεται από τα can-utils, για να συλλάβουμε τα πακέτα. Μπορείτε να ανοίξετε ένα νέο τερματικό και να ξεκινήσετε το cansniffer με την παρακάτω εντολή

cansniffer -c vcan0

Η επιλογή -c χρησιμοποιείται για να υποδείξει την αλλαγή των byte του frame.

1 h ax0dq56zfbzwvqlcxu3w

Μπορείτε να δείτε πολύ γρήγορες αλλαγές στα CAN frames, δύσκολο να συμβαδίσετε με τον ρυθμό με τον οποίο πραγματοποιείται η επικοινωνία. Σε ένα πραγματικό αυτοκίνητο, αυτή η επικοινωνία θα γινόταν γρήγορα. Για να συμβαδίσετε, μπορείτε να χρησιμοποιήσετε το φιλτράρισμα του αναγνωριστικού ID. Εάν θέλετε να βλέπετε μόνο τα frames από το ID 40C, μπορείτε πάντα να πατήσετε – και στη συνέχεια 000000 ακολουθούμενο από το πλήκτρο Enter. Αυτό θα διαγράψει όλα τα αναγνωριστικά από το cansniffer και μπορείτε στη συνέχεια να πατήσετε + ακολουθούμενο από το αναγνωριστικό ID για φιλτράρισμα και στη μετά να πατήσετε το πλήκτρο Enter.

1 7eomjrd4qai0frxo5k5s8a

Εδώ έχω φιλτράρει το αναγνωριστικό 40c χρησιμοποιώντας τα ίδια βήματα που αναφέρθηκαν παραπάνω. Μπορείτε να δοκιμάσετε να πατήσετε το πλήκτρο του επάνω βέλους για να αυξήσετε το γκάζι και στη συνέχεια, να παρατηρήσετε πόσο γρήγορα αλλάζουν τα CAN frames. Η αλλαγή υποδεικνύεται και πάλι με το χρωματισμό. Μπορείτε πάντα να παίξετε με αυτό και να δείτε πώς λειτουργούν τα πράγματα κάτω από το καπό.

Replay Attack

Η κατανόηση αυτών των τεράστιων δεδομένων θα είναι αρκετά δύσκολη. Επίσης, η εύρεση του αναγνωριστικού ID στο οποίο πρέπει να εισάγετε τα frames είναι αδύνατο να γίνει από αυτά τα πολλά δεδομένα.

Έτσι, θα πρέπει να συλλάβετε τα πακέτα και στη συνέχεια να εκτελέσετε κάποιες ενέργειες, όπως να ανάψετε τα φλας ή να πιέσετε το γκάζι, μόλις είναι συνδεδεμένο, στη συνέχεια να χωρίσετε τα πακέτα, να εκτελέσετε replay attack και να δείτε αν λειτουργεί.

Τώρα για να εκτελέσετε replay attack με το ICSim, πρέπει να έχετε ήδη ξεκινήσει το ICSim και θα πρέπει να μπορείτε να βλέπετε τα frames χρησιμοποιώντας το cansniffer. Τώρα θα χρησιμοποιήσουμε την επιλογή candump με -l για να καταγράψουμε και να αποθηκεύσουμε τα frames, στο μεταξύ θα αυξήσουμε το γκάζι, πατώντας τα πλήκτρα βέλους <αριστερά> και <δεξιά> για να ενεργοποιήσουμε την ένδειξη φλας.

candump -l vcan0

Τώρα θα σταματήσουμε το candump και θα δούμε να δημιουργείται ένα αρχείο candump-XXXXX.log.

Επανάληψη των CAN frames

Για να επαναλάβουμε αυτά τα πακέτα θα χρησιμοποιήσουμε το canplayer . Δεδομένου ότι θα χρησιμοποιήσουμε ένα αρχείο ως είσοδο για το canplayer, χρειαζόμαστε την επιλογή -I για να είναι ενεργοποιημένη.

canplayer -I candump -2019XXXXXX.log

Μπορείτε να δείτε ότι έχει πραγματοποιηθεί η επίθεση replay και τα φλας όπως και το ταχύμετρο θα πρέπει να λειτουργούν όπως κάναμε νωρίτερα.

Ανάλυση των πακέτων

Σε ένα πραγματικό αυτοκίνητο, το CAN bus μπορεί να είναι πολύ πιο περίπλοκο και τα CAN frames μπορεί να εμφανίζονται πολύ γρηγορότερα, οπότε ο εντοπισμός του ID θα μπορούσε να είναι αρκετά δύσκολος. Έτσι, για να προσδιορίσετε εύκολα το αναγνωριστικό ID, μπορείτε να το ακολουθήσετε τα παρακάτω βήματα.

0 9zwtfc7wxaivnow1

Διαίρεση των CAN frames και εκτέλεση Replay attack

Εάν θέλετε να διαιρέσετε τα CAN frames σε δύο μισά και να εκτελέσετε την επίθεση replay σε καθένα από αυτά, ο καλύτερος τρόπος για να το κάνετε είναι να καταγράψετε τα CAN frames χρησιμοποιώντας το candump και να χρησιμοποιήσετε το βοηθητικό πρόγραμμα wc για να μετρήσετε τον αριθμό των CAN frames και στη συνέχεια, χρησιμοποιήστε το split για να το διαιρέσετε στα δύο εξίσου.

1 ntws7x3lcqr4rjakv4g8bq

1 grx1we4vqcz2w7j03xffra

Τώρα, μπορείτε να χρησιμοποιήσετε το canplayer  για να επαναλάβετε το CAN frames ανεξάρτητα.

Κάπου εδώ φτάσαμε στο τέλος και αυτού του οδηγού. Δείξαμε πως μπορούμε να πραγματοποιήσουμε exploitation αφού έχουμε πάρει πρόσβαση σε ένα όχημα και να πραγματοποιήσουμε κάποιες ενέργειες, όπως να αυξήσουμε το γκάζι, να ανάψουμε τα φλας και να ανοίξουμε τις πόρτες. Έτσι λοιπόν με κάποια προγράμματα και με χαμηλό κόστος εξαρτημάτων, καταφέραμε να πάρουμε πλήρη πρόσβαση σε ένα όχημα.

Happy (car) hacking !!!


Διαβάστε τις Τεχνολογικές Ειδήσεις από όλο τον κόσμο, με την εγκυρότητα του iGuRu.gr

Ακολουθήσετε μας στο Google News iGuRu.gr at Google news