web-dev-qa-db-ja.com

アプリを終了するときにペーストボードをクリアする必要があるのはなぜですか?

私のiOSアプリケーションをスキャンしてみましたが、最もリスクの高い脆弱性は、アプリケーションを終了したときにペーストボードがクリアされないことです。特に、アプリが終了しておらず、他のアプリが並行して実行されているときにデータが依然として非常に安全でない場合、過度の熱意の結果としてユーザーがコピーした潜在的に有用な情報を失うことを望まない。

私と同様の質問ですが、Windowsペーストボードの場合、デバイスにマルウェアが存在する場合、ペーストボードは心配する必要がほとんどないため、これは高リスクの問題ではないことが示唆されています。これを実行する必要がある主な理由は何ですか?なぜそれがかなり高いリスクと見なされるのですか?

アプリはインターネットにアクセスでき、SPIが含まれています。

7
Declan McKenna

実際にデバイスにマルウェアが存在する場合、ペーストボードにこのデータを保存させることで、心配することはほとんどありません。ただし、これは依然として悪い習慣です。

重要なユーザーデータをクリップボードに保存しないでください。とにかくそれをペーストボード/クリップボードに置くべきではありません。どうして?悪意のあるアプリケーションがクリップボードデータにアクセスする可能性があるためです。 Webサイトを想像してみてください クリップボードにアクセスします (通常またはエクスプロイトを通じて)、または別のアプリケーションがそれを保存してリモートサーバーに送信しますか?

次のようなメソッドがある場合はどうなりますか?

sendDataToRemoteServerForPurposesOfExtremeHaxoring(string evilLaugh, string pasteboardData)

そのようです:

// Oh noes!
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
sendDataToRemoteServerForPurposesOfExtremeHaxoring("Mwahahahahaha", pasteBoard.string);

また、ユーザーのパスワードやその他の重要な情報をクリップボードに保存することは、私の意見では、非常に大規模な禁止事項です。ユーザーが誤って貼り付けた場合はどうなりますか?アプリケーションがそれを悪用した場合はどうなりますか? websiteがそれを悪用した場合はどうなりますか?これを行わない理由はたくさんあります。

3
Mark Buffalo

クリップボードは確かに 安全な場所と見なすことはできません 、これにはいくつかの理由があります:

  • クリップボードコンテンツにアクセスするマルウェア:質問では、マシンにインストールされたマルウェアに焦点を当てましたが、一時的なマルウェア(悪意のあるAdobe Flashバナーなど)が存在する可能性がありますたとえば、アクセスしたWebサイト...)実行時にコンピュータに感染することはありませんが、その時点でクリップボードのコンテンツを取得して自宅に送信しようとするだけです。

  • ユーザーの誤った操作:間違った操作は、間違ったコンテンツを間違った場所に貼り付ける可能性があります。通常、結果はありませんが、機密データを使用すると、このような誤った操作が依然として重大な結果をもたらす可能性があります。

  • ユーザーの周りの人々:コンピュータが無人でロック解除されたままになっている場合、またはユーザーの注意が一時的に気が散っている場合、他の誰かがCtrl-V、次にCtrl-Zキーボードを使用すると、ユーザーに気付かれずにクリップボードのコンテンツをすばやく表示できます。

クリップボードの使用を完全に回避することをお勧めしますが、このような脅威の緩和策として、機密データがクリップボードに長時間保持されないようにする必要があります。より長いです。

あなたの質問では、アプリケーションが終了したときにクリップボードをクリアすることをお勧めします。これの効率は、アプリケーションの使用方法に大きく依存します。これが1日の終わりにのみ閉じられる種類のアプリケーションである場合、このような方法は効果がないようです。

この状況の良い例であり、インスピレーションを与えるソースとして、パスワードマネージャー KeePass があります。これは、ユーザーの設定に応じて、2つの方法でこれを処理することを提案します。

  • クリップボードの使用を完全に回避するために、KeePassはそれが何と呼ばれるかを提案します Auto-Type :適切なキー押下をシミュレートすることにより、対象のフィールドを直接埋めます。利点は、データがクリップボードを通過しないことですが、そのような動作は実装がより複雑であり、完全な互換性や移植性がない場合があります(特にモバイルアプリケーションについて言及しているため、そうです)。

  • クリップボードを使用してパスワードをコピー/貼り付けする場合、しばらくすると自動的にクリップボードをクリアするようにKeePassを構成できます。パスワードをコピーするとき、KeePassはメインウィンドウの下部に減少する進行状況バーを表示し、タイムアウトの進行状況を視覚的にフィードバックします。タイムアウトが経過すると(たとえば15秒または30秒)、 clipboard KeePassデータがまだ含まれています その後、KeePassはクリップボードのコンテンツを削除します(ただし、これが本当に効果的であるためには、これらの「クリップボード履歴マネージャー」のいずれかを使用してはなりません)。

5
WhiteWinterWolf

ここではiOSの側面に焦点を当てます。他の回答では、iOSに適用できないものについて言及しています(たとえば、「自動タイプ:」)。私はiOS開発者で、「安全な」アプリに取り組んできました。

悲しいことに、私がiOSコード用に試したすべての「セキュリティスキャナー」は、せいぜい「非常に誤解を招く」と私が呼ぶものです。私が通常使用するフレーズは、stackexchangeには家族向けではないのではないかと思います。

「脆弱性」とその緩和策は「非常に誤解を招く」ものです。これは使いやすさを損なうだけでなく、iPadが「サイドバイサイド」マルチタスクでアプリを実行しているときや、その他の状況では役に立ちません。

WhiteWinterWolfが言うように、ユースケースで問題がなければ、そもそもシステムクリップボードに機密性の高いデータを置かないことを検討する必要があります。 iOSでは、UITextFieldUITextView(など)をサブクラス化し、システムを使用しないUIResponderStandardEditActionsの代わりを提供することで、アプリに内部クリップボードを実装できます[UIPasteboard generalPasteboard]

IOS 10の時点で、データを他のアプリケーションに渡せるようにする説得力のあるユースケースがある場合は、UIPasteboardOptionExpirationDateUIPasteboardOptionLocalOnlyも設定できます(iOS 10はすべてのデバイスでクリップボードを共有するようになりました)公開を制限するために、デフォルトで同じiCloudアカウントにログインします。

2
JosephH