AdjustのSDKスプーフィング対策
SDKスプーフィングとは?
SDKスプーフィングとは、リプレイ攻撃とも呼ばれるモバイル広告における不正手法です。正当なインストール手順を踏むことなく、正常に見えるインストールを装い、広告主の予算を不正に搾取するものです。この手法は2017年に急速に拡大しました。
この不正手法には実際の端末が使用されますが、実際にはその端末にアプリはインストールされていません。SDKスプーフィングに使われている端末は、実在している端末、つまりアクティブで広まっているため、エミュレーションまたはインストールファームで生成された不正インストールよりも検知するのが極めて困難です。
どのようにSDKスプーフィングが始まったのか
不正の基本的な手口は、トラッキングしているSDKとそのバックエンドサーバーの間でSSL暗号化された通信に割り込む方法、通称MITMアタックというものです。Charles Proxyなどのプロキシソフトウェアを使ったやり方が一般的で、簡単な操作でこの不正を行うことが可能となります。
MITMアタックの完了後、不正業者は標的とするアプリのテストインストールを繰り返します。すべてのサーバーサイド通信のURLをテキスト形式で見ることができるので、どのURLコールがアプリ内のどの操作につながっているのか、不正業者側で把握できてしまいます。初回起動・アプリ起動回数・課金やレベルアップなどの計測されている様々なアプリ内イベントが見られてしまうのです。不正業者は更に、これらURLのどの部分が静的でどこが動的であるかまで見破ります。共有されるシークレットやトークンイベントなど静的な部分はそのままで、デバイスや特定の状況に固有の広告IDやその他のデータなどの動的な部分を変更しながら行います。
コールバックやほぼリアルタイム通信を逆手に取り、インストールやイベントが正確に行われた事がはっきりと分かるため、不正業者は1回のクリックとそれに一致するインストールセッションを作り出すだけで、不正の仕掛けをテストすることができます。インストールが上手くいかない時には、彼らのURLに間違いがあります。逆にインストールが上手くいけば、彼らのロジックが正しいことが分かります。そもそも数十の変数しかないため、そのトライ&エラーをひたすら続けられれば容易に処理されてしまいます。
一度インストールが正確に計測されると、不正業者側が架空のインストールを生み出すURL設定を手に入れたことになります。
この不正手法の初期段階ではURLの構造などがそれほど解明されておらず、このURLを使った手法も高度化されていなかったため、その当時はスプーフィングを簡単に検出しブロックすることが可能でした。その時の不正通知はデータセンターやVPNから受信しており、データ自体もしばしば無意味であったり、URLパラメータには意図した目的と一致しないデータが送られていました。
SDKスプーフィングはどのようにして精度を上げてきたのか
Adjustは長期に渡って不正と戦ってきました。新しい不正防止フィルターを次々とリリースしていますが、不正業者も絶えず不正手口を改善してきていることは明らかです。不正業者が不正手口を改善するたびに、Adjustは修正モジュールと並行して長期的な解決策にも真剣に取り組んできました(詳細はブログ後半を参照)。不正業者は、彼らが偽装した不正通知が何故ブロックされるのかを解明し、新手の手法を出し続けてきました。このサイクルを何度か繰り返した後、Adjustはトラフィックデータと送信されたデータ間のミスマッチから、不正なトラフィックを識別できる優位性を失いました。
この不正手法の初期段階において、我々はトラフィックの記録と調査を開始し即座に対策を講じました。最も迅速で簡易な対策としては、アトリビューションに修正を加えたり、パラメータ構造の不正使用に基づいた不正インストールデータや、上述の意図した目的と一致しないデータを削除することでした。
この対策によって、不正業者は今までの手法が使えなくなり、高度なものへと変更せざるを得なくなりました。その高度な手法として、不正なデバイスのデータは実機のトラフィックからのデータと一致させることを始め、多数のデバイスベースのパラメータ、そして後に全てのデバイスベースのパラメータにわたって一貫性を持つようになりました。すべてが偽装データであるにも関わらず、何故このようなことが起こったのでしょうか?
実は不正業者は、実際のデバイスデータを集めるようになったのです。彼らは自らのアプリ、もしくはすでにターゲットにしているアプリを活用してデバイスデータの収集を行います。彼らがデータを収集するのはもちろん悪用目的もありますが、データのために悪用されているアプリが純粋に悪意のあるものであるという意味ではなく、悪意があるものと見られない場合もあります。不正業者のアプリがまともな使用用途のあるものかもしれませんし、もしくは別の業者による正当なアプリであり、不正業者が彼らのSDKをその正当なアプリに統合することによってアクセスしているだけかもしれないのです。これは、収益化SDKからクローズドソースのSDKまで、収集される情報が不透明であっても、あらゆる種類のSDKにて起こりうるでしょう。状況に関わらず、不正業者は多数のユーザーに使用されているアプリにアクセスできることになります。
実際のデバイスデータを生成する1つ、または複数のソースを持つことは、不正業者側の仕事を更に容易にします。彼らは本物のデータにアクセスすることができるので、もはやデータのランダム化やキュレーションを行う必要はありません。これにより、不正を特定することが信じられないほど困難になりました。
不正業者の手口の飛躍的進歩はSDKスプーフィングを洗練させていく過程で多大なるインパクトをもたらし、更に状況は悪化しました。 URLはもはやデータセンターからコールされなくなり、VPNを通らなくなりました。その代わり、無防備なユーザーのデバイスに入っている、不正業者がアクセスを持つアプリを通じて直接プロキシされているのです。
テクニカルな技術がない者にとっては、不正業者がURLを自動的に作り出すようなサーバースクリプトを実行し、Adjustやその他のアトリビューション企業にインストールやイベントをトラッキングさせているも同然です。このURLを我々のサーバーへ直接送信したり、または従来通り匿名のネットワークを通すのではなく、昨今の不正業者はユーザーの端末に入っているアクセス権を持つアプリから送信します。このアプリは、ユーザーのデバイス上でURLを実行するようになります。
通信が正規のデバイスから送られているように仕掛けており、なぜそのデバイス送信されているデータと一致するのか、これで解明されました。その通信も送られたデバイスのデータも、そのデバイス本体ですら全て実物です。唯一、デバイスの持ち主であるユーザーと広告の間に実際の接触がなく、そしてインストールが実際に発生していないことが不正であり大きな問題です。
AdjustのSDKスプーフィング対策
この劇的かつ急速に進化している不正手法の結果として、我々はこれらの偽装インストールを同様に偽装の広告エンゲージメントにアトリビュートしてしまっており、そのために一部のクライアントも不正行為を受けてしまいました。この脅威を止めるための修正モジュールの開発はますます困難になりました。緊急の場合には、これらのインストールが実際には偽装であるとことを証明するために、数十万点のデータポイントを手作業で調査して、失われた予算を補う機会をクライアントに与えなければなりませんでした。そしてこの間も、不正撲滅に取り組んできました。
我々は各アプリとSDKとの統合用のチェックサムハッシュの作成など、解決策をいくつか検討しました。証明書のピン留めがその1つです。独自の暗号化方式も検討しましたが、これらのアイデアはすべてクライアントのアプリのCXやUXに悪影響を与える可能性があり、トラッキングの質を下げてしまうリスクもあったため、実用化に至りませんでした。例えば証明書のピン留めを行う場合、証明書の期限が切れたり様々な理由で証明書が無視されるなど、時間の経過とともに大きな障害になる可能性があります。(2011年にComodoで起こったセキュリティー侵害の例を挙げます。
多くのアプリが一定期間後にアップデートを受信しなくなり、開発チーム全体が再編または解散することもあるため、証明書の期限が切れトラッキングが完全に停止する危険性があります。もう1つの懸念点として、証明書のピン留めを行うとクライアントとネットワークがトラッキングテストに使用する共通テストツールをすべて無効にしてしまう恐れがあることも挙げられます。最後に、クライアントまたはモバイルデバイスは証明書のピン留めの使用、不使用を決めることができるため、証明書のピン留めがクライアントサーバーの通信をMITM攻撃から保護する優れた方法であったとしても、協力的でないクライアントからサーバーを守るには不十分だと結論づけました。
結論として、AdjustではSDK通信パッケージに署名するためのシグニチャーハッシュを作成することにしました。この方法では推測や盗用が不可能で一度しか使用されない新しい動的パラメータをURLに導入することで、リプレイ攻撃が通用しないことが保証されます。合理的で安全なハッシュとクライアントにとっても同様に合理的なユーザーエクスペリエンスを実現するために、クライアントが保護したいアプリごとにダッシュボードに生成される共有のアップシークレットを追加できるようにしました。マーケティング担当者は、このアップシークレットを更新したり、またアプリの別のバージョンのリリースに際して異なるアップシークレットを使用することも可能です。これにより、シグニチャーのバージョンを時間の経過とともに取り下げることができます。その後のアトリビューションは最新リリースで使われる最高セキュリティー基準に基づき、古いリリースはアトリビューションから完全に削除できます。
この対策機能はSDKバージョン4.12と共にリリースされ、Adjustの有料版不正防止ツールの使用の有無に関わらず、すべてのお客様に無償でご利用頂けます。
Adjustニュースレターに登録して、最新情報をいち早くご確認ください!