几种常见服务器攻击 & 短信接口被恶意调用,Nginx如何解决

关键字:ngx_http_limit_conn_module, ngx_http_limit_req_module

 

1、常见的几种服务器攻击类型(快速瞄下就好)

一、注入脚本

利用后台漏洞通过URL、表单提交等行为将关键SQL、JavaScript等脚本带入程序,从而在数据库或应用中进行破坏。还有许多黑客会使用F12或postman等拼装ajax请求,将非法数据发送给后台,造成程序的报错使其暴露出异常信息,攻击装根据异常猜测后台使用的语言及框架。

XXS 跨站脚本攻击(XSS)通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

二、网络嗅探程序

查看通过Internet的数据包来抓取口令和内容,通过侦听器程序可以监视网络数据流,从而获得用户登录的账号和密码。数据的安全传输可以采用对称加密、非对称加密、走https协议、CSRF验证、TOKEN验证等手段相结合进行防治。

三、拒绝服务 

这是常见的一种方式,通过向某个站点服务器反复发送请求,导致无法承载大量的请求而“拒绝服务”。

CC

CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃◊ CC主要是用来攻击页面的,每个人都有这样的体猃:当一个网页访问的人数特别多的时候,打幵网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些霓要大量数据操作(就是霓要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%, 7:k远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

DDoS
全称Distributed Denial of Service,中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。通俗点讲就是利用网络节点资源如:IDC服务器、个人PC、手机、智能设备、打印机、摄像头等对目标发起大量攻击请求,从而导致服务器拥塞而无法对外提供正常服务,只能宣布game over。@link https://www.jianshu.com/p/e7a5fdc67b8f

windows平台存在大量漏洞,流氓软件,病毒,木马大量充斥着网络,黑客可以很容易入侵控制大量的个人计算机来发起DDOS攻击从中谋利。攻击已经演变成非常完善的产业链◊通过在大流量网站的网页里注入病毒木马,木马可以通过windows平台的漏洞感染浏览网站的人,一旦中了木马,这台计算机就会被后台操作的人控制,这台计算机也就成了所谓的肉鸡,每天都有人专门收集肉鸡然后以几毛到几块的一只的价格出售,因为利益需要攻击的人就会购买,然后遥控这些肉鸡攻击服务器。

四、钓鱼网站

这种手段需要黑客会构建钓鱼网站,对目标网站的请求方式比较了解,一般会通过在目标网站内利用留言功能留下网址,可能管理员会通过这个网址进入黑帽构造的网页而触发增加管理用户的请求。

五、木马植入

黑客直接通过向服务器种植木马,开启后门,取得控制权。

六、恶意小程序

携带在我们常用应用上的微型程序,可以修改硬盘上的文件,以窃取口令等。

 

2、短信接口被恶意调用,如何解决?

   前段时间“聊天”被问“短信验证码登录”的交互,需要几个接口,怎么实现?因为平时有做过验证码登录,所以回答:“第一个接口就是发送短信验证码,第二个是登录接口;第一个接口为防止被恶意调用,需要加图形验证码来过滤,巴拉巴拉...”。当时回答得不够全面,后续提问“如何应对暴力破解验证码?”更是完全没考虑过,所以现在想整理记录下,最近呢凑巧商城服务器被CC攻击了,商城的搜索功能平均1秒被请求2次(平时流量很小),所以我就以实战防御并结合短信接口问题来总结API被恶意调用的解决方案。

  1. 封禁恶意IP(初级攻击:攻击者IP固定,未被伪造)
    思路是找出频繁请求的那些IP,在防火墙或者 web server 级别做限制,拒绝它们的请求。
    首先通过分析日志(access_log)找出请求次数最多的前50个IP
    awk '{print $1}' /var/log/nginx/www.exanple.com.access.log | sort|uniq -c | sort -nr | head -n 50

     其次配置Nginx,限制IP访问,如下:

    #指定上下文deny掉指定的IP
    location / {
        deny  183.129.185.250;
        deny  112.17.245.112;
        deny  112.17.245.117;
        deny  36.23.223.191;
        deny  8.208.28.143;
        #allow 192.168.1.1/24;
        #allow 127.0.0.1;
        #deny  all;
    root $wwwroot;
    ... }
    最后别忘记重启Nginx。重启之前可以“nginx -t”预先测试下有没有语法问题

  2. 检测UA的合法性(初级攻击:头信息User-Agent没有被伪造)
    检测工作可以放在web服务器(nginx、httpd等)上,也可以集成到具体的某个接口、应用中,检测的方法网络上有很多这里就不展开了。

  3. 加验证码
    验证码检验可以有效防御大部分的攻击,且做到以下几个方面,可以有效防御验证码“暴力破解”:

    ① 验证码的位数最好不小于6位
    ② 根据使用场景合理设置有效期,如:1分钟,5分钟,30分钟
    ③ 一次一码原则:验证后即销毁
    ④ 验证码校验错误次数超过上限,则采取账户锁定、禁止访问等策略
    ------------------------------------------------------------------------

    另外验证码最好有一定的破解难度,因为网络上验证码识别工具很多,所以也可以考虑使用难度更大的文字、图片相结合的图文验证码,或需要鼠标去移动到指定位置拖拽类验证码等。不过复杂的验证机制会降低用户使用体验,所以大家都视自己的情况而定。



  4. 设置 rate limit
    前面提到DDoS是分布式拒绝服务的攻击,它的攻击是“分布式”的,来至四面八方,但是这些肉鸡不是真正的黑客,他们只是被利用的受害者,所以这些肉鸡的请求/攻击不会主动伪装,即请求会携带真实用户标识、Client IP等,基于这个我们可以
    实现rate limit来有效防御部分DDoS。

    服务器级别、应用级别分别实现rate limit:

    ① 服务器级别
    Nginx为例,可以利用 自带模块 ngx_http_limit_conn_modulengx_http_limit_req_module 做一些防御工作,能达到不错的效果,具体如何设置请查阅超链接的内容或自行百度google;

    应用级别
    以编程手段,配合缓存服务器如redis、memcached等实现访问速率限制,通常做法是给访问者分配密钥、TOKEN等作为访问的唯一标识。


  5. 封禁代理或机房IP
    IP可以考虑对代理和机房IP的识别,自己识别成本太高,可以对接第三方的SaaS服务,但也不能保证100%识别代理,70%~80%是差不多的。

    此处理解很模糊,待以后完善!

  6. 购买安全软件、云安全服务

针对短信验证码问题,还可以考虑“号码真实性”的检测,不过即使找短信供应商合作,也很难做到100%的准确率,并且不是实时的,只能说有一定的帮助。

参考链接:https://segmentfault.com/q/1010000008068270

posted @ 2020-07-31 18:23  下班闪电去打卡  阅读(1679)  评论(0编辑  收藏  举报