Total Pageviews

Saturday 13 October 2012

Centos下,PHP-DDOS脚本的研究与防范

前天由于一个客户不停地向外发包,导致服务器整个瘫痪。仔细检查后发现客户的discuz程序被植入被植入了PHP-DDoS攻击脚本,访问触发后会不停地攻击他人服务器。所以导致了网络的瘫痪。主要原因由于程序的不健壮以及PHP新的BUG被大规模利用。

特征:用PHP代码调用sockets,直接用服务器的网络攻击别的IP。 PHP脚本DDOS攻击的原因及php脚本部分源码:
$fp = fsockopen(“udp://$host”, $port, $errno, $errstr, 5); if($fp){ fwrite($fp, $out); fclose($fp);

php脚本中的 fsockopen 函数,对外部地址,通过UDP发送大量的数据包,攻击对方。

解决方案:

可通过 php.ini ,禁用 fsockopen、 fwrite、 fclose这三个函数

一、禁用fsockopen函数

在php.ini里禁用如下函数:

disable_functions=gzinflate,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,
ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen,fwrite,
fclose

在php.ini里禁用
fopen allow_url_fopen = Off

二、通过iptables禁止向外发包
iptables -I OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT #允许需要UDP服务的端口(如DNS)
iptables -A OUTPUT -p udp -j DROP #禁止本机对外发送UDP包
#“53”,为DNS所需要的UDP端口,“8.8.8.8”部分为DNS IP,根据您服务器的设定来定,若您不知您当前服务器使用的DNS IP,可在SSH中执行以下命令获取:
cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'