Skip to content

安全加固: 用可疑代码模式检测替换有缺陷的反篡改检查#59

Closed
nilm61 wants to merge 1 commit into
pbootcmspro:masterfrom
nilm61:fix/anti-tampering
Closed

安全加固: 用可疑代码模式检测替换有缺陷的反篡改检查#59
nilm61 wants to merge 1 commit into
pbootcmspro:masterfrom
nilm61:fix/anti-tampering

Conversation

@nilm61

@nilm61 nilm61 commented Jun 28, 2026

Copy link
Copy Markdown

问题描述

原代码通过检查 Kernel.php 中是否包含字符串 "Kernel" 来判断文件是否被篡改:

if (strpos(file_get_contents(CORE_PATH . '/basic/Kernel.php'), 'Kernel'))
    exit();

这个检查存在严重缺陷:
- 仅验证文件是否包含 "Kernel" 字符串
- 攻击者的混淆后门代码可以通过 base64 编码保留该字符串,完美绕过检查
- 该检查不仅无法发现后门,反而帮助攻击者隐藏(后门通过了"合法性"校验)
- 没有任何日志记录,管理员无法发现被篡改

修复内容

- 移除有缺陷的字符串包含检查
- 新增 checkCoreFileIntegrity() 方法,使用正则表达式检测可疑代码模式:
  - eval(base64_decode(...)) — 典型 webshell
  - file_put_contents(... .php) — 文件写入后门
  - <meta http-equiv=refresh> — 页面跳转劫持
  - 混淆变量函数调用($a="eval"; $a(...))
  - 远程文件包含(include('http://...'))
  - 危险的远程文件下载+执行组合
- 发现可疑代码时记录安全日志并返回 HTTP 503 终止执行

测试验证

- 正常代码可通过检测
- 常见 webshell 模式可触发保护
- 告警日志正确记录

- 移除仅检查 Kernel.php 中是否包含字符串 Kernel 的有缺陷检查
- 新增 checkCoreFileIntegrity() 方法,检测以下可疑代码模式:
  - eval(base64_decode(...)) 典型 webshell
  - file_put_contents(... .php) 文件写入后门
  - <meta http-equiv=refresh> 页面跳转劫持
  - 混淆变量函数调用 (="eval"; (...))
  - 远程文件包含 (include('http://...'))
  - 危险的远程文件下载+执行组合
- 发现可疑代码时记录安全日志并返回 HTTP 503 终止执行

修复 CWE-354(完整性校验值验证不当)漏洞
基于 PbootCMS 3.2.15 安全性评估报告
@github-actions github-actions Bot added bug Something isn't working needs review Pull request is ready for maintainer review labels Jun 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working needs review Pull request is ready for maintainer review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants