前言
当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。
常见的网络安全事件:
- Web入侵:挂马、篡改、Webshell;
- 系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞;
- 病毒木马:远控、后门、勒索软件;
- 信息泄漏:拖裤、数据库登录(弱口令);
- 网络流量:频繁发包、批量请求、DDOS攻击;
一个常规的入侵事件后的系统排查思路:
相关步骤的核心如下:
- 文件分析
a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件;
b) Webshell 排查与分析;
c) 核心应用关联目录文件分析; - 进程分析
a) 当前活动进程、远程连接;
b) 启动进程、计划任务;
c) 进程工具分析:Windows 使用 Pchunter、 Linux 使用 Chkrootkit 或 Rkhunter; - 系统分析
a) 环境变量;
b) 帐号信息;
c) History;
d) 系统配置文件; - 日志分析
(a) 操作系统日志:Windows事件查看器、Linux/var/log/
;
(b) 应用日志分析:Access.log、Error.log。
本文旨在针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,总结了一些 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" = "" ]
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 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/profile.d/ | /etc/profile.d/*.sh 是 bash 的全局配置文件,/etc/profile.d/ 下有许多 shell 脚本,可以在开机时启动 |
/etc/init.d/ | 该目录内放的是各个服务的启动脚本,比如 sshd、httpd 等 |
/etc/rc.local | /etc/rc.local |
是 | |
/etc/rc.d/rc.local | |
的软连接,该脚本是在系统初始化级别脚本运行之后再执行的 | |
/etc/rc.d/rcX.d/ | rcX.d 是目录名,后面的X代表着每个运行级别,里面服务都是软连接,真正的目录是 /etc/init.d 下的脚本,可用 ls –l 查看软链接 |
核查部分启动项如下:
例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在
/etc/init.d
目录下,然后在/etc/rc.d/rc*.d
中建立软链接即可:
root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
1
此处的 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/;
- 必看日志:secure、history;
- 查看日志配置情况:more /etc/rsyslog.conf;
核心日志文件及其作用如下:
/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授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
SSH 暴力破解
Linux 记录了 SSH 日志信息的文件:
Ubuntu | Centos |
---|---|
/var/log/auth.log | /var/log/secure |
这两个文件关于 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应用日志
一般如果网络边界做好控制,通常对外开放的仅是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
GScan 是一款开源的 Linux 应急响应工具,Github项目地址。本程序旨在为安全应急响应人员对Linux主机排查时提供便利,实现主机侧 Checklist 的自动全面化检测,根据检测结果自动数据聚合,进行黑客攻击路径溯源,此程序的特点:
- 程序检测的逻辑和方法,均是由一线安全应急人员根据多年实战经验总结出来的;
- 程序包括10W+的恶意特征信息,用于恶意文件的比对和查杀;
- 结果自动化分析,进行黑客攻击溯源。
自动化程序的 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.gzcd zlib-1.2.7#安装一下gcc编译环境:yum install gccCFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/make && make install2、添加用户组clamav和组成员clamav:groupadd clamavuseradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav3、安装Clamavtar –zxvf clamav-0.97.6.tar.gzcd clamav-0.97.6./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlibmake
make install4、配置Clamavmkdir /opt/clamav/logsmkdir /opt/clamav/updatatouch /opt/clamav/logs/freshclam.logtouch /opt/clamav/logs/clamd.logcd /opt/clamav/logschown clamav:clamav clamd.logchown clamav:clamav freshclam.log5、ClamAV 使用: /opt/clamav/bin/freshclam 升级病毒库./clamscan –h 查看相应的帮助信息./clamscan -r /home 扫描所有用户的主目录就使用./clamscan -r --bell -i /bin 扫描bin目录并且显示有问题的文件的扫描结果
3、Webshell 查杀
Linux 系统:
- 河马 Webshell 查杀:http://www.shellpub.com;
- 深信服 Webshell 网站后门检测工具:http://edr.sangfor.com.cn/backdoor\_detection.html。
此处介绍下河马的使用,读者可先查看官方使用文档:河马 webshell扫描器 for Linux 使用手册。
(1)首先在 Kali Linux 虚拟机上的 Apache 网站目录下存放了冰蝎 Webshell 文件:
(2)官网下载 Linux 版本的河马工具并解压缩,运行程序
./hm scan /var/www/html
开始扫描,成功检测到 Webshell 文件:
一个企业的信息安全建设,最基本的无非是要做好三件事:
- 第一件是事前的安全基线,从源头尽可能保证新上线的系统的安全性;
- 第二件是建立事中的监控能力,各种多维度的入侵检测,做到有针对性、及时的救火;
- 第三件是做好事后的应急响应能力,让应急的时间成本更短,溯源和根因分析的能力更强。
可见在企业信息安全建设中,应急响应是很关键的一个环节。
服务器被入侵原因通常有几个:系统漏洞、中间件漏洞(程序漏洞)、代码漏洞、安全设置不正确、网络层面 没有限制等。
- 如果是系统漏洞和中间件漏洞,需要使用没有发现漏洞的系统和中间件进行升级;
- 如果是程序/代码漏洞,需要修改程序代码进行修改,或者部署waf防火墙;
- 如果是安全设置不正确,需要进一步检查安全配置。;
- 如果是网络层面没有限制,需要在防火墙和 IPS 上进行检查。
业界有个应急响应参考模型,叫做 PDCERF 方法,它把应急响应体系分为六个阶段来处理。这六个阶段分别是 准备(Perparation) 、检测(Detection) 、遏制(Containment) 、根除(Eradication)、 恢复(Recovery) 、跟踪(Follow-up)。方法论的东西,看看就好,其实我们做的也基本都是根据这几个步骤来的。应急响应讲求的是快、准、稳。在最短的时间内定位安全问题,排查安全问题,保障业务系统的稳定性和安全性。
本文参考:
Linux 应急响应;
https://www.jianshu.com/p/4e1186b38e5c
【应急响应】Linux应急响应入侵排查思路;
https://blog.csdn.net/Fly\_hps/article/details/87876596
【应急响应】黑客入侵应急分析手工排查。
https://blog.csdn.net/Fly\_hps/article/details/82725430
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/weixin\_39190897/article/details/118784289
作者: Tr0e
链接: https://bwshen.blog.csdn.net/article/details/118784289
如有侵权,请联系删除
推荐阅读
查看更多精彩内容,还请关注 橘猫学安全:
每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“ 再看”