【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~

公開日: : Android, SECURITY, 備忘録 ,

近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユーザが爆増してきているようです。。。
当然利用ユーザが多くなれば悪事の標的にもされやすくなります。

ってことでスマートフォンのポピュラーなセキュリティ脆弱性についてアプリ開発者視点で簡単にまとめておきます。

iPhoneについてはハードウェア的にもソフトウェア的にも縛りが厳しく、それなりにセキュアが保たれているようなので、今回は縛りがゆるゆるで色々悪事が出来てしまうAndroidについて取り扱います。(WindowsPhoneは知らん。)

 

 ファイルのアクセス権限について

あるアプリで個人情報などを記録したファイルがあるとします。そのファイルのアクセス権がきちんと最適に設定されていない場合、他の悪意のあるアプリからアクセスされてしまい、情報の改変や外部への漏洩が起こりうります。

内部ストレージのアクセス権限設定

通常、あるアプリで作成したファイルは、特に他のアプリと連携する必要がない場合、そのアプリからのみアクセス可能、他アプリからはアクセス不可なようにすべきです。下記のようなのがよくあるミス。

outputStream = openFileOutput(STRAGE_FILE_NAME, MODE_WORLD_READABLE | MODE_APPEND);

ファイルを書き出す際、アクセス権がMODE_WORLD_READABLEと、他アプリからも参照できるようになっています。
通常しないような気もしますが、どっかのサイトから適当にコピペした場合などに起こりうるかもしれません。
MODE_PRIVATEなど、他アプリからは参照できないようにすべきです。

もし他アプリとデータの連携が必要な場合は、ContentProvider,BroadcastReceiver,Serviceなどの仕組みを用いて制御すべきです。

SDカードへのアクセス権限の理解

上記のように、内部ストレージへのデータ保存の場合、アプリ側でアクセス権を制御することは可能なわけですが、SDカードへのデータ保存の場合は違います。すなわち、アプリ側でのアクセス権の制御ができず、全アプリからアクセスが可能となります。

SDカードへファイルを書き込む場合、下記のようになるかと思います。

// 既存のファイルを一度削除した後、新たにファイルを作成 
File file = new File(SD_FILE_PATH); 
file.getParentFile().mkdir();

// 書き込み処理を行う
fileOutputStream = new FileOutputStream(file, true);
fileOutputStream.write(data.getBytes());

見ての通り、アプリでのアクセス権の制御の余地はありません。

つまりはSDカードへのデータを保存する場合は、見られても構わないようなデータのみにすべきで、見られて困るようなデータを保持したい場合は、内部ストレージを使用しましょう、ということ。
また、SDカードだと、物理的に抜かれるリスクもありますし。

というインセキュアな事情もあり、Google側でも今後アプリからSDカードへの書き込みは出来なくする方向で進めてるみたいですね。

【参考】
http://source.android.com/devices/tech/storage/index.html

Preferenceファイルのアクセス権限設定

Preferenceは、キーバリューストア方式で内部ストレージへ容易にデータを保存する仕組みです。実装が簡単なため、僕もよく使います。。
これも最初の例と同様に、アクセス権の設定によっては他のアプリからアクセス可能になってしまいます。
危ないコードは以下の様な感じ。

// SharedPreferences型インスタンスを取得
preferences = getSharedPreferences(PREFERENCE_NAME, MODE_WORLD_READABLE);

最初の例と同じで、ファイル作成時、アクセスモードをMODE_WORLD_READABLEとしています。MODE_PRIVATEにすべきです。

 

まとめ

アプリ開発者は、ファイル作成時、アクセス権を意識してコーディングしましょうということ。
具体的には、

  • 見られて困るデータは内部ストレージへ保存するようにする。また、その際にはアクセス権限をMODE_PRIVATEとかにする。
  • SDカードへの保存は、見られて困らないようなデータのみに限定すべき。

また、アプリ利用者も、SDカードへ基調なデータはなるべく入れないよう心がけることが大切なのです、きっと。

参考サイト

GoogleAdsense

関連記事

dordoidくん

【Android】難読化ツールProguard設定まとめ

Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール

記事を読む

genymotion_logo

genymotionのすすめ

Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この

記事を読む

MySQLでの条件付きSUM,COUNT

以前つっかかったMySQLでの条件付きSUM,条件付きCOUNTについて備忘録。。。 通常、条

記事を読む

Win7, 64bit環境でのcocos2d-x環境構築まとめ

さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど

記事を読む

openssh

SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Ope

記事を読む

【Androidエラー】Conversion to Dalvik format failed with error 1

Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ

記事を読む

nerdtree

Vimプラグイン「NERDTree」設定・コマンド備忘録

Vimのプラグインである「NERDTree」について、設定・コマンドを備忘録としてまとめておきます。

記事を読む

bash設定ファイルについてまとめてみた

仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ

記事を読む

【Android】APKのデコンパイルまとめ

AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコード

記事を読む

hydra

クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認

記事を読む

GoogleAdsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

GoogleAdsense

openssh
SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておく

node_cookie
【Node.js】 Cookieの取り扱いまとめ

最近流行りのNode.jsですが、Cookieに関して、いくつ

hydra
クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hyd

john the ripper
パスワードクラックツール JOHN THE RIPPER 使い方まとめ

パスワードクラッキングツールである「JOHN THE RIPPER」の

宇部空港
久々の帰省・・・

宇部空港にて[/caption] たまには普通の日記を。。。

→もっと見る

PAGE TOP ↑