
静的テイント分析プラットフォームで、Androidアプリ向けに、カスタマイズ可能なルールベースのスキャンと詳細な結果レポートを用いて脆弱性やコンプライアンス問題を検出します。
AppSharkは、Androidアプリの脆弱性をスキャンする静的テイント解析プラットフォームです。
AppSharkには特定のバージョンのJDKが必要です。 -- JDK 11。テストの結果、依存関係の互換性の問題により、他のLTSバージョン(JDK 8およびJDK 16)では動作しません。
プロジェクトリポジトリのルートディレクトリで作業しているものとします。gradleツールを使用してプロジェクト全体をビルドできます。
$ ./gradlew build -x test
上記のコマンドを実行すると、build/libsディレクトリにAppShark-0.1.2-all.jarアーティファクトファイルが生成されます。
前の手順と同様に、プロジェクトのルートフォルダにいるものとします。以下のコマンドでツールを実行できます。
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5
config.json5には以下の設定内容が含まれています。
{
"apkPath": "/Users/apks/app1.apk"
}
各JSONには以下の基本フィールドがあります。
,で区切ります。デフォルトは$rulePathディレクトリ内のすべての*.jsonファイルです。./config/rulesです。詳細な設定フィールドについては、net.bytedance.security.app.ArgumentConfigを参照してください。
出力パスをプロジェクトルートディレクトリのoutに設定した設定JSONファイルを指定すると、解析実行後に結果ファイルout/results.jsonが見つかります。
以下はresults.jsonの例です。
{
"AppInfo": {
"AppName": "test",
"PackageName": "net.bytedance.security.app",
"min_sdk": 17,
"target_sdk": 28,
"versionCode": 1000,
"versionName": "1.0.0"
},
"SecurityInfo": {
"FileRisk": {
"unZipSlip": {
"category": "FileRisk",
"detail": "",
"model": "2",
"name": "unZipSlip",
"possibility": "4",
"vulners": [
{
"details": {
"position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>",
"Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31",
"entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",
"Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",
"url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/1-unZipSlip.html",
"target": [
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",
"pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>:35=>java.lang.StringBuilder}(unknown)->@data}",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r11",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31"
]
},
"hash": "ec57a2a3190677ffe78a0c8aaf58ba5aee4d2247",
"possibility": "4"
},
{
"details": {
"position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>",
"Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34",
"entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",
"Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",
"url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/2-unZipSlip.html",
"target": [
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",
"pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>:33=>java.lang.StringBuilder}(unknown)->@data}",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r14",
"<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34"
]
},
"hash": "26c6d6ee704c59949cfef78350a1d9aef04c29ad",
"possibility": "4"
}
],
"wiki": "",
"deobfApk": "/Volumes/dev/zijie/appshark-opensource/app.apk"
}
}
},
"DeepLinkInfo": {
},
"HTTP_API": [
],
"JsBridgeInfo": [
],
"BasicInfo": {
"ComponentsInfo": {
},
"JSNativeInterface": [
]
},
"UsePermissions": [
],
"DefinePermissions": {
},
"Profile": "/Volumes/dev/zijie/appshark-opensource/out/vuln/3-profiler.json"
}
AppSharkはAPACHE LICENSE, VERSION 2.0の下でライセンスされています。
UI/Serverは補助的なテストツールであり、本番環境で使用すべきではありません。ローカルテストの目的にのみデプロイ可能です。
Lark 