「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Android アプリのセキュリティ テストを行う方法: 開発者とテスターのためのガイド

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

2024 年 8 月 10 日に公開
ブラウズ:757

導入

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/wetest/how-to-do-android-app-security-testing-a-guide-for-developers-and-testers-3j8b?1 侵害がある場合、study_golang @163.comdelete までご連絡ください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3