也谈 “Spectre” CPU 漏洞

元旦回来 P0 就放出了 2018 年的第一个大新闻,多款处理器被曝出存在安全漏洞可以泄露某些敏感信息,P0 将其分别命名为 “Spectre” 和 “MeltDown”。其中 “Spectre” 漏洞是由于 CPU 的分支预测进而导致的缓存信息泄露,其效果可以越界读取某些内容。

根据原理上来说 “Spectre” 是可以并且比较容易在浏览器中通过 js 相关技术实现攻击的,在 P0 的论文后也附加了一个 C 语言实现的 demo。出于对这种攻击理论上的认可我们开始尝试通过 js 来实现 “Spectre” 的漏洞利用。经过四天的研究我们终于 “全球首发” “Spectre” 漏洞在线检测工具,虽然依然很不完善但是效果却出乎我们所有人的意料。检测工具地址

实现的代码全是 JS 因此可以直接通过前端获取,经过 Exp-sky 师傅的润色代码也大体上可读(ps:如果知道要放出来的话变量命名写的时候就不会那么随意了~ orz)。这里记录一下代码编写过程中的几个问题,以备以后查询。

Read More

Decrypt PYC

PYC

PYC 是 Python 文件经过编译之后形成的一种文件格式,可以提高加载效率用来为其他 Python 程序提供函数接口等功能。

其文件格式如下,主要由头部四字节的 Magic 字段和 4字节的 timestap 以及 r_object 结构组成。r_object 对象是 PYC 文件的主要内容,包括了 python 文件所编译形成的 Opcode、常量、值等一系列信息。其更具体的信息可以在 python 自带的 marshal 库中找到 Python/marshal.c

Read More

Bypass CFG Through MRDATA

http://alex-ionescu.com/publications/euskalhack/euskalhack2017-cfg.pdf

这是 Alex 大神的一篇演讲,介绍了一种新的绕过 CFG 的思路

MRDATA

从 Win8.1 开始微软为 CFG 的 bitmap 添加了保护机制,将 bitmap 指针等一系列全局变量放置于文件的 .mrdata 区段,这是一个新的 PE 区段,用于保存那些易变的只读数据。

这个区段在模块加载时被标记为 PAGE_READONLY ,理论上无法被修改。

但是某些时候 ntdll 需要去修改 .mrdata 区段中的某些数据。为此Windows 提供了一个新的 API : LdrProtectMrdata( bProtect )函数用于设置 .mrdata区段是否开启保护 ,参数传入 0 表示 unprotect,传入 1 表示 protect。

很明显在模块加载和卸载时都会调用这个函数来设置一些数据,然而有些函数在运行时也会调用这个 API。

例如SetProtectedPolicyGetProtectedPolicy就会用到它。这两个函数用于设置和获取进程的保护策略,这些策略保存在通过 LdrMrdataHeap 分配的内存中,即策略处于 .mrdata 区段

Read More

RaspBerry Pi 折腾笔记

开箱

从 salt 大佬那里拿到一个树莓派,开始开箱进行折腾。

首先要进行系统的安装,这里选择的是树莓派上的一个 Ubuntu 系统

download

一开始准备使用 PowerISO 直接把这个系统当作一个 PE 烧到 sd 卡里,但是烧进去了之后发现没有办法成功启动,所以只好老老实实使用官方推荐的工具 Win32DiskImager 来安装

Read More

Image Capture

在申请这个博客的时候,定了一个小目标要半个月发一篇文章,结果发现如果不发漏洞分析的话好像很难有其他的文章。在这个月的最后一天终于在 5alt 大佬的帮助和鄙视下完成了一个小爬虫工具。现写一篇文章记录一下这个工具的整个开发过程。

Read More

Bypass ACG

P0 的研究员披露了一种可以绕过微软最新推出的 ACG 保护的方法,同时 yuange 也表示他的方法就是这个。这篇文章根据 P0 上披露的细节实际对 Edge 进程进行分析,学习在获取了读写执行的前提下如何绕过 ACG 的保护。

Read More