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

以下是一个基于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 commTASK_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需要进行特权操作。

相关推荐
潘正翔14 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin15 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
Dovis(誓平步青云)16 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
Java小白笔记17 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
csdn_aspnet17 小时前
GitHub Actions自动化运维实战,用CI/CD流水线实现测试、部署、安全扫描一体化
运维·安全·ci/cd·自动化·github
2501_9151063217 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
qetfw18 小时前
CentOS 7 搭建 LDAP 目录服务
linux·运维·centos
ChainSafeAI00319 小时前
以太坊利用AI挖掘漏洞成功发现安全缺陷,称人工审核仍不可替代
人工智能·安全
世***y19 小时前
开展夏季安全大检查 排隐患夯实安全基础
安全
ALINX技术博客19 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统进阶-PS DMA
linux·fpga开发