It’s Easier to Br(e)ak(e) Than to Patch:
A Stealthy DoS attack against CAN
Stefano Longari, Stefano Zanero Politecnico di Milano Acknowledgments: Matteo Penco, Michele Carminati, Andrea Palanca, Eric Evenchick, Federico Maggi
Its Easier to Br(e)ak(e) Than to Patch: A Stealthy DoS attack - - PowerPoint PPT Presentation
Its Easier to Br(e)ak(e) Than to Patch: A Stealthy DoS attack against CAN Stefano Longari, Stefano Zanero Politecnico di Milano Acknowledgments: Matteo Penco, Michele Carminati, Andrea Palanca, Eric Evenchick, Federico Maggi $whoami Stefano
Stefano Longari, Stefano Zanero Politecnico di Milano Acknowledgments: Matteo Penco, Michele Carminati, Andrea Palanca, Eric Evenchick, Federico Maggi
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io
2
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 3
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 4
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 5
Keyless Ignition Module Engine Control Module Body Control Module CANL CANH 120Ω 120Ω Broadcast Unauthenticated Frame Injection
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 6
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 7
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 8
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 9
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 10
Keyless Ignition Module Engine Control Module Body Control Module CANL CANH 120Ω 120Ω
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 11
Engine Control Module Body Control Module CANL CANH 120Ω 120Ω µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 12
Engine Control Module Body Control Module CANL CANH 120Ω 120Ω Creates data frames to be sent µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 13
Engine Control Module Body Control Module CANL CANH 120Ω 120Ω Implements CAN specifications
µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 14
Body Control Module CANL CANH 120Ω 120Ω Engine Control Module Translates digital bits into CAN compliant electrical signals µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 15
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 16
1 1 1 1 1 1 1 1 5V 2,5V 0V
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 17
Time ECU1 ECU2 ECU3 Loses Arbitration Loses Arbitration
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 18
CANL CANH 120Ω CAN Error Frame Reasons:
µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 19
ERROR ACTIVE Can send error active flags “000000”
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 20
ERROR ACTIVE ERROR PASSIVE Can send error active flags “000000” counter > 127 Can send error passive flags “111111” reset or counter < 128
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 21
ERROR ACTIVE BUS OFF ERROR PASSIVE Can send error active flags “000000” counter > 127 counter > 255 Can send error passive flags “111111” Shuts itself ofg the bus reset or counter < 128 reset or detect 11 sequential “1” x128 bit times
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 22
Keyless Ignition Module Engine Control Module Body Control Module 120Ω 120Ω
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 23
CANL CANH 120Ω CAN Error Frame … For example like this. 0 overwrites 1. µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 24
120Ω CAN Error Frame The attacker can write that 0 over a 1. We just deleted the packet µcontroller
CAN controller CAN transceiver TXD RXD
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 25
1) Discover the ID of the victim 2) Detect the ID of the victim on the bus 3) Find a “1” (recessive) bit in the packet 4) Overwrite it with a 0 5) Repeat 32 consecutive times
e.g., Reverse engineer the CAN IDs of an identical vehicle
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 26
e.g., read all IDs passing on the bus 1) Discover the ID of the victim 2) Detect the ID of the victim on the bus 3) Find a “1” (recessive) bit in the packet 4) Overwrite it with a 0 5) Repeat 32 consecutive times
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 27
CRC delimiter is “1” by design 1) Discover the ID of the victim 2) Detect the ID of the victim on the bus 3) Find a “1” (recessive) bit in the packet 4) Overwrite it with a 0 5) Repeat 32 consecutive times
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 28
This triggers an error generated by the victim 1) Discover the ID of the victim 2) Detect the ID of the victim on the bus 3) Find a “1” (recessive) bit in the packet 4) Overwrite it with a 0 5) Repeat 32 consecutive times
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 29
This kind of error adds +8 to the counter of the victim 1) Discover the ID of the victim 2) Detect the ID of the victim on the bus 3) Find a “1” (recessive) bit in the packet 4) Overwrite it with a 0 5) Repeat 32 consecutive times
Error Active Bus Ofg Error Passive Counter > 127 Counter > 255 8x32 = 256
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 30
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 31
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 32
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 33
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 34
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 35
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 36
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io
37
120Ω 120Ω Engine Control Module Keyless Ignition Module Turn On! Nope!
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io
38
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io
Keyless Ignition Module Engine Control Module Body Control Module CANL CANH 120Ω 120Ω
39
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 40
40
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 42
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 43
Bus Victim 1
Attacker 1 Victim 2 Attacker 2
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 44
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 45
CopyCAN: An Error-Handling Protocol based Intrusion Detection System for Controller Area Network Stefano Longari, Matteo Penco, Michele Carminati and Stefano Zanero CPS-SPC 2019 (ACM Workshop on Cyber-Physical Systems Security & Privacy) - To Appear ascarecrowhat.github.io for the draft
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 46
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 47
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 48
26.9.2019 Stefano Zanero - Stefano Longari @Hardwear.io 49