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

VCC 2025 Write-up

Avatar for bata_24 bata_24
September 30, 2025

VCC 2025 Write-up

Avatar for bata_24

bata_24

September 30, 2025
Tweet

More Decks by bata_24

Other Decks in Technology

Transcript

  1. 2

  2. 3

  3. 4 年 大会名 備考 2023 BlockHarbor Automotive CTF オンライン大会のみ 2024

    BlockHarbor VicOne Automotive CTF - Season 2 予選@オンライン 日本決勝@東京 (日本勢のみ) 国際決勝@デトロイト 2025 Vehicle Cybersecurity Competition 2025 オンライン大会のみ 但し日本勢のみこれを入口とした招待制大会あり
  4. 5

  5. 6 No. カテゴリ 問題名 点数 概要 1 - Agreement 0

    ルールを読んだかの確認 2 Blue Team Challenges #1 Red Alert 700 xNexus(SIEMみたいなサービス)で、怪しいCAN検知ログを探してフラグ抽出 3 Blue Team Challenges #2 SAE EAS 400 xNexus(SIEMみたいなサービス)で、怪しいCAN検知ログを探してフラグ抽出 4 Blue Team Challenges #3 Firmware Reveal 800 暗号化パスワードのブルートフォース 5 Blue Team Challenges #4 TARA Challenge 100 TARAを埋めて設問に答える 6 Red Team Challenges #1 Wired Keyless Entry [PowerPC] 400 セキュリティアクセスの突破→FWダンプ&解析→セキュリティアクセスの突破 7 Red Team Challenges #2 Tune-Up Trouble [PowerPC] 800 改造ファームウェアへの更新で任意コード実行 8 Red Team Challenges #3 Password Change Policy [RAMN] 600 FWダンプ&解析→セキュリティアクセスの突破 9 Red Team Challenges #4 AutoGraph [RAMN] 300 ECDSAを使った署名の偽造
  6. 7

  7. 8

  8. 9

  9. 27

  10. 28

  11. 31

  12. 33

  13. 34

  14. 35

  15. 36

  16. 38

  17. 39

  18. 44

  19. 45

  20. 46

  21. 47

  22. 48

  23. 49

  24. 51

  25. 52

  26. 53

  27. 54

  28. 55

  29. 56

  30. 57

  31. 58

  32. 59

  33. 60

  34. 61

  35. 62

  36. 64

  37. 65

  38. 67

  39. 68

  40. 69 ファンクション サブファンクション 備考 0x10 DIAGNOSTIC_SESSION_CONTROL 0x01 デフォルトセッション - 0x02

    プログラミングセッション 要セキュリティアクセス突破 (一般的に0x03から遷移) 0x03 拡張セッション 要セキュリティアクセス突破 (一般的に0x01から遷移) 0x11 ECU_RESET 0x01 Hard reset セキュリティアクセス不要 0x02 Off/On keying reset セキュリティアクセス不要 0x22 READ_DATA_BY_IDENTIFIER 0xf186 Active diagnostic session 01 0xf187 Manufacturer spare part number 'PN_B0NN3T¥x00' 0xf18a Identifier of system supplier 'AUDI' 0xf18b ECU manufacturing date '01292009' 0xf18c ECU serial number 'AUDI2009' 0xf190 Vehicle Identification Number '1BHCM82633A004527' 0x27 SECURITY_ACCESS 0x01/0x02 レベル0x01 デフォルトセッションから呼出可能 0x11/0x12 レベル0x11 デフォルトセッションでは未サポート 0x2C DYNAMICALLY_DEFINE_DATA_IDENTIFIER デフォルトセッションでは未サポート 0x3E TESTER_PRESENT 定期ping的な機能なので省略 0x22 RDBIで入手した情報を使って セキュリティアクセスレベル0x01 を突破する方針しかなさそう
  41. 70

  42. 74 ファンクション サブファンクション 備考 0x10 DIAGNOSTIC_SESSION_CONTROL 0x01 デフォルトセッション - 0x02

    プログラミングセッション 要セキュリティアクセス突破 (一般的に0x03から遷移) 0x03 拡張セッション - 0x11 ECU_RESET 0x01 Hard reset セキュリティアクセス不要 0x02 Off/On keying reset セキュリティアクセス不要 0x22 READ_DATA_BY_IDENTIFIER 0xf186 Active diagnostic session 01 0xf187 Manufacturer spare part number 'PN_B0NN3T¥x00' 0xf18a Identifier of system supplier 'AUDI' 0xf18b ECU manufacturing date '01292009' 0xf18c ECU serial number 'AUDI2009' 0xf190 Vehicle Identification Number '1BHCM82633A004527' 0x27 SECURITY_ACCESS 0x01/0x02 レベル0x01 デフォルトセッションから呼出可能 0x11/0x12 レベル0x11 拡張セッションから呼出可能 0x2C DYNAMICALLY_DEFINE_DATA_IDENTIFIER 利用可能 0x3E TESTER_PRESENT 定期ping的な機能なので省略 0x2C DDDI + 0x22 RDBIを使って、 ファームウェアをダンプ → 解析 して突破するっぽい
  43. 75

  44. 76

  45. 79

  46. 80

  47. 81

  48. 82

  49. 83

  50. 84

  51. 85

  52. 86

  53. 87

  54. 88

  55. 89

  56. 90

  57. 91

  58. 92

  59. 95

  60. 96

  61. 97

  62. 98

  63. 100 0x34 Request Download 0x36 Transfer Data 0x34 Routine Control

    署名 検証 0x36 Transfer Data 署名検証 0x36 Transfer Data 署名検証 署名検証 0x34 Routine Control
  64. 101 更新用ファームウェア (=fw) 128バイト署名(=s) 0x0 N N+0x80 SHA256(fw) 送るべきデータの構成 se

    mod N'を計算 (N'は先程のNとは別。アドレス0x1e0にある) 一致するか判定 このN'は素因数分解 できないため、暗号学 的には多分安全 この署名のついた構造は、 ダンプしたファームウェアの 0x40000~0x50000 がまさに該当
  65. 102

  66. 103 0x34 Request Download 0x36 Transfer Data 0x34 Request Download

    0x36 Transfer Data 0x34 Routine Control 正しいファームウェアイメージを転送 (最後まで送り切ることで、署名チェックを行わせ、 Signature Validフラグを立てる) 偽造したファームウェアイメージを転送 (最初から送り直すことで、更新用データを溜めておくバッファを上書き可能、 かつ最後まで送り切らなければ、署名チェックは行われない) 署名 検証
  67. 104 0x34 Request Download 0x36 Transfer Data 0x34 Request Download

    0x36 Transfer Data 0x34 Routine Control ここで書き込むべきデータは? 署名 検証
  68. 105 0x34 Request Download 0x36 Transfer Data 0x34 Request Download

    0x36 Transfer Data 0x34 Routine Control ここで書き込むべきコードは? 署名 検証 アセンブリ→バイトコードの変換は、自作のGEFの機能を使いました
  69. 106

  70. 109

  71. 110

  72. 112

  73. 113

  74. 121

  75. 122

  76. 123

  77. 124

  78. 130

  79. 132 右辺はすべて既知の値 kが求まればdが得られる 署名 𝑟𝑟, 𝑠𝑠 は 𝑟𝑟 = 𝑥𝑥

    mod 𝑁𝑁 𝑠𝑠 = 𝑘𝑘−1 Hash 𝑚𝑚 + 𝑟𝑟𝑟𝑟 mod 𝑁𝑁
  80. 134

  81. 135

  82. 136