世界を動かす技術を、日本語で。

クレジットカード端末でルートシェルを取得した方法

概要

本記事は、Worldline Yomani XR決済端末のリバースエンジニアリング調査記録。 分解・ファームウェア抽出・シリアルコンソール経由のrootシェル取得方法を解説。 ハードウェアのタンパー保護とソフトウェアの脆弱性の両面を分析。 最終的にセンシティブなデータへの直接的なリスクは限定的と結論。 調査の経緯と今後の課題、製造元への情報開示タイムラインも記載。

Worldline Yomani XR端末の初見と分解

  • 調査対象 はスイスで普及している Worldline Yomani XR決済端末
  • 端末のUI操作や ポートスキャン では有用な情報は得られず
  • 分解すると 堅牢な筐体と複数のPCB構成 を確認
  • メインSoCは カスタムASIC(Samoa II)、デュアルコアArmプロセッサ
  • 外部フラッシュRAM も搭載

タンパープロテクションの仕組み

  • 物理的な開封検知 はタンパースイッチではなく 基板間接続 で実現
  • Zebraストリップ による圧力検知、ネジを緩めただけでタンパーイベント発生
  • コイン電池 で電源断時もタンパー状態を保持
  • ジグザグ配線フレキ基板 による物理侵入検知
    • 1本でも銅線が切れると タンパー検出
    • カードスロット周囲 にも追加のタンパー保護

ファームウェア抽出と解析

  • 端末のフラッシュチップ をデサドルし、 ダンプ取得 に成功
  • データは 暗号化されておらず、独自のECCレイアウトを採用
  • YAFFS2ファイルシステム のメタデータが16バイトに縮小されており、 独自パッチ が必要
  • ダンプから Linux 3.6カーネル(Buildroot 2010.02) で動作していることが判明
  • カスタムブートローダー(Booter v1.7) を使用

シリアルコンソール経由でのrootシェル取得

  • デバッグコネクタ のパッドでシリアル信号を検出
  • ブートログ からLinuxの起動過程を観察
  • rootアカウント でパスワードなしログインが可能
  • タンパーメッセージ表示中 でもシステム操作が可能
  • シリアルポートは 筐体外部のハッチからアクセス可能
    • 端末を開封せずに rootシェル取得・マルウェア展開 が現実的

セキュリティ影響の再評価

  • Linux側からカードリーダーやディスプレイ等の直接制御不可
    • これらは mp1と呼ばれるセキュアプロセッサ で管理
    • Linux(mp2)は ネットワークやアップデート、業務ロジック のみ担当
  • セキュアブートローダー(loadercode) がタンパー状態を判定し、 暗号化・署名済みイメージ(mp1.img) を起動
  • rootシェル露出 は重大な攻撃面だが、 センシティブデータ流出の証拠なし

情報開示タイムライン

  • 2024/11/14 rootシェル発見
  • 2024/11/15 製造元へ報告、90日後公開予定と通知
  • 2024/11/18 製造元が受領を確認
  • 2025/06/01 公開

結論・考察

  • rootシェル露出 は設計上の大きな過失だが、 決済情報の安全性は維持
  • ファームウェアバージョンの特定不可、rootログイン無効な端末も存在
  • デバッグ機能が誤って製品版に混入した可能性
  • さらなる解析余地 あり、挑戦者を歓迎
  • 関係者への感謝 と今後の展望

Hackerたちの意見

ブラボー!ハードウェアの制限を利用したり回避したりする方法を考えるのが大好きなんだけど、ここにある広範な改ざん防止機能が発動したら終わりだと思ってた。でも、どうやらそうじゃないみたい。まだいろんな面白い部分が残ってるみたいだね。セキュアな部分がちゃんと無効化されるのは納得できるけど、そうじゃないと設計者に全く信頼を持てなくなるからね。

強化されたプロセッサーについては、まだその通りかもね。TFAが指摘してる通り、ここで妥協されたのはそれじゃないみたい。> 「...テキスト文字列だけがバイナリ(display_tool)に渡されて、いくつかのプロセッサ間メッセージを発行している。」キーパッドやカードリーダー自体も同じだね。これらの周辺機器がLinuxから直接アクセスできる証拠は見つからなかったよ。> 「その代わり、mp1と呼ばれる全く別のプロセッサーが、カードの処理やPINの取得、画面への情報表示などの“セキュア”なことを扱っているみたい。」“インセキュア”なLinuxは、2番目のプロセッサーmp2で動いていて、ネットワーキングやアップデート、ビジネスロジックだけを扱ってる。

説明からすると、Linux側が改ざんイベントの処理に何らかの役割を果たしているかもしれないけど、発生したことを確認するだけで済むといいな。そうじゃないと、最初にルートシェルを取得することで、改ざんイベントがセキュリティキーをクリアするのを防ぐチャンスが失われるかもしれない。

興奮しやすい人向けに:> 「公開されたルートシェルは、最初に恐れていたほどのリスクではないようだ。」...カードの詳細などの機密データがこの方法で危険にさらされる証拠は見つからなかったよ。セキュリティデザイナーには良い読み物だね。

物理的にターミナルにアクセスできるなら、クレジットカード番号を読み取れないなんてありえないと思う。セキュリティの観点から言うと、物理的アクセスと、ある程度のルートアクセスは、確実にハッキングできるってことと同じだよね。

簡単モードを試したいなら、新しいアンドロイドベースのクレジットカード端末をチェックしてみて。きっともっと楽しいと思うよ、特に画面でPINをタップするからね。おいしい!

それでPINを簡単に取得できるだろうけど、もし同じように設計されているなら(重要な部分がセキュアなセカンダリプロセッサーに渡される形で)、現代のカードはこういうことを防ぐためにカード上でたくさんの暗号処理をしているから、あまりできることはないよ。攻撃は、磁気カードリーダー以外のすべての支払いオプションが壊れている端末でしか通用しないけど、それらはPINプロンプトを見る前にスキマーアラートの警報を鳴らすはずだよ。

あなたのところでどんなAndroid端末があるのかはわからないけど、インドではAndroid Oreo(サポートは2021年1月に終了)が使われてるみたい。おいしそうだね!

ヨーロッパではどこにでもあるよ。スイスについては分からないけど、私が知ってるヨーロッパの大部分ではクレジットカードはあまり所有されてなかったり使われてなかったりする。これらはPOS、つまり販売時点管理システムと呼べるもので、いろんなカードを読み取れるんだ。それでも、いいまとめだね!

そうだよね。財布の中でカードを全部持ち歩くのが嫌で、いろんな理由でたくさん持ってるから(決済だけじゃない)、デビットカード用のスペースなんてないよ。さらにスマホやスマートウォッチに物を入れる魅力が全然わからない(良い機械式の方が好き)。失くしたらプライバシー的に大惨事になるしね。でも、これは私の意見だから。

(妥協された)Linuxが「妥協モード」のコードを読み込むか、mp1のセキュアシステムを読み込むかを決めるの?探る価値がありそうだね。ブートローダー自体はセキュアだと言ってるけど、実際にどこで実行されるかによっては、妥協された環境に読み込まれてもあまり意味がないよね。コプロセッサーは一種のセキュアエンクレーブと見なせるかもしれないけど、Linuxが別のブートローダーを読み込んでそれを(何とかして)実行できるという事実は心配だね。

いいえ、別のブートローダーを読み込むことはできません。ローダーコード(「セキュア」ブートローダー)をいじろうとしたけど、ブートしなかったから、何かのサードパーティ(ブートROM)がそれを確認しているんじゃないかと思ってる。それに、Linuxはタンパー状態に関係なく、常にローダーコードとmp1.imgを読み込むと思う。タンパー状態によって異なるコードパスは(整合性が保護された)ローダーコード内で取られるんだ。

Hacker Newsで議論の続きを見る