shell脚本切换用户 如何使用BPF将SSH会话转换为结构化事件

11/28 03:13:28 来源网站:辅助卡盟网

现在你也许已经了解了BPF程序的功能了,简单的“man”命令,原来后面有这么多其他的程序在执行。

Teleport已将这三个程序的代码嵌入在了自己的库中,当我们启用了增强型会话记录功能之后,它便会执行这些程序。

就其本身而言,这些程序都是用于调试和跟踪的优秀工具,因为它们可以告诉我们整个系统在执行哪些操作。事实上,这就是我们最开始选择这些工具的目的:我们使用它们来调试Teleport遇到的一些问题,而这些问题可能会导致它在某些场景中耗尽文件描述符。但是,我们使用Teleport的目的各有不同,我们有时需要将程序执行与SSH会话以及标识符关联起来。

为了将程序执行与特定的SSH会话关联起来,我们选择使用cgroup(cgroupv2)。当Teleport启动SSH会话时,它首先会重新启动并将自己放置在cgroup中。这将允许程序对当前进程以及Teleport将要启动的所有进程进行跟踪,并分配唯一标识ID。Teleport所运行的BPF程序还可以发出执行它们的程序的cgroup ID,这允许我们将事件与特定的SSH会话和标识关联起来。

切入主题

了解了关于BPF的相关内容之后,你也可以将增强型会话记录功能引入你自己的程序之中,脚本代码已托管至GitHub:***b93f4d119ed。

首先启动Ubuntu 19.04或RHEL/CentOS 8 VM并运行上面链接提供的脚本。该脚本只会安装内核头和bcc-tools,这些都是增强型会话记录运行的前提条件。除此之外,它还会安装jq,这样更有助于可视化查看结构化事件流。

安装命令如下:

yum install -y kernel-headers bcc-tools

apt install -y linux-headers-$(uname -r) bpfcc-tools

如需启用Teleport中的增强型会话记录功能,请将下列内容添加至配置文件中:

   ssh_service:           enhanced_recording:              enabled: yes

当你以本文说明的方式在终端中执行“curl ”时,你将会看到下列输出内容:

{      "argv": [        "http://www.gravitational.com"      ],      "cgroup_id": 4294967355,      "code": "T4000I",      "ei": 15,      "event": "session.command",      "login": "root",      "namespace": "default",      "path": "/bin/curl",      "pid": 2315,      "ppid": 2294,      "program": "curl",      "return_code": 0,      "server_id": "e56dc762-0171-4d6e-aa56-24f2ae268c7f",      "sid": "72aabcd8-38c8-11ea-af55-42010a800031",      "time": "2020-01-17T01:27:05.07Z",      "uid": "4b493296-7df2-4ec7-9282-a19c0d98e261",      "user": "test-user"    }    {      "cgroup_id": 4294967355,      "code": "T4002I",      "dst_addr": "104.24.97.116",      "dst_port": 80,      "ei": 0,      "event": "session.network",      "login": "root",      "namespace": "default",      "pid": 2315,      "program": "curl",      "server_id": "e56dc762-0171-4d6e-aa56-24f2ae268c7f",      "sid": "72aabcd8-38c8-11ea-af55-42010a800031",      "src_addr": "10.128.0.49",      "time": "2020-01-17T01:27:05.145Z",      "uid": "42831223-1da2-4b26-a783-08060fd8d7b1",      "user": "test-user",      "version": 4    }

此时,我们可以看到用户将以两种方式运行curl程序。第一种就是程序执行本身shell脚本切换用户,第二种方法就是程序的行为,curl将会发送一个网络请求。

当然了,你也可以尝试运行其他内容,比如说经过混淆处理的命令等等,你同样可以在日志中查看到执行结果。

执行演示

下面演示的是增强型会话记录如何将一个非结构化的SSH会话转换成了一个结构化事件流:

*参考来源:gravitational,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    暂无相关资讯
shell脚本切换用户 如何使用BPF将SSH会话转换为结构化事件