【红蓝对抗】第一期 Linux主机端应急响应
以下内容为助安社区【第一期红蓝对抗】,蓝队防守方总结的笔记。
红方笔记会发布在社区内部,加入金主老爷即可一起和小伙伴红蓝对抗演练,实战经验还不是唰唰涨。
了解更多金主老爷福利,访问:https://hackme.cc/
应急维度
1、特征维度,大部分是文件名
2、时间维度,从文件时间入手,去匹配业务日志里面的时间段
3、网络流量,上帝模式查看攻击,比如态感、运维镜像流量
日志
常见日志
Linux系统中有许多重要的日志文件,可用于管理和维护Linux操作系统。以下是一些常见的日志文件和它们的作用:
/var/log/messages
messages日志是所有日志中最常用的日志之一,包含系统的重要信息。messages文件记录了操作系统的所有日志消息,包括内核、系统进程和其他服务的消息。
/var/log/syslog
syslog日志文件是另一个记录系统日志的文件,记录了系统进程和其他服务的所有日志消息。syslog日志包含来自各种组件和服务的消息,包括SMTP、POP和IMAP服务,CRON作业和日志转发等。
/var/log/auth.log
auth.log日志记录用户认证、授权和访问控制相关的信息,例如通过sudo使用root权限用户进行的LDAP身份验证等。
/var/log/kern.log
kern.log日志记录所有与系统内核相关的事件和消息,如内核故障或错误,驱动程序错误,内核崩溃信息等。
/var/log/daemon.log
daemon.log日志记录所有与系统demon相关的事件和消息。this may include httpd、pcscd、and LIRC service and message.
/var/log/boot.log
boot.log日志记录Linux启动过程中的所有日志消息。
/var/log/cron
cron日志记录与定时或循环任务相关的所有消息,包括执行和失败的任务。
/var/log/dmesg
dmesg记录了通过系统启动信息输出到终端上,包括设备驱动加载、内存信息、设备探测等。
/var/log/maillog
maillog用于记录与邮件系统及其相关组件相关的所有消息,如邮件服务器和POP/IMAP服务的日志信息。
/var/log/messages
其他一些日志文件也很常见,例如Xorg.0.log(记录图形驱动程序日志信息)、authpriv(用于 记录诸如sudo、ssh等内容的安全信息)、httpd(记录Web服务器消息)等。
以上是Linux系统中常见的一些日志文件及其用途。掌握这些日志文件可以帮助您管理和维护Linux操作系统,减少运维难度。
Nginx 日志
Nginx 日志出现大量404,应该如何锁定IP地址,给我一个linux端排查命令
出现大量404错误可能是因为访问了不存在的URL,或者因为有人尝试访问不存在的URL来进行攻击。为了锁定可能的攻击来源,可以使用以下Linux端的排查命令:
查找Nginx访问日志:
sudo cat /var/log/nginx/access.log
从日志中查找404错误:
sudo awk '$9 == 404 || $7 == 404 {print}' /var/log/nginx/access.log
查找大量出现404错误的IP地址:
sudo awk '$9 == 404 || $7 == 404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
其中,第三个命令会列出出现404错误最多的IP地址。如果某个IP地址出现的次数很多,就说明很可能是攻击来源,可以通过防火墙来阻止该IP的访问:
sudo iptables -I INPUT -s 192.168.1.100 -j DROP
将上面的命令中的“192.168.1.100”替换成出现大量404错误的IP地址即可。注:防火墙命令可能会因不同Linux操作系统有所不同,建议先确认防火墙类型和命令。
SSH 日志
查看SSH登录错误日志
查看/var/log/auth.log文件,找到错误登入的日志记录:
sudo cat /var/log/auth.log
查找错误登录IP地址
sudo cat /var/log/auth.log | grep 'Failed password' | awk ' {print $(NF-3)}' | sort | uniq -c | sort -rn
这个命令会输出大量错误登录请求,并且按照IP地址进行统计。
使用ufw屏蔽攻击者的IP
将攻击者的IP地址锁定,使用以下命令将其加入ufw黑名单中:
sudo ufw insert 1 deny from 192.168.1.100 to any
将命令中的“192.168.1.100”替换成攻击者的IP地址即可。
配置SSH登录安全
为了提高SSH登录的安全性,建议采取以下措施来增加服务器安全:
禁止root用户使用SSH登录;
配置SSH密钥认证,禁止密码登录;
通过限制IP地址、配置防火墙等措施,限制SSH登录的范围;
安装和配置Fail2ban防护软件,增加服务器安全防护等。
SSH登入成功日志
要获取攻击者的IP地址,可以通过查看SSH登入日志或系统日志来分析入侵者的IP地址,并进行排查。以下是获取攻击者IP的一些方法:
查看SSH登入日志
在Ubuntu系统中,SSH登入的日志文件通常是/var/log/auth.log。使用以下命令查找所有的SSH登入日志:
sudo cat /var/log/auth.log | grep sshd
这个命令将显示所有登入服务器的用户,出现在日志中的用户都是经过SSH登入的。
您还可以使用grep命令过滤出只显示失败的登入尝试:
sudo cat /var/log/auth.log | grep sshd | grep 'Failed password'
查看系统日志
在Ubuntu系统中,系统的日志记录在/var/log/syslog中。使用以下命令搜索所有系统日志中的SSH登入记录:
sudo cat /var/log/syslog | grep sshd
获取登入者的IP地址
SSH登录日志和系统日志都会显示访问者的IP地址。查找IP地址的方法是使用grep和awk命令组合。例如,以下命令会显示/var/log/auth.log中所有失败的登录尝试并指出攻击者的IP地址:
sudo cat /var/log/auth.log | grep 'sshd.*Failed password' | awk '{print $11}' | sort | uniq -c | sort -n
其中,“$11”是指输出日志行的第11个字段,即攻击者的IP地址。
使用netstat验证结果
可以使用以下命令验证获取到的IP地址是否是攻击者IP地址:
sudo netstat -anp | grep <IP address>
后门排查
所有的篡改文件的排查都要和运维进行沟通,否则你也不知道哪个是正常应用。
内存马检测
Java内存马是指攻击者利用Java应用程序漏洞,将恶意代码隐藏在JVM进程的内存中,从而实现对服务器的控制和操作。为了排查Java内存马,可以采取以下措施:
检查Java进程
首先,使用以下命令查看当前系统上所有Java进程:
ps aux | grep java
这将列出所有正在运行的Java进程及其相应的参数。
确认Java进程归属
如果您后台运行了多个Java应用程序,可以确保每个Java应用程序的所有者都是您或是您信任的其他实体。
可以使用以下命令查看每个Java进程的所有者:
ps -ef | grep java
该命令将显示Java进程及其相关信息,包括进程所有者。
检查JVM参数
Java内存马通常会修改JVM参数,以维持持久性和控制权限。可以使用以下命令查看Java进程参数:
jps -mlv
该命令将列出所有正在运行的Java进程及其参数。您可以手动分析这些参数,确定是否存在可疑的参数值。
查看Java类和包
Java内存马通常会包含可疑的Java类和包。您可以在Java内存堆栈中使用以下命令查看Java类和包:
jmap -histo <PID>
该命令将显示Java进程使用的所有类和包列表。
使用安全工具来扫描内存
您可以使用一些针对内存中的Java恶意代码的安全工具来进行检测和扫描。其中一些工具包括JavaSnoop、Jkool、Java-ML等。
webshell查杀
怀疑服务器已经存在webshell的情况下,可以采取以下措施进行排查:
检查网站文件
首先,检查网站的文件目录,看看是否存在可疑的文件或文件夹。检查以用户权限执行的文件的命令.
例如,在Linux中使用以下命令:
# root@04a386e7005c:/var/www/public# find /var/www/public -type f \( -iname "*.php" -or -iname "*.sh" \) -exec grep -iRl "eval" {} \;
/var/www/public/sese.php
/var/www/public/peiqi.php
/var/www/public/cmd.php
/var/www/public/xx.php
这个命令会在/var/www/html/目录下查找所有的.php和.sh文件,并且查找eval函数的使用情况。
检查服务端程序
排查服务端程序是否存在可疑的后门或漏洞,检查软件版本是否过时。你可以安装检测工具如chkrootkit和rkhunter,执行下面的命令:
sudo apt-get install chkrootkit rkhunter
sudo chkrootkit
sudo rkhunter --check
查找异常文件
可以通过检测系统中一些可能与webshell相关的文件或目录来排查:
找出最近被修改过的文件:
sudo find / -type f -mtime -7 2>/dev/null
查找WEB服务根目录下比较大的文件和目录:
sudo du -ah /var/www/ | grep G
找出对用户可写的文件和目录:
sudo find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -ls
找出可执行文件设置了SETUID或SETGID权限的文件:
sudo find / -perm /6000 -type f -exec ls -la {} 2>/dev/null \;
监控网络连接
在Linux服务器上,可以借助tcpdump和netstat命令来监控网络连接,看看是否有可疑的网络连接维持。例如,以下命令可以显示处于ESTABLISHED状态的TCP连接:
sudo netstat -tnpa | grep ESTABLISHED
审核系统和应用日志文件
检查系统和应用日志文件,查找可疑的行为或异常日志记录。攻击者可能会将webshell文件名隐藏在日志中,查询日志文件是很必要的。
例如,可以使用以下命令查看/var/log/auth.log文件:
sudo cat /var/log/auth.log | grep -i sshd
使用专业的安全工具扫描服务器
可以使用一些专业的安全工具,如OpenVAS、Nessus等扫描工具来检测是否存在安全漏洞和webshell。
注意:以上是排查webshell的方法,建议在了解相关知识或者请相关的安全专业人员的指导下进行相应操作,确保正确性及避免对系统造成其他问题。
环境变量
如果你怀疑环境变量被篡改了,可以采取以下措施来排查:
检查当前环境变量
使用“echo $PATH”命令查看当前环境变量,确保PATH的值是正确的。
echo $PATH
如果发现PATH的值被更改了,那么可能存在环境变量附加攻击。
检查系统环境变量
系统环境变量保存在/etc/environment中。可以使用以下命令查看它:
sudo cat /etc/environment
确保没有添加可疑的目录或路径。
检查shell配置文件
环境变量可以在用户的shell配置文件中设置。在Ubuntu系统中,常用的shell包括Bash、Zsh和Fish。可以在用户主目录中查看每个shell的配置文件:
Bash:/.bashrc、/.bash_profile、/etc/bash.bashrc、/etc/environment Zsh:/.zshrc、/etc/zsh/zshrc、/etc/environment Fish:/.config/fish/config.fish、/etc/environment
查看每个文件,确保没有添加可疑的目录或路径。
检查LD_PRELOAD变量
LD_PRELOAD环境变量可以用于预加载共享库,而攻击者可以使用它来执行恶意代码。可以使用以下命令检查LD_PRELOAD变量:
echo $LD_PRELOAD
如果有LD_PRELOAD变量被设置,将变量名/值对删除或更改为正确的值。
检查可疑文件
如果你怀疑环境变量被篡改了,可以通过检查系统上的一些可疑文件来排查:
/etc/ld.so.preload:该文件可能包含预加载恶意共享库的路径 /etc/ld.so.conf、/etc/ld.so.conf.d目录:该文件和目录可能包含指定共享库路径的配置文件。 /etc/profile、/etc/profile.d目录:该文件和目录可能包含全局环境变量配置信息。 /.bashrc、/.bash_profile、/.zshrc、/.config/fish/config.fish:这些文件包含用户的Shell配置文件。
建议采用审核文件的方式,检查文件内容是否正常,并及时删除或修改可疑文件。
检查历史命令
如果环境变量被篡改,攻击者可能已经执行了某些命令,可以使用以下命令查看历史命令:
history
查看历史命令以确定系统被修改的时间点、方式和细节。
通过上述方法,可以初步排查环境变量被篡改的问题,以进一步保障系统安全。
排查系统异常账户
如果你怀疑Linux系统中存在可疑账户,可以采取以下措施来排查:
查看所有系统账户
使用以下命令查看当前系统上所有账户:
cat /etc/passwd
该命令会列出系统上所有用户的账户信息,包括用户名、密码、UID以及家目录等信息。
查看root账户信息
root账户通常是系统管理员的账户,具有最高权限。可以使用以下命令查看root账户信息:
sudo cat /etc/passwd | grep 'root'
如果系统上有其他账户以0为UID,也表示该账户是root账户。
检查sudo访问权限
超级用户(root)可以使用sudo命令授予其他用户特权。可以使用以下命令查看系统上所有sudo用户:
sudo cat /etc/sudoers
在sudoers文件中,可以找到所有被授权的用户,并确定是否存在未知或可疑用户。
查看系统特权用户
Linux系统中有一些默认的特权用户,如lp、wheel、adm和root组等。可以使用以下命令查看这些用户:
sudo cat /etc/group | grep -E "root|adm|lp|wheel"
在这个命令中,使用“ | ”分隔符表示查找多个关键词。
检查SSH登录日志
可以查看SSH登陆日志,查找和登陆特定用户的记录、IP地址以及时间戳。可以使用以下命令查看SSH登录日志:
sudo cat /var/log/auth.log | grep ' sshd'
检查登录历史
可以查看系统中每个用户的登录历史。可以使用以下命令查看登录历史记录:
last
该命令会列出最近登录到系统的用户和他们使用的登录方式、时间和IP地址等信息。
通过上述方法,可以初步排查是否存在可疑账户,并确定账户是否正常。如果发现可疑账户,应立即停用或删除它,并确定入侵的原因,以及进一步加强系统的安全防护措施。
检查计划任务
攻击者可能会通过创建计划任务来在系统上执行恶意代码。可以使用以下命令查看所有用户的计划任务:
sudo ls -alR /etc/cron.*
sudo ls -alR /var/spool/cron/crontabs
这些命令将显示系统上的cron和crontab文件。