主要内容 安卓的 Binder 机制 攻击界面介绍 挖掘系统服务漏洞 漏洞实例介绍 CVE 的利用

Similar documents


`


`



勞動條件檢查執行重點(雲林)_ [相容模式]

醋 水 法 在 水 盆 內 放 入 約 七 分 滿 的 水 與 1/2 到 1 小 杯 的 醋 量, 將 髒 襪 子 浸 泡 一 晚, 隔 天 再 丟 入 洗 衣 機, 就 能 洗 得 相 當 乾 淨 醋 有 殺 菌 除 臭 和 漂 白 功 效, 使 用 過 的 醋 水, 還 可 清 理 地 板,

穨 PDF

第一冊 第四章 分裂與再統一 班級 座號 姓吊

<4D F736F F D C2E0BEC7A6D2A4ADB14DB0EAA4E52DB8D5C344A8F72E646F63>

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

Microsoft Word - 临政办发6.doc

公務員服務法第13條相關解釋彙整表

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

3.1 num = 3 ch = 'C' 2

概述

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

状 态, 规 划 车 辆 行 驶 路 径, 可 进 入 网 站 充 电 服 务 栏 目 (2) 查 询 位 置 联 系 方 式 营 业 时 间 等 信 息, 可 进 入 网 站 服 务 指 南 栏 目 建 议 您 出 行 前 通 过 易 充 电 互 动 网 站 提 前 了 解 所 经 高 速 快 充


詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入


建模与图形思考







<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

SIP/ENUM Trial

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

untitled

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

Transcription:

安卓系统服务漏洞 的挖掘与利用 龚广安全研究员奇虎 360 @oldfresher

主要内容 安卓的 Binder 机制 攻击界面介绍 挖掘系统服务漏洞 漏洞实例介绍 CVE-2015-1528 的利用

安卓的 Binder 机制

攻击界面

第一层系统服务接口 ggong@ggong-pc:~/develop/aosp/lol51$ adb shell service list Found 97 services: 0 sip: [android.net.sip.isipservice] 1 phone: [com.android.internal.telephony.itelephony] 2 isms: [com.android.internal.telephony.isms] 3 iphonesubinfo: [com.android.internal.telephony.iphonesubinfo] 4 simphonebook: [com.android.internal.telephony.iiccphonebook] 5 isub: [com.android.internal.telephony.isub] 6 nfc: [android.nfc.infcadapter] 81 acvvity: [android.app.iacvvitymanager] 82 user: [android.os.iusermanager] 83 package: [android.content.pm.ipackagemanager] 89 media.camera: [android.hardware.icameraservice] 90 media.player: [android.media.imediaplayerservice] 91 SurfaceFlinger: [android.ui.isurfacecomposer] 96 android.security.keystore: [android.security.keystore]

第二层系统服务接口 class IMediaPlayerService: public IInterface { public: DECLARE_META_INTERFACE(MediaPlayerService); virtual sp<imediarecorder> createmediarecorder() = 0; virtual sp<imediametadataretriever> createmetadataretriever() = 0; virtual sp<imediaplayer> create(const sp<imediaplayerclient>& client, int audiosessionid = 0) = 0; virtual sp<iomx> getomx() = 0; virtual sp<icrypto> makecrypto() = 0; virtual sp<idrm> makedrm() = 0; virtual sp<ihdcp> makehdcp(bool createencryptionmodule) = 0; virtual sp<imediacodeclist> getcodeclist() const = 0; virtual sp<iremotedisplay> listenforremotedisplay(const sp<iremotedisplayclient>& client, const String8& iface) = 0;...

Chrome 沙箱 安卓中的 Chrome 沙箱 shell@hammerhead:/ $ ps -Z grep chrome u:r:untrusted_app:s0 u0_a52 com.android.chrome u:r:untrusted_app:s0 u0_a52 com.android.chrome:privileged_process0 u:r:isolated_app:s0 u0_i0 com.android.chrome:sandboxed_process0 public stavc void addservice(string name, IBinder service, boolean allowisolated)

(gdb) plist svclist next 0xb6c4be38: u"acvvity" Chrome 沙箱 $2569 = {next = 0xb6c50100, handle = 16, allow_isolated = 1, name = 0xb6c4be38} 0xb6c50118: u"user" $2570 = {next = 0xb6c500d8, handle = 15, allow_isolated = 0, name = 0xb6c50118} 0xb6c500f0: u"package" $2571 = {next = 0xb6c500b0, handle = 14, allow_isolated = 0, name = 0xb6c500f0} 0xb6c500c8: u"display" $2572 = {next = 0xb6c50088, handle = 11, allow_isolated = 1, name = 0xb6c500c8}

弱点

类比

The simplest Fuzzer

发现的漏洞 CVEs Android Bug ID Vulnerability Descrip9on CVE-2015-1474 18076253 A local applicavon could escalate privileges to system due to an integer overflow in the GraphicBuffer class CVE-2015-1528 19334482 Integer Overflow in Android libcuvls can be exploited to get system_server permission CVE-2015-1525 18262893 A local applicavon could cause a denial-of-service to the audio_policy app CVE-2015-1530 18226810 An integer overflow in Android media could be exploited to get media_server permission CVE-2015-1529 19385640 Integer overflow could cause a denial-of-service to SoundTriggerHwService CVE-2015-1527 19261727 Integer overflow leading to heap corrupvon in IAudioPolicyService.cpp CVE-2015-1526 A local applicavon could cause a denial-of-service to media_server CVE-2015-1537 20222489 A local applicavon could escalate privileges to media_server due to an integer overflow in IHDCP

CVE-2015-1530

CVE-2015-1525

CVE-2015-1474

CVE-2015-1528 此漏洞在最新的 Android 5.1 上暂时还没修复

CVE-2015-1528

分步提权

漏洞利用难点 通过 Binder 调用利用堆破坏漏洞 障碍处理请求的线程池地址空间布局随机化 (ASLR) 只能写相邻连续空间 DEP 不能加载 SO 文件 解决办法 挂起 N-1 个线程 信息泄露 覆盖 je_malloc 元数据实现任意写 ROP 从内存中加载 SO execmem, execmod?

Je_malloc 的一个特性 不同的线程分配的空间在不同的内存块中 (Chunk) Je_malloc 中 chunk 的分布

多个 Binder 服务线程 控制 Binder 服务线程是为了堆风水 Mediaserver 中的 Binder 服务线程

挂起 N-1 个线程 BufferQueue IGraphicBufferProducer setbuffercount apachbuffer requestbuffer IGraphicBufferConsumer system_server, surfaceflinger,mediaserver 都会用到 BufferQueue, 都会向外导出 IGraphicBufferProducer 接口, 通用性好

挂起状态的线程栈

堆内存泄露 IGraphicBufferProducer->requestBuffer 继承

堆内存泄露

地址信息泄露 泄露堆地址 在泄露的堆内容中搜索特定结构 泄露多个模块基址 搜索函数指针 泄露栈地址 搜索 pthread_internal_t structrue

pthread_internal_t 泄露栈的位置

任意地址写 ü 每一个大小类别维护一个指针表 (gdb) p je_small_bin2size_tab $24 = {8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 640, 768, 896, 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584} ü 指针表描述结构 ü (gdb) p je_arenas[0].tcache_ql.qlh_first.tbins[11] $9 = {tstats = {nrequests = 17}, low_water = 62, lg_fill_div = 1, ncached = 63, avail = 0xb6003f60} ü 指针表内容 (128) (gdb) x/63xw je_arenas[0].tcache_ql.qlh_first.tbins[11].avail 0xb6003f60: 0xb6057f80 0xb6057f00 0xb6057e80 0xb6057e00 0xb6003f70: 0xb6057d80 0xb6057d00 0xb6057c80 0xb6057c00 0xb6003f80: 0xb6057b80 0xb6057b00 0xb6057a80 0xb6057a00 0xb6003f90: 0xb6057980 0xb6057900 0xb6057880 0xb6057800 0xb6003fa0: 0xb6057780 0xb6057700 0xb6057680 0xb6057600

绕过 Selinux 的限制 加载执行 so 文件的流程

Shell 成功利用后得到被攻击服务进程的 shell

SurfaceFlinger 和 System_Server

利用代码 hpps://github.com/secmob/ PoCForCVE-2015-1528