最近对Discuz系统的木马清理及防护做了一番学习,对系统安全防护有了如下几点总结。
1. 常规的Linux系统层面的安全防护是基础,不外乎限定公网端口暴露数量以及传统基础服务的安全漏洞修复。
2. 动静态文件的可执行化分离,用户上传的行为文件的有效隔离,确保文件的非可执行。
3. DiscuzX之所以漏洞百出就在于大量使用的eval,exec类系统调用执行函数,同时对用户传递到服务器端的数据没有做统一的类型转换。系统前端有必要增加WAF的接入防护,同时对已经公开的漏洞进行代码级的修复。
4. DiscuzX的系统key都需要进行定期的更换,这两年DiscuzX系统被大规模入侵而导致360搜索引擎被大规模收录非法内容的问题,很多都因为ucenter的key被泄露,导致系统被植入了木马代码。同时dz底层的cookie加密key也有必要定期更换,否则被黑客非法获取后可以在本地搭建还建来模拟任何用户的登录。
5.对于任何PHP的系统都需要做文件MD5值的检查,定时扫描系统所有代码的MD5,避免对文件的直接篡改。
6.黑客对于木马植入不外乎对系统访问权限的渗透,因此除了系统指定的可写目录以外,尽量要避免黑客对非程序代码目录的可侵入性。例如/var/tmp, /tmp 这样的目录,任何权限组都可以写入时也需要定期进行安全扫描,检查这些目录中是否有可疑的文件存在。
7.preg_replace函数中/e 修饰符是非常危险的,在我们的系统中尽量要保证数据传参进来是可控的,如果被黑客利用自定义设定参数给到preg_replace,那么很有可能通过/e修饰符来执行php命令。
8. 黑客入侵修改文件不外乎使用include和requie来调用自己的隐蔽文件,通常为了不明文在代码中包含木马文件地址,会使用pack的手法进行一定的混淆。例如PACK('H*','XXXXX')