等保2.0测评:CentOS入侵防范和安全审计

admin 2022年10月20日18:47:58评论60 views字数 23919阅读79分43秒阅读模式

请点击上面 等保2.0测评:CentOS入侵防范和安全审计 一键关注

内容来源:FreeBuf.COM 

等保测评2.0:CentOS入侵防范

 一、说明

   本篇文章主要想说一说我对入侵防范测评项的理解(对于centos系统而言),如果大家有其他的看法或者思路也可以在回复中提出,我也跟着学习学习。

二、测评项

这3个测评项的内容如下:

a) 应遵循最小安装的原则,仅安装需要的组件和应用程序;

b) 应关闭不需要的系统服务、默认共享和高危端口;

c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;

这3个测评项都是跟业务紧密相关的,往往没有一个固定的标准答案,需要根据实际情况作出判断。

三、测评项a

a) 应遵循最小安装的原则,仅安装需要的组件和应用程序;

如果纯粹用这个测评项的要求去检测,我个人感觉无从下手。
查询linux中安装的程序,一般使用yum list installed或者rpm -qa,关键是linux中随随便便都安装得有几百个组件,而且很多组件都是存在着依赖关系。
你很难或者至少很难快速的判断某组件到底是必需的还是非必需的,而被测评单位方的人也一样,他也不可能知道。
所以,我一般只能由b测评项的结果来推断a测评项了。

四、 测评项b

b) 应关闭不需要的系统服务、默认共享和高危端口;

4.1. 关系

对于组件、服务、进程、端口而言,它们之间是存在着关系的:安装程序-->启动相关服务-->启动相关进程-->监听相关端口
而且,一个程序(组件)可能有数个服务,而一个服务也可能实际启动了数个进程,当然一个进程应该就对应一个端口。
比如nfs-utils组件,它就包含nfs和nfslock两个服务,而nfs服务,就可以启动数个进程:
[root@centos01 ~]# /etc/init.d/nfs status
rpc.svcgssd 已停
rpc.mountd 已停
nfsd 已停
rpc.rquotad 已停

4.2. 查看端口

一般我们使用netstat -ap或者netstat -anp查看系统中监听的端口以及对应的进程:
netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0      0 localhost:smux 0.0.0.0:*               LISTEN 11884/snmpd
tcp 0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN 1/systemd
tcp 0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN 5031/sshd
tcp 0      0 localhost:smtp 0.0.0.0:*               LISTEN 1086/master
……

netstat -apn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0      0 127.0.0.1:199           0.0.0.0:* LISTEN 11884/snmpd
tcp 0      0 0.0.0.0:111             0.0.0.0:* LISTEN 1/systemd
tcp 0      0 0.0.0.0:22              0.0.0.0:* LISTEN 5031/sshd
tcp 0      0 127.0.0.1:25            0.0.0.0:* LISTEN 1086/master
……

如果命令参数中不使用n,那么结果中有些本地端口就不会显示出数字值,而是从/etc/services文件中,查找这个端口的数字值所在行,获取端口的名字:
等保2.0测评:CentOS入侵防范和安全审计最左边的一栏即为端口的名字。
虽然0到1023端口是周知端口,也即大家公认的每个端口都有固定所代表的内容,比如21端口是FTP端口,一般也不会有其他的某个进程也将自己的端口设置为21端口。
所以只要你看到端口值是21端口,那么你几乎就可以认定这是ftp进程在监听的端口。
但是这不是百分之一百的,说不准就有一些程序的进程监听的是动态端口,一不小心就把0到1023的某个端口给占用了。
所以最准确的判断方法是看端口的数值以及监听该端口的进程名,比如:
tcp        0      0 127.0.0.1:25            0.0.0.0:* LISTEN 1086/master
端口值是25,监听该端口的进程是master。
如果还搞不懂,可以使用ps -ef显示所运行的所有进程,再查看要这个进程的具体信息。
好,这些方法足够让你判断出开启的端口都大概都是些什么端口了。

4.3. 判断端口

一般服务器上监听的端口很多,你得了解一些常用的端口,比如80端口,以及常见的中间件的端口,比如tomcat默认端口是8080。
以及常见的数据库的端口,比如Oracle默认是1521,MySQL默认是3306。
以及一些常见服务的端口或经常,比如ftp是21、ssh是22、telnet是23、邮件服务是25、rpcbind是111、rpc.statd是动态端口(所以这里要用进程来判断)、打印服务(cups)端口是631等。

所以从服务下手的话,比如不使用ftp,那么21就是多余端口。不用邮件服务,25就是多余端口,rpc.statd和nfs有关,不用nfs的话,那么rpc.statd监听的动态端口也是多余端口,以此类推。
多余端口就应该关闭,可以关闭相对应的服务或者卸载相对应的组件,也可以用iptables或者firewall进行拦截。

至于高危端口,实际上某种意义上所有端口都是高危端口,反正只要你监听了,都有可能被入侵。
所以对于必须要使用的端口,比如22端口,最好的就是限制连接这个端口的ip,其次,就是修改默认端口。
当然,由于业务需要,不一定可以修改端口的数值和限制连接这个端口的ip,这个看自己怎么把握了。

4.4. 最小化安装

检查完测评项b,如果发现没有啥多余端口,那么就可以认定测评项a至少是部分符合,至于具体怎么打分,自己把握吧……
至于为什么这么说,因为在等级保护试行2.0的测评要求里是这么说的:
等保2.0测评:CentOS入侵防范和安全审计

这里说的是安装了非必要组件后关闭了也可以,不过等级保护正式版2.0又变回来了:
等保2.0测评:CentOS入侵防范和安全审计

说实话,我没搞明白,这是否遵循最小安装原则和是否未安装非必要的组件和应用程序,难道说的不是一回事吗?
所以,我觉得还是等级保护试行2.0说得更有道理一些。

五、测评项c

c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;

对于centos而言,就是限制ssh端口的连接ip,在主机层面,一般可以用Iptables(centos6)、Firewall(centos7)这两防火墙实现,也可以用hosts.allow和hosts.deny配置文件实现,还可以用/etc/ssh/sshd_config配置文件实现。
不过在实际测评当中可能会遇到的一种情况:
就是被测评服务器开着ssh端口,也没有对这个端口的连接ip进行任何限制。但这个服务器所在网络是内网,且没有wifi,想要实现远程管理这个服务器,需要你自己带着电脑跑去机房插网线才行。
这种我觉得肯定不能算不符合,至少也有个3、4分吧,甚至我觉得打5分估计也没啥问题,不知大家怎么看。

5.1. 防火墙

centos6只有iptables,而centos7既可以用iptables也可以用Firewall。
对于iptables,强烈建议大家看看这位博主写的教程:http://www.zsythink.net/archives/1199
我一开始接触iptables时就被弄晕了,chain、table到底是个啥玩意?后来看了这篇教程才明白的。
至于Firewall,这里就简单的说一下。
简单的来说,可以用Firewall设定多个zone(区域),每个zone都有自己的过滤规则,然后每当有请求进来之时,根据zone中设置的source(源ip地址)、zone中绑定的interface(请求的网卡)来判断由使用哪个zone的规则,如果通过source和interface没有匹配到任何一个zone,则使用firewalld.conf中配置的默认zone。
从优先级而言是:source、interface、默认zone
所以,一个源(或重叠的源)不能被分配到多个区域。这样做的结果是产生一个未定义的行为,因为不清楚应该将哪些规则应用于该源。
同样,一个网卡也只能分配到一个zone中。
我们可以用如下命令,查看所有的zone(如果没有自己设置zone,那么应该只存在系统预设的zone):
firewall-cmd --list-all-zones
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
drop
  target: DROP
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
internal
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: em1
  sources: 
  services: ssh dhcpv6-client
  ports: 39289/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
work
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
注意看,里面只有pulic这个zone的interfaces绑定了网卡,所以也只有这一个区域是活动的(active)。
对于里面各个参数所代表的意义,大家可以在网上搜索搜索就知道了。

5.2. hosts.allow和hosts.deny

5.2.1. 前置条件
通过这两个配置文件进行限制,需要条件, hosts.allow文件的注释内容如下:
#hosts.allow This file contains access rules which are used to
#allow or deny connections to network services that
#either use the tcp_wrappers library or that have been
#started through a tcp_wrappers-enabled xinetd.
也就是说:
此文件包含用于允许或拒绝与以下网络服务的连接:

1.使用了tcp包装库

2.或者通过启用了TCP_wrappers的xinetd启动。

不是任何服务程序都能使用TCP_wrappers的,例如使用命令ldd /usr/sbin/sshd,如果输出中有libwrap,则说明可以使用TCP_wrappers, 即该服务可以使用/etc/hosts.allow和/etc/hosts.deny,如果输出没有libwrap则不可使用。
[root@centos01 ~]# ldd /usr/sbin/sshd
  linux-vdso.so.1 => (0x00007fffa0da0000)
  libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007f0417aa6000)
  libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f041789b000)
  libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f041767e000)
  libpam.so.0 => /lib64/libpam.so.0 (0x00007f0417470000)
  libdl.so.2 => /lib64/libdl.so.2 (0x00007f041726c000)
  libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f041704c000)
  libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f0416c6d000)
  libutil.so.1 => /lib64/libutil.so.1 (0x00007f0416a6a000)
  libz.so.1 => /lib64/libz.so.1 (0x00007f0416853000)
  libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f041663a000)
  libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f0416403000)
  libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f04161e8000)
  libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f0415fa4000)
  libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f0415cbe000)
  libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f0415a91000)
  libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f041588d000)
  libnss3.so => /usr/lib64/libnss3.so (0x00007f041554f000)
  libc.so.6 => /lib64/libc.so.6 (0x00007f04151ba000)
  /lib64/ld-linux-x86-64.so.2 (0x0000003abde00000)
  libfreebl3.so => /lib64/libfreebl3.so (0x00007f0414f43000)
  libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f0414d37000)
  libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f0414b34000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0414917000)
  libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007f04146ea000)
  libplc4.so => /lib64/libplc4.so (0x00007f04144e5000)
  libplds4.so => /lib64/libplds4.so (0x00007f04142e1000)
  libnspr4.so => /lib64/libnspr4.so (0x00007f04140a3000)
  librt.so.1 => /lib64/librt.so.1 (0x00007f0413e9b000)

经过判断sshd是可以使用的。

5.2.2. 使用方法
修改/etc/hosts.deny,在其中加入
sshd:ALL
修改:/etc/hosts.allow,在其中进行如下设置:
sshd:192.168.1.2

表示只允许 ip为 192.168.1.2 登陆到sshd

修改 /etc/hosts.allow,在其中加入
all:218.24.129.
这样就会允许来自218.24.129.*域的所有的客户来访问。这只是举个例子,实际上,系统默认状态 下,都是能用这些网络服的
修改 /etc/hosts.deny,在其中加入
all:218.24.129.
就限制了来自218.24.129.*域的所有的所有的IP

5.2.3. 优先级
Wrappers 首先在 hosts.allow 文件中查找规则匹配。如果找到匹配,那么 tcpd 会根据规则停下来,批准或拒绝访问。如果在 hosts.allow 文件中未找到匹配,那么 tcpd 会读取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒绝访问,否则批准访问。
而且这里的规则是匹配到立刻执行,也就是某ip遇到的第一个匹配到的语句是拒绝,那么就会被拒绝,无论之后的规则是啥。同样,如果遇到允许,那就允许,无论之后的规则是啥,所以关键是遇到的第一个匹配的规则。

5.2.4. 默认后缀
在allow文件中如果没有加上:option,默认会认为是:allow。
所以虽然存在hosts.allow和hosts.deny两个文件,但根据规则的灵活性,可以只用一个文件,只要在使用时明确指后缀即可。
比如修改 /etc/hosts.allow,在其中加入
all:218.24.129.:deny
就是指明了后缀,代表拒绝218.24.129.*ip端的访问,如果不指明后缀,在hosts.allow默认为allow后缀,在hosts.deny里默认为deny后缀

5.3. sshd_config配置文件

5.3.1. 白名单模式
AllowUsers    aliyun test@192.168.1.1
仅允许 aliyun和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统,用户名之间用空格。
AllowUsers    *@192.168.1.1
仅允许从192.168.1.1 登录的帐户通过 SSH 登录系统。
5.3.2. 黑名单模式
使用Denyusers关键字,其余配置与AllowUsers一样。
5.3.3. 组模式
对应于用户,还有AllowGroups、DenyGroups关键字,和AllowUsers、Denyusers基本一样,只是后面需要填写的是组名,而且是主要组(基本组)的名字。

六、测评项

这2个测评项内容如下:

e)应能发现可能存在的已知浦洞,并在经过充分测试评估后,及时修补漏洞;

f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

七、 测评项e

e)应能发现可能存在的已知浦洞,并在经过充分测试评估后,及时修补漏洞;

这种要看被测评方自己是否有定期使用第三方工具进行漏洞扫描(比如安恒漏洞扫描工具等),查看每次扫描的扫描报告。

另外很多杀毒软件都有漏洞扫描的功能,但是在linux系统上还能扫描漏洞的,不是没有,但是我没遇到过……

我遇到过的就一个卡巴斯基的linux版本,有那么一丁点的漏洞扫描功能(因为能扫描到的漏洞的范围极窄)。

另外对于补丁,可以用rpm -qa | grep patch来查看安装的一些补丁,但是有些时候人家是直接用更新的组件,这个命令是查不出来的。

比如openssh的低版本存在很多漏洞,这种情况下直接用更高版本的openssh就能解决问题了,而不是去打补丁。

还有是否具备测试环境,在发现漏洞后现在测试环境中进行测试、评估,然后再修补漏洞。

所以这一个测评项,主要还是靠访谈,然后再去取证,自己在主机上查配置基本查不出啥东西。

八、测评项f

f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

8.1. 说明

其实对于主机的入侵按照初级教程而言,主要是系统入侵和远程入侵两种。

系统入侵主要是指在拥有一个低级账户的权限下通过系统漏洞进行提权,得到更高的管理权限,然后进行破坏。

那么,系统入侵一方面主要是看系统本身是否存在有什么高危漏洞。另外一点其实就和访问控制有关,是否做好了比较细致的访问控制。

如果系统本身不具备什么高危漏洞,而且访问控制做得比较细致、有效的话,那么就算入侵者拿着具备低级权限的账户,也不会造成什么大的破坏(因为很难提权)。

而远程入侵则是利用网络进行端口扫描或者漏洞扫描,所以对于这种入侵,在主机层面上,当然第一点的仍然是系统本身是否存在高危漏洞。第二点就是是否关闭了多余的端口、对端口进行限制等。

下面说一说和入侵防范相关的软件、方法。

8.2. 软件类

在linux主机上能实现比较全面防入侵的软件我没遇到够,有一定的防入侵功能的软件,我遇到的就两个:

一个是深信服EDR,具体功能如下:

等保2.0测评:CentOS入侵防范和安全审计

它也具有报警功能:

等保2.0测评:CentOS入侵防范和安全审计

一个就是卡巴斯基的linux版本,它好像具有比较浅层的防入侵功能。

至于报警功能的话,它也具有:

等保2.0测评:CentOS入侵防范和安全审计

8.3. 系统防火墙

系统防火墙本身并不具备什么防入侵、检测入侵的功能,但是如果系统防火墙开启而且确实关闭了多余的端口,对于需要使用的端口做了源ip限制的话,或多或少还是能起到一定的功能的。
毕竟入侵的常用方法之一就是扫端口,然后看哪有漏洞,再进行入侵。

8.4. 查看日志

如果被测评方经常查看相关日志的话,也能起到少许的入侵检测的作用。
比如查看/var/log/secure等日志,或者查看系统防火墙日志(如果开启防火墙并做了策略),又或者设置了audit的审计规则,查看audit的审计日志等。

8.5. 安全设备

比如基于主机的IDS设备,又或者查看网络拓扑图,是否部署了IDS、IPS。

8.6. 云

如果是部署在云上,比如阿里云,那么都会有一些安全产品、服务可以购买的,比如云盾、安骑士等。
另外,如果是云上的话,一般都存在一个端口安全策略,比如要远程登录某主机的话都需要向客服提交工单申请对ip开放远程端口:

等保2.0测评:CentOS入侵防范和安全审计

九、 总结

这个测评项比较麻烦,因为想要实现测评项的要求,其实主要依靠第三方软件或者设备。如果被测评方没有使用什么第三方软件或者设备,那很好办,写没有就行了。
麻烦的地方是如果对方用了第三方软件或者设备,但是你不清楚这个软件具体具备什么功能,他也不清楚或者知道的比较模糊的话,就比较抓瞎了。
特别是对于反入侵,很多时候在软件界面上并不会明确的告诉你具体具备什么反入侵功能,只有一个是否开启的选项而已……
这方面没有什么比较好的解决方案,唯有靠慢慢的积累经验吧。


等保测评2.0之Centos安全审计

一、说明

在进行等级保护测评时,需要检查主机的安全审计功能,这里就以等级保护2.0来说一说centos6在这方面的检测,以下是安全计算环境的安全审计控制点中的测评项。

二、测评项a

等保2.0测评:CentOS入侵防范和安全审计

这里在初级教程中,让我们去查看系统日志服务安全审计服务是否正常运行,但是这两者有什么关系以及具体有什么功能书里没说清楚。

2.1. audit和syslog的关系

网上的资料:

audit 主要用来记录安全信息,用于对系统安全事件的追溯;而 syslog 日志系统用来记录系统中的各种信息,如硬件警报和软件日志等。但是 syslog 属于应用层,没办法记录太多信息。audit 来记录内核信息,包括文件的读写,权限的改变等。

举个例子来说,就是audit会记录系统情况,syslog也会记录,但是syslog记录的信息不如audit更详细,至于它俩具体能记录啥,下文会说。

在实际使用中,audit和syslog几乎就是独立的,比如audit进程没运行,syslog不会受到影响,会正常记录信息。而syslog没有开,audit也不会受到影响,会正常记录信息。


2.2. 安全审计内核模块与安全审计守护进程

这一段我也不是很清楚其原理,所以说错了请谅解。

大概意思就是auditd内核模块auditd守护进程,不是一回事。auditd内核模块主要用来获取审计信息,而用户的auditd守护进程主要是从内核模块获取审计信息然后记录。所以如果auditd内核模块没有起动,那么auditd守护进程启动了也没有任何用,用户定义的临时审计规则或永久审计规则都不会起效果,自然也不会记录任何信息(但注意,这个不会影响到syslog,syslog还是会正常记录信息的)。

我们可以通过auditctl -s命令查看auditd内核模块的状态:

[root@centos01 ~]# auditctl -s
AUDIT_STATUS: enabled=1 flag=1 pid=3232 rate_limit=0 backlog_limit=320 lost=0 backlog=0

里面的enabled的值即为auditd内核模块的状态,enabled为0则代表auditd内核模块没有启动,此时就像上文说的那样,系统不会记录任何信息。如果enabled为1,则代表auditd内核模块正常开启,此时可以正常收集信息。如果enabled为2,似乎是代表审计规则被锁定,不能修改升级规则。

而当enabled为1但auditd守护进程没有开启时,内核收集到的信息将会记录到写到/var/log/messages中。 

当然,一般情况下不会出现这种状态,使用service auditd startstop命令启动或停止auditd守护进程时,内核的状态和auditd守护进程的状态是一致的。也就是start时,会开启auditd守护进程,同时auditd内核的enabled也会被设为1,stop时,也一样。

除非你使用auditctl -e命令特意去这么做:

[root@centos01 ~]# service auditd stop
停止 auditd: [确定]
[root@centos01 ~]# auditctl -e 1
AUDIT_STATUS: enabled=1 flag=1 pid=0 rate_limit=0 backlog_limit=320 lost=0 backlog=0
[root@centos01 ~]# service auditd status
auditd 已停

此时,就出现了auditd内核模块未启动,但auditd守护进程启动的情况了。


2.3. 是否开启了安全审计功能

所以判断是否开启安全审计功能时,要顺带查看一下auditd内核模块的状态,至于syslog是否开启,我个人感觉还是以auditd为主,syslog开启了很好,没开启也无所谓。


2.4. 是否覆盖到每个用户和是否对重要行为、事件进行审计

我们可以通过auditctl -l查看现在运行着的审计规则(默认是无规则):

[root@centos01 ~]# auditctl -l
No rules

还可以通过查看/etc/audit/audit.rules文件,得到写在配置文件中的永久审计规则:

[root@centos01 ~]# cat /etc/audit/audit.rules
#This file contains the auditctl rules that are loaded
#whenever the audit daemon is started via the initscripts.
#The rules are simply the parameters that would be passed
#to auditctl.

#First rule - delete all
-D

#Increase the buffers to survive stress events.
#Make this bigger for busy systems
-b 320

#Feel free to add below this line. See auditctl man page

实际运行的规则和配置文件中写的规则有什么区别吗?对于实际运行的规则,你可以临时的增加、删除、修改(服务重启就恢复原样)。而对于写在配置文件中的规则,如果你修改了配置文件却没有重启服务,那么你修改的也不会生效。

audit的审计规则大概有两类:一类是对文件的监控,一类是对系统调用的监控。

对于文件,可以定义审计规则监控对该文件的读、写、执行等操作,一旦发生,就会记录到日志文件中。比如用以下命令对hosts文件的写和属性更改进行监控:

auditctl -w /etc/hosts -p wa

对于系统调用,可以定义审计规则对于命令的调用,比如用以下名监控对umask、chown命令的调用:

[root@centos01 ~]# auditctl -a exit,always -S umask -S chown
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@centos01 ~]# auditctl -l
LIST_RULES: exit,always syscall=chown,umask

好,对于一个默认的、没有定义审计规则的系统,其实还是会记录一些东西的,我们可用aureport -i命令查看总览:

Summary Report
======================
Range of time in logs: 2019031200:54:39.084 - 2019072615:38:01.542
Selected time for report: 2019031200:54:39 - 2019072615:38:01.542
Number of changes in configuration: 67
Number of changes to accounts, groups, or roles: 172
Number of logins: 162
Number of failed logins: 75
Number of authentications: 471
Number of failed authentications: 442
Number of users: 6
Number of terminals: 33
Number of host names: 3
Number of executables: 32
Number of files: 3
Number of AVC's: 28
Number of MAC events: 152
Number of failed syscalls: 26
Number of anomaly events: 26
Number of responses to anomaly events: 36
Number of crypto events: 573
Number of keys: 1
Number of process IDs: 2036
Number of events: 11595

这里可以看到日志的开始和结束日期,以及各类记录的数量。   
aureport命令有着很多参数,如-x、-l、-f、-c、-u等,可以查看各类记录的具体信息,默认情况下会对以下信息进行记录:

账号修改,如使用passwd、usermod等命令;       
用户登陆,包括图形界面的登陆、远程登录,但应该不包括su;       
配置修改,但是这个其实比较不清晰,大概用什么方式修改什么服务的配置文件会被记录下来,不清楚;       
……

所以,默认情况下auditd也记录了一些东西,也勉强算是覆盖到每个用户和并对重要行为、事件进行审计了。

至于syslog,它大概记录的信息如下:   
等保2.0测评:CentOS入侵防范和安全审计

三、 测评项b

等保2.0测评:CentOS入侵防范和安全审计

3.1. audit

这个,可以直接查看auditd的日志文件的具体内容:

[root@centos01 ~]# cat /var/log/audit/audit.log | head -n 2
type=DAEMON_START msg=audit(1552323279.084:9122): auditd start, ver=2.2 format=raw kernel=2.6.32-431.el6.x86_64 auid=4294967295 pid=1165 subj=system_u:system_r:auditd_t:s0 res=success
type=CONFIG_CHANGE msg=audit(1552323279.203:4): audit_backlog_limit=320 old=64 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditctl_t:s0 res=1

里面的信息还是很详细的,具体每个字段代表什么意思可看:https://blog.csdn.net/yongyong169/article/details/79035680 

反正符合要求应该是没啥问题的。

3.2. syslog

如果是syslog,有些日志比较详细,有些不够详细,last命令查询wtmp日志,就还算详细吧:

[root@centos01 ~]# last | head -n 20
root     pts/2        :0.0             Fri Jul 26 15:53   still logged in   
root     pts/1        :0.0             Fri Jul 26 14:51   still logged in   
root     pts/0        :0.0             Fri Jul 26 14:48   still logged in   
root     tty1         :0               Fri Jul 26 14:47   still logged in   
reboot   system boot  2.6.32-431.el6.x Fri Jul 26 14:47 - 15:56  (01:09)
root     tty1         :0               Wed Jul 10 09:12 - 09:14  (00:01)
reboot   system boot  2.6.32-431.el6.x Tue Jul  9 15:44 - 09:14  (17:29)
root     pts/1        192.168.9.1      Wed Jul  3 13:36 - 11:59  (22:23)
root     pts/0        :0.0             Wed Jul  3 13:35 - 22:34 (1+08:58)
root     tty1         :0               Wed Jul  3 13:35 - 22:34 (1+08:59)
reboot   system boot  2.6.32-431.el6.x Wed Jul  3 13:33 - 22:34 (1+09:00)
root     pts/1        192.168.9.1      Wed Jul  3 13:06 - down   (00:26)
root     pts/0        :0.0             Wed Jul  3 13:06 - 13:33  (00:26)
root     tty1         :0               Wed Jul  3 13:04 - down   (00:28)
reboot   system boot  2.6.32-431.el6.x Wed Jul  3 13:03 - 13:33  (00:29)
oracle   pts/1        192.168.236.1    Sun Jun 30 19:46 - down   (09:53)
root     pts/2        192.168.236.1    Sun Jun 30 19:05 - down   (10:34)
oracle   pts/1        192.168.236.1    Sun Jun 30 16:52 - 19:46  (02:53)
oracle   pts/0        :0.0             Sun Jun 30 16:48 - 05:40  (12:52)
oracle   tty1         :0               Sat Jun 29 22:02 - 05:40 (1+07:38)

四、测评项c

等保2.0测评:CentOS入侵防范和安全审计

这里有两个要求,一个是对记录进行保护,另外一个是备份。


4.1. 对记录进行保护

这个很简单,一个方面直接查看audit和syslog的日志文件的权限即可:

默认情况下都没有问题,other都不会具有写的权限。同时,存有日志的目录,other也没有写权限(即是否有权限删除该目录下的文件)。

[root@centos01 ~]# ls -ld /var/log/audit
drwxr-x---. 2 root root 4096 312 00:54 /var/log/audit

[root@centos01 ~]# ls -l /var/log/audit;
总用量 2588
-rw-------. 1 root root 2643067 726 15:50 audit.log


[root@centos01 ~]# ls -ld /var/log/
drwxr-xr-x. 14 root root 4096 726 15:42 /var/log/

[root@centos01 ~]# ls -l /var/log;
总用量 3776
-rw-------. 1 root root   6550 312 00:53 anaconda.ifcfg.log
-rw-------. 1 root root  25077 312 00:53 anaconda.log
-rw-------. 1 root root  40223 312 00:53 anaconda.program.log
-rw-------. 1 root root 171892 312 00:53 anaconda.storage.log
-rw-------. 1 root root 132167 312 00:53 anaconda.syslog
-rw-------. 1 root root  35064 312 00:53 anaconda.xlog
-rw-------. 1 root root 115594 312 00:53 anaconda.yum.log
drwxr-x---. 2 root root   4096 312 00:54 audit
-rw-r--r--  1 root root   3211 726 14:47 boot.log
-rw-------  1 root utmp      0 71 03:38 btmp
-rw-------. 1 root utmp   1920 629 19:47 btmp-20190701
drwxr-xr-x. 2 root root   4096 312 00:58 ConsoleKit
-rw-------  1 root root   1021 726 15:50 cron
-rw-------. 1 root root   5298 628 15:19 cron-20190628
-rw-------. 1 root root  17806 630 15:06 cron-20190630
-rw-------  1 root root  22711 79 16:17 cron-20190709
-rw-------  1 root root   3407 726 15:42 cron-20190726
drwxr-xr-x. 2 lp   sys    4096 817 2013 cups
-rw-r--r--  1 root root  81565 726 14:47 dmesg
-rw-r--r--  1 root root  81600 79 15:44 dmesg.old
-rw-r--r--. 1 root root 393885 312 20:46 dracut.log
drwxrwx--T. 2 root gdm    4096 726 14:47 gdm
drwx------. 2 root root   4096 814 2013 httpd
-rw-r--r--. 1 root root 147168 73 13:36 lastlog
drwxr-xr-x. 2 root root   4096 331 15:20 mail
-rw-------  1 root root      0 726 15:42 maillog
-rw-------. 1 root root   2912 628 14:30 maillog-20190628
-rw-------. 1 root root   7866 629 21:51 maillog-20190630
-rw-------  1 root root   1596 79 15:44 maillog-20190709
-rw-------  1 root root    353 726 14:49 maillog-20190726
-rw-------  1 root root    923 726 15:55 messages
-rw-------. 1 root root 172261 628 15:06 messages-20190628
-rw-------. 1 root root 718061 630 15:02 messages-20190630
-rw-------  1 root root 405081 79 16:16 messages-20190709
-rw-------  1 root root 153160 726 15:41 messages-20190726
drwxr-xr-x. 2 ntp  ntp    4096 1124 2013 ntpstats
-rw-r--r--. 1 root root     89 726 14:47 pm-powersave.log
drwx------. 2 root root   4096 823 2010 ppp
drwxr-xr-x. 2 root root   4096 312 18:38 prelink
drwxr-xr-x. 2 root root   4096 726 14:47 sa
drwx------. 3 root root   4096 312 00:44 samba
-rw-------  1 root root      0 726 15:42 secure
-rw-------. 1 root root   2700 628 14:33 secure-20190628
-rw-------. 1 root root  20714 629 22:02 secure-20190630
-rw-------  1 root root   7327 79 15:44 secure-20190709
-rw-------  1 root root   3364 726 14:51 secure-20190726
-rw-------. 1 root root      0 312 00:54 spice-vdagent.log
-rw-------  1 root root      0 726 15:42 spooler
-rw-------. 1 root root      0 619 19:13 spooler-20190628
-rw-------. 1 root root      0 628 15:19 spooler-20190630
-rw-------  1 root root      0 630 15:06 spooler-20190709
-rw-------  1 root root      0 79 16:17 spooler-20190726
drwxr-x---. 2 root root   4096 1123 2013 sssd
-rw-------. 1 root root  32256 73 13:36 tallylog
-rw-r--r--. 1 root root      0 312 00:55 wpa_supplicant.log
-rw-rw-r--. 1 root utmp 451200 726 15:53 wtmp
-rw-r--r--  1 root root  53692 726 15:53 Xorg.0.log
-rw-r--r--  1 root root  54094 710 09:14 Xorg.0.log.old
-rw-r--r--. 1 root root  60193 628 16:02 Xorg.1.log
-rw-r--r--. 1 root root  51164 45 03:16 Xorg.1.log.old
-rw-r--r--. 1 root root  57801 628 16:09 Xorg.2.log
-rw-r--r--. 1 root root  38398 45 03:10 Xorg.2.log.old
-rw-r--r--. 1 root root  59160 628 21:34 Xorg.3.log
-rw-r--r--. 1 root root  40233 328 19:00 Xorg.3.log.old
-rw-r--r--. 1 root root  66966 628 21:34 Xorg.4.log
-rw-r--r--. 1 root root  40754 628 21:34 Xorg.5.log
-rw-r--r--. 1 root root  33584 312 00:56 Xorg.9.log
-rw-------. 1 root root   2887 628 16:00 yum.log

4.2. 定期备份

定期备份一般是指将日志推送至日志服务器等设备进行备份,所以如果对方说有该类设备,就去查看相关配置以及是否存在实际的备份的日志文件即可。   
如果对方说是手动定期备份的话,这个嘛,就要看你自己怎么判断了。

五、测评项d

等保2.0测评:CentOS入侵防范和安全审计

一方面验证即可,另一方面可以查看shell脚本里是如何设置对权限进行判断的:

[root@centos01 ~]#cat /etc/rc.d/init.d/auditd
#!/bin/bash
#
#auditd This starts and stops auditd
#
#chkconfig: 2345 11 88
#description: This starts the Linux Auditing System Daemon,
# which collects security related events in a dedicated
# audit log. If this daemon is turned off, audit events
# will be sent to syslog.
#
#processname: /sbin/auditd
#config: /etc/sysconfig/auditd
#config: /etc/audit/auditd.conf
#pidfile: /var/run/auditd.pid
#
#Return values according to LSB for all commands but status:
#0 - success
#1 - generic or unspecified error
#2 - invalid or excess argument(s)
#3 - unimplemented feature (e.g. "reload")
#4 - insufficient privilege
#5 - program is not installed
#6 - program is not configured
#7 - program is not running
#


PATH=/sbin:/bin:/usr/bin:/usr/sbin
prog="auditd"

#Source function library.
. /etc/init.d/functions

#Allow anyone to run status
if [ "$1" = "status" ] ; then
  status $prog
  RETVAL=$?
  exit $RETVAL
fi

#Check that we are root ... so non-root users stop here
test $EUID = 0 || exit 4

#Check config
test -f /etc/sysconfig/auditd && . /etc/sysconfig/auditd

RETVAL=0

start(){
  test -x /sbin/auditd || exit 5
  test -f /etc/audit/auditd.conf || exit 6

  echo -n $"Starting $prog: "

#Localization for auditd is controlled in /etc/synconfig/auditd
  if [ -z "$AUDITD_LANG" -o "$AUDITD_LANG" = "none" -o "$AUDITD_LANG" = "NONE" ]; then
    unset LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE
  else
    LANG="$AUDITD_LANG"
    LC_TIME="$AUDITD_LANG"
    LC_ALL="$AUDITD_LANG"
    LC_MESSAGES="$AUDITD_LANG"
    LC_NUMERIC="$AUDITD_LANG"
    LC_MONETARY="$AUDITD_LANG"
    LC_COLLATE="$AUDITD_LANG"
    export LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE
  fi
  unset HOME MAIL USER USERNAME
  daemon $prog "$EXTRAOPTIONS"
  RETVAL=$?
  echo
  if test $RETVAL = 0 ; then
    touch /var/lock/subsys/auditd
    #Load the default rules
    test -f /etc/audit/audit.rules && /sbin/auditctl -R /etc/audit/audit.rules >/dev/null
  fi
  return $RETVAL
}

stop(){
  echo -n $"Stopping $prog: "
  killproc $prog
  RETVAL=$?
  echo
  rm -f /var/lock/subsys/auditd
  #Remove watches so shutdown works cleanly
  if test x"$AUDITD_CLEAN_STOP" != "x" ; then
    if test "`echo $AUDITD_CLEAN_STOP | tr 'NO' 'no'`" != "no"
    then
      /sbin/auditctl -D >/dev/null
    fi
  fi
  if test x"$AUDITD_STOP_DISABLE" != "x" ; then
    if test "`echo $AUDITD_STOP_DISABLE | tr 'NO' 'no'`" != "no"
    then
      /sbin/auditctl -e 0 >/dev/null
    fi
  fi
  return $RETVAL
}

reload(){
  test -f /etc/audit/auditd.conf || exit 6
  echo -n $"Reloading configuration: "  
  killproc $prog -HUP
  RETVAL=$?
  echo
  return $RETVAL
}

rotate(){
  echo -n $"Rotating logs: "  
  killproc $prog -USR1
  RETVAL=$?
  echo
  return $RETVAL
}

resume(){
  echo -n $"Resuming logging: "  
  killproc $prog -USR2
  RETVAL=$?
  echo
  return $RETVAL
}

restart(){
  test -f /etc/audit/auditd.conf || exit 6
  stop
  start
}

condrestart(){
  [ -e /var/lock/subsys/auditd ] && restart
  return 0
}


#See how we were called.
case "$1" in
    start)
  start
  ;;
    stop)
  stop
  ;;
    restart)
  restart
  ;;
    reload|force-reload)
  reload
  ;;
    rotate)
  rotate
  ;;
    resume)
  resume
  ;;
    condrestart|try-restart)
  condrestart
  ;;
    *)
  echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|rotate|resume}"
  RETVAL=3
esac

exit $RETVAL
注意开头的这一段:
#Check that we are root ... so non-root users stop here
test $EUID = 0 || exit 4
也就是说euid只要不是0(不具备root权限),那么就没办法继续执行代码,也自然做不了什么事情了。

等保2.0测评:CentOS入侵防范和安全审计

「天億网络安全」 知识星球 一个网络安全学习的星球!星球主要分享、整理、原创编辑等网络安全相关学习资料,一个真实有料的网络安全学习平台,大家共同学习、共同进步!

知识星球定价:199元/年,(服务时间为一年,自加入日期顺延一年)。

如何加入:扫描下方二维码,扫码付费即可加入。

加入知识星球的同学,请加我微信,拉您进VIP交流群!

等保2.0测评:CentOS入侵防范和安全审计

朋友都在看

▶️等保2.0 知识点汇总

▶️3保1评 | 分保、等保、关保、密评联系与区别

▶️等保2.0丨2021 必须了解的40个问题

▶️等保2.0 三级 拓扑图+设备套餐+详解

▶️等保2.0 二级 拓扑图+设备套餐+详解

▶️等保2.0 测评  二级系统和三级系统多长时间测评一次?

▶️等保2.0系列安全计算环境之数据完整性、保密性测评

▶️等保医疗|全国二级、三乙、三甲医院信息系统安全防护设备汇总

▶️国务院:不符合网络安全要求的政务信息系统未来将不给经费

▶️等级保护、风险评估和安全测评三者的区别

▶️分保、等保、关保、密码应用对比详解

▶️汇总 | 2020年发布的最重要网络安全标准(下载)

▶️2022版 | 全国网络安全常用标准(下载)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月20日18:47:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   等保2.0测评:CentOS入侵防范和安全审计http://cn-sec.com/archives/1361671.html

发表评论

匿名网友 填写信息