浅谈自用WordPress的安全定制

wp

个人在使用WordPress时往往没有企业那么规范系统的安全措施, 往往是wget下来解压以后一扔就开始运行了. 个人能够利用的资源有限, 虚拟主机甚至VPS上放个驱动级的东西在那轮询文件和数据库在今天看来即使可为, 也是不现实的. 对于个人来说, 被拿个shell其实没什么大不了的, 只能从另一个方面证明你的价值, 但如果你没有bt到每种在线服务都使用不同的密码, 那么密码的丢失就显得不那么好玩了; 对于生产环境, 两者都很不好玩. 表面上, WP是很安全的, 但在某些方面, 还是不那么让人放心. 这里主要从WordPress的设计上, 简单总结一下加固自用WordPress的几点基本想法. 不妨认为和WP有关的安全隐患主要在三方面:

  • webshell问题
  • 文章数据的安全
  • 个人信息的安全

三方面的确有一定的相关, 但又各有特点. 这里不做细分, 仅仅从几个具体的防御角度展开.

不被拿webshell, 基本上仰仗于WordPress自身的安全性, 但作为个人用户, 从源代码上彻底审计和加固整个WP是几乎不可能的事情, 估计只能做到勤升级了. 这年头0day也是需要产生经济利益的, 所以如果你没有很高的商业价值, 那么应该不会怎么为未公开的漏洞所扰. 由于翻译问题, WP中文版的发布总是有一定延时, 所以最好使用英文版. 其次, 将后台有利于写入webshell的功能彻底移除, 例如在线上传/在线安装插件的功能, 在线修改主题文件的功能, 都为直接写入webshell提供了可能. 第三, 尽量少装插件——虽然对于WP来说插件意味着几乎一切. 最小的服务等于最大的安全, 这话很实在. 即使用插件, 也尽量不要用冷门的, 更新频率、rating很低的插件. 对于已经安装的插件和主题, 尽量审计所有代码.

写到这里, 不得不吐槽WordPress一个十分坑爹的地方, 那就是wp-admin这个目录的名字很难修改. 程序里硬编码的地方实在太多 ... 即使你以暴制暴, 强制涂改掉所有wp-admin字样, 一升级还得重新改, 官方还不提供增量升级得自己diff, 真是ooxx. 所以要做定制, 这个地方是无法绕开的, 这个设计的改进也大有可为.

如果你绕开了这个问题, 更深入的想法还是有的. 比如桂林老兵以前实践过的的一个思路, 那就是设计一个C-S的登录方式, 如果我没记错的话, server端的登录接口似乎是隐藏在flash里, 没有client, 第三方根本不知道怎么进后台 ... 虽然这个思路比较极端, 不过还不算惊世骇俗, 完全可以实现. 不过这年头, Zend都被攻破, 隐藏这件事大概也没什么十分靠谱的选择.

如果出现注入一类的漏洞, 也许可以得到用户的的密码散列, 这对个人是一个不容小觑的威胁. 什么, 你还不知道CMD5? 以下一段为zz:

WordPress用户密码产生的过程是, 当需要生成用户密码的时候, 随机产生一个salt, 然后将salt和password相加, 再进行count次md5, 最后和encode64的hash数值累加, 就得到了一个以$P$开头的密码, 这个密码每次产生的结果都不一样.

虽说是这样, CMD5仍然提供了WordPress/phpbb3这种加密类型的数据, 简单试了一下, 成功率还是不低的. 根源就在于这个算法是公开的, 谁都可以就此生成一个彩虹表. 我们不妨另辟蹊径, 定制一个独有的MD5算法. MD5算法中间有一些默认参数, 也就是所谓的Chaining Variable部分, 简单的修改这些参数就可以得到和原始算法不同的加密结果了. 这时即使数据库中的MD5散列被获取, 用字典也是无法查到这个散列的, 从而也就保证了个人信息的安全. 当然, 在数学上, 这种修改可能导致更容易出现不同的密码在MD5后结果相同的情况, 不过作为自用, 还是完全可以接受的. 不多说了.

以上述idea为核心继续拓展, 不难做成一个WP安全定制版.

引一段《Inception》作结:

What's the most resilient parasite? Bacteria? A virus? An intestinal worm?
—— An idea. Resilient, highly contagious.
A single idea from the human mind can build cities.
An idea can transform the world and rewrite all the rules.

R环境安全特性初探与前瞻,这次R语言会议的slides

汗啊,过了1个多月才放上来,从会场赶回学校以后一忙就把这事儿忘到九霄云外了,假期都到家了才想起来,真是对不住大伙了 ..

其实之前在COS主站上有发,只是那个版本稍旧,是在北京会场时使用的,此版本为上海会场使用的最终版,有一些增补和删改。没有太云学长陈丽云学姐他们用Beamer精心制作的slides那么优雅飘逸,俺用Office 2010 Beta做的,不知字够不够大,希望大家能看清楚吧。

R环境安全特性初探与前瞻 (PDF, 2.95MB)

此文档遵循CC3.0,不过这里要特殊说明一下:

此文档仅为单纯的技术分析,任何个人或机构根据本文内容实施的任何行为,以及带来的任何经济损失、法律争议和相关后果,作者概不承担任何责任。

至于对应的paper,其实在去年11月份的时候就“凑”得差不多了,在这里偷个懒,就不发了。

感谢大家的关注和支持,小弟在此谢过。

“世界上最安全系统”的开发者们都在哪里?

OpenBSD,一个有点传奇的名字。这个BSD一直以安全性为核心开发理念。吉祥物是一只河豚,鲜美无比却部分剧毒,大概是象征着代码质量高而安全性能强悍。话说这个系统的起源还有着一段小故事。其开发者Theo De Raadt据说是某些理念与其他团队成员不同(也有说法是此人有RPWT,谁知道呢,所谓众口铄金,积毁销骨),被NetBSD团队踢了出来,一怒之下就开始了OpenBSD计划。关于此人,大家可以Google一下,有很多八卦。

OpenBSD的安全体现在哪里?从其网站的description就可以略知一二:

OpenBSD, A Multiplatform Ultra-Secure Operating System. Focus: portability, standardization, correctness, security, and cryptography.

也无妨从一个趣谈讲起。在2002年6月之前, OpenBSD的官网上写着这样一条口号:

Five years without a remote hole in the default install!

在默认安装下,过去五年没有任何远程执行漏洞被发现。


斗转星移。2002年6月, Mark Dowd发现了OpenSSH(也是Theo De Raadt主持项目之一)的一个远程执行漏洞,这个漏洞可以使得攻击者远程访问root账户,在当时不仅影响到了OpenBSD本身,也同时影响到其他一堆用了OpenSSH的系统。 这个问题的出现让官方不得不把那条引以为豪的标语换成下面这条:

继续阅读