MASVS-RESILIENCE: リバースエンジニアリングと改竄に対する耐性

コード難読化、デバッグ防止、改竄防止、ランタイムアプリケーションセルフプロテクション (RASP) などの多層防御対策は、リバースエンジニアリングや特定のクライアントサイド攻撃に対するアプリの耐性を高めることができます。これらはアプリに多層的なセキュリティコントロールを追加し、攻撃者がコードの改変や機密情報の抽出することをより困難にします。

これらの対策が存在しないこと自体は脆弱性を成すものではありません。そうではなく、耐性コントロールは脅威固有の攻撃に対して追加の保護を提供します。すべてのアプリは 脅威モデルに従って 残りの OWASP MASVS コントロール も満たす必要があります

ビジネスと商用の観点

耐性対策は、アプリがビジネス資産を保護したり、クライアントサイドの不正使用を阻止する必要がある場合に特に適切です。これらは以下のようなリスクを緩和するのに役立ちます。

  • プロプライエタリアルゴリズム、企業秘密、顧客データ、AI、機械学習モデルの窃取や侵害

  • オンラインゲーム、金融アプリ、サブスクリプションモデルの詐欺、不正行為、収益漏損

  • 契約や規制の違反による法的損害や風評被害

  • 否定的な宣伝や顧客の不満によるブランドレピュテーションの毀損

これらのコントロールは、アプリが信頼できるプラットフォーム上で実行されていることを確保し、実行時に改竄を検出または防止し、アプリの意図した機能の完全性を維持することを目的としています。

透明性とオープンな監査の観点

行政、医療、その他の公益目的のアプリなど、一部の状況では、耐性対策は以下のようないくつかの理由により理想的ではないかもしれません。

  • コンパイルされたアプリケーションの動作についての透明性を低下する

  • コンパイルされたアプリケーションの独立した検証がより困難である

  • スマートフォンのオペレーティングシステムの多様性は誤検出につながり、正当なユーザーを排除する可能性がある

これらの懸念が対象アプリケーションに当てはまる場合には、以下の原則を適用することをお勧めします。

  • 独立した監査のためにソースコードをオープンソースで配布する

  • セキュリティは、検証可能な設計、強力な暗号化、サーバーサイドバリデーションに頼る必要がある

  • 改竄防止や難読化技法は適切なセキュリティアーキテクチャの代替として使用してはいけない

  • コントロールは、正当なユーザーや正当な解析や監視を妨げることなく、不正行為や悪意のある改変を阻止する必要がある

プラットフォームロックイン

実行時耐性コントロールは以下の二つの事項に焦点を当てています。

  • アプリケーションとそれ自体のメモリおよびファイル

  • 基盤となる OS

アプリケーション自体の完全性検証は一般的に OS に依存しませんが、基盤となる OS の検証については同じことは言えません。たとえば、Android にはオープンソース版 (AOSP) がありますが、これは一般的にコンシューマ向けデバイスにインストールされている OS ではありません。代わりに、機能セットやセキュリティコントロールにわずかな違いがある、多くのさまざまなフレーバーが開発されています。例としては Google Android, HarmonyOS, FireOS, LineageOS, /e/OS などがあります。フレーバー固有の検出メカニズムを実装することにより、アプリケーションは Android の他のフレーバーでは動作しない可能性があります。その結果、プラットフォームロックインにつながり、正当なユーザーがアプリケーションを使用できない可能性があります。

さらに、Google Play Integrity API や Apple の App Attestation などのプラットフォームサービスへの依存は、ロックインをさらに強化し、特定のユーザーグループに対してアクセシビリティを制限する可能性があります。

マルウェアとテストの観点

耐性技法は悪意のあるソフトウェアによって悪用される可能性もあります。マルウェア作成者は以下のためにコード難読化、デバッグ防止、改竄防止を使用することがよくあります。

  • 悪意のある機能を隠蔽する

  • セキュリティツールやアプリストアの審査をはぐらかす

  • 研究者を困惑してフォレンジック解析を妨害する

そのため、セキュリティテスト担当者はこれらの技法を理解し、検出方法を把握し、回避策を実践する必要があります。これは、セキュリティ評価の有効性を維持し、防御策と有害な動作を隠蔽しようとする試みを区別されることを確保します。

Last updated

Was this helpful?