本文主要对Linux系统发生安全事件后如何进行应急响应进行学习总结、windows系统与Linux不同,但是思路基本也是相似的,记得那片文章看过说Linux系统被入侵基本都是网络应用的问题,所以WEB、FTP、弱口令等有较大可能,希望你看到这句话有帮助
账号安全
可以跟管理员对是否存在管理端口对外开放以及弱口令等情况进行确认,若是存在则极有可能是通过这种途径入侵的。
在Linux 系统中与用户账号相关的文件主要有 /etc/passwd文件以及/etc/shadow文件这两个
/etc/passwd
passwd文件的内容截图,我的虚拟机的,其中每一行代表一个账户有不同的信息由“:”进行分割 其代表的含义是
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
/etc/shadow
shadow文件与passwd文件相同,同样使用“:”分割信息每个字段表示的含义为
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
用户排查
查看可以远程登录的账号
ps:说实话这个命令我是真没看懂,百度了一阵子也没看懂,不知道什么鬼,不过看了好多文章都这么说,先记下,说不定以后就懂了
awk '/\$1|\$6/{print $1}' /etc/shadow
查看用户ID为0的用户,代表有root的权限
awk -F: '$3==0{print $1}' /etc/passwd
除 root 帐号外,其他帐号是否存在 sudo 权限。如非管理需要,普通帐号应删除 sudo 权限
more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
禁用或者删除多余账号
usermod -L user #禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user #删除 user 用户
userdel -r user #将删除user用户,并且将/home目录下的user目录一并删除
历史命令
通过.bash_history查看帐号执行过的系统命令 1、root的历史命令 histroy 2、打开/home各帐号目录下的.bash_history,查看普通帐号的历史命令
使用 HISTTIMEFORMAT 显示时间戳
显示成这种感觉比较舒服一点
# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release
注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。
添加点东西,利于审计
所谓听人劝吃饱饭,个人对于应急响应、审计之类的经验并不多,网上很多大佬都是这么说的,改一改,保存更多的信息和内容(默认记录一千条)
为历史的命令增加登录的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_profile文件中的记录。
除此之外还可以通过将文件搞成txt格式去分析
cat .bash_history >> history.txt
进程端口检查
使用以下命令对监听端口以及监听的链接进行查看
netstat -antlp|more
可以通过通过shell命令循环筛选出针对的恶意IP通信,也相当于可以检测到木马心跳,当然这是配合安全设备做出来的。
while true; do netstat -antp | grep [ip]; done
查看对应进程详情,可以查看进程的详情,以及对应的文件
ls -l /proc/$PID/exe
file /proc/$PID/exe
lsof 可以查看对应进程打开的文件
可以使用ps 命令对疑似恶意程序的进程进行查看
ps aux #显示所有进程,包括没有终端的进程
ps ef #显示所有进程以及完整格式
ps aux --sort -pcpu #静态查看进程,根据cpu使用情况排行,从高到低
ps aux --sort -pmem #静态查看进程,根据内存使用情况排行,从高到低
ps -p PID -o lstart #查看进程的启动时间
kill -9 pid #强制杀死进程
额外小知识 Linux 中的 ps 命令是 Process Status 的缩写。ps 命令用来列出系统中 当前正在运行 的那些进程,就是执行 ps 命令的那个时刻的那些进程的快照。使用该命令可以确定有哪些进程 正在运行 和 运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
ps 查看的结果不是动态连续的,如果想要动态的显示进程信息,就可以使用 top、htop 命令。
kill 命令用于杀死进程。
持久化检查
跟windows 一样,在拿下Linux服务器的权限之后,也需要进行权限的维持
服务排查
列出所有的服务
service --status-all
chkconfig --list
应该是应为系统不同吧
开机启动项
/etc/rc.local
/etc/rc.local是/etc/rc.d/rc.local的软连接,该脚本是在系统初始化级别脚本运行之后再执行的,想要/etc/rc.local起作用必须chmod +x /etc/rc.d/rc.local
/etc/profile.d
/etc/profile.d是一个目录,/etc/profile.d/下有许多shell脚本,可以在开机时启动
/etc/rc.d/rcX.d与/etc/init.d
rcX.d 目录名,后面的X代表着每个运行级别,目录内有每个服务在init.d内启动脚本的链接文件,根据链接文件的名字来判断启动状态K开头表示不启动服务,S打头表示启动服务。这些服务都是软连接,真正的目录是/etc/init.d下的脚本,可用ls –l查看软链接
例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可
计划任务
crontab命令
-u# 指定用户,可省略
-l #列出对应的计划任务
-r #删除目前的时程表
-e #执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
配置文件
/var/spool/cron/ #记录了每个用户的计划任务,已用户名命名
/etc/crontab #系统级配置文件
/etc/cron.d/ #为某个用户配置
/etc/cron.daily/* #存放可执行脚本
/etc/cron.hourly/* #存放可执行脚本
/etc/cron.monthly/* #存放可执行脚本
/etc/cron.weekly/* #存放可执行脚本
/etc/anacrontab #开机之后检查该执行的是否执行了,将没有进行的
crontab任务执行一遍
/var/spool/anacron/*
日志记录位置
/var/log/cron
小技巧
more /etc/cron.daily/* #查看目录下所有文件
病毒查杀
Rootkit查杀
chkrootkit
网址:http://www.chkrootkit.org
使用方法
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
#编译完成没有报错的话执行检查
./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 -zxvf zlib-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 查杀
考出来搞,或者使用webshell 查杀的linux 版本
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/目录 修复文件丢失
文件痕迹
-
查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“…”为名的文件夹具有隐藏属性 -
得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件? -
可以使用find命令来查找,如 find /opt -iname “*” atime 1 -type f 找出 /opt 下一天前访问过的文件 -
针对可疑文件可以使用stat进行创建修改时间。
使用stat 命令
stat +文件名
解释一下,
- access 是最近一次的访问时间,只要被读取时间就会更新
- modify 是最近的文件内容修改时间
- change 最近的文件属性的修改时间:当文件的目录被修改,或者文件的所有者,权限等被修改时
使用ls 命令查看
ls -l 文件名
这里ls -l 显示的时间是stat 显示的mtime,也就是文件的修改时间。
要是没发现什么异常的话,可以通过某些文件的修改时间点,对服务器何时被入侵的进行简单的判断,从而对日志审计之类的工作提供筛选依据。
touch 可以修改文件的时间属性的值,这个就不那么可信了,应急的时候一定要注意细节
touch命令
touch 参数 文件名,上面截图也有一个示例,可以看看
-a:或--time=atime或--time=access或--time=use
-c:或--no-creat,如果棉花地文件不存在,也不创建任何文档
-d:使用指定的日期时间,可以使用不同的格式
-m:或--time=mtime或--time=modify,改变修改时间
-r:把指定的文件日期更设成和参考文档或目录日期相同的时间
-t:使用指定的日期时间,格式与date指令相同
日志审计
/var/log/cron :crontab命令日志
/var/log/lastlog:登录用户日志
/var/log/secure:记录登录成功与否
/var/log/wtmp:记录登录系统成功的账户信息,等同于last
/var/log/utmp:查看当前登录系统的情况,等同于who
/var/log/faillog:记录登录系统不成功的账号信息
history:查看所有历史命令记录
~/.bash_history:黑客可能会使用history -c清除日志,使用cat ~/.bash_history仍可查看相关的记录
/var/log/cups:记录打印信息的日志
/var/log/dmesg:记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog:记录邮件信息
web日志默认也存放在/var/log/目录下
参考
http://c.biancheng.net/view/840.html https://blog.csdn.net/u012062455/article/details/77228994 https://blog.csdn.net/qq_31828515/article/details/62886112 http://sunu11.com/2017/03/01/7/ https://blog.csdn.net/weixin_39190897/article/details/118784289 https://os.51cto.com/art/202012/636816.htm https://github.com/AI0TSec/blog/issues/7 https://yinwc.github.io/2020/01/21/%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94%E7%AC%94%E8%AE%B0%E4%B9%8BLinux%E7%AF%87/ https://cloud.tencent.com/developer/article/1803425 https://cloud.tencent.com/developer/article/1355030
|