01 彼らはあなたの作品の学生でした
『バッドガイズ2』には、セキュリティ専門家なら誰もが息を呑むようなセリフがある。バッドガールズ――キティ・キャット、ピッグテール・ペトロヴァ、ドゥーム――が初めて姿を現す時、彼女たちは圧倒的な火力や最新技術を携えて颯爽と現れるわけではない。彼女たちは崇拝者として、ファンとして、映画が言うところの「彼らの仕事の生徒」として現れるのだ。彼女たちはバッドガイズを徹底的に研究し、彼らの特徴を再現し、動きを予測し、関係性を悪用できるほどだ。バッドガイズがようやく事態を理解した時には、ゲームはすでに終わっている。情報格差は、オープニングシーンが始まる前からすでに確定していたのだ。
攻撃者たちは既にあなたの研究成果を研究していた。彼らはあなたのバイナリファイルを入手していた。しかし、そうした偵察活動はログには一切記録されていなかった。
それは巧妙な映画的演出などではない。それは過去10年間に発生したあらゆる深刻なアプリケーションセキュリティ侵害の実態を描写しているに過ぎない。
攻撃者たちは既にあなたの作品を研究していました。彼らはあなたのバイナリを入手し、時間的制約も警報システムもなく、好きな時にオフラインで逆アセンブラやデバッガを使って実行していました。彼らはあなたの暗号鍵、認証ロジック、API呼び出しパターン、そして(もしあれば)難読化手法まで知っていました。彼らはあなたの開発者のほとんどよりも、あなたのアプリケーションをよく理解していたのです。しかも、こうした偵察活動はログには一切記録されませんでした。
問題は、あなたのアプリケーションでこれが起こっているかどうかではありません。実際に起こっています。問題は、彼らが調査した際に何を発見するかです。
02 情報の非対称性こそが真の問題である
情報非対称性とは、取引の一方の当事者が他方の当事者よりもはるかに多くの情報を持っている状況を説明するために経済学者が用いる概念である。ジョージ・アカーロフは、情報非対称性が市場を破壊する仕組みを研究し、2001年にノーベル賞を受賞した。彼の有名な例は中古車市場で、売り手は車の本当の状態を知っているが買い手は知らないため、市場は不良品で溢れかえるという現象が起こる。より多くの情報を持つ側が体系的に勝つのは、彼らがより賢いからではなく、相手が知らないことを知っているからである。
アプリケーションセキュリティにおいては、非対称性は出荷時点から完全に攻撃者の側に有利に働きます。攻撃者はバイナリを入手します。バイナリには、あなたのロジック、キー、秘密情報、信頼の前提が含まれています。攻撃者は制約なくそれを検証できます。開発者であるあなたは、アプリケーションがあなたの環境から出荷された後は、攻撃者があなたのアプリケーションで何をしているのかを知ることはできません。あなたはログを受け取ることができますが、攻撃者はあなたが出荷したすべてのものについて、ソースコードと同等の可視性を得ます。
これは仮説ではありません。現代の逆コンパイラと逆アセンブラは、20年前には考えられなかったほどリバースエンジニアリングを民主化しました。無料で利用できるツールを持つ有能なアナリストであれば、モバイルアプリケーションを解析し、難読化レイヤーを半日で除去し、ハードコードされたキーを数時間以内に抽出し、アプリケーションのサーバー通信インターフェース全体を1~2日でマッピングすることができます。ツールは洗練されており、ドキュメントも充実しています。これらのツールに関するコミュニティも活発です。
悪女たちは悪党たちより賢くなる必要はなかった。悪党たちが彼女たちについて持っている情報よりも、彼女たちが悪党たちについて持っている情報の方が多ければよかったのだ。映画では、その非対称性は忍耐強い観察と調査によって築かれた。アプリケーションセキュリティにおいては、攻撃者はアプリストアからアプリをダウンロードした瞬間に、その非対称性を築き上げるのだ。
03 クリムゾン・ポー問題:秘密が箱から漏れたとき
『バッドガイズ2』で最も教訓的な場面は、強盗シーンそのものではない。それは、映像だ。
ダイアン・フォクシントン知事には秘密の正体がある。それは、かつて犯罪者として名乗っていた「クリムゾン・ポー」というもう一つの顔だ。その秘密は何年も厳重に守られてきた。それは彼女の公的権威、政治的正当性、そしてウルフとの関係の基盤となっている。あらゆる意味で、それは暗号鍵であり、信頼関係全体が依拠する隠された情報なのだ。
キティ・キャットはその映像を入手していた。彼女はそれを脅迫材料として使い、悪党たちを脅して強盗計画に協力させる。クライマックスで、ウルフが映像が入ったUSBメモリを取り戻したと思った時、キティはそれをインターネットにアップロードしてしまう。ダイアンの正体は世界中に知れ渡ってしまう。脅迫の価値は消え失せるが、同時にその秘密が守っていた全てが崩れ去る。知事の信用、彼女の人間関係、そして政治生命――全てはその秘密が隠されたままでいることに依存していた――全てが同時に崩壊するのだ。
これはまさに、アプリケーションから暗号鍵が抽出された場合に起こる現象です。
鍵は秘密そのものだ。秘密こそが信頼システムの基盤となる。一度漏洩してしまえば、つまり攻撃者がそれを手に入れてしまえば、どんな対応をしても無意味だ。漏洩は非対称かつ不可逆的である。鍵をローテーションしたり、アプリケーションにパッチを適用したり、証明書を失効させたりしても、攻撃者は既に必要なものを手に入れているのだ。
ウルフの誤りは、フラッシュドライブを所有しているからといって秘密を制御できると思い込んだことだった。秘密は既に箱から漏れていたのだ。モバイルアプリやウェブアプリの開発において、この誤りは構造的なものだ。バイナリに埋め込まれた鍵は秘密ではない。それは時間差で公開される情報に過ぎない。その時間差とは、有能なアナリストが調べるまでの時間である。
04 フラッシュドライブの幻想
アプリケーションセキュリティの考え方において、常に現れる失敗パターンがあります。それは、コンテナと秘密を混同することです。組織は、鍵のセキュリティは、鍵を保管した場所のセキュリティによって決まるかのように鍵を扱います。ハードウェアセキュリティモジュール?安全。暗号化されたキー保管庫?安全。モバイルアプリケーションのバイナリにハードコード?まあ、サードパーティの難読化ツールを使ったので…
ウルフは、そのUSBメモリが映像だと信じていた。キティは既にコピーを作成し、アップロードのキューに登録していた。物理的な証拠品は小道具だった。仮の証拠品。ウルフが実際の映像を探すのをやめるように渡すためのものだった。実際の映像は、ウルフには見えないインフラ上に既に存在していたのだ。
難読化とはフラッシュドライブのことだ。映像そのものではない。
これは業界が繰り返し学びながらも忘れてしまう点だ。難読化によってリバースエンジニアリングは難しくなり、コストも上昇する。脅威モデルによっては、コスト上昇は有効な防御策となる。しかし、十分な動機を持つ攻撃者――国家、組織的な金融犯罪組織、資金力のある競合他社など――にとって、難読化は防御ではなく、単なる遅延に過ぎない。鍵は依然としてバイナリの中に存在する。熟練したアナリストなら必ず見つけ出すだろう。3時間ではなく3日かかるかもしれないが、結果は同じだ。
古典暗号は、アルゴリズムは公開され、鍵は秘密であるという前提に基づいて設計されました。現代の暗号化の理論的枠組み全体は、この前提が成り立つ限りにおいてのみ有効です。攻撃者が制御するハードウェア上でアプリケーションが実行される環境(あらゆるモバイルデバイス、あらゆるIoTエンドポイント、あらゆるクライアントアプリケーション)では、この前提は成り立ちません。鍵はバイナリデータの中に隠されているからです。
時間とツールさえあれば、見つけることは可能です。鍵抽出に耐えうる暗号アーキテクチャは、鍵抽出によって何の有用な情報も得られないものだけです。
05 スーザンは決してスーザンではなかった:情報抽出チャネルとしての内部脅威
スネークの恋人「スーザン」はドゥームだ。彼女は脅威には見えない。むしろ、恋人同士のように見える。バッドガイズの作戦からますます遠ざかっていたスネークは、まさに彼女が必要とするアクセス権を培ってきた人物と時間を共有している。彼女は境界線を突破する必要はない。彼女は境界線の内側にいるのだ。スネークは彼女を中に入れた。
内部の立場を利用することは、映画でも現実世界でも最も確実な攻撃手段の一つである。バッドガールズは外部からの攻撃でバッドガイズを弱体化させる必要はなかった。彼女たちが必要としていたのは、ネットワーク内の信頼できる人物であり、スネークは知らず知らずのうちにその役割を果たしていたのだ。
アプリケーションセキュリティにおいて、これはサプライチェーンに直接関係します。強化されたアプリケーションに対する最も危険な攻撃経路は、アプリケーション自体ではなく、アプリケーションが信頼しているものです。サードパーティのSDK、オープンソースの依存関係、APIサービス、分析パッケージなど、アプリケーションが実行時に初期化するすべての外部ライブラリは、原則として、アプリケーションの実行時状態へのアクセス権を、アプリケーション自身のコードと同様に持ちます。そのライブラリが侵害された場合、あるいは最初から悪意のあるものであった場合、アプリケーション自身のコードベース全体で構築してきた信頼関係は無意味になります。
その 2020年SolarWinds侵害 インフラストラクチャレベルでの典型的な例は、ビルドシステムが侵害され、信頼できるチャネルを通じて悪意のあるアップデートが数千もの組織に配布されたケースです。しかし、このパターンはモバイルアプリケーションにも日常的に適用されています。正規のベンダーからモバイルSDKが買収され、新しい所有者がデータ漏洩を組み込んだアップデートをリリースします。そのSDKを自動的にダウンロードしたすべてのアプリケーションは、構築時の信頼関係の前提を全て侵害するコードを実行することになります。境界は侵害されていません。信頼関係そのものが攻撃の標的となったのです。
スーザンは決してスーザンではなかった。あなたの分析SDKは、あなたの分析SDKではないかもしれない。
06 ピッグテールはあなたのサインを知っている
悪女グループ「バッドガールズ」の中でも、イノシシの技師として知られるピッグテール・ペトロワは、この映画で最も技術的に興味深いキャラクターだ。彼女は悪党たちを陥れた張本人であり、その手口は力ずくではなく、模倣によって成し遂げた。彼女は悪党たちの犯行手口――彼らの特徴、アプローチ、癖――を徹底的に研究し、彼らの犯行と見分けがつかないほどそっくりな犯罪を作り出すことができた。ピッグテールが彼らの行動を機能レベルで模倣できたため、悪党たちは自分たちが犯していない強盗事件の罪を着せられたのだ。
これは、競合情報収集のためのリバースエンジニアリングの一種である。また、高度な金融攻撃者がアプリケーション認証システムに対して行う手法でもある。
攻撃者がモバイルバンキングアプリケーションを完全にリバースエンジニアリングすると、単に鍵を見つけるだけではありません。動作も把握します。正当なセッションを構成する一連のAPI呼び出しを理解し、アプリケーションがサーバーに対して認証を証明するために使用するチャレンジレスポンスプロトコルを理解します。アプリケーションが送信するデバイステレメトリ、含まれるヘッダー、通常の使用を特徴付けるタイミングパターンも理解します。これらの情報に基づいて、サーバー側の検証を通過できるほどアプリケーションの動作を忠実に模倣する合成クライアントであるエミュレーターを構築できます。
サーバーは、正規のアプリケーションから送信されたように見えるリクエストを受信します。攻撃者は正規のリクエストの署名をリバースエンジニアリングして複製しているため、これらのリクエストは法医学的に正規のリクエストと区別できません。不正行為は、不正パターン自体が検出可能になるまで目に見えず、その頃には攻撃者はすでに数千件のトランザクションを実行しています。
07 マクガフィネントと真の目標
映画製作者たちは、金を引き寄せる磁力を持つ希少金属をマクガフィンと名付けることで、観客の笑いを誘った。このジョークはヒッチコック作品へのオマージュだ。マクガフィンとは、その本質的な意義に関わらず、物語の展開上、登場人物全員が欲しがるようになるもののことを指す。マクガフィンはあくまで口実であり、真の目的は多国籍宇宙ステーションから世界中の金をすべて抜き取ることだ。この手の込んだ強盗計画は、全く異なる規模で展開される真の目的のための準備段階に過ぎない。
セキュリティチームはマクガフィニットを守るための訓練を受けている。攻撃者は別のものを求めている。
攻撃者がモバイルアプリケーションをリバースエンジニアリングする場合、当然の目的は暗号鍵の入手です。しかし、鍵は単なる暗号鍵ではありません。攻撃者が本当に求めているのは、大規模な認証トークンを生成し、数百万人のユーザーのアカウントを乗っ取る能力かもしれません。あるいは、証明書のピン留めをトリガーすることなく、転送中の金融データを傍受・改ざんする能力かもしれません。さらに、アプリケーションのIDを複製してバックエンドサービスに直接アクセスし、クライアント層でアプリケーションが実施するすべての制御を回避する能力かもしれません。
鍵となるのは、結婚式でのスマートウォッチの窃盗だ。手際よく、外科手術のように巧妙に、ほとんど気づかれないように行われる。金塊は、その後に起こる出来事にある。
08 境界線は常に提案であり、壁ではなかった
セキュリティ業界は、過去20年近くにわたり、境界防御の構築に力を注いできた。ファイアウォール、侵入検知システム、ネットワークセグメンテーション、ゼロトラストアーキテクチャなどだ。その根底にあるモデルは、悪意のある攻撃者を外部に寄せ付けず、内部のものを信頼し、両者の境界を防御するというものだ。
アプリケーションが自社のハードウェア上、データセンター内、ファイアウォールの内側で稼働していた頃は、このモデルは理にかなっていた。しかし、アプリケーションがクラウドに移行した途端、限界に達し始めた。そして、アプリケーションがユーザーのポケットの中に存在するようになった途端、完全に破綻してしまった。
モバイルアプリケーションは、攻撃者が制御するハードウェア上に展開されます。IoTデバイスは、攻撃者が物理的に所有できるハードウェア上に展開されます。Webアプリケーションは、攻撃者が検査できるブラウザにロードされます。これらの環境のいずれにおいても、境界モデルは成り立ちません。アプリケーションは境界内に存在せず、出荷された瞬間から境界外で、敵対的な環境で実行されます。
これは、境界セキュリティでは解決できないアーキテクチャ上の問題です。サーバー環境を完璧に整え、インフラストラクチャに脆弱性を一切なくし、ネットワークのセグメンテーションも完璧で、すべてのバックエンドサービスへのアクセス制御も万全にできたとしても、モバイルアプリケーションにハードコードされたサービスキーと難読化手法が組み込まれていれば、週末に時間のある若手アナリストでも簡単に解読できてしまいます。攻撃者はサーバーに直接手を加える必要はありません。サーバーと直接通信するアプリケーションに手を加えるだけで済むのです。
09 攻撃対象領域の形状が変化した
金融サービス、医療、防衛関連事業、通信。過去10年間で顧客対応業務をデジタル化したあらゆる業界は、知らず知らずのうちに攻撃対象領域をデータセンターからエンドポイントへと移してしまっていた。機密データ、認証ロジック、暗号化処理など、すべてが少なくとも部分的には、組織が所有または管理していないハードウェア上で稼働しているのだ。
暗号技術への影響は具体的でありながら、過小評価されている。従来の暗号技術(AES-256暗号化、RSA署名、TLSハンドシェイクなど)は、鍵が秘密であるという前提の下で、証明可能な安全性を備えている。この前提は数学的なものではなく、物理的なものである。現代の暗号技術の数学は健全である。問題は、その前提にあるのだ。
攻撃者が制御するデバイス上でアプリケーションが暗号化操作を実行すると、攻撃者は鍵がロードされた瞬間、操作が実行された瞬間、出力が生成された瞬間に、アプリケーションのメモリを監視できます。サイドチャネル攻撃と呼ばれる攻撃はまさにこの点を悪用します。消費電力、電磁波放射、タイミング変動、キャッシュアクセスパターンなど、すべてから使用されている鍵に関する情報が漏洩します。ホワイトボックス攻撃では、攻撃者はさらに一歩進んで、アプリケーション自体を分析対象のオープンボックスとして扱い、コンパイルされたコードから直接鍵を抽出します。
AES-256は依然としてAES-256です。しかし、鍵がアクセス可能な場合、暗号化の強度は鍵の秘密度に依存します。そして、鍵の秘密度はゼロ、もしくはそれに近い値です。
10. バイナリ強化は難読化ではない。ホワイトボックス暗号は暗号化ではない。
セキュリティに関する議論は、この点においてより正確さを期す必要がある。なぜなら、これらの概念を混同すると、組織は実際に金銭的な損失と深刻なリスクにさらされることになるからだ。
難読化とは、コードを読みにくくするためにコードを改変する手法です。変数名を変更したり、制御フローを平坦化したり、不要なコードを挿入したり、文字列を暗号化したりします。しかし、根気強いアナリストであれば、いずれは難読化を見破るでしょう。難読化は時間稼ぎであり、いわばフラッシュドライブのようなものです。
バイナリ強化は、それとは全く異なるものです。アプリケーション自体に、改ざんを検知または無効化する防御機能を組み込みます。デバッガでアプリケーションが実行されていることを検知し、動作を変更するアンチデバッグ技術。実行時にアプリケーション自身のコードを検証し、変更が検出された場合は実行を拒否する整合性チェック。アプリケーションがエミュレートされた環境で実行されているかどうかを検出するアンチ改ざん制御。攻撃的なデバイスを示すルート権限/脱獄状態を特定する環境チェック。バイナリ強化は、アナリストの作業を遅らせるだけでなく、最も一般的なリバースエンジニアリングのワークフローを信頼性の低いものにすることで、攻撃の経済性を変えます。
ホワイトボックス暗号は、鍵漏洩問題に直接対処します。標準的なブラックボックス暗号では、鍵は暗号演算への独立した入力となります。一方、ホワイトボックス暗号では、鍵は実装自体に数学的に埋め込まれます。これは、攻撃者がコードとメモリに完全にアクセスでき、すべての中間計算を観察できたとしても、鍵を復元できないようにする一連の数学的変換によって実現されます。暗号演算は依然として正しい出力を生成します。鍵は実装から抽出できません。渡すべきUSBメモリなどもありません。
これらは境界防御の漸進的な改善ではありません。これは全く異なるアーキテクチャの前提に基づいています。つまり、攻撃者をアプリケーションから遠ざけようとするのではなく、攻撃者がアプリケーションに完全にアクセスできる状態であっても安全性を維持できるアプリケーションを構築するのです。
11 アプリ認識型脅威インテリジェンス:悪質な攻撃者が既に侵入しているタイミングを把握する
この映画における悪役たちの根本的な問題は、彼らが受動的であるという点だ。彼らは自分たちに不利な状況が何であるか全く把握していなかったため、予期せぬ出来事に反応するしかなかった。悪役たちが自らの意思で、自分たちの都合の良いタイミングで姿を現すまで、彼らは悪役たちの存在を知らなかったのだ。
アプリケーションセキュリティは、これまでずっと同じ問題を抱えてきた。攻撃は事後的に発覚し、侵害後にログが分析され、フォレンジック分析によって攻撃者の行動が解明される。最初の侵害から検出までの期間(業界では「滞留時間」と呼ばれる)は、平均して数週間から数ヶ月に及ぶ。この期間中、攻撃者は情報格差を完全に有利な状況で活動する。
論理的な対策としては、攻撃チェーンのより早い段階で検出を行う計測機能を導入することです。つまり、鍵抽出が完了する前、偽造されたセッショントークンが使用される前、エミュレートされたクライアントが最初の不正な呼び出しを行う前に検出を行うということです。自身の実行環境を監視し、デバッグ活動、異常なメモリアクセスパターン、エミュレータでの実行、ライブサービスに対して実行される改ざんされたコードなどの異常を報告できるアプリケーションは、攻撃者の滞在時間を短縮するテレメトリを生成します。
アプリケーションがデバッガー内で実行されていることを通知できるようになれば、バイナリを解析しているアナリストの存在はもはや隠蔽されなくなります。アプリケーションがクラック版がサーバーにアクセスしていることを報告すれば、Pigtailのなりすましが何ヶ月も見過ごされることはなくなります。情報格差は徐々に解消されていくのです。
12 出荷前に必ず確認すべき質問
悪党たちが任務に取りかかる前に、ウルフは計画を立てていた。その計画は、悪党たちに有利な情報格差が存在することを前提としていた。彼らは標的が知らないことを知っており、標的が予期できない能力を持っていた。情報格差が維持されている限り、計画は有効だった。
バッドガールズはそれを覆した。彼女たちは、少なくとも作戦面においては、バッドガイズ自身が把握していたよりも、バッドガイズの全体像をより詳細に描き出した。計画が失敗に終わったのは、その計画の前提となっていた情報非対称性が既に逆転していたためである。
次のアプリケーションをリリースする前に、一つ質問があります。攻撃者がバイナリをリバースエンジニアリングした場合、何か有用な情報が得られるでしょうか?
もし答えがイエスなら――そこに鍵や複製可能な認証署名、あるいは暴露されると信頼を損なうロジックが存在するなら――あなたの計画は、攻撃者がいずれ埋めるであろう情報非対称性に依存していることになります。彼らはどこかで、あなたの研究を研究しているのです。
もちろん、最終的には悪役が勝利します。これはファミリー映画ですから。しかし、彼らは情報非対称性を変えることで勝利します。つまり、キティの計画を覗き込み、彼女の真の目的を理解し、彼女が知らなかった情報に基づいて行動するのです。アプリケーションセキュリティにおいても、これこそが勝利への道です。悪役たちがあなたの仕事を研究しないことを願うだけでは勝利は得られません。彼女たちは既に研究しているのですから。彼女たちが研究した内容から、次に何をすべきかが分からないようにすることで、勝利は得られるのです。
Digital.ai アプリケーション保護
Digital.aiのプラットフォーム バイナリ層からアプローチします。バイナリ強化は、最も一般的なリバースエンジニアリングや改ざんのワークフロー(デバッグ対策、整合性検証、環境検出、ランタイム自己保護など)からアプリケーションを保護します。ホワイトボックス暗号化は、鍵を実装に埋め込むことで、抽出を単に不便にするだけでなく、数学的に困難にします。アプリケーション認識インテリジェンスは、アプリケーションが分析、変更、なりすましされているかどうかなど、実際の環境でアプリケーションに何が起こっているかに関するテレメトリを提供します。
目的は分析官の作業を遅らせることではない。目的は、たとえ完全なアクセス権を持っていたとしても、分析官が発見した情報が運用上の利点をもたらさないようにすることである。フラッシュドライブに何も入っていなければ、Kittyはアップロードするものがない。