跳过导航链接 | |
退出打印视图 | |
系统管理指南:安全性服务 Oracle Solaris 10 8/11 Information Library (简体中文) |
以下任务列表列出了 Oracle Solaris 审计的故障排除过程。
|
如果您认为审计已被激活,但是主审计目录下没有审计记录,请尝试以下过程。
开始之前
已经在命名服务中正确配置了 hosts 数据库,且工作正常。要调试命名服务问题,请参见以下内容:
# modinfo | grep c2audit
没有列表显示审计未在运行中。以下列表说明审计正在运行中:
40 132ce90 14230 186 1 c2audit (C2 system call)
检验 auditd 服务的状态。以下列表说明,审计未在运行中:
# svcs -x auditd svc:/system/auditd:default (Solaris audit daemon) State: disabled since Fri Aug 14 19:02:35 2009 Reason: Disabled by an administrator. See: http://sun.com/msg/SMF-8000-05 See: auditd(1M) See: audit(1M) Impact: This service is not running.
以下列表说明,审计服务正在运行中:
# svcs auditd STATE STIME FMRI online 10:10:10 svc:/system/auditd:default
以下列表说明,审计未在运行中:
# auditconfig -getcond auditconfig: auditon(2) failed. auditconfig: error = Operation not supported(48)
以下列表说明审计正在运行中:
# auditconfig -getcond audit condition = auditing
如果审计服务没有运行,请启用该服务。有关过程,请参见如何启用审计服务。
# audit -v /etc/security/audit_control audit: audit_control must have either a valid "dir:" entry or a valid "plugin:" entry with "p_dir:" specified.
更正错误。syntax ok 消息表明,该文件的语法正确。
# grep flags /etc/security/audit_control flags:lo naflags:na,lp
如果 audit_control 文件的值无效,请提供有效值。在上面的示例中,lp 是无效的类。
# tail audit_user ... # User Level Audit User File # # File Format # # username:always:never # root:lo:no admin:lp:no
如果 audit_user 文件包含无效值,请提供有效值。在上面的示例中,lp 是无效的类。
例如,以下 audit_control 文件包含一个 Oracle Solaris 软件未提供的类:
# grep flags /etc/security/audit_control flags:lo,pf naflags:na,lo
有关创建 pf 类的说明,请参见如何添加审计类。
审计类掩码必须是唯一的。
# grep pf /etc/security/audit_class 0x10000000:pf:profile command
如果没有定义该类,请定义它。否则,从 audit_control 和 audit_user 文件中删除该类。
# grep pf /etc/security/audit_event 6180:AUE_prof_cmd:profile command:ua,as,pf
如果未将事件分配给该类,请向其分配适当的事件。
# audit -s
有关过程,请参见如何启用审计服务。
确定了要在您的站点上对哪些事件进行审计后,请参考以下建议创建可管理的审计文件。
具体而言,应避免向审计迹中添加事件和审计标记。以下策略会影响审计迹的大小。
arge 策略-向 exec 审计事件添加环境变量。
argv 策略-向 exec 审计事件添加命令参数。
public 策略-如果正在审计文件事件,每次公共文件发生可审计事件时,都会将一个事件添加到审计迹中。文件类包括 fa、fc、fd、fm、fr、 fw 和 cl。有关公共文件的定义,请参见审计术语和概念。
path 策略-将 path 标记添加到包含可选 path 标志的审计事件。
group 策略-将组标记添加到包含可选 newgroups 标记的审计事件。
seq 策略-将序列标记添加到每个审计事件。
trail 策略-将尾部标记添加到每个审计事件。
windata_down 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息降级时添加事件。
windata_up 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息升级后添加事件。
zonename 策略-将区域名称添加到每个审计事件。如果全局区域是配置的唯一区域,将 zone, global 添加到每个审计事件。
以下审计记录显示了 ls 命令的用法。正在审计 ex 类,且正在使用缺省策略:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls subject,jdoe,root,root,root,root,1401,737,0 0 mach1 return,success,0
以下是启用所有策略时的相同记录:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls attribute,100555,root,bin,136,432,0 exec_args,1,ls exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root,PATH=/u sr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific path,/lib/ld.so.1 attribute,100755,root,bin,136,4289,0 subject,jdoe,root,root,root,root,1401,737,0 0 mach1 group,root,other,bin,sys,adm,uucp,mail,tty,lp,nuucp,daemon return,success,0 zone,global sequence,313540 trailer,375
只有当不要求保留发送到 syslog 日志的审计事件的二进制记录时,才适合使用此方法。通过 auditreduce 命令,可以条带化这些记录的二进制文件,从而减小二进制文件的大小。
通过减少 audit_control 文件中审计类的数目,来减少对所有用户的审计量。在 audit_user 文件中,为特定用户和角色添加审计类。
可以在您的站点上创建审计类。将需要监视的所有审计事件分配给这些类。有关过程,请参见如何添加审计类。
注 - 如果修改了现有审计类分配,在升级到 Oracle Solaris OS 的新版本时,所做的修改可能会丢失。请认真查看安装日志。
作为安全策略的一部分,有些站点会需要 root 用户或管理角色运行的所有命令的审计记录。某些站点还需要用户运行的所有命令的审计记录。
ex 类审计对 exec() 和 execve() 函数的所有调用。lo 类审计登录、注销和屏幕锁定。以下输出列出了 ex 和 lo 类中的所有事件。
7:AUE_EXEC:exec(2):ps,ex 23:AUE_EXECVE:execve(2):ps,ex ... 6152:AUE_login:login - local:lo 6153:AUE_logout:logout:lo 6154:AUE_telnet:login - telnet:lo 6155:AUE_rlogin:login - rlogin:lo 6158:AUE_rshd:rsh access:lo 6159:AUE_su:su:lo 6162:AUE_rexecd:rexecd:lo 6163:AUE_passwd:passwd:lo 6164:AUE_rexd:rexd:lo 6165:AUE_ftpd:ftp access:lo 6171:AUE_ftpd_logout:ftp logout:lo 6172:AUE_ssh:login - ssh:lo 6173:AUE_role_login:role login:lo 6212:AUE_newgrp_login:newgrp login:lo 6213:AUE_admin_authenticate:admin login:lo 6221:AUE_screenlock:screenlock - lock:lo 6222:AUE_screenunlock:screenlock - unlock:lo 6227:AUE_zlogin:login - zlogin:lo
在以下示例中,站点创建了三个角色:sysadm、auditadm 和 netadm。要为 exec 和 lo 类审计这些角色和 root 帐户:
## audit_user file root:lo,ex:no sysadm:lo,ex:no auditadm:lo,ex:no netadm:lo,ex:no
## audit_control file ... naflags:lo ...
## audit_control file flags:lo,ex naflags:lo ...
输出内容类似如下:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls subject,jdoe,root,root,root,root,1401,737,0 0 mach1 return,success,0
## audit_startup script ... auditconfig -setpolicy +argv ...
exec_args 标记用于记录命令参数:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls exec_args,1,ls subject,jdoe,root,root,root,root,1401,737,0 0 mach1 return,success,0
## audit_startup script ... auditconfig -setpolicy +arge ...
exec_env 标记用于记录命令环境:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root, PATH=/usr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific subject,jdoe,root,root,root,root,1401,737,0 0 mach1 return,success,0
## audit_startup script ... auditconfig -setpolicy +argv auditconfig -setpolicy +arge ...
输出内容类似如下:
header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00 path,/usr/bin/ls exec_args,1,ls exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root, PATH=/usr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific subject,jdoe,root,root,root,root,1401,737,0 0 mach1 return,success,0
如果您的目标是记录对有限数目的文件(如 /etc/passwd 和 /etc/default 目录下的文件)的写入情况,请使用 auditreduce 命令找到这些文件。
与将该类添加到 audit_control 文件相比,将其添加到 audit_user 文件生成的记录更少。
## audit_user file root:fw:no sysadm:fw:no auditadm:fw:no netadm:fw:no
## audit_control file flags:lo,fw ...
# /usr/sbin/auditreduce -o file=/etc/passwd,/etc/default -O filechg
auditreduce 命令在审计迹中搜索所有 file 参数实例。该命令创建一个后缀为 filechg 的二进制文件,此文件包含了包括相关文件路径名的所有记录。有关 -o file=pathname 选项的语法,请参见 auditreduce(1M) 手册页。
# /usr/sbin/praudit *filechg
如果修改了 audit_control 或 audit_user 文件,已登录用户的预选掩码不会改变。必须强制执行预选掩码的更改。
开始之前
启用了审计且用户登录后,更改 audit_control 文件中的 flags 或 naflags 值。您希望针对这些新选择的审计类对已经登录的用户进行审计。
您有两种选择。可以停止现有会话,或使用 auditconfig 命令更新用户的预选掩码。
用户可以注销然后重新登录,也可以由管理员手动终止(中止)活动的会话。新的会话将继承新的预选掩码。但是,终止用户可能不现实。
假定将 audit_control 文件中的 flags 属性从 lo 更改为 lo,ex。
首先,找到所有一般用户。在以下示例中,管理员找出不属于 root、daemon 或 lp 的所有进程:
# /usr/bin/pgrep -v -u root,daemon,lp | more .. 3941 3948 3949 10640 ...
然后,使用一个用户的进程找到该用户的审计 ID:
# auditconfig -getpinfo 3941 audit id = jdoe(1002) process preselection mask = lo(0x1000,0x1000) terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234) audit session id = 713
请注意,用户的预选掩码包括 lo 类,不包括新添加的 ex 类。
该用户的审计 ID 是 1002。该用户的审计会话 ID 是 713。
可以使用以下两种方法之一:
# /usr/sbin/auditconfig -setsmask lo,ex 713
# /usr/sbin/auditconfig -setumask lo,ex 1002
# auditconfig -getpinfo 3941 audit id = jdoe(1002) process preselection mask = ex,lo(0x40001000,0x40001000) terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234) audit session id = 713
出于维护目的,有时某个站点会希望阻止对审计事件进行审计。
例如,事件 26 和 27 属于 pm 类。
## audit_event file ... 25:AUE_VFORK:vfork(2):ps 26:AUE_SETGROUPS:setgroups(2):pm 27:AUE_SETPGRP:setpgrp(2):pm 28:AUE_SWAPON:swapon(2):no ...
将这些事件更改为 no 类。
## audit_event file ... 25:AUE_VFORK:vfork(2):ps 26:AUE_SETGROUPS:setgroups(2):no 27:AUE_SETPGRP:setpgrp(2):no 28:AUE_SWAPON:swapon(2):no ...
如果当前正在审计 pm 类,现有会话仍将审计事件 26 和 27。要阻止审计这些事件,必须更新用户的预选掩码。
注意 - 切勿注释掉 audit_event 中的事件。该文件供 praudit 命令用来读取二进制审计文件。归档审计文件可能包含该文件中列出的事件。 |
系统对二进制审计文件的增大没有限制。但为了归档和搜索方便,您可能需要限制其大小。还可以基于原始文件创建较小的二进制文件。
audit_binfile.so 插件的 p_fsize 属性可用于限制审计文件的大小。缺省值为零 (0),该值允许文件无限地增大。该值以字节为单位指定(从 512,000 到 2,147,483,647)。达到指定大小时,将会关闭当前的审计文件,并打开一个新文件。
在以下示例中,将审计文件大小限制在 1M 字节:
plugin:name=audit_binfile.so; p_dir:/var/audit; p_fsize=1024000
auditreduce -lowercase 选项用于查找特定记录。
auditreduce -Uppercase 选项用于将您的选择写入文件。有关更多信息,请参见 auditreduce(1M) 手册页。
Oracle Solaris 可以审计所有登录,无论登录源为何。
该类审计登录、注销和屏幕锁定。
## audit_control file flags:lo naflags:lo ...
注 - 要审计 ssh 登录,您的 Oracle Solaris 系统必须正在运行 Oracle Solaris ssh 守护进程。该守护进程针对 Oracle Solaris 审计进行了修改。有关更多信息,请参见Oracle Solaris 安全 Shell 和 OpenSSH 项目。
FTP 服务创建其文件传输的日志。在 SSH 协议下运行的 SFTP 服务可以由 Oracle Solaris 审计功能进行审计。到这两个服务的登录都可以由 Oracle Solaris 审计功能进行审计。
有关可用的记录选项,请阅读“记录功能”部分。特别是,log commands 和 log transfers 选项可以提供有用的日志。
通过 SSH 连接进行的文件传输使用 sftp 命令。这些传输可以使用 +fr 审计标志来记录。要审计失败的 sftp 文件传输,请审计 -fr 审计标志。
以下输出来自成功的 sftp 会话:
header,138,2,open(2) - read,,ma2,2009-08-25 14:48:58.770 -07:00 path,/home/jdoe/vpn_connect attribute,100644,jdoe,staff,391,437,0 subject,jdoe,jdoe,staff,jdoe,staff,4444,120289379,8457 65558 ma1 return,success,6
-v 选项最多可以重复使用三次。
# sftp -vvv [ other options ] hostname
如以下输出所示,登录和注销 ftpd 守护进程都会生成审计记录。
% bsmrecord -c lo | more ... in.ftpd program /usr/sbin/in.ftpd See ftp access event ID 6165 AUE_ftpd class lo (0x00001000) header subject [text] error message return in.ftpd program /usr/sbin/in.ftpd See ftp logout event ID 6171 AUE_ftpd_logout class lo (0x00001000) header subject return ...
SSH 登录记录了对 sftp 命令的所有访问。
... /usr/lib/ssh/sshd program /usr/lib/ssh/sshd See login - ssh event ID 6172 AUE_ssh class lo (0x00001000) header subject [text] error message return