*********************************************
译文: HaCkXi
http://www.hackxi.cn
文章来自:sH
http://hi.baidu.com/zrxc/
*******************************************
在今天互联网上PHP web应用程序是最常见的攻击件软件。任何人谁也看过他们的网络服务器日志可以证明探头频率为易受伤害的PHP应用程序。 PHP的学习曲线很容易导致其受欢迎程度和广度的应用,但并非没有一些痛苦的教训。能够检测远程HTTP网址为本地文件,自动实例变量基于客户端的输入,以及普遍存在的自由SQL查询开辟了广泛的攻击媒介在PHP应用程序。多年来,interpreter已得到改善,危险的设置已被禁用默认情况下,并设置所谓的“安全模式”已实行限制的影响,恶意或破坏Web应用程序。
PHP的安全模式设置为黑名单的办法,限制某些功能时它已启用。根据PHP手册: “安全模式是为了试图解决共享服务器的安全问题。这是不正确的建筑尝试解决这个问题在PHP层上的,但修改web服务器层和操作系统层不非常现实的,许多人,特别是ISP ,目前使用安全模式“ 。下一个主要版本的PHP ( 6.0.0 )安全模式完全消除,并应清楚地表明,它不应该依靠共享服务器安全。核心的问题,安全模式是不一致的;在许多情况下,它巨大并限制进入危险的功能,但是,它是所有一个危险的功能允许它完全否定。
目前最好的做法是结合安全模式一长串的职能"disabled_functions"参数中的php.ini配置文件中。这种方法适用于安全模式限制到PHP作为一个整体,然后具体的限制功能,可以用来解决这个问题。同样,这种方法存在的问题是不一致的;即使一个危险的职能是错过,整个过程是模拟。取决于你看看在互联网上,该清单中禁用的职能完全不同。如果您结合起来,因为许多这类清单可能,你最终会像如下:
disable_functions = escapeshellarg, escapeshellcmd, exec, passthru, proc_close, proc_get_status, proc_open, proc_nice, proc_terminate, shell_exec, system, ini_restore, popen, dl, disk_free_space, diskfreespace, set_time_limit, tmpfile, fopen, readfile, fpassthru, fsockopen, mail, ini_alter, highlight_file, openlog, show_source, symlink, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, parse_ini_file
这份名单将阻止所有的"standard"方法执行命令或加载任意代码。这份名单还可以防止一些攻击和资源的能力,开放的任意本地文件。但是,如果某些扩展功能,即使这种大规模的名单是不够的。采取期望模块为例,expect_popen() 函数可以被用来执行
如何在安全模式和功能黑名单以上。 Apache的功能,上面的列表残缺;因为许多管理员都没有意识到,该模块可以或低估的事情可以做的。 PHP代码示例使用以下apache_setenv() 函数攻击无关的CGI脚本来执行任意本地文件。
code:
<php
apache_setenv("LD_PRELOAD", "/tmp/evil.so");
virtual("/cgi-bin/anyscript.cgi");
?>
有时一个功能支持安全模式,但实施的方式可以限制被绕过。例如,一个脆弱的代码延长(CVE-2007-4850)允许用户访问的任何文件的文件系统上嵌入一个NULL字节的URL传递给curl_init() 。多年来,其中的一些搭桥技术已经出版,随后固定的,但最终的结果是,安全模式很少被强迫正确。
为了让事情更有意思的是, PHP的文件系统API允许少数不同的协议,用于在一个路径名称。这使得fopen()函数的调用访问文件的HTTP , FTP等SSH2支援,stdin/stdout,压缩格式,以及甚至popen pipes (via Expect)。
在Windows服务器上,interpreter支持的CIFS路径,它可以泄漏认证证书和域信息给第三方。这些协议可以链接起来,因此,道路组成的"compress.zlib://http://someurl/"将首先下载文件通过HTTP ,将它zlib的压缩,然后返回解开内容作为一个文件流。这些议定书处理可用来逃避残缺功能列表和访问文件以外的安全模式的限制。
确保PHP的恶意和破坏脚本是不容易的;即使安全模式和残缺黑名单功能可以帮助在某些情况下,他们应被视为替代操作系统级的安全性。内核解决方案,如SELinux的GRSecurity和可用于孤立的PHP解释器从其他进程的系统和项目,如suPHP彼此可以很容易地孤立用户。一个主要的好处使用的操作系统和Web服务器硬化的是,很多常见的应用依赖于能够访问具有潜在危险性的职能。锁定的PHP通过一个漫长的disable_function列表会导致问题,可能更容易解决限制特权的PHP解释器通过其他手段。
由于这些原因,我认为安全模式是有害的,因为它可能会导致一种虚假的安全感,很少无法获得攻击者的决心。这将成为在PHP 6 一个严重的问题,但是在此之前,任何产品使用的安全模式应被视为一个症状一个更大的问题与网络基础设施。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课