Linux应急响应总结——更新中

发布时间 2023-10-24 11:39:18作者: lockly

Linux应急响应

用户信息

方向

查看可登录的用户:

cat /etc/passwd | grep /bin/bash
awk -F: '{if($7!="/usr/sbin/nologin")print $1)}' /etc/passwd
# 除去不可登录的用户,看有没有新增的

查看是否有被添加的高权限用户,uid为0默认系统只用一个root:

awk -F: '$3==0{print $0}' /etc/passwd
awk -F: '{if($3==0||$4==0)print $1}' /etc/passwd

更多时候某些普通用户可能存在suid滥用,需要查询有sudo权限的用户。

more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

查询可以远程登录的帐号信息,要注意的就是空密码只能本机登录不能远程。

awk '/\$1|\$6/{print $1}' /etc/shadow

查看/etc/passwd上次修改的时间,可以通过对比判断是否存在问题。

stat /etc/passwd

解决方案

直接警用账号,使其无法登录。

usermod -L user

完全删除user,同时将/home目录下的user目录一并删除。

userdel -rf user 

不过一般来说Linux下攻击者一般都不会添加账号,动静太大了。

系统日志

总结常见的:

日志 描述
/var/log/cron 系统定时任务相关的日志
/var/log/mailog 记录邮件信息
/var/log/message 记录Linux系统的绝大多数重要信息
/var/log/btmp 错误登录日志,使用lastb命令查看
/var/log/lastlog 系统中所有用户最后一次登录的日志,使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,使用last命令查看
/var/log/utmp 记录当前登录的用户信息,使用w/who/users等命令查看
/var/log/secure 涉及账号和密码的程序都会记录,例如SSH、su切换用户、sudo授权、添加用户和修改用户密码

历史命令

使用history可以列出最近的历史命令,但是可以显示的条数有限制。可以通过修改 /etc/profile文件来修改保存历史命令的最大数量。

sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

但另外一个问题是,history中存储的可以通过history -c 被攻击者清空,但是他并不会清空保存在文件中的记录,当系统关机/重启后会更新到~/.bash_history 文件中。所以必须删除~/.bash_profile中的记录。而在这个文件没被动时可以看到执行过的历史命令但也仅限于命令,通过如下配置添加更多具体信息。

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"

source /etc/profilie更新文件生效之后,使用history时将可以看到登录的 IP 地址、执行命令时间。

image-20231024082505656

异常文件

根据名称

若不区分大小写就使用-iname

find / -name shell.*

根据大小

通过文件大小的区间来判断存在的文件是否可能为木马。

find / -size +1000M
# +1000M表示大于1000M的文件,-10M代表小于10M的文件
find ./ -size -221c -size +219c -exec ls -lh {} \;

根据时间

列出最近15天内修改过了的文件。比如下面的结果中hermoinesnape的公钥均有变动,且hermoine.bash_history有变动,就很有可能被修改了公钥进行登录。

find / -mtime -15 -ls  | more 

image-20231024085319096

这样列出来的数据量会很大,有时候只想查看是否有webshell或者远控木马,可以过滤出修改的php文件,比如这里的index和error都有改动,可能就是被挂黑页或者是攻击者通过404反弹shell,查看index可以发现疑似webshell的语句。

find / -mtime -15 -name "*.php"

image-20231024090029320

其他参数的使用:

-atime 最后一次访问时间:查找在 n*24 小时内被访问过的文件。
-ctime 文件内容修改时间:查找在 n*24 小时内状态发生变化的文件(例如权限)。
-mtime 最后一次状态的修改时间:查找在 n*24 小时内被修改过的文件(包括文件权限,所有者/组,文件大小等)。

+n:查找比 n 天前更早的文件或目录。
-n:查找在 n 天内更改过属性的文件或目录。
n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

根据可见性

查看隐藏文件。

ls -ar |grep "^\."

根据权限

只看文件权限的话就使用-perm参数指定,但是排查时间就可能很长。

find / -perm 600

如果需要查看属主是root的文件,则可以用-type f指定要查找的是文件。

find ./ -user root -type f

而如果没有属主或属组的文件或者目录,就很有可能被恶意删除或者修改了用户或组信息,也有可能是被上传到系统中的存在恶意代码的内容。可以如下列出这些文件:

find / -nouser -o -nogroup

若不需要查看内容而是同时删除就加上-delete参数。

find / -nouser -o -nogroup -delete

计划任务、自启动

列出所有已启动的服务

systemctl list-unit-files | grep enabled

查看计划任务,如果需要看特定用户就用-u 指定就行,如看root的:

crontab -u root -l

计划任务保存在/var/spool/cron/{user}中,而上面的效果等同于cat /var/spool/cron/crontabs/root

image-20231024093859323

对于这些任务,如需编辑则使用- e ,但/etc/crontab是系统级别的定时任务,只有root账户可以修改。删除特定用户的就使用 -r

服务、模块

排查可疑服务。

root@Nagini:~# service --status-all
 [ - ]  anacron
 [ - ]  apache-htcacheclean
 [ + ]  apache2
 [ + ]  apparmor
 [ - ]  bluetooth
 [ - ]  console-setup.sh
 [ + ]  cron
 [ + ]  dbus
 [ - ]  hwclock.sh
 [ - ]  keyboard-setup.sh
 [ + ]  kmod
 [ + ]  mysql
 [ - ]  networking
 [ - ]  nginx
 [ + ]  procps
 [ - ]  rsync
 [ + ]  rsyslog
 [ + ]  ssh
 [ + ]  udev
root@Nagini:~#

列出所有已载入系统的模块:

root@Nagini:~# lsmod
Module                  Size  Used by
vmwgfx                331776  1
crct10dif_pclmul       16384  0
ttm                   126976  1 vmwgfx
crc32_pclmul           16384  0
snd_intel8x0           45056  0
drm_kms_helper        208896  1 vmwgfx
ghash_clmulni_intel    16384  0
snd_ac97_codec        147456  1 snd_intel8x0
ac97_bus               16384  1 snd_ac97_codec
pcspkr                 16384  0
serio_raw              16384  0
drm                   495616  4 vmwgfx,drm_kms_helper,ttm
evdev                  28672  3
joydev                 24576  0
snd_pcm               114688  2 snd_intel8x0,snd_ac97_codec
snd_timer              36864  1 snd_pcm
snd                    94208  4 snd_intel8x0,snd_timer,snd_ac97_codec,snd_pcm
soundcore              16384  1 snd
vboxguest              40960  0
sg                     36864  0
video                  49152  0
ac                     16384  0
battery                20480  0
button                 20480  0
ip_tables              28672  0
x_tables               45056  1 ip_tables
autofs4                49152  2
ext4                  745472  1
crc16                  16384  1 ext4
mbcache                16384  1 ext4
jbd2                  122880  1 ext4
crc32c_generic         16384  0
fscrypto               32768  1 ext4
ecb                    16384  0
hid_generic            16384  0
usbhid                 57344  0
hid                   139264  2 usbhid,hid_generic
sr_mod                 28672  0
cdrom                  65536  1 sr_mod
sd_mod                 61440  3
ata_generic            16384  0
crc32c_intel           24576  2
ata_piix               36864  0
ohci_pci               16384  0
ehci_pci               16384  0
ohci_hcd               61440  1 ohci_pci
ahci                   40960  2
ehci_hcd               94208  1 ehci_pci
libahci                40960  1 ahci
libata                270336  4 ata_piix,libahci,ahci,ata_generic
aesni_intel           200704  0
aes_x86_64             20480  1 aesni_intel
crypto_simd            16384  1 aesni_intel
cryptd                 28672  3 crypto_simd,ghash_clmulni_intel,aesni_intel
glue_helper            16384  1 aesni_intel
psmouse               172032  0
i2c_piix4              24576  0
usbcore               299008  5 ohci_hcd,ehci_pci,usbhid,ehci_hcd,ohci_pci
usb_common             16384  1 usbcore
e1000                 155648  0
scsi_mod              249856  4 sd_mod,libata,sg,sr_mod
root@Nagini:~#

端口、进程

查看端口的连接情况:

netstat -anput | more

具体参数如下:

-a 显示所有连接和端口
-n 以数字形式显示ip和port
-t 显示tcp
-u  显示udp
-v  显示指令执行过程
-l 显示监听的服务
-s   显示网络工作信息统计表
-p 显示建立连接的进程名以及pid
ESTABLISHED 建立连接、LISTENING 侦听状态、TIME_WAIT 连接超时

如果有发现了可疑的外联ip,就可以根据pid查找其文件路径。

ls -l /proc/$pid

监控这个ip的通信进程。

while true; do netstat -antp | grep 10.10.10.1; done

查看进程使用ps -aux,若需要关联pid就用grep:

root@Nagini:~# ps -aux | grep 3306
root      1084  0.0  0.0   6076   888 pts/0    S+   07:42   0:00 grep 3306

还可以通过查看cpu占用率前十的进程来查看是否有可疑的进程。

ps aux --sort=pcpu | head -10ps aux --sort=pcpu | head -10

image-20231024101328447

同样的可以用top来动态的监控进程,按b可以根据使用情况进行排序。-p指定pid。

top -p $pid

image-20231024101651982

工具

whoamifuck

?传送门。手工排除太慢,先用工具再结合手工最佳。赋权后指定相应参数即可。

image-20231024102848766

可以列举出很多信息,部分如下:

image-20231024103040914

火麒麟

?传送门

clone下来之后运行agent中的对应版本,之后输入start开开始,最后会得到一个后缀为.fkld的文件,将文件导入gui界面可以看到详细的信息。

image-20231024110008726

河马webshell

快速配置一下,一般使用scan或者deepscan,后面跟上网页的路径即可。

wget -O /opt/hm-linux.tgz http://dl.shellpub.com/hm/latest/hm-linux-amd64.tgz?version=1.7.0
c
./hm -h

image-20231024110447376