この記事は Android セキュリティ チーム、Xiaowen Xin、Renu Chaudhary による Android Developers Blog の記事 "What’s new in WebView security" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
アプリのとても重要な機能の 1 つに、信頼できない外部コンテンツの処理があります。ニュースリーダーはトップニュース記事を表示し、ショッピング アプリは商品のカタログを表示します。こういった操作には、リスクを伴います。信頼できないコンテンツの処理は、攻撃者がアプリのセキュリティを侵害する、つまり悪意のあるコンテンツを渡す主要な方法の 1 つだからです。
多くのアプリは、信頼できないコンテンツの処理に WebViewを使っています。Android では、WebView やアプリをセキュリティ侵害から保護するため、ここ数年で多くの改善が行われています。重要な修正をいち早くユーザーに提供できるように、Android Lollipop 以降では WebView が独立した APK として配布され、Play ストアで 6 週間ごとにアップデートされるようになっています。最新の WebView では、いくつかの重要なセキュリティ強化が行われています。
Android O 以降では、WebView のレンダラーはホストアプリとは別の独立したプロセスで実行されるようになります。そのため、他のアプリが利用する Android 提供のプロセスとは分離されているというメリットを活用できます。
Chrome と同様に、WebView でも 2 つのレベルで分離されるようになります。
最新版の WebView には、危険性があるサイトを検知してユーザーに警告する Google のセーフ ブラウジング保護が導入されています。正しい設定が行われている場合、WebView は URL と不正なソフトウェアやフィッシングに関するセーフ ブラウジングのデータベースを突き合わせてチェックし、ユーザーが危険なサイトにアクセスする前に警告メッセージを表示します。Chrome では、この有用な情報は月間 2 億 5,000 万回以上表示されています。この機能が Android の WebView でも利用できるようになります。
アプリ内のすべての WebView でセーフ ブラウジングを有効化するには、マニフェスト タグに以下を追加します。
WebView は個別の APK として配布されているため、現在のところ、WebView のセーフ ブラウジングは Android 5.0 以降を実行している端末で利用できます。マニフェストに 1 行追加してアプリをアップデートするだけで、多くのユーザーのセキュリティを即座に改善できます。
Reviewed by Yuichi Araki - Developer Relations Team
アプリのとても重要な機能の 1 つに、信頼できない外部コンテンツの処理があります。ニュースリーダーはトップニュース記事を表示し、ショッピング アプリは商品のカタログを表示します。こういった操作には、リスクを伴います。信頼できないコンテンツの処理は、攻撃者がアプリのセキュリティを侵害する、つまり悪意のあるコンテンツを渡す主要な方法の 1 つだからです。
多くのアプリは、信頼できないコンテンツの処理に WebViewを使っています。Android では、WebView やアプリをセキュリティ侵害から保護するため、ここ数年で多くの改善が行われています。重要な修正をいち早くユーザーに提供できるように、Android Lollipop 以降では WebView が独立した APK として配布され、Play ストアで 6 週間ごとにアップデートされるようになっています。最新の WebView では、いくつかの重要なセキュリティ強化が行われています。
Android O でのレンダラー プロセスの分離
Android O 以降では、WebView のレンダラーはホストアプリとは別の独立したプロセスで実行されるようになります。そのため、他のアプリが利用する Android 提供のプロセスとは分離されているというメリットを活用できます。
Chrome と同様に、WebView でも 2 つのレベルで分離されるようになります。
- レンダリング エンジンは別のプロセスとして分割されます。これにより、ホストアプリはレンダラー プロセスのバグやクラッシュから切り離され、悪意のあるウェブサイトがレンダラーの脆弱性を利用してホストアプリを攻撃することは難しくなります。
- さらなる封じ込めとして、レンダラー プロセスは限られたリソースセットしか使えない独立したプロセス サンドボックス内で実行されます。たとえば、レンダリング エンジン単独では、ディスクへの書き込みやネットワーク通信を行うことはできません。 Android 版 Chrome で使われているものと同じ seccomp フィルターもバインドされています(seccomp については、近日中にブログに投稿します)。seccomp フィルタは、レンダラー プロセスがアクセスできるシステムコールの数を減らし、さらにシステムコールで許可する引数も制限します。
セーフ ブラウジングの導入
最新版の WebView には、危険性があるサイトを検知してユーザーに警告する Google のセーフ ブラウジング保護が導入されています。正しい設定が行われている場合、WebView は URL と不正なソフトウェアやフィッシングに関するセーフ ブラウジングのデータベースを突き合わせてチェックし、ユーザーが危険なサイトにアクセスする前に警告メッセージを表示します。Chrome では、この有用な情報は月間 2 億 5,000 万回以上表示されています。この機能が Android の WebView でも利用できるようになります。
セーフ ブラウジングの有効化
アプリ内のすべての WebView でセーフ ブラウジングを有効化するには、マニフェスト タグに以下を追加します。
<manifest>
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
. . .
<application> . . . </application>
</manifest>
WebView は個別の APK として配布されているため、現在のところ、WebView のセーフ ブラウジングは Android 5.0 以降を実行している端末で利用できます。マニフェストに 1 行追加してアプリをアップデートするだけで、多くのユーザーのセキュリティを即座に改善できます。
Reviewed by Yuichi Araki - Developer Relations Team