@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

スマートフォンのアーキテクチャとセキュリティ に行ってきたよ

Zussarでエントリしましたが、ATND Betaでもイベント立っていたみたいです。
メモしたものを投下しておきます。

  • Androidシステム
    • Linuxカーネルベースですが、独自の機能が追加されています。
      • binderとか、ashmanとか、loggerなど
    • ネイティブデーモンはadbとかのためのモジュールです
    • zygote+dalvik
      • Androidフレームワークとか共通ライブラリとかが含まれます
      • AppProcess
      • これらがひとつの単位になっています
      • forkコマンドでこのひとつの単位の構成がコピーされるイメージになります
      • このことで、メモリ空間を共有して、節約するようになっています。
    • アプリ間の連携の仕組み
      • アプリ→フレームワーク→binder(連携を司る)→SystemServer(実際の処理をする)
  • Androidファイルシステム
    • Linuxベースなので、似ています。
    • system
    • vendor
      • 端末ベンダーが色々追加する領域
      • プリインのアプリとかはこちらに入っている
    • data
      • ユーザがインストールするアプリとか
      • ライブラリとかデータとか
    • systemとvendor
      • システム権限で動作します
      • 書き込み権限はありません、なので上書き出来ない
      • ここのアプリが使うデータなども、dataに入ります。
  • セキュリティ機能
    • パーミッション
      • 4.0.3で200以上あります。
      • 主なのは、INTERNETとか、READ_PHONE_STATEとか
      • パーミッションを指定しないと使えない機能があります
      • しかしながら、パーミッションがあれば、悪いことも出来てしまいます。
    • アクティビティ
    • コンテンツプロバイダ
      • 読み込みだけとか、ReadWriteとかの指定が可能
    • 保護レベル
      • nomarl, dengerous, signature, signatureOrSystem
    • インテントフィルタ
      • 優先度を指定出来ます
      • システムの優先度以上は上げられないようになっている。
      • マルウェアをシステム以上の優先度にして、システムと似たUIにしちゃえばばれないようになってるので、その配慮。
    • 特権ユーザ専用
      • root/systemユーザは、パーミッションの制限を受けない
      • 常駐アプリなどがこれで出来るようになる
    • サンドボックス
      • アプリにはアプリそれぞれにLinuxのユーザIDが割り当てられます
      • 同じ鍵のアプリは同じユーザIDを割り当てることが可能です。なので、データの共有が簡単に出来ます。
  • 低レイヤーのセキュリティ
    • メモリ保護
      • DEPやASLR
      • Android2.2以前ではほとんど実装されていません
      • Android2.3 〜 3.0でDEP
      • Android4.0でASLR
      • iOSではDEPが2.0から、ASLRは4.3のころから実装されています。
      • iOSはネイティブコードなので、メモリ保護の必要があったからだろ思います。
      • WindowsPhoneはDEPはわかりませんが、ASLRは実装されているようです。
    • DEP
      • メモリ削減のためにメモリを共有していた
      • 反面、セキュアではなかった
    • ASLR
      • メモリのどこに配置するかを完全ランダム
      • 高速化とは逆行してしまうが、端末の性能があがったから入れるようになった
    • Prelinking
      • 固定のアドレスに配置するようにする
      • これがあるとASLRが無効になってしまう
  • Androidマルウェア
    • 2011年から33倍!
    • Androidの仕組みのマルウェア
      • root化で消せないもの
    • 2011年
      • オリジナルを引っこ抜いて、マルウェアを仕込んで再パッケージしたもの
      • root化されるもの
      • DexClassLoaderで外部から悪さするコードをダウンロードするもの
      • アップデートを悪用
    • 2012年
      • イベント事のプロモーション用ゲーム等を装ったもの
      • Bouncer:Googleから提供されているマルウェアを排除する仕組み
      • ただし、Bouncerを回避する方法もあるらしい
    • 特徴
      • 公式マーケット以外からダウンロードされることが多い
      • プレミアムSMSを利用するものが多い。ただし日本ではあまりない
      • データを抜き取るようなものが多い
  • 他のOS
    • iOS
      • ターゲットは脱獄済みのもの
    • windowsphone
      • まだ普及していないので分からない
    • アプリ
      • Androidは審査がないので、開発者は作りやすい反面、マルウェアも配布できてしまう
      • iOSは審査はあるが、審査の範囲内では結構色々出来る
      • WindowPhoneは審査もあるし、結構できることが限られている
  • 脆弱性の例
    • ファイルのアクセス権限不備
      • 保存したファイルのアクセス権限を設定していない
      • /data/data/パッケージ名/固有領域
      • 固有領域ではあるが、ちゃんと権限は設定しないと見られてしまう。
      • Linuxのファイルパーミッションはちゃんと設定しよう。
      • Context.openFileOutputの引数をちゃんと理解して設定しよう
      • でも、root化されるともともこもないので、漏れては困るものは暗号化するなどすること
      • SDカードはパーミッションを指定出来ないので、生でファイルを置かない、暗号化するなどする
    • コンポーネントのアクセス制限不備
      • コンテンツプロバイダを公開設定のままにしてしまう
      • 悪意がないアプリでも、他の悪意あるアプリからデータを盗みとられてしまうことがある
      • ちゃんと理解して設定しましょう
    • ログによる脆弱性
      • sysoutとか、Logとか。
      • adb経由でログが確認出来てしまいます
      • READ_LOGSのパーミッションがあれば、アプリからも見れてしまう。
      • パスワードとか、大事なものはログ出力しないようにしておきましょう
    • その他注意点
      • 暗号化の鍵や乱数シードはそのままコードに埋め込まないようにしましょう
      • デコンパイルすれば、解析出来てしまいます、アプリ内に持つのはやめましょう
      • 不完全ですが、ネイティブコードに実装する方法もあります
      • 根本的な解決策ではないですが、難読化をする方法もあります
      • プロガードや、他にも有償のツールなどあります。

Android Security  安全なアプリケーションを作成するために

Android Security  安全なアプリケーションを作成するために

ANDROIDスマートフォンマスターブック

ANDROIDスマートフォンマスターブック