如何在linux下实现event事件机制

如何在linux下实现event事件机制,第1张

一、Libevent简介

libevent是一个基于事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。

特点:

事件驱动,高性能

轻量级,专注于网络,不如ACE那么臃肿庞大,只提供了简单的网络API的封装,线程池,内存池,递归锁等均需要自己实现;

开放源码,代码相当精炼、易读;

跨平台,支持Windows、Linux、BSD和Mac OS;

支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的 *** 作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务;

支持I/O,定时器和信号等事件;

采用Reactor模式;

二、源码组织结构

Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系 统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实用库等几个部分,有些部分可能就是一个源文件。

1)头文件

主要就是event.h:事件宏定义、接口函数声明,主要结构体event的声明;

2)内部头文件

xxx-internal.h:内部数据结构和函数,对外不可见,以达到信息隐藏的目的;

3)libevent框架

event.c:event整体框架的代码实现;

4)对系统I/O多路复用机制的封装

epoll.c:对epoll的封装;

select.c:对select的封装;

devpoll.c:对dev/poll的封装

kqueue.c:对kqueue的封装;

5)定时事件管理

min-heap.h:其实就是一个以时间作为key的小根堆结构;

6)信号管理

signal.c:对信号事件的处理;

7)辅助功能函数

evutil.h 和evutil.c:一些辅助功能函数,包括创建socket pair和一些时间 *** 作函数:加、减和比较等。

8)日志

log.h和log.c:log日志函数

9)缓冲区管理

evbuffer.c和buffer.c:libevent对缓冲区的封装;

10)基本数据结构

compat/sys下的两个源文件:queue.h是libevent基本数据结构的实现,包括链表,双向链表,队列等;_libevent_time.h:一些用于时间 *** 作的结构体定义、函数和宏定义;

11)实用网络库

http和evdns:是基于libevent实现的http服务器和异步dns查询库;

        static struct input_dev* sif_input_dev = NULL

        sif_input_dev  = input_allocate_device()

        sif_input_dev->name = "sif_event"

        set_bit(EV_MSC,  sif_input_dev->evbit)

        set_bit(MSC_RAW, sif_input_dev->mscbit)

        input_register_device(sif_input_dev)

        input_event(sif_input_dev, EV_MSC, MSC_RAW, 1)

        input_sync(sif_input_dev)

        open(INPUT_DEV, O_RDONLY)

        read(fd, &event, sizeof(event))

        printf("type:%d, code:%d, value:%d\n", event.type, event.code, event.value)

https://atomicredteam.io/

https://github.com/Neo23x0/auditd

https://www.elastic.co/beats/auditbeat

检测Linux的ATT&CK技术和战术:https://github.com/Kirtar22/Litmus_Test

这篇博客强调了开源平台如何利用端点上的一系列规则和配置来检测简单到复杂的攻击。

当Linux日志也可以像Windows-Sysmon日志一样收集和分析时,这是多么有趣的事情啊!是的!这可以通过秘密调味汁——Auditbeat来实现。

下面让我们看看如何利用收集到的日志来分析mitre映射攻击。

1. Elastic Stack

2. Auditbeat

3. Atomic Red Team (ART)

这里的关键工具是在端点上使用Auditbeat进行定性日志收集。

Auditbeat是Beats Family中功能强大的日志发送组件,它是收集Linux审计框架数据和监控主机上文件完整性的理想工具。

Auditbeat有3种类型的模块:https://www.elastic.co/guide/en/beats/auditbeat/current/auditbeat-installation-configuration.html

Auditd ——该模块建立对内核的订阅,以便在发生事件时接收事件。为了捕获这些事件,可以根据需求编写特定的规则。提取良好的规则集可以从这里引用[Florian Roth的规则:)],https://github.com/Neo23x0/auditd

文件完整性 ——它检查文件系统的完整性。

系统 ——这个模块专门用于收集5种类型的数据集,即主机,登录,进程,套接字,用户。详细信息可以在这里阅读。

技术#1:执行-命令和脚本解释器- Python: T1059.006

为了检测命令行活动,模拟了臭名昭著的lazagne工具包从内存、浏览器、wifi等转储密码,APT 33、APT34, Leafminer过去使用过这些凭证转储器。

lazagne executed on endpoint for password dumping

python utility is used to dump password from memory

技术#2:持久性-创建或修改系统进程:Systemd服务:T1543.002

Systemd是属于“init”系统的软件,用于在后台管理服务/资源,并确保系统启动时服务处于启动状态。对手利用这个实用程序来获得系统级别的持久性。

systemctl utility is used to “initialize” auditbeat service

Cron是内置的实用工具,用于定期调度脚本或服务的运行。对手利用这个实用程序来获得系统级别的持久性。

nano editor is used to create cron jobs

技术#4:特权升级-滥用提升控制机制:Setuid和Setgid: T1548.001

setuid和setgid是Linux系统中与访问权限相关的两个标志。这些标志允许用户分别以可执行文件的所有者或组的文件系统权限运行可执行文件。Chmod实用程序可以用来设置特定文件的标志。

chmod utility is used to set those two flags

技术#5:防御逃避-隐藏的文物:隐藏的文件和目录:T1564.001

在Unix/Linux系统中,文件/文件夹可以使用".”前缀。实际上,这是为了避免用户不小心修改文件。要查看这些隐藏文件,可以使用“ls -a”来显示隐藏文件。apt喜欢使用这些技巧作为防御机制。

mkdir utility is used to create hidden directories

技术#6:防御逃避-移除主机上的指示器:Timestomp: T1070.006

时间践踏是一种修改文件时间戳(Modify, Access, Create, Change - MACB)的技术,其结果是模拟时间属性。

touch utility is used for timestomping

这些样本检测揭示了auditbeat如何在威胁搜索活动中发挥作用。同样,许多用例可以通过参考MITRE框架来创建和检测。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7530547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存