SlideShare a Scribd company logo
1 of 43
Download to read offline
自動車ってどうやってハッキングするんですか?
@IoTSecJP #2
tokina (ひみつ) @_tokina23
How can I Hack a Car myself?
Agenda
❖ 自己紹介
❖ 自動車セキュリティってなに?
❖ CANについて
❖ 自動車セキュリティニュース!
❖ わたし(ひみつさん)がやってきたこと
❖ 実践!自動車ミニハック
❖ ➔LAC様がきっとお話してくれているはず…
自己紹介
❖ はじめまして、あけましておめでとうございます!
❖ Twitter::@_tokina23、呼び方:ひみつさん
❖ 所属:電気通信大学大学院 M1 (広島市立大学卒業)
❖ SecHack365 @2017年度 参加
❖ 趣味:英語、登山、麻雀、旅行、写真、プログラミング、ビットコインなど
❖ 得意分野:クラウド(AWSメイン)、自動車セキュリティ(CANを中心)
❖ ※就職活動中です(小声)
tokina (ひみつ)
CAN攻撃経験ある自動車
<ひみつだよ>
自動車のハッキングってなに?
最近良く聞くけど・・・
何から始めればいいのか・・・
❖ (将来) ITS (Intelligent Transport System)、など
❖ ナビ(インフォテインメント)
❖ 携帯回線, WiFi, Bluetooth
❖ USB端子
❖ CD/DVD, Audio,
❖ OBDポート(CAN)
❖ キーフォブ
❖ 各種物理センサ
❖ 各コンピュータ(ECU)
❖ ECU鍵の取り出し(サイドチャネル攻撃, ファームウェアダンピング,,)
幅広い自動車セキュリティ
影響・範囲
大
小
車載ネットワークってなに
❖ 自動車に搭載されているから車載ネットワーク:In-vehicle Network
❖ 様々な種類が存在
❖ CAN ➔ 制御系
❖ MOST ➔ ナビ系
❖ LIN ➔ 短距離系
❖ 窓、など
❖ Ethernet ➔ ナビ系
❖ 高速通信向け
引用:https://www.renesas.com/ja-jp/solutions/automotive/technology/networking.html
CANって聞いたことあるけど・・・
CANについて詳しく解説します
CAN (Controller Area Network)
❖ 現在自動車で最も利用されているネットワークプロトコル
❖ 主に自動車の制御系に利用される
❖ 通信はブロードキャストのみ
❖ 通信速度(baudrate)は500kpbsと低速
❖ Frameについて
❖ dominant (0)とrecessive (1)ビットのみで構成 (通常16進数で表記)
❖ 宛先アドレスのみ(CAN ID)をもつ (最大11bit; ~0x7FF)
❖ データ長 (DLC) 4bit、データ部 8byte
❖ CANバスでは0が優先される
❖ ➔DoS攻撃に弱い!(バスがすぐにいっぱいになる
)
❖ ➔送信元アドレスがないのでなりすましを判断不可
!
❖ ➔セキュリティ機能を付加しづらい!!
❖ もうちょっと詳しく
https://en.wikipedia.org/wiki/CAN_bus
CAN-Frame before and after the addition of stufbits (in purple)
基本Frame
bitstuffed
Frame
(実際)
High0&Low0=1
Others=0
0を優先
0が6bit連続することを許さない
CANバスのイメージ
バスに流れている情報をSnif可能
ID 0x20
ID 0x32
ID 0x20F
ID 0x45F
ID 0x23
ID 0x22
ID 0x200
ID 0x220
ID 0x250台
アナライザなどを接続
❖ 実際にどんな感じなんですか?
candumpの例
引用:https://twitter.com/InfinitelyManic/status/778423162941820928
ASCII表示16進数
気になる方はcan-utilsで検索してみてください
❖ Q. え・・・なんでそんなのがまだ利用されているんですか?
❖ A. 移行コストが莫大にかかるからです
各種サプライヤーさんもいい顔しないし・・・
❖ Q. じゃあどうすればいいですか?
❖ A. とりあえずの解決策として、ゲートウェイの導入が進んでいます。
さらに次のステップとしてMAC認証が検討されています。
理想としては、Ethernetへの移行などがあげられるでしょう。
最近良く聞く自動車セキュリティ
自動車セキュリティのニュースについて振り返りましょう
https://blog.kaspersky.co.jp/blackhat-jeep-cherokee-hack-explained/8480/
実際の論文:http://illmatics.com/Remote%20Car%20Hacking.pdf
❖ Jeep リコール問題 @2015 on Blackhat
https://www.youtube.com/watch?v=MK0SrxBC1xs
https://codeblue.jp/2017/result/
https://github.com/commaai/openpilot
❖ Gerge Hotz氏のCODE BLUE@2017登壇
ELM327
CANを変換するAPIの役割を果たすそうです
https://github.com/commaai/opendbc
https://community.comma.ai/cabana/#
リバースエンジニアリングツール
https://community.comma.ai/cabana/?demo=1
恐らくレーンキープ(オートクルーズ)機能を模擬
スマホ(EON)
基本的なオートクルーズのための制限だとおもいます😓
❖ 井上博之 先生 @広島市立大学
❖ CANを始め、自動車セキュリティに関する研究などを行っている
https://www.nikkan.co.jp/articles/view/00396292
2016/8/16
車載器
小型Linuxマシン
Arduino
Credential
❖ SecHack365での取り組みについて 詳しくはhttps://sechack365.nict.go.jp/
Credential
Lorem Ipsum Dolor
実践!自動車ミニハック
❖ ミニハックでやること
❖ MAC Book Airから自動車を流れるCANメッセージを覗く!!しかもWirelessに!
❖ 必要なもの
❖ 自動車 (そこら辺のディーラーへGO) ※OBDポートアリに限る
❖ Mac Book Air (Windows, LinuxでもOK)
❖ OBDドングル (Amazonとかでポチりましょう)※今回はBluetoothドングル
❖ ATコマンドについての知識 (ググりましょう)
❖ (おまけ)Pythonについての知識 (勉強しましょう)
!?!?!?!
❖ ※CDついてませんでした
❖ 自動車にOBDドングルを接続
❖ ハンドルの下とかにあります(たぶん)
❖ 自動車のエンジンを起動 (電源供給)
❖ MACからOBDドングルとペアリング
❖ OBD端子に接続するだけで電源ON
❖ うまくいかないときは何度か試しましょう
❖ Terminalから/dev配下にOBDが見えているか確認
❖ 今回はtty.OBDII-Portとして見えました
Bluetooth MAC Address: AA:BB:CC:11:22:33
PIN: 1234 (固定)
❖ cuコマンドを利用してボーレート115200で接続
❖ sudo cu -l /dev/tty.OBD-II-Port -s 115200
❖ Connected. とか出たらOK
❖ cuコマンドなので ~. でDisconnectできます
❖ (テスト)ATIコマンドでELM327チップのバージョンを確認
❖ ATコマンド
❖ ATZ ➔ 設定初期化
❖ ATL1 ➔ 改行コードを変更
❖ ATI ➔ コントローラのバージョン情報を返す
❖ ATH1 ➔ メッセージ全体を表示
❖ ATSPA6 ➔ CAN使用、11bitアドレス、500kbpsにバージョン変更
❖ ATRV ➔ 車両の電源電圧を返す
❖ ATMA ➔ 受信メッセージのダンプ
❖ ATDP ➔ 自動車が対応しているコマンド数を返す
その他コマンド一覧:
https://www.sparkfun.com/datasheets/Widgets/ELM327_AT_Commands.pdf
❖ ATDPで自分の自動車がどれだけ対応してるか確認
❖ 古い自動車ほど対応数がすくないはず
❖ ATSP6でバージョンを変更し、ATMAで流れているメッセージをモニタ
CAN ID
安いドングルなのでバッファが小さすぎてダンプが厳しい…
❖ Pythonで連続してダンプするプログラムを作成
import serial
import time
con = serial.Serial(‘/dev/tty.OBDII-Port’, 115200, timeout=10)
con.write("ATZ¥r")
time.sleep(1.0)
con.write("ATL1¥r")
con.write("ATH1¥r")
con.write("ATSPA6¥r")
time.sleep(0.1)
print "Waiting for CAN message ..."
con.write("ATMA¥r")
while 1:
str = con.readline().rstrip()
print str
if str == "BUFFER FULL":
con.write("ATMA¥r")
continue
これで繰り返しダンプできる!!
❖ (おまけ)PythonとOBDプロトコルで回転数と速度を取得してみる
❖ pip install obd をしておくこと
import obd
import time
import inspect
print 'Connecting to ...', obd.scan_serial()
connection = obd.OBD(baudrate=115200) # auto-connects to USB or RF port
print connection.port_name(), 'connected.'
while True:
response = connection.query(obd.commands.RPM)
print response.value
response = connection.query(obd.commands.SPEED)
print response.value
time.sleep(2.0)
CAN IDが不明でも情報取得ができる!
おまけ
❖ カーハッカーズ・ハンドブック(翻訳版)が販売開始しています(宣伝)
❖ 井上博之 先生(広島市立大学)ら 翻訳
❖ 私も一部翻訳を担当してるかも?
❖ 実はCarHacking Villege公式サイトに英語版が公開
❖ https://www.carhackingvillage.com
Hack your Car yourself!

More Related Content

What's hot

レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
Tokoroten Nakayama
 
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
Yoshiki Hayama
 
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
Yoshiki Hayama
 

What's hot (20)

自己紹介スライドショー201606
自己紹介スライドショー201606自己紹介スライドショー201606
自己紹介スライドショー201606
 
つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~つくらない ものづくり ~明日からできるリーンスタートアップ~
つくらない ものづくり ~明日からできるリーンスタートアップ~
 
B1-5 フィッシング詐欺についてフィッシングハンターが語らナイト!
B1-5 フィッシング詐欺についてフィッシングハンターが語らナイト!B1-5 フィッシング詐欺についてフィッシングハンターが語らナイト!
B1-5 フィッシング詐欺についてフィッシングハンターが語らナイト!
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
技術的負債との戦い方
技術的負債との戦い方技術的負債との戦い方
技術的負債との戦い方
 
スクラム入門ワークショップ
スクラム入門ワークショップスクラム入門ワークショップ
スクラム入門ワークショップ
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
高田工業所はcybozuになれるのか?
高田工業所はcybozuになれるのか?高田工業所はcybozuになれるのか?
高田工業所はcybozuになれるのか?
 
DAOの定義と仕組みについて.pdf
DAOの定義と仕組みについて.pdfDAOの定義と仕組みについて.pdf
DAOの定義と仕組みについて.pdf
 
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
 
事例で学ぶデザインの原則 by Life is Tech !
事例で学ぶデザインの原則 by Life is Tech !事例で学ぶデザインの原則 by Life is Tech !
事例で学ぶデザインの原則 by Life is Tech !
 
IoTで生き残れ!成功なんて結果論、こうすれば失敗します。プロ達が語る『IoT失敗あるある談』!!! | IoT ありがちな失敗パターンと 回避する方法
IoTで生き残れ!成功なんて結果論、こうすれば失敗します。プロ達が語る『IoT失敗あるある談』!!! | IoT ありがちな失敗パターンと 回避する方法IoTで生き残れ!成功なんて結果論、こうすれば失敗します。プロ達が語る『IoT失敗あるある談』!!! | IoT ありがちな失敗パターンと 回避する方法
IoTで生き残れ!成功なんて結果論、こうすれば失敗します。プロ達が語る『IoT失敗あるある談』!!! | IoT ありがちな失敗パターンと 回避する方法
 
ChatGPTがもたらす未来予測
ChatGPTがもたらす未来予測ChatGPTがもたらす未来予測
ChatGPTがもたらす未来予測
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
レガシーコード改善のススメ
レガシーコード改善のススメレガシーコード改善のススメ
レガシーコード改善のススメ
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
プレゼンの基本
プレゼンの基本プレゼンの基本
プレゼンの基本
 
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
プロトタイピングとユーザビリティテストで「UXデザイン」を練りあげよう! | UXデザイン基礎セミナー 第4回
 

自動車ってどうやってハッキングするんですか? @IoTSecJP #2 by @_tokina23