应对CC攻击的自动防御系统的原理与实现Word下载.docx
- 文档编号:20844433
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:17
- 大小:182.24KB
应对CC攻击的自动防御系统的原理与实现Word下载.docx
《应对CC攻击的自动防御系统的原理与实现Word下载.docx》由会员分享,可在线阅读,更多相关《应对CC攻击的自动防御系统的原理与实现Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
请求的URL地址,但并不包含querystring(TheURLpathrequested,notincludinganyquerystring.)
%{local}p->
用户请求的服务器端口(一般为80)
%D->
这个请求共消耗了服务器多少微秒(Thetimetakentoservetherequest,inmicroseconds.)
%{%s}t->
服务器收到这个请求时,时间戳的值(secondssince1970-01-0100:
00:
00UTC)
例子:
192.168.31.1"
/shell/yf"
801182311417164313
译为:
IP为192.168.31.1的主机,在时间戳为1417164313的时候,访问了/shell/yf,并由服务器的80端口向其提供服务,共耗时118231微秒
或为:
IP为192.168.31.1的主机,在2014-11-2816:
45:
13的时候,访问了/shell/yf,并由服务器的80端口向其提供服务,共耗时0.118231秒
至于为什么不使用httpd.conf中官方定义的日志,原因如下:
-用户访问日志的一条记录可大约控制在60Bytes以内,数据量小,便于后期分析,官方定义的日志太过臃肿,影响分析速度
-使用时间戳标志时间,便于后期分析,官方定义的日志时间参数为常规的表达方式,不便于直接进行处理
-httpd的日志系统本身就是从旧到新进行排序记录的,所以/etc/httpd/logs/yfddos_log日志条目的时间戳,亦为从小到大进行排序的,数据记录更加鲜明
2.2yfddosd黑名单文件格式
黑名单文件格式
yfddosd黑名单文件/etc/yfddos/web-yf-search.b格式如下:
#ipadd-stamprmv-stamp
1.2.3.414160463351416046395
1.2.3.514160463361416046396
1.2.3.614160463391416046399
每一行为一个黑名单条目,上面第一个条目的意义为:
IP地址:
1.2.3.4
开始时间:
时间戳1416046335,即2014-11-1518:
12:
15
终止时间:
时间戳1416046395,即2014-11-1518:
13:
直观意义为:
IP地址:
1.2.3.4,从2014-11-1518:
15开始,被封杀1分钟,在2014-11-1518:
15时自动解封。
这个文件将由驻留在系统中的daemon守护进程yfddosd进行维护更新。
2.3守护进程yfddosd:
防御系统的逻辑核心
守护进程的原理图
守护进程yfddosd是整个CC防御系统的核心,而functionanalyze_and_insert_black()则是yfddosd的核心。
yfddosd的配置参数:
yfddos_blackfilePath='
/etc/yfddos/web-yf-search.b'
yfddos_accesslogPath='
/etc/httpd/logs/yfddos_log'
functionanalyze_and_insert_black(){
#analyze_and_insert_black():
#
$1:
maxfrequency(seemsasabuseifabovethat)$2:
blackip-ttl,timetolive,unitisseconds(s)
$3:
theaccesslog${3}secondsbeforewillbeanalyzedtogeneratetheabuseipliststhatwewillblock
#example:
analyze_and_insert_black"
limit"
"
ttl"
time"
4"
10"
5"
#分析在过去5s内的用户访问日志如果有人在这5s内访问量>
=4系统将视其为资源滥用者将其加入服务黑名单
#一条黑名单的作用时间为10s即在10s之后系统自动删除此黑名单条目服务则继续向其开放
#globalvars:
#stamplogtmpfileyfddos_blackfilePath
#......
}
函数analyze_and_insert_black有三个输入参数:
分析日志文件/etc/httpd/logs/yfddos_log中,在过去5s内的用户访问日志,如果有IP在这5s内访问量>
=4,守护进程yfddosd将视其为资源滥用者,然后将这个IP加入到黑名单文件/etc/yfddos/web-yf-search.b中,此条黑名单的作用时间为10s,在10s之后,守护进程yfddosd将删除此黑名单条目。
150"
2700"
905"
分析日志文件/etc/httpd/logs/yfddos_log中,在过去905s内的用户访问日志,如果有IP在这905s内访问量>
=150,守护进程yfddosd将视其为资源滥用者,然后将这个IP加入到黑名单文件/etc/yfddos/web-yf-search.b中,此条黑名单的作用时间为2700s,在2700s之后,守护进程yfddosd将删除此黑名单条目。
简记为:
分析日志文件/etc/httpd/logs/yfddos_log中,在过去(time)s内的用户访问日志,如果有IP在这(time)s内访问量>
=limit,守护进程yfddosd将视其为资源滥用者,然后此IP将会被加入到黑名单文件/etc/yfddos/web-yf-search.b中,作用时间为(ttl)s,在(ttl)s之后,守护进程yfddosd将自动删除此条目。
从上述中可看出,守护进程yfddosd至少需要完成如下三个任务:
◆分析日志文件/etc/httpd/logs/yfddos_log中指定时间内的用户访问记录
◆将资源滥用者的IP加入文件/etc/yfddos/web-yf-search.b,并设置封杀TTL参数值
◆将/etc/yfddos/web-yf-search.b中已经过期的条目全部及时删除
守护进程yfddosd是如何实现上面三个逻辑的:
◆分析日志文件/etc/httpd/logs/yfddos_log中指定时间内的用户访问记录:
(1)取出/etc/httpd/logs/yfddos_log中过去time秒的访问日志数据,使用二分法将这一操作的时间复杂度压缩到K*log2(N)以内,其中N为/etc/httpd/logs/yfddos_log中日志总行数,K为一次测试的耗时量,一般为1ms以内,即如有1048576条访问记录,这一操作将仅需要20*1ms。
(2)使用正则RE对这些数据进行二次处理,过滤出所有访问指定URL的用户IP(这个URL为想要防御的http服务url,例如在http:
//www.yfdc.org系统中,所防御的就是/shell/yf,这个服务向访问者提供信息的search与get服务),再次使用sort与uniq对这些IP进行处理,以统计出每个IP的访问次数并进行高低排序。
将所有访问次数超过阈值limit的IP更新到黑名单文件/etc/yfddos/web-yf-search.b中,每个黑名单条目的封杀时间为ttl秒
遍历/etc/yfddos/web-yf-search.b中所有黑名单条目,结合当前时间戳,将所有已经过期的条目一一删去
下面是守护进程yfddosd状态机的伪代码:
(略去了一些处理细节)
#initandFSMstartwork...
counter=0
whiletrue
do
sleep5
counter=counter+1
deleteobsoleteitems#将/etc/yfddos/web-yf-search.b中已经过期的条目全部删除
if#every5seconds:
5s
then
6"
#分析在过去5s内访问的用户如果有人其访问量大于等于6系统将视其为资源滥用者
#遂将其加入服务黑名单其作用时间为10s在10s之后daemon进程自动删除这个ip黑名单条目
fi
if#every5*3seconds:
15s
14"
45"
15"
if#every5*3*4+5seconds:
65s
40"
840"
65"
if#every5*3*4*3*5+5seconds:
905s:
15min
if#every5*3*4*3*5*4+5seconds:
3605s:
1h
300"
7200"
3605"
if#every5*3*4*3*5*4*3+5seconds:
10805s:
3h
400"
21600"
10805"
if#在每天的00:
01-04:
59时间区间一天仅执行一次
#备份日志
done
防御者应斟酌调整每个检测时间点的参数值(封杀时间ttl与判定阈值limit),以调节系统应对CC攻击到来时的反应时间。
0x02源代码
#####################################
vim
/usr/local/bin/yfddosd.sh
:
nohup
bash
&
>
"
/etc/yfddos/"
yfddosd-log-`date
+%Y-%m-%d`"
yfddos
daemon
mkdir
/etc/yfddos
###
refresh
tll
logtmpfile=`mktemp`
stamp=`date
+%s`
touch
$yfddos_blackfilePath"
if
grep
-Po
'
[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
/dev/null
then
cat
|
while
read
i
do
deadstamp=`echo
$i"
[0-9]+$'
`
[
$stamp"
-le
$deadstamp"
]
echo
$logtmpfile"
fi
done
chmod
o+r
mv
-f
!
255.255.255.255
0
0'
function
analyze_and_insert_black()
{
#
$1:
max
frequency(seems
as
abuse
above
that)
$2:
blackip-ttl,time
to
live,unit
is
seconds
(s)
$3:
the
access
log
${3}
before
will
be
analyzed
generate
ip
lists
that
we
block
example
analyze_and_insert_black
分析在过去5s内的用户访问日志
如果有人在这5s内访问量>
=4
系统将视其为资源滥用者
将其加入服务黑名单
一条黑名单的作用时间为10s
即在10s之后
系统自动删除此黑名单条目
服务则继续向其开放
global
vars:
stamp
logtmpfile
yfddos_blackfilePath
local
threshold="
$1"
ttl="
$2"
stamp_pre="
$3"
i=0
num="
fre=0
ip=0
localbuf=0
linenum=0
deadstamp=0
$((stamp-stamp_pre))"
#二分查找初始化
temp=0
yf_x='
1'
yf_y=`cat
wc
-l`
$yf_y"
1"
yf_y=1
yf_I=$(((yf_x+yf_y)/2))
temp=`cat
$temp"
-gt
0"
temp=`sed
-n
$p'
[0-9]+
$'
`
-lt
$stamp_pre"
else
true
#使用二分查找的方法
快速地分析访问日志
${yf_x}p"
-ge
break
$((yf_y-yf_x))"
yf_x="
${yf_I}p"
$yf_I"
yf_y="
yf_I="
$(((yf_x+yf_y)/2))"
continue
$yf_x"
else
fi
$num"
sed
${num},\$p"
^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
sort
uniq
-c
-rn
fre=`echo
[0-9]+'
head
-1`
ip=`echo
$fre"
$threshold"
then
#insert
illegal
ips
add-stamp
rmv-stamp
#1.2.3.4
1416046335
1416046395
temp=`grep
-Pn
${ip//./\\.}
linenum=`echo
^[0-9]+'
-1
$((stamp+ttl))"
-i
${linenum}s/.*/${ip}
${stamp}
$((stamp+ttl))/g"
\$a
${ip}
}
#ini
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应对 CC 攻击 自动 防御 系统 原理 实现