gg了几把,有了下面这篇文章

一、什么是Suhosin?

Suhosin是一个PHP程序的保护系统。它的设计初衷是为了保护服务器和用户抵御PHP程序和PHP核心中,已知或者未知的缺陷。Suhosin有两个独立的部分,使用时可以分开使用或者联合使用。第一部分是一个用于PHP核心的补丁,它能抵御缓冲区溢出或者格式化串的弱点;第二部分是一个强大的PHP扩展,包含其他所有的保护措施。

二、下载地址

使用Gentoo linux或者 FreeBSD的朋友,可以ports中找到Suhosin。使用OpenSuSE linux ,Mandriva Linux,Debian Linux的朋友在发行版发布的包中找到Suhosin

打开后,下载Suhosin Extension 0.9.31,Suhosin Patch要对应PHP的版本下载

三、特性列表

1)引擎保护(仅补丁)

保护内部的内存管理抵御缓冲区溢出 防止Zend哈希表被破坏 防止Zend链接列表被破坏 保护PHP核心及其扩展抵御格式化串弱点 某些libc realpath() 产生的错误

2)各种特性

模拟器保护模式 增加两个函数sha256()和sha256_file()到PHP核心中 所有平台,加入CRYPT_BLOWFISH到函数crypt()中 打开对phpinfo()页的透明保护 SQL数据库用户保护(测试阶段)

3)运行时保护

 加密cookies 防止不同种类的包含漏洞(不允许远程URL包含(黑/白名单);不允许包含已上传的文件;防止目录穿越攻击) 允许禁止preg_replace() /e 修改选项 允许禁止eval()函数 通过配置一个最大执行深度,来防止无穷递归 支持每个vhost配置黑白名单 为代码执行提供分离的函数黑白名单 防止HTTP响应拆分漏洞 防止脚本控制memory_limit选项 保护PHP的superglobals,对于函数extract() import_request_vars() 防止mail()函数的新行攻击 防止preg_replace()的攻击

4)Session 保护

加密session数据 防止session被劫持 防止超长的session id 防止恶意的session id

5)过滤特性

6)日志特性(略)

参考

 

四、安装Suhosin

1)下载,地址上面已经给出

2)解压和打补丁

# tar jxvf php-5.2.10.tar.bz2

# gunzip suhosin-patch-5.2.10-0.9.7.patch.gz

# cd php-5.2.10

# patch -p 1 -i ../suhosin-patch-5.2.10-0.9.7.patch

# ./configure --your-options

# make

# make install

安装扩展

# tar zxvf suhosin-0.9.31.tgz

# cd subosin-0.9.31

# phpize

# ./configure –with-php-config=/usr/local/php/bin/php-config(这个路径根据自己实际情况设置)

# make

# make install

然后编辑php.ini 加入extension=suhosin.so

重启httpd,写一个phpinfo()页,如下

使用Suhosin保护PHP应用系统

 五、配置

所有配置选项参考

 

六、代码测试

eval执行漏洞

//ex2.php

<?php

$var = "var";

if (isset($_GET["arg"]))

{

        $arg = $_GET["arg"];

        eval("$var = $arg;");

        echo "$var =".$var;

}

?>

suhosin有三个选项控制eval

suhosin.executor.eval.whitelist        白名单

suhosin.executor.eval.blacklist        黑名单

suhosin.executor.disable_eval        禁用eval

很多程序需要eval,所以我们不能禁用,使用黑名单禁止一些危险的函数

编辑php.ini

[Suhosin]

suhosin.executor.eval.blacklist=phpinfo,fputs,fopen,fwrite

根据实际情况自行设定

未设置前

\

设置后

使用Suhosin保护PHP应用系统

包含漏洞

suhosin.executor.include.max_traversal        包含的最大目录深度,在包含的文件名中有多少个../就禁止,例如值为2时,../../etc/passwd会禁止,值为3则允许,对于大多数程序,这个值设为4或5比较合适

suhosin.executor.include.whitelist        允许包含的URL,用逗号分隔

suhosin.executor.include.blacklist        禁止包含的URL,用逗号分隔

<?php

if (isset($_GET["arg"]))

{

        $arg = $_GET["arg"];

        require_once($arg);

}

?>

未设置前

设置suhosin.executor.include.max_traversal=3

使用Suhosin保护PHP应用系统

上传漏洞

suhosin.upload.max_uploads

suhosin.upload.disallow_elf

suhosin.upload.disallow_binary

suhosin.upload.remove_binary

suhosin.upload.verification_script        上传文件检查脚本

可以自己写一个脚本检查上传文件是否有webshell特征,然后suhosin.upload.verification_script 的值是这个脚本的绝对路径

注入漏洞

suhosin.sql.bailout_on_error        还不支持 -_-#

其他更深入的防护措施,还有待研究,参考suhosin选项