【Online】LINE Developer Meetup for Android #62 で気になったところだけメモ。
(最近メモばっか書いてんな…)
APKファイルはいかにして作られるのか
- Android は端末の種類が多くて実行環境がコレ!って決まってないから JVM 上で動くやつ(.dex)を実行する
- コンパイル
- aapt2: AndroidManifestとリソースファイル
- *.flat を生成
- R.java
- proguard-rules.pro
- *.flat を生成
- R8 & D8
- classes.dex を生成
- コード圧縮
- リソース圧縮
- 難読化
- 最適化
- desugar(D8がやってくれる)
- aapt2: AndroidManifestとリソースファイル
- 署名
- debug は AndroidStudio が自動で生成してくれたやつで署名
- apkbuilder: コンパイルしたものをまとめる
- zipalign: 読み込み速度とメモリ消費を抑える
Androidアプリに潜む脆弱性 LINEの場合
- 脆弱性対策
- PRレビュー
- 専門チームによるレビュー
- API設計、実装コード、STG環境でのチェック
- 社外報告者による報告
- Bounty Program
- 脆弱性の公表
- LINE Android にあった脆弱性(修正済みのもの)
- SQL インジェクション
- 不正なメッセージで起こせる
- 受信したらアプリがクラッシュ
- SQLite Journal Mode
- トランザクション中の操作を管理するための方法
- Android 4.1.1 から PERSIST になっていたせい(それまではデフォルト DELETE だったのかな、きっと)
- WebView からのリソースアクセス
- リソースの差し替えが可能
- JS 経由で盗聴
- HTTP のページを読み込んでいた
- HTTPS 化
- HTTP のページは外部ブラウザひらくなど
- JS の無効化
- 書換可能なファイルでのデバッグフラグ
- ユーザーID とかが Logcat にでちゃう
- /sdcard 配下にそのフラグをおいていた
- TextView での HTML タグ
- ユーザー名に HTML タグが入ってると反映されちゃう
- パストラバーサル
- ACTION_SEND で受け取った内容をメッセージで表示するところで起きてた
- 「..」「.」が入ってたらエラー
- SQL インジェクション
- セキュリティチームが報告された脆弱性をみて、サービスの影響度などを考慮して開発チームに依頼がくる
パスワードのない未来のためのFirebaseで実装するFIDO2
- パスワード認証のリスクいろいろ
- FIDO
- FIDO Alliance が仕様策定、標準化する認証プロトコル
- FIDO に対応したデバイスなら OK
- 端末側に保存される公開鍵を使って認証する
- パスワード必要なし、デバイスが盗まれなければなりすましのリスク低
- WebAuthn
- FIDO2
- Firebase Auth
- カスタム認証でやる
- Cloud Functions
- FIDO サーバとして利用
- Firestore
- Challenger、Credential の保存で利用
- Firebase のアプリ登録のとき、フィンガープリントを設定する
- assetlinks.json が生成される
- Fido2ApiClient という API がある
- android-safetynet限定?
- 重要な箇所でサインイン処理はさせたほうがいいよね
- 決済とか
- 複数の端末を1アカウントに紐づけるには
- デバイスの移行とか FIDO の仕様みてね
Android 11 最新情報
- 位置情報
- バックグラウンドの権限を要求できる回数に制限がある
- あれ、制限があるのは位置情報だけなのか、全部なのかと思ってた。。
- バックグラウンドの権限を要求できる回数に制限がある
- データアクセス監査
- どの機能でどの情報を使用しているのか追えるようになるやつっぽい
- フォアグラウンドで利用するサービス(カメラ、マイク、位置情報)を manifest に書く必要がある
- FLAG_ACTIVITY_REQUIRE_NON_BROWSER
- ネイティブアプリで開かせたいときに flags に指定する
- 自分のアプリの設定画面を直接開くことはできない
- バブルに移行したほうがいい
- システムの動作影響をテストする
- 開発者オプションでいっこいっこオン/オフできるらしい
- IMEのアニメーションコールバックの指定、フレームレートを変更できる、アプリオ終了ステータスを取れる
- バブル
- System Alert Window の代替
- バブル用のアクティビティを作って、必要なプロパティをセット
- BubbbleMetadata をセットして、Notification に設定して表示