DIVAを使用してアプリケーションの分析事例をテスト


Insecure Logging


Logcat重要情報コメント


プロセス



Divaアプリケーションで、以下のCHECK OUTボタンを押すと、Logcatはコメントで情報を表示します.
01-14 21:34:43.258  3838  3838 E diva-log: Error while processing transaction with credit card: 1234

原因と解決策



以下のログ出力情報により、情報が露出します.
サービス重要情報と判断した場合はログ関連関数を削除します.

HardCodding Issue


ソースコードに重要な情報を挿入

  • 個人情報(非暗号化、非安全暗号化、鍵値)
  • 管理者ページにアクセスできるIDとパスワード


  • 次の図に示すように、関連仕入先鍵vendorsecretkeyは、ソースコード内のコメントに暴露される.

    キー値を入力すると、次のようにアクセスできます.

    Jadx内でキー値の関連部分をstringで表す場合、以下のAPIキー値は平紋で表示されます.

    Insecure Data Storage


    外部および内部リポジトリの重要な情報の露出


    Part1

  • 内部記憶
  • 外部ストレージ

  • 以下のプレイヤー名とパスワードを取得できます.


    id:makebank,pw:1 q 2 w 3 e 4 rストレージ.

    内部ストレージ共有prefsアンjakhar.aseem.diva_preferences.xmlファイルに格納されているユーザー名とパスワードがフラットであることを確認できます.
    →外部から分析したい場合は、adb pull <Path>コマンドを使用してPCに導入して分析します.

    ソースコードを確認すると,ユーザ情報とパスワード情報が暗号化されずにそのまま保存されていることが分かる.

    Part2





    id:makeband,pw:1 q 2 w 3 d 4 rとしてpart 1に示すように保存します.

    /databaseディレクトリでls-alを使用して情報を表示すると、新しいids 2、ids 2-journalとDBに関連するファイルが見つかります.

    adb pullコマンドで対応するデータベースディレクトリを取得し、DBを開きます.


    最初に保存したユーザー情報とパスワード情報は、内部リポジトリデータベースにバッチ形式で格納されていることがわかります.
    or adb shellでは、sqlite3 ids2コマンドで直接確認できます.sqlite3 ids.tables表情報確認
    .dump myuser→myuserテーブル内部情報チェック


    ソースコードには、平織りでDBに格納されていることがわかります.
    →SQL Cipherなどの利用可能または暗号化可能なモジュールの開発

    Part3





    以前の手順と同様にid:makebreak,pw:1 q 2 w 3 e 4 rとして保存した.

    tmpファイルは内部リポジトリに再保存されました.
    このファイルを実行すると、idとパスワードが平文に保存されていることを確認できます.

    ソースコード上でtempファイルを生成する場合、暗号化する必要はなく、フラットgetText().toString()に直接書き込む.

    Part4





    以前の過程と同じです.

    今回は/sdcard外部ストレージディレクトリにあります.uinfo.txtファイルは、アイデンティティとパスワードが平文として保存されていることを示します.

    Input Validation Issues


    入力値検証脆弱性


    Part1



    ヒントによると、この検索機能では入力値をフィルタリングせず、dbには3人のユーザしかいない.このうちadminに関連する部分が結果である.

    シングルクォータ入力時にlogcatで次のエラーが発生しました.
    Diva-sqli: Error occurred while searching in database: unrecognized token: "'''" (code 1): , while compiling: SELECT * FROM sqliuser WHERE user = '''
    単一割当に対するフィルタは存在しません.

    エラーにさらされたSQL構文を考慮して、簡単にSQLIを試してみると、関連情報が明らかになります.'or '1'='1
    ソースコードを表示すると、関連するフィルタが見つかりません.

    Part2



    これは,web urlへの入力検証がないために生じる可能性のある弱点事例の問題である.
  • webview脆弱性
  • loadUrl、loadData、loadDataWithBaseUrl、StartActivityを使用してURL検証なしでintentを実行する場合に発生する可能性のある弱点.

    次の内部ファイル情報を表示できます.

    setJavascriptEnabled(true); に設定します.
    WebビューでloadUrl()を実行してもurlの検証はありません
  • 応答方式
  • wset.setAllowFileAccess(false); ◆内部文書情報へのアクセスを制限する.