最近由于某行动,自己在现场对系统进行了相关的安全检查及加固。现将本人的一点经验分享如下。
不治已病治未病,预防大于治疗
任何时候,事前的预防远比事后的补救来得更为有效。因此,对于我们来说,时刻要把“预防为主”放在首位。我们平时在应用开发及上线部署过程中,可能需要注意的点有如下几个方面:
(1)将安全因素考虑到软件开发全生命周期中。要有安全意识。
(2)开发中,依照安全规范编程。可参考《XXXXXXX》和《XXXXXXX》。
(3)产品发布或上线前,进行相应的安全漏洞扫描。对发现的漏洞,及时更改,防止应用带病上线给不法分子带来可乘之机。
(4)对于主机安全,也要做好主机的安全基线配置。可参考《XXXXXXXX》。
有效监控,应急响应
以下内容是通过本人的一些实践以及参考互联网上某些帖子或文章进行整理的。
1、查看可疑用户
登录系统,查看目前是否有可疑用户登录或已经登录过服务器的可疑用户。查看方式举例如下:
方法一:执行“w”命令
[root@TEST root]$ w
08:37:22 up 530 days, 22:33, 2 users, load average: 0.06, 0.11, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
nobody pts/6 172.18.124.66 23:36 0.00s 0.06s 0.02s sshd: nobody [priv]
test pts/7 172.16.124.45 23:37 8:57m 3.19s 0.01s sshd: test [priv]
方法二:执行“last”命令
[root@TEST root]$ last -n 20
test pts/7 172.16.22.28 Mon Jun 24 23:37 still logged in
test pts/6 172.16.22.28 Mon Jun 24 23:36 still logged in
test pts/5 172.16.22.28 Mon Jun 24 18:35 - 23:45 (05:09)
test pts/2 172.16.22.28 Mon Jun 24 18:32 - 23:45 (05:12)
test pts/7 172.16.22.28 Mon Jun 24 15:04 - 15:50 (00:45)
test pts/6 172.16.22.28 Mon Jun 24 10:24 - 18:31 (08:06)
test pts/5 172.16.22.28 Mon Jun 24 10:24 - 18:31 (08:06)
通过上述两种方式,我们需要排查是否有可疑用户,可疑源IP。如发现可疑用户或可疑来源IP,我们需要对其进行锁定。假如发现可疑用户为test,锁定方式如下:
passwd -l test
锁定之后,有可能用户还处于登录状态,此时需要及时将此用户剔出终端使其下线。命令如下:
pkill -9 -t 终端号 此终端号就是上述w命令或last命令显示出的第二列,如pts/6
另附上其他查看可疑用户的方法:
1-1:查看是否有异常的系统用户
cat /etc/passwd
1-2:查看是否产生了新用户,UID和GID为0的用户
grep "0" /etc/passwd
1-3:查看passwd
的修改时间,判断是否在不知的情况下添加用户
ls -l /etc/passwd
1-4:查看是否存在特权用户
awk -F: '$3==0 {print $1}' /etc/passwd
1-5:查看是否存在空口令账号
awk -F: 'length($2)==0 {print $1}' /etc/shadow
2、查看系统日志
可查看的系统日志有:/var/log/messages,/var/log/secure,各用户下的.bash_history文件,特别是root用户下的.bash_history文件,这个文件中记录着用户执行的所有命令。常见日志详情如下:
/var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息
/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息
/var/log/messages :记录Linux操作系统常见的系统和服务错误信息
/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况
/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址
/var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看
/var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看
/var/run/utmp:该日志文件记录有关当前登录的每个用户信息。如 who、w、users、finger等就需要访问这个文件
详见https://blog.csdn.net/dubendi/article/details/78782691
栗子1:查看是否有用户尝试进行暴力破解服务器,可通过在/var/log/secure文件中进行查看
最近登录失败的次数统计概览
cat /var/log/secure | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort | uniq -c
[test@TEST ~]# cat /var/log/secure | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort | uniq -c
5 Jun 23
12 Jun 24
具体登录失败详情
cat /var/log/secure|grep Failed
[root@TEST ~]# cat /var/log/secure|grep Failed
Jun 23 10:21:00 TEST sshd[26029]: Failed password for test from 172.16.120.21 port 56835 ssh2
Jun 23 11:07:36 TEST sshd[27755]: Failed password for test from 172.22.193.22 port 1036 ssh2
Jun 23 21:33:33 TEST sshd[17490]: Failed password for test from 172.22.193.196 port 1056 ssh2
Jun 23 22:58:17 TEST sshd[20290]: Failed password for test from 172.22.193.4 port 35437 ssh2
栗子2:查看用户对服务器操作的历史记录
执行history命令,或查看用户根目录下的.bash_history文件
history
3、查看可疑进程
检查可疑进程的命令很多,例如ps,top等。找到对应可疑进程的pid后,我们可以查看对应PID目录下exe文件的信息,命令如下:
ls -al /proc/2001/exe
其中2001就是pid的值
我们可以杀掉进程,并删除进程所在的文件路径。
当然,有些时候攻击者将攻击程序隐藏得很深,例如rootkits后门程序,在这种情况下ps、top、netstat等命令也有可能被替换,如果再通过系统自身的命令取检查可疑进程就变得不可信,此时可借助于第三方的检查工具来检查系统可疑程序。如chkrootkit、RKHunter、webshellkiller等工具,通过这些工具可以很方便的发现系统被替换或篡改的程序。下面简单介绍下chkrootkit的使用方法。
3-1、下载
http://www.chkrootkit.org/download/
3-2、上传服务器后解压
tar -xzvf chkrootkit.tar.gz
3-3、进入解压后的目录,编译执行
make
3-4、利用root用户执行检查(进入安装目录)
./chkrootkit | grep INFECTED 如果有信息显示,则有问题;否则安全。
4、查看可疑定时任务
攻击者有可能未在当前时间执行攻击,有可能设置了定时任务,在一定时间执行攻击任务。此时需要我们检查下是否存在可疑定时任务。如下三个命令可综合一起查看:
crontab -l
cat /etc/crontab
ls /etc/cron.*
如果定时任务为可疑程序,则删除定时任务并将可疑脚本删除。
5、检查系统启动项
很多攻击者攻击的恶意程序会修改系统启动项,这样即使我们对系统进行重启时,恶意程序也能自动启动。所以为了避免此类问题,我们应该查看系统可疑启动项,及时删除处理。
chkconfig --list
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
6、检查异常文件
检查异常文件,我们的重点可以放在如下几个地方:
1、很多应用系统有上传文件的功能,对于异常文件,我们可以重点关注上传文件的目的地,即上传路径。查看可疑文件,不在上传白名单目录下的文件。
2、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹。
一些基本查看异常文件命令如下所示:
find / -uid 0 –perm -4000 –print
find / -name "…" –print
find / -name ".." –print
find / -name "." –print
find / -name " " –print
我们可以根据需要进行查看。
以上便是本人的一点总结,有误之处,还请不吝指出。
网友评论