精华内容
下载资源
问答
  • 网络拟态防御通过冗余执行体动态性、多样性以及裁决反馈机制...实验与多目标隐藏技术对比,结果表明拟态防御具有更高的防御效果,结合具体案例给出了针对利用系统漏洞攻击的具体攻防路径,验证了防御策略算法有效性。
  • 针对中间人攻击的最佳个性化防御策略
  • 计算机网络防御策略模型
  • 针对网络攻防对抗中的安全防御策略选取问题,研究攻防双方策略相互影响的动态变化过程。从攻防双方的博弈过程出发,构建攻防博弈模型,基于蒙特卡洛模拟法模拟攻击者的攻击过程,得到攻击者的最佳攻击效用,进而计算...
  • 安全专家讲述:APT攻击及防御策略概述
  • 在此基础上,提出同时在故障过程中优化控制和电网发展过程中规划建设的双层连锁故障防御策略,并建立加入防御策略的连锁故障仿真模型。采用某省实际电网进行连锁故障仿真,验证了所提指标的合理性,并通过对比加入...
  • DDos攻击防御策略

    2020-06-23 22:43:21
    DDOS攻击防御策略 DDOS(DDOS:Distributed Denial of Service) 分布式拒绝服务攻击. 在信息安全三要素里面—保密性,完整性,可用性,中DDOS(分布式拒绝服务攻击),针对的是目标机器的可用性,这种攻击方式是利用目标系统...

    DDOS攻击防御策略
    DDOS(DDOS:Distributed Denial of Service) 分布式拒绝服务攻击.
    在信息安全三要素里面—保密性,完整性,可用性,中DDOS(分布式拒绝服务攻击),针对的是目标机器的可用性,这种攻击方式是利用目标系统网络系统功能的的欠缺或者直接消耗其资源,是目标机器木法正常提供服务.
    拒绝服务攻击示意图:
    在这里插入图片描述DDOS是一类攻击而不是一种攻击类型,并且DDOS的防御是一个可以做到相对自动化但是做不到绝对的自动化,很多攻击过程自动化并不能识别.
    网络层的攻击
    Syn-flood
    利用TCP建立连接时3次握手的”漏洞”,通过原始套接字发送源地虚假地址SYN报文,使用目标主机永远无法完成3次握手,占满了系统的协议队列,资源得不到释放,进而形成拒绝服务攻击,是互联网中最主要的DDOS攻击形式之一.网上有一些加固的方法,例如调整内核参数的方法,可以减少等待重试,加速资源释放,在小流量的syn-flood的情况下可以缓解,单流量稍大时完全不抵用.防御syn-flood的常见方法有:syn-proxy,syn cookies.首包(第一次请求的syn包)丢弃等.
    ACK-flood
    对于虚假的ACK包,目标设备会直接回复RST包丢弃连接,所以伤害值远不如syn-floo.DDOS的一种原始方式.
    UDP-flood
    使用原始套接字伪造大量虚假源地址的UDP包,目前DNS协议为主.
    ICMP-flood
    Ping洪水,比较古老的方式.
    应用层攻击
    CC
    ChallengeCollapsar的名字源于挑战国内知名的安全厂商绿盟的抗DDOS设备”黑洞”,通过boenet的傀儡机或寻找匿名代理服务器,向目标发起大量真实的http请求,最终消耗掉大量的并发资源,拖慢整个网站甚至彻底的拒绝服务.
    互联网的架构追求扩展性本质是没了提高并发能力,各种SQL性能优化措施:消除慢查询,分表分库,索引,优化数据结构,限制搜索频率等本质都是为了解决资源消耗,而CC攻击大有反其道而行之的意味,占满服务器并发连接数,尽可能使请求避开缓存而直接读取数据库,读数据库要找对耗费资源的查询,最好无法利用索引,每个查询都全表扫描,这样就能用最小的攻击资源起到最大的拒绝服务效果
    互联网产品和服务依靠数据分析来驱动改进和持续运营,索引除了前段的APP,中间件和数据库这类OLTP系统,后面还有OLAP,从日志收集,储存到数据处理和分析的大数据平台,当CC攻击发生时,不仅OLTP的部分收到了影响,实际上CC会产生大量的日志文件,直接会对后面的OLAP产生应县,影响包括两个层面,一个当日的数据统计完全是错误的.第二个层面因CC期间访问日志剧增也会加大后端数据处理的负担
    CC是目前应用成攻击的主要手段之一,在防御上有一些方法,但是不能完美解决这个问题.
    DNS flood
    伪造原地址的海量DNS请求,用于是淹没目标的DNS服务器,对于攻击特定企业权威DNS的场景,可以将原地址设置为各大ISP DNS服务器的IP嗲孩子以突破白名单限制,将茶行的内容改为针对目标企业的域名做随机化处理,当查询无法命中缓存是,服务器负载会进一步增大.
    DNS不只在UDP-53提供服务,同样在TCP协议提供服务,所以防御的一种思路及时将UDP的查询强制转为TCP,要求溯源,如果是假的源地址,就不在回应.对于企业自有权威DNS服务器而言,正常请求多来自于ISP的域名递归解析,如果将白名单设置为ISP的DNS service列表.对于源地址伪造成ISP DNS的请求,可以通过TTL值进一步判断.
    慢速连接攻击
    针对http协议,以知名的slowloris攻击为起源:先建立一个http连接,设置一个比较大的content-length,每次只发送很少的字节,让服务器一直以为http头没有传输完成,这样的连接一多很快就会出现连接耗尽.
    目前出现了一些变种,http慢速的post请求和慢速的read请求都是基于相同的原理.
    DOS攻击
    有些服务器程序存在bug.安全漏洞或架构缺陷,攻击者可以通过构造的畸形请求发送给服务器,服务器因不能正确处理恶意请求而陷入僵死状态,导致拒绝服务攻击.例如某些版本app服务器中存在缓存区溢出,漏洞可以触发但无法拿到shell,攻击者可以改变程序执行流程使其跳转到空指针或无法处理的地址,用户态的错误会导致进程挂起,如果错误不能被内核回收则可能使系统当掉.
    这类问题效果也表现为拒绝服务攻击,但本质上属于漏洞,可以通过patch程序的新版本解决,我认为这不属于DDOS的范围.
    攻击方式
    混合型
    在实际大流量的攻击中,通常并不是上述一种数据类型来攻击的,往往是混杂了TCP和UDP流量,网络层和应用层攻击同时进行.
    反射型
    2004年时DRDOS(是英文Distributed Reflection Denial of Service的缩写,中文意思是分布式反射服务攻击,与DOS和DDOS不同,该方式考的是发送大量带有被害者IP地址的数据包给攻击攻击主机,让后攻击主机对IP地址源做出大量的回应,形成拒绝服务)
    通过将SYN包的原地址设置为目标地址,然后向大量的真实TCP服务器发送的SYN包,而这些收到SYN包的TCP service为了完成3次握手包SYN|ack包”应答”给目标地址,完成一次”反射”攻击,攻击者隐藏了自身,但有个问题是攻击者制造的流浪和目标收到的攻击量是1:1的,且SYN|ack包导弹目标后被回以rst包,整个攻击的投资回报率不高.
    反射型攻击的本质是利用”咨询-应答”式协议,将质询包的原地址通过套接字伪造设置为目标地址,则应答的”回包”都被发送至目标,如果回包提交比较大或协议支持递归效果,攻击流量会被放大,成为一种高性价比的流量型攻击.
    反射型攻击利用的协议有NTP,chargen,SSDP,DNS,RPC portmap等等.
    流量放大型
    以上面提到的DRDOS中常见的SSDP协议为例子,攻击者将search type设all,搜索所有可用的设备和服务,这种壁柜效果产生的放大背书是非常大的,攻击者只需要以较小的伪造源地址的查询流浪就可以制造出几十甚至上百倍的回应流量发送到目标.
    脉冲型
    很多攻击持续时间非常短,通常5分钟以内,流浪图上表现为突出状的脉冲.
    所以这种攻击流行是因为”打打停停”效果比较好,刚触发防御阀值,防御机制开始生效就停止攻击,周而复始.蚊子不叮你,却在你耳边非,刚开灯打他他就没影了,当你关灯他有出来了.
    自动化的防御机制大部分都是依靠设置阀值来触发的.尽管很多厂商宣称自己的防御措施都是秒级响应,但实际上比较难.
    网络层的攻击检测通常分为逐流和逐包,前者是根据netflow以一定的抽样比例(例如1000:1)检测网络是否存在doos攻击,这种方式因为是抽样比例,所以精确率会比较低,做不到秒级响应,第二种逐包检测,检测精度和响应时间比较短但是成本比较高,一般厂商都不会无视TCO全部部署这类方案,其防御清洗策略的启动也依赖与阀值,加上洗流设备一般情况下不会串联部署,触发清洗后需要引流,因此大部分场景可以做秒级检测但是做不到秒级防御,近源洗流尚且如此,云清洗的触发和转换过程就更慢了,所以利用防御规则的生效过度期,在触发防御前完成攻击会有不错的效果,在结果上表现为脉冲.
    链路泛洪
    随着DDOS攻击技术的发展,有出现了一种新型的攻击方式link-flooding attack,这种方式不直接攻击目标网络traceroute的倒数第二跳,即上联路由,致使链路拥塞.国内ISP目前未开放anycast,所以这种攻击方式的必要性有待观望.
    对一级ISP和IXP的攻击都可以使链路拥塞.
    多层防御结构
    DDOS攻击本质上是一种只能缓解而不能根本防御的攻击,它不像漏洞那样打个补丁就把问题解决了,DDOS就算购买和部署了当前市场上比较有竞争力的防御解决方案也谈不上彻底防御.防火墙,IPS,waf这些安全产品都号称自己有一定的抗D能力,而实际上他们只针对小流浪下,应用层的攻击比较有效,对于稍大流浪的DDOS攻击则无济于事.
    以2015年年中的情况威力,国内的DDOS攻击在一个月内攻击流量到达300G的就将近10-20次,这个数值将随着国内家庭宽带网速提升而进一步放大.对于200-500G的攻击流量该如何防御.完整的防御模型有四层.
    这四层不是严格意义上的宗申防御关系,也不是在所有的防御中4层都会参与,可能有时候只是其中的2层参与防御,但对于超大流量的攻击而言,4层就是防御急着的全部,在没有其他解决手段.跟厂商的市场宣传可能有所不同,大流量攻击的防护并不是像某些厂商宣称的那样靠单方面就能解决的,而是多层共同参与防御的结果.
    ISP/WAN层
    这一层通常是对用户不可见,如果只是中小企业,那这一层可能真的不会决出到.但如果是大型互联网公司或者云厂商,甚至云洗流厂商,这层是必不可少的.因为当前流量超过自己能处理的极限时必须要借助电信运用商的能力.大型互联网公司虽然自身储备的带宽比较大,但还没有达到轻松抵抗大流量DDOS的程度,毕竟带宽是所有IDC成本中最贵的资源没有之一.无论是云计算厂商,大型互联网公司对外宣称的成功抵御200G以上攻击的新闻背后都有运用到了运营商的抗D能力,另外像第三方云清洗平台他们实际上或多或少的依赖电信运营商,如果只靠自身的清洗能力,都是非常有限的.
    目前如中国电信的专门做抗D的云堤提供了(近源洗流)和(流量压制)的服务,对于购买其服务器的厂商来说可以自定义需要黑洞路由的IP与电信的设备联动,黑洞路由是一种简单粗暴的方法,处理攻击流量,部分真实用户的访问也会被黑洞吃掉,对于用户体验大打折扣的行为,本质上属于为了保障留给其余用户的链路框框的弃卒保帅的做法,之前还会有这种收费服务是因为加入不这么做,全站服务器会对所有用户彻底无法访问.对于云清洗厂商而言,实际上也需要借助黑洞路由与电信联动.
    相比之下,对攻击流量的牵引,清洗,回注的防御方式对用户体验的敲诈你没那么大,但是跟黑洞路由比防御方成本比较高,且触发到响应的延时较大.
    在运营商防御这一层的主要的参与者是大型互联网公司,公有云厂商,云清洗厂商,其最大的意义在于应对超过自身带宽储备和自身DDOS防御能力之外的超大攻击流量时作为补充性的缓解措施.
    CDN/intent层
    CDN并不是一种抗D的产品,但对于web类服务而言,他却正好有一定的扛D能力,以大型电商的抢购为例,这个王文量非常大,从很多指标上看不言语DDOS的CC,而在平台侧实际上在CDN层面用验证码过滤了绝大多数请求,最后到达数据库的请求只占整体请求量的很小一部分.
    对http CC类型的DDOS,不会直接到源站,CDN会先通过自身的带宽硬抗,抗不了的或者穿透CDN的动态请求会到元湛,如果源站前段的抗D能力或者源站前的带宽比较有钱,就会被彻底的D崩.
    云清洗厂商提出的策略是,预先设置好网站的CNAME,将域名指向云清洗的DNS服务器,在一般情况下,云清洗厂商的DNS仍将穿透CDN的回源的请求指向源站,在检测到攻击发生时,域名指向自己的清洗集群,然后在将清洗后的流浪回源.
    阿里云服务与知道创于抗D
    点击回溯模式将自己的域名跟IP写好
    将CNAME修改到阿里的云DNS上面之后点击修改选择云端模式
    检测方式主要是在客户网站前部署反向代理(nginx),托管所有的并发连接.在对攻击流浪进行分流的时候,准备好一个域名到IP的地址池,当IP被攻击时封禁并启用地址池中的洗衣柜IP,如此往复.
    以上是类Cloudflare的解决方案,国内云洗流厂商的实现原理都相似.不过这类方案有一个通病,由于国内环境不支持anycast,通过DNS引流的方式需要比较长的生效时间,这个时间依赖与DNS递归生效的时长,对自身完全不可控.同时CDN仅对web类服务有效,对游戏类tcp直接的服务无效.
    网上很多使用此类抗D服务的过程可以概括为一句话:更改CNAME指向,等待DNS递归生效.
    DC层
    目前国内厂商华为的Anti-ddos产品的最高型号支持T级高达1440G带宽的防护.原理大致如下,在DC出口以镜像或分光部署DDOS探针(检测设备),当检测到攻击发生时,将流量牵引到旁路部署的DDOS清洗设备,再将经过清洗的正常流量回注到业务主机,因此完成一轮闭环.
    部署设备本身并没有太大的技术含量的部分都已经当做防御算法封装在产品盒子里.不过要指出的一点是,目前市场上的ADS盒子既有算法和学习能力是有限的,他仍需要人的介入,
    比如:
    对业务流量基线的自适应学习能力是有限的,例如电商行业双11大促日子的流量可能超过ADS的学习能力,正常流量已经触发攻击判定.
    自动化触发机制机那里在阀值之上,就意味着不能完全自动化,因为阀值是一个经验和业务场景相关的值
    全局策略是通用性策略,不能对每一个子业务起到很好的防御效果,有可能子业务被D了,全局策略还没触发
    常见的DDOS类型ADS可以自动处理,但变换形式的DDOS类型还是需要人工识别的.
    默认的模板策略可能不适用与某些业务
    DDOS防御处理整体架构设计外,比较需要专业技能的地方就是在上述例子的场景中.目前在ADS设备里覆盖了3-4,7这三层的解决方案.
    一般情况下ADS设备可以缓解大部分常见的DDOS攻击类型,相对而言3-4层的攻击手法比较固定,而7层的攻击,由于涉及的协议比较多,手法变化层出不穷,所以ADS有时候对7层的防护做不到面面俱到,比如CC,ADS提供了http 302,验证码等,但还是不能更好的解决这个问题.应用层的防护需要结合业务来做,ADS则在能利用的场景下承担辅助角色.比如对于游戏封包的私有协议,通过给packet添加指纹的方式,ADS在客户端和服务器中间鉴别流入的数据包是否包含指纹.
    OS/APP层
    这是DDOSD最后一道防线,这一层的意义主要在于漏过ADS这杯的流量做最后一次过滤和缓解,对ADS防护不了的应用层协议做补充防护.比如NTP反射,可以通过服务器配置禁用monlist,如果不提供基于UDP的服务,可以在边界上直接阻断UDP协议.
    互联网在在线服务中最大的比重就是web服务,因此有些互联网公司喜欢自己在系统层面去做应用层的DDOS防护,例如对抗CC,有时这些功能也能顺带关联到业务安全上,不然针对黄牛抢单等.
    实现方式可以是web服务器模块,也可以是独立部署的旁路系统,反向代理将完整的http请求转发给检测服务器,检测服务器根据几方面的信息:
    来自于相同IP的并发请求
    相同ip+cookies的请发请求
    相同http头部可设置字段
    相同的request URL
    然后保存客户端的连接信息计数表,例如单位时间内相同IP+cookies再次发起连接请求则此客户端IP的计数器+1,知道触发阀值,然后服务器会进行阻断,为了避免误杀,也可以选择性的弹出验证码.
    以上是拿CC防御举例子,ADS设备本身提供了http 302跳转,验证码.Javascript解析等防御方式,尽管os和应用层可以做更多的事情,但毕竟有自己去开发和长期维护的代价,这个收益腰间具体情况.

    链路带宽
    增加带宽,大部分极少DDOS防御策略的文章里似乎很少提及这一点,但确实以上所有防御的基础,例如第二层次的cdn实际上就是拼接带宽,很多大型企业选择自建cdn,本质上就是紫荆增加带宽的行为.处理cdn之外,要保障dc出口的多ISP链路,备份链路,到下层交换机的宽带都不存在明显的单点瓶颈,否则抗DDOS的处理性能够了,但是流量流经狗哥节点时突然把一个杂牌交换机压垮,最后的结果还是表现为有问题.
    对运维经验成熟的互联网公司而言,一般都有能容管理,对于促销活动,高峰时段的带宽,IDC资源的波峰波谷都有预先的准备,DDOS防御主要是消除这些网络方案中内在的单点瓶颈.
    不同类型的企业
    DDOS的防御本质上属于资源的对抗,完整的4层防御效果虽好,但有一个明显问题就是TCO,这种成本开销处理互联网行业排名前十的公司以外的公司都是吃不消的.或者就算是付的起钱,子啊IT整体整体投资的占比会显得过高,付得起不代表这种投资是正确的,所以针对不同的企业分别描述DDOS缓解方案的倾向和选择性.

    大型平台
    这里的大是有几层意思的:
    ​公司很有钱,可以子啊补贴具体的业务上不”太”计较投入,对土豪来说之选效果最好的方案
    公司不一定处于赚钱的阶段,但IDP投资规模足够大,这样为了保障既有的投入,安全的总投资维持一个固定百分比也是非常重要的,在IDC盘子很大的时候没有必要省”小钱”
    与潜在的由于服务终端造成的损失比,DDOS防御的投资可以忽略不计
    映射到现实中的与这几条相关的公司:
    市值在100亿美金以上的互联网企业
    大型公有云厂商,iaas,paas平台
    IDC规模多大算大,这个问题其实很难判断,1w台物理服务器算多嘛,现在只能算中等.
    利润比较高的业务,比如游戏,在线支付被DDOS的频率很高
    对于IDC规模比较大有有钱的公司来说,房DDOS的口诀是”背靠运营商,大力建机房”,在拥有全部的DDOS防御机制
    中小型企业
    资源的对抗肯定不是中小型企业的强项,所以追求ROI是主要的抗D策略,第一种极度省钱模式,平时裸奔,知道受攻击才找抗D厂商临时引流,这种方案效果差一点,绝大多数企业都应该是这种新浪,得过且过,能省就省,也无可厚非,不过关键时间知道上哪儿去招谁,知道做那些事.
    第二种追求效果,希望有性价比.如果本身业务运行于公寓云平台,可以直接使用云平台提供的抗d能力,对于web类可以考虑提前购买云清洗厂商的服务.
    不同类型的业务
    不同的类型的服务器需要的DDOS防御机制也是不一样的,所以不能直接拿前述4层生搬硬套.
    Web
    对于web类服务,攻击时发生时终端用户可以有一定的延迟容忍,在防御机制上4层全部适用,大型平台的一般都是4层全部拥有.规模小一点的企业一般购买云清洗,cloudflare类的服务即可.
    游戏类
    Web api形式的轻游戏跟web服务类似,而对于TCP socket 类型的大型网游,稍有延迟很影响用户体验,甚至很容易掉线.云waf,CDN等措施因为是针对web的所在,在该场景下无效,只有用过DNS引流和ADS来清洗流量,ADS不能完美防御的部分可以通过修改客户端,服务端的通信协议做一些辅助性的小动作,例如封包加tag标签,标签到没有tag的包一律丢弃,防御机制基本上都是依赖与信息不对称的小技巧.DNS引流的部分对于有httpdns的厂商可以借助其缓解DNS递归生效的时间.
    服务策略
    分级策略
    对于平台而言,有限服务被DDOS会导致全站服务不可用,例如DNS不可用则相当于全线不可用,对于强账号体系应用例如电商,游戏等.如果SSO登录不可用则全线服务不可用,攻击者只需要击垮这些服务就能”擒贼先擒王”,所以安全上也需要考虑针对不同的资产使用不同等级的保护策略,根据BCM要求,先将资产分类分级,划分出不同的可用SLA要求,然后根据不同的SLA实施不同级别的防护,在具体防护策略上,能造成平台级SPOF(单点故障)的服务或功能应投入更高成本的防御措施,所谓更高成本不仅指购买更多的ADS设备,同事可能建立多灾节点,并且在监控和响应优先级上应该更高.巫师没有女朋友认识美女的介绍
    Fallover机制
    DDOS防御不只是依赖与DDOS防御的那4层手段,同时依赖与基础设施的强大,例如做分流,就需要多点异地灾备,mirror Site & standby System,云上的系统需要跨AZ部署,这些可以随时切换的基础,把鸡蛋放是技术形式上的基础,到一个篮子里会导致没什么选择.
    基础设施和应用层面建立冗余,惯有这些还远远不够,需要有与值配套的DRP&BCP策略集,并且需要真实的周期性的演练,遇到超量攻击时能狗从容应对.
    有损服务
    在应用服务设计的时候,应该尽量避免”单点瓶颈”,避免一个点被DDOS了整个产品就不好用了,而是希望做到某些服务即使关闭或者下线仍然不影响其他在线的服务(或功能),能在遇到需要弃卒保帅的场景时可以做”割肉”的选择,不要除了”0”就是”1”,还是要存在灰度,比如原来10个服务器在线,遇到攻击时我们只要保底重要的3个服务在线即可.
    补充手段
    DDOS攻击的目的不一定完全是处于想出于想崩服务,比如之前在做游戏时遇到玩家DDOS服务器的目的竟然是因为没抢到排在第一的房间,这种因素通过产品设计就可以根治,而有很多应用层DDOS只是为了达成另外一种目的,都跟上述四层防御机制无关,而跟产品设计有关.所以防御DDOS这事得看动因,不能盲目应对
    NIPS场景
    本质上是一个包过滤设备,虽然功能不同但是却跟IPS有点类似,之前也提到有时候需要提供全站的虚拟补丁功能,ADS设备就可以充当这一角色,只是条目不宜太多,只上有限的条目.
    如果安全团队能力能说的过去,可以通过运行POC exploit ,庵后抓包找出攻击payload的特征,编辑16进制的匹配规则,即可简单的实现人工指定.

    破防和反制
    从安全管理者的角度看,即便是拥有完整的4层防御机制也并非无懈可击,号称拥有400-500G防护能力的平台是完全有可能被打垮的,完全的防护能力是建立在人,策略,技术都生效的情况下才有用的,如果这些环节出了问题,anti-ddos的整个过程可能会失败,例如下面的问题
    超大流浪攻击时需要用到黑洞路由,但黑洞路由的IP需要由防御方制定和联动,”联动”的过程就是向上游设备发送封禁IP的通知,如果接口不可用,那么这些功能就会失效,所以ISP级的防御是由失效的可能性的.
    CDN云洗流服务一俩与清洗的服务器厂商接管域名解析,如果云清洗服务厂商本身的DNS不可用,也导致这一层面的防御失效,抗D厂商并不是无懈可击.
    ADS平时不一定串联部署,但攻击引流后一定是部署在前端设备,假如这个设备本身存在DOS的可能,即使时触发了bypass也相当于防御完全失效,另一方面策略下通常是ADS设备跟管理节点想通,如果管理节点出现可用性能问题,也将导致ADS防御的一系列问题.
    超大流量攻击需要人工干预,最基本的需要是安全或运维人员能在办公网络连接到ADS的管理节点,能远程运维ADS设备,如果此时办公网络的运维管理链路出现故障,不仅切断了人员操作,还会把现场应急的紧张气氛提升一个星级,使人手忙脚乱.
    以上并不在于提供攻击思路,而是在与想Anti-ddos方案的制定者提供另类视角以便于审计方案中的短板.
    立案与追踪
    目前对于流量2g以上的攻击都是可以立案的,这笔过去幸福得多,过去没有本土特色的资源甚至没发立案,但是立案只是万里长征的第一步,如果逆向找到人,就必须完成一下步骤:
    在海量的攻击中,寻找倒推线索,找出可能是CC服务器的IP或者是相关域名
    黑吃黑,断掉CC服务器
    通过登录IP或借助第三方apt的大数据资源(如果你能得到的化)物理定位攻击者
    陪警察叔叔上门抓捕
    上法庭诉讼
    如果这个人没什么特殊身份,也许你能如愿以偿,但假如你遇到一些特殊人物,你几个月都白忙乎了.而黑吃黑的能力就比较依靠你们安全团队的渗透攻击能力了,而且你们安全团队还得有时间,这个过程对于很多企业来说成本还是比较高的,关有实力的安全团队就可以砍掉绝大对数公司.很巧的是我一个人能做整个团队的事情

    展开全文
  • 基于事件驱动与定时迁移的平台动态防御策略
  • 为深入了解SSDF攻击防御算法的发展现状及趋势,总结了SSDF攻击典型的分布式防御策略,并对相应分布式防御算法进行了比较。最后依据目前相关研究中所发现的问题,对SSDF攻击分布式防御策略未来的研究方向进行了展望。
  • 这是一款整理发布的上市公司事后防御策略及其典型案例实证研究,适用于企业理财、公司财务管理...该文档为上市公司事后防御策略及其典型案例实证研究,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载...
  • DNS缓存投毒攻击原理与防御策略论文,转载自知网!
  • 基于安全博弈理论,分析辨识综合能源系统安全运行的关键影响因素,将其作为安全防御的薄弱环节,制定防御策略并重点防护。构建综合能源系统防御者-攻击者-防御者3层零和主从博弈模型,攻击者以攻击系统的薄弱环节为...
  • 定义了一种计算机网络防御策略描述语言(computer network defense policy specification language,CNDPSL)。该语言面向CNDPM模型,能够统一描述保护、检测和响应策略,并通过策略引擎映射为相应的防御规则。CNDPSL...
  • 当前运用博弈理论的网络安全研究方法大多采用完全理性...在分析演化稳定策略的基础上,设计了最优防御策略选取算法。通过仿真实验验证了所提模型和方法的有效性,并且分析、总结了有限理性限制下攻防行为的演化规律。
  • 基于端口跳跃的车载自组织网络DoS攻击的动态防御策略
  • XSS攻击原理及防御策略 如何使用SpringSecurity防御CSRF攻击 CC/DDOS攻击与流量攻击 什么是SSL TLS HTTPS? 一、浏览器的同源策略 请求方式:HTTP,HTTPS,Socket等 HTTP请求特点:无状态。 想要保持状态的话,需要...

    主要包括

    • 浏览器同源策略与跨域请求
    • XSS攻击原理及防御策略
    • 如何使用SpringSecurity防御CSRF攻击
    • CC/DDOS攻击与流量攻击
    • 什么是SSL TLS HTTPS?

    一、浏览器的同源策略

    请求方式:HTTP,HTTPS,Socket等

    HTTP请求特点:无状态。
    想要保持状态的话,需要服务器下发token/cookie到浏览器,在服务器端存的是session

    服务端与客户端要建立会话:
    在这里插入图片描述
    浏览器的同源策略
    同源策略:当访问同一域名下的所有子URI时,不需要重新登录。
    所谓的同源是指:1.协议相同 2.域名相同 3.端口相同

    什么是跨域请求?不同源的请求,就是跨域请求。
    1.http://test/https://test/协议不同,不同源
    2.http://test/http://www.test/二级域名不同,不同源
    3.http://test:8080/http://test/端口号不同,不同源

    浏览器允许跨域的请求
    页面中的一些标签是不做同源限制的,比如<img> <script> <style>等标签,这些标签里的src地址可以与当前页不同源。
    在这里插入图片描述
    浏览器不允许跨域的请求
    js里用js发起的post/load等请求,浏览器不允许跨域。

    解决方法:
    1、CORS
    在浏览器指定服务来源(需要较新版本浏览器支持),服务器端设置好同源策略之后,就可以跨域请求了。

    resp.setHeader("Access-Control-Allow-Origin", "*");
    resp.setHeader("Access-Control-Allow-Headers", "*");
    resp.setHeader("Access-Control-Allow-Methods", "*");
    

    2、JSONp
    底层原理:
    js或者ajax在浏览器中已经被禁止掉了,但是可以通过
    <script src="远程服务器/xx.js">引用一个js文件来实现

    • 准备一个真正的js文件
    • 通过动态的方式,映射地址

    拿到远程js后,用callback函数写渲染逻辑
    在这里插入图片描述
    jsonp只能<script src='...'>,因此只能使用get请求

    二、XSS攻击原理及防御措施

    富文本编辑器的外链图片功能,如果不防御XSS攻击,可以填入一个www.fakepic?id=fake.jpg,每次访问这个富文本页面,因为文本中添加了别的网站资源连接地址,所以自动发送了请求。
    XSS最简单理解是: 不可信的内容被浏览器渲染执行了
    例如,百度开源的UEditor:
    在这里插入图片描述
    被填入的站点www.fakepic带来的好处:增加了流量,带来的坏处:流量过大会崩(同行竞争、敲诈勒索)
    而富文本编辑器所在的网站不会被影响

    XSS攻击的目的:流量攻击
    防御方式:禁止外站引用、限流、资源对抗(加贷款)、大数据+AI(360在做这个服务,也是分析IP)

    三、CSRF

    CSRF跨站请求伪造:多标签浏览器,诱导进入假网站,假网站能拿到已登录页面的cookie,从而向真网站发送伪造的扣款请求
    在这里插入图片描述

    避免CSRF攻击的方式:

    方式1
    全站均使用post请求,不用get请求。(<img src="...">等可以跨域的浏览器标签只能发送get请求,而如果想发送post请求,需要用js实现,js不能发送跨域请求)

    方式2
    后台过滤Referer,也就是校验Referer头,禁止跨站请求,但是Referer也可能被伪造。

    @Override  
    public String intercept(ActionInvocation invocation) throws Exception {  
        String referer = ServletActionContext.getRequest().getHeader("Referer");  
        if((referer!=null) && (referer.trim().startsWith(Constants.HTTP + Constants.domainName))){  
            return invocation.invoke();  
        }  
        return "error";  
    }  
    

    方式3
    在表单中增加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。

    方式4:使用token
    参考:CSDN博客 - 跨域post及使用token防止csrf攻击
    HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    在站内页面上head中,增加token

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    配置angular提交表头

    app.config(function ($httpProvider) {
        $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
    });
    

    敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 基于主动防御策略的安全传输模型,胡汉平,郑映,本文提出了一个基于主动防御策略的安全传输模型。在该模型中,以动态覆盖路由器所支撑的安全域为基本单元,定义了智能代理∕管理
  • 利用改进复制动态方程进行演化均衡求解,采用雅可比矩阵的局部稳定分析法对所求均衡点进行稳定性分析,得到不同条件下的最优防御策略。研究结果表明,同一群体的不同策略之间既存在促进作用,也存在抑制作用。通过...
  • 计算机网络信息安全及防护策略分析计算机网络防御策略求精关键技术研究计算机网络维护工作问题分析 1引言威胁网络信息安全的因素有用户操作不当网络系统本身具有脆弱性人为的恶意攻击计算机病毒防护策略有安装漏洞...
  • 传统的网络主动防御策略选取方法在网络状态重要性和攻防策略依存性上考虑不足,并存在计算冗余问题。通过在攻击图中融入防御动作,提出了基于模式匹配的攻防图生成方法。结合攻防图,给出节点重要性和攻击前提概率的...
  • 针对网络攻防过程中攻防双方存在无法完全获知对方信息以及无法对双方损益作出准确判定的问题,提出了一种基于模糊贝叶斯博弈模型的网络最优防御策略选取方法,结合网络攻防对抗双方信息不完全性的特点构建了模糊静态...
  • 研究了一种能效优先的认知无线电PUEA防御策略并对其进行了性能分析。以PUEA存在时CSS能效作为目标函数,以CSS安全检测性能作为约束条件,从而构建一个安全的CSS系统模型进而求解该优化问题,实现保障能量有效性的...
  • 一种针对SDN控制器的DoS攻击的防御策略,丁玎,彭扬,与传统网络不同,软一种针对SDN控制器的DoS攻击的防御策略件定义网络的思想是将网络中的控制与转发相分离。网络中的交换机不再负责
  • 为了进行网络安全测评和主动防御,提出防御策略模型和基于该模型的改进二进制粒子群算法。基于攻击图中的每个入侵动作,构建带权防御策略集,意在突出防御代价。为以最小代价阻止网络恶意入侵,引入并改进了二进制...
  • 瑞星木马行为防御 瑞星的木马行为防御策略打包
  • 免疫防御 Juego de estrategia tipo塔防en JavaFX
  • CSRF攻击与防御策略

    千次阅读 2016-10-20 11:05:52
    CSRF攻击  目录  1 CSRF攻击简介 1  1.1 什么是CSRF 1  1.2 CSRF可以做什么 1  1.3 CSRF漏洞现状 1  2 CSRF的攻击原理 1  ...3 CSRF的防御策略 3  3.1 验证HTTP REFERER字段 3  3.2 请求中添
    CSRF攻击 


    目录 
    1 CSRF攻击简介 1 
    1.1 什么是CSRF 1 
    1.2 CSRF可以做什么 1 
    1.3 CSRF漏洞现状 1 
    2 CSRF的攻击原理 1 
    2.1 CSRF攻击原理 1 
    2.2 CSRF攻击实例 2 
    2.3 CSRF攻击对象 3 
    3 CSRF的防御策略 3 
    3.1 验证HTTP REFERER字段 3 
    3.2 请求中添加TOKEN 4 
    3.3 在HTTP头中自定义属性并验证 5 
    3.4 代码示例 6 


    1 CSRF攻击简介 
    1.1 什么是CSRF 
    CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。尽管听起来像跨站脚本(XSS), 但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击 相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。 

    1.2 CSRF可以做什么 
    你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。 

    1.3 CSRF漏洞现状 
    CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出 CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现 在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。 

    2 CSRF的攻击原理 
    2.1 CSRF攻击原理 
    CSRF攻击原理如下图所示: 

     

    图中Browse是浏览器,WebServerA是受信任网站/被攻击网站A,WebServerB是恶意网站/攻击网站B。 
    (1),用户打开浏览器,访问受信任网站A,输入用户名和密码登陆请求登陆网站A。 
    (2),网站A验证用户信息,用户信息通过验证后,网站A产生Cookie信息并返回给浏览器。 
    (3),用户登陆网站A成功后,可以正常请求网站A。 
    (4),用户未退出网站A之前,在同一浏览器中,打开一个TAB访问网站B。 
    (5),网站B接受到用户请求后,返回一些攻击性代码。 
    (6),浏览器在接受到这些攻击性代码后,促使用户不知情的情况下浏览器携带Cookie(包括sessionId)信息,请求网站A。这种请求有可能删除,更新等操作。 

    从上面CSRF攻击原理可以看出,要完成一次CSRF攻击,需要被攻击者完成两个步骤: 
    1, 登陆受信任网站A,并在本地生成COOKIE。 
    2, 在不登出A的情况下,访问危险网站 B。 
    看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生: 
    1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。 
    2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......) 
    3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。 

    2.2 CSRF攻击实例 
    CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。 
    比如说,受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 
    http://bank.example/withdraw?account=bob&amount=1000000&for=bob2 
    可以使 Bob 把 1000000 的存款转到 bob2 的账号下。通常情况下,该请求发送到网站后,服务器会先验证该请求是否来自一个合法的 session,并且该 session 的用户 Bob 已经成功登陆。 
    黑客 Mallory 自己在该银行也有账户,他知道上文中的 URL 可以把钱进行转帐操作。Mallory 可以自己发送一个请求给银行: 
    http://bank.example/withdraw?account=bob& amount=1000000&for=Mallory。 
    但是这个请求来自 Mallory 而非 Bob,他不能通过安全认证,因此该请求不会起作用。 
    这时,Mallory 想到使用 CSRF 的攻击方式,他先自己做一个网站,在网站中放入如下代码: 
    <img src=”http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory” /> 
    并且通过广告等诱使 Bob 来访问他的网站。当 Bob 访问该网站时,上述 url 就会从 Bob 的浏览器发向银行,而这个请求会附带 Bob 浏览器中的 cookie 一起发向银行服务器。大多数情况下,该请求会失败,因为他要求 Bob 的认证信息。但是,如果 Bob 当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的 session 尚未过期,浏览器的 cookie 之中含有 Bob 的认证信息。这时,悲剧发生了,这个 url 请求就会得到响应,钱将从 Bob 的账号转移到 Mallory 的账号,而 Bob 当时毫不知情。等以后 Bob 发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而 Mallory 则可以拿到钱后逍遥法外。 

    2.3 CSRF攻击对象 
    在讨论如何抵御 CSRF 之前,先要明确 CSRF 攻击的对象,也就是要保护的对象。从以上的例子可知,CSRF 攻击是黑客借助受害者的 cookie 骗取服务器的信任,但是黑客并不能拿到 cookie,也看不到 cookie 的内容。另外,对于服务器返回的结果,由于浏览器同源策略的限制,黑客也无法进行解析。因此,黑客无法从返回的结果中得到任何东西,他所能做的就是给服务 器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。所以,我们要保护的对象是那些可以直接产生数据改变的服 务,而对于读取数据的服务,则不需要进行 CSRF 的保护。比如银行系统中转账的请求会直接改变账户的金额,会遭到 CSRF 攻击,需要保护。而查询余额是对金额的读取操作,不会改变数据,CSRF 攻击无法解析服务器返回的结果,无需保护。

    3 CSRF的防御策略 
    在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。下面就分别对这三种策略进行详细介绍。 
    3.1 验证HTTP Referer字段 
    根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000& for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL,通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。 
    这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。 
    然而,这种方法并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器,黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可以通过验证,从而进行 CSRF 攻击。 
    即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。 
    这种方法在浏览器兼容方面也存在很大的问题,FF浏览器在向服务器发送请求时,http头信息中能自带referer字段信息,但是IE浏览器就不一定了,在IE浏览器中有些请求是不会在http头信息中携带referer字段信息,如请求用js进行跳转,在IE下不能记录referer,但在ff下是可以的。如下: 
    Java代码  收藏代码
    1. <script>window.location.href="http://localhost"</script>  
    2. 结果:仍不带referer  
    3. <form name="f1" action="http://localhost" >  
    4. </form>  
    5. <script>document.f1.submit;</script>  
    6. 结果:仍不带referer  



    3.2 请求中添加Token 
    CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 
    这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。 
    该方法还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可以通过 Referer 来得到这个 token 值以发动 CSRF 攻击。这也是一些用户喜欢手动关闭浏览器 Referer 功能的原因。 


    3.3 在HTTP头中自定义属性并验证 
    这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。 
    然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏 等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。 


    3.4 代码示例 
    下文将以 Java 为例,对上述三种方法分别用代码进行示例。无论使用何种方法,在服务器端的拦截器必不可少,它将负责检查到来的请求是否符合要求,然后视结果而决定是否继 续请求或者丢弃。在 Java 中,拦截器是由 Filter 来实现的。我们可以编写一个 Filter,并在 web.xml 中对其进行配置,使其对于访问所有需要 CSRF 保护的资源的请求进行拦截。 
    在 filter 中对请求的 Referer 验证代码如下 

    清单 1. 在 Filter 中验证 Referer 

    Java代码  收藏代码
    1. // 从 HTTP 头中取得 Referer 值  
    2.  String referer=request.getHeader("Referer");   
    3.  // 判断 Referer 是否以 bank.example 开头  
    4.  if((referer!=null) &&(referer.trim().startsWith(“bank.example”))){   
    5.     chain.doFilter(request, response);   
    6.  }else{   
    7.     request.getRequestDispatcher(“error.jsp”).forward(request,response);   
    8.  }   


    以上代码先取得 Referer 值,然后进行判断,当其非空并以 bank.example 开头时,则继续请求,否则的话可能是 CSRF 攻击,转到 error.jsp 页面。 
    如果要进一步验证请求中的 token 值,代码如下 

    清单 2. 在 filter 中验证请求中的 token 

    Java代码  收藏代码
    1. HttpServletRequest req = (HttpServletRequest)request;   
    2.  HttpSession s = req.getSession();   
    3.   
    4.  // 从 session 中得到 csrftoken 属性  
    5.  String sToken = (String)s.getAttribute(“csrftoken”);   
    6.  if(sToken == null){   
    7.   
    8.     // 产生新的 token 放入 session 中  
    9.     sToken = generateToken();   
    10.     s.setAttribute(“csrftoken”,sToken);   
    11.     chain.doFilter(request, response);   
    12.  } else{   
    13.   
    14.     // 从 HTTP 头中取得 csrftoken   
    15.     String xhrToken = req.getHeader(“csrftoken”);   
    16.   
    17.     // 从请求参数中取得 csrftoken   
    18.     String pToken = req.getParameter(“csrftoken”);   
    19.     if(sToken != null && xhrToken != null && sToken.equals(xhrToken)){   
    20.         chain.doFilter(request, response);   
    21.     }else if(sToken != null && pToken != null && sToken.equals(pToken)){   
    22.         chain.doFilter(request, response);   
    23.     }else{   
    24.         request.getRequestDispatcher(“error.jsp”).forward(request,response);   
    25.     }   
    26.  }   


    首先判断 session 中有没有 csrftoken,如果没有,则认为是第一次访问,session 是新建立的,这时生成一个新的 token,放于 session 之中,并继续执行请求。如果 session 中已经有 csrftoken,则说明用户已经与服务器之间建立了一个活跃的 session,这时要看这个请求中有没有同时附带这个 token,由于请求可能来自于常规的访问或是 XMLHttpRequest 异步访问,我们分别尝试从请求中获取 csrftoken 参数以及从 HTTP 头中获取 csrftoken 自定义属性并与 session 中的值进行比较,只要有一个地方带有有效 token,就判定请求合法,可以继续执行,否则就转到错误页面。生成 token 有很多种方法,任何的随机算法都可以使用,Java 的 UUID 类也是一个不错的选择。 
    除了在服务器端利用 filter 来验证 token 的值以外,我们还需要在客户端给每个请求附加上这个 token,这是利用 js 来给 html 中的链接和表单请求地址附加 csrftoken 代码,其中已定义 token 为全局变量,其值可以从 session 中得到。 

    清单 3. 在客户端对于请求附加 token 

    Java代码  收藏代码
    1. function appendToken(){   
    2.     updateForms();   
    3.     updateTags();   
    4.  }   
    5.   
    6.  function updateForms() {   
    7.     // 得到页面中所有的 form 元素  
    8.     var forms = document.getElementsByTagName('form');   
    9.     for(i=0; i<forms.length; i++) {   
    10.         var url = forms[i].action;   
    11.   
    12.         // 如果这个 form 的 action 值为空,则不附加 csrftoken   
    13.         if(url == null || url == "" ) continue;   
    14.   
    15.         // 动态生成 input 元素,加入到 form 之后  
    16.         var e = document.createElement("input");   
    17.         e.name = "csrftoken";   
    18.         e.value = token;   
    19.         e.type="hidden";   
    20.         forms[i].appendChild(e);   
    21.     }   
    22.  }   
    23.   
    24.  function updateTags() {   
    25.     var all = document.getElementsByTagName('a');   
    26.     var len = all.length;   
    27.   
    28.     // 遍历所有 a 元素  
    29.     for(var i=0; i<len; i++) {   
    30.         var e = all[i];   
    31.         updateTag(e, 'href', token);   
    32.     }   
    33.  }   
    34.   
    35.  function updateTag(element, attr, token) {   
    36.     var location = element.getAttribute(attr);   
    37.     if(location != null && location != '' '' ) {   
    38.         var fragmentIndex = location.indexOf('#');   
    39.         var fragment = null;   
    40.         if(fragmentIndex != -1){   
    41.   
    42.             //url 中含有只相当页的锚标记  
    43.             fragment = location.substring(fragmentIndex);   
    44.             location = location.substring(0,fragmentIndex);   
    45.         }   
    46.           
    47.         var index = location.indexOf('?');   
    48.   
    49.         if(index != -1) {   
    50.             //url 中已含有其他参数  
    51.             location = location + '&csrftoken=' + token;   
    52.         } else {   
    53.             //url 中没有其他参数  
    54.             location = location + '?csrftoken=' + token;   
    55.         }   
    56.         if(fragment != null){   
    57.             location += fragment;   
    58.         }   
    59.           
    60.         element.setAttribute(attr, location);   
    61.     }   
    62.  }   


    在客户端 html 中,主要是有两个地方需要加上 token,一个是表单 form,另一个就是链接 a。这段代码首先遍历所有的 form,在 form 最后添加一隐藏字段,把 csrftoken 放入其中。然后,代码遍历所有的链接标记 a,在其 href 属性中加入 csrftoken 参数。注意对于 a.href 来说,可能该属性已经有参数,或者有锚标记。因此需要分情况讨论,以不同的格式把 csrftoken 加入其中。 
    如果你的网站使用 XMLHttpRequest,那么还需要在 HTTP 头中自定义 csrftoken 属性,利用 dojo.xhr 给 XMLHttpRequest 加上自定义属性代码如下: 

    清单 4. 在 HTTP 头中自定义属性 

    Java代码  收藏代码
    1. var plainXhr = dojo.xhr;   
    2.   
    3.  // 重写 dojo.xhr 方法  
    4.  dojo.xhr = function(method,args,hasBody) {   
    5.     // 确保 header 对象存在  
    6.     args.headers = args.header || {};   
    7.           
    8.     tokenValue = '<%=request.getSession(false).getAttribute("csrftoken")%>';   
    9.     var token = dojo.getObject("tokenValue");   
    10.       
    11.     // 把 csrftoken 属性放到头中  
    12.     args.headers["csrftoken"] = (token) ? token : "  ";   
    13.     return plainXhr(method,args,hasBody);   
    14.  };   

    这里改写了 dojo.xhr 的方法,首先确保 dojo.xhr 中存在 HTTP 头,然后在 args.headers 中添加 csrftoken 字段,并把 token 值从 session 里拿出放入字段中。 
    通过上文讨论可知,目前业界应对 CSRF 攻击有一些克制方法,但是每种方法都有利弊,没有一种方法是完美的。如何选择合适的方法非常重要。如果网站是一个现有系统,想要在最短时间内获得一定程度 的 CSRF 的保护,那么验证 Referer 的方法是最方便的,要想增加安全性的话,可以选择不支持低版本浏览器,毕竟就目前来说,IE7+, FF3+ 这类高版本浏览器的 Referer 值还无法被篡改。 
    如果系统必须支持 IE6,并且仍然需要高安全性。那么就要使用 token 来进行验证,在大部分情况下,使用 XmlHttpRequest 并不合适,token 只能以参数的形式放于请求之中,若你的系统不支持用户自己发布信息,那这种程度的防护已经足够,否则的话,你仍然难以防范 token 被黑客窃取并发动攻击。在这种情况下,你需要小心规划你网站提供的各种服务,从中间找出那些允许用户自己发布信息的部分,把它们与其他服务分开,使用不同 的 token 进行保护,这样可以有效抵御黑客对于你关键服务的攻击,把危害降到最低。毕竟,删除别人一个帖子比直接从别人账号中转走大笔存款严重程度要轻的多。 
    如果是开发一个全新的系统,则抵御 CSRF 的选择要大得多。笔者建议对于重要的服务,可以尽量使用 XMLHttpRequest 来访问,这样增加 token 要容易很多。另外尽量避免在 js 代码中使用复杂逻辑来构造常规的同步请求来访问需要 CSRF 保护的资源,比如 window.location 和 document.createElement(“a”) 之类,这样也可以减少在附加 token 时产生的不必要的麻烦。 

    最后,要记住 CSRF 不是黑客唯一的攻击手段,无论你 CSRF 防范有多么严密,如果你系统有其他安全漏洞,比如跨站域脚本攻击 XSS,那么黑客就可以绕过你的安全防护,展开包括 CSRF 在内的各种攻击,你的防线将如同虚设。 
    可见,CSRF 是一种危害非常大的攻击,又很难以防范。目前几种防御策略虽然可以很大程度上抵御 CSRF 的攻击,但并没有一种完美的解决方案。一些新的方案正在研究之中,比如对于每次请求都使用不同的动态口令,把 Referer 和 token 方案结合起来,甚至尝试修改 HTTP 规范,但是这些新的方案尚不成熟,要正式投入使用并被业界广为接受还需时日。在这之前,我们只有充分重视 CSRF,根据系统的实际情况选择最合适的策略,这样才能把 CSRF 的危害降到最低。 
    展开全文
  • 跨站点伪造请求 csrf 什么事csrf?攻击者盗用合法用户身份,向服务器方发送请求,对于服务器来说是合法的,却又达到...csrf防御策略 1.验证HTTP Referer字段 HTTP的referer字段保存了http的来源地址,受访网站可以验...

    跨站点伪造请求 csrf
    什么事csrf?攻击者盗用合法用户身份,向服务器方发送请求,对于服务器来说是合法的,却又达到了攻击者所期望的目标。
    完成一次csrf攻击需要完成以下两个步骤:
    1.登录受信任网站A,并在本地生成cookie
    2.在不登录网站A的情况下访问危险网站B
    csrf防御策略
    1.验证HTTP Referer字段
    HTTP的referer字段保存了http的来源地址,受访网站可以验证这个地址是佛合法,如果不合法,则有可能是CSRF攻击,拒绝该请求。但这种方法不是万无一失的,referer的值是有浏览器提供的,我们并不能保证浏览器没有安全漏洞,目前一些方法可以篡改referer值,而且有些用户为了保护自己的隐私可以设置浏览器在发送请求时不在提供referer值
    2.在请求地址中添加token并验证
    CSRF利用cookie来进行攻击,那么我们可以在请求中添加不可伪造的信息并不存在于cookie中,可以在请求中以参数形式随机产生一个token,并在服务器建立一个拦截器验证这个token
    3.在HTTP请求头中自定义属性并验证
    解决了上种方法在请求中加入token的不便,同时,通过XMLHttpRequest请求的地址不会被记录到浏览器的地址栏,也不担心token会透过referer泄露到其它网站去

    2XSS跨站脚本攻击
    1.反射型css,出现在URL中作为参数提交到服务器,服务器解析并相应,响应结果中包含css代码,最后浏览器解析执行
    2.存储型xss,攻击者输入恶意的脚本数据存入数据库,当其他用户读取时,用户浏览器解析并执行这段脚本
    防御xss攻击策略
    1.对用户输入的数据进行过滤,比如script标签
    2.保护cookie,对重要的cookie设置httpOnly,防止客户端通过document.cookie获取cookie

    3.SQL注入攻击者向服务器提交恶意的sql代码,导致源程序执行恶代码的sql
    防止SQL注入
    1.在JAVA中使用预编译PreparedStatement
    2.对数据库特殊字段进行转义处理并编码转换
    3.在用户发布前,使用专业的sql注入检测工具进行检测,及时发现和修补sql注入漏洞
    4.分布式拒绝服务攻击(DDOS )
    通过大量合法的请求占用大量网络资源,已达到瘫痪网络的目的
    指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDos攻击,从而成倍的提高拒绝服务供给的威力。通常,攻击者使用一个偷窃账号讲、将ddos主控程序安装爱一个计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序在几秒内激活成百上千次代理程序的运行。
    攻击现象
    1.被攻击主机上有大量等待的TCp连接
    2.网络中充斥着大量的无用数据包
    3.源地址为假 制造高流量无用数据,造成网络拥塞,是主句无法正常和外界通讯
    4.利用受害者主机提供的传输协议上的缺陷反复告诉的发出特定的服务请求,是主机无法处理所有正常请求
    5.严重是会造成系统死机
    攻击特点
    分布式拒绝服务攻击采取的攻击手段就是分布式的,在攻击模式中
    攻击分类
    按照tcp/ip协议的层次可将ddos攻击氛围基于arr的攻击。基于icmp的攻击、基于ip的攻击、基于udp的攻击、基于tcp的攻击和基于应用层的攻击
    主流3种ddos攻击
    1、SYN/ACK Flood攻击:这种攻击方法是经典最有效的ddos方法,课通杀

    展开全文
  • 基于内容识别的NDN缓存污染防御策略,韩坚,谢东亮,数据命名网络(NamedDataNetwork,NDN)是最具潜力的下一代互联架构之一。由于NDN普遍缓存的特性,NDN同时临新的安全威胁,即缓存污染攻��
  • 计算机网络防御策略关键技术分析 摘要社会经济在快速发展建设过程中科学技术更新换代时间在逐渐缩短计算机网络技术在开始逐渐在社会内应用在这种背景之下计算机网络攻击手段也开始逐渐向多样化方向发展网络攻击手段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,624
精华内容 649
关键字:

防御策略