Android アプリのセキュリティ テストを行う方法: 開発者とテスターのためのガイド

WBOY
リリース: 2024-07-18 00:40:31
オリジナル
790 人が閲覧しました

導入

Android スマートフォンの熱心なファンとして、スマートフォンが突然落ちたら、最初に思うのは「なんてことだ!」ということではないでしょうか。それとも Google Pay や Paypal のお金は安全ではないのですか?最近ダウンロードしたアプリで、さまざまな退屈な広告がポップアップ表示されるだけでなく、予期しない通知も表示されたら、フィッシングの試みではないかと考え、すぐにアプリをアンインストールしますか?

Android のセキュリティ脆弱性について十分に認識していないユーザーに、アプリが安全なエクスペリエンスを提供できるようにするにはどうすればよいでしょうか? Android エコシステムにはどのようなセキュリティ脆弱性がありますか?新しい Android セキュリティ テスト手法はどこで調べられますか?セキュリティ テスト プロセスを合理化するにはどうすればよいですか?

Android の一般的なセキュリティ脆弱性

第一に、Android オペレーティング システムのオープンソース開発の利点には、Android システムのサンドボックス システム (つまり、仮想マシン) など、その開発における固有のセキュリティ問題も隠蔽されています。ただし、基礎となる層には次から次へと脆弱性があり、悪意のあるプログラム (またはツール) が root アクセスを取得してサンドボックスの制限を破ることができます。 PC 時代と同様に、絶対的に安全な PC オペレーティング システムは存在しません。モバイル インターネットの時代には、絶対に安全なモバイル オペレーティング システムも存在しません。 Android オープンソース エコシステムのセキュリティ リスクは、血塗られた警鐘のようなもので、すべての Android 開発者の心を打ちます。

第二に、Android APP/SDK 開発プロセスにおけるセキュリティ リスクは未知のブラック ホールのようなものです。安全保障上の対立の終着点がどこにあるのか、攻撃者が誰なのか、ターミネーターが誰なのか、そしてそれらに対してどのように防御すればよいのか、私たちは決して知りません。

最後に、ユーザー レベルで、一般的で認識可能なセキュリティ動作の脆弱性は何ですか?

Android アプリと SDK の両方には、ある程度のセキュリティ上の脆弱性があります。おそらくいつか、アプリケーションが上記のセキュリティ脆弱性のいずれかの影響を受ける可能性があります。偶然にも、最近 Android SDK をテストしているときに、Android アプリケーション コンポーネントに関連するセキュリティの脆弱性を発見しました。この例に基づいて、Android SDK セキュリティ テストの方法、テクニック、プロセスがまとめられています。

Android アプリのセキュリティ テストの例

脆弱性の原因の概要
アプリケーションのオプション コンポーネント (以下、アプリケーションと呼びます) Android SDK は、Java レイヤ サービスが生きているかどうかを監視するためにローカルでランダムなポートを開きます。しかし、Java 層がコンポーネントと通信する際、入力パラメータを厳密にチェックしないため、Linux システムの「system()」関数を呼び出す際に攻撃コードが埋め込まれ、悪意のある攻撃が行われる可能性があります。

次のスクリーンショットは、シミュレーション ポートが攻撃された後、アプリケーション コンポーネントのインテントが通信中に URL コンテンツを変更し、Web ビューに文字化けしたコードが表示されることを示しています。

Garbled code

脆弱性による潜在的なセキュリティ リスク

Android APP の 4 つの主要なアプリケーション コンポーネント (アクティビティ、レシーバー、サービス、コンテンツ プロバイダー)、および IPC のインテントを介して通信するアプリケーション コンポーネントのセキュリティ ロールについては、ここでは詳しく説明しません。上記の例のコンポーネント関連の脆弱性を利用して、次の図は端末 APP 側に関連する攻撃の次元を示しています。

Attack dimensions

Android APP のローカル アプリケーション環境により、ネットワーク ソケットには本質的に詳細な認証および認可メカニズムが不足しています。したがって、Android クライアントをサーバーとして使用し、逆コードを使用してアプリケーションのローカルのランダムなポート番号を検索し、そのポートに積極的に攻撃を送信すると、次のようなセキュリティ上の危険が潜んでいます。

  1. ローカルコマンド実行: 組み込みアプリケーションのパッケージ名をアプリケーション自体として指定し、コンポーネント名をアプリケーションのアクティビティとして指定すると、アプリケーションの任意のアクティビティを実行できます。保護された非輸出活動も含めて開始され、セキュリティ上の危険を引き起こします。たとえば、サービス拒否の脆弱性は、HTTP リクエストを通じてエクスポートされていないいくつかのアクティビティを 1 つずつ開始することで発見できます。

  2. アプリケーションの権限を変更するコマンド コントロール: オープン ソケット ポートを介して Android アプリケーション コンポーネントを開始する意図を渡し、アクティビティの開始やブロードキャストの送信などの操作を、その権限で実行します。攻撃されたアプリケーション。ソケット経由で渡されるインテントは、送信者の ID と権限についての詳細なチェックを実行できないため、Android によってアプリケーション コンポーネントに提供される権限保護をバイパスし、エクスポートされていない権限で保護されたアプリケーション コンポーネントを起動して、セキュリティ上の危険を引き起こす可能性があります。

  3. 機密情報の開示、携帯電話制御: ローカル サービスは UDP ポートを開いてリッスンし、特定のコマンド ワードを受信した後、携帯電話の機密情報を返すことができます。たとえば、Baidu の携帯電話バトラーは携帯電話の SecretKey をリモートで管理でき、その後、権限のない攻撃者がネットワークを通じて携帯電話を完全に管理できます。

Androidセキュリティテストの実行

Android のセキュリティ強化バージョンの最適化

  1. ネイティブ層と Java 層の両方にシステム コマンドと特殊文字フィルタリングのチェックを追加します。

  2. JNI Watchdog デーモン プロセスのソケット通信を暗号化します。

  3. ローカル通知機能に URL、インテント、アクティビティの機能検証を追加して、通知をクリックしたときに悪意のあるリンクへのリダイレクトを防ぎます。

  4. アプリのローカルストレージ内のパッケージ名の保存場所を変更します。

  5. オンライン設定機能を追加します。

これらは、このセキュリティ強化の最適化のための重要な要件です。

特別なセキュリティテスト

従来のシステム テストまたはパフォーマンス テストに従っている場合は、変化する要件に基づいてフォワード テストを実行するだけで済みます。ただし、セキュリティ テストの場合、SDK のセキュリティの堅牢性を確保するには、さまざまなセキュリティ攻撃手法をシミュレートし、変更点のテスト ケースを分岐する、逆特殊テストが必要です。

Android の定期的なセキュリティ回帰テスト

  1. プライバシー データ: 外部ストレージのセキュリティと内部ストレージのセキュリティ。ユーザー名、パスワード、チャット記録、構成情報、その他の個人情報がローカルに保存され、暗号化されているかどうかを確認します。情報を使用する前に、その完全性を確認してください。

  2. 権限攻撃: アプリのディレクトリをチェックし、その権限が他のグループ メンバーに読み取りまたは書き込みを許可していないことを確認します。システム権限が攻撃を受けているかどうかを確認してください。

  3. Android コンポーネントの権限保護: アプリの内部コンポーネントがサードパーティ プログラムによって任意に呼び出されるのを防ぎます。アクティビティがサードパーティ プログラムによって呼び出されるのを防ぎ、アクティビティのハイジャックを防ぎます。ブロードキャストの受信と送信のセキュリティを確保し、アプリによって送信されたブロードキャストのみを受信し、送信されたコンテンツを第三者が受信するのを防ぎます。悪意を持ってサービスを開始または停止することを防ぎます。コンテンツプロバイダーの操作権限を確認します。コンポーネントを外部から呼び出す必要がある場合は、呼び出し元に署名制限が適用されているかどうかを確認してください。

  4. アップグレード: ハイジャックを避けるために、アップグレード パッケージの整合性と合法性をチェックしてください。

  5. サードパーティ ライブラリ: サードパーティ ライブラリを使用している場合は、その更新を追跡し、セキュリティを確認してください。

  6. ROM セキュリティ: 埋め込まれた広告やトロイの木馬などの追加を避けるために、公式 ROM または権威あるチームが提供する ROM を使用します。

  7. クラック対策: 逆コンパイルに対抗し、逆コンパイル ツールを使用して逆コンパイルしたり、逆コンパイル後に正しい逆アセンブリ コードを取得したりできなくします。コードの難読化と暗号化を使用して静的分析に対抗します。デバッガとエミュレータを検出するコードを追加することで、動的デバッグに対抗します。署名をチェックし、コンパイルされた dex ファイルのハッシュ値を検証することで、再コンパイルを防ぎます。

セキュリティ特別テストと定期的なプロセス テストが完了したら、アプリの既存の機能、新バージョンと旧バージョン間の互換性、さまざまな Android オペレーティング システム バージョンとの互換性についてローリング回帰テストを実行します。

まとめ

通常のパフォーマンスおよびシステム機能のテスト ケースと比較して、セキュリティ テスト ケースでは、ユーザーのセキュリティの外観レベル、アプリケーション システムのローカルおよびリモートの攻撃レベル、オペレーティング システムの脆弱性レベルをカバーするなど、Android エコシステムをより包括的に理解する必要があります。逆攻撃思考のテスト ケースの設計にさらに重点を置きます。

開発の出発点がセキュリティ防御である場合、テストの出発点はハッカーの攻撃に対する考え方です。攻撃シナリオのテスト ケースを設計し、攻撃テスト手法を実装することで、SDK のセキュリティの堅牢性が決まります。

アプリケーションの最高レベルのセキュリティを確保するには、WeTest アプリケーション セキュリティ テストの利用を検討してください。このサービスは、アプリケーションのセキュリティ問題の包括的な評価、プログラムの脆弱性のタイムリーな検出を提供し、脆弱性の修復を支援するコード修復例を提供します。

潜在的な脅威からアプリケーションを保護し、安全なユーザー エクスペリエンスを維持するには、WeTest を信頼してください。

Image description

以上がAndroid アプリのセキュリティ テストを行う方法: 開発者とテスターのためのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート