JSSEC技術部会 モバイルアプリケーション開発 10大チェックポイント 2023
モバイルアプリケーション開発 10大チェックポイント 2023(JSSEC Mobile Top 10 2023)は、2016年のリリースを最に更新されていない「OWASP Mobile Top 10プロジェクト」を再解釈し、現在の状況にあった「Mobile Top 10」を選定しました。
OWASP(Open Web Application Security Project)※1 のLabプロジェクトである「OWASP Mobile Top 10 ※2」は、OWASPが数多く公開する啓発文書「Top 10」シリーズの一つで、スマートフォン(モバイル)アプリケーション開発者に対する意識向上を目的とした文書です。この文書は、スマートフォンアプリケーションの開発に気を付けなければならない10項目がわかりやすくまとめられており、開発者が最低限理解しておくべきことを記述した文章で構成されています。
この文書をもとに、新規で追加すべき項目について、JSSEC参加企業のモバイルセキュリティ技術者および有識者により議論を行い、「Androidアプリのセキュア設計・セキュアコーディングガイド ※3」との紐づけを行うなど、モバイルアプリケーション開発者の方に使っていただきやすい構成を目指しました。
(注)
本文書の各カテゴリの解説は、株式会社ラックの有志によるOWASP Mobile Top 10 2016の日本語訳 ※4 をもとにそれを改変したものを多く含んでおります。
また、本文書のうちM1~M10のタイトル及び解説は、Creative Commons Attribution-ShareAlike 4.0 ※5 に従います。
※2:https://owasp.org/www-project-mobile-top-10/
※3:https://www.jssec.org/dl/android_securecoding/index.html
※4:https://github.com/LAC-Japan/OWASP-Mobile-Top-10-2016?_fsi=4q0VVe0e&_fsi=9wTDuKbX
※5:https://creativecommons.org/licenses/by-sa/4.0/
OWASP Top 10 2016とJSSEC Mobile Top 10 /2022の対応付けは以下のようになります。
【M1】プラットフォームの不適切な利用
本カテゴリは、プラットフォーム機能の誤用や、プラットフォームセキュリティコントロールの不使用が対象です。Androidインテント、プラットフォームのアクセス許可、生体認証の誤用、キーチェーン、モバイルOSの一部である他のセキュリティコントロールが含まれます。モバイルアプリケーションには、本リスクを有してしまう幾つかの状況があります。
※対応OWASP Mobile Top 10 2016とその差異
- M1: Improper Platform Usage
https://owasp.org/www-project-mobile-top-10/2016-risks/m1-improper-platform-usage
順位は同じくで、内容もほぼ変更はありません。一点だけ、OWASP Mobile Top 10 2016では生体認証を指紋認証に限っていましたが、これは2016年という時代に依るもので、現在ではFaceIDなど生体認証も多岐にわたるため「生体認証」としました。
※対応セキュアコーディングガイド
- 1 Activityを作る・利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#activity - 2 Broadcastを受信する・送信する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#broadcast - 3 Content Providerを作る・利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#content-provider - 4 Serviceを作る・利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#service - 7 Browsable Intentを利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#browsable-intent - 8 LogCatにログ出力する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#logcat - 9 WebViewを使う
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#webview - 10 Notificationを使用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#notification - 11 共有メモリを利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#use-sharedmemory - 2 PermissionとProtection Level
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#permissionprotection-level - 3 Account Managerに独自アカウントを追加する
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#account-manager - 7 生体認証機能を利用する
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#use-fingerprint
【M2】不適切なクレデンシャルの利用
本カテゴリは、APIキーやクラウドサービスのクレデンシャルなどのハードコードなどが対象です。ハードコードされたAPIキーやクレデンシャルは、リバースエンジニアリングによって漏洩する恐れがあり、これによってAPIやクラウドサービスが侵害される可能性があります。
※対応OWASP Mobile Top 10 2016とその差異
新規です。
主にAndroidにおいては、アプリケーションバイナリの取り出し、リバースエンジニアリングが容易であり、これによってAPIキー、クレデンシャルが漏洩した脆弱性が報告されているため、M2に据えました。
※対応セキュアコーディングガイド
なし
【M3】クライアントコードの品質と安全性
本カテゴリは、モバイルクライアントのコードレベルの実装の問題が対象です。サーバサイドのコーディングミスとは異なるものです。本カテゴリは、バッファオーバーフローやフォーマットストリングの脆弱性や、他の様々なコードレベルのミスといったモバイルデバイス上で実行されるコードを書き換えることで解決できることが対象です。また、本カテゴリには同梱されるOSSなどのパッケージに対する脆弱性の不適切な管理を含みます。
※対応OWASP Mobile Top 10 2016とその差異
- M7: Client Code Quality
https://owasp.org/www-project-mobile-top-10/2016-risks/m7-client-code-quality
OWASP Mobile Top 10 2016では外部由来の入力文字列の扱いといった狭い範囲を主に扱っていましたが、クライアントコードの品質という意味ではより広い脅威が考えられますのでこの限定を外しました。
また、現代において関心が増しているOSSセキュリティ、サプライチェーンリスクもこの項目に含まれます。そのためOWASP Mobile Top 10 2016の7位から大きく順位を上げました。
※対応セキュアコーディングガイド
なし
【M4】安全でない通信
本カテゴリは、脆弱なハンドシェイク、不適切なSSLバージョン、脆弱なネゴシエーション、機密情報の平文通信などが対象です。
※対応OWASP Mobile Top 10 2016とその差異
- M3: Insecure Communication
https://owasp.org/www-project-mobile-top-10/2016-risks/m3-insecure-communication
内容については変更ありません。
※対応セキュアコーディングガイド
- 4. HTTPSで通信する
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#https
【M5】安全でない認証
本カテゴリは、エンドユーザの認証やセッション管理の不備が対象です。以下のようなものがあります。
- ユーザを特定できない
- ユーザの同一性を維持できない
- セッション管理の不備
※対応OWASP Mobile Top 10 2016とその差異
- M4: Insecure Authentication
https://owasp.org/www-project-mobile-top-10/2016-risks/m4-insecure-authentication
内容については変更ありません。
※対応セキュアコーディングガイド
なし
【M6】不十分な暗号化
機密情報資産を暗号化するプログラムには、暗号処理が不十分な場合があります。TLSやSSLに関連するあらゆるものは、M4(安全でない通信)に含まれるという点に注意してください。また、暗号化すべき時にアプリが暗号を使用しない場合は、M9(安全でないデータストレージ)に含まれます。本カテゴリは、暗号化が実行されたにもかかわらず、正しく行われていないという問題が対象です。
※対応OWASP Mobile Top 10 2016とその差異
- M5: Insufficient Cryptography
https://owasp.org/www-project-mobile-top-10/2016-risks/m5-insufficient-cryptography
内容については変更ありません。参照している文書番号のみ変更しています。
※対応セキュアコーディングガイド
- 6 暗号技術を利用する
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#using-cryptography
【M7】安全でない認可制御
本カテゴリは、認可制御の不備(例えば、クライアント側での認可決定や強制ブラウジングなど)が対象です。これは、認証の問題(例えば、デバイス登録やユーザ識別)とは異なるものです。もし、認証が必要な状況でアプリがユーザを全く認証していない場合は (例えば、認証され許可されたアクセスが必要であるにもかかわらず、一部のリソースやサービスに匿名アクセスが許可されているなど)、認証の不備(M5)であり、本カテゴリには含まれません。
※対応OWASP Mobile Top 10 2016とその差異
- M6: Insecure Authorization
https://owasp.org/www-project-mobile-top-10/2016-risks/m6-insecure-authorization
内容については変更ありません。参照している文書番号のみ変更しています。
※対応セキュアコーディングガイド
なし
【M8】コード改ざん
本カテゴリでは、バイナリ更新、ローカルリソースの改ざん、メソッドフッキング、メソッドスウィズリング、動的メモリ改ざんや、これを容易にするためのバイナリ解析によるリバースエンジニアリングについて記載します。アプリケーションがモバイルデバイスに一旦配信されると、コードとデータといったリソースは端末に常駐することになります。攻撃者は、そのコードを直接改ざんしたり、メモリ内容を動的に改ざんしたり、アプリケーションが使用するシステムAPIを変更や置換したり、アプリケーションのデータやリソースを改ざんしたりすることが可能です。これにより攻撃者は、個人的利益もしくは金銭的利益のために、ソフトウェアが本来意図している使用方法を直接覆すことができるようになります。
※対応OWASP Mobile Top 10 2016とその差異
- M8: Code Tampering
https://owasp.org/www-project-mobile-top-10/2016-risks/m8-code-tampering - M9: Reverse Engineering
https://owasp.org/www-project-mobile-top-10/2016-risks/m9-reverse-engineering
両カテゴリとも主にゲームチート系で用いられるということで、OWASP Mobile Top 10 2016のM8およびM9を統合して一つのカテゴリとしました。
※対応セキュアコーディングガイド
なし
【M9】安全でないデータストレージ
本カテゴリはOWASP Mobile Top 10 2016のM2(安全でないデータストレージ)に対応するものです。スマートフォンの紛失・盗難に伴い悪意ある第三者からデータストレージの内容を抜き取られ、機密情報が奪われることを想定しています。現代ではOSによるデータストレージの暗号化が必須となったため、このカテゴリの順位は大幅に下がりました。
※対応OWASP Mobile Top 10 2016とその差異
- M2: Insecure Data Storage
https://owasp.org/www-project-mobile-top-10/2016-risks/m2-insecure-data-storage
概要にも書いたとおり、現代においてはOSによるデータストレージの暗号化が必須になったため、本カテゴリの危険度は下がったとみなしてM9としました。
※対応セキュアコーディングガイド
- 5 SQLiteを利用する
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#sqlite - 6 ファイルを扱う
https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html#manipulating-files - 1 パスワード入力画面を作る
https://www.jssec.org/dl/android_securecoding_20220829/5_how_to_use_security_functions.html#id2
【M10】余計な機能
開発者は、本番環境にリリースするつもりではない隠されたバックドア機能や内部開発用のセキュリティコントロールを本番用に含めてしまうことがあります。例えば、開発者がうっかりハイブリッドアプリケーションのコメントにパスワードを記載してしまったり、テストで無効化した二要素認証をそのままにしてしまったりする恐れがあります。
※対応OWASP Mobile Top 10 2016とその差異
- M10: Extraneous Functionality
https://owasp.org/www-project-mobile-top-10/2016-risks/m10-extraneous-functionality
内容に変更はありません。
※対応セキュアコーディングガイド
なし
<モバイルアプリケーション開発 10大チェックポイント 2023 選定委員>
委員長 小笠原徳彦(株式会社SHIFT SECURITY)
仲上竜太(ニューリジェンセキュリティ株式会社)
本間輝彰(KDDI株式会社)
宮崎力(株式会社ラック)
上松晴信(KDDI株式会社)
Pantuhong Sorasiri(株式会社ラック)
小坂善彦(株式会社SHIFT SECURITY)
※順不同