クリアテキスト通信
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
OWASP カテゴリ: MASVS-NETWORK: ネットワーク通信
概要
Android アプリでクリアテキスト ネットワーク通信を許可すると、ネットワーク トラフィックを監視しているすべてのユーザーが、送信中のデータを表示して操作できるようになります。これは、送信されたデータにパスワード、クレジット カード番号、その他の個人情報などの機密情報が含まれている場合、脆弱性につながります。
機密情報を送信しているかどうかにかかわらず、クリアテキストを使用すると脆弱性が生じる可能性があります。クリアテキスト トラフィックは、ARP や DNS ポイズニングなどのネットワーク攻撃によっても操作されるため、攻撃者がアプリの動作に影響を与える可能性があります。
影響
Android アプリがネットワーク経由でクリアテキストでデータを送受信すると、ネットワークを監視しているすべての人がそのデータを傍受して読み取れるようになります。このデータにパスワード、クレジット カード番号、個人メッセージなどの機密情報が含まれている場合、個人情報の盗難や金融詐欺などの重大な問題につながる可能性があります。
たとえば、アプリがクリアテキストでパスワードを送信すると、悪意のあるトラフィック傍受者に機密情報が漏洩する可能性があります。漏洩したデータは、ユーザーのアカウントへの不正アクセスに利用される可能性があります。
リスク: 暗号化されていない通信チャネル
暗号化されていない通信チャネルを介してデータを送信すると、デバイスとアプリケーション エンドポイント間で共有されるデータが公開されます。これらのデータは攻撃者によって傍受され、改ざんされる可能性があります。
リスクの軽減
データは暗号化された通信チャネル経由で送信する必要があります。暗号化機能を提供しないプロトコルの代替として、安全なプロトコルを使用する必要があります。
特定のリスク
このセクションでは、標準的でない軽減戦略が必要、または特定の SDK レベルで軽減されたリスクをまとめています。また、完全を期すためにその他のリスクも挙げています。
リスク: HTTP
このセクションのガイダンスは、Android 8.1(API レベル 27)以前を対象とするアプリにのみ適用されます。Android 9(API レベル 28)以降、URLConnection、Cronet、OkHttp などの HTTP クライアントでは HTTPS の使用が強制されるため、クリアテキストのサポートはデフォルトで無効になっています。ただし、Ktor などの他の HTTP クライアント ライブラリでは、これらの制限がクリアテキストに適用される可能性は低いため、使用する際は注意が必要です。
リスクの軽減
NetworkSecurityConfig.xml 機能を使用して、クリアテキスト トラフィックをオプトアウトし、アプリに HTTPS を適用します。必要な特定のドメイン(通常はデバッグ目的)のみを例外とします。
XML
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">debug.domain.com</domain>
</domain-config>
</network-security-config>
このオプションにより、バックエンド サーバーなどの外部ソースが提供する URL の変更によって、アプリで思わぬパフォーマンスの低下が発生するのを防ぐことができます。
リスク: FTP
FTP プロトコルを使用してデバイス間でファイルを交換すると、いくつかのリスクが発生します。最も重要なリスクは、通信チャネルでの暗号化の欠如です。代わりに、SFTP や HTTPS などの安全な代替手段を使用してください。
リスクの軽減
アプリケーションにインターネット経由のデータ交換メカニズムを実装する場合は、HTTPS などの安全なプロトコルを使用する必要があります。Android には、デベロッパーがクライアント サーバー ロジックを作成できる一連の API が用意されています。これは Transport Layer Security(TLS)を使用して保護できます。これにより、2 つのエンドポイント間でのデータ交換が暗号化され、悪意のあるユーザーが通信を傍受して機密データを取得するのを防ぐことができます。
通常、クライアント サーバー アーキテクチャは、デベロッパー所有の API に依存しています。アプリケーションが一連の API エンドポイントに依存している場合は、HTTPS 通信を保護するための次のセキュリティのベスト プラクティスに従って、多層セキュリティを確保します。
- 認証 - ユーザーは OAuth 2.0 などの安全なメカニズムを使用して認証する必要があります。通常、Basic 認証は推奨されません。これは、セッション管理メカニズムを提供しないためです。認証情報が不適切に保存されている場合、Base64 からデコードされる可能性があります。
- 認可 - 最小権限の原則に従って、ユーザーが目的のリソースのみにアクセスできるようにする必要があります。これは、アプリケーションのアセットに慎重なアクセス制御ソリューションを採用することで実装できます。
- セキュリティのベスト プラクティスに沿って、最新の暗号スイートが使用されていることを確認します。たとえば、HTTPS 通信で、必要に応じて下位互換性のある TLSv1.3 プロトコルをサポートすることを検討してください。
リスク: カスタム通信プロトコル
カスタム通信プロトコルを実装したり、既知のプロトコルを手動で実装しようとしたりすると、危険な場合があります。
カスタム プロトコルを使用すると、デベロッパーは目的のニーズに合わせて独自のソリューションを調整できますが、開発プロセス中にエラーが発生すると、セキュリティ上の脆弱性が生じる可能性があります。たとえば、セッション処理メカニズムの開発でエラーが発生すると、攻撃者が通信を盗聴し、機密情報をその場で取得できる可能性があります。
一方、OS やメンテナンスが行き届いたサードパーティ製ライブラリを使用せずに、HTTPS などのよく知られたプロトコルを実装すると、コーディング エラーが発生する可能性が高まり、必要に応じて実装したプロトコルを更新するのが困難になる可能性があります。また、カスタム プロトコルを使用する場合と同じ種類のセキュリティ上の脆弱性が生じる可能性があります。
リスクの軽減
維持されているライブラリを使用して、よく知られた通信プロトコルを実装する
HTTPS などのよく知られたプロトコルをアプリケーションに実装するには、OS ライブラリまたは保守されているサードパーティ ライブラリを使用する必要があります。
これにより、デベロッパーは、入念にテストされ、時間の経過とともに改善され、一般的な脆弱性を修正するためのセキュリティ アップデートを継続的に受信しているソリューションを選択できます。
さらに、よく知られたプロトコルを選択することで、さまざまなシステム、プラットフォーム、IDE と幅広い互換性が得られるため、開発プロセス中にヒューマン エラーが発生する可能性が低くなります。
SFTP を使用する
このプロトコルでは、転送中のデータが暗号化されます。この種のファイル交換プロトコルを使用する場合は、追加の手段を考慮する必要があります。
- SFTP はさまざまな種類の認証をサポートしています。パスワードベースの認証ではなく、公開鍵認証方法を使用する必要があります。このような鍵は安全に作成、保存する必要があります。このためには、Android Keystore をおすすめします。
- サポートされている暗号がセキュリティのベスト プラクティスに準拠していることを確認します。
リソース
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-26 UTC。"],[],[],null,["# Cleartext communications\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-NETWORK: Network Communication](https://mas.owasp.org/MASVS/08-MASVS-NETWORK)\n\nOverview\n--------\n\nAllowing cleartext network communications in an Android app means that anyone\nmonitoring network traffic can see and manipulate the data that is being\ntransmitted. This is a vulnerability if the transmitted data includes sensitive\ninformation such as passwords, credit card numbers, or other personal\ninformation.\n\nRegardless of if you are sending sensitive information or not, using cleartext\ncan still be a vulnerability as cleartext traffic can also be manipulated\nthrough network attacks such as ARP or DNS poisoning, thus potentially enabling\nattackers to influence the behavior of an app.\n\nImpact\n------\n\nWhen an Android application sends or receives data in cleartext over a network,\nanyone who is monitoring the network can intercept and read that data. If this\ndata includes sensitive information such as passwords, credit card numbers, or\npersonal messages, this can lead to identity theft, financial fraud, and other\nserious problems.\n\nFor example, an app transmitting passwords in cleartext could\nexpose these credentials to a malicious actor intercepting the traffic. This\ndata could then be used to gain unauthorized access to the user's accounts.\n\nRisk: Unencrypted communication channels\n----------------------------------------\n\nTransmitting data over unencrypted communication channels exposes the data\nshared between the device and the application endpoints. Said data can be\nintercepted and potentially modified by an attacker.\n\n### Mitigations\n\nData should be sent over encrypted communication channels. Secure protocols\nshould be used as an alternative to protocols that don't offer encryption\ncapabilities.\n\nSpecific Risks\n--------------\n\nThis section gathers risks that require non-standard mitigation strategies or\nwere mitigated at certain SDK level and are here for completeness.\n\n### Risk: HTTP\n\nThe guidance in this section applies only to apps that target Android 8.1 (API\nlevel 27) or earlier. Starting with Android 9 (API level 28), HTTP Clients such\nas URLConnection, [Cronet](/develop/connectivity/cronet), and [OkHttp](https://square.github.io/okhttp/) enforce the use of\nHTTPS, therefore cleartext support is disabled by default. However, be aware\nthat other HTTP Client libraries such as [Ktor](https://ktor.io/) are unlikely to\nenforce these restrictions on cleartext and should be used with care.\n\n#### Mitigations\n\nUse the [NetworkSecurityConfig.xml](/training/articles/security-config#CleartextTrafficPermitted) feature to opt-out of cleartext traffic\nand enforce HTTPS for your app, with exceptions for only the specific domains\nrequired (usually for debugging purposes): \n\n### Xml\n\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cnetwork-security-config\u003e\n \u003cbase-config cleartextTrafficPermitted=\"false\"\u003e\n \u003cdomain-config cleartextTrafficPermitted=\"true\"\u003e\n \u003cdomain includeSubdomains=\"true\"\u003edebug.domain.com\u003c/domain\u003e\n \u003c/domain-config\u003e\n \u003c/network-security-config\u003e\n\nThis option helps prevent accidental regressions in apps due to changes in URLs\nprovided by external sources such as backend servers.\n\n*** ** * ** ***\n\n### Risk: FTP\n\nUsing the FTP protocol to exchange files between devices presents several risks,\nthe most significant being the lack of encryption over the communication\nchannel. Safer alternatives such as SFTP or HTTPS should be used instead.\n\n#### Mitigations\n\nWhen implementing data exchange mechanisms over the internet in your\napplication, you should use a secure protocol such as HTTPS. Android makes a\n[set of APIs](/develop/connectivity/network-ops/connecting) available that allow developers to create a client-server\nlogic. This can be secured using [Transport Layer Security (TLS)](/privacy-and-security/security-ssl), ensuring\nthat data exchange between two endpoints is encrypted, therefore preventing\nmalicious users from eavesdropping on communications and retrieving sensitive\ndata.\n\nCommonly, client-server architectures rely on developer-owned APIs. If your\napplication depends on a set of API endpoints, ensure security-in-depth by\nfollowing these security best practices to protect HTTPS communications:\n\n- Authentication -- Users should authenticate themselves using secure mechanisms such as [OAuth 2.0](https://developers.google.com/identity/protocols/oauth2/native-app). Basic authentication is generally discouraged, as it doesn't provide session management mechanisms and, if credentials are improperly stored, can be decoded from Base64.\n- Authorization -- Users should be restricted to access only intended resources following the principle of least-privilege. This can be implemented by adopting careful access control solutions for the application's assets.\n- Ensure that thoughtful and most recent cipher suites are used, following security best practices. For example, consider supporting the [TLSv1.3\n protocol](https://wiki.mozilla.org/Security/Server_Side_TLS) with backward compatibility, if needed, for HTTPS communications.\n\n*** ** * ** ***\n\n### Risk: Custom-Communication Protocols\n\nImplementing custom communication protocols, or trying to implement well-known\nones manually, can be dangerous.\n\nWhile custom protocols allow developers to tailor a unique solution that adapts\nto the intended needs, any error during the development process can potentially\nresult in security vulnerabilities. For example, errors in developing session\nhandling mechanisms can potentially result in attackers being able to eavesdrop\non communications, and retrieve sensitive information on the fly.\n\nOn the other hand, implementing well-known protocols such as HTTPS without using\nOS or well-maintained third-party libraries, increases the likelihood of\nintroducing coding errors that may make it difficult, if not impossible, to\nupdate the protocol that you implemented when needed. Additionally, this can\nintroduce the same kind of security vulnerabilities as using custom protocols.\n\n#### Mitigations\n\n##### Use maintained libraries to implement well-known communication protocols\n\nTo implement well-known protocols such as HTTPS in your application, OS\nlibraries or maintained third-party libraries should be used.\n\nThis gives developers the security of opting for solutions that have been\nthoroughly tested, were improved over time, and are continuously receiving\nsecurity updates to fix common vulnerabilities.\n\nIn addition, by opting for well-known protocols, developers benefit from broad\ncompatibility across various systems, platforms, and IDEs, reducing the\nlikelihood of human errors during the development process.\n\n##### Use SFTP\n\nThis protocol encrypts the data in transit. Additional measures should be taken\ninto consideration when using this kind of file exchange protocol:\n\n- SFTP supports different kinds of authentication. Instead of password-based authentication, the public key authentication method should be used. Such keys should be securely created and stored, [Android Keystore](/privacy-and-security/keystore) is recommended for this purpose.\n- Ensure that supported ciphers follow security best practices.\n\n*** ** * ** ***\n\nResources\n---------\n\n- [Ktor](https://ktor.io/)\n- [Perform network operations using Cronet](/develop/connectivity/cronet)\n- [OkHttp](https://square.github.io/okhttp/)\n- [Cleartext Traffic Opt-out for Network Security Configuration](/training/articles/security-config#CleartextTrafficPermitted)\n- [Connect to the network](/develop/connectivity/network-ops/connecting)\n- [Security with network protocols](/privacy-and-security/security-ssl)\n- [OAuth 2.0 for Mobile \\& Desktop Apps](https://developers.google.com/identity/protocols/oauth2/native-app)\n- [HTTP Over TLS RFC](https://www.ietf.org/rfc/rfc2818.txt)\n- [HTTP Authentication Schemes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemesl)\n- [Mozilla web security recommendations](https://infosec.mozilla.org/guidelines/web_security)\n- [Mozilla SSL recommended configuration generator](https://ssl-config.mozilla.org/)\n- [Mozilla Server Side TLS recommendations](https://wiki.mozilla.org/Security/Server_Side_TLS)\n- [OpenSSH main manual page](https://www.openssh.com/manual.html)\n- [SSH RFC, which details the configurations and schemes that can be used for this protocol](https://www.ietf.org/rfc/rfc4251.txt)\n- [Mozilla OpenSSH security recommendations](https://infosec.mozilla.org/guidelines/openssh.html)\n- [Android Keystore system](/privacy-and-security/keystore)"]]