问题:对于技术支持活动,技术人员必须使用客户提供的凭据登录客户系统,但为了确保安全性和 ISO 合规性,我们需要记录哪位技术人员连接到哪个系统。
当前设置:我已为此类客户支持活动设置了 ssh 堡垒主机 (Debian 12)。我们通过堡垒强制访问客户系统;每位技术人员在堡垒上都有一个帐户,并通过 ssh 密钥进行身份验证。
堡垒既可用于 ssh,也可用于 Web 访问客户系统。SSH 访问通过 SSH 跳转工具 (ssh -J) 执行,Web 访问通过 SSH SOCKS5 代理执行。
我们需要记录来自堡垒的每个出站 TCP 连接,至少包括发起连接的技术人员的用户名、目标 IP 地址和端口。
我们已经进行了审计,日志通过 RSyslog 被输入到 SIEM 中。当前的工作设置使用简单的审计配置来记录连接:
auditctl -a always, exit -S connect -F success=1
由于某些我尚不明白的原因,当用户使用堡垒作为跳转主机启动与客户系统的连接时,会记录 DNS 查询(具有正确的用户属性),但不会记录与目标主机的实际连接。
以下是我在审计日志中得到的内容:
Aug 20 15:26:09 bastion1 audisp-syslog: type=SYSCALL msg=audit(**1724167569.113:16994887**): arch=c000003e syscall=42 success=yes exit=0 a0=b a1=7f49a2dfa454 a2=10 a3=7ffe86122474 items=0 ppid=3840918 pid=3840929 auid=1002 uid=1002 gid=1002 euid=1002 suid=1002 fsuid=1002 egid=1002 sgid=1002 fsgid=1002 tty=(none) ses=5005 comm="sshd" exe="/usr/sbin/sshd" subj=unconfined key=(null) ARCH=x86_64 SYSCALL=connect AUID="firstname-lastname" UID="firstname-lastname" GID="firstname-lastname" EUID="firstname-lastname" SUID="firstname-lastname" FSUID="firstname-lastname" EGID="firstname-lastname" SGID="firstname-lastname" FSGID="firstname-lastname"
Aug 20 15:26:09 bastion1 audisp-syslog: type=SOCKADDR msg=audit(**1724167569.113:16994887**): saddr=02000035080808080000000000000000 SADDR={ saddr_fam=inet **laddr=8.8.8.8 lport=53** }
Aug 20 15:26:09 bastion1 audisp-syslog: type=PROCTITLE msg=audit(**1724167569.113:16994887**): proctitle=737368643A20726F646F6C666F2D73616363616E69205B707269765D
Aug 20 15:26:09 bastion1 audisp-syslog: type=EOE msg=audit(**1724167569.113:16994887**):
此 DNS 查询已记录,但没有有关实际 SSH 连接的日志。
关于 SOCKS 代理,auditd 似乎无法提供我们需要的日志,出站连接似乎是由 sshd 用户发起的。
关于如何解决这个问题有什么建议吗?
谢谢
我不明白为什么这不起作用。我怀疑这与 sshd 使用非阻塞套接字有关(其中 connect() 从不返回成功,只返回 -EINPROGRESS)。
因此,使用防火墙日志记录可能会更容易,iptables
-j LOG --log-uid
将在每个消息中包含套接字 UID,或者类似的 nftableslog flag skuid
。这有一个主要优点,因为它不依赖于连接的建立方式(阻塞套接字或非阻塞;32 位系统调用或 64 位系统调用或 io_uring)。或者:运行你的 sshd,
LogLevel DEBUG1
然后它会自动将连接详细信息写入 syslog:如果您的 syslog 守护进程支持它,则可以将 sshd 进程的 UID 直接添加到 debug1 消息中,以将所有内容放在一行中。
这些都是完全相同的东西。它们只是在客户端处理上有所不同,但服务器将两者都视为相同类型的
direct-tcpip
通道请求,并且它们通过相同的代码在相同的过程中进行处理。(是的,是客户端假装是 SOCKS5 服务器。)事实并非如此,因为 sshd 通常严格隔离其会话进程 - 一旦您通过身份验证,整个连接就会移交给在您的帐户下运行的会话进程,该进程负责处理 shell 通道和 TCP 通道。在共享的“sshd”帐户下运行用户控制的进程是非常罕见的。