web-dev-qa-db-ja.com

Android / iOSアプリ独自のストレージにパスワードを保存しても安全ですか?

私は、oauth2または他の同様のメカニズムを実装していないリモートAPIにログインするアプリを作成しています。パスワードが安全であると想定するために reasonably safeかどうかを知りたいです 共有設定 またはSQLiteのようなアプリのプライベートストレージに保存されている場合

5
IAmJulianAcosta

アプリデベロッパーにガイダンスを提供する組織であるOWASPには、いくつかの参考資料があります。

  1. 元のMobile Top Ten 2012 Insecure Data Storageリファレンス https://www.owasp.org/index.php/Mobile_Top_10_2012-M1
  2. 更新されたMobile Top Ten 2014 Insecure Data Storageリファレンス- https://www.owasp.org/index.php/Mobile_Top_10_2014-M2
  3. アプリの機能的なタスクで必要なときに、どのタイプのデータをどこに保存するかについて具体的な提案を行うiOS開発者のチートシート https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet#Insecure_Data_Storage_ .28M1.29

Androidの場合、提案した共有設定の代わりに secure-preferences または cwac-prefs を使用することをお勧めします。本のこれらの例をチェックしてくださいAndroid Security Cookbook。

IOSでは、キーチェーンにデータを格納するために Lockbox を推奨するiOSアプリケーションセキュリティの本と、資格情報を追加および削除する方法を必ずお読みください。 iOSモバイルアプリを作成している場合は、この本を強くお勧めします。

ロックボックスを使用したくない場合や、何らかの理由でロックボックスを使用できない場合(または別のオプションを試してみたい場合)は、モバイルアプリケーションの侵入テストという本からこのアイデアを確認してください。

第2章「アーキテクチャの周りのスヌーピング」のセクション「キーチェーンデータ保護」で学習したように、Appleが提供するさまざまなオプションを利用します。単純なラッパーPDKeyChainBindingController( https://github.com/carlbrown/PDKeychainBindingsController )の1つを利用して、キーチェーンデータを保護することもできます。ただし、デバイスがジェイルブレイクされている場合、キーチェーン情報は安全ではありません。キーチェーンに格納されている文字列を暗号化するには、カスタム暗号化技術を使用することをお勧めします。キーチェーンサービスAPIを最大限に活用します( https://developer.Apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html )。

この本では、キーチェーンの資格情報ストレージに関連する別の問題についても取り上げています。

2015年6月18日、iOSおよびOS Xに概要が示されている、XARA(クロスアプリケーションリソースアタック)としても知られるパスワード盗用の脆弱性により、ジェイルブレイクデバイスおよび非ジェイルブレイクデバイスのキーチェーンサービスがクラックされました。この脆弱性は、Webアプリケーションでのクロスサイトリクエストフォージェリ攻撃に似ています。 Appleの分離保護とApp Storeのセキュリティ検査にもかかわらず、セキュリティ制御メカニズムを回避することが可能でした。それは明らかに、オペレーティングシステムとアプリ開発者の間のアプリ間メカニズムを保護する必要性を提供しました。 Apple XARA調査の1週間後にセキュリティアップデートを公開。詳細は http://www.theregister.co.uk/2015/06/17/Apple_hosed_boffins_drop_0day_mac_ios_research_blitzkrieg /

キーホルダー自体の詳細を提供します。ジェイルブレイクされたデバイスを利用してキーチェーンにアクセスしようとした場合

IOSデバイスのキーチェーンは、ユーザー名、パスワード、さまざまなアプリケーションの認証トークンなどの資格情報や、接続(Wi-Fi/VPN)資格情報などの機密情報を安全に格納するために使用されます。 iOSデバイスでは、暗号化されたSQLiteデータベースファイルとして/private/var/Keychains/keychain-2.dbにあります。

4
atdre

Androidネイティブドキュメントによると、提供された回答は間違っています

一般に、ユーザーの認証情報を要求する頻度を最小限に抑えることをお勧めします。これにより、フィッシング攻撃がより目立ち、成功する可能性が低くなります。代わりに、認証トークンを使用して更新してください。

可能であれば、ユーザー名とパスワードをデバイスに保存しないでください。代わりに、ユーザーから提供されたユーザー名とパスワードを使用して初期認証を実行し、有効期間が短いサービス固有の承認トークンを使用します。

それはここのトレーニングドキュメントにあります:

https://developer.Android.com/training/articles/security-tips#UserData

1
Rodolfo Abarca