技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

Whoamifuck:Linux 应急响应利器的深度解析

项目背景与痛点

在当前高度复杂的网络环境中,Linux 系统遭受入侵事件时有发生。然而,传统的排查和溯源手段繁琐、物理过程冗长,并且需要多个工具的配合使用。这不仅耗费时间,还容易产生不可逆的误导信息。而Whoamifuck则旨在提供一个快速、准确且高效的解决方案,用以解决这一痛点。

该项目旨在迅速定位并溯源异常用户登录情况,高效排查入侵信息,进而还原攻击链。此类工具在安全应急响应和运维管理场景中极其重要,尤其是在突发入侵事件发生时,时间就是一切。

核心技术揭秘

架构与实现原理

Whoamifuck通过灵活的话题划分和事件收集机制,实现了快速定位异常操作。其设计的核心在于高效的数据处理和精准的异常识别。下面是一张简化版的技术架构示意:

graph TD A[用户登录日志收集] --> B{"日志筛选与预处理"} B -->|"匹配失败"| D[生成异常日志] B -->|"匹配成功"| C[记录正常登录] C --> E[异常操作识别] E --> F[攻击链关联] F --> G[溯源结果展示] D --> G

日志收集模块抓取系统日志,经过筛选和日志预处理模块的能力筛选有效信息,并将这些信息传递给异常操作识别模块。如果发现有异常行为,则进一步利用攻击链关联功能进行深入探测。最终,生成溯源结果并展示。这样一套流程,使得Whoamifuck不论在快速定位异常,还是攻击事件的全程排查上都表现出色。

数据处理与异步支持

项目采用了纵向抽样技术,结合全局标记和局部追踪机制,能够高效处理大量日志数据。此外,模块化的异步处理能力是其技术亮点之一,确保系统在高并发环境下仍能保持高效工作。

功能亮点与差异

相较同类工具,Whoamifuck最大的优势在于其针对当前安全事件的快速响应速度与高效的数据处理能力。同时,它支持多种日志格式的解析,灵活的配置机制大幅提升了适用范围。正是因为有了这些独特设计,使其在同类工具中脱颖而出。

此外,灵活的话题划分机制可以针对特定的入侵行为进行快速定位和取证,显著加快了事件响应时间。

应用场景与落地建议

该工具最适合用于Linux运行环境下,特别是在存在高并发登录请求且安全需求较高的运维和应急响应场景中。使用时必须确保日志安全,避免恶意篡改。另外,为确保正常运行,建议加入定期的性能测试与日志清理。

综合评价

Whoamifuck在应急响应领域的表现可圈可点:高效的数据处理机制,配合模块化的异步支持,使它在处理大量数据时依然表现出色,异常发现快速准确。然而,该项目也存在文档详尽性略显不足之处,这可能不便于初次使用者快速了解并掌握。除此之外,社区活跃程度有待加强,以便更快吸收反馈,不断完善工具。总体而言,它值得一试,特别是在需要高效处理异常事件和高效溯源排查的场景中。

语言占比

Rust
Shell

Release

README

中文 | English

司稽 | Who

[!note] 司稽,察留连不时去者 ——《周礼·司稽》
司稽作为地官的属官,其职责就是确保市场的正常运行和人员的有序流动,对于那些违反规定、扰乱市场秩序的行为进行及时的制止和处罚。

Important 重要

工具仅作为辅助,仅作为攻防技术学习交流,不可用于非法用途。下载则代表同意。

ES_T0001 介绍

司稽(Whoamifuck或Chief-Inspector,简称"who"),永恒之锋发布的第一款开源工具,这是一款由shell编写的Linux应急响应脚本,能对基本的检查项进行输出和分析,并支持一些扩展的特色功能。

该工具目前实现的功能基本满足了应急响应的基本需求,后续将加入更多的入侵检测点,并完善代码。如有新的功能建议,可提issue。

为什么不使用python,因为python依赖多,版本差异大,shell原生支持,除个别少数shell语法不同,大部分unix,linux基本都支持bash shell。

AppFlowy Github - how to star the repo

信使(courier) 服务是永恒之锋开发的一款用于自动化邮件通知的客户端程序。配置信使服务可查看WIKI - 信使配置指南

[!tip] 凡是bug提交者,赋予漏洞编号,并在github更新追加贡献者 WHOK-ID
开设司稽应急知识库,方便查阅相关知识点用于手工排查和学习。 WHOK-WIKI

AppFlowy Github - how to star the repo

ES_T0002 版本

更新信息
  • 2021年2月8日 发布whoamifuck2。
  • 2021年6月3日 优化格式,加入用户基本信息。
  • 2021年6月6日 发布3.0版本
  • | …
  • 2022年6月3日 增加新功能,加入应急响应基础功能,如查看用户、服务、文件修改、历史命令等等。
  • 2022年6月6日 发布4.0版本
  • | …
  • 2023年6月3日 增加新功能,加入开放端口、优化服务器状态、查看僵尸进程、优化用户状态等。
  • 2023年6月6日 发布5.0版本
  • | …
  • 2024年6月3日 加新功能,针对后门类进行更新、加入自动化任务自动发现威胁并查杀,持续防护,和其他优化。
  • 2024年6月6日 发布6.0版本
  • | …
  • 2025年6月3日 增加CVE漏洞识别,优化用户信息,增强服务提取信息,优化网络外联,优化文本输出,增加HTTP服务探测,增加具体常见位置文件列举。
  • 2025年6月6日 发布7.0版本
  • | …
  • 2026年9月22日 Rust重构
  • | …
  • 2026年某月某日 敬请期待 …
已实现
  • 系统版本信息
  • 历史命令信息
  • 开启服务信息
  • 进程分析信息
  • 用户信息排查
  • 文件状态信息
  • 计划任务信息
  • 开启端口信息
  • 系统状态监控
  • 分析站点日志
  • 恶意程序查找
  • 支持基线检查
  • 挖矿病毒查杀
  • 常见漏洞自查
  • 后门文件查杀
  • 僵尸进程清理
  • 站点存活探测
  • 开机自启动项
  • 攻击痕迹发现
  • 定时运行任务
  • 软链后门检查
  • 环境变量后门
  • 常见格式报告
  • 高可扩展命令
  • 远程风险专项
  • 查找webshell
  • 信使邮件通知

ES_T0003 使用

下载

git clone https://github.com/enomothem/Whoamifuck.git
cd Whoamifuck
chmod +x whoamifuck.sh

🦀 Rust 重构版(Rust Refactor)

[!NOTE] 项目已提供一份 Rust 重构版本,位于本仓库的 src/ 目录(Cargo 项目)。它忠实保留了原 who.sh 的命令行接口、输出风格与检测逻辑;控制流、参数分发、内核 CVE 数据表、版本比较等 均由 Rust 原生实现,对系统状态的采集仍复用底层系统命令(ps/ss/last/find 等)—— 这与任何应急响应工具的做法一致,也保证了输出与原版一致。

为什么用 Rust 重构?

  • 单一静态二进制,便于在应急现场分发,无需依赖特定 shell 版本;
  • 类型安全,避免 bash 中大量的变量引用/引号陷阱;
  • 内核 CVE 版本表、版本比较、日志解析等逻辑以结构化代码组织,易于维护与扩展。

编译:

cargo build --release
# 产物:target/release/who

运行(需要 root 权限):

sudo ./target/release/who -h      # 帮助
sudo ./target/release/who -n      # 基本输出模式
sudo ./target/release/who -r      # 常见漏洞自查
sudo ./target/release/who -m report.html   # 导出 HTML 报告

命令行参数与下方“使用方法”完全一致。

代码结构:

路径 说明
src/main.rs 入口与命令分发(对应 fk_main / fk_options)
src/color.rs ANSI 调色板(对应 color)
src/ui.rs LOGO / 帮助 / 标题栏 / 状态标记(logo/help_*/bar/stats)
src/env.rs 全局环境与默认路径(env)
src/sys.rs 命令执行、OS 识别、root 判断(os_name 等)
src/util.rs 依赖检测与安装提示(fk_command / i)
src/version.rs 版本比较(复用 sort -V 语义)
src/modules/*.rs 各 fk_* 检测模块(每个功能一个文件)
src/modules/kernel_cve_data.rs Dirty Cow 受影响内核版本表(自 who.sh 移植)

[!TIP] HTML 报告(-m)为功能性移植:采集与原版相同类别的信息,并渲染为一份带折叠区块与 搜索框的自包含 HTML 报告,而非逐字节复刻原 1400 行内嵌模板。

使用方法

使用方法:                                                                    

        -v --version                   版本信息                                      
        -h --help                      帮助指南                                      

  QUICK                                                                            
        -u --user-device               查看设备基本信息                          
        -l --login [FILEPATH]          用户登录信息 [default:/var/log/secure;/var/log/auth.log]
        -n --nomal                     基本输出模式                                
        -a --all                       全量输出模式                                

  SPECIAL                                                                          
        -x --proc-serv                 检查用户进程与开启服务状态           
        -p --port                      查看端口开放状态                          
        -s --os-status                 查看系统状态信息                          

  RISK                                                                             
        -b --baseline                  基线安全评估                                
        -r --risk                      查看系统可能存在的漏洞                 
        -k --rookitcheck               检测系统可能存在的后门                 
        -w --webshell [PATH]           查找可能存在的webshell文件 [default:/var/www/;/www/wwwroot/..]

  MISC                                                                             
        -c --code [URL|FILE]           页面存活探测                                
        -i --sqletlog [FILE]           日志分析-SQL注入专业分析                
        -e --auto-run [0-23|c]         加入到定时运行计划                       
        -z --ext [PATH]                自定义命令配置测试 [default:~/.whok/chief-inspector.conf]

  OUTPUT                                                                           
        -o --output [FILENAME]         导出全量输出模式文件                    
        -m --html [FILENAME]           导出全量输出模式HTML文件                

image

关于用户登录排查的优化

使用 -l 参数显示系统的用户登录信息。 该参数取代之前-f参数,对比-f,优化了以下功能:

  1. 首先判断是否存在文件参数,能够在当前系统分析不同系统的文件类型。如用户指定了具体的文件路径,那么将分析文件名是auth.log还是secure,请注意从其它系统导出的日志文件名是否正确。
  2. 用户没有指定具体的文件,那么会判断操作系统是红帽系还是debian系,如果是红帽系的系统则使用secure默认路径,debian系列则使用auth.log文件默认路径。
  3. 如果用户没有指定具体的文件,系统也没有识别正确,如遇到阉割版的操作系统,则默认使用红帽系列的判断方法执行,则可指定具体文件的方法。
./whoamifuck -l

会列举出攻击次数的攻击者枚举的用户名、攻击者IP TOP10、成功登录的IP地址和对用户名进行爆破的次数

image

image

系统基本信息的优化

相比之前,优化了一些信息的突出,更加美观,增加了虚拟机判断,时间戳,用于取证中进行定位时间线和设备类型。

./whoamifuck -u

image

image

增加对Root用户的判断

该程序需要root权限才能获取较为完整的信息,否则会发生一些未预期的错误,所以增加了对root的判断,保证程序的可用性。

image

新特性🎉:webshell查杀

增加了对webshell的查杀,目前仅支持PHP和JSP。 使用方法:

  1. 不指定目录,默认查找常见的web根目录。
./whoamifuck -w
  1. 指定路径,深度查找指定的目录,力度更大。
./whoamifuck -w /root

image

新特性🎉:漏洞检测

使用漏洞检测模块-r/--risk

./whoamifuck -r

增加了漏洞检测模块,目前只支持了redis的检测 未授权则表示未开启密码机制,当然实际情况还需判断,仅作为参考。 如开启密码机制,会将找到的密码与弱口令字典TOP20进行匹配,如找到则显示出来,否则显示*****,该模块不记录在log中。 image

重构代码结构,执行速度加快4000倍🎿

由于功能的增加,变量变多,程序执行速度明显变慢,将变量按需求移入函数中,执行速度更加流畅! 优化前
image
优化后
image

新特性🎉:Html格式输出,呕心沥血几百次优化,细节感人,人性化体验,简洁舒服

在shell中查看文本文件非常的困难,导致分析过程不利于用眼的保护,所以更新了html的格式。

看这简洁明了的设计 image 钛合金金属的豪华按钮+突出的计数器 image

新特性🎉:站点扫描 站点存活分析

大家可能第一反应把这当作攻击方的工具,那可大错,在应急过程中,免不了检测网页是否存在或存活状态,再配合端口检测,可查看页面的开启状态。

whoamifuck -p # 先查看是否存在http server端口

然后检测页面情况

whomifuck -c # 检测

当然,为了批量操作,也可以指定文件,这里演示检测永恒之锋实验室官方和我的博客。 image

新特性🎉:日志分析-SQL注入专业分析

sql注入分析起来非常的繁琐,索性直接自动化,而且做CTF题目也是非常的给力哦~
image

计划任务目录优化

由于crontab命令并不能查看完整的计划任务,完善了计划任务的一些目录,进行遍历。 image

新功能🎉:定时启动脚本生成报告

备份、备份、备份,重要的事情说三遍! 定时主要就是防止证据被消灭,最好将报告每日同步下来,省心。

./whoamifuck -e [0-23]  # 填入0到23其中一个时间点,默认为0时
./whoamifuck -e c	# 清空所有whoamifuck定时任务

image image

优化:增加国产化系统的指纹

国产系统,你们懂的,结果内核一识别,还是ubuntu,所以目前仅识别做得不错的国产系统。后面国产化牛逼了再慢慢加。 image 可以发现,很多Linux默认的文件都找不到。

新特性🎉:创建属于自己的命令脚本

该想法由永恒之锋战队rvy提出,目的是让工具成为一个载体,让用户自己去定义一些根据自身经验总结出的命令配置到工具中。人人都可以将工具进行扩展命令,就行扩展武器库的POC一样,深度定制化,可扩展的一个工具才是好工具。

Warning 警告

扩展于全局只适用于默认路径下的配置文件。

Note 注意

欢迎大家把自己的命令分享在ISSUE中,让大家讨论一下自己觉得最好用的命令。 命令交流区

配置文件结构

配置文件共两个变量,一个控制开启或关闭同步到工具全局中,另一个则是自定义命令的数组。

EXT="false"
commands=(
	"COMMAND1;命令描述"
	"COMMAND2;命令描述"
)
  • EXT参数作为控制控制的开关,决定自定义扩展的命令是否被加入Whoamifuck中,目前仅适配于Normal输出中。参数为false、true。
  • commands参数是一个字符串数组,可以添加属于你自己的命令,并对命令进行描述。命令和描述中级使用;作为分隔符,命令请不要带有;
  • -z参数作为测试自定义的命令是否正常。
方法一:手动创建

目前配置文件生成方法有两种,一种是手动创建一个,然后添加参数指定路径,如vim my_commands.conf

./whoamifuck.sh -z my_commands.conf

image

方法二:自动生成

还有一种方法,如果第一次使用-z功能,则会自动生成一个配置文件放置在默认路径下

./whoamifuck.sh -z

image

但在默认配置中配置为true时,则会被同步到Normal打印中 image

优化:格式化帮助命令,进行分类,更加直观

使用格式化,并对命令作了进一步的解释,将默认路径显示在描述中。 image

ES_T0004 关注永恒之锋

评论

暂无评论