
안드로이드 앱을 위한 정적 오염 분석 플랫폼으로, 사용자 정의 가능한 규칙 기반 스캔 및 상세 결과 보고를 통해 취약점과 규정 준수 문제를 탐지합니다.
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 파일입니다.더 많은 구성 필드는 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/서버는 보조 테스트 도구로서 프로덕션 환경에서 사용해서는 안 되며, 로컬 테스트 용도로만 배포해야 합니다.
Lark 