Android端末にDrozerを入れて色々と遊ぶ
前回まででUbuntuにDrozerを入れるところまでは終わったので今回はAndroid端末に実際にDrozerを入れて遊んでみようと思います。
目次
私の環境
AndroidOS:Android 8.0(エミュレータ)
AndroidStudio:4.13
ホストOS:Windows10
ゲストOS:Ubuntu20.04
Drozer-agent.apkのダウンロード
前回と同様、公式GithubページからDrozerを使うのに必要なapkファイルをダウンロードします。
ちなみに現時点(2021/03/26)でのapkの最新バージョンは2.34ですね。(…あれ?よくみると開発止まってない?)
apkファイルをダウンロードしたら次はエミュレータ(実機)にインストールするだけです
Drozer-agent.apkのインストール
ここからは実機でもエミュレータでも「AndroidStudio」を使います。
「AndroidStudio」を開くと下の方に「Terminal」があると思うのでそれを選択してください。
開くと下記画像のようになっていると思います。
そして先ほどダウンロードしたapkファイルを「platform-tools」直下に移動させます。
(別に必ずしもここに移動させる必要もないのですが、後々の面倒を考えるとここの方がいいです)
この時点でエミュレータ(もしくは実機)を起動してホストと接続しておきましょう
後はご存じの方もいるとは思いますが下記コマンドを「Androidstudio」の「Terminal」上で実行してapkファイルをインストールさせます。
$ adb install drozer-agent-x.x.x.apk (xの部分は各自置き換え)
インストールが成功したならばホーム画面に「drozer Agent」というアプリが新たに追加されたと思います。
私の環境では上記の様に表示されました。
起動
起動をする前にエミュレータの方のみ下記のコマンドを「Androidstudio」の「Terminal」で実行してほしいです。
$ adb forward tcp:31415 tcp:31415
その後、実機もエミュレータの方もDrozerアプリを起動させてください。
起動させると以下のような画像のトップ画面が表示されると思うので、画面下部の「Embedded Server」の部分をタップして「ON」にしてください。
あとは前回の記事でインストールしたDrozer(私の環境ではUbuntu20.04)と繋げる作業だけです。
$ drozer console connect
エミュレータの方
エミュレータの方のコマンドはシンプルです。
$ drozer console connect
実機の方
実機の方はAndroid端末のIPアドレスを指定する必要があります。
$ drozer console connect --server xxx.xxx.x.xxx (xは各自Android端末のIPで置き換え)
両方とも下記画像のようになれば接続成功です!
色々遊んでみる
ここからはDrozerが持っている機能を使って色々と遊んでみましょう!!
(今回は2つの状況を再現します)
注意!:この先の演習で使うアプリを演習が終わった後も端末内に残しておくことは推奨しません
clipboardの盗聴
この機能を用いることでclipボードに共有されている情報を取得できます。
(つまり悪意ある第3者アプリが情報を盗めるかどうかを調査出来る)
準備
clipboardの盗聴に使うモジュールを検索してみましょう。
dz > module search clipboard
私の環境では「metall0id.capture.clipboard」が見つかりました。
ちなみにですが下記コマンドを実行することで引数に指定したmodule名の詳細情報を確認出来ます。
dz > module search metall0id.capture.clipboard -d
このモジュールをインストールすれば後はOKです。
dz > module install metall0id.capture.clipboard
(…私の環境では既にインストールされているので「1 already」ってなってますけど)
実践
今回はそれっぽい状況にマッチするアプリをこちらで用意しました。
ここからapkファイルをダウンロード、そしてインストールしてください。
起動すると上の画像の様なトップ画面が起動すると思います。
また、このアプリの流れは以下のようになっています。
1.パスワードを入力(n4DL2Udc) 2.OKボタンをタップするともう一度パスワードを求められる 3.もう一度パスワードを入力してOKボタンをタップ 4.入力が正しければ「Success!!」というトーストが表示される
しかし3の時、ユーザがもう一度パスワードを入力するのが面倒で1のパスワードをクリップボードにコピーした場合が非常にマズイです!
では実際にパスワードをクリップボードにコピーして先ほどインストールしたmodule(metall0id.post.clipboard)を実行させてみましょう!
moduleを実行するコマンドは以下の通りです
dz > run post.capture.clipboard
つまり、悪意あるアプリがclipboardを盗聴する機能を持っていたとすると簡単にパスワード(機密情報)が漏洩することになります。
脆弱なContentProvider
次は脆弱な「ContentProvider」で実装されたDBをDrozerを用いて盗聴する手法について説明します!
準備
特になし!(初期状態でDrozerに入っているmoduleで出来ます)
実践
このセクションもこちらで脆弱なContentProviderによって実装されたDBを使用しているアプリを用意しておきましたので、こちらから該当apkファイルをダウンロード、そしてインストールしてください。
アプリのトップ画面にはそれぞれのユーザが表示されています。
アプリ画面内の説明からadminに関する情報を盗めればOKのようですね。
ちなみにこのアプリの簡単な概要を先に説明すると以下のようになります。
・脆弱なContentProviderを用いてDBを作成 ・UserとAdminのテーブルを差別化 ・名前だけ表示(E-mail,passwordは非表示)
今回のような場合に役に立つ「module」がいくつかあるので順に使いながら紹介していきます。
まずアプリケーションのコンテンツプロバイダの動的解析を開始するには、アタックサーフェイスを列挙する必要があるので「app.provider.info」を使います。
dz > run app.provider.info -a com.websarva.wings.android.drozer_content_provider
このことからこのアプリは1つのContentProviderがエクスポートされ、パーミッションも必要ないことが分かります。
AndroidのContentProviderに対しては「content://」で始めるのですが、まだ完全にパスが判明したわけではありません。
これを解決する「scanner.provider.finduris」を用いてパスを導き出していきましょう!
dz > run scanner.provider.finduris -a com.websarva.wings.android.drozer_content_provider
実行してみると、いかにも怪しい「admin」というcontentが見つかりましたね!
最後にこのcontentに対してアクセスして内容を見てみましょう。
使うmoduleは「app.privider.query」です。
dz > run app.provider.query content://com.websarva.wings.android.drozer_content_provider/admin/ --vertical
無事、adminに関する情報を抽出出来ました!!
(passwordはbase64でエンコードしてます)
まとめ
どうでしたでしょうか?
私は今回Drozerを実際に使ってみて意外と多くの機能があって便利と思いました。
まだまだ使っていない機能が多くあるのでまたの機会に紹介できたらいいなと思います!
参考情報
https://qiita.com/mitsu9/items/1457331992e1eb02b29f
https://codechacha.com/ja/android-contentprovider/
http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=Android033_ContentProvider