应急响应 | Emergency Response for Linux 0x00 前言
当企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时linux开机启动脚本,急需第一时间进行处理,使企业的网络信息系统在最短的时间内恢复正常工作,进一步查找入侵来源中国linux,还原过程,同时给出解决方案和防范措施,为企业挽回或减少经济损失。
常见的应急响应事件分类:
web 入侵:网页挂马、主页篡改、webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDOS 攻击、DNS 劫持、ARP 欺骗
0x01 思路账号安全历史命令异常端口异常进程开机启动项定时任务服务异常文件系统日志 0x02 姿势⚙️ 0x02-1 账号安全
基本使用:
// 1
$ cat /etc/passwd
// 用户信息文件
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
nick:x:1002:1002::/home/nick:/bin/bash
用户名:密码:用户ID:组ID:用户说明:家目录:登录之后的shell
无密码账户只允许本地登录,远程不允许登录
// 2
$ cat /etc/shadow
// 影子文件
nick:$6$4mIUt9di$NNvAt6PPzz97sod8jtSr3geO/sQFxTdAX.0JyV02F2VLHZEkBqV88ftezzHvyF3u8TaoczhuujgX1vBcnibJ50:18173:0:99999:7:::
用户名:密码Hash:密码最后一次修改日期:两次密码修改的时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
// 查看当前登录用户(tty 本地登录/pts 远程登录)
$ who
// 查看系统信息,某一时刻用户的行为
$ w
// 查看登录时间、多少用户、负载
$ uptime
排查:
1.查询特权用户,其中特权用户的uid为0
$ awk -F: '$3==0{print $1}' /etc/passwd
2.查询可以远程登录的账号信息
$ awk '/$1|$6/{print $1}' /etc/shadow
3.查询除root账户外,其他账号是否存在sudo权限,如非管理需要,普通账号应该删除sudo权限
$ more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
4.禁用或删除多余及可疑的账号
// 禁用账号,账号无法登录,/etc/shadow第二栏为!开头
// -U 为解锁
$ usermod -L user
// 删除user账户
$ userdel user
// 删除user用户,并且将/home目录下的user目录一同删除
$ userdel -r uesr
⚙️ 0x02-2 历史命令
基本使用:
查看 .bash_history 可能会有惊喜,查看账号执行过的系统命令
1. root的历史命令
$ history
2. 打开/home目录查看各账户目录下的.bash_history,查看普通账号的历史命令
为历史的命令增加登录的IP地址、执行命令时间等信息:
1) 保存1万条命令
$ sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
2) 在 /etc/profile 的文件尾部添加如下行数配置信息:
######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########
3) source /etc/profile 使配置生效
效果:
1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
3. 历史操作命令的清除
$ history -c
但是该命令不会清除保存在文件中的记录,所以需要手动删除 .bash_history 中的记录
可以将命令历史记录导出成文件来进行分析
$ cat .bash_history >> /root/history.txt
// 这里要注意 >> 是追加续写,> 是直接覆盖
⚙️ 0x02-3 检查异常端口
// 分析对外连接、可以端口、IP、PID
$ netstat -pantu | more
// 查看 PID 对应的进程文件路径($PID 为对应的 PID 号)
$ ls -l /proc/$PID/exe
或
$ file /proc/$PID/exe
⚙️ 0x02-4 检查异常进程
ps -aux
⚙️ 0x02-5 检查开机启动项
基本使用
0 关机
1 单用户模式,可以理解为Windows的安全模式,主要用于系统修复
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式
4 系统保留
5 图形模式
6 重启动
// 查看运行级别命令
$ runlevel
系统默认允许级别
vim /etc/inittab
id=3:initdefault 系统开机后直接进入哪个运行级别
开机启动配置文件
/etc/rc.local
/etc/rc.d/rc[0~6].d
比如,当我们需要开机启动自己的脚本时,只需要将可执行脚本放在 /etc/init.d 目录下linux开机启动脚本,然后在 /etc/rc.d/rc*.d 中建立软链接即可
$ ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
这里的 sshd 是具体服务的脚本文件,S100ssh 是其软链接suse linux,S 开头代表加载时自启动;如果是 K 开头的脚本文件,代表运行级别加载是需要关闭的。
排查启动项文件:
more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
⚙️ 0x02-6 检查定时任务
基本使用
1. 利用 crontab 创建计划任务
// 列出某个用户 cron 服务的详细内容,默认编写的 crontab 文件会保存在 /var/spool/cron/用户名 比如/var/spool/cron/root
$ crontab -l
// 删除每个用户的 cron 任务(谨慎:这将删除所有计划任务)
$ crontab -r
// 使用编辑器编辑当前的 crontab 文件
$ crontab -e
比如:
*/1 * * * * echo "hello world" >> /tmp/test.txt
每分钟写入文件
2. 利用 anacron 实现异步定时任务调度
例如,每天运行 /home/backup.sh 脚本:
$ vim /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.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
技巧
// 查看目录下所有文件
$ more /etc/cron.daily/*
⚙️ 0x02-7 检查服务
服务自启动
第一种修改方法:
$ chkconfig [--level 运行级别] [独立服务名] [on/off]
// 开机自启动
$ chkconfig -level 2345 httpd on
// 默认 level 是 2345
$ chkconfig httpd on
第二种:
修改 /etc/re.d/rc.local 文件
加入 /etc/init.d/httpd start
第三种:
利用 ntsysv 命令管理自启动,可以独立管理服务和 xinetd 服务
// 安装 ntsysv
$ yum install ntsysv
// 开启 ntsysv
$ ntsysv
然后即可管理服务
入侵排查
1. 查询已安装的服务
// rpm 包安装的服务
// 查看服务自启动状态,可以看到所有的 RPM 包安装的服务
$ chkconfig --list
// 查看当前服务
$ ps -aux | grep crond
// 系统3与5级别下的启动项
// 中文环境
$ chkconfig --list | grep "3:启用|5:启用"
// 英文环境
$ chkconfig --list | grep "3:on|5:on"
2. 源码包安装的服务
查看服务的安装位置,一般是在 /usr/local
$ service httpd start
搜索 /etc/rc.d/init.d/ 查看服务是否存在
⚙️ 0x02-8 检查异常文件
查看敏感目录,如 /tmp 目录下的文件,同时要注意隐藏文件夹,以「.」开始命名的文件夹具有隐藏属性。
如果发现了 webshell/远控木马的创建时间,如何找出同一时间范围内创建的文件?
利用 find 命令
// 找出 /opt 下一天前访问过的文件
$ find /opt -iname "*" -atime 1 -type f
针对可疑文件可以用 stat 进行创建修改时间。
⚙️ 0x02-9 检查系统日志
日志默认存放位置
/var/log/
查看日志配置情况
more /etc/rsyslog.conf
日志文件说明
/var/log/cron
记录了系统定时任务相关的日志
/var/log/cups
记录打印信息的日志
/var/log/dmesg
记录了系统在开机时内核自检的信息,也可以使用 dmesg 命令直接查看内核自检信息
/var/log/mailog
记录邮件信息
/var/log/message
记录系统重要信息的日志。这个日志文件中会记录 linux 系统的绝大多数重要信息
/var/log/btmp
记录错误登录日志,该文件是二进制文件,不能直接用 vim 查看,需要使用 lastb 命令来查看
/var/log/lastlog
记录系统中所有用户最后一次登录时间的日志,该文件是二进制文件,不可直接用 vim 查看,