17、Linux应急响应
Linux应急响应
1、入侵排查思路
账号安全 -> 历史命令 -> 检查异常端口 -> 检查异常进程 -> 检查开机启动项 -> 检查定时任务 -> 检查服务 -> 检查异常文件。
2、操作步骤
1、账户安全
1、查询特权用户特权用户(uid 为0)
①(以冒号为分隔符,打印文件当中第三个内容(uid)为0的第一列信息)
[root@localhost ~]# awk -F ":" '$3==0{print $1}' /etc/passwd
root
②(打印符合条件的整列)
[root@localhost ~]# awk -F ":" '$3==0{print $0}' /etc/passwd(补充)
root:x:0:0:root:/root:/bin/bash
2、查询可以远程登录的帐号信息(除了root用户外,其余用户没有密码就无法登入)
(当查询的文件当中密码位出现$1或$6时(\$:转义成字符串$;$6$:sha加密,$1$:md5加密),将改行全打印出来)
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$6$gzV7F7XygZZLiLMs$q3xIpzL6.tLwg.PkqiIynm2gtkED2pu7oRLlUvfk516Pt/nVgnmISbMW0HOeHoQbjx1bcpD/xpKaL1xwT6dnx.::0:99999:7:::
xzm:$6$kC0HzY8pch7Wdaxx$8HOwj8.INvh8JF3bfrf/GUcWM8BkdDnJeZuSXXsbtb2vglnTTwW3AUWaZ4Ujih0qjlnzONkzQob/j1x4.zfXv0::0:99999:7:::
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
(是否存在用户有sudo权限;查看文件时过滤注释和空行,且只看该字符串ALL=(ALL))
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
sudo命令:赋予一次root用户命令的权限。(暂时将该命令用root身份运行)
%wheel,是个组,该组成员具有sudo权限。
4、禁用或删除多余及可疑的帐号(一般都是先禁用账户,而不直接删除)
①usermod命令(大写)
-L(Lock):表示锁定用户(临时锁定用户),被锁定用户的密码前出现“!”表示无法登录(与passwd相似)
-U(Unlock):表示解除对用户的锁定
usermod -L/U user:锁定帐号(letc/shadow第二栏为!开头)/解锁账号
userdel -r user:将删除user用户,并且将/home目录下的user目录一并删除(userdel user 删除user用户)
②passwd命令(小写)
-l:暂时锁定用户(被锁定的用户不能使用密码登入--密码前加“!!”),但对root用户无效,照样可以登入。仅root用户可用
-u:解锁用户。仅root用户可用
-S:查询用户密码的密码状态。仅root用户可用
passwd -S user 查看账户密码状态
2、历史命令
Linux当中以点开头的都是隐藏文件。使用命令:ls/ll -a:显示所有信息
1、(黑客一般只删除自己操作的命令记录)
[root@localhost ~]# history //查看历史命令
[root@localhost ~]# history -c //清空所有历史命令(但这只是一个缓存文件)
//在每个用户的家目录下都会存放一个历史命令的隐藏文件。通过.bash_history文件查看当前帐号执行过的真正所有系统命令。
[root@localhost ~]# cd ~ //进入用户的家目录
[root@localhost ~]# ls -a //显示所有的隐藏文件
. .bash_logout .config Documents initial-setup-ks.cfg Public .viminfo
.. .bash_profile .cshrc Downloads .local .tcshrc
anaconda-ks.cfg .bashrc .dbus .esd_auth Music Templates
.bash_history .cache Desktop .ICEauthority Pictures Videos
[root@localhost ~]# less .bash_history //查看历史命令
[root@localhost ~]# echo "" > .bash_history //使用重定向删除所有的历史命令(需要重新启动该shell环境才生效)
环境文件:
/etc/profile:全局环境文件(针对全体)
.bash_profile:个人的环境文件(针对个人;在用户的家目录下的隐藏文件)
2、为历史的命令增加登录的IP地址、执行命令时间等信息:
//1)保存1万条命令(在该文件下将开头是HISTSIZE行的信息匹配上,将匹配上的所有消息替换成HISTSIZE=10000)
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile (安全加固文件)
//2)在/etc/profile的文件尾部添加如下行数配置信息:
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` //筛选该用户是否为当前用户
//3)source /etc/profile让配置生效
命令解读:
[root@localhost ~]# who
root :0 2022-09-28 20:28 (:0) #该行表示本地登入记录(有登入都要该记录)
root pts/0 2022-10-20 14:56 (:0) #pts/0:表示打开第一个会话窗口
[root@localhost ~]# who -u (显示进程号)
root :0 2022-09-28 20:28 ? 1873 (:0)
root pts/0 2022-10-20 14:56 . 57402 (:0)
[root@localhost ~]# who -u am i //锁定当前用户的登入信息/只回显了当前用户的消息
root pts/0 2022-10-20 14:56 . 57402 (:0)
[root@localhost ~]# who -u am i 2>/dev/null //'>'标准错误;出现错误时直接放到/dev/null文件下,不回显
root pts/0 2022-10-20 14:56 . 57402 (:0)
[root@localhost ~]# who -u am i 2>/dev/null | awk '{print $NF}'
(:0) //只回显了最后一条信息
[root@localhost ~]# who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'
:0 //这里的-e多点编辑和-i效果相同;[()]表示锁定中括号当中的小括号内的内容;s/[()]//g表示将每行的小括号当中的的内容替换为一个空内容。“:0”表示本地登入
[root@localhost ~]# USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` //将反引号当中的内容解读完成之后赋值给一个变量USER_IP
标准输入与输出
输出:标准输出、标准错误
[root@localhost Desktop]# cat awk.txt
123 //标准输出(output)【1>常常将1省略只写>】:一个命令字或者程序正常运行的结果
[root@localhost Desktop]# ca awk.txt
bash: ca: command not found... //标准错误(error)【2>/dev/null(标准错误的2>后不能省略)】:一种状态或者错误的信息
Similar commands are::
'ac'
'sa'
输入:
标准输入(input)【0<】:连接至输入设备(键盘等)
使用方法:
1.标准输出-1>常常省略(输出)
2.标准错误-吃掉错误报告(标准错误使用--输出)
[root@localhost Desktop]# who -u am i
root pts/0 2022-10-20 14:56 . 57402 (:0)
[root@localhost Desktop]# wo -u am i 2>/dev/null
3.标准输入(输入)
[root@localhost Desktop]# cat awk.txt
123
[root@localhost Desktop]# cat 0< awk.txt
123
//Linux当中cat定义为表示标准输入命令字。当cat后面不加参数时为键盘输入;cat后面加东西/文件时为将文件标准输入后再标准输出
cat创建新文件:
[root@localhost Desktop]# cat > cat.txt
123132131
^C //在另一行终止进程
[root@localhost Desktop]# cat cat.txt
123132131
3、检查异常端口、进程
①使用netstat网络连接状态命令,分析可疑端口、IP、PID
命令:netstat -antlp | more
②查看下pid所对应的进程文件路径
命令:ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)
③检查异常进程,使用ps命令,分析进程
命令:ps aux | grep pid
4、检查开机启动项
查看运行级别命令runlevel
运行级别 含义 (七个运行模式)
0 关机
1 单用户模式,可以想象为windows的安全模式,主要用于系统修复
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式/桌面模式(GUI界面)
6 重启动
开机启动配置文件:
/etc/rc.local
/etc/rc.d/rc[0~6].d
切换运行模式
临时切换运行模式:(N 5--图像模式下的命令模式)
ctrl+alt=f3 //切换3级别运行模式
ctrl+alt=f1 //切换回来
永久切换运行模式:(5 3--图形模式切换成永久命令模式)
init 3/5 //切换运行级别(在命令模式下输入init 5--返回图形化界面--命令模式更安全,可操作空间变少)
查看默认允许模式:
[root@localhost ~]# systemctl get-default
graphical.target //g开头表示桌面允许模式
systemctl set-default multi-user.target //设置默认运行级别(进入3模式)
systemctl:内核管理工具
5、入侵排查
重点关注以下目录(计划目录)中是否存在恶意脚本:
/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/* 查看目录下所有文件
6、查询已安装的服务
1、RPM包安装的服务
chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
系统在3与5级别下的启动项
chkconfig --list | grep "3:on\|5:on"
2、源码包安装的服务
查看服务安装位置 ,一般是在/usr/local/
service httpd start
搜索/etc/rc.d/init.d/ 查看是否存在
systemctl list-unit-files //查看所有服务与状态
7、检查异常文件
1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“.”为名的文件夹具有隐藏属性
2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件
3、针对可疑文件可以使用stat进行创建修改时间。
8、日志分析技巧
1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
2、定位有哪些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
3、爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
4、登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
5、登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11} ‘
6、增加用户日志:
grep "useradd" /var/log/secure
7、删除用户kali日志:
grep "userdel" /var/log/secure
8、su切换用户
more /var/log/secure | grep 'su:'
9、病毒查杀
①chkrootkit:
网址:http://www.chkrootkit.org
使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar -zxf chkrootkit.tar.gz
cd chkrootkit-0.55
./chkrootkit
②Clamav:
ClamAV的官方下载地址为:http://www.clamav.net/download.html
使用方法:
yum -y install epel-release
yum install –y clamav clamav-update
freshclam
clamscan -r /home
③河马webshell查杀
网址:https://www.shellpub.com/
使用方法:
https://www.shellpub.com/doc/hm_linux_usage.html
深信服Webshell网站后门检测工具
网址:https://edr.sangfor.com.cn/#/index/home