使用 SSH 证书时审核用户活动

使用 SSH 证书时审核用户活动

我最近读了很多关于SSH 证书我喜欢它带来的好处。

在花时间构建自己的 POC 之前,我想知道在使用 SSH 证书时如何(如果有的话)审核用户活动。根据我的理解,最终用户的公钥将由 CA 签名,具有一个或多个特定主体(例如 root),允许用户以该主体的身份 ssh 到主机。当用户登录远程主机时,authlog 会将用户名捕获为 ID,因此我们知道谁以主体“root”的身份登录。但是,一旦用户登录,我们如何使用 auditd 等工具(或任何替代工具)审核他的活动并将其与特定用户联系起来,而不是主体“root”?

我所指的关于设置基于 SSH 证书的身份验证的示例文章是这里

答案1

SSH 证书是一个好主意,特别是在有良好的 CA 设置的情况下。

由于我没有这样的设置,我只能提供一些有关 LDAP/sudo 环境中 auditd 的详细信息。这里有趣的值是AUID。此 ID 仅在用户登录时设置一次,并由全部执行其他命令。即使成功后,sudo也会将其设置为正确的值。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-understanding_audit_log_files

例如,查看这个演示日志,ssh然后sudo执行一些ls命令。

sudo作为普通用户之前

type=SYSCALL msg=audit(1578248454.617:38779): arch=c000003e syscall=59 success=yes exit=0 a0=561f7a660c60 a1=561f7a687970 a2=561f7a650dc0 a3=8 items=2 ppid=335333 pid=335427 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts4 ses=5 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="execve_rule"ARCH=x86_64 SYSCALL=execve AUID="hargut" UID="hargut" GID="hargut" EUID="hargut" SUID="hargut" FSUID="hargut" EGID="hargut" SGID="hargut" FSGID="hargut"
type=EXECVE msg=audit(1578248454.617:38779): argc=2 a0="ls" a1="--color=auto"
type=CWD msg=audit(1578248454.617:38779): cwd="/home/hargut"
type=PATH msg=audit(1578248454.617:38779): item=0 name="/usr/bin/ls" inode=1311269 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root"
type=PATH msg=audit(1578248454.617:38779): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=1311092 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root"
type=PROCTITLE msg=audit(1578248454.617:38779): proctitle=6C73002D2D636F6C6F723D6175746F

切换后sudo su

type=SYSCALL msg=audit(1578248552.217:38816): arch=c000003e syscall=59 success=yes exit=0 a0=559f01994380 a1=559f019869c0 a2=559f01984000 a3=8 items=2 ppid=335442 pid=335478 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts4 ses=5 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)ARCH=x86_64 SYSCALL=execve AUID="hargut" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
type=EXECVE msg=audit(1578248552.217:38816): argc=3 a0="ls" a1="--color=auto" a2="hello"
type=CWD msg=audit(1578248552.217:38816): cwd="/home/hargut"
type=PATH msg=audit(1578248552.217:38816): item=0 name="/bin/ls" inode=1311269 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root"
type=PATH msg=audit(1578248552.217:38816): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=1311092 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root"
type=PROCTITLE msg=audit(1578248552.217:38816): proctitle=6C73002D2D636F6C6F723D6175746F0068656C6C6F

上述值已通过以下审计规则进行跟踪:

-a exit,always -F arch=b64 -S execve -k execve_rule

为了全面覆盖系统和所有execve系统调用,有必要添加额外的规则arch=b32

重要的是,审计日志通常包含几行属于同一行。因此,通常大多数execve条目每次执行都会有 5-6 行。这些行可以通过 audit-id 关联,在本例中为1578248454.617:387791578248552.217:38816。很明显,对于第二次调用,UID和是,这意味着实际上,仍然设置为与系统上的用户 ID 匹配。GID0rootAUID1000

https://linux.die.net/man/8/auditd.conf

auditd.conf选项log_format = ENRICHED将有助于将 ID 解析为名称。此功能从 auditd > 2.6 开始可用。

捕获正确用户的语句authlog使我假设这将以与CA基于身份验证相同的方式工作。一旦验证,请告诉我这个假设是否正确。

相关内容