freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

AppShark:一款针对Android应用程序的静态分析与漏洞扫描框架
2022-11-22 19:48:06
所属地 广西

关于AppShark

AppShark是一款针对Android应用程序的安全测试框架,该工具本质上是一个静态污点分析平台,可以用于扫描Android应用程序中的漏洞。

AppShark除了实现行业普遍应用的数据流分析,还将指针分析与数据流分析融合,因而漏洞建模上更精准,规则更灵活,在误报率和漏报率方面有了比较大的改进。Appshark可以作为公司内部的Android App的自动化检测工具,辅助企业发现App的安全漏洞及隐私合规风险,也可以作为白帽子日常App漏洞挖掘的助手,提高漏洞挖掘的效率及产出。

工具要求

AppShark需要使用指定版本的JDK,即JDK11。经过测试后,我们发现该工具不支持其他的LTS版本,比如说JDK 8和JDK 16。

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/bytedance/appshark.git

项目构建与编译

打开命令行终端,然后切换到项目目录下,并使用gradle工具完成项目代码的构建和编译:

$ ./gradlew build  -x test

执行上述命令之后,我们将会在项目目录的build/libs中查看到生成的jar文件:AppShark-0.1.1-all.jar。

AppShark运行

在命令行终端中切换到项目根目录下,然后运行下列命令并使用配置文件来执行AppShark:

$ java -jar build/libs/AppShark-0.1.1-all.jar  config/config.json5

config.json5文件的配置内容如下所示:

{

  "apkPath": "/Users/apks/app1.apk",

  "out": "out",

  "rules": "unZipSlip.json",

  "maxPointerAnalyzeTime": 600

}

其中的每一个JSON字段解释如下:

apkPath:需要分析的apk文件路径;

out:输出目录路径;

rules:规则文件的路径地址,可以指定多条;

maxPointerAnalyzeTime:从每一个入口点执行分析的超时时间间隔;

debugRule:指定调试过程中启用日志记录的规则名称;

结果解析

下面给出的是一个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"

}

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

项目地址

AppShark:【GitHub传送门

参考资料

https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html

https://github.com/bytedance/appshark/blob/main/doc/zh/how_to_write_rules.md

# android安全 # 漏洞扫描 # android安全工具 # Android安全测试工具
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录