
目录
. 链接器与加载器技术在保护壳上的应用
. android应用市场中的大规模漏洞挖掘
. android模拟躲避检测和应对
. 内核链表的奥秘
. 信号的可发现性 -- wifi之外我们还能做什么
. Geekpwn2014
1. 链接器与加载器技术在保护壳上的应用
0x1: 演讲者
安全编程版主玩命(阎文斌,四维创智技术总监)
0x2: 技术背景
传统的PC软件的加解壳、移动终端的APP加壳,大致经历了如下几个阶段
.) 本地文件加密,由操作系统提供的
例如windows NTFS提供的基于文件系统驱动的透明磁盘加密技术
.) 在程序正常运行时,壳可以重新接管控制权
对于传统的加壳技术,是通过将原始的程序的入口点(main函数)的指令代码替换为壳程序的入口点代码,来达到劫持原始程序代码流的目的(加密壳的入口点指令窃取会将部分入口指令继续上移到代码启动区)
通过入口点代码流接管技术,壳程序可以在优先获得执行权的基础上完成被破坏的导入表、符号表、包括对被”加密”后壳自身代码的修复工作(SMP)
.) 虚拟机保护
典型的如VPM保护壳技术,它的核心思想还是通过接管原始程序的入口代码流,所不同的在于,VPM在接管控制权之后,将”长期”控制原始程序的控制权。
VMP的作用在于在程序中重新”模拟”了一套操作系统,它有自己的寄存器、自己的堆栈区、自己的指令集系统,通过像CPU一样逐行读取VMP指令代码,并翻译为VPM识别的对应指令,和PHP和opcode的运行机制很类型,可以理解为一种动态解释性语言
0x3: 议题中的关键技术 / 技术难点
.) 自定义linker && loader
传统的保护壳技术是针对代码段进行混淆,保持启动代码不变,然后在启动的时候使用smp自修改技术,或者vmp技术进行解密后动态运行
议题提出的新的保护壳技术的常用做法是通过重写源代码来实现自定义linker、loader,基于自定义的链接器和加载器技术,我们可以将原始程序的启动代码都进行修改,并自定义构造符号表、导入表等结构,而由自定义的linker、loader去实现自定义符号表、导入表的解码,解密,这样就达到了一个DIS(dynamic instructions section)动态段的效果
本质思想是将原本的加密、混淆逻辑的工作“前移”,在更高的代码逻辑上有上游进行攻防
.) 以API SDK的方式提供了加壳接入
TDK:android的native层(.so)的一套API标准,黑客只需要按照这个标准进行编程,就可以将自己编写的源代码和SDK环境进行无缝结合,实现保护壳的效果
使用TDK之后,在程序启动时,壳程序会优先启动,然后再启动原始程序
为开发者提供了一个容易入门的加壳、病毒编程的开发平台
TDK的核心思想
. 基于linker && loader技术的代码执行逻辑劫持思想
. 对原生的linker && loader的源代码进行了自定义修改,从而可以实现自定义的符号表、重定位表的载入
. 对原始的程序的进行了一次包裹,提供了简易实现的安全包装
. 原始的代码逻辑不需要修改
. 可以使用的安全包装
) android保护壳
) 通信加密
) 公私钥保护
) lua语言安全虚拟机
) 异常监控
) 文件加解密
. AOP技术
将linker、loader整合在一起
0x4: 类似原理相关的技术
在xkunfoo2014上,彭州分享过:基于android本地二进制文件的病毒技术研究的议题,借助自定义java classloader实现类似了自定义linker && loader的技术
0x5: 攻防思考
在和黑客的攻防对抗中,安全研究员相比于黑客往往处于更高的纵深维度上,关键是如何利用这个优势
http://security.tencent.com/index.php/blog/msg/61
对于主机入侵检测、防御、修复系统来说,我们可以做的事情有
. 脚本代码OPCODE执行虚拟沙箱,实现对脚本语言的动态解密、运行、变量跟踪
. 内核RING0层级系统调用监控,RING0层相对于RING3层来说,程序执行的环境更加"纯净",存在bypass的逻辑场景相对较少,可以起到一个很好的"generalization(规范化)"的效果,运行在RING0层的监控程序可以提供当前系统较为准确的指令执行行为信息
. 使用内核级、驱动级技术防火墙技术,针对DDOS、暴力破解等攻击提供可配置化的阻断的能力
2. android应用市场中的大规模漏洞挖掘
0x1: 演讲者
郭天放,Trustlook创始团队成员,目前专注于Android平台的恶意软件沙盒检测技术及漏洞研究
0x2: 技术背景
以手机APP市场为典型代表的移动终端流量入口,当中包含了海量的APP应用,缺乏对APP上线的安全检测门槛,使得APP市场中成为一个恶意程序滋生的温床,从目前来看,APP市场中存在的安全问题有
. 敏感信息泄漏
) 密码泄漏
类似于github上的源代码、明文帐号密码泄漏,由于android本身的语言特性,使得程序本身非常容易遭到逆向,而很多开发者对android应用的定位不是很了解,将大量的数据库、服务端逻辑写在了客户端的android应用代码中,甚至直接将连接数据库的帐号密码以明文形式编码在了android应用中,黑客通过逆向android应用,从而可以非常容易的获取到数据库连接的帐号密码
) server端连接凭据
) access_key、secrect_key,AWS后端身份认证凭据
) APK签名私钥泄漏 . APP中隐藏了恶意代码
当用户安装了黑客定制的恶意APP程序之后,用户的手机就有可能遭到非法扣费,流量劫持等恶意攻击
0x3: 议题中的关键技术 / 技术难点
实施步骤
. hadoop/nutch爬虫搜索
. APK样本搜集
采用monkeyrunner脚本模拟手动APK下载
. 批量提取APK文件、以及Meta-data
. 自动化对APK进行逆向
获取java源代码
. 结构化数据 && 入库
漏洞挖掘
. 服务端信息泄漏
Github、app应用市场上存在大量的明文密码存储
) server端连接凭据
) access key、secrect key
. 可疑代码查找
通过对敏感关键字进行分级,例如passwd为最高危级别,connect等为次高优先级,通过这些敏感关键字、API进行搜索,得到可能产生的泄漏信息
. APK签名私钥泄漏
. 开放平台secrect key泄漏
0x4: 类似原理相关的技术
0x5: 攻防思考
如果密码不保存在app本地内,那应该如何保存呢?这和PC端的网站的config文件敏感信息泄漏我觉得是一类问题,该如何解决这类敏感配置文件被黑客任意(甚至逆向)读取呢?
Solution:
. 将敏感的身份认证例如数据库连接的控制逻辑上移到服务端,客户端通过token和服务端的一个可控的、有限范围域内的控制接口进行交互
. 对于android应用来说,app只能是一个前端的展示的模块,不应该过多地涉及到后端的控制逻辑,一个安全的做法就是进行安全分层,将前端的展示和后端的控制逻辑分离
. 这是一种参数化防御的思想,相对于直接和数据库进行连接,客户端只能通过服务端的一个API对数据库进行操作,客户端的操作范围被限定在了一个指定的范围内,有效防止了黑客获取了敏感信息后,对服务端进行滥用
3. android模拟躲避检测和应对
0x1: 演讲者
胡文君、肖新航
0x2: 技术背景
这个议题讲的是如何"对抗"现有的模拟器检测技术的,即如何通过黑客手段使现有的模拟机检测机制无法检测出当前正在遭到模拟器调试
检测技术的分类
. 用户层行为和数据
) 是否存在API Demo、DEV Tools等模拟器上特定的应用程序
) 联系人、短信、电话记录、相册等是否为空
) logcat一直处于运行状态?
. android系统层
) 电话号码、etc、build.device
) wifi、GPS等硬件信息
) 反射调用systemproperties.get获取系统属性值
) 读取/system/build.prop文件检测特征值
) memory行为模拟事件
. Linux系统层特征
) 通过驱动信息特征检测模拟器
) 通过设备文件特征检测模拟器
) 通过执行shell命令检测模拟器
. 模拟器体系结构特征
) 模拟器CPU信息
) Qemu二进制翻译技术
) 模拟器底层缓存行为
0x3: 议题中的关键技术 / 技术难点
模拟机检测的基本思路就是通过检查当前运行环境是否符合预先设定的模拟器的静态特征和动态特征,因此,黑客为了进行针对性的对抗,模拟器改造的2种思路
. 源码修改
) 更改字段值,API行为,使之和真实的物理机完全一致
) 编译源码生成system.img
) 加载system.img运行模拟器
. Runtime Hook
修改源码的优缺点
. 下载、编译软硬件的需求高
. android系统碎片化导致不同的系统都需要修改源代码
. 调试、编译时间较长
. 后期修改、维护困难
android runtime hook框架
特性
. 运行时动态修改API调用行为
. java层hook
. linux层hook
. smali层hook
使用到的工具
. rovo89、Xposed
a framework for mudules that can change the behavior of the system and apps without touching any APKs . Saurik、Cydia Subtrate
the powerful code modification platform behind Cydia . Collin Mulliner, adbi
the android Dynamic Binary Instrumentation Toolkit
0x4: 类似原理相关的技术
0x5: 攻防思考
反模拟器行为的检测和模拟器检测技术的的攻防对抗,攻防的双方都不在不断地去探索对方可能表现出的行为,有点像左右互搏术的感觉
模拟器的检测技术,从本质上说就是一个感知、检测技术,通过识别目标对象的
. 一定会表现出来的行为特征,针对这些特征进行针对性的检测
. 其中一方无法表现出来的行为特征,例如模拟器无法模拟重力感应信息
不论是要确定一个对象的类型、还是要确定一个一系列行为是否是入侵行为,关键在于我们参照的维度依据是否足够“准确”,是否能简单有效的对1/0进行二值区分
针对恶意代码的检测,目前可以实现监控,问题的难点在于:如何去更多地触发更多的目标程序行为
针对入侵状态模式的检测,可以引入一些状态state的思想
. 利用当满足某些行为的时候,当前进入某一个状态,继续进行行为收集
. 如果在前一个状态的基础上,又满足了其他的某些条件,则判定可以进入状态
. 通过这种hold住状态的方式,可以有效减低误报率
4. 内核链表的奥秘
0x1: 演讲者
peter hlavaty
0x2: 技术背景
0x3: 议题中的关键技术 / 技术难点
0x4: 类似原理相关的技术
0x5: 攻防思考
来自前ESET软件工程师,现在是keen的高级研究员的Peter Hlavaty分享了关于windows内核堆机制、链表的高级知识,并分析如何通过一个内核链表相关的初始化漏洞来进行DWORD SHUT,以及达到内存覆盖,内核敏感信息获取等目标
说实话,他的英文我基本只听懂了一半,看来要在安全领域这块和国外接轨,学好英语真的不是一句口号,是一件需要很重要的事情
5. 信号的可发现性 -- wifi之外我们还能做什么
0x1: 演讲者
安天实验室 微电子与嵌入式研发中心
0x2: 技术背景
对于无线射频、无线信号的安全问题,除了我们常常讨论的数据信号的内容安全,无线信号本身(电磁特征)的安全问题也需要引起人们的重视
. 对可能泄漏的信息进行分级
泄漏的信息可能处于不同的级别,即所谓的测信道攻击,对于很多的攻击方式,可能并不能完全的逆向、破解出原始的信息数据,但是通过测信道的信息泄漏,配合对收集数据的聚合,额大数据分析,就完全可以推测、还原出目标的个人信息
. 加密通信并非解决一些问题的解决方案
. 高强度协议的安全防御并不一定能解决所有问题
0x3: 议题中的关键技术 / 技术难点
所有的无线相关的设备,包括智能家居、wifi信号、蓝牙、遥控器等设备,从电磁波的角度来看,都是使用到了某个频段的电磁信号
对这些信号的被动接收是很容易实现的,甚至通过一根普通的电视棒就可以实现
短程无线信号通信协议的破解
. 315MHZ && 433MHZ
基本是明码(单向控制) . 蓝牙2.4GHZ
) SDR + 蓝牙USB Dongle协议分析工具 . 自定义2.4GHZ短程无线通信协议
) SDR + PC
) 可编程逻辑器件 . wifi
0x4: 类似原理相关的技术
0x5: 攻防思考
对核心信息的保护,或者叫对1级隐私信息的保护往往都有针对性的方法,但是针对测信道、3级及以上信息泄漏的安全问题的防御是一件相对较难的事情,因为考虑到投入产出比的问题
6. Geekpwn2014
第一次参加Geekpwn,给我的感觉就是很震撼的,对智能终端设备的研究涉及到了硬件的代码逆向/重打包、网络协议分析、接口漏洞测试等多领域的知识。如果说云计算是信息化不断深化的一个写照,那么智能家居就是信息化不断深入人们生活的最好诠释了
在geekpwn和xcon最后一天的圆桌访谈上,tk也说了,对这类智能家居等新事物的安全研究,本质上还是在原来的那些基础知识,只是表现的形式变了,当然对于智能家居来说,又有一些新的情况在,智能家居的种类很繁多,即使是同一种系统在不同的产品上,都会产生不同的变化,因此针对智能家居的hacking行为,往往是以产品为基本单位的,这也让未来的安全研究有了更多的可能和惊喜
Copyright (c) 2014 LittleHann All rights reserved