アプリケーションハードニングとは何ですか?
アプリケーション・ハードニングとは、コードの難読化やホワイトボックス暗号などを用いて、リバースエンジニアリングやタンパリングなどのモバイル不正技術からアプリケーションを保護するサイバーセキュリティの概念・技術です。 アプリケーションのハードニングは、企業がアプリを保護し、セキュリティリスクを低減し、不正使用、不正行為、再パッケージ化を防止するためのベストプラクティスとなるべきものです。
アプリ内保護、アプリケーションハードニング、アプリケーションシールド
アプリケーションハードニングとアプリケーションシールドは、アプリ内保護のサブセットです。 アプリ内保護は、アプリケーションを内部から保護するように設計されており、アプリ保護に対するゼロトラストアプローチに適しています。 アプリ内保護は、無人のデバイスや信頼できない環境で実行される高価値のアプリケーションに最適です。
アプリケーションのハードニングには、攻撃者が攻撃を実行する際の難易度を高める防止機能が含まれます。 アプリケーションシールドには、攻撃者を混乱させるように設計されたタンパリング対策と、アプリ環境が信頼できるかどうかを判断する検知機能が含まれます。
アプリ内保護には、ボット対策技術、クリックジャッキング対策、ランタイムアプリケーションの自己保護、多要素認証、リスク分析などの機能も含まれています。
アプリケーションに脆弱性をもたらすモバイルセキュリティの仮定
モバイルアプリの開発者は、自分のアプリが使用される環境をすべてコントロールできるわけではありません。 例えば、ユーザーはデバイスを脱獄またはルート化することで、OSの保護機能を無効にすることができます。 そのため、端末やOSのセキュリティ状況に関わらず、アプリ自体に保護機能を持たせるアプリケーションハードニングは、モバイルアプリケーションのセキュリティにおいて重要な役割を果たします。
よくある2つの誤解が、モバイルアプリの侵害のリスクを高めています。
まず、Apple App StoreやGoogle Playといった公式アプリストアでは、正規の安全なアプリしかダウンロードできないと思われています。 公式アプリストアは、開発者が提出したアプリにマルウェアが混入していないかどうかをスキャンし、アプリがユーザーデータにアクセスできるようになっているかどうかをチェックします。
しかし現実には、アプリストアはすべての悪意のあるアプリを捕捉することはできません。なぜなら、悪意のあるアプリをすべて根絶し、信頼できるセキュリティコントロールとして機能させるには、アプリの数が多すぎるからです。
第二に、多くの人は、iOSやAndroidのOSが、自分の端末にダウンロードされたモバイル・アプリケーションに対して十分なセキュリティを提供していると思い込んでいます。 実際には、AndroidやiOSの脆弱性に対するパッチがすぐに提供されるとは限らず、ユーザーが定期的にデバイスをアップデートするというサイバー衛生を実践しているとは限らないのです。 また、OSが提供する暗号化機能を開発者が正しく実装していない場合もあります。
アプリケーションをハード化する理由
アプリのハードニングには、知的財産の保護、アプリの完全性の保護、アプリ上の機密データの保護という3つの主な理由があります。
アプリケーションの中には、企業に競争上の優位性をもたらすコンセプト、イノベーション、発明などの知的財産(IP)があります。 アプリのソースコードを解析することで、ハッカーはIPを盗むことができます。 アプリケーションのハードニングにより、IPを安全に保つことができます。
アプリの完全性は、アプリ開発者の関心事でもあります。 悪意のあるアクターは、アプリを検査し、可能であればアプリを改変してクローンを作ったり、データを盗んだり、APIを介してデータをスクレイプしたりすることがあります。 難読化やホワイトボックス暗号を用いてハード化されていないアプリは、開かれた本のようなものです。 攻撃者は、アプリのコードをわかりやすく静的に分析し、攻撃・攻略すべき領域を見つけることができます。 層状防御戦略の一環として、企業は、アプリケーションの完全性に対する攻撃を保護、検出、および対応するために、アプリケーションにアンチデバッグおよびアンチタンパーの機能を追加するメカニズムを持つ必要があります。
一般的な攻撃手法は、アプリのセキュリティ上の欠陥を利用して、重要な個人情報を盗むことです。 実行時に使用されているデータは、静止状態または転送中のデータとは異なる方法で公開される可能性があり、攻撃者はデバッガやエミュレータなどのツールを使用してこれを悪用する方法を学ぶことができるため、次善の策として、ハッカーがアプリ内のデータにアクセスしたり変更したりするために使用するデバッガやエミュレータなどのツールの不正使用を制限することが挙げられます。 また、暗号化キーが適切に保護されていない場合、攻撃者が暗号化キーを盗み、それを使って転送中のデータにアクセスする可能性があります。 アプリケーション・ハードニングやその他のアプリ内保護技術は、ハッカーが使用する攻撃ベクトルを無効にすることで、アプリとアプリ内を流れるデータを保護します。
アプリケーションハードニング技術
アプリケーション・ハードニングは、アプリケーションを攻撃者から守るためのいくつかの技術を含んでいます。 などがあります。
コードの難読化。
コード難読化は、アプリのリバースエンジニアリングを困難にするために、アプリのコードをスクランブルします。 そのため、アプリを読みにくくしてターゲットにすることは難しく、IPを盗んだりリパッケージしたりすることも困難になります。 コード難読化は、アプリを保護するためにいくつかの技術を使用しています。 ソフトウェアコンポーネントや識別子の名前を変更することができます。 使われないダミーコードを付加したり、文字列を暗号化したりすることができます。 コードを再コンパイルして、インタープリターやバーチャルマシンで実行することができます。 その他のコード難読化技術には、リフレクションやパッキングがあります。
ホワイトボックス化、またはホワイトボックス暗号化。
この方法は、Apple iOSのKeychainやAndroid Keystoreなど、最新のプラットフォームのネイティブツールを利用する方法の代替となります。 企業が自社のアプリケーションをジェイルブレイクしたデバイスで動作させる必要がある場合、これは有用な暗号技術となります。 また、iOSのKeychain/Secure EnclaveやAndroidのKeyStoreなど、デバイス上の認証情報のデフォルトの場所を侵入者が見て、攻撃の対象とする場合には、ホワイトボックス化を行うことができます。
その他のテクニック
- 証明書のピン留めは、相互認証プロセスに関与する当事者が特定の証明書をピン留めすることを可能にするもので、中間者攻撃に対抗するために使用することができます。
- リソースの暗号化では、クラスや文字列などのアプリのコンポーネントを暗号化します。
- Auto-expiryは、ユーザーが一定期間活動しなかった場合にログアウトする期限を設定します。
- キーロギングを阻止するためにスタンドアロンキーボードを採用したり、不正なキーボードを検出するために不正キーボード検出機能を使用したりすることができます。
- ポリモーフィズムとは、リバースエンジニアリングを困難にするためにコードを変更することができる手法です。
アプリケーション・ハードニングのユースケース
モバイルバンキングアプリは、アプリケーションのハードニングの1つのユースケースです。 より多くのモバイルユーザーが、自分のデバイスを頼りに銀行業務を行っています。 詐欺師は、セキュリティの不備を利用しようとします。 アプリケーションの堅牢化により、詐欺師がモバイルバンキングアプリを悪用した不正なプログラムを開発することを防ぎ、攻撃者が成功することをより困難にします。
モバイルヘルスケアアプリは、健康保険の相互運用性と説明責任に関する法律(HIPAA)で規制されている保護されるべき健康情報(PHI)を扱います。 医療機関等は、遠隔医療アプリが患者データを開示した場合、厳しい罰則を受ける可能性があります。 アプリケーションの堅牢化により、サイバー攻撃者がPHIにアクセスできないようにすることで、患者の機密性が保たれ、HIPAAの罰金を回避することができます。
モバイルの小売店向けアプリも、アプリケーションのハードニングに適したユースケースです。 PCI DSS(Payment Card Industry Data Security Standard)で規定されているカード情報を取り扱っています。 PCI DSSに準拠していないオンラインショップは、クレジットカード会社からの罰金、顧客からの信頼の失墜、さらには米国連邦取引委員会の監査を受ける可能性があります。
第一応答者、法執行機関、政府機関などの公共サービス関係者は、モバイルアプリで機密情報にアクセス、送信、保存しています。 このようなデータは、HIPAA、機関のポリシー、またはプライバシールールによって管理されている可能性があるため、アプリケーションのハードニングなどの強固なセキュリティ対策によって保護する必要があります。
消費者向けのモバイルアプリは、外部の世界と社内の機密性の高い顧客データベースをつなぐ架け橋となっており、攻撃者の標的となります。 アプリケーションの堅牢化は、データ盗難の原因となるモバイルアプリケーションの数多くの脆弱性を攻撃者が悪用するのをブロックするなどして防ぐことができます。
接続されたデバイスやアプリの数が飛躍的に増加する中で、ハッカーが家庭、職場、工場のネットワークに侵入するための攻撃対象も同様のペースで拡大しています。 接続されたデバイスを制御するアプリは、攻撃を受けやすい。 アプリケーション・ハードニングは、アンチウイルス・ソリューションやその他の従来のセキュリティ・ツールでは不可能な方法で、それらのアプリケーションを保護し、組み込みシステムを保護します。
アプリケーションのハードニングにより、これらの攻撃戦略からの保護を支援します。
アプリケーションの堅牢化は、リバースエンジニアリング、リパッケージ、不正なキーボードなど、さまざまな攻撃シナリオからアプリケーションを守るのに役立ちます。
リバースエンジニアリングとは、アプリを解析して設計や実装の情報を抽出することです。 この技術は合法的な目的で使用することができますが、攻撃者はコードを解析し、アプリを悪用したマルウェアを開発するために使用することもできます。
リパッケージ攻撃では、ハッカーが正規のアプリをリバースエンジニアリングし、悪意のあるコードを追加してアプリストアにアップロードします。 これは、モバイルバンキングアプリを狙う攻撃者が好んで使う手法です。
また、人々がキーボードをカスタマイズするために使用する代替キーボードアプリには、データを盗むなどの悪意のあるコードが隠されていることがあります。
要するに、アプリケーションのハードニングは、アプリを悪意のある行為から守り、そのライフサイクルを通じてサイバー犯罪者から機密情報を保護するということです。 アプリケーションの堅牢化は、ランタイムの保護、強力な認証、およびその他の技術を含む、アプリケーションのレイヤードセキュリティアプローチの一部です。 レイヤー化されたセキュリティは、デジタルトランスフォーメーションの取り組みを加速させ、運用コストを削減し、新たな成長の機会を開くのに役立ちます。