《安全攻击及防范手册6415.docx》由会员分享,可在线阅读,更多相关《安全攻击及防范手册6415.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、安全攻击及防范手册_版本 1.020100年8月1 概述1.1 简介当今世界界,Innterrnett(因特特网)已已经成为为一个非非常重要要的基础础平台,很很多企业业都将应应用架设设在该平平台上,为为客户提提供更为为方便、快快捷的服服务支持持。这些些应用在在功能和和性能上上,都在在不断的的完善和和提高,然然而在非非常重要要的安全全性上,却却没有得得到足够够的重视视。随着着WEBB技术应应用的范范围越来来越广泛泛,WEEB技术术相关的的安全漏漏洞越来来越多的的被挖掘掘出来,而而针对WWEB站站点的攻攻击已经经成为了了最流行行的攻击击途径。不久前项项目管理理部对公公司内外外重点系系统进行行了一次
2、安安全隐患患分析测测试,并并总结出出了公司安安全测试试问题分分类及描描述的报告告文档。本本文针对对此报告告中提到到的一些些重大安安全隐患患问题逐逐一分析析,并给给出相应应的解决决方案。1.2 参考资料料Javva安全全性编程程实例网站系系统安全全开发手手册企业级级Javva安全全性(构构建安全全的J22EE应应用)2 WEB安安全隐患患及预防防措施2.1 会话标识识未更新新2.1.1 描述登陆过程程前后会会话标识识的比较较,显示示它们并并未更新新,这表表示有可可能伪装装用户。初初步得知知会话标标识值后后,远程程攻击者者有可能能得以充充当已登登录的合合法用户户。2.1.2 安全级别别高。2.1.
3、3 安全风险险可能会窃窃取或操操纵客户户会话和和 coookiie,它它们可能能用于模模仿合法法用户,从从而使黑黑客能够够以该用用户身份份查看或或变更用用户记录录以及执执行事务务。2.1.4 解决方案案u 不要接受受外部创创建的会会话标识识。u 始终生成成新的会会话,供供用户成成功认证证时登录录。u 防止用户户操纵会会话标识识。u 请勿接受受用户浏浏览器登登录时所所提供的的会话标标识。u 如果有验验证码的的。验证证码改用用apppliccatiion存存储。同同时记得得释放资资源2.1.5 技术实现现u 登陆界面面和登陆陆成功的的界面一一致时修改后台台逻辑,在在验证登登陆逻辑辑的时候候,先强强
4、制让当当前seessiion过过期,然然后用新新的seessiion存存储信息息。u 登陆界面面和登陆陆成功的的界面不不一致时时在登陆界界面后增增加下面面一段代代码,强强制让系系统seessiion过过期。requuestt.geetSeessiion().iinvaaliddatee();/清清空seessiionCookkie coookiee = reqquesst.ggetCCookkiess()0;/获获取coookiiecookkie.settMaxxAgee(0);/让coookiie过期期 注意:框架2.0已经经修改了了登陆验验证类,登登陆成功功后会清清理掉当当前seessii
5、on,重重新创建建一个新新的seessiion。凡是使用框架2.0的项目均可统一增加此功能。2.2 不充分帐帐户封锁锁2.2.1 描述程序没有有使用锁锁定功能能,可以以穷举密密码,可可以造成成蛮力攻攻击,恶意用用户发送送大量可可能的密密码和/或用户户名以访访问应用用程序的的尝试。 由于该该技术包包含大量量登录尝尝试,未未限制允允许的错错误登录录请求次次数的应应用程序序很容易易遭到这这类攻击击。2.2.2 安全级别别高。2.2.3 安全风险险可能会升升级用户户特权并并通过 Webb 应用用程序获获取管理理许可权权。2.2.4 解决方案案请确定允允许的登登录尝试试次数(通通常是 3-55 次),确
6、确保超出出允许的的尝试次次数之后后,便锁锁定帐户户。 为为了避免免真正的的用户因因帐户被被锁定而而致电支支持人员员的麻烦烦,可以以仅临时时性暂挂挂帐户活活动,并并在特定定时间段段之后启启用帐户户。帐户户锁定大大约 110 分分钟,通通常用这这样的方方法阻止止蛮力攻攻击。2.2.5 技术实现现u 提供锁定定信息配配置类,可可根据项项目特定定需求修修改此配配置信息息。u 修改登陆陆验证逻逻辑,根根据上面面的配置置信息提提供帐户户锁定功功能。注意:框架2.0已经经实现了了此功能能,凡是是使用框框架2.0的项项目均可可统一增增加此功功能。2.3 可预测的的登录凭凭证2.3.1 描述发现应用用程序会会使
7、用可可预期的的认证凭凭证(例例如:aadmiin+aadmiin、gguesst+gguesst)。 攻击者者很容易易预测用用户名和和密码,登登录应用用程序,从从而获取取未获授授权的特特权。2.3.2 安全级别别高。2.3.3 安全风险险可能会升升级用户户特权并并通过 Webb 应用用程序获获取管理理许可权权。2.3.4 解决方案案不应使用用易于预预测的凭凭证(例例如:aadmiin+aadmiin、gguesst+gguesst、ttestt+teest 等),因因为它们们可能很很容易预预测,可可让用户户不当进进入应用用程序。2.3.5 技术实现现只要养成成良好的的习惯,坚坚决不使使用容易易
8、预测的名名和密码码,即可可彻底杜杜绝此类类问题。2.4 登录错误误消息凭凭证枚举举2.4.1 描述当试图利利用不正正确的凭凭证来登登录时,当当用户输输入无效效的用户户名和无无效的密密码时,应应用程序序会分别别生成不不同的错错误消息息。 通通过利用用该行为为,攻击击者可以以通过反反复试验验(蛮力力攻击技技术)来来发现应应用程序序的有效效用户名名,再继继续尝试试发现相相关联的的密码。2.4.2 安全级别别高。2.4.3 安全风险险可能会升升级用户户特权并并通过 Webb 应用用程序获获取管理理许可权权。2.4.4 解决方案案不论名和和密码哪哪个错误误,都提提示同样样的消息息。且同同时加上上登陆失失
9、败次数数达到规规定的帐帐户锁定定功能。2.4.5 技术实现现不论名和和密码哪哪个错误误,都提提示如下下所示同同样的消消息:一旦某个个帐户连连续登陆陆失败次次数达到到了规定定的数值值,就会会按配置置的时间间被锁定定,如下下提示:如此一来来,攻击击者就没没机会穷穷举帐户户和密码码了,此此类攻击击也就不不可能发生了了!注意:框架2.0已经经实现了了此功能能,凡是是使用框框架2.0的项项目均可可统一增增加此功功能。2.5 已解密的的登录请请求2.5.1 描述通过HTTTP POSST 发发送表单单数据,这这些数据据将在HHTTPP报文中中以明文文的形式式传输。对对于一些些敏感的的数据(如如用户名名/密
10、码码、信用用卡密码码)以传传统的HHTTPP报文传传输存在在巨大的的风险。2.5.2 安全级别别中。2.5.3 安全风险险可能会窃窃取诸如如用户名名和密码码等未经经加密即即发送了了的用户户登录信信息。2.5.4 解决方案案(1) 饶过ApppSccan软软件扫描描(2) 对提交的的敏感信信息,一一律以加加密方式式传给服服务器。(3) 采用基于于SSLL的HTTTPSS传输协协议,对对提交的的敏感信信息在传输过过程中加加密。敏感信息息包括:用户名名、密码、社会保保险号码码、信用卡卡号码、驾照号号码、电子邮邮件地址址、电话号号码、邮政编编码等。注意:如如果不是是基于SSSL的的HTTTPS传传输协
11、议议的话。对对于提交交的敏感感信息即即使加密密后,AAppSScann软件同同样认为为该漏洞存存在。所所以避免免这一漏漏洞的有有效方案案是饶过扫扫描或者者采用基基于SSSL的HHTTPPS传输输协议。虽然采取取HTTTPS传传输数据据有很高高的安全全性,但但是也有有以下几几个显著著的缺点点:u 需要申请请一个合合法组织织颁发的的用来加加/解密密的证书书。u 部署、配配置繁琐琐。u 同样的硬硬件环境境,效率率比HTTTP慢慢很多。通过上述述分析,采取基于SSL的HTTPS传输协议,付出的代价有点大,是否有必要这样做,值得深入讨论。:把teext=paasswwordd这个个用其他他的代替替,就可
12、可以解决决已解密密的登录录请求密密&nbbsp;&nbbsp;码:js代码码funcctioon hhidddenPPasss(e) e = ee ? e : wiindoow.eevennt; vaar kkcodde = e.whiich ? ee.whhichh : e.kkeyCCodee; vaar ppasss = doccumeent.gettEleemenntByyId(paasswwordd1); vaar jj_paass = ddocuumennt.ggetEElemmenttByIId(passswoord); iff(kccodee!=88) vvar keyycha
13、ar=SStriing.froomChharCCodee(kccodee); jj_paass.vallue=j_ppasss.vaaluee+keeychhar; jj_paass.vallue=j_ppasss.vaaluee.suubsttrinng(00,paass.lenngthh); 2.5.5 技术实现现(1) 饶过ApppSccan软软件扫描描绕过软件件扫描有有两种方方式,如如下:u 修改密码码输入框框名字和和类型经过不断断扫描测测试分析析,如果果密码输输入框的的名字不不包含ppasssworrd、ppwd等等关键字字的话,大部分页面就不会扫描出漏洞。如果还能扫描出漏洞的话,那
14、就在修改密码输入框名字的基础上,把输入框的type的属性值为password的值改为text,然后用Javascript函数来模拟实现星号代替输入值的密码输入效果即可饶过该扫描。示例例步骤如如下: 在原来的的密码输输入框前前添加一一个新的输入入控件:如:注:其中中doccumeent.gettEleemenntByyId(ciipheer).foocuss()中中 ciipheer为原原来密码码输入框框的IDD值,这这个是为为了Tab键能起作作用而设置的的。 修改原来来密码框框的tyype属属性为ttextt,并添添加onnkeyyup函函数如下下:其中的ccodee为新添加的的输入控控件ID
15、D。 在页面的的heaad标签签中间添添加如下下样式:其中coode代代表新添添加的输输入控件件ID,cipher代表原来密码输入框的ID。样式表的ID必须和控件的ID一致。u 采用AJJAX登登录把登陆界界面的FFormm标签去去掉,采采用AJJAX登登录。示例代码码如下:登陆页页面用户户:&nbbsp;密码码:&nbbsp;&nbssp; 记住密密码 &nbbsp; &nbbsp; &nbbsp; &nbbsp;&nbssp; vaar rrequuestt = fallse;trry reqquesst = neew XXMLHHttppReqquesst(); cattch (trry
16、miicroosofft) tryy rrequuestt = neww AcctivveXOObjeect(Mssxmll2.XXMLHHTTPP); ccatcch (othhermmicrrosooft) ttry reequeest = nnew ActtiveeXObbjecct(Miccrossoftt.XMMLHTTTP); caatchh (ffailled) reequeest = ffalsse; fuuncttionn geetCuustoomerrInffo() vvaruurl = j_aaceggi_ssecuuritty_cchecck?jj_ussernname
17、e=+doccumeent.gettEleemenntByyId(j_useernaame).vvaluue+&j_cippherr=+doccumeent.gettEleemenntByyId(j_passswoord).vvaluue;aalerrt(urll+uurl);rrequuestt.oppen(GEET, urrl, truue);/调用用回调函函数rrequuestt.onnreaadysstattechhangge = uppdattePaage;rrequuestt.seend(nulll);fuuncttionn uppdattePaage() iif (reqques
18、st.rreaddySttatee = 4) if (reequeest.staatuss = 2000) varr reespoonsee = reqquesst.rrespponsseTeext; doccumeent.wriite(ressponnse); eelsee iff (rrequuestt.sttatuus = 4404) aleert(Reequeesteed UURL is nott fooundd.); eelsee iff (rrequuestt.sttatuus = 4403) aleert(Acccesss ddeniied.); eelsee aleert(st
19、tatuus iis + reqquesst.sstattus); (2) 采用基于于SSLL的HTTTPSS传输协协议以Webbloggic默默认配置置为例,步步骤如下下:u 启动Weebloogicc,进入入Connsolle。展展开Seerveers,单单击服务务器名,在在右边的的配置栏栏中,选选择常规规。在出现现的内容容中选中中已启用用SSLL监视端端口,并并配置监监视端口口,如下下图:u 重新启动动Webbloggic,测试HHTTPPS协议议,测试试地址格格式示例例:httpps:/IPP:端口/ApppliccatiionNNamee2.6 SQL 注入2.6.1 描述随着B/S
20、模式式应用开开发的发发展,使使得使用用这种模模式编写写应用程程序的程程序员也也越来越越多。但但是由于于这个行行业的入入门门槛槛不高,程程序员的的水平及及经验也也参差不不齐,相相当大一一部分程程序员在在编写代代码的时时候,没没有对用用户输入入数据的的合法性性进行判判断,使使应用程程序存在在安全隐隐患。攻攻击者可可以通过过互联网网的输入入区域,利利用某些些特殊构构造的SSQL语语句插入入SQLL的特殊殊字符和和指令,提提交一段段数据库库查询代代码(一一般是在在浏览器器地址栏栏进行,通通过正常常的wwww端口口访问),操操纵执行行后端的的DBMMS查询询并获得得本不为为用户所所知数据据的技术术,也就
21、就是SQQL IInjeectiion(SSQL注注入)。2.6.2 安全级别别高。2.6.3 安全风险险可能会查查看、修修改或删删除数据据库条目目和表。2.6.4 解决方案案u 过滤掉用用户输入入中的危危险字符符。u 检查用户户输入的的字段类类型,确确保用户户输入的的值和类类型(如如 Inntegger、DDatee 等)有有效,且且符合应应用程序序预期。u 屏蔽一些些详细的的错误消消息,因因为黑客客们可以以利用这这些消息息。u 使用专业业的漏洞洞扫描工工具。u 企业要在在Webb应用程程序开发发过程的的所有阶阶段实施施代码的的安全检检查。首首先,要要在部署署Webb应用之之前实施施安全测测
22、试,这这种措施施的意义义比以前前更大、更更深远。企企业还应应当在部部署之后后用漏洞洞扫描工工具和站站点监视视工具对对网站进进行测试试。2.6.5 技术实现现(1)采采用过滤滤器技术术。过滤技术术是通过过特定过过滤函数数,去查查找每个个请求的的每个参参数对应应的值,如如果出现现了不允允许的字字符,就就会弹出出如下提提示:点确定后后即可回回到请求求页面,删删除敏感感字符即即可请求求成功!过滤器PParaametterFFiltter.Javva代码码如下:/*参数过过滤类,过滤普普通表单单*/publlic claass ParrameeterrFillterr immpleemennts Fil
23、lterr priivatte PPattternn sccripptPaatteern;priivatte PPattternn sqqlPaatteern;priivatte PPattternn leetteerPaatteern;priivatte SStriing nottProotecct = ;priivatte SStriing tottalLLettter = ;pubblicc vooid desstrooy() pubblicc vooid doFFiltter(SerrvleetReequeest reqquesst, SerrvleetReespoonsee rees
24、poonsee,FFiltterCChaiin ffilttreCChaiin) thrrowss IOOExccepttionn, SServvlettExccepttionn HtttpSServvlettReqquesst rreq = (HtttpSeervlletRRequuestt) rrequuestt;Sttrinng cconttenttTyppe = reequeest.gettConntenntTyype() = nnulll ? : rrequuestt.geetCoonteentTTypee();iff (!conntenntTyype.staartssWitth(m
25、ulltippartt/foorm-datta)& !FiilteerUttilss.issConntaiinUrrl(nnotPProttectt, FFiltterUUtills.geetFuullUUrlFFrommReqquesst(rreq) EEnummeraatioon pparaams = rreq.gettParrameeterrNammes();bboolleann issSeccuriity = ttruee;wwhille (nulll != pparaams & parramss.haasMooreEElemmentts() Strringg paara_namme
26、= (SStriing) paaramms.nnexttEleemennt();Strringg parra_vvaluue = nuull;parra_vvaluue = (SStriing) reqq.geetPaarammeteerVaaluees(pparaa_naame);forr (iint i = 0; i pparaa_vaaluee.leengtth; i+) Strringg _pparaa_vaaluee = parra_vvaluueii.ttoLoowerrCasse();if (sccripptPaatteern.mattcheer(_parra_vvaluue).
27、mattchees()| sqllPattterrn.mmatccherr(_pparaa_vaaluee).mmatcchess() isSSecuuritty = faalsee;breeak;if (!iisSeecurrityy)breeak;iif (!issSeccuriity) ressponnse.settConntenntTyype(teext/htmml; chaarseet=GGBK);ressponnse.gettWriiterr().wriite(allertt(输输入有误误,请不不要包含含+ttotaalLeetteer+中的任任何敏感感字符!);hisstorry
28、.ggo(-1););retturnn;fiiltrreChhainn.dooFillterr(reequeest, reespoonsee);pubblicc vooid iniit(FFiltterCConffig fillterrConnfigg) tthroows SerrvleetExxcepptioon leetteerPaatteern = PPattternn.coompiile(aa-z*);Sttrinng sscriiptPParaa = fillterrConnfigg.geetInnitPParaametter(sccripptReegx).ttoLoowerrCas
29、se();Sttrinng ssqlPParaa = fillterrConnfigg.geetInnitPParaametter(sqqlReegx).ttoLoowerrCasse();nootPrroteect = ffiltterCConffig.gettIniitPaarammeteer(nottProotecct);sccripptPaatteern = PPattternn.coompiile(ressulttStrr(sccripptPaara);sqqlPaatteern = PPattternn.coompiile(ressulttStrr(sqqlPaara);tootallLettterr = scrripttParra+|+sqllParra;innt iindeex = toot