正式开源!无恒实行室推出 appshark 主动化毛病及隐私合规检测东西
一、开源背景
随着挪动互联网的高速提高,人们的消费生存也渐渐从 PC 电脑端转移得手机等挪动端,各种挪动 App 也如雨后春笋般产生。受限于代码的开发质量等缘故, App 中或多或少的会存在宁静毛病或因开发计划不审慎引入的违规搜集一局部信息等合规风险,带毛病运转的 App 将严峻要挟着网络及用户宁静,合规成绩则约莫遭到羁系转达乃至存本人架处分风险。
因此,企业也在加大人力举行毛病及合规风险发掘并推学习复等干系事情,现在行业内广泛接纳人工审计加主动化检测东西去发觉风险。不外随着数目越来越巨大的毛病,以及 App 隐私合规等成绩的显现,宁静职员面临的挑唆渐渐晋级,故一个好效的毛病及合规风险主动化检测东西将为宁静职员的人工发掘提供精良增补,也节流了多量时间和人力。
在字节跳动,面临数目浩繁的 App 产物,无恒实行室必要在产物上线前发觉隐私合规风险,发掘出宁静毛病,保护用户的数据与隐私宁静。无恒实行室对业内主动化 App 毛病检测东西举行了富裕调研,终极发觉这些东西或由于漏报、误报率太高着致必要斲丧多量人力对扫描后果举行确认,或由于不开放源码招致无法依据特定的扫描需求举行定制化开发。为了能更好的完成高质量毛病及隐私合规检测,无恒实行室自主研发了 appshark 引擎,用于毛病及隐私合规风险的主动化检测。无恒实行室选择将这个引擎开源,成为一个公用的东西,渴望吸引更多业界专家到场打磨,为企业及白帽子做 App 风险检测提供便宜。
二、全盘了解 appshark
1、appshark 的先容
appshark 除了完成行业广泛使用的数据流分析,还将指针分析与数据流分析交融,因此毛病建模上更精准,端正更机动,在误报率和漏报率方面有了比力大的改良。
2、appshark 可以处理什么成绩
appshark 可以作为公司内里的 Android App 的主动化检测东西,帮助企业发觉 App 的宁静毛病及隐私合规风险,也可以作为白帽子平常 App 毛病发掘的助手,提高毛病发掘的听从及产出。
3、appshark 在字节跳动的体现怎样
appshark 加载全部端正集时,关于抖音、今天头条等超大范围 App,可以在1小时内完成一切分析并输入后果。同时,如前所述,由于 appshark 引擎中到场了指针分析和数据流分析,可以完成在此基本上举行愈加机动精准的端正计划,在字节跳动内里使用时,大局部端正的误报率和漏报率均以前降至5%以下了。
三、怎样使用 appshark
git 开源项目地点:http://github.com/bytedance/appshark
接下去以一个稀有毛病案例来展现先容怎样使用 appshark:
1、ContentProvider 毛病为例
ContentProvider 作为安卓中最通用的组件,不少有履历的步骤员也常常会写出越权毛病,如下就是一个十分分明的有越权成绩的示例。
<provider android:name=".VulProvider1" android:authorities="slipme1" android:exported="true" />
public class VulProvider1 extends ContentProvider {
public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException {
File root = getContext().getExternalFilesDir("sandbox");
String path = uri.getQueryParameter("path");
return ParcelFileDescriptor.open(new File(root, path), ParcelFileDescriptor.MODE_READ_ONLY);
}
}
2、编写扫描端正
appshark 有十分机动的端正来指定 source 以及 sink, 具体的先容文档可以参考 https://github.com/bytedance/appshark/blob/main/doc/zh/how_to_write_rules.md。撰写端正最紧张的就是确定 source 以及 sink,寻常把外部用户可直接或直接控制的变量视为 source,分明 openFile 的参数0也就是 uri 是用户可控制的,而 sink 点比力切合的一个场合是ParcelFileDescriptor.open的参数0,由于假如 source 可以控制ParcelFileDescriptor.open参数0,那么基本上就可以读取任何文件了。
因此我们的端正 ContentProviderPathTraversal.json 如下:
{
"ContentProviderPathTraversal": {
"SliceMode": true,
"traceDepth": 14,
"desc": {
"name": "ContentProviderPathTraversal",
"category": "",
"wiki": "",
"detail": "假如Content Provider重写了openFile,但是没有对Uri举行途径合法性校验,那么打击者约莫经过在uri中插进../的办法拜候预期外的文件",
"possibility": "",
"model": ""
},
"source": {
"Param": {
"<*: android.os.ParcelFileDescriptor openFile(*)>": [
"p0"
]
}
},
"sink": {
"<android.os.ParcelFileDescriptor: android.os.ParcelFileDescriptor open(java.io.File,int)>": {
"TaintCheck": [
"p0"
]
}
}
}
}
3、经过 github 下载 config 文件夹
git clone https://github.com/bytedance/appshark
4、修正 config 文件
- 将 apkPath 修正为你想要扫描的apk相对途径。为了便利,可以在这里下载参考:https://github.com/nkbai/BypassPathTraversal/blob/main/apk/app-debug.apk
- 指明你要使用的端正,也就是 ContentProviderPathTraversal.json 文件,这个文件应该放在 config/rules 目次下,由于 appshark 是经过这个途径来查找这些端正的。
- 指定输入后果保存的目次,默许是如今目次下的 out 文件,你可以指定一个其他目次。
5、启动 appshark
先下载:https://github.com/bytedance/appshark/releases/download/0.1/AppShark-0.1-all.jar,然后启动。
java -jar AppShark-0.1-all.jar config/config.json5
6、查察后果
后果在如今目次的 out/results.json 文件中,内里给出了一切的毛病列表。关于后果的具体表明请查察https://github.com/bytedance/appshark/blob/main/doc/zh/result.md。假如对某个具体的毛病有疑问,可以查察 url 字段指明的HTML文件。
针对这个毛病,你应该可以在 results.json 中看到,存在毛病的函数(position),毛病转达的数据流(target):
{
"details": {
"Sink": [
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->$r5"
],
"position": "<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>",
"entryMethod": "<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>",
"Source": [
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->@parameter0"
],
"url": "out/vulnerability/6-ContentProviderPathTraversal.html",
"target": [
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->@parameter0",
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->$r1",
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->$r2_1",
"<com.security.bypasspathtraversal.VulProvider1: android.os.ParcelFileDescriptor openFile(android.net.Uri,java.lang.String)>->$r5"
]
},
"hash": "186d1273a64ac711c703e259ce0329fa8a25cf37",
"possibility": ""
}
四、后续方案
appshark 会长时维护,接待各位使用,接待交换提发起以及奉献代码。
五、关于无恒实行室
无恒实行室 (https://security.bytedance.com/security-lab) 是由字节跳动资深宁静研讨职员构成的专业攻防研讨实行室,努力于为字节跳动旗下产物与业务保驾护航,亦极为器重开源软件与体系对业务宁静的影响,在检测公司引入的开源框架和体系的同时,无恒实行室也着力于构建第三方框架和组件的毛病缓解机制,并将持续与业界共享研讨后果,帮助企业业务制止蒙受宁静风险,亦望能与业内偕行协同互助,为网络宁静行业的提高做出奉献。(无恒实行室持续招聘中,点击 阅读原文 链接查察具体)
扫码到场appshark微信交换群,接待使用反应,群满之后,接待添加运营微信拉群:easylifejust