[转帖]Install Xen 4.3.1 on Ubuntu 12.04 LTS from source

2014-1-24 Nie.Meining Life

原帖地址:http://dcvan24.wordpress.com/2014/01/24/install-xen-4-3-1-on-ubuntu-12-04-lts-from-source/

转帖原因:原网址被墙了,查阅不方便。

正文开始:

-----------------------------------------------------------------------------------------------------------------------------

阅读全文>>

评论(0) 浏览(682)

内核呓语系列6 —— 中断和异常

2014-1-21 Nie.Meining Coding

前面讲了系统调用对于一些不支持快速系统调用的情况,实际上就是通过中断进入内核的。linux是int 80h,windows是int 2eh。然后通过IDT中指定的中断服务例程(例如KiSystemService)进行系统服务分发。

中断和异常,一个主要是异步触发(如硬件I/O中断,当然也不排斥int 2eh这种软件中断),一个主要是同步触发(如除0异常),但由于系统的处理方式是相同的,所以经常被看作是一个东西。通常32及以上的中断号留给了中断,32以下的除了2号是NMI不可屏蔽中断以外,都留给了异常。这一篇不对中断的硬件原理做说明,仅围绕内核相关的东西展开介绍。

首先需要说明的是,对于多核处理器,每个核都有自己的IDT,因此无论是添加新的中断还是做IDT hook都得注意这个问题。此外还需要注意由于中断的优先级很高,不少操作是受限的。这里就涉及到IRQL的问题了。相信很多写驱动的朋友都碰到过IRQL_NOT_LESS_OR_EQUAL蓝屏的问题……

Windows将APIC的中断优先级映射到了自己的一套IRQL中断请求级上。任何时刻CPU都必然处于某个级别:

阅读全文>>

评论(8) 浏览(23005)

[分析引擎开发笔记]监控粒度

2014-1-11 Nie.Meining Life

分析引擎基于硬件模拟器,本身不存在控制权转移的问题,但若是对每个tb都进行全套解析(例如识别当前线程、当前进程等)还是会带来很多不必要的开销。监控粒度是平衡性能和准确度的关键。今天改进了一下,仅在处理线程切换的关键tb中进行全套解析操作,其它时候只处理行为捕获。性能提高了不少。

评论(0) 浏览(1267)

内核呓语系列5 —— 系统调用Hook

2014-1-10 Nie.Meining Coding

上次写了一堆系统调用的相关东西,相信不少研究过rootkit或主动防御的朋友都是从SSDT/ShadowSSDT hook开始的,本篇就针对系统调用监控这方面展开讲讲。

主动防御技术一般通过拦截系统调用实现,在Windows中特别流行,Linux中比较少。除了Windows用户多,需求量大以外,还有一个原因是Linux中做系统调用监控其实不太方便提取上层行为,因为Linux把一切都的当作文件的理念导致你极有可能拦截到一大堆sys_read/sys_write,却很难知道样本究竟在干什么。尤其是一些以linux为内核的其它操作系统,往往在样本行为和系统调用之间还夹了一层虚拟机,例如Android的Dalvik。最初做Android监控时就遇到了这个问题,因此不得不采用了一些特别的手段。截图说明一下:

nhyy5_1.png

阅读全文>>

评论(0) 浏览(41905)

[分析引擎开发笔记]行为监控

2014-1-9 Nie.Meining Life


行为监控的核心是API拦截。由于模块动态加载以及的ASLR等问题,API地址不能直接硬编码,或者至少需要监控模块加载并硬编码API偏移。

行为监控还有一个关键问题是,拦截到相关API后,需要提取出用户需要的大量辅助数据。由于分析引擎是基于硬件模拟器实现的,并且我不希望对操作系统内部做任何更改,因此需要解析各种内核数据结构,硬编码一大堆……似乎不是一个很好的方式……

具体一点,例如大量API的参数中只有handle,用户希望那个知道handle对应的东西是什么,因此需要从句柄表中索引出真正的object,再取得object的对象名。根据对象的不同,对象名不一定都在对象头中,甚至不一定在对象体中(对象的类型对象允许定义自己的名称parse方法),有时候对象的完整名称还会需要拼接,例如文件对象、注册表对象等。之前逆向注册表对象时还做过一个笔记:《KeyObject结构中的Name信息》。此外还有一些更加麻烦的东西,比如通过socket取得IP/Port等(socket_id在底层的表示实际上是一个FileObject的handle,需要到FileObject->FsContext中读取ip、端口、socket版本号等信息)。除了这些需要逆向的工作,还有一些虽然技术难度不大但比较繁琐的工作,例如用户希望从网络数据包中提取url等。

20170331184001.png



阅读全文>>

评论(0) 浏览(1263)

Powered by emlog