免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2688 | 回复: 1
打印 上一主题 下一主题

系统管理员必须知道的PHP安全实践 (2).............. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-02 14:58 |只看该作者 |倒序浏览
系统管理员必须知道的PHP安全实践 (2)..............












Linux自带各种安全补丁,可以用来防护配置不当或受到危及的服务器程序。可能的话,使用SELinux及其他Linux安全加载模块,对网络及其他程序实行限制。比如说,SELinux为Linux内核和Apache Web服务器提供了众多安全策略。要列出所有的Apache SELinux保护变量,请输入:

# getsebool -a | grep httpd示例输出:

allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off要禁用Apache cgi支持,请输入:

# setsebool -P httpd_enable_cgi off参阅红帽SELinux指南(http://docs.redhat.com/docs/en-U ... ed_Linux/index.html),即可了解更多信息。

第21个最佳实践:安装Mod_security

ModSecurity是一个保护Web应用程序的开源入侵检测和预防引擎。你在Linux下很容易安装mod_security,安装后就能保护基于Apache和PHP的应用程序,远离XSS及其他各种攻击:

##几个实例##
#不允许打开/etc/中的文件

SecFilter /etc/#阻止SQL注入攻击

SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"第22个最佳实践:尽可能在chroot jail环境中运行Apache / PHP

将PHP及/或Apache放在chroot jail环境中可以尽量减小潜在的入侵事件造成的破坏,因为它将Web服务器隔离到文件系统的一小部分。你可以使用Apache自带的那种传统的chroot jail环境。不过建议使用FreeBSD jail、运用容器概念的XEN虚拟化、KVM虚拟化或OpenVZ虚拟化。

第23个最佳实践:使用防火墙限制出站连接

攻击者会使用wget之类的工具,将文件本地下载到你的Web服务器上。你可以使用iptables阻止apache用户的出站连接。ipt_owner模块会试图比对本地创建的数据包与数据包创建者的各个特点。它只有在OUTPUT链中才有效。在这个示例中,允许vivek用户使用端口80连接外界(这适用于RHN或centos repo访问)。

      /sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT下面是另一个示例,阻止apache用户的所有出站连接(通向我们自己的smtp服务器的出站连接除外),以及垃圾邮件验证API服务:

# ....
/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
# allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN
#########################
## Add more rules here ##
#########################
# No editing below
# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT第24个最佳实践:关注日志和审查

检查apache日志文件:

# tail -f /var/log/httpd/error_log
# grep 'login.php' /var/log/httpd/error_log
# egrep -i "denied|error|warn" /var/log/httpd/error_log检查php日志文件:

# tail -f /var/log/httpd/php_scripts_error.log
# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log日志文件让你对于服务器遭到什么攻击有所了解,并让你可以检查必要的安全级别有没有落实到位。提供了用于系统审查的auditd服务。启用该服务,就可以审查SELinux事件、验证事件、文件修改和帐户修改等。我还建议使用标准的Linux系统监测工具(http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html),用于监测你的Web服务器。

第25个最佳实践:按照系统或虚拟机实例来运行服务

对于安装的大型系统来说,建议你借助不同的服务器运行数据库、静态内容和动态内容。



(图1:在不同的服务器上运行服务)

在不同的服务器或虚拟机实例上运行不同的网络服务。这限制了可能受到危及的其他服务的数量。比如说,如果攻击者成功地利用了Apache flow等软件的漏洞,就能访问整个服务器,包括在同一台服务器上运行的其他服务(比如MySQL和电子邮件服务等)。但是在上述例子中,按以下方式提供不同内容:

1. static.lan.cyberciti.biz:使用lighttpd或nginx服务器,用于提供js/css/images等静态资产。

2. phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz:Apache web服务器,php用于生成动态内容。

3. mysql1.lan.cyberciti.biz:MySQL数据库服务器。

4. mcache1.lan.cyberciti.biz:Memcached服务器是用于MySQL的速度非常快的缓存系统。它使用libevent或epoll(Linux运行时环境),可以扩展至任何数量的打开的连接,并使用非阻塞的网络输入/输出。

5. LB01:放在Apache Web服务器前面的nginx Web服务器和反向代理服务器。 从互联网进入到其中一台Web服务器的所有连接均通过nginx代理服务器来传送,该代理服务器可以本身处理请求,也可以将请求全部或部分传送到主Web服务器。LB01提供了简单的负载均衡机制。
第26个最佳实践:其他工具

来自PHPIDS项目网页(https://phpids.org/):

PHPIDS(PHP入侵检测系统)是面向基于PHP的web应用程序的安全层,具有使用简单、结构良好、运行快捷、技术先进等优点。IDS无法清除、净化或过滤任何恶意输入内容,仅仅识别攻击者何时企图闯入你的网站,安全按照你希望它采取的措施来采取相应措施。

你可以使用PHPIDS来检测恶意用户,并记录检测出来的任何攻击,方便以后分析。请注意:我个人没有用过这款工具。

来自PhpSecInfo项目网页(http://phpsec.org/projects/phpsecinfo/index.html):

PhpSecInfo提供了与phpinfo()函数相对应的机制,可报告关于PHP环境的安全信息,并提供改进的建议。它无法取代安全开发技巧,也不进行任何一种代码或应用程序审查,却是多层次安全方案中的一个实用工具。



图2:关于PHP应用程序的安全信息

参阅Linux安全加固要点(http://www.cyberciti.biz/tips/linux-security.html),减少系统面临的攻击途径数量。

关于PHP后门的补充

你可能碰到过PHP脚本或所谓的常见后门,比如c99、c99madshell和r57等。后门php脚本其实就是一段隐藏的脚本,用于绕开所有的验证机制,根据需要访问你的服务器。攻击者安装它的目的是,访问你的服务器,同时又企图不被发现。误用的PHP脚本(或其他任何CGI脚本)通常允许添加钻Web浏览器中安全漏洞空子的代码。攻击者可以使用这种被钻空子的安全漏洞,上传后门外壳程序,从而让攻击者能够获得许多功能,比如:

•下载文件
•上传文件
•安装rootkit
•设置垃圾邮件服务器/中继服务器
•设置代理服务器,隐匿行踪
•控制服务器
•控制数据库服务器
•窃取所有信息
•删除所有信息和数据库
•打开TCP/UDP端口及更多端口

要点:该如何找出PHP后门?

可以使用Unix/Linux grep命令,搜索c99或r57外壳:

# grep -iR 'c99' /var/www/html/
# grep -iR 'r57' /var/www/html/
# find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
# grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/结束语

你基于PHP的服务器现在经过了适当的加固,可以准备显示动态网页了。不过,安全漏洞主要是因没有遵守堪称最佳实践的编程规则而引起的。为了满足在web应用程序安全方面的要求,你应该查阅更多资源,特别是PHP编程知识,尽管这超出了系统管理员的工作范畴。

原文地址:http://www.cyberciti.biz/tips/ph ... tices-tutorial.html

论坛徽章:
0
2 [报告]
发表于 2011-12-20 16:40 |只看该作者
有爱的楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP