防cc攻击脚本编写教程 防cc攻击手册

avatar shenyifan 2023-10-08 15:32 342次浏览 评论已关闭

今天想分享一下安全脚本的编写,以防CC脚本为例。

事情就是这样发生的由于激烈的商业竞争,一些公司将不可避免地出现恶意竞争事实上,CC攻击是DDOS类别攻击中最简单的实施方式在此之前,我的公司遭受了一波由商业竞争对手发起的CC攻击具体细节就不多说了事实上,这种事情并不奇怪。

让我们分享一下我的解决方案事实上,很多人会说WAF等设备可以有效地抵抗CC攻击,包括开源WAF有必要写一个脚本来保护它吗?我的想法其实很简单,对于不知道如何建立开源WAF,或者资本投资不大的公司,可以有一个简单的防御解决方案,这是我写这篇文章想要实现的意义,也是一些反馈,当然,写防御脚本基本上是每个安全人员都会和非常熟练的技能,这里我先扔砖,分享CC脚本的设计理念。

首先,我们应该向读者推广什么是CC攻击?CC(ChallengeCoHapsar,挑战黑洞)攻击是DDOS攻击的一种类型,使用代理服务器向受害者服务器发送大量看似合法的请求CC根据其工具命名,攻击者使用代理机制,使用许多广泛使用的免费代理服务器发动DDOS攻击。

许多免费代理服务器支持匿名模式,这使得跟踪变得非常困难CC攻击的原理是什么?CC攻击的原理是攻击者控制一些主机不断向对方服务器发送大量数据包,导致服务器资源耗尽,直到停机崩溃CC主要用于攻击页面每个人都有这样的经历:当访问一个网页的人数特别多时,打开网页会很慢。

CC是模拟多个用户(多少线程就是多少用户)不断访问需要大量数据操作(即大量CPU时间)的页面,导致服务器资源浪费,CPU长期处于100%,直到网络拥塞,总会有无穷无尽的连接,中止正常访问CC攻击的特点是什么?

1. 业务流量激增2. 访问日志继续大幅增长3. 大量来源相同的IP访问同一域名基于以上介绍,我们来思考一下如何限制CC攻击首先,无论是开源WAF还是商业WAF,CC攻击的防御大多是被阻断的,而不是被扔进黑洞。

两者有什么区别?阻断一般是返回403响应码,使本应正常返回的包返回403页例如,它相当于本应返回1M大小的包返回1K这可以大大降低网络压力和服务器处理压力,减少CC攻击的影响我们有WAF,但为什么有WAF防CC攻击,也开发防CC脚本,这里有一个问题需要考虑,如果服务器在云中,网络是云计费,即使你继续返回403,同样的会计费用,对于攻击者,只要你有损失他已经成功,即使损失对你微不足道,但是CC的成本并不高,甚至可以说没有成本,最终你可能会比耐心付出更多。

抱着这种心态,我研究了如何直接让他的CC打不进来。

首先,让我们看看一个整体的想法:攻击者发起CC攻击由于域名在云环境中,他们将通过云计费通道进入代理服务器,并通过代理服务器转发到应用服务器应用服务器将相应的请求内容返回给代理服务器,代理服务器将通过计费通道响应。

因此,根据这一过程,综合考虑我们的目的,需要在代理服务器上动手,使异常请求无法通过,如下:因此,CC攻击请求的出口计费不会返还给攻击者,也不会扣除流量费那么如何判断请求是否为CC呢?首先,Nginx有自己的功能参数来防止CC。

上面描述了CC攻击的特征根据特征,我们可以使用以下参数limit_req_zone $binary_remote_addr zone=one:10m rate=300r/s;limit_req zone=one burst=30;

这意味着同一IP的请求限制在每秒300次,持续30秒的请求将被阻断并返回503次返回503和403有什么区别?从这个角度来看,没有区别,所以我们需要使用以下模块来帮助我们继续开发Nginx有很多强大的模块,下面是一个模块,记得在编译和安装时加载~。

ngx_log_if模块,详情见github.com/cfsego/ngx_log_if该模块的功能是筛选日志使用该模块的逻辑是筛选503日志中的源IP,并将其添加到防火墙中进行阻断逻辑中涉及的问题是为什么每分钟只添加第一个503日志对应的IP,而不是在做出判断后添加防火墙阻断。

事实上,考虑到并发量大的判断逻辑会增加服务器负载,最好逐一添加当然,它也可以在这里进行优化第一个定义是日志格式我们遵循nginx默认日志格式如果您在这里不知道,您可以搜索nginx默认日志格式access_log /var/log/nginx/503/errortest.log;。

接下来用awk筛选日志中的ip,如果有不懂awk的朋友可以参考status=`awk -v i=$i -F   NR==i{print $9} /var/log/nginx/503/errortest.log`

做出判断if [ “$status” = 503 ];thenip_503=`awk -v i=$i -F   NR==i{print $1} /var/log/nginx/503/errortest.log`

加防火墙sed -i “6 i-A INPUT -s $ip_503/32 -j DROP” /etc/sysconfig/iptables考虑到503日志为空和非503状态的IP记录,制作以下脚本#!/bin/bash

i=1while :dostatus=`awk -v i=$i -F   NR==i{print $9} /var/log/nginx/503/errortest.log`if [ “$status” = 503 ];then

ip_503=`awk -v i=$i -F   NR==i{print $1} /var/log/nginx/503/errortest.log`echo $ip_503sed -i “6 i-A INPUT -s $ip_503/32 -j DROP” /etc/sysconfig/iptables

echo “” > /var/log/nginx/503/errortest.logservice iptables restartnginx -s reloadbreakelif [ `cat /var/log/nginx/503/errortest.log|awk -F   NR==i{print $9} /var/log/nginx/503/errortest.log`=”” ];then

breakelsei=$[i 1]fidone然后使用crontab每分钟运行一次或更短的时间。

来源:深易凡软件库

发表评论
请先登录后再评论~