浅析Linux系统入侵排查与应急响应技术

技术

前言

当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。

常见的网络安全事件:

  1. Web入侵:挂马、篡改、Webshell;
  2. 系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞;
  3. 病毒木马:远控、后门、勒索软件;
  4. 信息泄漏:拖裤、数据库登录(弱口令);
  5. 网络流量:频繁发包、批量请求、DDOS攻击;

一个常规的入侵事件后的系统排查思路:
picture.image相关步骤的核心如下:

  1. 文件分析
    a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件;
    b) Webshell 排查与分析;
    c) 核心应用关联目录文件分析;
  2. 进程分析
    a) 当前活动进程、远程连接;
    b) 启动进程、计划任务;
    c) 进程工具分析:Windows 使用 Pchunter、 Linux 使用 Chkrootkit 或 Rkhunter;
  3. 系统分析
    a) 环境变量;
    b) 帐号信息;
    c) History;
    d) 系统配置文件;
  4. 日志分析
    (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 之外其他账户均为登录过(均为不可登录的账户):
picture.image
2、查看可以远程登录的用户、拥有 sudo 权限的用户:
picture.image
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文件中的记录。
 


      
    

相关命令执行效果如下:
picture.image

进程端口排查

同样先来看看相关命令:


      
          

        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命令检查异常端口:
picture.image

2、使用ps aux --sort -pcpu命令查看系统进程(根据 CPU 使用情况排行,从高到低,如果 CPU 占用率超过 70% 且名字可疑,大概率是中了挖矿病毒了):

picture.image

木马排查实例

1、检查端口连接情况,查看到名为 kali-6666.elf 的异常连接,疑似外连木马:

picture.image

2、使用 ps 命令,匹配进程,得到相应 pid 号:

picture.image

3、查看 pid 所对应的进程文件路径:

picture.image

4、应急处置:

针对以上案例,进一步可使用kill -9 6071强制杀死进程,并 rm -f kali-6666.elf 将木马文件删除,同时应该溯源分析木马文件是如何被传到服务器的。

系统服务排查

1、检查是否存在可疑服务,执行命令service --status-all,枚举主机所有服务,查看是否有恶意服务:
picture.image
另外chkconfig -list 命令也可列出所有的服务:
picture.image

2、当发现入侵杀掉了恶意进程后,过一段时间如果恶意进程又会重新启动,则说明该进程有守护进程,此时应检查是否存在可疑定时任务,可使用cat /etc/anacrontab查看 anacron 异步定时任务,同时使用crontab -l 枚举定时任务:
picture.image3、检查服务器开机启动项:

文件位置作用
/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 查看软链接

核查部分启动项如下:
picture.image例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/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 软件包,查看哪些命令是否被替换了:
picture.image
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与 RPM 数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。


      
          

        验证内容中的8个信息的具体内容如下:  
 S 文件大小是否改变  
 M 文件的类型或文件的权限(rwx)是否被改变  
 5 文件MD5校验是否改变(可以看成文件内容是否改变)  
 D 设备中,从代码是否改变  
 L 文件路径是否改变  
 U 文件的属主(所有者)是否改变  
 G 文件的属组是否改变  
 T 文件的修改时间是否改变
      
    
日志分析

Linux 系统日志检查:

  1. 日志默认存放位置:/var/log/;
  2. 必看日志:secure、history;
  3. 查看日志配置情况: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 日志信息的文件:

UbuntuCentos
/var/log/auth.log/var/log/secure

这两个文件关于 SSH 的内容基本⼀致,记录了验证和授权方面的信息,只要涉及账号和密码的程序都会记录下来。下面以 Centos 系统的/var/log/secure日志文件为例进行日志分析演示。

1、先来查看下该日志文件的后 15 行:
picture.image2、定位有多少 IP 在爆破主机的 root 帐号:


      
          

        grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
      
    

执行结果如下图所示:
picture.image3、查看成功登录过主机的 IP 有哪些:


      
          

        grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
      
    

执行结果如下图所示:
picture.image4、查看登录成功的日期、用户名、IP:


      
          

        grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
      
    

执行结果如下图所示:
picture.image5、汇总下与 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 的自动全面化检测,根据检测结果自动数据聚合,进行黑客攻击路径溯源,此程序的特点:

  1. 程序检测的逻辑和方法,均是由一线安全应急人员根据多年实战经验总结出来的;
  2. 程序包括10W+的恶意特征信息,用于恶意文件的比对和查杀;
  3. 结果自动化分析,进行黑客攻击溯源。

自动化程序的 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 写得很仔细,此处不再继续展开:
picture.image

1、直接在 Kali 虚拟机下载并解压缩,运行程序:
picture.image
2、我在桌面先用 MSF 生成并存放了一个 Liunx Backdoor 文件 Tr0e.elf ,然后执行python GScan.py --pro开始扫描,查看结果与处理方案:
picture.image
识别出了部分风险,但是没有桌面的 Backdoor……
picture.image3、其中检测出来的 setuid 风险指的是:
picture.image

病毒查杀

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 虚拟机进行工具测试:
picture.image执行./chkrootkit命令,扫描后的结果:
picture.image

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扫描器 for Linux 使用手册。

(1)首先在 Kali Linux 虚拟机上的 Apache 网站目录下存放了冰蝎 Webshell 文件:
picture.image(2)官网下载 Linux 版本的河马工具并解压缩,运行程序./hm scan /var/www/html开始扫描,成功检测到 Webshell 文件:
picture.image

总结

一个企业的信息安全建设,最基本的无非是要做好三件事:

  • 第一件是事前的安全基线,从源头尽可能保证新上线的系统的安全性;
  • 第二件是建立事中的监控能力,各种多维度的入侵检测,做到有针对性、及时的救火;
  • 第三件是做好事后的应急响应能力,让应急的时间成本更短,溯源和根因分析的能力更强。

可见在企业信息安全建设中,应急响应是很关键的一个环节。

服务器被入侵原因通常有几个:系统漏洞、中间件漏洞(程序漏洞)、代码漏洞、安全设置不正确、网络层面 没有限制等。

  1. 如果是系统漏洞和中间件漏洞,需要使用没有发现漏洞的系统和中间件进行升级;
  2. 如果是程序/代码漏洞,需要修改程序代码进行修改,或者部署waf防火墙;
  3. 如果是安全设置不正确,需要进一步检查安全配置。;
  4. 如果是网络层面没有限制,需要在防火墙和 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
      

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell

「 超详细 | 分享 」手把手教你如何进行内网渗透

神兵利器 | siusiu-渗透工具管理套件

一款功能全面的XSS扫描器

实战 | 一次利用哥斯拉马绕过宝塔waf

BurpCrypto: 万能网站密码爆破测试工具

快速筛选真实IP并整理为C段 -- 棱眼

自动探测端口顺便爆破工具t14m4t

渗透工具|无状态子域名爆破工具(1秒扫160万个子域)

查看更多精彩内容,还请关注 橘猫学安全:

每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“ 再看”

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生环境下的日志采集存储分析实践
云原生场景下,日志数据的规模和种类剧增,日志采集、加工、分析的多样性也大大增加。面对这些挑战,火山引擎基于超大规模下的 Kubernetes 日志实践孵化出了一套完整的日志采集、加工、查询、分析、消费的平台。本次主要分享了火山引擎云原生日志平台的相关实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论