HEAD:在检查配置文件时,应该寻找以下异常:
- 不正常的文件权限或所有权更改
- 不寻常的配置选项或值
- 文件的时间戳与预期不符
- 文件大小与预期不符
- 不应该存在的用户或组
- 不熟悉的命令或脚本路径
使用stat命令可以查看文件的详细信息,包括权限、大小、修改时间等
如果我们提前做了文件的md5sum,就可以通过比较文件的MD5值快速定位那些文件遭到了修改
排查开机启动项
伴随开机启动,一般生产服务器很少重启,但是为防止被控机器失联,部分木马会添加开机启动项作为复活手段
1.检查rc.local文件
rc.local是一个在许多Linux发行版中用于在系统启动时运行自定义脚本的文件
cat /etc/rc.local
2.检查init.d目录
init.d目录包含了系统启动和关机时运行的脚本
ls -l /etc/init.d
3.检查systemd服务
在较新的Linux发行版中,systemd是默认的初始化系统和服务管理器
systemctl list-unit-files
systemctl list-dependencies multi-user.target
4.检查cron任务
虽然cron任务不是开机启动项,但它们在系统运行时执行,因此也需要检查
crontab -l
ls -lR /etc/cron* /etc/crontab
cat /etc/anacrontab
扩展:
__/etc/crom.allow__存放可创建定时任务账户,一行一个账户名,已经创建的定时任务不受影响
__/etc/cron.deny__存放不可创建定时任务账户,一行一个账户名,已经创建的定时任务不受影响
相关链接
5.检查bashrc文件
用户的.bashrc文件在用户登录时运行,有时会被用来添加恶意脚本
cat ~/.bashrc
6.检查profile文件
/etc/profile和/etc/bash.bashrc等文件在用户登录时执行
cat /etc/profile
cat /etc/bash.bashrc
7.检查login和logout脚本
检查/etc/login.defs和/etc/logout.d目录,看是否有不寻常的脚本
cat /etc/login.defs
ls -l /etc/logout.d
8.检查Xsession文件
如果系统使用图形界面,Xsession文件可能会在启动图形会话时运行脚本
cat /etc/X11/Xsession
9.检查/etc/inittab(对于较老的系统)
在较老的系统中,inittab文件控制着系统的启动级别
cat /etc/inittab
10.检查/tec/rc*.d目录
在一些系统中,/etc/rc*.d目录包含启动脚本
ls -l /etc/rc*.d
11. 检查/etc/init目录(Upstart)
在一些使用Upstart的系统上,/etc/init目录包含启动配置
ls -l /etc/init
排查系统配置文件
在Linux应急响应中,系统配置文件的检查是关键步骤之一,因为这些文件可能被篡改以改变系统行为或隐藏恶意活动
1. 检查/etc/passwd和/etc/shadow
检查系统用户和密码文件
cat /etc/passwd
cat /etc/shadow
2.检查/etc/group和/etc/gshadow
检查用户组信息
cat /etc/group
cat /etc/gshadow
3.检查/etc/sudoers
检查哪些用户和组有sudo权限
cat /etc/sudoers
4. 检查/etc/hosts和/etc/hosts.allow、/etc/hosts.deny
检查本地网络配置和允许/拒绝的连接
cat /etc/hosts
cat /etc/hosts.allow
cat /etc/hosts.deny
5. 检查/etc/resolv.conf
检查DNS配置
cat /etc/resolv.conf
6. 检查/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-*
检查网络接口配置
cat /etc/network/interfaces
ls -l /etc/sysconfig/network-scripts/ifcfg-*
7. 检查/etc/ssh/sshd_config
检查ssh服务配置
cat /etc/ssh/sshd_config
8. 检查/etc/inetd.conf和/etc/xinetd.conf
检查网络守护进程服务配置
cat /etc/inetd.conf
cat /etc/xinetd.conf
9. 检查/etc/rsyslog.conf和/etc/syslog.conf
检查系统日志配置
cat /etc/rsyslog.conf
cat /etc/syslog.conf
10.检查/etc/fstab
检查文件系统挂载点
cat /etc/fstab
11.检查/etc/aliases和/etc/mail/aliases
检查邮件别名配置
cat /etc/aliases
cat /etc/mail/aliases
12.检查/etc/pam.d/目录
检查认证模块配置
ls -l /etc/pam.d/
13.检查/etc/audit/audit.rules
检查审计规则
cat /etc/audit/audit.rules
14. 检查/etc/login.defs
检查登录相关配置
cat /etc/login.defs
15. 检查/etc/securetty
检查哪些TTY允许root登录
cat /etc/securetty
16. 检查/etc/sysctl.conf
检查内核参数配置
cat /etc/sysctl.conf
17. 检查/etc/issue和/etc/issue.net
检查系统登录前的信息
cat /etc/issue
cat /etc/issue.net
排查各项资源异常
1.系统资源使用情况
-
查看cpu使用情况
查看实时的系统资源使用情况
top
或者htop
查看每个cpu核心的使用情况
mpstat -P ALL 1
- 查看内存使用情况
查看内存使用情况,以MB为单位
free -m
监控虚拟内存统计信息
vmstat 1
- 查看磁盘使用情况
查看磁盘空间使用情况
df -h
查看指定目录的磁盘使用情况
du -sh /path/to/directory
- 查看系统负载
uptime
- 查看网络使用情况
查看网络连接、端口监听和进程信息
netstat -tunapl
查看实时的网络流量
iftop
或者nethogs
2.异常进程排查
- 查找异常进程
查看所有进程及其资源使用情况
ps aux | less
查看CPU使用率最高的进程
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head
查看内存使用率最高的进程
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head
- 分析进程
跟踪进程的系统调用和信号
strace -p <pid>
查看进程打开的文件
lsof -p <pid>
3.登录日志和系统
- 查看登录日志
查看成功的登录尝试
last
查看失败的登录尝试
lastb
- 审计系统
查看当前的审计规则
auditctl -l
搜索最近的审计日志中的AVC(访问向量缓存)消息
ausearch -m avc -ts recent
4.文件系统检查
- 查找异常文件
查找SUID文件
find / -type f -perm -4000
查找大于100MB的文件
find / -type f -size +100M
- 文件完整性检查
检查RPM数据库中的文件完整性
rpm -Va
检查包的完整性(对于基于Debian的系统)
apt-get check
5.系统服务和内核模块
- 查看启动的服务
查看正在运行的服务
systemctl list-units --type=service --state=running
- 查看加载的内核模块
列出已加载的内核模块
lsmod
6.日志分析
- 分析日志系统
查看最新的系统日志
journalctl -xe
查看包含“error”的系统日志
cat /var/log/syslog | grep -i error
- 分析安全日志
查看安全相关的日志
cat /var/log/secure
7.检查网络配置
- 查看网络配置
查看网络接口配置
ip a
查看iptables规则
iptables -L
威胁情报
1. 理解威胁情报
威胁情报是指有关已知的威胁和漏洞的信息,包括攻击者的行为、方法、工具、基础设施和意图。它通常由以下部分组成:
- 攻击者的信息:如IP地址、域名、URLs、邮箱地址等
- 恶意软件特征:如哈希值、签名、行为模式等
- 漏洞信息:包括已知的漏洞及其可能的利用方式
- 安全事件:关于其他组织遭受的攻击的信息
2. 获取威胁情报
-
订阅威胁情报服务,如 AlienVault OTX, ThreatCrowd, VirusTotal 等
-
加入安全社区和论坛,如 SANS Internet Storm Center, Security Stack Exchange 等
-
关注安全博客和研究者发布的最新动态
3. 集成威胁情报到应急响应流程
- 自动化情报收集:使用工具如
curl
,wget
或专用的威胁情报API来定期获取情报 - 情报处理:将收集到的情报进行格式化处理,以便于后续分析
- 情报分析:分析情报与当前系统日志、网络流量等数据的关联性
4. 威胁情报平台
威胁情报平台可以查出一些域名和IP地址的信誉度,一旦发现它们存在网络攻击痕迹迅速封禁
-
微步在线
-
virustotal
-
安恒威胁分析平台
-
深信服威胁情报中心
-
VenusEye威胁情报中心
-
360威胁情报中心
-
Data Mining for Threat Intelligence
排查SSH后门
- 检查SSH配置文件
查看SSH配置文件/etc/ssh/sshd_config
,确认是否有异常的配置项
cat /etc/ssh/sshd_config
- 检查ssh登录日志
查看SSH登录日志,通常位于/var/log/auth.log
或/var/log/secure
,寻找异常的登录尝试或成功的登录记录
grep 'sshd' /var/log/auth.log
grep 'sshd' /var/log/secure
- 检查ssh密钥文件
检查~/.ssh/authorized_keys
文件,确认是否有未知的公钥
cat ~/.ssh/authorized_keys
- 检查异常进程
使用ps
命令检查是否有异常的SSH进程
ps aux | grep ssh
- 检查网络连接
使用netstat
或ss
命令检查是否有异常的网络连接
netstat -tunapl | grep ssh
ss -tunapl | grep ssh
Rootkit
Rootkit是一种恶意软件,它被设计用来隐藏自己的存在和活动,同时允许未授权的用户获得对系统的管理员(root)级别的访问权限。Rootkit通常在系统被攻陷后植入,它可以修改系统的核心组件,使得攻击者能够在不被发现的情况下控制系统
1. 准备工作
- 确保有一个干净的环境,最好是从一个可信任的Live CD启动系统,以避免rootkit在运行时干扰检测工具
- 禁用网络连接,以防止rootkit与外界通信
2. 使用内置工具检查系统
ps
和top
:检查是否有不熟悉的进程运行。lsmod
:检查加载的内核模块。netstat
或ss
:检查网络连接和监听端口。dmesg
:检查内核日志消息
3. 使用专用工具检测rootkit
- rkhunter:
rkhunter --check
- chkrootkit
chkrootkit
- unhide:这是一个用于检测隐藏进程和端口的工具
4. 检查文件完整性
Tripwire:如果你之前安装了Tripwire并生成了基线,你可以使用它来检查文件完整性
tripwire --check
5. 重启到安全模式
如果可能,重启系统到安全模式或单用户模式,这样可以防止rootkit在启动时加载
6. 移除rootkit
-
检测到rootkit,根据具体工具的指导移除它,可能需要删除文件、停止服务或卸载内核模块
-
修复任何被rootkit利用的漏洞
-
更改所有密码,特别是root用户和其他管理员账户的密码
-
如果Warning但是没有排查出来,可将warning的命令在同版本系统内拷贝过来一份,将原有的删除
-
如何删除隐藏的rootkit:
-
如果知道它的名字可直接删除
-
Rootkit在内核模块里找不到,那么就存在删除不掉的可能,这时候需要将感染系统以文件挂载到其他Linux系统上进行清楚操作
-
7. 防御措施
- 更新系统补丁和软件包
- 安装和配置入侵检测系统(IDS)和入侵防御系统(IPS)
- 实施更严格的安全策略,如使用AppArmor或SELinux
注意事项
- 在处理rootkit时,可能会遇到它们尝试隐藏自身或干扰检测工具的情况。
- 如果不熟悉这些工具或过程,可能需要专业的帮助。
- 确保备份重要数据,以防在移除rootkit的过程中发生数据丢失。
排查系统日志
1.理解日志文件
Linux系统中有多种日志文件,它们通常位于__/var/log/__目录下。以下是一些常见的日志文件:
/var/log/messages
或/var/log/syslog
:系统日志,包含系统级别的消息/var/log/auth.log
或/var/log/secure
:认证相关的日志,包括登录尝试和授权信息/var/log/kern.log
:内核日志,记录内核相关的消息/var/log/cron.log
:Cron作业的日志/var/log/boot.log
:系统启动过程中的日志
2. 查看日志文件
-
使用
cat
、less
、more
或tail
命令查看日志文件内容。bash
tail -f /var/log/auth.log
使用
-f
选项可以实时监控日志文件的更新。 -
使用
grep
命令搜索特定的关键词或模式。grep "Failed password" /var/log/auth.log
3. 分析日志
- 查找异常的登录尝试、失败的认证、未知的IP地址或异常的用户活动
- 检查日志中的时间戳,以确定事件发生的时间
- 注意日志中的错误和警告消息
4. 日志分析工具
-
ausearch:用于搜索Audit框架的日志
ausearch -m USER_AUTH -ts recent
-
logwatch:一个日志分析工具,可以定期发送日志分析报告
logwatch --range today --detail high
5. 日志轮转
-
检查日志轮转配置,确保日志文件没有被不当地轮转或删除
cat /etc/logrotate.conf
6. 审计和监控系统
-
如果系统配置了审计(Audit)功能,可以使用以下命令查看审计日志
ausearch -m avc -ts today
7. 保留证据
在分析日志时,确保保留所有相关证据,以便进行进一步的分析或调查
注意事项
- 日志文件可能会非常大,因此需要高效地搜索和分析
- 确保日志文件的完整性,避免在分析过程中修改它们
- 如果系统受到攻击,攻击者可能会尝试清除日志,因此需要检查日志文件的完整性
中间件日志排查
在Linux应急响应中,除了系统日志之外,中间件日志也是非常重要的调查对象。中间件(如Web服务器、数据库服务器等)的日志可以提供关于应用程序层和其交互的详细信息
1. 确定中间件类型
首先,需要确定系统中运行的中间件类型,常见的有:
- Apache HTTP Server
- Nginx
- MySQL
- PostgreSQL
- MongoDB
- Tomcat
- JBoss
- Redis
2. 定位中间件日志文件
不同中间件的日志文件位置可能不同,以下是一些常见中间件的日志文件位置:
-
Apache:
/var/log/apache2/access.log
/var/log/apache2/error.log
-
Nginx:
/var/log/nginx/access.log
/var/log/nginx/error.log
-
MySQL:
/var/log/mysql/mysql.log
/var/log/mysql/error.log
-
PostgreSQL:
/var/log/postgresql/postgresql-*.log
-
MongoDB:
/var/log/mongodb/mongodb.log
-
Tomcat:
/var/log/tomcat/catalina.out
-
JBoss:
/var/log/jboss/server.log
-
Redis:
/var/log/redis/redis-server.log
3. 查看和分析日志
-
使用 cat,less,more,tail 等命令查看日志文件
tail -f /var/log/nginx/access.log
-
使用 grep,awk,sed等工具进行日志筛选和分析
grep "404" /var/log/apache2/error.log
4. 查找异常模式
- 查找异常的HTTP状态码(如404、500等)
- 检查频繁的访问模式或来自同一IP地址的大量请求
- 查找SQL注入、XSS攻击或其他Web攻击的迹象
- 检查认证失败、权限更改或配置更改的记录
5. 使用日志分析工具
-
GoAccess:用于实时Web日志分析和报告
goaccess /var/log/nginx/access.log -a
-
ELK Stack(Elasticsearch, Logstash, Kibana):用于更高级的日志管理和分析
补充
1. 配置文件检查:
- 自动化工具: 可以使用自动化工具(如 tripwire, aide)定期检查配置文件的完整性,并生成基线进行比较
- 版本控制: 使用版本控制系统(如 git)管理配置文件,可以方便地追踪文件的修改历史和回滚到安全状态
2. 开机启动项排查:
- systemd 分析: 可以使用
systemctl status
命令查看服务的状态和依赖关系,更深入地分析启动项 - 环境变量: 检查环境变量,如
PATH
,LD_LIBRARY_PATH
等,确保没有添加恶意路径
3. 系统配置文件排查:
- 审计规则: 除了
/etc/audit/audit.rules
,还需要检查/etc/audit/rules.d/
目录下的规则文件 - SELinux: 如果系统启用了 SELinux,需要检查 SELinux 的状态和策略配置
4. 资源异常排查:
- 性能分析工具: 使用性能分析工具(如 perf, atop)更深入地分析系统资源的消耗情况
- 异常网络流量: 使用网络流量分析工具(如 wireshark, tcpdump)分析异常的网络流量
5. 日志分析:
- 日志聚合: 使用日志聚合工具(如 ELK Stack, Graylog)将来自不同系统的日志集中管理,方便进行统一分析和监控
- 日志分析工具: 使用日志分析工具(如 splunk, logstash)进行更高级的日志分析和可视化
6. 中间件日志排查:
- 特定中间件工具: 使用特定中间件的日志分析工具,例如 Apache 的 mod_log_analyzer, Nginx 的 logrotate 等
- 应用程序日志: 除了中间件日志,还需要分析应用程序自身的日志,以获取更详细的错误信息和攻击迹象
7. 威胁情报:
- 实时情报: 获取实时威胁情报,例如使用威胁情报 API 或订阅实时警报服务
- 情报共享: 与其他组织共享威胁情报,例如通过 ISAC (Information Sharing and Analysis Center) 或 CERT (Computer Emergency Response Team)
8. Rootkit 检测:
- 内存分析: 使用内存分析工具(如 Volatility)检测内存中的 rootkit 活动和恶意代码
- 文件系统分析: 使用文件系统分析工具(如 The Sleuth Kit)分析文件系统的结构和内容,寻找 rootkit 隐藏的证据
9. 证据收集:
- 取证工具: 使用取证工具(如 Autopsy, The Sleuth Kit)收集和分析证据,以便进行深入调查和取证分析
- 证据保存: 将收集到的证据进行备份和保存,确保其完整性和可追溯性
10. 漏洞管理:
- 漏洞扫描: 使用漏洞扫描工具(如 Nessus, OpenVAS)定期扫描系统漏洞,并及时进行修复
- 补丁管理: 建立补丁管理流程,确保系统及时更新安全补丁
11. 安全意识培训:
- 安全意识培训: 定期对员工进行安全意识培训,提高员工的安全意识和防范能力
12. 应急响应计划:
- 应急响应计划: 制定详细的应急响应计划,明确应急响应流程和职责,确保能够快速有效地应对安全事件
13. 定期演练:
- 定期演练: 定期进行应急响应演练,检验应急响应计划的可行性和有效性,并及时进行改进