CANToolz is a framework for analysing CAN networks and devices. It provides multiple modules that can be chained using
CANToolz's pipe
system and used by security researchers, automotive/OEM security testers in black-box analysis.
CANToolz can be used for ECU discovery, MitM testing, fuzzing, brute-forcing, scanning or R&D, testing and validation. More can easily be implemented with a new module.
Many tools are already available for CAN analysis, with Charlie Miller and Chris Valasek tools, UDS/CAN tools by Craig Smith and many more . Each of them is cool and useful but it can be tedious when trying to use several of them at once. One may need to have a working setup for each them, modify/hack some of their source code, implement new features to be specific to one's project, etc.
The CANToolz framework is an attempt to unify most (if not all) the tricks, tools and others things that one would need to do CAN analysis in one unique place. A single installation process and many modules already available. The more people we bring in, the more useful it will become! No stunt-hack to bring the people, just a practical and useful tool for anyone to use. Implementing new modules is fairly easy and can be merged with the framework is the community finds it useful.
The framework is really module-oriented, where one could use one, two, a couple of them as part of a testing process or to create more sophisticated simulation scenarios to work with CAN bus.
"I don't get why everyone releases new "car hacking tools" all the time. @nudehaberdasher and I released ours in 2013 and they work fine." - (c) Charlie Miller (@0xcharlie)
"Looking for our car hacking tools / data / scripts? http://illmatics.com/content.zip" - (c) Chris Valasek @nudehaberdasher
More details and use-case examples available on:
CANToolz supports the following hardware to communicate with CAN bus:
More hardware could be supported. Feel free to open a request.
Using manual installation (installing missing dependencies as well):
$ python setup.py install
The installation process will create a cantoolz
alias command in your bin/ folder. To start cantoolz
, simply run:
$ cantoolz -g w -c examples/can_sniff.py
Then go to CANToolz's web interface at http://localhost:4444
Help is available with:
$ cantoolz -h
Last stable release for Python 2.7: https://github.com/eik00d/CANToolz/tree/Python_2.7_last_release
VIRCar is a Virtual Car simulated using CANToolz's features and modules:
- Run VIRCar
cantoolz -g w -p 5555 -c examples/car_config.py
- Go to http://localhost:5555/index.html and press
START
- Go to http://localhost:5555/vircar.html to see your own Virtual Car!
Now, to start hacking your new virtual car, you can load the existing configuration example:
- Run CANToolz
cantoolz -g w -c examples/car_hacker.py
to load and start the hacking session - Go to http://localhost:4444/index.html and you are now connected to VIRCar with
car_hacker
configuration, using TCP2CAN for I/O hardware and connected to VIRCar's OBD2 and CABIN buses, and ready to start playing around
Module | Description |
---|---|
hw_CANBusTriple | IO module for CANBus Triple HW |
hw_USBtin | IO module for USBtin |
hw_CANSocket | IO module for CANSocket (Linux only) |
hw_TCP2CAN | client/server IO component for tunnelinc raw CAN traffic over TCP |
hw_CAN232 | IO module for LAWICEL (USB to Serial) CAN devices (e.g. SeeedStudio CAN bus shield) |
firewall | module for blocking CAN message by ID |
fuzz | Simple 'Proxy' fuzzer (1 byte) Can be combined with ping/replay |
mod_printMessage | printing CAN messages |
analyze | CAN messages statistic (with .csv file output) / Analysis option (c analyze a) will try to find UDS/ISO TP messages |
ping | generating CAN messages with chosen IDs (ECU/Service discovery) |
replay | save and replay packets |
We are working on supporting other types of I/O hardware and modules. Please join us! With your help, we can create modules that can be useful for all of us!
- CAN Switch filter scanner
- Checking which CAN frames can be passed from diagnostic interface to HU and back
- MITM with firewall (ECU ID detection)
- Checking what packets are responsible for chosen "action"
- Replay discovery
- Checking what packets are responsible for chosen "action"
- Ping discovery (with ISO TP and UDS support)
- UDS detection, etc.
And many other possible scenarios. Some of them can be found in the example folder of this repository.
Just use modules as "needed":
- Example with DIFF mode, to find door unlock commands.
As one can expect from hacker tools, CANToolz is very early-uber-alpha. It needs to be tested more; the code can be ugly some times; bugs remain to be found. We are working on that, step by step ;)
Therefore, use it as-is!
- IRC: #cantoolz @ freenode.net
- Telegram: https://t.me/CANToolz
- Alexey Sintsov (@asintsov) / alex.sintsov@gmail.com -- Creator of CANtoolz