应急响应-Linux 系统排查相关技术

Oyst3r 于 2023-05-20 发布

分享分享在 Linux 应急中在查阅相关的模块时要用到的一些命令,一定要去实操实操,这样到了客户现场才能不慌,加油鹅!

主机信息收集

用户信息

Linux 操作系统上的用户如果需要登录主机,当其输入用户名和密码之后:

  1. 首先在/etc/passwd 文件中查找是否有你的账号,如果没有无法登录,如果有的话将该用户的 UID 和 GID 读出来,此外将此用户的 shell 设置也一并读出

  2. 然后根据 UID 到/etc/shadow 文件中去寻找相应用户的密码,如果匹配一致

  3. 进入 shell 控制的阶段

在 passwd 文件中,字段与字段之间用分号隔开,下面是各个字段的具体含义
用户名:密码:用户 ID:组 ID:用户说明:家目录:登陆之后 shell
注意:无密码只允许本机登陆,远程不允许登陆

tty1 本地登录;pts 远程登录,这个的话本地试的时候,去用 init 5 也就是图形化界面的时候,实际上就还是显示的是 pts,只有用 init 3 这种完全是个黑框框的菜是 tty,不过客户现场的服务器一般都是黑框框鹅,核心机器也不可能去 ssh

创建一个空口令账户:
useradd Oyst3r
passwd -d Oyst3r

存的是加密的密码,每个字段含义如下
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留字段

计划任务

Linux 里面,计划任务也是维持权限和远程下载一些恶意脚本软件的手段,一般有以下两种方式去查看计划任务

下面也给出了几个例子

还有指定查看用户的计划任务 crontab -u Oyst3r -l

一般在 Linux 中的计划任务都是以 cron 开头的,可以利用正则表达式去去模糊匹配筛出来/etc/目录下所有的以 cron 开头的文件

服务排查

下面是这 6 个数字的含义,排查的时候主要去着重看 3、4、5

其中几个状态的解释:

enabled:这个将在开机时被执行
disabled:这个在开机时候不会被执行
static:这个不会自启动,但会可能因为别的服务启动而被牵连着启动
mask:永远不会被启动

sudo systemctl stop xxx.service 关停服务
sudo systemctl disable xxx.service 终止开机自启动
sudo systemctl start xxx.service 启动服务
sudo systemctl enable xxx.service 开启开机自启动

开机文件启动项

说明一下这个 rc0、rc1 等等的含义,其实和上面一样还是对应着不同的等级

敏感目录

ls -alh ~/.sshls -alh /etc/ssh,这种攻击者可能会留一些公钥,实现无密后门

文件排查

通过列出攻击日期内变动的文件,即可发现相关的可疑文件

-type b/d/c/p/l/f 查找块设备/目录/字符设备/管道/符号链接/普通文件
-mtime -n +n 按文件更改时间来查找 -n 是指 n 天以内 +n 指的是 n 天前
-atime -n +n 按文件访问时间来查找 -n 是指 n 天以内 +n 指的是 n 天前
-ctime -n +n 按文件创建时间来查找 -n 是指 n 天以内 +n 指的是 n 天前

对文件的创建时间、修改时间、访问时间去进行一个线性的排查

最近更改和最近改动的区别

特殊文件

linux 中文件有特殊的设置,比如权限什么的,对于这些东西咱们也可以去一步步的排查

在 linux 中系统命令也是文件,ls、ps、find 等命令也可能被攻击,用上面这条命令查看一下相关命令文件被修改的信息

排查 suid 程序,对于一些设置了 suid 权限的程序可通过这条命令去排查

看看环境变量有没有被修改过

隐藏文件

touch .Oyst3r.txt

Linux 藏后门最好要修改掉时间,不然一条指令就被发现了,比如先参考一下目录中别的文件(index.php)的创建时间,再去赋值给我们的后门文件(webshell.php)

但改完之后,用 stat 查看这个文件的属性,它的最近改动时间还是没有变的

这个在比如发现攻击者创建了个后门,删除的时候提示不能去删除,就要看看文件是不是被上锁了

chattr +i webshell.php 锁定文件
chattr webshell.php 查看文件属性,如果上锁了会显示有一个 i
chattr -i webshell.php 解锁文件
rm -rf webshell.php 删除文件

后门检测

//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("

//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"

系统资源分析

进程信息

相当于 windows 的任务管理器

查看进程树

网络与进程分析

kill -9 进程 pid

历史命令

1、root 用户的历史命令
histroy
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_profile 文件中的记录

进入用户目录下,导出历史命令。
cat .bash_history >> history.txt

OK 终于结束了