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

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

概要

本記事は、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を読み込むと思う。タンパー状態によって異なるコードパスは(整合性が保護された)ローダーコード内で取られるんだ。

タンパーシールが作動したときに、ルートシェルが開かれることもあるかもしれないね。つまり、システムはセキュアモード(動作に必要な暗号鍵がすべて揃っている状態)か、デバッグや障害分析のためにルートシェルが開いている非セキュアモードのどちらかってこと。ただ、その移行の際に重要なプライベートキーが削除されちゃうんだ。

俺もそう思った。もしかしたら、新しいキーをフラッシュしてデバイスを再利用できるかもしれない?自分でターミナルを見つけられるか気になるな。もし実際に廃止されつつあるなら、中古のを見つけるのはそんなに難しくないかも。

何を見ているのかわからないってことを除けば、持ってるStripe M2リーダーの一つを開けて中を見てみたい衝動に駆られてる。でも、36台買った中で7台が「壊れた」んだ(2台は充電が持たない、1台はNFCがスキャンできない、4台は「改ざんされた」と報告されてる)。この脱落率は表面的にはかなり悪いけど、実際の使用頻度や年数を考えると、もっと深刻な話になる。デバイスは1〜3年使ってて(徐々に買ったから)、合計で最大9日間しか使ってないんだ [0]。そう、合計で9日間の使用で、36台中7台が何らかの形で故障したってわけ。あ、リーダーはすべてハードシェルケースにフォームインサート(リーダー1台につき1スロット)を入れて移動してるから、扱いには気を使ってるよ。正直、M2リーダーはあまり好きじゃないけど、今のところはこれがベストな選択なんだ :/ [0] ちょっと背景を説明すると、私の会社はフェスティバルの決済を担当してる。イベントに出向いて、対面での決済(ほとんどはウェブやアプリで行われる)をiPadとM2リーダーで処理してるから、3年間で「使用日数」がこんなに少ないんだ。

次のショーのために保管する前に、必ず充電しておくべきだね。ほとんどのバッテリーは、低い充電状態で長期間保管されるのを好まないから。タンパーも機能するバッテリーが必要だと思うよ。

若いプレイヤーたちへ:これが「Hacker News」でのハッカーの意味だよ。これは基本中の基本で、すごくシンプルに説明されてるから、典型的な旅のステップバイステップの例として素晴らしい。もっと知りたいならHack-a-dayにはこういうのがたくさんあるよ。著者は明らかに好奇心が強く、最初から多くのことを知っているね。作業の裏側は、関わるチップのデータシートを調べたり、壊さずにチップをはんだ付け外したり、メモリの場合はワイヤーで再はんだ付けして、アクセスが遅くてワイヤーの長さで問題なく動作することを期待したり、直感に従って試行錯誤したり、次回のためにピンホールカメラみたいなものを使って浅い穴を開けて、改ざんの痕跡を探す可能性を考えたりすることだね。他の人も言ってたけど、著者がタンパーチェックを突破して、普通に動作するかどうかを確認したら面白いだろうね。まあ、そういうこともあるよね!

最初の文には同意だわ。今日もう一つLLMラッパーが出たら、死んじゃう。

2ドルのUSBカードリーダーで偽のデビット/クレジットカード取引ができるよ。仕様はここに全部載ってて、プロトコルも公開されてる(確か5000ページくらいのPDFがあって、読むのは面倒くさい)。でも、その取引を確認するには、インターネット経由で銀行に送らなきゃいけないし、そうすると連邦捜査局やFBIが訪ねてくることになるよ。カードリーダーには本当の保護がない(ほとんどがLinuxを使ってて、パスワードもクソみたいに弱い)。保護は店舗と銀行の契約や規制から来てるんだ。

フィールドでカードリーダーが危険にさらされて、キャッシュされた本物のクレジットカード情報を読み取られる方が心配だな。あるいは、何かのインターセプトマルウェアをインストールされるとか。(この特定のケースでは難しいみたいだけど、研究がこの分野で重要だってことには変わりないよね。)

ほとんどのPOSデバイスは「オフライン」決済を受け付けなくなってると思ってた。

カードリーダーには実際の保護がない(ほとんどが小さなクソパスワードのLinuxを使ってる)。保護は店舗と銀行の間の契約や規制から来ている。これは違うと思う。マーチャントターミナルには、銀行やインターチェンジキーを保存するための安全なハードウェアが埋め込まれている。もしそのキーが漏れたら、誰かが正当な取引を偽造できるかもしれない。

2ドルのUSBカードリーダーで偽のデビット/クレジットカード取引ができるって聞いたけど、「どうやってやるの?」って聞いてるわけじゃないから、もうちょっと詳しく説明してくれない?

それをやると連邦捜査局やらなんやらが来るよって言ってるけど、その証拠はあるの?それともただ人を脅かそうとしてるだけ?もっと大きなグループが注目される可能性もあるし、単一の詐欺取引なんてただの雑音だと思うんだけど。

カードリーダーには実際の保護がないよ(ほとんどがLinuxを使ってて、パスワードもクソみたいに弱い)。いや、実際にはあるよ:署名されたバイナリしか実行できないし、実行可能なファイルシステムは読み取り専用だし、データファイルシステムにはnoexecビットが設定されてるし、rootログインは無効だし、機能が欠けたbusyboxは多くの機能を失ってるし、キーは起動時に安全なエリアから読み込まれるし、マスターキーの注入は工場出荷時のみ可能だし、起動自体はある程度安全だし、改ざん検出があればチップが無効化されるし、などなど。確かに、アジアから輸入した安い非EMV認証のAndroid端末なら、標準的なLinuxを使ってるだろうし、rwのルートファイルシステムで、rootログインも有効で、アプリケーションを実行するためのユーザー名にはsudoも有効だし、改ざん検出は存在しないし、画面キャストもロックされてないし、ポートは全部開放可能で、busyboxはほぼ完全だろうね。ソース:俺。数年間、カード取得用のEMVアプリケーションを開発してた(今もたまにやってる)。開発モードでも(ベンダーが開発者のIDを提供する必要がある)、これらのことはしっかりとロックダウンされてるよ。

これを調べるのは面白いけど…なんでいきなり開けて、改ざん状態をトリガーしちゃうの?ほとんどのリーダーにはそういうのがあるって知らなかったのかな?改ざん状態での実際のテストは意味がないかもしれない。もしかしたら、リセット目的で改ざん状態がトリガーされた後にシェルが使えるのかも。開けるのが最後の手段だと思うんだけど。

まずは自分が扱っているものを理解しないといけないと思ったんだ。ハードウェア、SoC、インターフェース、フラッシュとか…そうじゃないと全然わからないから。でも、振り返ってみれば、デバッグコネクタにタッチすれば済んだかもしれない。いや、実は改ざんされてない2台目のやつでもシェルを取れたよ。