syscall 系统调用陷入_分享几种linux系统行为新型实时监控的技术

本文介绍了Linux服务器行为监控的重要性,并对比了传统监控技术的局限性,如strace、ftrace等工具的不足。提出了一种新型实时监控缓存技术方案,该方案采用分层结构,包括内核probe层、buffer层和用户态缓存层,实现了系统调用的实时采集和高效缓存,确保了数据的完整性和实时性,适合线上服务器的实时部署和资源优化。
摘要由CSDN通过智能技术生成
本文由广东省网络威胁数据联盟成员广州锦行网络科技有限公司分享

万物互联时代的到来以及大数据技术的发展,大大丰富了我们的当代生活的同时,也离不开安全、稳定可靠的服务器系统。

要想保证服务器系统资源能被用户正常使用,避免被恶意行为劫持而造成损失,我们要做的是记录服务器系统资源的使用情况、系统行为事件信息以及I/O流量等一系列信息,为服务器系统的运维和安全保障工作提供可靠的数据支持。 现在,我们将从系统日常行为安全的角度分享一种可以满足线上部署、将进程或文件创建、网络连接、网络I/O、文件I/O、shell操作、数据库操作、telnet操作、http访问、系统调用(syscall)以及系统资源信息等相关的行为信息实时采集与存储的Linux行为监控技术。

   传统监控技术      

目前,系统行为监控的实现一般应用以下方法: Linux Kprobes调试技术 Kprobes调试技术是一种专门为Linux内核跟踪、调试来设计的API。Kprobes是允许内核开发人员给任何内核指令和函数入口以及函数返回处理程序安装预处理程序与后处理程序的,这些处理程序能够访问且更改寄存器。这表示,内核开发者们可以监控系统调用相关的工作流程并簿记。通过Kprobes技术,内核开发人员能够在内核的大部分指定函数中动态地插入探测点来收集所需要的调试状态信息;比如“调用了哪些系统?”、“系统何时被调用?”、“执行是否正确以及函数的入参和返回值是什么?”这类问题都可以得到解决。而且,还可以将这些信息屏幕输出或转储日志文件。 Linux内核tracepoints(跟踪点)技术 内核的tracepoint为轻量级的hooks技术,通过高效的系统调用行为跟踪与相关性能计算,对于系统本身性能只造成微小的时间损失以及空间损失。通过注册syscall_enter_probe这些定制的probe函数,在执行系统调用相关的行为后,内核找到probe函数,然后将参数信息等传送给probe函数。而只要将probe函数中记录的相关行为的信息输出,就能达到监控目的。 目前的Linux系统行为监控工具中,采用Linux Kprobes调试技术、Linux内核的tracepoints(跟踪点)技术的工具有:strace、ftrace、lsof、htop、iftop、tcpdump、systemTap、perf等。 这些工具一般情况下只能作为日常内核开发调试以及日常运维分析工具使用,其主要用于开发调试或者相关问题定位等比较简单的信息输出。不过这些工具还存在一些使用缺陷,如下: 1、只适用于内核开发人员在调试时使用或者当相关运维人员在现场时来开启使用,不同工具间的特点也各不相同,很难满足系统全面监控的需求。 2、不能提供行为数据的优良存储能力,只能提供简单的输出或者日志存储。因为不具备数据缓存的功能,特别容易造成行为数据的丢包,也不可以很好的支撑事后数据回放以及分析。 3、不可以执行线上运行的实时部署,只可以在事后或事中开启,不能满足运维以及安全监控的自动化要求。在高吞吐、高并发的服务器上,反而会增加服务器的运行负担。

   新型实时监控缓存技术方案      

由于目前的技术无法满足线上实时部署、影响服务器性能以及行为数据不具备良好的存储与缓存功能,在这里给大家介绍一种具备实时监控以及缓存功能的技术方案。

这个方案主要利用分层结构的模型来进行架构,具体分为内核probe层、buffer层(基于内存映射mmap技术)、用户态缓存层(基于本地数据库)。其结构如下:

fd0e7a186f79c700a712169c5263e128.png

   业务流程描述    

接下来,我们将利用一个具体的系统行为事件信息采集-缓存的例子,来表述一下这三层的业务流关系: 首先,由用户执行网络连接服务主机的操作,服务主机系统即发生socket accpet系统调用中断,然后服务进程陷入内核态,进入系统的调用例程。 然后,利用 Linux内核的由tracepoints机制,内 核查找系统调用tracepoint的probe函数; 与此同时,内核查到已经挂载的内核probe层的probe函数,然后把相应accpet系统调用参数的信息传入到probe函数。 接下来,内核probe层的probe函数将传来的系统调用相关信息进行分类、进行序列化的处理后,把相关参数的信息转化成系统行为事件信息写入到mmap buffer层。 最终,用户态缓存层进程利用mmap映射技术,把具体的系统行为事件信息从mmap buffer层读取出来,把系统行为事件信息再一次格式化为便于阅读与分析的字符串信息,然后选择一种本地或者分布式的缓存技术,来持久化的存储系统行为事件信息。 通过以上业务流程的分析,我们概括出上述三层主体功能依次是:内核probe层采集系统调用信息、mmap buffer层转化系统行为事件信息、用户态缓存层持久化系统行为事件信息:

8bb8de72edb8148667d8bedb1140227e.png

   技术亮点    

通过以上的分析我们可以看出,该方案区别于现有的工具或者方案的优点可归纳为:实时性、缓存持久化。

实时性:

实时性”就是指系统操作行为(系统调用)信息能够实时感知,“零损耗”地对信息进行采集。

我们知道系统行为信息的采集是由“内核probe层”完成的,在该层中主要也是采用了Linux内核字符设备驱动技术+Linux tracepoints机制。通过开发Linux内核字符设备驱动来驱动probe模块,在probe模块中挂载tracepoint函数,采集各系统调用的相关信息。 为了实现系统调用信息从内核probe层到用户态缓存层的“Zero copy”高效传递,在probe层与用户态缓存层采用了Linux内核驱动与用户态进程实现地址共享的mmap buffer 技术方案。 2f9c6751d0bdf49c880a12964ae9a6d2.png

缓存持久化:

经过内核probe层采集的系统行为事件信息存放在mmap buffer层中,为了实时高效地将这些事件信息持久化存储,本方案采用了一种开源高效的本地文件数据库引擎,该引擎占用资源少、无需安装和管理配置、数据吞吐率每秒可达上万条记录。这样轻型的持久化模块,可以通过“零损耗”的方式部署到线上服务器,而不占用服务器资源。

从mmap buffer层中读取到系统行为事件信息,在用户态缓存层还可以根据具体业务的要求,做一些数据处理分析,如格式化、过滤等。最终存放到文件数据库中,从而实现系统行为事件信息的持久化缓存。具体流程如图:

4c02aedd6354839da7e423d75f6a1949.png

文章转载自:锦行信息安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值