基于eBPF实现监控ssh登陆功能

本文介绍了一个使用Python和BCC库编写的eBPF程序,它通过kprobe机制监控SSH登录事件,记录成功和失败情况,实时展示登录信息包括PID、进程名、时间及状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是一个基于eBPF监控SSH登录的程序的示例代码,使用Python编写:

```python
import os
import ctypes
from bcc import BPF

# eBPF程序
bpf_text = """
#include <uapi/linux/ptrace.h>
#include <linux/sched.h>

struct ssh_session {
    u32 pid;
    u64 login_time;
    int success;
    char comm[TASK_COMM_LEN];
};

BPF_HASH(sess_table, u32, struct ssh_session);

int trace_auth_success(struct pt_regs *ctx) {
    u32 pid = bpf_get_current_pid_tgid();
    u32 tid = bpf_get_current_tid_tgid();
    struct ssh_session *sess, init_sess = {};

    sess = sess_table.lookup(&pid);
    if (sess) {
        strncpy(sess->comm, bpf_get_current_comm(), TASK_COMM_LEN);
        sess->success = 1;
        sess->login_time = bpf_ktime_get_ns();
    } else {
        init_sess.pid = pid;
        init_sess.login_time = bpf_ktime_get_ns();
        init_sess.success = 1;
        bpf_get_current_comm(&init_sess.comm, sizeof(init_sess.comm));
        sess_table.update(&pid, &init_sess);
    }

    return 0;
}

int trace_auth_failure(struct pt_regs *ctx) {
    u32 pid = bpf_get_current_pid_tgid();
    struct ssh_session *sess = sess_table.lookup(&pid);

    if (sess) {
        strncpy(sess->comm, bpf_get_current_comm(), TASK_COMM_LEN);
        sess->success = 0;
    }

    return 0;
}
"""

# 编译并加载eBPF程序
b = BPF(text=bpf_text)
b.attach_kprobe(event="ssh:auth_success", fn_name="trace_auth_success")
b.attach_kprobe(event="ssh:auth_failure", fn_name="trace_auth_failure")

# 读取并打印SSH登录信息
sess_table = b.get_table("sess_table")
print(f"{'PID':<6}{'COMM':<16}{'LOGIN TIME':<20}{'STATUS':<10}")
for k, v in sess_table.items():
    sess = v.sess
    status = "Success" if sess.success else "Failure"
    print(f"{sess.pid:<6}{sess.comm:<16}{sess.login_time:<20}{status}")

# 清理eBPF程序
b.cleanup()
```

该程序使用`bcc`库提供的Python接口来编写和加载eBPF程序。通过钩子函数`trace_auth_success`和`trace_auth_failure`来捕获SSH登录成功和失败的事件,并将相关信息存储在一个hash表中。最后,程序读取并打印出存储的SSH登录信息,包括进程ID、进程名称、登录时间和状态(成功或失败)。

运行此程序需要满足以下条件:
- 系统上安装了`bcc`库和eBPF相关工具。
- 程序需要以root权限运行,因为eBPF需要进行特权操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车联网安全杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值