開発者のためのセキュリティのベストプラクティス

Adobe AIR 1.0 およびそれ以降

AIR アプリケーションが Web テクノロジを使用して構築されていても、開発者はそれらの AIR アプリケーションがブラウザーのセキュリティサンドボックス内で機能していないことに気づくことが重要です。つまり、故意にまたは誤ってローカルシステムに損害を与える可能性がある AIR アプリケーションを構築する場合があります。AIR はリスクを最小化しようと試みますが、脆弱性が取り込まれる可能性はまだあります。ここでは、重要なセキュリティ上の潜在的なリスクについて説明します。

ファイルをアプリケーションセキュリティサンドボックスにインポートした場合のリスク

アプリケーションディレクトリに存在するファイルはアプリケーションサンドボックスに割り当てられ、ランタイムの完全な権限が付与されます。ローカルファイルシステムに書き込みを行うアプリケーションは、 app-storage:/ に書き込むことをお勧めします。このディレクトリはユーザーのコンピューター上のアプリケーションファイルとは別の場所にあるため、ファイルはアプリケーションサンドボックスに割り当てられず、セキュリティのリスクは軽減されます。開発者は次の点に注意する必要があります。

  • ファイルは必要な場合にのみ AIR ファイル(インストール済みアプリケーション内)に含めます。

  • スクリプトファイルは、動作が完全に把握され、信頼される場合にのみ AIR ファイル(インストール済みアプリケーション内)に含めます。

  • アプリケーションディレクトリに書き込みを行ったり、アプリケーションディレクトリ内のコンテンツを変更したりしないでください。ランタイムでは、アプリケーションが app:/ URL スキームを使用してファイルやディレクトリに書き込みを行ったり、それらを変更したりすると、SecurityError 例外をスローしてその操作を回避します。

  • ネットワークソースのデータを AIR API のメソッドのパラメーターとして使用しないでください。これによりコードが実行される可能性があります。これには、 Loader.loadBytes() メソッドや JavaScript eval() 関数の使用が含まれます。

外部ソースを使用してパスを判断する場合のリスク

AIR アプリケーションは、外部のデータまたはコンテンツを使用すると、改ざんされる可能性があります。このため、ネットワークまたはファイルシステムのデータを使用する場合は特に注意する必要があります。信頼の責任は最終的には開発者と、開発者が作成するネットワーク接続にありますが、外部データの読み込みは本来リスクを伴うものであるので、機密データの操作への入力には使用しないでください。開発者は次の操作を行わないことをお勧めします。

  • ネットワークソースのデータを使用したファイル名の決定

  • ネットワークソースのデータを使用した、アプリケーションでの個人情報の送信に使用される URL の作成

保護されていない資格情報を使用、保存または送信する場合のリスク

ユーザー資格情報をユーザーのローカルファイルシステムに保存することは本来リスクを伴い、これらの資格情報が改ざんされる可能性があります。開発者は次の点に注意する必要があります。

  • 資格情報をローカルに保存する必要がある場合は、ローカルファイルシステムに書き込むときに資格情報を暗号化します。 ランタイムでは、EncryptedLocalStore クラスを使って各インストール済みアプリケーションに固有の暗号化された記憶領域を提供します。詳しくは、 暗号化されたローカルストア を参照してください。

  • ネットワークソースが信頼され、送信に HTTPS: または Transport Layer Security(TLS)プロトコルが使用されているのでなければ、暗号化されていないユーザー資格情報をそのソースに送信しないでください。

  • 資格情報の作成時にデフォルトのパスワードを指定しないでください。パスワードはユーザー自身が作成できるようにしてください。デフォルトパスワードを指定すると、それが攻撃者に知られた場合、デフォルトを変更しないで使用しているユーザーの資格情報が無防備な状態に置かれることになります。

ダウングレード攻撃のリスク

アプリケーションのインストール中に、ランタイムはアプリケーションのバージョンが現在インストールされていないことを確認します。アプリケーションが既にインストールされている場合、ランタイムはバージョンストリングをインストールされているバージョンと比較します。このストリングが異なる場合、ユーザーはインストールのアップグレードを選択できます。 ランタイムは、新しくインストールされたバージョンが古いバージョンよりも新しいことを保証せず、それが異なるバージョンであるということだけを保証します。攻撃者は古いバージョンをユーザーに配布して、セキュリティの弱点をくぐり抜ける可能性があります。 このため、開発者はアプリケーションの実行時にバージョンの確認を行うことをお勧めします。ネットワークで要求されたアップデートがあるかどうかをアプリケーションに確認させるのも良い方法です。その場合、攻撃者がユーザーに古いバージョンを実行させていても、その古いバージョンは更新する必要があることを認識します。また、アプリケーションで明確なバージョン管理スキームを使用すると、ユーザーがダウングレードバージョンをインストールする可能性が低くなります。