More Related Content
Similar to 安全なTwitterクライアントへの試行錯誤
Similar to 安全なTwitterクライアントへの試行錯誤 (20)
安全なTwitterクライアントへの試行錯誤
- 4. OAuthプロトコルの流れ
クライアント twitter.com
(OAuth Consumer) (OAuth Provider)
ユーザ Consumer
ログイン操作 Secret Consumer
Key
リクエストトークン取得
Request Token
ユーザ認証 (ID、パスワード)
アクセストークン発行
タイムライン取得操作など
Twitter API Access Token
2012/1/28 第3回Twitter研究会 LT 4
- 5. 問題
• OAuthプロトコルの一部として、クライアント
認証のためにConsumer Key/Secretが必
要
• Webアプリの場合、プログラムコードに埋め
込んでも一般ユーザには見えない
• スマートフォン上で動くアプリの場合、コード
が読まれる可能性あり
2012/1/28 第3回Twitter研究会 LT 5
- 6. Androidのディレクトリ構造
/system リードオンリー
システムファイル (標準アプリ、ライブラリなど)
/data/app 一般ユーザ読み書き不可
マーケット等からインストールしたアプリ
/data/data 一般ユーザ読み書き不可
アプリで保存するデータ
/mnt/sdcard 一般ユーザ読み書き可
SDカード
2012/1/28 第3回Twitter研究会 LT 6
- 8. root取得後
アプリケーション
パッケージ
(APK)
2012/1/28 第3回Twitter研究会 LT 8
- 9. APKファイルの中身を覗いてみる
Dalvikバイトコード (jar相当)
リソースファイル (バイナリ化XMLファイル)
2012/1/28 第3回Twitter研究会 LT 9
- 10. リバースエンジニアリングによる
Consumer Key/Secret推測
• root化によるapkファイル抜き出し
• Dalvikバイトコードの逆コンパイル
• バイナリ形式XMLファイルのテキスト化
• クラス名、メソッド名などのシンボルから記述
箇所を推測
2012/1/28 第3回Twitter研究会 LT 10
- 12. 対策
• ソースコード難読化
– ProGuard (Android SDK添付)
• 外部サーバに "APIプロキシ" を設置
– 今度はAPIプロキシとの認証の問題
Android端末 APIプロキシ
Consumer
クライアント Consumer twitter.com
Secret
アプリ Key
参考: Should I obfuscate OAuth consumer secret stored by Android app? - stackoverflow
http://stackoverflow.com/questions/7121966
2012/1/28 第3回Twitter研究会 LT 12