Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,405 views

Published on

IoTSecJP 第二回でお話させて頂いた資料です。

Published in: Engineering
  • Be the first to comment

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

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

×