BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Androidプラットフォームにおけるセキュアなコーディング

Androidプラットフォームにおけるセキュアなコーディング

原文(投稿日:2014/04/11)へのリンク

カーネギーメロン大学ソフトウェア工学研究所(Software Engineering Institute)に所属するCERT Secure Codingチームは先頃,対象をAndroid上のJavaアプリケーションに特定したセキュアコーディングガイドラインをリリースした

今回のガイドラインは,2013年にCERT Javaセキュアコーディング標準 (Secure Coding Standard for Java)を公開した後,書籍"Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs"を著した,CERTのこれまでの活動の延長線上にあるものだ。そのため,新たなAndroid用のコーディングルールとガイドラインの一部は,既存のJavaのルールとガイドラインをAndroidプラットフォームに当てはめたものになっている。ただし,モバイル特有の問題に対処するために,新たなAndroid特有のルールも含まれている。

このCERT Androidコーディングルール&ガイドラインを著した研究者のひとりであるLori Flynn氏によれば,"Androidのセキュアなコーディングに関するアドバイスは他にもありますが,不完全なものである上に,Web全体に分散して存在しているのが現状です。" CERTの研究者たちが今回,コーディングルールとガイドラインを新たに開発する上で使用したテクニックは,おもに3つのものだ。

  • 既存のCERTセキュアコーディング標準に関する調査。
  • 国土安全保障省(DHS)のNVD(National Vulnerability Database)など,脆弱性データベースの調査。
  • 研究論文やオンライン記事,セキュリティカンファレンスでのプレゼンテーションといった,セキュリティに関する現行の文献調査。

すべてのルールとガイドラインはCERT wiki上で公開されている。それぞれ概要から始まって,対処するセキュリティ上の問題に関する説明があり,不適応なコード例が紹介されている。wikiではさらに,脆弱性ごとの重要性と悪用可能性を表すスコアや,コードに脆弱性が発見された場合の修正に必要な費用分析なども提供している。

InfoQではLori Flynn氏に連絡を取り,今回の"CERT Androidセキュアコーディングルール&ガイドライン"に関する話を聞いた。氏が現在CERTで行っている作業は,セキュアなコーディングのための新たなルール開発という範囲を越えて,アプリケーションがAndroidプラットフォームのデータフロールールに準拠していることをチェックするための,構造化された静的解析も含んでいる。氏はこれまでにネットワークセキュリティに関する研究,標準ベースのセキュリティ解析,さらには特許を取得した,ポリモーフィックなプログラム検出のための革新的な静的解析方法などを経験している。氏は,アドホックなモバイルネットワークのための,セキュアなマルチキャストルーティングプロトコルを中心とした研究で,カリフォルニア大学サンタクルーズ校からコンピュータサイエンスのPhDを取得している。

"Androidセキュアコーディングルール&ガイドライン"が対象として誰を想定しているのか,簡単に説明して頂けますか?

私たちが開発したAndroid用のセキュアコーディングルールとガイドラインは,おもにJava言語を使用するAndroidアプリ開発者を対象として意識したものです。さらに,CやC++などのネイティブ(Java以外の)言語でコードされたアプリ用のルールとガイドラインも,現在制作中です。信頼できるセキュアなシステムを構築する上でプログラマを支援することが最大の目的ですが,それ以外の品質特性,例えば信頼性などを達成する手段としても有効です。

ユーザシステムを妥協から守りたいと願う組織や個々の開発者にとっては,プログラマにルールとガイドラインを遵守させることで,セキュアなコードが作成できるメリットがあります。金融,医療,防衛といったシステムはすべて,アプリが取り扱う情報の安全性に注意を払わなくてはなりません。ユーザのクレジットカード情報や所在地,テキスト,連絡先,写真など,重要な情報を扱うアプリは数多くあります。ユーザに対する潜在的な危険性だけではありません。セキュアでないコードは,開発者には訴訟による経済的リスクをもたらし,企業に対しては社会的信用の失墜(と売上の喪失)を引き起こします。あるいはセキュリティ不足を公に示したアプリの販売損失という,財政的な損害を被る結果にもなります。

したがって,Androidのセキュアなコーディングルールとガイドラインに対する認識は,大組織にも,独立した個人のアプリ開発者にも有益なものです。ソフトウェア開発マネージャやソフトウェア導入担当者,あるいはその他のソフトウェア開発と導入のスペシャリストであれば,このようなセキュアコーディング標準を禁止要件のセットとして利用することも可能です。さらには教育者も,Androidアプリ用のセキュアなコーディングメソッドを開発する生徒の作業を支援することができるでしょう。

アプリケーションのセキュリティ面でモバイル利用者が直面する課題として,おもにどのようなものを想定していますか? モバイル特有のセキュリティ関連の懸念材料というものがあるのでしょうか?

今回のルールとガイドラインでは,広く一般的に認知され,受け入れられているセキュアなコーディングの課題に対する修正方法を提案しています。そのような範囲を越える課題のひとつは,アプリケーションのデータを保存する上での適切なコントロールが欠如していることでしょう。Androidアプリの対話操作方法を原因とする情報漏えいは後を絶ちません。私たちは現在,このような脆弱性を発見し,排除することのできる静的解析ツールを開発しています。私たちが行っている方法は,ユーザが – 個人であれ,企業組織であれ – 特定のアプリケーションセットに関して,データ漏洩に対してより信頼性を持つことを可能にするものです。ただしこの方法は,セキュリティ分析を発展させるものではありますが,ネイティブコードやリフレクションには対応していません。データフローのセキュリティは大きな課題であって,産学を問わず,数多くの優秀な研究者たちがこの問題に取り組んでいるのです。

ユーザビリティの部分にも問題があります。データフローの徹底的な解析が可能であったとしても,ユーザにはオプションを提供する必要があります。さらにはユーザ自身が開発者でなくても,過度の労力を要することなく,そのオプションの意味を理解できるものでなければなりません。この分野ではAdrienne Porter Felt氏(Google)が非常に優れた研究論文をいくつも発表して,ユーザインターフェースのセキュリティ問題の解析と,修正方法の提案を行っています。氏の研究は,プログラマのユーザビリティに関する問題も対象としています。例えばアクセス権の考慮が不十分なAPIが原因で,人のよい開発者が必要以上の操作権限を与えた結果,悪意を持ったアプリにそれを利用されてしまう,といったような問題です。

Androidのセキュリティに関するもうひとつの課題は,モバイルキャリアが独自に用意しているAndroidの"フレーバー"です。セキュリティ上の問題が発見され,Googleによって修正された時,これが原因となって,セキュリティアップデートがユーザに展開されるまでに長い時間を要することがあるのです。結果として,ISPがセキュリティアップデートを展開するまでの間,アプリの取り扱うデータが脆弱な状態に置かれる可能性があります。

セキュアなコーディングルールとガイドラインを充足したAndroidアプリには,どのようなメリットを期待できるのでしょうか? ガイドラインに従えば回避できたアプリケーションのバグについて,簡単な例はありますか?

Androidセキュアコーディングガイドラインに正しく準拠すれば,データやシステムがよりセキュアになります。例えばDRD00-Jでは,他のアプリからもアクセス可能なSDカードへの重要データの記録を防止しますし,DRD01-Jはコンテントプロバイダ内の重要データへのアクセスを制限します。Android版のSkypeアプリで発生して,広く認知された脆弱性のひとつでは,連絡先情報とユーザの個人情報を暗号化せずにデータベースに格納した上,アクセス権の設定がされていませんでした。このような欠陥は,DRD01-Jに準拠することで防止可能です。

SCIはプログラム言語のセキュリティを改善するため,言語の国際標準の開発にも参加しています。それら標準におけるコード脆弱性の防止を支援すると同時に,CERTセキュアコーディング標準と準拠テストの開発を通じて収集した情報を取り入れることが目標です。

CERTのセキュアコーディングルールとガイドラインを適用するためのアプローチとして,ツールやプロセス,あるいはその他の方法で,特に推奨するものはありますか? どのような関係者組織で着手するのがよいのでしょう?

開発者にはまず,"Mobile SCALe: Rules and Analysis for Secure Java and Android Coding" という簡単な技術レポートを読んで頂きたいですね。その上で,Androidセキュアコーディングのホームページを見るとよいでしょう。将来的には独立したCERTコーディングスタンダードを製作して,他のCERTセキュアコーディングスタンダードと同様,CERT Coding Standard wikiのメインページからアクセスできるようにする予定です。ホームページには,Androidセキュアコーディングスタンダードの開発に向けた,私たちの取り組みが紹介されています。既存のJavaルールの(適用性についての)分析と強化,過去に開発されたJavaガイドラインの(適用性についての)分析と強化,さらにはJava言語に限定されない,Android独自のセキュアコーディングルールの開発といった内容です。ホームページには,Androidセキュアコーディングスタンダード開発のこれら3つの主要領域へのリンクが用意されています。

その次には,DRDのルールとガイドラインを一通り読んで,自分たちのアプリ開発への適用方法を検討してみるとよいでしょう。その上で"The CERT Oracle Secure Coding Standard for Java" (Addison-Wesley Professional, 2011)やwikiで公開されているJavaルールについて,自分たちの開発に関連する部分を中心に再確認することをお勧めします。セキュアなアプリのためには,ルールが遵守されなくてはなりません。ですからガイドラインより先にルールの検討が必要なのです。次に"Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs" (Addison-Wesley Professional, 2013)についても,同じように確認しておく必要があります。すべてのルールやガイドラインが開発者にとってすぐに役立つ訳ではありませんが,一通りは読んで項目を覚えておくとよいでしょう。そうすればルールやガイドラインを適用するアプリを開発する時に,改めてその内容を確認することができます。LinkedInのセキュアコーディングに関するニュースレターである”Secure Coding Forum”も購読する価値があります。セキュアコーディングwikiにはルールやガイドラインが絶えず追加されていますから,その通知としても役に立ちます。開発者がセキュリティフィックスを絶えず心掛けるという面からも,このようなメディアは有効です。

今後もAndroidのセキュアコーディングガイドラインの完成作業を続けるのでしょうか,あるいは将来的には,何か他の領域を対象とすることを考えているのですか?

Android用のセキュアコーディングガイドラインの作業を続ける予定です。特に追求したいと思っている領域のひとつはCとC++用のCERTセキュアコーディングガイドラインの,Androidへの適用可能性の分析です。初期調査は実施していますが,Androidのネイティブコードインターフェースがルール適用に与える影響について,さらに検討が必要な状況です。リフレクションに関するルールやガイドラインについても,さらに開発が必要でしょう。

同じようなプロジェクトとしては,現在どのようなものに取り組んでいますか?

私たちCERT SCI (Secure Coding Initiative)では,CやC++, Java, Perlなどのプログラム言語を対象としたセキュアコーディング標準を開発しています。その内のいくつかについてはCiscoやOracleなどによって,企業レベルで採用されています。それらの言語を使用する開発者やその他の人たちに対しては,私たちのセキュアコーディング標準の採用を奨励しています。今回の"Androidセキュアコーディングルール&ガイドライン”も,これと同じようなメリットを提供します。

SCIの目標は,運用環境として十分に緩和されたレベルに達するまで,脆弱性の数を低減することにあります。それを実現するためには,実装とテストの段階でコーディングエラーを防止し,セキュリティ的な欠陥の検出と除去を行うことが必要です。SCIでは,コーディング標準に対するシステムのコンフォーマンステストをサポートするSCALe(Source Code Analysis Laboratory)の開発を続けています。モバイルプラットフォームに特化した,新しいコンフォーマンステスト(Mobile SCALe)も含まれています。現在のMobile SCALeは,セキュアコーディングルールとガイドラインを最初に開発したモバイルプラットフォームであるAndroidが中心ですが,AppleのiOSとMicrosoftのWindows 8についても,セキュアコーディング標準とコンフォーマンステストのサポートするモバイルプラットフォームとして加えていく予定です。

この記事に星をつける

おすすめ度
スタイル

BT