耀扬软件 原创 2024-12-24
前言
当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。
常见的网络安全事件:
一个常规的入侵事件后的系统排查思路:
相关步骤的核心如下:
本文旨在针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,总结了一些 Linux 服务器入侵排查的思路和方法。
对于被入侵的服务器,可对当前主机存在的用户信息、历史命令执行记录、端口占用、异常进程、可疑服务等情况进行排查,从而搜集掌握入侵信息。
先来看看相关命令:
cat /etc/shadow #查看密码
cat /etc/group #查看组信息
history #查看root用户执行的历史命令
last #查看最近登录成功的用户及信息
lastlog #显示主机所有用户最近一次登录信息
id #当前用户信息
who #查看当前登录系统的所有用户
w #显示已经登陆系统的用户列表,并显示用户正在执行的指令
users #显示当前登录系统的所有用户的用户列表
usermod -L user #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
userdel -r user #删除user用户,并且将/home目录下的user目录一并删除
#查看可以远程登录的用户
awk '/$1|$6/{print $1}' /etc/shadow
#查看拥有sudo权限的用户
more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
#查看超级用户(uid=0),有些黑客将普通用户的uid改为0,则该普通用户也拥有了超级权限
awk -F: '$3==0{print $1}' /etc/passwd
1、来看下与系统用户账户相关的文件格式:
A、用户信息文件:/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
格式:用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
B、系统影子文件:/etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
bin::18264:0:99999:7:::
daemon::18264:0:99999:7:::
adm::18264:0:99999:7:::
格式:用户名:加密后的密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
注意:如果加密后的密码这一栏的第一个字符为!或者的话,说明这是一个不能登录的账户
可执行 lastlog 命令可显示主机所有用户最近一次登录信息,可以看到除了 root 之外其他账户均为登录过(均为不可登录的账户):
2、查看可以远程登录的用户、拥有 sudo 权限的用户:
3、查看用户执行的历史命令信息:
Linux 系统可以通过 .bash_history 查看帐号执行过的系统命令:
1、查看 root 用户的历史命令:histroy
2、打开 /home 各帐号目录下的.bash_history,执行命令:cat .bash_history >> history.txt,可查看普通帐号的历史命令
3、为历史的命令增加登录的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" = "" ]thenUSER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami` "shopt -s histappendexport PROMPT_COMMAND="history -a"######### jiagu history xianshi ##########
(3)source /etc/profile让配置生效
生成效果:
1 2021-07-16 06:19:24 222.129.38.129 root whoami
2 2021-07-16 06:19:36 222.129.38.129 root history
3 2021-07-16 06:20:56 222.129.38.129 root cat /root/.bash_history
4、历史操作命令的清除:history -c
注意此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录。
相关命令执行效果如下:
同样先来看看相关命令:
netstat -antlp #检查端口连接情况
netstat -antlp | grep 18176 #查看端口连接情况,过滤含有字符“18176”的行
top #动态查看进程
ls -l /proc/18176/exe #查看PID为18176的进程的可执行程序
lsof -p 18176 #查看PID为18176的进程打开的文件
lsof -c sshd #查看进程sshd打开的文件
lsof -i:33946 #查看33946端口对应的一些进程
fuser -n tcp 33946 #查看33946端口对应的进程PID
pstree #查看进程树
ps aux #静态查看进程
ps aux | grep ssh #查看与ssh相关的进程
ps aux --sort -pcpu #静态查看进程,根据cpu使用情况排行,从高到低
ps aux --sort -pmem #静态查看进程,根据内存使用情况排行,从高到低
ps -p PID -o lstart #查看进程的启动时间点
kill -9 pid #强制杀死进程
1、使用netstat -antlp命令检查异常端口:
2、使用ps aux --sort -pcpu命令查看系统进程(根据 CPU 使用情况排行,从高到低,如果 CPU 占用率超过 70% 且名字可疑,大概率是中了挖矿病毒了):
【木马排查实例】
1、检查端口连接情况,查看到名为 kali-6666.elf 的异常连接,疑似外连木马:
2、使用 ps 命令,匹配进程,得到相应 pid 号:
3、查看 pid 所对应的进程文件路径:
4、应急处置:
针对以上案例,进一步可使用kill -9 6071强制杀死进程,并 rm -f kali-6666.elf 将木马文件删除,同时应该溯源分析木马文件是如何被传到服务器的。
1、检查是否存在可疑服务,执行命令service --status-all,枚举主机所有服务,查看是否有恶意服务:
另外chkconfig -list 命令也可列出所有的服务:
2、当发现入侵杀掉了恶意进程后,过一段时间如果恶意进程又会重新启动,则说明该进程有守护进程,此时应检查是否存在可疑定时任务,可使用cat /etc/anacrontab查看 anacron 异步定时任务,同时使用crontab -l 枚举定时任务:
3、检查服务器开机启动项:
核查部分启动项如下:
例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可:
root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh1
此处的 sshd 是具体服务的脚本文件,S100ssh 是其软连接,S 开头代表加载时自启动;如果是 K 开头的脚本文件,代表运行级别加载时需要关闭的。
4、RPM 软件包检查(RPM 包是预先在 Linux 机器上编译好并打包好的软件安装包),Linux 系统完整性可以通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了:
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与 RPM 数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验是否改变(可以看成文件内容是否改变)
D 设备中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
Linux 系统日志检查:
核心日志文件及其作用如下:
/var/log/cron 记录了系统定时任务相关的日志
/var/log/cups 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secu
re 记录验
证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
Linux 记录了 SSH 日志信息的文件:
这两个文件关于 SSH 的内容基本⼀致,记录了验证和授权方面的信息,只要涉及账号和密码的程序都会记录下来。下面以 Centos 系统的/var/log/secure日志文件为例进行日志分析演示。
1、先来查看下该日志文件的后 15 行:
2、定位有多少 IP 在爆破主机的 root 帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
执行结果如下图所示:
3、查看成功登录过主机的 IP 有哪些:
grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
执行结果如下图所示:
4、查看登录成功的日期、用户名、IP:
grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
执行结果如下图所示:
5、汇总下与 SSH 登录日志分析相关的命令:
cat /var/log/secure* | grep Accepted #查看登录成功的记录
cat /var/log/secure* | grep Failed #查看登录失败的记录
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}' #查看登录成功的日期、用户名及ip
grep "Failed password for root" /var/log/secure | awk '{print $11}' #查看有哪些ip在爆破主机的root账号
grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr #查看爆破用户名字典
一般如果网络边界做好控制,通常对外开放的仅是Web服务,那么需要先找到Webshell,可以通过如下途径:
1、Webshell搜索
检查最近创建的 php、jsp 文件和上传目录,例如要查找 24 小时内被修改的 jsp 文件:
find ./ -mtime 0 -name "*.jsp"
相关的依据时间检索文件的命令还有:
# -atime 文件的访问时间
# -mtime 文件内容修改时间
# -ctime 文件状态修改时间(文件权限,所有者/组,文件大小等,当然文件内容发生改变,ctime也会随着改变)
# 要注意:系统进程/脚本访问文件,atime/mtime/ctime也会跟着修改,不一定是人为的修改才会被记录
# 查找最近一天以内修改的文件:
find / -mtime -1 -ls | more
# 查找50天前修改的文件:
find ./ -mtime +50 -ls
2、工具扫描特征
通常入侵行为会伴随着踩点和扫描行为,那么可以查一下具有扫描行为的日志。
例如使用AWVS扫描:
grep 'acunetix' /var/log/httpd/access_log
例如使用sqlmap,但是没有使用–random-agent,UA中带有sqlmap
grep 'sqlmap' /var/log/httpd/access_log
Linux 系统中,Apache 的访问日志默认位置为 /var/log/httpd/access.log。
以上是纯手工命令排查服务器入侵痕迹,下面介绍几款 Liunx 系统应急响应的工具,用于提高应急排查的效率。
GScan 是一款开源的 Linux 应急响应工具,Github项目地址。本程序旨在为安全应急响应人员对Linux主机排查时提供便利,实现主机侧 Checklist 的自动全面化检测,根据检测结果自动数据聚合,进行黑客攻击路径溯源,此程序的特点:
自动化程序的 CheckList 项如下:
1、主机信息获取
2、系统初始化alias检查
3、文件类安全扫描
3.1、系统重要文件完整行扫描
3.2、系统可执行文件安全扫描
3.3、临时目录文件安全扫描
3.4、用户目录文件扫描
3.5、可疑隐藏文件扫描
4、各用户历史操作类
4.1、境外ip操作类
4.2、反弹shell类
5、进程类安全检测
5.1、CUP和内存使用异常进程排查
5.2、隐藏进程安全扫描
5.3、反弹shell类进程扫描
5.4、恶意进程信息安全扫描
5.5、进程对应可执行文件安全扫描
6、网络类安全检测
6.1、境外IP链接扫描
6.3、恶意特征链接扫
描
6.4、网卡混杂模式检测
7、后门类检测
7.1、LD_PRELOAD后门检测
7.2、LD_AOUT_PRELOAD后门检测
7.3、LD_ELF_PRELOAD后门检测
7.4、LD_LIBRARY_PATH后门检测
7.5、ld.so.preload后门检测
7.6、PROMPT_COMMAND后门检测
7.7、Cron后门检测
7.8、Alias后门
7.9、SSH 后门检测
7.10、SSH wrapper 后门检测
7.11、inetd.conf 后门检测
7.12、xinetd.conf 后门检测
7.13、setUID 后门检测
7.14、8种系统启动项后门检测
8、账户类安全排查
8.1、root权限账户检测
8.2、空口令账户检测
8.3、sudoers文件用户权限检测
8.4、查看各账户下登录公钥
8.5、账户密码文件权限检测
9、日志类安全分析
9.1、secure登陆日志
9.2、wtmp登陆日志
9.3、utmp登陆日志
9.4、lastlog登陆日志
10、安全配置类分析
10.1、DNS配置检测
10.2、Iptables防火墙配置检测
10.3、hosts配置检测
11、Rootkit分析
11.1、检查已知rootkit文件类特征
11.2、检查已知rootkit LKM类特征
11.3、检查已知恶意软件类特征检测
12.WebShell类文件扫描
12.1、WebShell类文件扫描
8.5、账户密码文件权限检测
9、日志类安全分析
9.1、secure登陆日志
9.2、wtmp登陆日志
9.3、utmp登陆日志
9.4、lastlog登陆日志
10、安全配置类分析
10.1、DNS配置检测
10.2、Iptables防火墙配置检测
10.3、hosts配置检测
11、Rootkit分析
11.1、检查已知rootkit文件类特征
11.2、检查已知rootkit LKM类特征
11.3、检查已知恶意软件类特征检测
12.WebShell类文件扫描
12.1、WebShell类文件扫描
项目的具体介绍在 Github 写得很仔细,此处不再继续展开:
1、直接在 Kali 虚拟机下载并解压缩,运行程序:
2、我在桌面先用 MSF 生成并存放了一个 Liunx Backdoor 文件 Tr0e.elf ,然后执行python GScan.py --pro开始扫描,查看结果与处理方案:
识别出了部分风险,但是没有桌面的 Backdoor……
3、其中检测出来的 setuid 风险指的是:
1、Rootkit 查杀
Rootkit 是一种系统内核级病毒木马,其进入内核模块后能获取到操作系统高级权限,从而使用各种底层技术隐藏和保护自身,绕开安全软件的检测和查杀。
Linux 系统可以使用 chkrootkit 工具(网址:http://www.chkrootkit.org)进行 Rootkit 查杀,其使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
#编译完成没有报错的话执行检查
./chkrootkit
在 Kali Liunx 虚拟机进行工具测试:
执行./chkrootkit命令,扫描后的结果:
2、病毒查杀
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目录并且显示有问题的文件的扫描结果
3、Webshell 查杀
Linux 系统:
此处介绍下河马的使用,读者可先查看官方使用文档:河马 webshell扫描器 for Linux 使用手册。
(1)首先在 Kali Linux 虚拟机上的 Apache 网站目录下存放了冰蝎 Webshell 文件:
(2)官网下载 Linux 版本的河马工具并解压缩,运行程序./hm scan /var/www/html开始扫描,成功检测到 Webshell 文件:
一个企业的信息安全建设,最基本的无非是要做好三件事:
可见在企业信息安全建设中,应急响应是很关键的一个环节。
服务器被入侵原因通常有几个:系统漏洞、中间件漏洞(程序漏洞)、代码漏洞、安全设置不正确、网络层面 没有限制等。
业界有个应急响应参考模型,叫做 PDCERF 方法,它把应急响应体系分为六个阶段来处理。这六个阶段分别是 准备(Perparation) 、检测(Detection) 、遏制(Containment) 、根除(Eradication)、 恢复(Recovery) 、跟踪(Follow-up)。方法论的东西,看看就好,其实我们做的也基本都是根据这几个步骤来的。应急响应讲求的是快、准、稳。在最短的时间内定位安全问题,排查安全问题,保障业务系统的稳定性和安全性。