免责声明: 文章仅用于技术分享,切勿非法测试,由于传播、利用本公众号朱厌安全团队所提供的信息而造成的后果以及损失,均由使用者本人承担,本公众号朱厌安全团队以及作者不为此承担任何责任!如有侵权烦请告知,我们会立即删除并致歉!
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/
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 # 添加开机 开机
|
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) 系统关键位置排查(Linux)]()
下面是第二部分,主要检测常见的rootkit程序,显示"Not found"表示系统未感染此rootkit
![系统关键位置排查(Linux) 系统关键位置排查(Linux)]()
下面是第三部分,主要是一些特殊或附加的检测,例如对rootkit文件或目录检测、对恶意软件检测以及对指定的内核模块检测
![系统关键位置排查(Linux) 系统关键位置排查(Linux)]()
下面是第四部分,主要对网络、系统端口、系统启动文件、系统用户和组配置、SSH配置、文件系统等进行检测
![系统关键位置排查(Linux) 系统关键位置排查(Linux)]()
最后生成日志
![系统关键位置排查(Linux) 系统关键位置排查(Linux)]()
上面每过一个阶段都需要按回车键确认,如果想让程序自动运行:
Bash rkhunter --check --skip-keypress
|
放入计划任务执行,可以在crontab中加入
Bash 1 0 * * * rkhunter --check -cronjob
|
这样,检测程序就会在,每天的0时1分执行一次,输出结果在上述提示的日志文件/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访问错误数
•关键字搜索
原文始发于微信公众号(朱厌安全团队):系统关键位置排查(Linux)
评论