介绍了Linux入侵排查的常规思路和步骤,包括查看文件、查看进程和网络连接等,以及排查恶意文件、后门和恶意进程。同时,还涵盖了Web入侵、系统入侵、病毒木马、信息泄露和网络流量的排查技术。
Linux系统入侵排查与应急响应技术
- Web入侵:
- SQL注入:攻击者利用Web应用程序的安全漏洞,通过输入恶意的SQL代码,从而实现对数据库的非法操作。
- 跨站脚本(XSS):攻击者将恶意脚本注入到受害者访问的网站,从而窃取用户信息或者实施其他恶意行为。
- 跨站请求伪造(CSRF):攻击者利用受害者在目标网站上的登录状态,伪造受害者的请求来执行非预期的操作。
- 文件包含漏洞:攻击者通过包含恶意文件,利用服务器上的文件包含漏洞来执行恶意代码。
- 目录遍历:攻击者通过漏洞访问Web服务器上不应该被公开的文件和目录,获取敏感信息。
- 系统入侵:
- 未授权访问:攻击者利用未经授权的账户、服务或者系统漏洞来访问受保护的资源。
- 提权攻击:攻击者通过漏洞或者恶意程序,将自己在系统中的权限提升到更高级别,从而控制整个系统。
- Pass-the-Hash攻击:攻击者窃取用户的哈希密码,绕过密码验证,直接利用哈希值进行认证,进一步渗透系统。
- 内网渗透:攻击者在成功入侵目标网络后,对内部系统进行进一步的攻击,以获取更多信息和权限。
- 病毒木马:
- 僵尸网络:攻击者利用木马程序控制大量受感染主机,形成僵尸网络。
- 恶意广告:攻击者通过在合法广告中嵌入恶意代码,诱导用户点击,进而感染目标系统。
- 挖矿木马:攻击者利用恶意程序在受感染主机上进行加密货币挖矿,消耗系统资源。
- 信息泄露:
- 钓鱼攻击:攻击者通过伪造电子邮件或网站,诱导受害者泄露敏感信息,如用户名、密码等。
- 社会工程学:攻击者通过社交技巧获取受害者的信任,从而窃取敏感信息。
- 配置错误:由于错误的配置设置,导致敏感数据被公开或泄露。
- 网络流量:
- SYN泛洪攻击:攻击者向目标系统发送大量伪造的TCP SYN包,导致目标系统资源耗尽,无法正常响应其他用户的请求。
- ICMP泛洪攻击:攻击者通过发送大量的ICMP(Internet Control Message Protocol)数据包给目标系统,导致其网络资源耗尽。
- 反射放大攻击:攻击者伪造目标IP地址,向大量使用某种协议(如DNS、NTP)的服务器发送请求,使这些服务器的响应数据同时涌向目标系统,导致网络拥堵或者服务不可用。
- Botnet攻击:攻击者利用僵尸网络(Botnet)发动大规模的分布式拒绝服务(DDoS)攻击,以达到瘫痪目标网络或者服务的目的。
- ARP欺骗:攻击者通过发送伪造的ARP(Address Resolution Protocol)数据包,篡改目标网络中的ARP缓存,从而进行中间人攻击或者实现网络流量劫持。
常规排查思路:
查看历史命令 → 排查用户信息 → 排查端口进程 → 排查文件修改 → 清理后门 → 查找攻击源 → 分析原因
相关步骤核心:
- 文件分析
- a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件;
- 文件日期:
find / -type f -mtime -7
- 新增文件:
find / -type f -ctime -1
- 可疑/异常文件:
find / -type f -name "*.sh”
- 最近使用文件:
ls -lt /path/to/directory | head -n 10
- 浏览器下载文件:通常,浏览器下载的文件默认保存在用户的
~/Downloads
目录下。您可以检查此目录下的文件。
- b) Webshell 排查与分析;
- 查找可疑文件:查找网站目录下的可疑文件,尤其是具有特定文件扩展名(如.php、.jsp、.asp、.aspx、.pl等)的文件。可以使用
find
命令进行查找,例如,在网站根目录下查找所有.php
文件:find /path/to/website/root -type f -name "*.php”
- 文件内容分析:检查可疑文件的内容,查找一些常见的Webshell特征,如执行命令的函数(如
eval
、exec
、passthru
、system
等)、隐藏技巧(如base64_decode
、gzinflate
等)以及常见的Webshell关键词(如"Webshell"、"C99"、"r57"等)。可以使用grep
命令进行文本搜索,例如,查找包含eval
的所有.php
文件:find /path/to/website/root -type f -name "*.php" -exec grep -i -l "eval" {} \;
- c) 日志分析:分析网站访问日志(如Apache的access.log、error.log等),查找异常的访问记录、请求参数和返回值。这有助于发现Webshell的使用迹象以及可能泄露的敏感信息。
- d) 文件完整性检查:如果网站采用了开源的CMS(如WordPress、Joomla、Drupal等),可以将文件与官方版本进行比对,以发现潜在的篡改。可以使用文件完整性检查工具(如AIDE、Tripwire)或者手动进行比对。
- e) 恶意软件扫描:使用杀毒软件或恶意软件扫描工具(如ClamAV)对系统进行全面扫描,以查找和清除潜在的恶意软件。
- 进程分析
- a) 当前活动进程、远程连接;
- 使用
ps
命令查看当前运行的进程。例如,使用以下命令查看详细的进程列表:ps aux
- 使用
pstree
命令查看进程树,以便更好地理解进程间的关系:pstree -a
- 使用
who
和w
命令查看当前登录的用户及其活动:who
、w
- 使用
last
命令查看系统的登录记录 - 使用
ss
或netstat
命令查看当前的网络连接以及与之关联的进程。例如:sudo ss -tunap
sudo netstat -tunap
- b) 启动进程、计划任务;
- 使用
systemctl
命令查看启动的系统服务:systemctl list-units --type=service --all
cron
是一个经典的Linux计划任务工具。cron
的计划任务分为系统级别和用户级别。要查看系统级别的计划任务,请查看/etc/crontab
文件以及/etc/cron.d
目录下的文件。要查看用户级别的计划任务,可以使用crontab
命令:crontab -l
;这将显示当前用户的crontab
条目。要查看其他用户的计划任务,请使用-u
选项,例如:sudo crontab -l -u otheruser
- 使用
initctl
命令查看Upstart
启动的服务:initctl list
- 检查
/etc/init.d/
目录下的启动脚本。
- c) 进程工具分析:Windows 使用 Pchunter、 Linux 使用 Chkrootkit 或 Rkhunter;
- d) 网络连接和监听端口:使用
netstat
、ss
、lsof
等工具检查当前的网络连接、监听端口以及与之关联的进程。这有助于发现异常的远程连接和潜在的后门。例如,使用netstat
命令显示所有当前连接和监听端口:sudo netstat -tulpen
- e) CPU和内存使用:使用
top
、htop
或ps
等工具查看系统中占用资源较高的进程。异常的高CPU或内存使用可能是恶意进程的迹象。例如,使用ps
命令查看按CPU使用率排序的前10个进程:ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
- f ) 系统调用跟踪:使用
strace
工具跟踪可疑进程的系统调用,以了解其行为和可能的恶意操作。需要谨慎使用此方法,因为strace
可能会影响进程性能。
- g) 进程间通信分析:检查进程间通信(如Unix套接字、信号、共享内存等),以找到可能的异常行为。可以使用
lsof
、ipcs
等工具进行分析。
- 系统分析
- a) 环境变量:
- 使用
env
命令列出当前用户的环境变量; - 使用
printenv
命令查看特定环境变量; - 检查
/etc/profile
、/etc/profile.d/
、/etc/environment
和用户的.bashrc
、.bash_profile
等配置文件,以查找异常的环境变量设置。
- b) 帐号信息:
- 查看
/etc/passwd
文件以获取系统用户列表,并检查异常的用户。 - 查看
/etc/group
文件以获取系统用户组列表,并检查异常的用户组。 - 使用
lastlog
命令查看用户的最后登录时间:
- c) History;
- 查看各用户的命令历史记录,通常位于用户主目录下的
.bash_history
文件中。 - 使用
history
命令查看当前用户的命令历史: - 检查系统中的
.bash_history
文件的权限和所有权,以确保它们没有被篡改。
- d) 系统配置文件;
- 检查
/etc
目录下的关键配置文件(如/etc/fstab
、/etc/hosts
、/etc/sysctl.conf
等),以确保它们没有被篡改。可以使用版本控制系统(如git
)或配置管理工具(如ansible
、chef
、puppet
等)来跟踪配置文件的更改。 - 使用文件完整性检查工具(如
AIDE
、Tripwire
等)监控关键系统文件的更改。
- 日志分析
- a) 操作系统日志:
- 在
/var/log/
目录下,关注以下日志文件: auth.log
:验证和授权相关信息,如登录尝试和sudo
命令的使用。syslog
和messages
:系统日志和内核消息。kern.log
:内核日志。secure
:安全相关日志,如sshd
登录尝试。faillog
:登录失败记录。boot.log
:系统启动日志。- 使用
journalctl
命令查询systemd-journald
服务收集的日志。 - 使用
grep
、awk
等文本处理工具分析日志文件,寻找可疑活动和异常事件。
- b) 应用日志分析:
- 根据使用的Web服务器(如Apache、Nginx等),检查
access.log
和error.log
文件,通常位于/var/log/apache2/
或/var/log/nginx/
目录下。 - 分析数据库服务(如MySQL、PostgreSQL等)的日志,通常位于
/var/log/mysql/
或/var/log/postgresql/
目录下。 - 关注其他应用程序的日志,如邮件服务(如
Postfix
、Dovecot
等)、DNS服务(如BIND
)、文件传输服务(如vsftpd
)等。这些日志通常位于/var/log/
目录下的相应子目录中。 - 使用日志分析工具(如
Logwatch
、ELK
堆栈等)自动分析和汇总日志数据,以便快速发现异常和可疑活动。
用户信息排查:
cat /etc/shadow ### 系统影子文件 cat /etc/group ### 系统组文件 ### 查看历史记录 history history -c ###删除记录,但不会删除保存在文件中的记录 cat /home/username/.bash_history last lastlog id who ###当前登录系统的所有用户 w users usermod -L user usermod -r user
系统用户账户相关的文件格式
A、用户信息文件:/etc/passwd 格式:用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的shell B、系统影子文件:/etc/shadow 格式:用户名:加密后的密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期的警告天数:密码过期后的宽限天数:账号失效实践:保留
进程端口排查
netstat -antlp ###检查端口的连接情况 netstat -antlp | grep 18176 top ###动态查看进程 ls -l /proc/18176/exe lsof -p 18176 lsof -c sshd lsof -i:33946 fuser -n top 3394 pstree ###进程树 ps aux ###静态查看进程 ps aux | grep ssh ps aux --sort -pcpu #静态查看进程,根据cpu的使用情况进行排列 ps aux --sort -pmen #静态查看进程,根据内存使用情况进行排列 ps -p PID -o lstart kill -9 pid
系统服务排查
service --status-all ###枚举主机所有服务 chkconfig -list ###列出所有的服务
当发现杀死进程后,进程会重新启动,则说明它有守护进程,应检查是否有可疑定时任务
cat /etc/anacrontab ###查看anacron异步定时任务 crontab -l ###枚举定时任务
RPM软件包检查,Linux系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看是否有命令被替换了
rpm -Va