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

Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイcvpaper. challenge
 
Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Masato Fujitake
 
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>仕事で使うChatGPT—ディレクター・プランナーの<勉強会>
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>kotobato
 
myCobotがある生活
myCobotがある生活myCobotがある生活
myCobotがある生活Ryo Kabutan
 
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」嶋 是一 (Yoshikazu SHIMA)
 
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~SSII
 
[part 1]ナレッジグラフ推論チャレンジ・Tech Live!
[part 1]ナレッジグラフ推論チャレンジ・Tech Live![part 1]ナレッジグラフ推論チャレンジ・Tech Live!
[part 1]ナレッジグラフ推論チャレンジ・Tech Live!KnowledgeGraph
 
落合陽一 筑波大 講演資料 10月17日
落合陽一 筑波大 講演資料 10月17日落合陽一 筑波大 講演資料 10月17日
落合陽一 筑波大 講演資料 10月17日Yoichi Ochiai
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Yoshitaka Ushiku
 
エンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなしエンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなしYasunori Nihei
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
AI初心者だった私が E資格取得して専門職に転職した話
AI初心者だった私が E資格取得して専門職に転職した話AI初心者だった私が E資格取得して専門職に転職した話
AI初心者だった私が E資格取得して専門職に転職した話川上 詩織
 
SES2020 IoTアーキテクチャ・デザインパターン
SES2020 IoTアーキテクチャ・デザインパターンSES2020 IoTアーキテクチャ・デザインパターン
SES2020 IoTアーキテクチャ・デザインパターンHironori Washizaki
 
Invariant Information Clustering for Unsupervised Image Classification and Se...
Invariant Information Clustering for Unsupervised Image Classification and Se...Invariant Information Clustering for Unsupervised Image Classification and Se...
Invariant Information Clustering for Unsupervised Image Classification and Se...harmonylab
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話yaegashi
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveTokoroten Nakayama
 

What's hot (20)

Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
 
Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Pythonでターミナルに画像表示
Pythonでターミナルに画像表示
 
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>仕事で使うChatGPT—ディレクター・プランナーの<勉強会>
仕事で使うChatGPT—ディレクター・プランナーの<勉強会>
 
myCobotがある生活
myCobotがある生活myCobotがある生活
myCobotがある生活
 
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」
第1回 GPT / ジェネレーティブAI 勉強会「ChatGPTでMML音楽を奏でてみた&LLMで思うこと」
 
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~
SSII2019TS: プロジェクタ・カメラシステムが変わる! ~時間同期の制御で広がる応用~
 
[part 1]ナレッジグラフ推論チャレンジ・Tech Live!
[part 1]ナレッジグラフ推論チャレンジ・Tech Live![part 1]ナレッジグラフ推論チャレンジ・Tech Live!
[part 1]ナレッジグラフ推論チャレンジ・Tech Live!
 
落合陽一 筑波大 講演資料 10月17日
落合陽一 筑波大 講演資料 10月17日落合陽一 筑波大 講演資料 10月17日
落合陽一 筑波大 講演資料 10月17日
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
 
エンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなしエンジニアも知っておきたいAI倫理のはなし
エンジニアも知っておきたいAI倫理のはなし
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
AI初心者だった私が E資格取得して専門職に転職した話
AI初心者だった私が E資格取得して専門職に転職した話AI初心者だった私が E資格取得して専門職に転職した話
AI初心者だった私が E資格取得して専門職に転職した話
 
SES2020 IoTアーキテクチャ・デザインパターン
SES2020 IoTアーキテクチャ・デザインパターンSES2020 IoTアーキテクチャ・デザインパターン
SES2020 IoTアーキテクチャ・デザインパターン
 
Invariant Information Clustering for Unsupervised Image Classification and Se...
Invariant Information Clustering for Unsupervised Image Classification and Se...Invariant Information Clustering for Unsupervised Image Classification and Se...
Invariant Information Clustering for Unsupervised Image Classification and Se...
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
ctypes拡張モジュール
ctypes拡張モジュールctypes拡張モジュール
ctypes拡張モジュール
 
AI最前線2022
AI最前線2022AI最前線2022
AI最前線2022
 

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