自動車セキュリティ(カーハック)知見まとめ
8月からAutomotive CTF対策のために自動車hackの勉強を自分なりにして記事にまとめてました。供養がてら公開します。最下部の子ページもまとめて良ければどうぞ!https://t.co/lzdJa5aj71 pic.twitter.com/wWuvZ35B2R
— Sho Nakatani (@laysakura) October 24, 2024
Automotive CTF 2024(グローバル予選・日本決勝・世界決勝)の対策として、自動車セキュリティの知見とか手を動かしたことを公開用Notionにまとめておりました。
Notion Siteで公開しているだけでは検索引っかかりにくいので、こちらにリンクとアウトラインを記載しておきます(2024/10/25時点。子ページやリンク先は勝手に更新する可能性があります)。
アウトライン紹介
メインページ(自動車セキュリティ (Car Hacking))
リンク: https://laysakura.notion.site/Car-Hacking-deca002ee9de42f89ba18ddcdb5c183a
- 自動車ハックのフロー
- フローチャート
- 行動の詳細
- [G1-a1, G2-a1, G3-a1] 解錠
- [G2-a2] 外装破壊 → CANバス物理接続
- [G2-a4] ECUのシェル取得 → PrivEsc → CANバス論理接続
- [G2-a3] CANで解錠
- [G3-a1] IG-ON
- [G4-a1] OBD2ポートに物理接続
- [G4-a2] 内装破壊 → CANバス物理接続
- [G5-a1] CANでECU・車体操作
- [G5-a2] UDSで情報収集
- [G5-a3] 診断ツールのリバースエンジニアリング
- [G5-a7, G5-a8] ECU外装破壊 → デバッグ回路接続
- [G5-a9, G5-a10] デバッグ回路からファームウェアダンプ・更新
- [G5-a4] UDSのSecurityAccess突破
- [G5-a5] UDSでファームウェアダンプ
- [G5-a6] UDSでファームウェア更新
- フロー作成時の参考文献
- 便利CAN / UDSツール
- 自作
- Caring Caribou
- 便利コマンド集
- CANダンプ
- ECU Reset
- USBシリアル通信
- Bluetooth
- 知識
- 規格上のUDSサービス
- CANのリプレイアタック
- UDS (OBD-II) のソースCAN ID, ディスティネーションCAN IDを特定する
- UDSでサポートされているサービスを列挙する
- 特定のUDSサービスでサポートされているsub funcを列挙する
- DiagnosticSessionControlのセッションをTesterPresentで維持する
- Read Memory By Identifier (0x22) サービスで、DIDと対応するメモリ値を列挙する
- SecurityAccessのシードを収集する
- Read Memory By Address でメモリダンプ
- ECUにファームを書き込む
- CANデータベース (.dbc)
- Car Hacking 学習リソース
- 全般
- CAN, UDSプロトコル
- 実車hack
- 車シミュレーター
- Car Hack情報源
- Car Hack CTF writeup
- 無線
- 子ページ
UDS基礎
リンク: https://laysakura.notion.site/UDS-ebe28870d7d84347a25757e19ea08f80
- 読み方
- 座学
- UDSによる診断の概要
- リクエスト
- ポジティブレスポンス
- ネガティブレスポンス
- DTC (Diagnostic Trouble Code)
- 演習(知り合いに講演したときに使ったメモ書き)
- Simulation VIN
- Engine Trouble?
- Secrets in Memory?
- Security Access Level 3
- More to do
ECU hack - スピードメーター編
リンク: https://laysakura.notion.site/ECU-hack-127e7f3e990d8022836fd15524b24794
- 調達したもの
- 動作させるまでの参考資料
- 構成・配線
- ソフトウェア準備(動作確認)
- CAN通信
- ODOメーター
- CANデータファジングをしてみる
- ファジングデータの生成
- ワンライナーでCAN IDを絞りながらリプレイ攻撃
- 前半(0x000 ~ 0x07F)を送る
- 後半(0x080 ~ 0x0FF)を送る
- 0x080 から 64 個送る
- 0x080 から 32 個送る
- 0xA0 から 32個送る
- … (省略)
- cansend で速度変える
- cangen で速度変える
- 応用: ブラウザGUIでメーター操作
- UDS
- Source ID, Destination ID 特定
- 対応サービス特定
- DID総当たり
- 手動
- TesterPresent
- DiagnosticSessionControl
- SecurityAccess
ECU動作用電源 (12V, 13A; ブレッドボード)
リンク: https://laysakura.notion.site/ECU-12V-13A-129e7f3e990d80e79a2bd1cf9a4cce73
- はじめに
- 機材
- 完成図と解説
- 使い方
SDR (ソフトウェア無線)
リンク: https://laysakura.notion.site/SDR-117e7f3e990d80cf9acfe11b9f83e69f
- 機材
- ソフトウェアについて前書き
- GNU RadioでFMラジオ受信
- radiocondaインストール
- 受信して聞くのみ: フローグラフ
- もっとリッチに: フローグラフ
- GqrxでFMラジオ受信
- 動作確認
- GqrxでヤリスのKey Fob解析
- Universal Radio HackerでヤリスのKey Fob詳細解析
シミュレーターでのCAN, UDS学習(Automotive CTF 2023 (Proving Grounds) - writeup)
- リソース
- 問題の場所
- 自動車hack・このシリーズのCTFに使えそうな知見まとめ
- 順位
- VSEC Garage: UDS Challenge
- Simulation VIN
- Startup Message
- Engine Trouble?
- Secrets in Memory?
- Security Access Level 3
- Security Access Level 1
- VSEC Garage: User Space Diagnostics
- Read Data By Identifier
- Routine Control
- Security Access Level 1
- Read Memory By Address
- Security Access Level 3
- Security Access Level 5
- Custom Firmware
- Web
- Sorry, But Your Princess is in Another Castle
- OSINT
- what is a great default password?
- Founding Fathers
- Getting Started
- Can you find the interface?
- Arbitration
- Data Field 1
- Data Field 2
- Message Frequency
- ICSim
- Unlock my door
- Speedometer Arbid
- Vehicle OSINT
- Finding a VIN
- Make and model
- Manufactured at?
- Imported when?
- Mac Track!
- Crypto
- pow pow!
- The IFP
- Holy Hell
- Pwn
- Sandbox Escaper
- Web Server Woes
- Steganography
- Alpha Beta Gamma Delta
- sadcarnoises
- Reversing
- Reversing #1
- Obscure.
Bluetooth学習(BLE CTF - writeup)
リンク: https://laysakura.notion.site/BLE-CTF-writeup-6e11a055619f4d78b636994d321c06c1
- セットアップ
- 参考文献
- 基本操作
- デバイスのMACアドレスを調べる
- characteristicからのread
- characteristicへのwrite
- notifyのlisten
- indicationの受信
- bettercap
- スコア確認
- フラグ提出方法
- Flag 1 - This flag is a gift and can only be obtained from reading the hint!
- Flag 0x002e - Learn how to read handles
- Flag 0x0030 Read handle puzzle fun
- Flag 0x0016 Learn about discoverable device attributes
- Flag 0x0032 Learn about reading and writing to handles
- Flag 0x0034 Learn about reading and writing ascii to handles
- Flag 0x0036 Learn about reading and writing hex to handles
- Flag 0x0038 Learn about reading and writing to handles differently
- Flag 0x003c Learn about write fuzzing
- Flag 0x003e Learn about read and write speeds
- Flag 0x0040 Learn about single response notifications
- Flag 0x0042 Learn about single response indicate
- Flag 0x0046 Learn about multi response notifications
- Flag 0x0048 Learn about multi response indicate
- Flag 0x004c Learn about BT client device attributes
- Flag 0x004e Learn about message sizes MTU
- Flag 0x0050 Learn about write responses
- Flag 0x0052 Hidden notify property
- Flag 0x0054 Use multiple handle properties
- Flag 0x0056 - OSINT the author!