《使用安全审计加强Linux主机的安全维护能力.docx》由会员分享,可在线阅读,更多相关《使用安全审计加强Linux主机的安全维护能力.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、M6-4 使用安全审计加强Linux主机的安全维护能力1.1场景描述1.1.1 学习目的学生通过该能力模块的学习,能够独立完成和熟练掌握实现主机安全审计的能力。1.1.2 学习要求理解:审计对主机安全的重要性。掌握:使用psacct程序所提供的命令对主机进行审计。1.1.3 学习重点和难点1.学习重点 ac命令. sa命令2.学习难点 psacct程序1.2 知识准备1.2.1 psacct程序安全配置审计工具是一款用户对各类系统、设备做安全配置检查的自动化工具,能够智能化识别各类安全设置,分析安全状态,并能够给出多种配置审计分析报告,目前已经支持多种操作系统及网络设备。RedHat Linu
2、x系统中的psacct程序可以根据安全需求进行修改。另外,利用系统工具对各类账号的操作权限做限制,能够有效保证用户无法超越其账号权限的操作,确保系统安全。RedHat Linux系统中的psacct程序提供了几个进程活动监视工具:ac、lastcomm、accton和sa。 ac命令显示用户连接时间的统计. lastcomm命令显示系统执行的命令. accton命令用于打开或关闭进程记帐功能. sa命令统计系统进程记帐的情况.1.3 注意事项在使用psacct程序进行审计时,需要查看其是否安装,如果没有安装要手动进行安装。1.4 操作步骤1.4.1启动psacct服务默认情况下,RedHat
3、Linux系统默认安装了psacct程序,只需要系统中启动psacct服务,先用chkconfig命令查看psacct服务状态,如下所示:rootlab2 # chkconfig -list psacctpsacct 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭使用命令chkconfig命令启用默认启动,并使用命令/etc/init.d/psacct start命令来启动psacct服务,如下所示。rootlab2 # chkconfig psacct onrootlab2 # /etc/init.d/psacct start开启进程记帐: 确定 rootlab2 #1
4、.4.2对网络行为进行审计第一步:显示用户连线时间的统计信息可以根据登陆数/退出数在屏幕上打印出用户的连线时间(单位为小时)。总计时间也可以打印出来,如果你执行没有任何参数的ac命令, 屏幕将会显示总计的连线时间。rootlab2 # ac total 102.27显示每一天的连线统计时间:rootlab2 # ac -dJan 12 total 23.86Jan 13 total 1.17Jan 14 total 13.11Jan 15 total 6.79Jan 26 total 46.37Today total 10.97rootlab2 #显示每一个用户的总计连线时间和所有用户总计连线
5、时间:rootlab2 # ac -p user1 9.31 user2 7.62 root 85.36 total 102.29rootlab2 #第二步:查找用户过去执行的命令可以使用lastcomm命令打印出用户过去执行的命令. 你也可以通过用户名, tty名或命令名来搜索以往执行的命令。比如显示user1用户过去执行的命令:rootlab2 # lastcomm user1bash user1 tty1 0.00 secs Wed Jan 27 06:24id user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs
6、Wed Jan 27 06:24id user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24id user1 tty1 0.00 secs Wed Jan 27 06:24unicode_start user1 tty1 0.01 secs Wed Jan 27 06:24setfont user1 tty1 0.04 secs Wed Jan 27 06:24gzip user1 tty1 0.00 secs Wed Jan 27 06:24loadkeys user1 tty1 0.00
7、 secs Wed Jan 27 06:24dumpkeys user1 tty1 0.00 secs Wed Jan 27 06:24kbd_mode user1 tty1 0.00 secs Wed Jan 27 06:24consoletype user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24consoletype user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24id u
8、ser1 tty1 0.00 secs Wed Jan 27 06:24grep user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24grep user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24egrep user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24dircolors u
9、ser1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24hostname user1 tty1 0.00 secs Wed Jan 27 06:24bash user1 tty1 0.00 secs Wed Jan 27 06:24id user1 tty1 0.00 secs Wed Jan 27 06:24每一行信息都在屏幕上打印出来,以第一行输出项为例:ls user1 tty1 0.01 secs Tue Jan 12 16:24分析:ls是进程的命令名user1是执行命令的用户名tty
10、1 终端名0.01 secs - 进程退出时间你可以通过执行下面的命令来搜索进程记帐日志,如下所示:rootlab2 # lastcomm lsls root pts/2 0.01 secs Wed Jan 27 07:27ls root pts/2 0.01 secs Wed Jan 27 07:26ls root pts/2 0.01 secs Wed Jan 27 07:26ls root pts/2 0.01 secs Wed Jan 27 07:18ls root pts/2 0.01 secs Wed Jan 27 06:10ls root pts/0 0.01 secs Wed
11、Jan 27 06:08ls user1 pts/0 0.02 secs Wed Jan 27 06:05ls user1 pts/0 0.01 secs Wed Jan 27 06:04ls root pts/2 0.01 secs Wed Jan 27 05:52ls root pts/2 0.02 secs Wed Jan 27 05:34ls root pts/0 0.01 secs Wed Jan 27 05:32ls root pts/0 0.02 secs Wed Jan 27 05:32ls root pts/0 0.02 secs Wed Jan 27 05:32ls roo
12、t pts/0 0.04 secs Wed Jan 27 05:28第三步:统计记帐信息可以使用sa命令打印过去执行命令的统计信息。另外,sa命令保存了一个叫做savacct文件,文件包含了命令被调用的次数和资源使用的次数。而且sa还提供每一个用户的统计信息, 这些信息保存在一个叫做usracct的文件当中。rootlab2 # sa 5581 4065.23re 8.81cp 1386k 85 1894.22re 7.63cp 2872k *other* 3 4.67re 0.23cp 2435k prelink 3 65.75re 0.13cp 11812k gnome-terminal
13、16 0.37re 0.09cp 1210k sort 4 0.32re 0.08cp 1911k rpmq 29 453.61re 0.08cp 1597k bash 2 44.73re 0.05cp 10242k python2 17 11.27re 0.05cp 2608k vim 8 0.17re 0.05cp 1426k uniq 64 0.09re 0.04cp 1459k sed 3 168.03re 0.04cp 1894k sshd 2774 0.25re 0.02cp 1406k ld-linux.so.2 9 201.32re 0.02cp 732k login 149
14、0.20re 0.02cp 1235k grep 23 0.02re 0.01cp 669k pidof 2 0.02re 0.01cp 1006k xkbcomp 17 0.02re 0.01cp 1390k setfont 2 0.33re 0.01cp 500k readahead 4 2.97re 0.01cp 920k telnetd 2 0.25re 0.01cp 1570k rc 17 105.96re 0.01cp 1567k su 44 14.52re 0.01cp 1217k vsftpd* 3 0.13re 0.01cp 1458k ifup-post 9 6.33re
15、0.01cp 2337k sendmail* 2 67.03re 0.01cp 7884k eggcups 4 45.49re 0.01cp 3494k consolehelper-g以结果输出的第一行为例:5288 2.55re 1.15cp 1400k ld-linux.so.2分析:2.55re 实际时间 单位为分钟.1.15cp系统和用户时间总数(CPU时间, 单位为分钟)1400k核心使用所占的平均CPU时间, 一个单元的大小为1Kld-linux.so.2命令名第四步:查看占用CPU可以使用sa m命令,如下所示:rootlab2 # sa -m5584 4065.23re 8.8
16、1cp 1386kroot 5021 3827.02re 8.73cp 1408kuser1 388 8.79re 0.03cp 1044kgdm 1 0.19re 0.03cp 15098kuser2 122 2.90re 0.01cp 1087knobody 27 8.00re 0.01cp 1197ksmmsp 5 12.61re 0.00cp 1808ksshd 3 0.07re 0.00cp 1549kuser11 11 5.95re 0.00cp 1218khtt 6 199.70re 0.00cp 9635k可以通过查看re、k、cp/cpu(见上面输出解释)时间来找出可疑的活动
17、,或某个用户/命令占用了所有的CPU时间。 如果CPU/Memeory使用数(命令)在不断增加,可以说明命令存在问题。1. 5 拓展知识1.5.1 TCPDUMP详解tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系
18、统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。 一、概述顾名思义,tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。引用# tcpdump vvtcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes11:53:21.444591 IP (tos 0x10, ttl 64, id 19324, offset 0, flags DF,
19、 proto 6, length: 92) asptest.localdomain.ssh 192.168.228.244.1858: P 3962132600:3962132652(52) ack 2726525936 win 1266asptest.localdomain.1077 192.168.228.153.domain: bad udp cksum 166e! 325+ PTR? 244.228.168.192.in-addr.arpa. (46)11:53:21.446929 IP (tos 0x0, ttl 64, id 42911, offset 0, flags DF, p
20、roto 17, length: 151) 192.168.228.153.domain asptest.localdomain.1077: 325 NXDomain q: PTR? 244.228.168.192.in-addr.arpa. 0/1/0 ns: 168.192.in-addr.arpa. (123)11:53:21.447408 IP (tos 0x10, ttl 64, id 19328, offset 0, flags DF, proto 6, length: 172) asptest.localdomain.ssh 192.168.228.244.1858: P 168
21、:300(132) ack 1 win 1266347 packets captured1474 packets received by filter745 packets dropped by kernel不带参数的tcpdump会收集网络中所有的信息包头,数据量巨大,必须过滤。二、选项介绍引用-A 以ASCII格式打印出所有分组,并将链路层的头最小化。-c 在收到指定的数量的分组后,tcpdump就会停止。 -C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_siz
22、e 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。-d 将匹配信息包的代码以人们能够理解的汇编格式给出。-dd 将匹配信息包的代码以c语言程序段的格式给出。-ddd 将匹配信息包的代码以十进制的形式给出。-D 打印出系统中所有可以用tcpdump截包的网络接口。-e 在输出行打印出数据链路层的头部信息。-E 用spiipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。 -f 将外部的Internet地址以数字的形式打印出来。-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。-i 指定监听的网
23、络接口。-l 使标准输出变为缓冲行形式,可以把数据导出到文件。-L 列出网络接口的已知数据链路。-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。-n 不把网络地址转换成名字。-nn 不进行端口名称的转换。-N 不输出主机名中的域名部分。例如,nic.ddn.mil只输出nic。-t 在输出的每一行不打印时间戳。-O 不运行
24、分组分组匹配(packet-matching)代码优化程序。-P 不将网络接口设置成混杂模式。-q 快速输出。只输出较少的协议信息。-r 从指定的文件中读取包(这些包一般通过-w选项产生)。-S 将tcp的序列号以绝对值形式输出,而不是相对值。-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。 -t 不在每一行中输出时间戳。 -tt 在每一行中输出非格式化的时间戳。-ttt 输出本行和前面一行之间的时间差。-tttt 在每一行中输出由date处理的默认格式的
25、时间戳。-u 输出未解码的NFS句柄。-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 -vv 输出详细的报文信息。-w 直接将分组写入文件中,而不是不分析并打印出来。三、tcpdump的表达式介绍表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获。在表达式中一般如下几种类型的关键字: 引用第一种是关于类型的关键字,主要包括 host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 20
26、2.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。第二种是确定传输方向的关键字,主要包括src,dst,dst or src,dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。如果没有指明 方向关键字,则缺省是src or dst关键字。第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (
27、分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater, 还有三种逻辑运算,取非运算是 not ! , 与运算是and,&;或运算是or ,||; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要。四、输出结果介
28、绍下面我们介绍几种典型的tcpdump命令的输出信息 (1) 数据链路层头信息使用命令: #tcpdump -e host ICEICE 是一台装有linux的主机。它的MAC地址是0:90:27:58:AF:1A H219是一台装有Solaris的SUN工作站。它的MAC地址是8:0:20:79:5B:46; 上一条命令的输出结果如下所示:引用21:50:12.847509 eth0 ICE. telne t 0:0(0) ack 22535 win 8760 (DF)21:50:12是显示的时间, 847509是ID号,eth0 表示从网络接口设备发送分组, 8:0:20:79:5b:46
29、是主机H219的MAC地址, 它表明是从源地址H219发来的分组. 0:90:27:58:af:1a是主机ICE的MAC地址, 表示该分组的目的地址是ICE。 ip 是表明该分组是IP分组,60 是分组的长度, h219.33357 ICE. telnet 表明该分组是从主机H219的33357端口发往主机ICE的 TELNET(23)端口。 ack 22535 表明对序列号是222535的包进行响应。 win 8760表明发 送窗口的大小是8760。(2) ARP包的tcpdump输出信息使用命令: #tcpdump arp得到的输出结果是:引用22:32:42.802509 eth0 ar
30、p who-has route tell ICE (0:90:27:58:af:1a)22:32:42.802902 eth0 表明从主机发出该分组,arp表明是ARP请求包, who-has route tell ICE表明是主机ICE请求主机route的MAC地址。 0:90:27:58:af:1a是主机 ICE的MAC地址。(3) TCP包的输出信息用tcpdump捕获的TCP包的一般输出信息是: 引用src dst: flags data-seqno ack window urgent optionssrc dst:表明从源地址到目的地址, flags是TCP报文中的标志信息,S 是S
31、YN标志, F (FIN), P (PUSH) , R (RST) . (没有标记); data-seqno是报文中的数据 的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明 报文中是否有紧急指针。 Options是选项。(4) UDP包的输出信息用tcpdump捕获的UDP包的一般输出信息是: 引用route.port1 ICE.port2: udp lenthUDP十分简单,上面的输出行表明从主机route的port1端口发出的一个UDP报文 到主机ICE的port2端口,类型是UDP, 包的长度是lenth。五、举例(1) 想要截获所有210.2
32、7.48.1 的主机收到的和发出的所有的分组: #tcpdump host 210.27.48.1(2) 想要截获主机210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(注意:括号前的反斜杠是必须的): #tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2(4) 如果想要获取主机19
33、2.168.228.246接收或发出的ssh包,并且不转换主机名使用如下命令: #tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp(5) 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示:# tcpdump -e src host 192.168.228.246 and port 22 and tcp -n nn(6) 过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头:tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24(7) 过滤源主机物理地址为XXX的报头:tcpdump ether src 00:50:04:BA:9B and dst(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。(8) 过滤源主机192.168.0.1和目的端口不是telnet的报头,并导入到tes.t.txt文件中:Tcpdump src host 192.168.0.1 and dst port not telnet -l test.txt1. 6 课后实训和练习请参照教材的课后习题