背景

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应用层、数据访问层等,并能够基于大数据+机器学习技术构建全自动的安全事件感知系统,努力打造成业界最前沿的内置式安全架构和纵深防御体系。

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

美团安全2018秋季招新开始啦!这里有数据安全、Web安全、移动安全、IT安全、渗透测试、安全研究、隐私保护合规、产品研发等十余个热门岗位欢迎你的加入,详情戳这里。简历请投至 zhaoyan17@meituan.com

发现文章有错误、对内容有疑问,都可以关注美团技术团队微信公众号(meituantech),在后台给我们留言。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!

镣铐之舞:美团安全工程师Black Hat USA演讲的更多相关文章

  1. 美团Java工程师面试题(2018秋招)

    第一次面试 1.小数是怎么存的 2.算法题:N二进制有多少个1 3.Linux命令(不熟悉 4.JVM垃圾回收算法 5.C或者伪代码实现复制算法 6.volatile 7.树的先序中序后序以及应用场景 ...

  2. Blackhat EU 2013 黑客大会(Full Schedule for Black Hat USA 2013)

    大会文档下载:https://www.blackhat.com/eu-13/archives.html 此次BH EU 议题整体较水,涉及系统安全.移动安全.网络传输安全.WEB安全.游戏安全等.下面 ...

  3. 5whys分析法在美团工程师中的实践

    转载美团博客:https://tech.meituan.com/5whys-method.html 前言 网站的质量和稳定性对于用户和公司来说至关重要,但是在网站的快速发展过程中,由于各种原因导致事故 ...

  4. web前端工程师校园招聘要求

    小燕子对紫薇说:“这辈子也别想着进皇宫了”.可后来她们不但进了宫,还都当上了格格.你在想什么?走呗! 1.去哪了网 前端开发工程师 工作地点:北京 工作职责: 负责去哪儿网各产品线Web前端研发: 负 ...

  5. 美团外卖iOS多端复用的推动、支撑与思考

    背景 美团外卖2013年11月开始起步,随后高速发展,不断刷新多项行业记录.截止至2018年5月19日,日订单量峰值已超过2000万,是全球规模最大的外卖平台.业务的快速发展对技术支撑提出了更高的要求 ...

  6. Apache Kylin在美团点评的应用

      本文原载自大数据杂谈微信公众号. 感谢美团点评工程师高大月撰文并授权转载. 高大月,美团点评工程师,Apache Kylin PMC成员,目前主要在美团点评数据平台负责OLAP查询引擎的建设. 背 ...

  7. Facebook的工程师文化——《打造facebook》读后感

    在今年北京的QCon大会上听了facebook早期中国籍工程师王淮的演讲,受益匪浅,主题是如何打造高效能团队,主要介绍他在facebook的一些经历和管理上的经验分享.现在的他是一名天使投资人,投资的 ...

  8. BlackArch-Tools

    BlackArch-Tools 简介 安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 ...

  9. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

随机推荐

  1. Python入门系列教程(六)面向对象

    1.self 所谓的self,可以理解为自己,可以把它当做C++中类里面的this指针一样理解,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self. 2.class ...

  2. Spring容器事件、自定义事件

    Spring容器内置事件,如容器的启动.停止.关闭.销毁等事件 <bean name="contextStartedHandler" class="com.nuts ...

  3. jQuery代码实现表格内容可编辑修改

    1.效果及功能说明 表格特效制作jquery表格可编辑任意修改里面的数值,是一种比较人性化的用户设计体验方式 2.实现原理 通过点击事件来触发跳出一个输入框可以在里面输入当这个输入框失去焦点后就把,所 ...

  4. TC-572-D1L2 未完!待续!

    题目描述 • 有一个神秘的常数 K ,s 位• 现在有 n 个 s 位数,告诉你每个数与 K 有多少位是相同的• 判断 K 的无解.多解.唯一解,并求出唯一解(如果存在的话)• 所有出现的数都允许前导 ...

  5. JS中数组那些事~

    今天闲的没事,看了一些关于数组的操作,好久木有用过,很多都已经忘记的差不多了,所以今天花了一个小时写了一些demo,准备备份一下方便以后使用~~~ 下面是一些工作当中,经常用到的数组的方法,小伙伴可以 ...

  6. php array转化为utf-8编码以便于转化为json数据

    php中转化为json时,字符串或数组编码必须为utf-8编码. 在网上找到了一个方法可以比较简单的转化,在此记录: 利用var_export()和eval()方法var_export():输出或返回 ...

  7. windebug分析高cpu问题

    分析高CPU的关键是找到哪个线程是持续运行,占用CPU时间. 可以隔上两分钟连续抓两个dump文件,使用 !runaway 查看线程运行的时间 通过对比两个dump文件的线程时间,看看哪个线程运行的时 ...

  8. UNIX网络编程 第3章 套接字编程简介

    套接字结构类型和相关的格式转换函数

  9. xmlHttpRequest 跨域和上传或下载进度条

    跨域 XMLHttpRequest 请求 普通网页能够使用XMLHttpRequest对象发送或者接受服务器数据, 但是它们受限于同源策略. 扩展可以不受该限制. 任何扩展只要它先获取了跨域请求许可, ...

  10. qt中int与string的相互转换

    我经常搞错这个问题,一直以为整形int b可以直接使用函数toString呢! 但是在qtCreator中在整形后面不管怎么按点(可以自动提示)他就是不给我提示,我就纳闷了这样居然不行 百度了之后才知 ...