Linux 应急流程及实战
当企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
入侵排查思路
一、账号安全
基本使用
1、用户信息文件 etc/passwd
root:x\0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后 shell
注意:无密码只允许本机登陆,远程不允许登陆。
2、影子文件 /etc/shadow
root:$6$oGs1PqhL2p3Ze trE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvc jQSt.Ft7ql1WpkopY0UV9a jBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
3、几个常用命令
who
查看当前登录用户。 (tty 本地登陆,pts 远程登录)
w
查看系统信息,想知道某一时刻用户的行为。
uptime
查看登陆多久,多少用户,负载。
入侵排查
1、查询特权用户 (uid 为 0)
[root@localhost~]# awk -F: '$3==0{print $1}' /etc/passwd
2、查询可以远程登录的账号信息
[root@localhost~]# awk '/$1|$6/{print $1}' /etc/shadow
3、除 root 账号外,其他账号是否存在 sudo 权限。如非管理需要,替通账号应删除 sudo 权限
[root@localhost~]# more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
4、禁用或删除多余及可疑的账号
usermod -L user
禁用账号,账号无法登录,/etc/shadow
第二栏为 !
开头。
userdel user
删除 user 用户。
userdel -r user
将删除 user 用户,并且将 /home
目录下的 user 目录一并删除。
二、历史命令
基本使用
通过 .bash_history
查看账号执行过的系统命令。
1、root 的历史命令
history
2、打开 /home
各账号目录下的 .bash_history
,查看普通账号的历史命令。
为历史的命令增加登录的 IP 地址,执行命令时间等信息。
(1) 保存 1 万条命令:sed -i 's/^HISTSIZE=10000/g' /etc/profile
(2) 在 /etc/profile
的文件尾部添加如下行数配置信息:
(3) source /etc/profile
让配置生效。
生效效果:
3、历史操作命令的清除:histroy -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile
文件中的记录。
入侵排查
进入用户目录下,执行:cat .bash_history >> history.txt
三、端口
使用 netstat 网络连接命令,分析可疑端口、IP、PID:
netstat -antlp|more
查看下 PID 所对应的进程文件路径,运行 ls -l /proc/$PID/exe
或 file /proc/$PID/exe
($PID 为对应的 pid 号)
四、进程
使用 ps 命令,分析进程:ps aux | grep pid
五、开机启动项
基本使用:
系统运行级别示意图:0 shutdown 6 reboot
查看运行级别命令:runlevel
系统默认允许级别:vi /etc/inittab
id=3: initdefault
系统开机后直接进入哪个运行级别。
开机启动配置文件:
/etc/rc.local
/etc/rc.d/rc[0~6].d
例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在 /etc/init.d
目录下,然后在 /etc/rc.d/rc*.d
中建立软链接即可:
[root@localhost~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此处 sshd
是具体服务的脚本文件,S100ssh
是其软链接,S 开头代表加载时自启动;如果是 K 开头的脚本文件,代表运行级别加载时需要关闭的。
入侵排查
启动项文件:
more /etc/rc.local
/etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d
六、定时任务
基本使用
1、利用 crontab 创建计划任务
crontab -l
列出某个用户 cron 服务的详细内容。
Tips:默认编写的 crontab 文件会保存在 (/var/spool/cron/用户名
例如:/var/spool/cron/root
)
crontab -r
删除每个用户 cront 任务 (谨慎:删除所有的计划任务)
crontab -e
使用编辑器编辑当前的 crontab 文件。
如:* /1 * * * * echo "hello world" >> /tmp/test.txt
每分钟写入文件。
2、利用 anacron 实现异步定时任务调度
每天运行 /home/backup.sh
脚本:
vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/backup.sh
当机器在 backup.sh 期望被运行时是关机的,anacron 会在机器开机十分钟之后运行它,而不用再等待 7 天。
入侵排查
重点关注以下目录中是否存在恶意脚本
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthy/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
小技巧:
more /etc/cron.daily/*
查看目录下所有文件
七、服务
服务自启动
第一种修改方法
chkconfig [--level 运行级别][独立服务名][on|off]
chkconfig --leve 2345 httpd on 开启自启动
chkconfig httpd on (默认 level 是 2345)
第二种修改方法
修改 /etc/re.d/rc.local 文件
加入 /etc/init.d/httpd start
第三种修改方法
使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。
入侵排查
1、查询已安装的服务
RPM 包安装的服务:
chkconfig --list
查看服务自启动状态,可以看到所有的 RPM 包安装的服务。
ps aux | grep crond
查看当前服务。
系统在 3 与 5 级别下的启动项:
中文环境
chkconfig --list | grep "3:启用|5:启用"
英文环境
chkconfig --list | grep "3:on|5:on"
源码包安装的服务:
查看服务安装位置,一般是在 /user/local/
service httpd start
搜索 /etc/rc.d/init.d/
查看是否存在
八、系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志分析技巧
1、定位有多少 IP 在爆破主机的 root 账号
grep "Failed password for root" /var/log/secure|awk '{print $11}'|sort|uniq -c|sort -nr|more
定位有哪些 IP 在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){/for(.*?)from/;print "$1\n";}'|uniq -c|sort -nr
2、登录成功的 IP 有哪些
grep "Accepted" /var/log/secure|awk '{print $11}'|sort|uniq -c|sort -nr|more
登录成功的日期、用户名、IP:
grep "Accepted" /var/log/secure|awk '{print $1,$2,$3,$9,$11}'
3、增加一个用户 Kali 日志
Jul 10 00:12:15 localhost useradd[2382]: new group:name=kali,GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user:name=kali,UID=1001,GID=1001,home=/home/kali,shell=/bin/bash
Jul 10 00:12:58 localhost passwd:pam_unix(passwd:chauthtok):password changed for kali
#grep "useradd" /var/log/secure
4、删除用户 Kali 日志
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group'kali' owned by 'kali'
#grep "userdel" /var/log/secure
5、su 切换用户
Jul 10 00:38:13 localhost su:pam_unix(su-l:session):session opened for user good by root(uid=0)
sudo 授权执行:
sudo -l Jul 10 00:43:09 localhost sudo:good:TTY=pts/4;PWD=/home/good;USER=root;COMMAND=/sbin/shutdown -r now
工具篇
一、Rootkit 查杀
chkrootkit
使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cdchkrootkit-0.52
makesense
#编 译 完 成 没 有 报 错 的 话 执 行 检 查
./chkrootkit
rkhunter
http://rkhunter.sourceforge.net
使用方法:
wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvf rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c
二、病毒查杀
Clamav
ClamAV 的官方下载地址为:http://www.clamav.net/download.html
安装方式一:
1.安装 zlib
wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
tar -zxvfzlib-1.2.7.tar.gz
cd zlib-1.2.7
#安 装 一 下 gcc 编 译 环 境 : yum install gcc
CFLAGS="-O3-fPIC"./configure --prefix=/usr/local/zlib/
make&&make install
2.添加用户组 clamav 和组成员 clamav
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
3.安装 Clamav
tar –zxvf clamav-0.97.6.tar.gz
cd clamav-0.97.6
./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
make
make install
4.配置 Clamav
mkdir /opt/clamav/logs
mkdir /opt/clamav/updata
touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log
cd /opt/clamav/logs
chown clamav:clamav clamd.log
chown clamav:clamav freshclam.log
5.ClamAV 使用:
/opt/clamav/bin/freshclam
升级病毒库。
./clamscan -h
查看相应的帮助信息。
./clamscan -r /home
扫描所有用户主目录就使用。
./clamscan -r --bell -i /bin
扫描 bin 目录并且显示有问题的文件的扫描结果。
安装方式二:
#安装
yum install -y clamav
#更新病毒库
freshclam
#扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
#扫描并杀毒
clamscan -r --remove /usr/bin/bsd-port
clamscan -r --remove /usr/bin/
clamscan -r --remove /usr/local/zabbix/sbin
#查看日志发现
cat /root/usrclamav.log |grep FOUND
三、webshell 查杀
Linux版:
河马 webshell 查杀:http://www.shellpub.com
深信服 webshell 网站后门检测工具: http://edr.sangfor.com.cn/backdoor_detection.html
四、RPM check 检查
系统完整性可以通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了:
./rpm -vA > rpm.log
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是 8 位长字符串,每个字符都用以表示文件与 RPM 数据库中一种属性的比较结果,如果是 .
(点) 则表示测试通过。
验证内容中的 8 个信息的具体内容如下:
S
文件大小是否改变。M
文件的类型或文件的权限(rwx) 是否被改变。5
文件 MD5 校验是否改变 (可以看成文件内容是否改变)D
设备中,从代码是否改变。L
文件路径是否改变。U
文件的属主(所有者)是否改变。G
文件的属组是否改变。T
文件的修改时间是否改变。
如果命令被替换了,如果还原回来:
文件提取还原案例:
rpm -qf /bin/ls
查询 ls
命令属于哪个软件包。
mv /bin/ls /tmp
先把 ls
转移到 tmp 目录下,造成 ls
命令丢失的假象。
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
提取rpm包中ls
命令到当前目录的/bin/ls
下。
cp /root/bin/ls /bin
把 ls
命令复制到 /bin/
目录,修复文件丢失。