虚拟主机安全防护
2015-12-03■
■
笔者的一个朋友为某家公司做了个网站,为了确保其安全性,请笔者对其进行一番安全测试。笔者进入该网站,发现其是使用PHP开发的,界面设计得比较精美,功能颇为丰富。不过笔者经过仔细检测,发现其中存在文件上传漏洞。于是笔者拿出不久前捕获的某款PHP木马,将其上传到目标主机上,进而轻松入侵得手。原来,该网站存在于某个虚拟主机服务器中,因为权限设置不严格,使PHP木马拥有了对硬盘的读写权限,例如在其E盘中发现了上百个网站,一旦黑客入侵得手,就可以随心所欲进行破坏了。例如利用WebShell控制接口,可以通过各种手段提权获得更高的控制权力。看来,一个不起眼的上传漏洞就会让黑客轻松控制整个虚拟服务器。从以上测试实例中,不难发现提高虚拟主机安全防护能力的重要性。
禁用FSO组件防ASP木马侵袭
要想提高虚拟主机的安全性,防止黑客利用各种脚本进行攻击,最简单易行的方法就是安装功能强悍的杀毒软件,例如卡巴斯基、ESET NOD32等。有了杀毒软件的保护,一般的入侵脚本很容易被干掉。不过,这也不是万无一失的策略,如果黑客对入侵脚本进行了加密处理,杀毒软件照样会对其视而不见。例如,在基于Windows的IIS服务器中,黑客惯用的伎俩是通过漏洞上传ASP木马来打开入侵的通道。为此,可以通过让FSO(FileSystemObject)组件失效来废除ASP木马的活力。
具体的实现方法分为两种,其一是运行“regedit.exe”程序,在注册表编辑器中打开“HKEY_CLASSES_ROOTScripting.FileSystemObject”分支,将其中的“Scripting.FileSystemObject”名称进行修改,例如修改为“Scripting.FileSystemObject90” 等。 这样,在ASP木马试图调用诸如“Set 对象名=Server.CreateObject("Scripting.FilesystemObject ")”语句时,就变成了“Set对象名=Server.Create Object("Scripting.FilesystemObject90")”格 式,使得不知道默认ProgID改为何值的人无法调用FSO组件,进而让ASP木马无法运行。
该方法虽然简单易行,但是对于精通脚本技术的黑客来说,可以采用HTML语法中的“
禁用其它组件防止ASP木马侵袭
为了防止黑客使用Wscript.Shell组件调用系统基本命令进行渗透,可以在注册表中打开“HKEY_CLASSES_ROOTWScript.Shell”和“HKEY_CLASSES_ROOTWScript.Shell.1”分支,将其中的“WScript.Shell”和“WScript.Shell.1”进行更名。同理,可以在上述分支下分别选中“CLSID”项,在右侧窗口中更改其CSLID值,防止非法调用情况的发生。为了防止黑客使用Shell.Application来调用系统内核运行基本命令进行渗透,可以对注册表中 的“HKEY_CLASSES_ROOTShell.Application”和“H K E Y_C L A S S E S_ROOTShell.Application.1”分支进行类似的修改,这里不再赘述。为了禁用Guest账户使用“shell32.dll”来调用Shell.Application组件,可以使 用“cacls %systemroot%system32shell32.dll/e/d guests”命令来实现。类似的执 行“cacls %systemroot%system32cmd.exe/e/d guests”命令,可以禁止Guest账户调用CMD.exe程序执行命令。
修改内部函数禁用PHP木马
如果虚拟主机提供对PHP环境的支持,则主要应该防范PHP木马借助PHP内部函数进行入侵。PHP核心配置文件名为“php.ini”,我们主要针对该文件进行修改。在Windows中,该文件默认位于“%systemroot%”文 件 夹中。在Linux中其位于“etc/php.ini”路径。将该文件中的“safe_mode=Off”修 改 为“safe_mode=On”,打 开 PHP安全模式。找到“disable_function=”栏,将其内容修改为“phpinfo,system,exec,pa ssthru,shell_exec,popen,is_dir”这样可以禁用以上常用的PHP内部函数。关闭“phpinfo”函数可以防止泄露PHP基本信息。关闭“system,exec,passthru,shell_exec,popen”等函数可以防止PHP木马获得WebShell执行接口,关闭“is_dir”函数,使黑客即使获得了everyone账户的可读权限,也无法显示服务器的文件信息。将“display_errors=On”修改为“display_errors=Off”,可 以 禁 止 显 示PHP各种错误提示信息。经过以上修改,一般的PHP木马就会失效了,当然,我们也不能因噎废食,不能仅仅为了防御的需要,将常用的PHP函数全部禁用。例如当禁用了“fopen,mkdir,rmdir,chmod,dir,shell_exec,unlink,fclose,fwrite,fileexists,closedir,is_dir,delfile,readdir,opendir,copy,fileperms”等,就可能对相关的网站。论坛的正常运行造成障碍,虽然拦截了PHP木马,但是PHP的基本功能也损失很大,这样就有些得不偿失了。
设置目录权限狙击跨站入侵
当然,要想保护虚拟主机的安全,还需要从根本问题上下功夫,这就是对相关磁盘或者目录的访问权限进行合理的控制,让不同等级的用户只能严格依照自己的权限操作。例如,对于运行了Apache服务的Windows系统来说,可以依次选择所有的分区,在其属性窗口中的“安全”面板中点击“删除”按钮,将“组或用户名称”列表中除了“Administrators”和“System”组之外的所有账户信息全部删除。对于每个虚拟主机用户目录,打开其属性窗口中的“安全”面板,点击“添加”按钮,添加一个Everyone账户,并赋予该账户读取,写入,列出文件夹目录的权限。
图1 设置身份验证方法
之所以采用这种权限控制方式,主要是因为一般的虚拟主机中来宾用户只在授权的目录内拥有权限,在上一级目录中因为没有授权许可,无法浏览其它用户的目录内容。因为其无法进入别人的目录修改数据,导致跨站攻击失去威力。当然,如果该用户对您的网站目录设置情况非常了解,那就另当别论了。此外,很多虚拟主机服务商都喜欢将使用网站名称来命名网站目录,虽然便于管理和记忆,但是也可以让黑客毫不费力地猜测到相应网站目录的名称,毫无疑问也添加了一些危险因素,建议最好为不同的网站目录名称后添加随机字符串,来提高安全性。
对于采用IIS服务的服务器来说,可以在Guests组中添加一个账户,使其拥有来宾访问权限。选中对应的网站目录,在其属性窗口中的“安全”面板中点击“添加”按钮,将该账户添加进来,并让其拥有对该目录的读取和运行权限。在Internet信息服务窗口中选择对应的网站目录,在其属性窗口中的“目录安全性”面板中点击“编辑”按钮,在身份验证方法窗口(如图1所示)中取消“允许IIS控制密码”项的选择状态,点击“浏览”按钮,选择上述新建的宾客账户,并输入密码,点击确定按钮保存配置。该方法对于每个账户单独授权,未经授权的内容就无法正常访问,可以有效控制每个用户的活动范围。在设计网站时,很多用户喜欢使用IIS+Access数据库的模式,因为上面的权限设置关系,可能会导致无法对Access数据库无法写入的问题。为此,最好为该数据库文件单独开启写入权限。但是这对于虚拟主机来说有些不现实。所以在配置网站目录权限时,应该赋予网站目录写入的权限。