QQ浏览器(Wormable Browser) 漏洞报告

漏洞说明

安卓版QQ浏览器,QQ热点等应用程序在本地wifi开始时,会监听本地8786端口,且监听本地所有ip地址。当攻击方和被攻击方处于同一局域网环境时,通过该接口,可在局域网内运行QQ浏览器,QQ热点的设备中上传数据、启动应用安装等。当这些应用拥有root权限时,可静默安装移动应用。攻击方和被攻击方处于不同局域网环境时,可通过恶意链接,远程植入,感染与被攻击方所在局域网内所有运行安卓版QQ浏览器,QQ热点等应用的主机。 (更多…)

CVE-2016-4655

苹果在上个月紧急发布了9.3.5更新来封堵Pegasus攻击中使用的漏洞,不过内核信息泄露的漏洞(CVE-2016-4655)在iOS10beta8版本中仍然没有被修补。直到今日开始推送的10.0.1版本中才修补该漏洞(安全更新)。

由于iOS10是iPhone7/7p的预装系统,因此苹果可能在知晓该漏洞前已经开始生产iPhone7/7p设备,导致无法在10.0中修补该漏洞。而Pegasus攻击中使用的另一个内核UAF类型的漏洞(CVE-2016-4656)其实在iOS10beta1版本中已经被修补,猜测是苹果内部安全团队应该也发现了该漏洞。

漏洞原理

OSUnserializeBinary函数用于解析二进制格式的序列化对象,之前爆出的UAF漏洞(CVE-2016-1828)和这次的UAF漏洞(CVE-2016-4656)都存在于该函数中。我们观察OSNumber对象的创建代码。

        len = (key & kOSSerializeDataMask);
        wordLen = (len + 3) >> 2;
        end = (0 != (kOSSerializeEndCollecton & key));
        DEBG("key 0x%08x: 0x%04x, %d\n", key, len, end);

        newCollect = isRef = false;
        o = 0; newDict = 0; newArray = 0; newSet = 0;

        switch (kOSSerializeTypeMask & key)
        {
        ...
            case kOSSerializeNumber:
                bufferPos += sizeof(long long);
                if (bufferPos > bufferSize) break;
                value = next[1];
                value <<= 32;
                value |= next[0];
                o = OSNumber::withNumber(value, len);  // <--------- len可控
                next += 2;
                break;

(更多…)

Pegasus – 针对iOS设备的APT攻击分析

苹果在今天凌晨突然推送了iOS9.3.5更新,并且更新日志中提到修补了三个安全漏洞。随后Citizen Lab发布文章指出这三个0day被用于针对特殊目标远程植入后门,而Lookout则给出了对Pegasus的具体技术报告

远程植入的流程是首先引导用户访问指定页面,此时会触发webkit漏洞(CVE-2016-4657)获取代码执行权限,随后利用漏洞(CVE-2016-4655)泄露内核的加载基地址,最后触发漏洞(CVE-2016-4656)获取内核态的代码执行权限。在获取最高权限后,Pegasus还会进一步针对persistence处理,保证系统重启后后门仍然工作。

内核漏洞

通过攻击流程可以知道两个内核漏洞均是在浏览器内被触发的,同样在APP沙盒规则内也能利用该漏洞。盘古发布的9.3.3越狱同样也是利用了沙盒内的漏洞,苹果非常迅速的推送了9.3.4的更新。正如我们在今年Blackhat上讨论的,沙盒内直接攻击内核的漏洞将是苹果用户面临的重要风险,苹果的安全响应也在提速。

其中CVE-2016-4655漏洞是由于读取栈数据时缺乏边界检查,导致能够获取栈上额外的数据,而函数的返回地址一般会被保存在栈上,因此达到泄露内核地址的目的。

而CVE-2016-4656漏洞则是一个典型的UAF漏洞,通过精心构造数据可以在Free之后先分配对象来重新占用之后再触发Use,也可以进一步转换成double free。

Persistence

(更多…)

BlackHat USA 2016

BlackHat201622

盘古团队于2016年8月5日在美国拉斯维加斯举办的顶级安全峰会Blackhat USA 2016上分享了”Pangu 9 Internals”的议题,获得参会技术人员的广泛好评。

Slide下载: us-16-Pangu9-Internals

盘古实验室报告七个Flash安全漏洞获Adobe致谢

apsb16-18

6月17日, Adobe发布安全更新APSB16-18,修复了Adobe Flash Player中的多处安全漏洞,Adobe官网同时发布公告致谢发现并报告这些漏洞的安全研究人员,盘古实验室的研究员Wen Guanxing获得了7个致谢:CVE-2016-4150,CVE-2016-4151,CVE-2016-4152,CVE-2016-4153,CVE-2016-4154,CVE-2016-4155,CVE-2016-4156

(更多…)

盘古实验室报告四个Flash安全漏洞获Adobe致谢

Flash

5月12日,全球软件巨头Adobe发布安全更新APSB16-15,修复了Adobe Flash Player中的多处安全漏洞,Adobe官网同时发布公告致谢发现并报告这些漏洞的安全研究人员,盘古实验室的研究员获得了4个致谢

CVE编号是CVE-2016-1097,CVE-2016-1098, CVE-2016-1099, CVE-2016-1100。 (更多…)

Janus(移动应用安全分析社区化平台) BlackHat Asia 2016 首秀

盘古团队的移动应用安全分析社区化平台Janus的想法是很好的。任何自动化分析平台都无法对抗性能、漏报、误报的问题。引入人工审计不可避免,如何能更好的结合人与机器,Janus探索了一条社区化的道路。

— 来自BlackHat ARSENAL 的现场反馈

盘古团队因为多次发布iOS完美越狱工具而被大家所熟悉,很多人希望盘古团队能不断的发布越狱工具,但这只是盘古团队的一个研究方向,盘古团队的研究并非仅局限于iOS安全研究。在这个万物互联的时代,盘古团队希望将丰富的系统攻防之道用于保障每台移动设备的安全和隐私。 (更多…)

FBI vs Apple:FBI是幸运的

fbi-vs-apple

最近闹的沸沸扬扬的FBI vs Apple的事件,期间经历了FBI在法庭上要求苹果开发通用的破解锁屏密码的程序(并非媒体所传的后门), 苹果发布iOS 9.3,FBI要求查看iOS源代码到最后苹果威胁要在iCloud中用点对点加密代替现在的Master Key方案,最终该事件在前几天尘埃落定。据传言是在某个神秘选手的帮忙下,FBI终于解开了那台iPhone 5C手机。

最近的媒体传闻都是说苹果的锁屏密码多么难破解, 神秘选手技术多么厉害, 其实据我们分析, FBI这一次只是运气好, 碰到的是一台iPhone 5C, 如果这台设备是iPhone 5S的话, 那么很大可能还要通过法律手段。

苹果的锁屏密码到底有多么难破呢?为什么说这一次说FBI是幸运的?对于我们普通用户来说有什么影响?

请看我们对苹果数据加密机制以及锁屏密码保护机制的技术分析。

(更多…)

盘古将再次带来移动安全新产品,Black Hat Asia 2016见!

640

盘古团队将于3月30号在新加坡举办的Black Hat上展示移动应用安全分析的社区化平台。

移动设备上的恶意代码也像当年PC上的恶意代码一样正在快速发展,不同的是,移动设备相当于每个人的外部器官,感染恶意代码的移动设备带来威胁比PC更大,攻击者的手法也在不断进化,利用真实车辆违章记录,知道车主的姓名、车牌、违章地点从而构造出一个可信度极高的场景,发短信通知车主去下载安装攻击者好心提供的“应用”,除此之外,航班、快递、送餐等等我们每天接触到的衣食住行都可能有诈,从攻击背后的产业化合作、大规模利用都可以看出隐藏在恶意代码背后另一个活跃且繁荣的地下产业。

(更多…)

iOS 9.2/9.2.1修补的内核漏洞

苹果在iOS 9.2iOS 9.2.1中陆续修补了大量漏洞,其中Google Project Zero团队的Ian Beer报告了多个内核漏洞,并且在苹果修补后给出了漏洞细节

条件竞争漏洞

通过查看公告可以发现除了熟知的UAF类型漏洞外(例如Pangu9中使用的即是UAF漏洞),还包含了多个条件竞争类型的漏洞。通过分析漏洞的细节可以发现苹果在许多情况下都没有考虑用户态多线程调用导致的竞争问题,因此不排除在别的模块也有类似的漏洞(例如在未开源的内核扩展中)。

此次被修补的漏洞包含数个能被实际利用的漏洞,其中有一个漏洞能够绕过地址随机等保护机制完全攻破内核(可被用于越狱)。下面会简单分析两个漏洞的细节,讨论编写利用的一些思路。

double free in IOHIDEventQueue::start

通过查看542报告可以知道漏洞的主要原因在于IOFreeAligned释放dataQueue后没有置空。虽然大多数情况下随后的initWithEntries函数会对dataQueue重新赋值,但是如果initWithEntries失败的话,dataQueue并不会被赋值。如果再次调用start函数就会导致double free的问题。

void IOHIDEventQueue::start() 
{
...
        if (dataQueue) {
            IOFreeAligned(dataQueue, round_page_32(getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE));
        }

        if (_descriptor) {
            _descriptor->release();
            _descriptor = 0;
        }

        // init the queue again.  This will allocate the appropriate data.
        if ( !initWithEntries(_numEntries, _maxEntrySize) ) {
            goto START_END;
        }

(更多…)