Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DEFCON CHV CTF 2025 Write-up

Avatar for bata_24 bata_24
September 26, 2025

DEFCON CHV CTF 2025 Write-up

Avatar for bata_24

bata_24

September 26, 2025
Tweet

More Decks by bata_24

Other Decks in Technology

Transcript

  1. 2

  2. 3

  3. 4 2025年の日程 ※BlackHatUSAは - 8/2-4: トレーニング - 8/5: サミットデイ -

    8/6-7: メインカンファレンス のように1週間ありますが、メインカンファレンスだ けでも十分。入場料は早割で2699ドル(約40 万円)とお高め。朝食と昼食が提供されます。 ※DEFCONは早割で540ドル(約8万円)。 昔は100ドルとかだったらしい。 ※Bsides LVは110ドル(約1.6万円)。
  4. 6

  5. 7 ブース ブース ブース ブース ブース ブース ブース CTF 運営席

    CTF運営席 ブース ブース ブース ブース ブース ブース ブース ブース テ ー ブ ル テ ー ブ ル テ ー ブ ル テ ー ブ ル テ ー ブ ル テ ー ブ ル テ ー ブ ル 机 机 机 机 机 机 実 機 問 実 機 問 実車をハッキング(解錠)するチャレンジ CTFの前から、座席確保という戦いが 始まっている。今年もなんとか確保 keyfobのペイロードを解析する チャレンジ(キャプチャも自分でやる) CAN問題とUSB問題が 同居するオリジナルデバイス
  6. 8

  7. 9 No. カテゴリ 問題名 作者 概要 現地要素 備考 1 -

    Don't trust in the tool ? ファームウェア中の画像探索 なし 2 - Weak rolling code Reverse Everything keyfobのペイロード解析 SDRデバイス必須 3 Rivian Remote Possibilities Rivian Rivian車の解錠チャレンジ (6ステージからなるシリーズ問題) ETHポートへ接続して解く Web 4 Rivian x509 Marks The Spot Rivian Linux環境調査 5 Rivian Trust but Don't Verify Rivian Web問に近い? 6 Rivian Characteristic Behavior Rivian 解けなかったため情報なし 7 Rivian Nonce Sense Rivian 解けなかったため情報なし 8 Rivian Read Write Between The Lines Rivian Web問に近い? 9 RBS XORry for being 4-getful Red Baloon Security 古典暗号を解く なし 10 RBS r0p 2 the t0p Red Baloon Security Pwn問 なし 11 RBS Can't stop the r0p Red Baloon Security エスパー要素の入ったPwn問 なし 12 CHALL Caffè Truncato DRIVESEC USBメモリを使ったexploitを作る 現地デバイスにUSBメモリを挿す 13 CHALL Utterly Deranged Server DRIVESEC UDSのセキュリティアクセス突破 現地デバイスとCAN通信 2ステージ(?)構成 14 CanQuest The Car Tunes Chronicles ETAS 壊れたFWを修正してOTA なし チュートリアル3問+本番1問 15 LISA Beyond ECU LISA (韓国;順天郷大学校) UDSのセキュリティアクセス突破 現地デバイスにWi-Fi経由で侵入 してCAN通信 2ステージ構成
  8. 10 開催年 イベント名称 出題数 備考 2025 DEFCON 33 15 2025からは問題が公募となった

    1問を解くために、複数ステージを解く必要がある問題が散見された 2024 DEFCON 32 15 2023 DEFCON 31 26 このあたりから問題数が減り、代わりに「作り込まれた問題」が増えた 「ググって答えるだけ」「コマンド叩いて答えるだけ」みたいな問題はほぼなくなった 2022 DEFCON 30 49 2021 DEFCON 29 ? コロナによりオンライン開催と現地大会の2本立て。現地大会には不参加のため情報なし 2020 DEFCON 28 61 2019 DEFCON 27 176 2018 DEFCON 26 78
  9. 14 No. 問題名 問題カテゴリ 問題文 解答状況 #1 Remote Possibilities Exploitation

    Pop a shell on the Rivian HIL #2 x509 Marks The Spot Exploitation [サイト上の問題文] Convince vehicle cloud you're a vehicle and have it give out information [机の上に貼ってあった問題文] Discover unwise security practices that allow users to connect to vehicle cloud #3 Trust but Don't Verify Reverse Engineering Convince vehicle cloud you're a vehicle and have it give out information ✘ #4 Characteristic Behavior Reverse Engineering Do Recon on the Rivian HIL to pivot into the vehicle ✘ #5 Nonce Sense Exploitation [サイト上の問題文] Use your knowledge of Flag 1-1 to unlock the vehicle [机の上に貼ってあった問題文] Abuse Bluetooth/TCM to unlock vehicle ✘ #6 Read Write Between The Lines Exploitation Build payload that convinces the cloud to unlock the vehicle ✘ 問題文が複数箇所にあった場合は、どちらも記載しています 番号は解説の都合で振り直しています
  10. 15

  11. 17 22/tcp ssh 443/tcp https 8000/tcp http-alt 8080/tcp http-proxy 172.28.2.64

    (Rivian HIL) 172.28.2.0/24 http-altやhttp-proxyなどと表示されているが、 nmapが機械的にこの様に報告しているだけで、 実際にどう使われているかはケースバイケース。 今回は8080で普通のhttpが動いていた
  12. 19

  13. 20

  14. 22

  15. 23

  16. 24

  17. 25

  18. 26

  19. 27 22/tcp ssh 80/tcp http 443/tcp https 3000/tcp ppp 172.28.2.64

    (Rivian HIL) 172.28.2.210 (車両クラウドを模したRaspi) 172.28.2.0/24 WebSocketで接続
  20. 28

  21. 30

  22. 32

  23. 33

  24. 34 172.28.2.0/24 172.28.1.0/24 172.28.2.64 (Rivian HIL) 172.28.1.64 (TCM) 172.28.1.x (???)

    Rivian HILがTCMの IPアドレスも持っている eth0 eth1 eth0 hci0 ? HIL(TCM)
  25. 35 172.28.2.0/24 172.28.1.0/24 172.28.2.64 (Rivian HIL) 172.28.1.64 (TCM) 172.28.1.73 (XMM-ANDROID)

    eth0 eth1 eth0 hci0 HIL(TCM) nats-server:7422/tcp parallax-controller:9826/tcp 7422/tcp と 9826/tcp が怪しい lsof -P -i -nで ポート番号に紐づいた プロセス名を特定できます (netstat -anptuはダメだった)
  26. 36

  27. 38

  28. 39

  29. 40

  30. 42

  31. 44 プレイリスト (m3u) USBフラッシュメモリ 音声ファイル (mp3など) backend mediaserver マウント proxy

    処理をトリガ タッチパネル操作 プレイリストを 処理する機能
  32. 45 mediaserver ①マウント + 音声 ファイル名 /mnt/usb/ ← /mnt/usb/<音声ファイル名> backend

    ③コピー元ファイルパス生成 ④/mnt/hddへコピー - シンボリックリンクはNG このとき、文字列格納先のバッファは50バイト。 BOFしないよう、最大49文字に切り詰めてしまう ②プレイリストに書かれた音声ファイル名のチェック - ファイル名は.mp3, .wavなどの音声系拡張子であること プレイリスト (m3u) USBフラッシュメモリ 音声ファイル (mp3など) 音声 ファイル名 ファイル名を切り詰めた結果、 /flag.txtを指すようにすればOK
  33. 46 #EXTM3U #EXTINF:-1,aaaaa bbbbbbbbbbbbbbbb/../../../../../flag.txt.mp3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.m3u USBフラッシュメモリ 空のディレクトリ bbbbbbbbbbbbbbbb ※音声ファイルは不要 dockerと現地環境が微妙に違い、

    作ったexploitが動かなくて苦労した (dockerでは../が4つでも動いたが、 現地では../が5つ必要だった) "/mnt/usb"を連結すると 53バイトとなり、末尾4バイ ト(=".mp3")が切り捨てら れフラグを指す
  34. 47

  35. 51

  36. 52

  37. 53

  38. 54

  39. 56

  40. 60

  41. 61

  42. 63

  43. 64

  44. 65

  45. 66

  46. 67

  47. 68

  48. 69

  49. 70

  50. 71

  51. 72

  52. 73

  53. 74

  54. 75

  55. 76

  56. 77