阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

镣铐之舞:美团安全工程师 Black Hat USA 演讲

  • 2020-02-27
  • 本文字数:4536 字

    阅读完需:约 15 分钟

镣铐之舞:美团安全工程师Black Hat USA演讲

背景

2018 年 8 月 9 日,全球顶级安全会议——Black Hat USA 在美国拉斯维加斯的曼德勒海湾会议中心落下了帷幕,这场盛会在全球黑客心中几乎等同于“世界杯”和“奥斯卡”一样的存在。这场一年一度的盛会已经有着 21 年的悠久历史,也被公认为世界信息安全行业的最高盛会之一。



作为在国内安全领域拥有多年的实战经验和技术积累的安全团队,美团安全研究院再次受邀参加了本次盛会。在议题通过率不足 20%的严苛筛选条件下,美团安全工程师 Ju Zhu 与小伙伴一起带着本次演讲的议题“Art of Dancing with Shackles: Best Practice of App Store Malware Automatic Hunting System(App Store 恶意代码自动捕获系统最佳实践)”,荣登 Black Hat USA 2018 的国际舞台。


议题解读

Apple 的 iOS 系统是所有流行操作系统中最安全的系统之一,正因为如此,也是黑客重要的攻击目标和研究对象。虽然攻击难度大,但一旦成功,所获得的商业价值非常之高,所以 iOS 系统备受黑客“青睐”。


因为苹果的商业模式比较特别,而且 iOS 系统并非开源系统,同时 Apple 高度重视安全,所以对 iOS 系统进行了周密的安全设计,这使 iOS 系统的安全性远超其他操作系统。安全界对于大规模自动化捕获该平台的高级威胁,一直面临困难和挑战,同时当终端用户遭受真正的 APT 攻击(如 PEGASUS)时,防御检测解决方案也无法获得足够的权限来检测深层攻击,甚至都无法获得足够的信息。


本议题正是在这个方向经过深入研究做了突破性的进展,成功设计出一套可大规模自动获取应用样本的 Crawl 系统,通过使用基于 Raspberry Pi 构建集群实现了低成本、可扩展的安全沙箱自动分析系统,最终实现了自动化收集样本并对样本进行自动化安全分析的 APT 攻击捕获及分析系统。


首先,我们先来看一下这个系统的整体架构。

系统整体架构


实际上,整个 iOS 恶意软件 Hunt 系统基本上分为两个不同的部分:


  • 第一部分,是 App Crawl 系统,主要用于从 App Store 收集新发布或现有的应用程序。当然作为感染链源之一,还会收集来自第三方 App Store 甚至公共恶意软件存储库(例如 Virus Total)的应用程序以增强我们的恶意软件数据库。除应用程序外,其他潜在的恶意文件类型(如 Profile)也是我们的收集目标,(可以参考我在 BlackHat Asia 2018 中关于”野外 iOS Profile 攻击“的名为“Death Profile”的文章)。

  • 另一部分,是沙盒分析系统,主要是动态跟踪应用程序行为,并根据规则决策引擎关联行为日志以给出最终结果。实际上,沙盒系统包含不同的类型,包括基于 Frida 的 iOS 真实设备、ARM 服务器的用户模式仿真(例如 Raspberry Pi 系统)以及完整的系统仿真 VM。

系统构成

具体来说,整个系统主要由五个模块构成。


  1. 自动 Crawl 系统:自动化爬行及抓取各 App 应用市场的应用程序,包括 App Store 以及其他第三方市场,本系统中通过逆向分析成功的实现了自动化的用户登录、购买及下载应用程序。

  2. App Crack 系统:解密从 App Store 下载的应用程序,方便沙盒进行动态行为分析。

  3. 沙盒分析系统:突破传统基于真机(iOS 设备)沙盒的系统设计,创新的使用了基于 Raspberry Pi 模式和 QEMU 模式,低成本、可扩展的集群方式来实现动态监控应用程序的运行行为,例如 File、Network、XPC、IOKit 和 Profiled 等。

  4. 动态跟踪行为系统:主要用来收集沙盒系统中所运行样本的各种监控行为日志。

  5. 决策引擎系统:基于开源的 Nools 系统,实时或非实时地根据监控日志,来判断样本行为。


那么,它们是怎么有效的运转起来的呢?

系统运行流程

  • 首先,通过自动化爬虫系统构建相应的登录、购买、下载操作,从 iTunes 服务器抓取应用程序,并发送给 Crack 系统。之后 Crack 系统将解密 Apple 的 DRM,并生成可在越狱设备和模拟器上运行的 IPA 文件。

  • 然后,构建 IPA 运行环境暨沙盒分析系统,我们引入了两个解决方案,第一个是传统的在真正越狱设备上分析这些应用程序;第二个是创新的使用了基于 Raspberry Pi 的模拟器集群来运行并分析应用程序。

  • 最后,使用基于开源的 Frida 框架,经过定制化的开发,动态跟踪每个 IPA 应用程序的行为,再通过决策引擎检查 IPA 是否为恶意应用,是否可能存在 APT 攻击。


下面,我们将基于各个模块的分解来详谈它们的运作模式。


首先,App Store 应用程序的 Crawl 基本可以理解为 iTunes 协议的灰盒逆向工程。


经过研究,我们发现在 PC 主机上通过 iTunes 实现 App Store Crawl 的基本步骤包括以下几个方面:


  • 第一步,是抓取目标应用的 Meta 数据,例如名称、类别、大小等等。

  • 第二步,是使用 Apple ID 登录,购买产品,使用 iTunes 授权 PC 端,以满足应用下载的要求,并将应用保存到本地磁盘。这里,我们必须使用很多技巧来征服 App Store 的反爬机制。

  • 最后一步,是破解下载的应用程序。由于 App Store 上的所有应用程序都由 Apple 打包,这显然会阻止厂商基于安全方面的动静态分析,因此需要将目标应用程序的运行时内存转储为普通代码。


因此,基于上面的流程,我们可以设计成以下架构。

自动 Crawl & Crack 系统架构


从架构图来看,该系统实现的功能,包括应用程序 Meta 信息 Crawl、Apple ID 登录、PC 授权、iOS 设备授权、IPA 签名和安装后的 Crack。它实际上是一个基于 iTunes Store 应用程序的自动系统。


App Meta 信息 Crawler 负责获取应用程序详细信息,包括下载 URL 和价格信息。应用下载抓取工具可以通过这些网址自动下载应用。然后,这些应用程序将发送到每个越狱设备进行解密,这将用于以后的静态和动态分析。

自动 Crawl 系统

对于 Crawl 系统,我们可以分为三个部分来运作。


  1. App Meta 信息 Crawler:App Store 是有区域限制的,即区域 A 的 Apple ID 无法下载区域 B 的应用程序。因此,针对不同区域,我们设计了不同的 Spider。而获得的 Meta 信息,包含了 App ID、下载地址、图标和其他一些基本信息。

  2. App 下载 Crawler:通过逆向分析多个二进制文件及通讯协议,构造 Apple ID 的登录及购买请求,可以自动化下载与“从 iTunes 客户端下载的 IPA 文件”相同的 IPA 文件。

  3. 导入 DRM 数据:上面下载的 IPA 文件,实际上是不能直接安装运行的,因为还缺少一个 Sinf 文件,它是一个包含授权等信息的 DRM 数据文件。对于 Apple 来说,它们只为每个应用程序保留了一份 Copy。当用户购买 App 时,服务器将动态生成 DRM 信息,并将其放入应用程序购买的响应数据中发送回来。之后 iTunes 或者 App Store 将负责把 DRM 数据重新打包到 IPA 文件中。因此,我们仅需简单地将之前获得“Sinf 数据”保存并下载到 IPA 文件中即可。


我们都知道,从 App Store 下载的 App 是加密的。这样不利于我们使用越狱设备和模拟器来分析行为,所以还需要对 IPA 进行解密。下面我们说一下,Crack 系统的技术要点。

App Crack 系统

如果用户的帐户从来没有在 iOS 设备上登录过,则它购买的 App 是无法在该设备上运行的,即 DRM 保护。


如果在一台设备上,用户登录了自己的帐户,Apple 会认为用户授权此设备,而使用该帐户购买的一切应用程序则可安装、也可运行。但是我们需要让这一切变得自动化。


通过逆向“设置”程序,我们发现“StoreServices.framework”是用来管理账户信息的,最后我们做了一个 Tweak,并配合 Undocument API 实现了 Apple ID 登录过程。


我们有了大量待分析的样本,下面的工作就是静态和动态分析。业界对于静态分析已经非常成熟,比如 MachOView 等等,这里我们就不多介绍了。而动态分析,目前主要以基于 Frida 的系统居多。


Frida 是一个功能强大且便携的 Hook 系统,支持移动(例如 iOS 和 Android)和 PC 系统(例如 MacOS)。更重要的是,它允许在没有配置和编译的情况下根据脚本(例如 JavaScript)控制 Hook 点。所以说,它是目前最流行的动态分析框架系统。当然它们都必须依赖真机设备。


接下来,我们来介绍一下传统的基于真机(iOS 设备)的沙盒系统。

沙盒分析系统

传统的基于真机(iOS 设备)沙盒系统


从上图来看,这种基于 Frida 实现真机(iOS 设备)沙盒系统的工作流程主要包括以下几个方面:


  • 首先,给 iOS 设备配置 Frida,目的是为了进行行为跟踪;

  • 然后,Frida 控制器模块将在 iOS 设备上触发样本运行,或者其他任何操作(例如:安装配置文件,使用浏览器访问网站等),并跟踪感兴趣的系统行为;

  • 最后,将行为日志收集到主机端,该日志将成为决策引擎系统的输入,它会根据需要,实时或非实时地判断样本行为。


虽然 Frida 一直是 App 动态检测的主流,但是如果我们需要检测大量样本或者大量 Case 时,则会出现严重瓶颈,因为面临大量的真机(iOS 设备)投入,而且成本、扩展性都是致命问题,所以我们创新的使用了低成本 Raspberry Pi 来替代它,并成功的实现了虚拟化、集群化。

基于 Raspberry Pi 的 iOS 虚拟机


在虚拟化方面,我们实现了一个动态加载器,它可以加载 iOS 可执行文件,并重新实现了 System Library 和 Framework,以保证 iOS 可执行文件能够正常运行等等。



这样我们就可以轻松动态监控 Mach-O 的行为,并将这些日志提交给决策引擎,以确定该应用程序是否为恶意软件,甚至是否是 APT 攻击的一个 Chain 等等。



如果希望利用现有的服务器来运维,我们也可以将其移植到 QEMU 中运行。



通过这种“低成本硬件仿真器”的设计,每天都可以自动化扫描大量的样本,从而节省了成本,并提升了可扩展性,提高了样本的检测效率。


这种高效的沙盒分析系统,必然会产生大量的分析日志,所以,我们需要一种高性能、高实时性的规则决策引擎系统来做最后的判断处理。

决策引擎系统

Nools 是一个基于 Rete 并使用 JavaScript 实现的规则引擎推理系统。它可以支持连续日志输入时的实时判断模式,而且用其编写的决策规则,具有强灵活性和可移植性,使得我们对于样本的检测获得了高可用性。

总结

一直以来,业界对于“iOS 大量样本检测实现自动化 Hunt 高级威胁”都没有很好的实践,而我们已经证明了基于自动抓取、安全沙箱自动分析系统以及 iOS 虚拟化的高级威胁 Hunt 系统的可行性。而这样大量的样本检测 Case 和日志,也为以后我们引入 AI 系统提供了必要条件。

关于美团安全

美团安全部的大多数核心人员,拥有多年互联网以及安全领域实践经验,很多同学参与过大型互联网公司的安全体系建设,其中也不乏全球化安全运营人才,具备百万级 IDC 规模攻防对抗的经验。安全部也不乏 CVE“挖掘圣手”,有受邀在 Black Hat 等国际顶级会议发言的讲者,当然还有很多漂亮的运营妹子。


目前,美团安全部涉及的技术包括渗透测试、Web 防护、二进制安全、内核安全、分布式开发、大数据分析、安全算法等等,同时还有全球合规与隐私保护等策略制定。我们正在建设一套百万级 IDC 规模、数十万终端接入的移动办公网络自适应安全体系,这套体系构建于零信任架构之上,横跨多种云基础设施,包括网络层、虚拟化/容器层、Server 软件层(内核态/用户态)、语言虚拟机层(JVM/JS V8)、Web 应用层、数据访问层等,并能够基于“大数据+机器学习”技术构建全自动的安全事件感知系统,努力打造成业界最前沿的内置式安全架构和纵深防御体系。


随着美团的高速发展,业务复杂度不断提升,安全部门面临更多的机遇和挑战。我们希望将更多代表业界最佳实践的安全项目落地,同时为更多的安全从业者提供一个广阔的发展平台,并提供更多在安全新兴领域不断探索的机会。


2020-02-27 11:14566

评论

发布
暂无评论
发现更多内容

使用Node.js、MongoDB、Fastify 构建API服务

devpoint

mongodb nodejs swagger REST API 3月月更

自己动手写Docker系列 -- 4.1使用busybox创建容器

Docker

2022 ARTS|Week 11

MiracleWong

算法 写作 ARTS 打卡计划

设计电商秒杀系统

supermenG

架构师训练营 4 期

测试开发【Mock平台】02基础:Java Spring Boot框架知识

MegaQi

测试工具 测试发开 测试平台开发教程

Flutter 封装文本输入框

岛上码农

flutter 跨平台 Android开发 3月月更

DDD 实战(5):战略设计之上下文映射和系统分层架构

深清秋

DDD 软件架构 生鲜电商系统 3月月更

【C语言】 扫雷游戏(保姆级的实现过程)

謓泽

3月月更

C#调用C++动态库接口函数和回调函数

DS小龙哥

3月月更

三高Mysql - Inndb存储引擎和索引介绍

懒时小窝

MySQL innodb MySQL InnoDB

一文了解 Python 中的对象析构函数:__del__

踏雪痕

Python 3月程序媛福利 3月月更

游戏制作片段

都灵树屋

自己动手写Docker系列 -- 4.3实现volume数据卷

Docker

模块 6 作业 拆分电商系统为微服务

王大胖

你的 vscode 配置真的舒服么?

道道里

VuePress 博客之 SEO 优化(四) Open Graph protocol

冴羽

Vue 前端 vuepress SEO 博客搭建

Linux之bc命令

入门小站

Linux

首届实时渲染3D动画创作大赛最佳人气奖?你说了算!

3DCAT实时渲染

3D 虚幻引擎 实时渲染 ue

在线HTML压缩格式化工具

入门小站

工具

自己动手写Docker系列 -- 3.2增加容器资源限制

Docker

自己动手写Docker系列 -- 3.3使用命令管道优化参数传递

Docker

优秀程序员的30种思维--技术执念篇(22/100)

hackstoic

技术思维

图文详解:阿里宠儿【小兔】RabbitMQ的养成攻略

浅羽技术

Java RabbitMQ 中间件 消息队列 RabbitMQ延时队列

国内外最好用的18个协同办公系统盘点

PingCode

即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4

Geek_1ef48b

QT读取剪切板内容-实现复制粘贴文本和图片

DS小龙哥

3月月更

一文读懂网关中间件-Nginx

Linux服务器开发

nginx 中间件 api 网关 Linux服务器开发 Linux后台开发

iOS内存管理篇

刁架构

内存管理 iOS 知识体系

在线JSON转HTML,TABLE表格工具

入门小站

工具

投资与人性(21/100)

hackstoic

投资

自己动手写Docker系列 -- 4.2使用AUFS包装busybox

Docker

镣铐之舞:美团安全工程师Black Hat USA演讲_文化 & 方法_美团技术团队_InfoQ精选文章