系统关键位置排查(Linux)

admin 2023年6月5日22:04:37评论20 views字数 22856阅读76分11秒阅读模式


免责声明文章仅用于技术分享,切勿非法测试,由于传播、利用本公众号朱厌安全团队所提供的信息而造成的后果以及损失,均由使用者本人承担,本公众号朱厌安全团队以及作者不为此承担任何责任!如有侵权烦请告知,我们会立即删除并致歉!

0X00 蓝队流程

监测值守流程:

清点网络资产排查可用服务优化安全配置 监控&上报安全事件 分析&回溯安全事件 写事件报告

应急响应流程

信息收集,事件分析,保密机隔离手动排查,业务机可用工具查杀,系统加固,恢复业务,写事件报告。

0X01 开机启动项

伴随开机确定,一般生产服务器很少重启,但是为了防止被控机器失联部分木马会添加开机启动项作为复活手段

/etc/rc.local

Bash
#!/bin/sh -e
#
#rc.local
#
This script is executed at the end of each multiuser runlevel.
Ensure that the script will "exit o"on success or any other
value on error.
#
To enable or disable this script,just change the execution
bits.
#
By default,this script does nothing.
touch /root/1.txt

/etc/rc.d/rc.local

Bash
#!/bin/bash
THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
It is highly advisable to create own systemd services or udev rules
to run scripts during boot instead of using this file.
#
In contrast to previous versions due to parallel execution during boot
this script will NOT be run after all other services.
#
Please note that you must run 'chmod +x /etc/rc.d/rc.local'to ensure
that this script will be executed during boot.
touch /var/lock/subsys/local
touch /tmp/1.txt

touch设置自启文件

/etc/rc.d/init.d/

这个目录下有可执行文件和脚本

/etc/rc*.d/systemctl list-unit-files

发现恶意服务,使用下面命令关停

Bash
sudo systemctl stop ufw.service #停止服务
sudo systemctl disable ufw.service # 删除开机

关错了,避免尴尬偷偷启动服务

Bash
sudo systemctl start ufw.service #启动服务
sudo systemctl enable ufw.service # 添加开机 开机


Linux 命令参考文献

https://www.linuxcool.com/

0X02 环境变量配置文件

环境变量

•/etc/profile
•/etc/bashrc
•/etc/bash.bashrc
•~/.bashrc
•~/.profile
•~/.bash_profile

注:这些文件用于设置环境变量或启动程序,每次linux登录或切换用户都会触发这些文件

切换用户时触发环境变量文件

Bash
sudo su

~/.bash_logout

登出账户时触发

Bash
exit
logout
~/.bash_logout

0X03 资源占用排查

资源占用

进程是Linux当前正在处理的任务,当运行某个软件时将为其创建一个进程

sudo ps -efcaux #查看所有进程

Bash
root@iZf8z2h32lxjknhkgifotzZ:/etc# sudo ps -efcaux #查看所有进程

Bash
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       853  0.0  0.0  15964  1788 ttyS0    Ss+  Apr15   0:00 agetty
_chrony    889  0.0  0.1 105548  2304 ?        S    Apr15   0:09 chronyd
root       892  0.0  0.2  72304  5464 ?        Ss   Apr15   0:00 sshd
root     10932  0.0  0.3 105700  6908 ?        Ss   11:56   0:00  _ sshd
root     10968  0.0  0.2  22656  5176 pts/0    Ss   11:56   0:00      _ bash
root     15501  0.0  0.2  61224  3960 pts/0    S+   12:11   0:00          _ sudo
root     15502  0.0  0.1  39808  3728 pts/0    R+   12:11   0:00              _ ps
root       897  0.0  0.2 187232  4052 ?        Ssl  Apr15   0:00 unattended-upgr
root      1037  0.0  0.2  44316  4392 ?        Ssl  Apr15  37:50 AliYunDunUpdate
root      1726  0.0  0.1 178304  2544 ?        Ss   Apr15   0:00 nginx
www       2289  0.0  0.1 211320  3604 ?        S    Apr16   0:04  _ nginx
www       2290  0.0  0.1 211320  2828 ?        S    Apr16   0:00  _ nginx
www       2291  0.0  0.1 180472  2396 ?        S    Apr16   0:13  _ nginx
root      1773  0.0  0.1 125372  2524 ?        Ss   Apr15   1:36 php-fpm
www       1784  0.0  0.1 130920  3764 ?        S    Apr15   0:01  _ php-fpm
www       1785  0.0  0.2 130724  4304 ?        S    Apr15   0:01  _ php-fpm
www       1794  0.0  0.3 129948  5952 ?        S    Apr15   0:01  _ php-fpm
www       1795  0.0  0.2 129952  5784 ?        S    Apr15   0:01  _ php-fpm
www       1796  0.0  0.1 130844  3004 ?        S    Apr15   0:01  _ php-fpm
www      27762  0.0  0.1 130944  3372 ?        S    Apr15   0:01  _ php-fpm
www      20840  0.0  0.1 127824  3728 ?        S    May02   0:00  _ php-fpm

查找进程文件位置

sudo lsof -p 27391 #查看pid是27391的进程的详细信息

Bash
root@iZf8z2h32lxjknhkgifotzZ:/etc# sudo lsof -p 27391 #查看pid是27391的进程的详细信息

Bash
COMMAND     PID USER   FD      TYPE   DEVICE SIZE/OFF     NODE NAME
docker-pr 27391 root  cwd       DIR    252,1     4096        2 /
docker-pr 27391 root  rtd       DIR    252,1     4096        2 /
docker-pr 27391 root  txt       REG    252,1  2145395   136308 /usr/bin/docker-proxy
docker-pr 27391 root  mem       REG    252,1  2030928   262749 /lib/x86_64-linux-gnu/libc-2.27.so
docker-pr 27391 root  mem       REG    252,1   144976   276057 /lib/x86_64-linux-gnu/libpthread-2.27.so
docker-pr 27391 root  mem       REG    252,1   179152   262739 /lib/x86_64-linux-gnu/ld-2.27.so
docker-pr 27391 root    0r      CHR      1,3      0t0        6 /dev/null
docker-pr 27391 root    1w      CHR      1,3      0t0        6 /dev/null
docker-pr 27391 root    2w      CHR      1,3      0t0        6 /dev/null
docker-pr 27391 root    4u     IPv4 56136619      0t0      TCP *:30081 (LISTEN)
docker-pr 27391 root    6u  a_inode     0,13        0    10489 [eventpoll]
docker-pr 27391 root    7r     FIFO     0,12      0t0 56136620 pipe
docker-pr 27391 root    8w     FIFO     0,12      0t0 56136620 pipe

查看进程的绝对路径

sudo ls -al /proc/27391/exe #查看pid为27391的进程文件绝对路径

Bash
root@iZf8z2h32lxjknhkgifotzZ:/etc# sudo ls -al /proc/27391/exe #查看pid为27391的进程文件绝对路径
lrwxrwxrwx 1 root root 0 May  9 21:31 /proc/27391/exe -> /usr/bin/docker-proxy

文件

作用

cwd

符号链接(类似快捷方式)的进程运行目录

exe

符号链接(类似快捷方式)的执行程序的绝对路径

cmdline

符号链接(类似快捷方式)的进程运行目录

environ

记录进程运行时系统的环境变量

CPU

CPU也成为中央处理器、主处理器或单处理器,是执行计算机指令的关键部件,某服务器有一个进程占用的CPU远超平时,那么可能被植入了挖矿病毒

内存

程序启动时会被系统读入内存。在执行的过程也不断的在内存中申请新的空间。

排查话术:最近内存是否突然升高持续不下,如果是那么可能被植入挖矿病毒

Bash
root@iZf8z2h32lxjknhkgifotzZ:/proc/27391# ps -aux| sort -k3nr | head -10
root     29734  1.8 12.7 3227064 246072 ?      Sl   May09 382:50 /host/usr/local/.veinmind/agent/cgt2tppqlausu8e73sm0/resource/cwagent/engine/cloudwalker-engine remote -r /usr/local/.veinmind/agent/cgt2tppqlausu8e73sm0/resource/cwagent/engine
root      2027  1.5  1.1 151956 23052 ?        S<sl Apr15 884:03 /usr/local/aegis/aegis_client/aegis_11_55/AliYunDunMonitor
root     21788  0.9  4.2 621828 82264 ?        Sl   May10 186:35 /usr/local/bin/python /xuexi/webserverListener.py
root      2829  0.7  0.9 1180916 19320 ?       Sl   Apr15 435:52 /www/server/panel/pyenv/bin/python3 /www/server/panel/BT-Task
root      1939  0.3  0.4 103232  9404 ?        S<sl Apr15 216:24 /usr/local/aegis/aegis_client/aegis_11_55/AliYunDun
root       813  0.2  1.1 1512036 22832 ?       Ssl  Apr15 157:51 /usr/bin/containerd
root     27144  0.1  2.4 1988832 47680 ?       Ssl  May09  40:15 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     27575  0.1  1.2 746192 25088 ?        Ssl  May09  34:21 ./manager daemon -cS https://veinmind-cood.rivers.chaitin.cn/server/ca -sS https://veinmind-cood.rivers.chaitin.cn/server/list -sT 1 -rM {"docker":"/host/var/run/docker.sock"} -i true -rT d0b6070b5a1b94ee8ddbfe19cf23ebdcf15fe97281469508bc8425faf29e4533ad5f95c0cd3476e4833f35fbd13e923b
root     29653  0.1  1.6 4971072 31192 ?       Ssl  May09  33:40 ./agent daemon
201      27839  0.0  0.0 235576   836 ?        Ss   May09   0:00 /detector/snserver -c snserver.yml

网络带宽

带宽也就是网速的最高上限,比如家里的100/M带宽,就是每秒100M的传输速度,带宽分为上行和下行对应着上传下载,某服务器上行流量比往常高出几倍时,说明在外发大量的数据重点检查是否为正常业务。

排查话术:网络流量上下行有异常吗?有异常的话是哪个IP?

网络占用需要安装软件辅助,应急时大部分情况都不允许随意安装软件,这时候就需要和运维的网络沟通,从设备上看下流量情况。

Bash
root@iZf8z2h32lxjknhkgifotzZ:/proc/27391# apt install iftop

Bash
ip addr|ifconfig #查看网卡

Bash
root@iZf8z2h32lxjknhkgifotzZ:/proc/27391# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:65ff:feb5:d2a7  prefixlen 64  scopeid 0x20<link>
        ether 02:42:65:b5:d2:a7  txqueuelen 0  (Ethernet)
        RX packets 3090138  bytes 347864520 (347.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3129338  bytes 549001662 (549.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.59.50  netmask 255.255.240.0  broadcast 172.18.63.255
        inet6 fe80::216:3eff:fe06:b20d  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:06:b2:0d  txqueuelen 1000  (Ethernet)
        RX packets 11640363  bytes 2509529574 (2.5 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9291054  bytes 3286986917 (3.2 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 10328922  bytes 899188175 (899.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10328922  bytes 899188175 (899.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

safeline-ce: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.0.1  netmask 255.255.255.0  broadcast 169.254.0.255
        inet6 fe80::42:8dff:fe00:59e4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:8d:00:59:e4  txqueuelen 0  (Ethernet)
        RX packets 447609  bytes 54648987 (54.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 543925  bytes 44096034 (44.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth8ac3a4c: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::58fc:70ff:fe6e:a7a2  prefixlen 64  scopeid 0x20<link>
        ether 5a:fc:70:6e:a7:a2  txqueuelen 0  (Ethernet)
        RX packets 13868  bytes 743094 (743.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14288  bytes 751640 (751.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth985c90b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::6c42:83ff:fe52:79af  prefixlen 64  scopeid 0x20<link>
        ether 6e:42:83:52:79:af  txqueuelen 0  (Ethernet)
        RX packets 17754  bytes 4131408 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19560  bytes 16804256 (16.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth9d89393: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::5c1b:9ff:fe23:3170  prefixlen 64  scopeid 0x20<link>
        ether 5e:1b:09:23:31:70  txqueuelen 0  (Ethernet)
        RX packets 1687008  bytes 146103044 (146.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1222383  bytes 661877051 (661.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth9da75c0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::7c3c:d6ff:fed3:f1a6  prefixlen 64  scopeid 0x20<link>
        ether 7e:3c:d6:d3:f1:a6  txqueuelen 0  (Ethernet)
        RX packets 12649  bytes 633572 (633.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13006  bytes 658989 (658.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc1556a4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::4cb2:7bff:fed1:82b1  prefixlen 64  scopeid 0x20<link>
        ether 4e:b2:7b:d1:82:b1  txqueuelen 0  (Ethernet)
        RX packets 1145986  bytes 136982347 (136.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1160627  bytes 175992303 (175.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc5fe253: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::881:7fff:fead:1acf  prefixlen 64  scopeid 0x20<link>
        ether 0a:81:7f:ad:1a:cf  txqueuelen 0  (Ethernet)
        RX packets 1012221  bytes 644864513 (644.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1522072  bytes 127566370 (127.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

询问哪一个是业务网卡,哪一个管理网卡。

指定etho0网卡,分析流量

sudo iftop -i eth0 -P #指定etho0网卡,分析流量

Bash
root@iZf8z2h32lxjknhkgifotzZ:/proc/27391# sudo iftop -i eth0 -P #指定etho0网卡,分析流量

 网络连接

服务器每发出和接收一个TCP/UDP请求都能看到连接(短时间内)

netstat命令:

•-a 显示所有
•-n 数字形式展开连接端口
•-t 仅查看TCP连接情况
•-u 仅查看DUP连接情况
•-p 显示相关程序名

sudo netstat -antup #查看所有连接

Bash
root@iZf8z2h32lxjknhkgifotzZ:/proc/27391# sudo netstat -antup #查看所有连接
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      650/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      892/sshd            
tcp        0      0 0.0.0.0:888             0.0.0.0:*               LISTEN      1726/nginx: master  
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      4294/sendmail: MTA:
tcp        0      0 0.0.0.0:30080           0.0.0.0:*               LISTEN      27448/docker-proxy  
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      1726/nginx: master  
tcp        0      0 0.0.0.0:30081           0.0.0.0:*               LISTEN      27391/docker-proxy  
tcp        0      0 0.0.0.0:9443            0.0.0.0:*               LISTEN      27594/docker-proxy  
tcp        0      0 0.0.0.0:41766           0.0.0.0:*               LISTEN      2416/python3        
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN      4294/sendmail: MTA:
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1726/nginx: master  
tcp        0      0 169.254.0.1:55924       169.254.0.4:9002        TIME_WAIT   -                   
tcp        0      0 127.0.0.1:42648         127.0.0.1:35933         TIME_WAIT   -                   
tcp        0      0 172.18.59.50:40892      100.100.0.5:443         TIME_WAIT   -                   
tcp        0      0 127.0.0.1:54548         127.0.0.1:35933         ESTABLISHED 29734/cloudwalker-e
tcp        0    272 172.18.59.50:22         221.176.113.202:58058   ESTABLISHED 10932/sshd: root@pt
tcp        0      0 172.18.59.50:49412      100.100.30.25:80        ESTABLISHED 1939/AliYunDun      
tcp6       0      0 :::35933                :::*                    LISTEN      29653/./agent       
tcp6       0      0 :::30080                :::*                    LISTEN      27454/docker-proxy  
tcp6       0      0 :::30081                :::*                    LISTEN      27408/docker-proxy  
tcp6       0      0 :::9443                 :::*                    LISTEN      27601/docker-proxy  
tcp6       0      0 :::6666                 :::*                    LISTEN      29653/./agent       
tcp6       0      0 :::3306                 :::*                    LISTEN      27604/mysqld        
tcp6       0      0 127.0.0.1:35933         127.0.0.1:54548         ESTABLISHED 29653/./agent       
udp        0      0 127.0.0.53:53           0.0.0.0:*                           650/systemd-resolve
udp        0      0 172.18.59.50:68         0.0.0.0:*                           629/systemd-network
udp        0      0 127.0.0.1:323           0.0.0.0:*                           889/chronyd         
udp6       0      0 ::1:323                 :::*                                889/chronyd         

状态

作用

LISTEN

监听中

TIME-WAIT

等待一段时间确保远程TCP中断请求

ESTABLISHED

打开着的连接

SYN_RECV

接收和发送连接请求后等待缺连接请求确认的情况

CLOSING

等待远程TCP对连接中断的请求

CLOSE

连接完全关闭

关闭进程

这里注意一下,关停服务后进程是否会复活,如果恶意进程被kill后重新启动,那么肯定有其它地方有自启动方法,继续排查守护进程、定时任务、系统配置、服务和系统文件。

sudo kill -9 1434

0X04威胁情报

威胁情报是识别和分析网络威胁的过程。威胁情报平台可以查出一些域名和P地址得信誉度,一旦发现它们存 在网络攻击痕迹迅速封禁。

•微步在线(https://x.threatbook.com/)
•VirusTotal(https://www.virustotal.com/gui/home/upload)
•安恒威胁分析平台(https://ti.dbappsecurity.com.cn/)
•深信服威胁情报中心(https://ti.sangfor.com.cn/analysis-platform)
•VenusEye威胁情报中心(https://www.venuseye.com.cn/)
•360威胁情报中心(https://ti.360.cn/#/homepage)
•DataMining for Threat Intelligence(https://www.threaetminer.org)

0X05 排查SSH后门

SSH

SSH(Secure Shell)是一种加密的网络传输协议,通常用SSH来传输命令行和远程执行命令。

账户密码

Bash
root@iZf8z2h32lxjknhkgifotzZ:~# users
root
root@iZf8z2h32lxjknhkgifotzZ:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

/bin/bash

账户可登录,登录后使用/bin/bash解释执行脚本

/bin/false

不可登录,不会有任何提示

/usr/sbin/nologin

不可登录,拒绝用户登录

密钥篡改

~/:.ssh/

这个key涉及到免密登录

Bash
root@iZf8z2h32lxjknhkgifotzZ:~/.ssh# cat authorized_keys
root@iZf8z2h32lxjknhkgifotzZ:~/.ssh# cat known_hosts
|1|ZhXNCpYHurL/RNKO+yxXzURKUIw=|VnKy9HwMrJ5yitK915+OeHMPBmo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMtCGIXYh7bIX/LkLAy1ETtAotg6hSKVw22hxLAh+cf6vH/L72E5mvC+C5ys9eAdHw1XtOMoTRUYG5HmatFk2qY=
|1|hQBK3rjh3iFq8rEX1yuUm7HtDuo=|PopS4xEMqobOsiFLfNygl3i63XQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
|1|MThF0zD08f8sHF44mPrKep6q9SE=|Ka1yOGTc7ke2h6DlifgrXYwHuME= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=

重装覆盖

Bash
root@iZf8z2h32lxjknhkgifotzZ:~/.ssh# ls -lt /usr/bin/ssh /usr/sbin/sshd
-rwxr-xr-x 1 root root 727848 Mar 30  2022 /usr/bin/ssh
-rwxr-xr-x 1 root root 790952 Mar 30  2022 /usr/sbin/sshd

sudo touch -a -m -t 201512180130.9 /usr/bin/ssh #篡改ssh时间

0X06 定时任务

crontab

定时任务计划命令,下面几个是创建任务后保存的路径。

Bash
/var/spool/cron/ 目录里的任务以用户命名
/etc/crontab 调度管理维护任务
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
下面这些都是检查重点对象
      /etc/cron.hourly/ 每小时执行一次
      /etc/cron.daily/ 每天执行一次
      /etc/cron.weekly/ 每周执行一次
      /etc/cron.monthly/ 每月执行一次

知识扩展

/etc/cron.allow 存放可创建定时任务账户,一行一个账户名,已创建的定时任务不受影响

Bash
vulab@sechelper:~$sudo cat /etc/cron.allow
root
vulab@sechelper:~$ crontab -e
You (vulab) are not allowed to use this program (crontab)
See crontab(1) for more information

/etc/cron.deny 存放不可创建定时任务账户,一行一个账户名,已创建的定时任务不受影响

Bash
vulab@sechelper:~$ crontab -e
You (vulab) are not allowed to use this program (crontab)
See crontab(1) for more information

可以限制只有root可以创建定时任务,这样低权限用户就无法创建定时任务了。

解除的话就删除/etc/cron.deny

0X07 Rootkit排查

Rootkit

Rootkit是指其主要功能为:隐藏其他程序进程的软件,可能是一个或一个以上的软件组合。在今天,Rootkit一词更多地是指被作为驱动程序,加载到操作系统内核中的恶意软件。

rootkit原理图

Bash
vulab@sechelper:~/1337kit$ sudo python3 builder.py --config config.yml  # 编译rootkit
[sudo] password for vulab:

 ████   ████████   ████████  ██████████ █████       ███   █████
░░███  ███░░░░███ ███░░░░███░███░░░░███░░███       ░░░   ░░███
 ░███ ░░░    ░███░░░    ░███░░░    ███  ░███ █████ ████  ███████
 ░███    ██████░    ██████░       ███   ░███░░███ ░░███ ░░░███░
 ░███   ░░░░░░███  ░░░░░░███     ███    ░██████░   ░███   ░███
 ░███  ███   ░███ ███   ░███    ███     ░███░░███  ░███   ░███ ███
 █████░░████████ ░░████████    ███      ████ █████ █████  ░░█████
░░░░░  ░░░░░░░░   ░░░░░░░░    ░░░      ░░░░ ░░░░░ ░░░░░    ░░░░░
LKM Rootkit Builder
...
  LD [M]  /tmp/ItclNzX3O3hJUXQ3/project.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-109-generic'

=== File /home/vulab/1337kit/project.ko created ===

vulab@sechelper:~/1337kit$ sudo insmod project.ko # 将rootkit安装到内核
vulab@sechelper:~/1337kit$ sudo lsmod # 查看内核模块
vulab@sechelper:~/1337kit$ sudo rmmod project # 卸载内核模块

检查系统是否被植入rootkit

Bash
推荐使用两款工具
# chkrootkit
root@iZf8z2h32lxjknhkgifotzZ:/etc# sudo apt install chkrootkit
root@iZf8z2h32lxjknhkgifotzZ:/etc# sudo chkrootkit


Bash
# rkhunter
RKHunter简介
RKHunter是专业检测系统是否感染rootkit的一个工具,它通过执行一系列的脚本来确认服务器是否已经感染rootkit。在官方资料中,RKHunter可以做的事情有:
MD5校验测试,检测文件是否有改动
检测rootkit使用的二进制和系统工具文件
检测特洛伊木马程序的特征码
检测常用程序的文件属性是否异常
检测系统相关的测试
检测隐藏文件
检测可疑的核心模块LKM
检测系统已启动的监听端口
此工具也可以用于常用的入侵检测
# 安装
wget https://udomain.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar -xvzf rkhunter-1.4.6.tar.gz
./installer.sh --layout default --install(这里默认安装到/usr/local/bin下)
# 使用
rkhunter -c

然后下面会分几部分,第一部分首先是对系统命令的检查,显示ok表示正常,显示warning表示有异常,需要注意,而显示not found则无需理会

系统关键位置排查(Linux)

下面是第二部分,主要检测常见的rootkit程序,显示"Not found"表示系统未感染此rootkit

系统关键位置排查(Linux)

下面是第三部分,主要是一些特殊或附加的检测,例如对rootkit文件或目录检测、对恶意软件检测以及对指定的内核模块检测

系统关键位置排查(Linux)

下面是第四部分,主要对网络、系统端口、系统启动文件、系统用户和组配置、SSH配置、文件系统等进行检测

系统关键位置排查(Linux)

最后生成日志

系统关键位置排查(Linux)

上面每过一个阶段都需要按回车键确认,如果想让程序自动运行:

Bash
rkhunter --check --skip-keypress

放入计划任务执行,可以在crontab中加入

Bash
1 0 * * *  rkhunter --check -cronjob

这样,检测程序就会在,每天的01分执行一次,输出结果在上述提示的日志文件/var/log/rkhunter.log

rkhunter 配置

隐藏的rootkit如何删除

Rootkit在内核模块里找不到,那么就存在删除不掉的可能,这时候需要将感染系统以文件挂载到其它Linux系统上,进行清除操作。

0X08 排查系统日志

系统日志

日志文件是记录l系统运行信息的文件,Linux系统内记载很多不同类型的日志,例如:

•Linux内核消息
•登入事件
•程序错误日志
•软件安装信息

以上日志内记录系统内一些关键的信息,通过这些日志内记录的信息,可以帮助安全人员寻找到攻击者蛛丝马迹。作者整理了以下常见日志信息:

Bash
/var/log/dmesg 内核的一些信息。

/var/log/auth.log 此文件中包含系统授权信息,以及用户登录和使用的身份验证机制。

/var/log/boot.log 包含系统启动时记录的信息

/var/log/daemon.log 正在运行的各种系统后台守护程序将信息记录到此文件中。

/var/log/kern.log 包含内核记录的信息。有助于解决定制内核的故障。

/var/log/lastlog 显示所有用户的最近登录信息。这不是ascii文件。管理员可以使用lastlog命令查看此文件的内容。

/var/log/maillog和/var/log/mail.log 记录系统上运行的邮件服务器的信息。例如,sendmail将有关所有已发送项目的信息记录到此文件中。

/var/log/user.log 包含有关所有用户级日志的信息。

/var/log/Xorg.x.log 将来自x服务器的消息记录到此文件。

/var/log/btmp 此文件包含有关失败登录尝试的信息。使用最后一个命令查看btmp文件。例如,last-f/var/log/btmp|more。

/var/log/yum.log 包含使用yum安装包时记录的信息。在删除具有依赖项的包时,可以引用此文件。

/var/log/cron 每当cron守护程序(或anacron)启动cron作业时,它都会将有关cron作业的信息记录在该文件中

/var/log/secure 包含与身份验证和授权权限相关的信息。例如,sshd在这里记录所有消息,包括登录失败。

/var/log/wtmp-wtmp 文件记录所有登录和注销。

/var/log/utmp-utmp 文件允许您发现有关当前使用系统的用户的信息。

/var/log/faillog 包含失败的用户登录尝试。使用faillog命令显示此文件的内容。

/var/log/httpd/ 包含apacheweb服务器access_log和error_log以及相关的虚拟主机日志(如果设置为在此处记录)。

/var/log/apache2 包含apache web服务器access_log和error_log以及相关的虚拟主机日志(如果设置为在此处记录)。

/var/log/conman/-conman 客户端的日志文件。conman连接由conmand守护进程管理的远程控制台。

/var/log/mail/ 此子目录包含来自邮件服务器的其他日志。例如,sendmail将收集的邮件统计信息存储在/var/log/mail/statistics文件中

/var/log/audit/ 包含由Linux审核守护程序(auditd)存储的日志信息。

/var/log/settroubleshoot/ SELinux使用settroublishootd(SE TroubleshootDaemon)来通知文件安全上下文中的问题,并将这些信息记录在此日志文件中。

/var/log/samba/ 包含samba存储的日志信息,用于将Windows连接到Linux。

/var/log/sa/ 包含sysstat包收集的每日sar文件。

以上的每个文件都给大家演示一遍不太可能,这里重点是交给大家思路。如下案例:

重要的几项单独列出来:

/var/log/lastlog:显示所有用户的最近登录信息。

Bash
root@iZf8z2h32lxjknhkgifotzZ:/etc# lastlog
Username         Port     From             Latest
root             pts/0    221.176.113.202  Thu May 25 17:16:43 +0800 2023
daemon                                     **Never logged in**
bin                                        **Never logged in**
sys                                        **Never logged in**
sync                                       **Never logged in**
games                                      **Never logged in**
man                                        **Never logged in**
lp                                         **Never logged in**
mail                                       **Never logged in**
news                                       **Never logged in**
uucp                                       **Never logged in**
proxy                                      **Never logged in**
www-data                                   **Never logged in**
backup                                     **Never logged in**
list                                       **Never logged in**
irc                                        **Never logged in**
gnats                                      **Never logged in**
nobody                                     **Never logged in**
systemd-network                            **Never logged in**

登入验证日志

1.不知道日志的每一行是做什么的,去搜索

2.既然是登入验证肯定会有成功和失败,那么什么状态是成功或失败

3.除成功失败外是不是包含其它信息,如:用户名、登入来源IP地址

登入失败次数

linux登录日志文件大部分在/var/log

vulab@sechelper:/var/log$ sudo grep "Failed password" auth.log | wc -l

次数过多说明大概率被爆破

登录成功的ip,可以查看哪些是恶意登录ip

sudo grep "password" auth.log | grep -v Failed | grep -v Invalid

sudo awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(ip in ips){print ip, ips[ip]}}' auth.* | wc -l

统计攻击者IP个数

Bash
41.214.134.201 18358
189.217.194.155 9994
218.39.177.111 4713
120.48.13.143 2179
36.138.66.177 1448
139.162.114.41 861
104.248.94.181 756
188.166.57.168 431
141.94.110.90 347
23.224.143.15 307

参考文献

https://segmentfault.com/a/1190000021752790

0X09 应用日志查询

中间件日志

中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。

这里主要使用elk或者其他日志分析工具进行排查

手动排查地址:

/var/log/中间件/

主要查看access日志

Gscan

Bash
root# git clone https://github.com/grayddq/GScan.git
root# cd GScan
root# python GScan.py
root# python GScan.py --sug --pro
进行定时任务设置,异常日志将按行输出到./GScan/log/log.log,可通过syslog等服务同步日志信息。
root# python GScan.py --job #每天零点执行一次
root# python GScan.py --job --hour=2 #每2小时执行一次

360星图

比较老的一款工具,已经暂停维护了,目前只支持使用说明:

第一步:打开配置文件/conf/config.ini:填写日志路径[log_file配置项],其他配置项可以选择配置

第二步:点击start.bat,运行程序;

第三部:运行完毕,分析结果在当前程序根目录下的/result/文件夹下。

1.apache+Linux日志默认路径:/etc/httpd/logs/accesslog或/var/log/httpd/accesslog
2.apache+win2003日志默认路径:D:xamppapachelogsaccess.log、D:xamppapachelogserror.log
3.IIS6.0+win2003默认日志文件:C:WINDOWSsystem32Logfiles
4.IIS7.0+win2003 默认日志文件:%SystemDrive%inetpublogsLogFiles
5.nginx 日志文件:日志文件在用户安装目录logs目录下,假设安装路径为/usr/local/nginx,那日志目录就是在/usr/local/nginx/logs下面

分析纬度

时间范围内IP访问量

时间范围内对某个页面的IP访问量

时间范围内IP访问错误数

关键字搜索


往期推荐

F0R,公众号:学安全的F0R同学WINDOWS-还原攻击路径

原文始发于微信公众号(朱厌安全团队):系统关键位置排查(Linux)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月5日22:04:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   系统关键位置排查(Linux)https://cn-sec.com/archives/1784141.html

发表评论

匿名网友 填写信息