
Plateforme d'analyse statique de flux (taint analysis) pour applications Android qui détecte les vulnérabilités et les problèmes de conformité à l'aide d'une analyse personnalisable basée sur des règles et d'un rapport détaillé des résultats.
Appshark est une plateforme d'analyse statique de flux de données pour détecter des vulnérabilités dans une application Android.
Appshark nécessite une version spécifique du JDK -- JDK 11. Après des tests, il ne fonctionne pas sur d'autres versions LTS, JDK 8 et JDK 16, en raison de problèmes de compatibilité des dépendances.
Nous supposons que vous travaillez dans le répertoire racine du dépôt du projet. Vous pouvez construire l'ensemble du projet avec l'outil gradle.
$ ./gradlew build -x test
Après avoir exécuté la commande ci-dessus, vous verrez un fichier artefact AppShark-0.1.2-all.jar dans le répertoire build/libs.
Comme à l'étape précédente, nous supposons que vous êtes toujours dans le dossier racine du projet. Vous pouvez exécuter l'outil avec
$ java -jar build/libs/AppShark-0.1.2-all.jar config/config.json5
Le fichier config.json5 contient les éléments de configuration suivants.
{
"apkPath": "/Users/apks/app1.apk"
}
Chaque JSON possède ces champs de base.
,. Par défaut, tous les fichiers *.json dans le répertoire $rulePathPour plus de champs de configuration, veuillez visiter net.bytedance.security.app.ArgumentConfig
Si vous fournissez un fichier JSON de configuration qui définit le chemin de sortie comme out dans le répertoire racine du projet, vous trouverez le fichier de résultat out/results.json après l'exécution de l'analyse.
Voici un exemple du fichier 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 est sous licence APACHE LICENSE, VERSION 2.0
UI/Server est un outil de test auxiliaire qui ne doit pas être utilisé dans des environnements de production et ne peut être déployé que pour des tests locaux.
Lark 