当下,各种黑客工具包,安全工具包随处都是,使得网络攻击成本大大降低,随便一个小白,找个工具,一通乱扫,都能轻松入侵一台安全防护不高的服务器。

而相比其他攻击,web入侵的门槛要更低一些,是小白入门首选,所以今天简单总结了一些常规的web防护,通用的一些防护。具体的防护,要根据具体的项目情况去调整,这里就不赘述了。


隐藏服务器真实IP

所有的攻击或入侵,都是从信息收集开始的,所以首先要做的就是隐藏服务器真实IP。

目前常用的方法有:使用高防机房盾机服务、使用第三方web安全防火墙、使用CDN

对于高防的昂贵费用,一般的公司很难承担,但如果你遇到严重的DDOS,一个是报警,再一个是乖乖用高防服务。

现在很多第三方安全公司,提供的智能云web防火墙,也是需要你把域名解析到他们的防火墙上,通过防火墙指定策略来进行web防护,也可以起到隐藏真实IP的作用。

最经济简单的方法就是添加CDN服务,现在CDN厂商很多,有收费的也有免费的,当然一分价钱一分货,根据业务实际情况选择就好。虽然还是有不少方法可以查到加CDN之后的真实IP,但查找还是需要一些技术门槛的。


这里顺便说一下常用的一些查找真实IP的手段,帮助了解一下,做相应的防护

首先判断是否加CDN最简单的方法就是查看域名解析,一般来说,加CDN,都是CNAME解析,通常通过各地的ping来查看解析IP,就可以确认是否有CDN,或者通过nslookup或dig查看域名解析

确认有CDN之后,一般通过一下几中思路去查找真实IP:

  • 查历史DNS记录

  • 查子域名

  • 通过POST、Ajax等请求

  • 通过shodan等网络引擎

  • 网站漏洞,敏感文件

等,当然还有其他方法,这里不具体细说,有兴趣的可以研究一下


WEB防护

我们日常用的web也就是Nginx、Apache,IIS等,对于IIS我没什么兴趣,也不想研究,所以这里只说一些Nginx和Apache的基础防护的东西


在Apache中,有一个专门的模块,是ModSecurity,目前最新是3.0.3版本,该模块是免费的开源的模块,它主要有以下作用:

  • SQL Injection (SQLi):阻止SQL注入

  • Cross Site Scripting (XSS):阻止跨站脚本攻击

  • Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击

  • Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击

  • Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击

  • PHP Code Injectiod:阻止PHP代码注入

  • HTTP Protocol Violations:阻止违反HTTP协议的恶意访问

  • HTTPoxy:阻止利用远程代理感染漏洞进行攻击

  • Sshllshock:阻止利用Shellshock漏洞进行攻击

  • Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击

  • Scanner Detection:阻止黑客扫描网站

  • Metadata/Error Leakages:阻止源代码/错误信息泄露

  • Project Honey Pot Blacklist:蜜罐项目黑名单

  • GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断


可以充当WAF,它的安装很简单,直接通过yum install mod_security就可以安装,安装完成后,在httpd目录下,会生成一个mod_security2.so的文件,需要在apache配置文件中添加引用mod,另外会生成一个文件夹modsecurity.d来存放ModSecurity规则集,默认是有modsecurity.conf初始配置,我们需要在配置文件中,将规则引入

WEB基础防护-Apache_java

因为默认的规则,太过基础,所以我们需要自己去定义一些规则,这里推荐用OWASP的核心规则集

OWASP规则集:https://github.com/SpiderLabs/owasp-modsecurity-crs.git

WEB基础防护-Apache_java_02

下载完成后,进入目录查看目录结构,crs-setup.conf.example是主配置文件,我们需要将该文件重命名为crs-setup.conf,当然随便你都可以,只要引入apache配置的ModSecurity模块就可以,在rules下,我们可以看懂它带的一些规则集

WEB基础防护-Apache_java_03

包括JAVA、PHP、IIS、SQL、XSS等防护规则,基础的防护都有了。

这里附上ModSecurity中文手册:http://www.modsecurity.cn/


其他可以做的防护方法及注意的地方:

  • 禁止对一些敏感文件的访问,比如.htaccess、config配置文件、readme.html等,文件中存在敏感信息的文件需要做deny处理

WEB基础防护-Apache_java_04


  • 尽量不要在robots.txt中写有cms类网站的后台路径,并修改后台访问路径

    这种可以说是掩耳盗铃,入侵者也许没有那么容易知道你是用了那种cms,或者无法通过目录扫描之类的工具,扫出你的网站后台,但是你在robots.txt确明确写出了你的后台地址,这种做法真的是……


  • 备份或打包的程序不要放web目录下

    这种做法,无疑是把你的网站开源了


  • 网站目录降权

    很多人直接将网站放root目录下,这完全是为入侵提权搭了个好梯子,web最好放专门的目录,整个目录只给apache的用户权限,apache执行用户在配置文件中配置,如果用php的fpm,是需要在fpm中设置用户及组,web文件权限按照fpm用户设置,如果需要多用户授权,可以通过setfacl来进行管理,尽量给到可用的最低权限


  • 数据库用户降权

       直接在数据库配置文件中用root权限的,也真实心大,以后会专门写数据库安全方面的,这里不多说


  • 静态资源、session、tmp等目录设置禁止执行脚本的权限

    比如wordpress等php网站,因为这些目录是有写入权限的,所以通常会被上传木马脚本之类的,然后通过执行这些脚本来入侵,所以要对这些目录进去权限的设置WEB基础防护-Apache_java_05


  • 另外还可以对一些特殊字符做处理

WEB基础防护-Apache_java_06


  • 关闭版本信息

      版本信息会更快的暴露版本漏洞,给入侵者节约时间,apache中通过ServerSignature Off关闭版本信息


  • 尽量用最新稳定版本的web服务器

    尽量保持自己的web服务器跟随主流稳定版本更新,减少已知的可被利用的漏洞的风险


个人能力有限,就整理这么多了,大佬有经验环境评论指导,下期整理nginx的web防护!