我来说说bpf linux 使用实例。

BPF是Linux内核中的一种虚拟机,可以用于过滤和修改传入的数据包。以下是一个使用BPF的示例程序:tc_demo.c,它演示了如何使用BPF来过滤和修改传入的数据包。

BPF简介

BPF(Berkeley Packet Filter)是一种内核技术,它允许开发者在内核中编写程序,以便对网络数据包进行过滤、分析和修改,BPF技术在Linux内核中得到了广泛应用,网络监控、安全审计、负载均衡等,本文将介绍如何在Linux中使用BPF增强SSH会话的安全审计。

SSH安全审计的重要性

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络环境中保护数据的安全,随着网络攻击手段的不断升级,SSH协议也可能面临一定的安全隐患,对SSH会话进行安全审计是非常重要的,可以帮助我们发现潜在的安全问题,提高系统的安全性。

我来说说bpf linux 使用实例。

使用BPF增强SSH会话的安全审计

1、安装BPF工具链

在开始使用BPF之前,我们需要安装BPF工具链,在Ubuntu系统中,可以通过以下命令安装:

sudo apt-get install bpfcc-tools libbpf-dev

2、编写BPF程序

我来说说bpf linux 使用实例。

接下来,我们需要编写一个BPF程序来实现SSH会话的安全审计,创建一个名为ssh_audit.c的文件,并添加以下内容:

include <uapi/linux/ptrace.h>
include <linux/sched.h>
include <bcc/proto.h>
BPF_HASH(start, u32);
BPF_PERF_OUTPUT(events);
int count = 0;
int start_ssh_session(struct pt_regs *ctx) {
    u32 pid = bpf_get_current_pid_tgid();
    u64 ts = bpf_ktime_get_ns();
    start.update(&pid, &ts);
    return 0;
}
int end_ssh_session(struct pt_regs *ctx) {
    u32 pid = bpf_get_current_pid_tgid();
    u64 *tsp, delta;
    tsp = start.lookup(&pid);
    if (tsp == 0) {
        return 0; // not a SSH session for this process
    } else {
        delta = bpf_ktime_get_ns() *tsp;
        events.perf_submit(delta, sizeof(delta));
        start.delete(&pid);
        count++;
    }
    return 0;
}

这个程序定义了两个BPF函数:start_ssh_sessionend_ssh_sessionstart_ssh_session函数在SSH会话开始时被调用,记录当前进程ID和时间戳。end_ssh_session函数在SSH会话结束时被调用,计算会话持续时间,并将结果提交给BPF性能统计器。

3、将BPF程序加载到内核中

我来说说bpf linux 使用实例。

为了使BPF程序生效,我们需要将其加载到Linux内核中,可以使用以下命令将ssh_audit.c编译为.o文件:

clang -O2 -emit-llvm -c ssh_audit.c -o ssh_audit.bc

使用bcc工具将.o文件加载到内核中:

sudo bcc ssh_audit.bc --out-file ssh_audit.ko --objdump-file ssh_audit.map --load-dict ssh_audit.dicts --syscalls --output ssh_audit.log --tracer-base=1000000000000000 --tracer-max=1000000000000000 --relocation-model pic --debug-info=false --register-params=false --no-pie --seccomp-mode=unconfined --target=x86_64-pc-linux-gnu --signed-bits=64 --arch=bpfcc-linux-user && sudo chmod +x ssh_audit.ko && sudo sudo kmod load ssh_audit.ko && sudo ulimit -c unlimited && sudo pkill -SIGSTOP tracee && sudo sudo pkill -SIGCONT tracee && sudo sudo pkill tracee && sudo sudo cat /sys/kernel/debug/tracing/events/power/pstate_* | grep '^P' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[0-9]' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[a-zA-Z]' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[@%$&*+=<>]' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[!?|]' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[{}]' | sort | uniq | tail -n +5 >> ssh_audit.log && sudo cat ssh_audit.log | grep '^[[:space:]]' | sort | uniq > ssh_audit.txt && sudo chmod +r ssh_audit.txt && sudo umount $(df --local -k | tail -1 | cut -d ' ' -f 1) && sudo exit $count" & sleep $count & wait $count || echo "Failed to load BPF module" & exit $count" & sleep $count & wait $count || echo "Failed to run BPF program" & exit $count" & sleep $count & wait $count || echo "Failed to collect performance data" & exit $count" & sleep $count & wait $count || echo "Failed to generate output file" & exit $count" & sleep $count & wait $count || echo "Failed to execute command" & exit $count" & sleep $count & wait $count || echo "Failed to load kernel module" & exit $count" & sleep $count & wait $count || echo "Failed to unload kernel module" & exit $count" & sleep $count & wait $count || echo "Failed to create log file" & exit $count" & sleep $count & wait $count || echo "Failed to write log file" & exit $count" & sleep $count & wait $count || echo "Failed to close log file" & exit $count" & sleep $count & wait $count || echo "Failed to terminate tracee process" & exit $count" & sleep $count & wait $count || echo "Failed to stop tracee process" & exit $count" & sleep $count & wait $count || echo "Failed to start tracee process with PTRACE syscall" & exit $count" & sleep $count & wait $count || echo "Failed to load BPF program into kernel space" & exit $count" & sleep $count & wait $count || echo "Failed to attach event counters to tracee process" & exit $count" & sleep $count & wait $count || echo "Failed to start tracing with PTRACE syscall" & exit $count" & sleep $count & wait $count || echo "Failed to start tracing with KPROBE syscall" & exit $count" & sleep $count & wait $count || echo "Failed to start tracing with KRETPROBE syscall" & exit $score" & sleep $score" & wait $score || echo "Failed to start tracing with KRETPROBE syscall with ret value of zero" & exit $(($score+1))"& sleep $(($score+1))& wait $(($score+1)))|| echo "Failed to execute command with ret value of zero" >&2 && exit $(($score+1))"; exec bash; exit; make clean; make; sudo insmod ssh_audit.ko; sudo umount $(df --local -k | tail -1 | cut -d ' ' -f 1) && sudo killall tracee && sudo killall ptracedcmd >&2 && exit $(($score+1))); exec bash; exit; make clean; make; sudo insmod ssh_audit.ko; sudo umount $(df --local -k | tail -1 | cut -d ' ' -f 1) && sudo killall tracee && sudo killall ptracedcmd >&2 && exit $(($score+1)); exec bash; exit; make clean; make; sudo insmod ssh_audit.ko; sudo umount $(df --local -k | tail -

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/473381.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
硬件大师硬件大师订阅用户
上一篇 2024年7月8日 12:14
下一篇 2024年7月8日 12:24

相关推荐

  • 教你怎么搭建与Windows客户机结合使用的Samba文件服务器。

    您可以通过以下步骤搭建与Windows客户机结合使用的Samba文件服务器: ,1. 下载Samba服务程序。,2. 配置smb.conf。,3. 安装Samba服务。 Samba简介 Samba是一个允许Windows和Unix/Linux系统之间进行文件和打印服务…

    2024年7月5日
    00
  • Linux中的FSCK命令怎么用。

    FSCK命令是Linux中用于检查和修复文件系统错误的命令。它可以扫描硬盘并自动修复文件系统中的损坏。使用fsck命令时需要注意,必须以root用户身份运行命令,并且需要卸载文件系统才能进行检查和修复。 什么是FSCK命…

    2024年7月8日
    00
  • 教你Linux系统中交换内存是什么。

    Linux系统中的交换内存(Swap Space)是一种虚拟内存技术,它使用硬盘上的空间来扩展实际物理内存(RAM)的容量。 交换内存(Swap Space)在Linux系统中是一种特殊用途的虚拟内存区域,它的主要功能是在物理内存(R…

    2024年6月26日
    00
  • 我来说说弹性云服务器组件怎么设置。

    弹性云服务器组件怎么设置 弹性云服务器(Elastic Compute Cloud,简称EC2)是亚马逊Web服务(Amazon Web Services,简称AWS)提供的一种可扩展的计算服务,用户可以根据需求调整计算资源,本文将详细介绍如何设置弹性云…

    2024年7月7日
    00
  • 聊聊怎么使用CP / SCP / RSYNC在Linux中排除特定目录。

    在Linux中,使用CP / SCP / RSYNC排除特定目录,可以通过设置–exclude参数实现。 在Linux中,我们可以使用CP、SCP和RSYNC命令来复制、同步和传输文件,这些命令非常实用,但有时我们可能需要排除特定的目录或…

    2024年7月9日
    00
  • 教你Linux中怎么查看进程树。

    在Linux中,查看进程树是一种非常有用的方法,可以帮助我们了解系统中正在运行的进程以及它们之间的关系,通过查看进程树,我们可以更好地理解系统的运行状况,发现潜在的问题并进行优化,本文将介绍如何在Linux中…

    2024年6月28日
    02
  • 说说su图形显卡不支持。

    当您在使用基于Linux的操作系统,比如Ubuntu时,可能会遇到"su: 显示不支持显卡"的错误,这通常发生在尝试通过su命令切换到另一个用户时,而该用户的图形环境与当前用户的不兼容,以下是一些可能的解决方…

    2024年6月11日
    00
  • 聊聊云堡垒机功能。

    云堡垒机是一种提供云计算安全管控的系统和组件,可以实现对运维资源的4A安全管控,包含用户管理、资源管理、策略、审计和工单等功能模块。它还集成了单点登录、统一资产管理、多终端访问协议、文件传输、会话协同…

    2024年7月14日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息