网络攻击防护经验分享
发表于:2024-06-03 20:33:03浏览:196次
部分内容仅针对于php开发的系统
禁用函数
注意对一些并未用到的系统高危函数和可能被注入的高危函数进行禁用,想想别的办法来实现对应的功能吧
攻击人群分类
写好的脚本顺着扫>要你的数据>玩玩而已>要搞死你
- 低技术手段攻击>高技术手段攻击
- 大部分人群的攻击都是一次性的,要是对方是为了要你的数据,那么你只需要设置一些门槛,例如接口的签名、接口组合防护、接口顺序组合等,就可以让他开发的时间成本直线上升,当时间成本超出他的预算后,你就安全了。
- 对于玩玩而已这种,你只需要做好前期防护,只要让它前三次攻击未成功,你就安全了,要是让他成功一次,那么他会立马来兴趣,你就危险了。
- 对于要搞死你这种,那么以上方法全部作废,你最好想想最近得罪谁了并赶紧加强防护吧,要搞死你这种一般也不会用什么高技术手段或者注入攻击,这些时间成本有点高,直接花钱cc攻击走起多好呢,烧满你的带宽就好了,一般情况下,如果没有高防,基本上都防不住,高防也都是利用一些服务器农场或者熔断之类。
- 99%的攻击其实都是简单的低技术手段的攻击,只需要一些基础的校验规则就可以成功拦截掉。
- 大部分专业攻击者其实都是那种写好的脚本,一堆服务器地址,顺着搞。
- 服务器ip一旦暴露在网站信息里,那么爆破和端口扫描将伴随你服务器的一生。
- 要是系统的开发语言也暴露的话,你会遇到很多针对于该语言常用开源框架漏洞的RCE攻击,大部分也都是写好的脚本顺着扫
基础防护
- 部署CDN,隐藏真实的服务器IP地址,能减少服务器被人爆破和端口扫描的风险。
- 关闭掉服务器的一些不用的端口,用再打开,对于22/3306等端口最好更换或者关闭,建议3306端口关闭掉(可利用ssh转发来连接数据库)。
- 服务器秘钥保护安全性大于密码。
- CDN提供了基础的一些防护能力包括防盗链、小额度的CC防护等。
- 如果有能力,可以使用SCDN或者高防IP。
- 如果部署有对象存储,最好是加上防盗链和一些流量防护,并加上cdn作为转发,如果是公开的存储桶,最好加上。(我有血汗给予的教训)。
- 一些公开接口,最好有秘钥或者其他方式的防护,我开发过一个短链接系统,就是因为买来的短链接接口被我开放了,十万次,仅2小时就烧了个精光,后来逼得只好自己开发。
- 对于异常请求和防护日志,最好记录下来,所有信息都要记录下来,定期排查,不断完善防护体系和防护规则。
开源组件
- php部分框架(IBOXS、Laravel、thinkphp)可选用我自己开发的iboxs/waf组件,可对一些常见攻击手段进行拦截。同时支持接口组,即下文提到的利用接口顺序和时间差进行防护的功能;(注意:组件针对于iboxs框架开发,只是可能可以同时兼容Laravel和thinkphp,没试过,组件可用composer安装,已开源)
- 本组件支持ip黑白名单、各种常见的攻击防护(SQL注入、XSS、网址中的异常参数、常见的RCE、get/post参数过滤、地区访问限制、传参规范、常见的扫描器拦截、非常基础的cc防御、常见爬虫的拦截、异常行为的拦截、常见的一句话木马防护、目录禁止访问、动态文件的防盗链等),且支持自定义规则;
- 部分拦截手段和规则功能正在开发中,且本组件长期维护,正在不断更新和完善。
后期本组件可能会考虑实现自动学习接口规则并自建接口组
常见的攻击手段
RCE攻击
- php系统最常见的被攻击手段基本上都是RCE攻击,特别是国产thinkphp框架的漏洞奇多,被攻击的概率也更大。
- 攻击手法多为:
- 利用框架本身的入口s参数,通过get请求和post请求参数的不同,且post请求参数优先级高于get请求参数的特点,通过get传入一个controller/action,同时在post内传入不同的参数方法,使得框架在进入get的控制器方法后,调用post传入的控制器方法函数,绕开系统的登录机制,甚至在post的s参数内注入一些高危方法和执行函数,执行一些攻击者所需的函数,已实现(目前被记录过的):
- 开启系统的调试模式;
- 打印环境变量
- 远程执行一些高危函数
- 绕开系统的用户登陆获取一些信息
- 未知的原因(方法是公开函数)
- 利用一些常见的开源组件进行攻击,例如captcha早期版本存在的几个rce漏洞。
- 攻击短信验证码接口刷验证码(图片验证最好换成滑动验证码)
- 利用框架本身的入口s参数,通过get请求和post请求参数的不同,且post请求参数优先级高于get请求参数的特点,通过get传入一个controller/action,同时在post内传入不同的参数方法,使得框架在进入get的控制器方法后,调用post传入的控制器方法函数,绕开系统的登录机制,甚至在post的s参数内注入一些高危方法和执行函数,执行一些攻击者所需的函数,已实现(目前被记录过的):
防护建议
- 校验user-agent和refer等,攻击者的user-agent也被多次发现过不来自浏览器,而是一些编程语言的信息,这些可直接拦截掉;
- 检验请求接口的顺序和时间差,例如一些页面会请求多个接口,那么这些接口可作为一个组,若用户的请求仅请求了其中一个接口,而没有在指定时间内请求其他接口或者请求顺序不对的,予以拦截;
- 请求时间间隔差的检验,一些接口是在某个页面的下一级页面上的,而要请求二级页面的接口就肯定会先请求一级页面的接口,且人工操作时间差是存在的,那么就可以在请求二级页面的接口时校验是否请求过一级页面的接口,且时间差符合人为操作的特点,且时间差不固定。
- 多个页面的接口请求一定存在时间差,且时间差不固定,还可以利用接口返回一些秘钥,下一次请求必须携带上一次返回的某个字符串,且字符串不固定。
- 传参规范,部分接口可增加一些传参规范,例如参数的顺序固定或用时间为准每小时变化顺序;
- 参数加密,对一些参数进行加密或者携带一些类似签名秘钥之类的数据,或者对整个请求参数进行加密传输。
- 对于XSS攻击其实最好防护,php提供了很多函数专门干这事,只要在输出数据时加以注意就好。
- 接口调用量和频率进行一些限制,调用的时间间隔进行校验(多次间断请求时间差不能相等且有较大的无规律波动)
推荐文章
- 在Ubuntu 18.04 下安装mysql,没有初始密码,重设root密码
- PyCharm、PhpStorm、IntelliJ IDEA、GoLang文件夹右键菜单添加项目
- Vmware EXSi 6.7 物理磁盘扩容
- Bandizip去除广告,注册图标,状态栏文本
- CentOS 挂载超4TB的硬盘的方法
- TP6使用lcobucci/jwt 4.0开发接口,用于token和鉴权
- THINKPHP5整合workerman+gateway
- node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found (required by node)解决方案
- 破解gitlab-ee
- Dell服务器忘记iDrac口登录密码