网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > ddos防御

运维纪录:遭遇CC攻击,防御与查水表(2)

server { ... location ~ ^([SMS_API]) { limit_req zone=sms nodelay; proxy_pass 127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ...}

添加limit_req_zone

# /etc/nginx/nginx.conf

http{ limit_req_zone $binary_remote_addr zone=sms:10m rate=1r/m; ...}

location中应用limit_req_zone

server { ... location ~ ^([SMS_API]) { limit_req zone=sms nodelay; proxy_pass 127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ...}

经过这样的配置,同一IP在一分钟内只能访问该URL一次,否则返回503 server unavailable。

脚本实现自动Ban IP

之后发现源源不断地还有更多IP试图发起CC,不可能人工一个一个的ban,于是写了一个简单shell脚本实现:当天access log中,访问短信API超过30次的IP,将被加入黑名单。当然,这只是临时的,生产环境中,对于同一内网中的多个真实用户可能会出现误ban的情况,因此攻击过后要将脚本关闭。

#!/bin/sh

while[ True ] docat /var/ log/nginx/access.log | grep '[SMS_API]'| awk '{print $1}'| sort | uniq -c | awk '$1>30{print $2}'| whilereadline; doecho'Blocking IP:'$line&& ipset add blacklist $line; donesleep 10 done

找出攻击发起者

由于CC分布式的特征,很难找出真正的攻击发起者。但是,往往可以找到第一个嫌疑者。通过翻看当天上午的access log,发现如下有趣的信息:

113.232. 156.* - - [ 23/Jan/2016: 11: 19: 13+ 0800] "GET /register.html HTTP/1.1"2008383"https://www.google.com/""Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1""-"#使用Chrome进入网站注册页#...#下面若干行纪录均为页面静态资源请求#...113.232. 156.* - - [ 23/Jan/2016: 11: 19: 20+ 0800] "GET [SMS_API]?phone=1584059XXXX HTTP/1.1"20046"http://网站域名.com/register.html""Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1""-"#在Chrome中点击“发送短信验证码”按钮

正常的UA(Chrome 21.0.1180.89),并且有静态资源访问记录,基本可以确定是人工操作。

继续翻:

113.232. 156.* - - [ 23/Jan/2016: 11: 19: 27+ 0800] "GET /register.html HTTP/1.1"2008383"-""Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)""-"#注意,这个人在1分钟内使用了IE9重新进入网站注册页#...#下面若干行纪录均为页面静态资源请求#...113.232. 156.* - - [ 23/Jan/2016: 11: 19: 35+ 0800] "GET [SMS_API]?phone=1552442XXXX HTTP/1.1"20046"http://网站域名.com/register.html""Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)""-"#这个人在1分钟内使用IE9再次点击“发送短信验证码”按钮

普通用户是不会同时使用两款浏览器登录同一个网站并点击发送短信按钮的。除非——你想要验证这个网站是否根据session判断同一用户是否在一分钟内调用了多次发送短信API。再往后翻记录:

113.232. 156.* - - [ 23/Jan/2016: 11: 19: 51+ 0800] "GET [SMS_API]?phone=1504032XXXX HTTP/1.1"20046"-""-""-"

果不其然,这个人用模拟请求调用了发送短信API(因为没有正常的UA)在这的几分钟后,来自全国各地的肉鸡就开始flood服务器了。

人肉攻击发起者

换位思考一下,如果我是黑客,在开始CC之前,是否需要测试一下这个API,然后再在肉鸡上配置随机手机号,最后再进行CC?

(责任编辑:admin)