前言

在上一篇中,我们讲解了哈勃沙箱的技术点,详细分析了静态检测和动态检测的流程。本篇接着对动态检测的关键技术点进行分析,包括strace,sysdig,volatility。volatility的介绍不会太深入,内存取证这部分的研究还需要继续。

strace机制

上一篇讲到了strace和ltrace都是基于ptrace机制,但是对ptrace机制和strace/ltrace是如何利用ptrace监控系统调用,没有进行详细的讲解。

那什么是ptrace机制呢?

ptrace机制是操作系统提供了一种标准的服务来让程序员实现对底层硬件和服务的控制。

当一个程序需要作系统调用的时候,它将相关参数放进系统调用相关的寄存器,然后调用软中断0x80,这个中断就像一个让程序得以接触到内核模式的窗口,程序将参数和系统调用号交给内核,内核来完成系统调用的执行。

ptrace会在什么时候出现呢?

在执行系统调用之前,内核会先检查当前进程是否处于被“跟踪”(traced)的状态。如果是的话,内核暂停当前进程并将控制权交给跟踪进程,使跟踪进程得以察看或者修改被跟踪进程的寄存器。

strace监控系统调用

下面就以strace为例,如下图所示,在第2步和第3步是关键。

strace使用ptrace机制来检测目标进程并“监听”该进程的系统调用,strace可以在每次调用系统调用时中断跟踪的进程,捕获调用,解码它,然后继续执行跟踪的进程。

大家可能知道,每次调用系统调用(例如,打开,读取,写入,关闭)时,都需要从用户级别到内核级别的转换 - 这称为上下文切换。这取决于CPU系列和型号,以不同的方式实现,但它往往复杂且相对较慢。

sysdig机制

sysdig是一个开源系统发掘工具,用于系统级别的勘察和排障,可以看作system(系统)+dig(挖掘)的组合。我们可以把它看作一系列传统的 unix 系统工具的组合,主要包括:

strace:追踪某个进程产生和接收的系统调用。

tcpdump:分析网络数据,监控原始网络通信。

lsof: 列出打开的文件。

top:监控系统性能工具。

htop :交互式的进程浏览器,可以用来替换 top 命令。

iftop :主要用来显示本机网络流量情况及各相互通信的流量集合。

lua:一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

sysdig工作方式分成用户空间和内核空间两个部分,结构如下图所示(附件画图画的):

数据的捕获流程分为如下5部分:

在内核有一个组件叫 sysdig-probe,也可以把它称为数据探头,它通过跟踪 linux 内核来进行数据抓获。

事件缓冲器(event buffer)用来把存储器映射到用户空间。

scap 组件:用来进行捕获控制和转储文件,以及数据的状态采集。

sinsp 组件:用来进行事件分析、执行凿子(chisel),设置过滤和输出格式化。

最后 sysdig 工具在命令行解析采集的数据。

从整体架构上来看,sysdig与libpcap / tcpdump / wireshark的架构非常相似,都是先捕获大量的数据,然后使用过滤器获取自己想要的数据。

希望大家注意到一个问题, sysdig-probe从内核捕获的数据会非常大的,用户空间里的scap,sinsp,sysdig组件能处理过来吗?假如处理不过来,sysdig会采用什么机制呢?sysdig会像strace一样放慢程序速度吗?

答案是否定的。在这种情况下,事件缓冲区填满,sysdig-probe开始丢弃传入的事件。因此,将丢失一些跟踪信息,但机器上运行的其他进程不会减慢速度,这是sysdig架构的关键优势,意味着跟踪开销可预测。既然sysdig这么强大,下面讲解一下sysdig的基本用法。

sysdig 基本用法

我以ubuntu系统中的操作为例,直接在shell输入sudo sysdig 就能开始捕获系统信息,执行后你会看到终端有持续不断的输出流。

$ sudo sysdig

因为系统每时每刻都有大量的系统调用产生,这样是没办法看清更无法分析输出信息的,可以先使用 ctrl + c 来退出命令。输出如下图所示:

先来解释一下它的输出格式:

所有的输入都是按照行来分割的,每行都是一条记录,由多个列组成,默认的格式是:

%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info

各个字段的含义如下:

evt.num: 递增的事件号

evt.time: 事件发生的时间

evt.cpu: 事件被捕获时所在的 CPU,也就是系统调用是在哪个 CPU 执行的。比较上面的例子中,值 0 代表机器的第一个 CPU

proc.name: 生成事件的进程名字,也就是哪个进程在运行

thread.tid: 线程的 id,如果是单线程的程序,这也是进程的 pid

evt.dir: 事件的方向(direction),> 代表进入事件,< 代表退出事件

evt.type: 事件的名称,比如 open、stat等,一般是系统调用

evt.args: 事件的参数。如果是系统调用,这些对应着系统调用的参数

过滤

完整的 sysdig 使用方法:

sysdig [option]... [filter]

sysdig 的过滤功能很强大,不仅支持的过滤项很多,而且还能够自由地进行逻辑组合。

过滤项

sysdig 的过滤器也是分成不同类别的,比如:

fd: 对文件描述符(file descriptor)进行过滤,比如 fd 标号(fd.num)、fd 名字(fd.name)

process: 进程信息的过滤,比如进程 id(proc.id)、进程名(proc.name)

evt: 事件信息的过滤,比如事件编号、事件名

user: 用户信息的过滤,比如用户 id、用户名、用户 home 目录、用户的登录 shell(user.shell)

syslog: 系统日志的过滤,比如日志的严重程度、日志的内容

fdlist: poll event 的文件描述符的过滤

完整的过滤器列表可以使用sysdig -l来查看,比如可以查看建立 TCP 连接的事件:

sudo sysdig evt.type=accept

过滤器组合

过滤器除了直接的相等比较之外,还有其他操作符,包括=、!=、>=、>、<、<=、contains、in 和 exists,

比如:

$ sysdig fd.name contains /etc

$ sysdig "evt.type in ( 'select', 'poll' )"

$ sysdig proc.name exists

多个过滤条件还可以通过 and、or 和 not 进行逻辑组合,比如:

$ sysdig "not (fd.name contains /proc or fd.name contains /dev)"

volatility简单描述

到这发现已经写了4千多字,volatility这里简要描述一下,详细的分析,等我之后对内存取证有了一个整体的框架再说。

Volatility是一个Python编写的跨平台,用于内存分析的法证工具,其目的是为了在数据犯罪中提取易失性数据 ,也可以用来进行Rootkit的检测和协助清除。Volatility分析主要依赖的是profile文件,profile文件是由两部分合成。以linux为例,大致如下:

Linux的System.map文件列出了详细的系统调用(syscall),而kernel-header源码通过dwarfdump生成的module.dwarf文件中会包含很多内核数据结构,将以上2个文件打包为profile文件。

再用这个profile文件解析dump下来的物理内存,就很容易找到植入Rootkit的机器活动时的进程(linux_psaux)、网络通信(linux_netstat)、活动文件(linux_lsof)、驱动模块(linux_lsmod)等等

最后

关注公众号:七夜安全博客

回复【1】:领取 Python数据分析 教程大礼包

回复【2】:领取 Python Flask 全套教程

回复【3】:领取 某学院 机器学习 教程

回复【4】:领取 爬虫 教程

回复【5】:领取 编译原理 教程

回复【6】:领取 渗透测试 教程

回复【7】:领取 人工智能数学基础 教程

本文章属于原创作品,欢迎大家转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:七夜的故事 http://www.cnblogs.com/qiyeboy/

一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)相关推荐

  1. 优秀源码网站 优秀开源项目网站

    我们在开发项目的时候,大多数模块都是逐字逐句敲打出来的,然而随着开源的蓬勃发展,涌现出了好多优秀的开源项目,这些项目不仅能加快开发应用,而 且能给我们的开发带来灵感.如果开发人员能灵活应用好这些优秀的 ...

  2. 【源码类】开源项目汇总

    00. 目录 文章目录 00. 目录 01. C开源项目 02. C++开源项目 03. QT开源项目 05. Linux系统编程 06. Linux网络编程 07. 其它 本博客不断更新中,请关注. ...

  3. Istio:一个用于微服务间通信的服务网格开源项目

    http://www.infoq.com/cn/news/2017/05/istio Istio:一个用于微服务间通信的服务网格开源项目 Google.IBM和Lyft开源了微服务管理.保护和监控框架 ...

  4. 2017 码云最火爆开源项目 TOP 50,你都用过哪些 – 坏~牧羊人 – 博客园

    2017 码云最火爆开源项目 TOP 50,你都用过哪些 本文转自:https://share.html5.qq.com/fx/u?r=JdjvzwC 2017 年度码云热门项目排行榜 TOP 50 ...

  5. Python量化交易实战-38使用开源项目回测双均线策略

    B站配套视频教程观看 使用PyAlgoTrade回测双均线策略 双均线策略:长短周期均线,通过金叉,死叉的方式买入卖出股票,获取收益的策略. 回顾上节课代码的部分,上节课完成了可视化代码的部分, 主要 ...

  6. php 项目 管理,PHP开源项目:文档管理_php开源项目网

    当前位置: php开源项目网 > 文档管理 > 开源项目:文档管理 XODA是一个采用PHP和Ajax开发的文档管理系统(DMS).无需用到数据库,支持为文件和目录添加备注说明信息和过滤功 ...

  7. 开源项目是什么_在开源项目之前要了解什么

    开源项目是什么 贵公司将内部项目作为开源发布. 恭喜你! 您知道您的代码已经准备就绪,但是您准备好承担所有新职责吗? 项目作为开源发布后,您的公司不仅要对该项目负责,而且还要对将围绕该项目形成的社区负 ...

  8. Android项目:proguard混淆之常见开源项目混淆配置

    1.Gson混淆 ## ---------------------------------- ## ########## Gson混淆 ########## ## ------------------ ...

  9. 一个完整的python项目源码-一个Python开源项目-腾讯哈勃沙箱源码剖析(上)

    前言 2019年来了,2020年还会远吗? 请把下一年的年终奖发一下,谢谢... 回顾逝去的2018年,最大的改变是从一名学生变成了一位工作者,不敢说自己多么的职业化,但是正在努力往那个方向走. 以前 ...

最新文章

  1. 看漫画还是学数学?小孩子才做选择,大人全都要!
  2. win7笔记本设置wifi热点
  3. SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)...
  4. 【例题 6-6 UVA - 679】Dropping Balls
  5. 为什么需要python?它在人工智能与机器学习的优势是什么?
  6. html中,怎么样才能获得iframe页面里的内容
  7. leetcode题解15-三数之和(双指针经典)
  8. 有没有一百万的电脑配置?
  9. SpringMVC+Thymeleaf如何处理URL中的动态查询参数
  10. 前端开发之功能封装大全
  11. UVa 10003 Cutting Sticks(区间DP)
  12. Linux支持运行3dmax,Mesa的Panfrost Gallium3D驱动程序现在可以使用新的DRM驱动程序
  13. 正版星界边境服务器,《星界边境(Starbound)》正式版联机教程
  14. UVa:10105 Polynomial Coefficients(多项式定理)
  15. 贤鱼的刷题日常(数据结构栈学习)--P1175 表达式的转换--题目详解
  16. 互联网创业的五大定律
  17. ASO免费优化技巧:小米应用首发,小米aso优化怎么做
  18. naive_bayes
  19. 大数据安全的重要性解读
  20. ★ 太空飞行计划 最大权闭合图+输出方案

热门文章

  1. HMM 模型输入数据处理的优雅做法 来自实际项目
  2. tensorflow sigmoid_cross_entropy_with_logits 函数解释
  3. zookepper 安装
  4. 按需加载图片(图片懒加载)
  5. 前端设计模式责任链模式
  6. 使用CoreOS及Docker搭建简单的SaaS云平台
  7. '+' 拼接字符串引起的小事故
  8. 什么是webservice?
  9. 循环截取字符串添加换行
  10. linux C 学习