绿盟Web安全漏洞加固手册v20.docx

上传人:b****5 文档编号:29261569 上传时间:2023-07-21 格式:DOCX 页数:166 大小:2.19MB
下载 相关 举报
绿盟Web安全漏洞加固手册v20.docx_第1页
第1页 / 共166页
绿盟Web安全漏洞加固手册v20.docx_第2页
第2页 / 共166页
绿盟Web安全漏洞加固手册v20.docx_第3页
第3页 / 共166页
绿盟Web安全漏洞加固手册v20.docx_第4页
第4页 / 共166页
绿盟Web安全漏洞加固手册v20.docx_第5页
第5页 / 共166页
点击查看更多>>
下载资源
资源描述

绿盟Web安全漏洞加固手册v20.docx

《绿盟Web安全漏洞加固手册v20.docx》由会员分享,可在线阅读,更多相关《绿盟Web安全漏洞加固手册v20.docx(166页珍藏版)》请在冰豆网上搜索。

绿盟Web安全漏洞加固手册v20.docx

绿盟Web安全漏洞加固手册v20

目录TableofContentsTOC\o"1-3"\h\z\u

Web漏洞检测及修复方案

■版本

V1.0

■日期

2016-04-28

©2022绿盟科技

Web安全漏洞检测与修复

缩略语清单

缩略语

全称

CRLF

\r\n回车换行

LDAP

Lightweight Directory Access Protocol轻量级目录访问协议

XFF

X-Forwarded-for头

SessionID

标志会话的ID

WebService

Web服务是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

SOAP

SimpleObjectAccessProtocol简单对象访问协议

XSS

CrossSiteScript跨站脚本

SSL

(SecureSocketsLayer安全套接层),

TLS

继任者传输层安全(TransportLayerSecurity,

XML

可扩展标记语言(ExtensibleMarkupLanguage)

XPATH

XML路径语言(XmlPathLanguage)

AWVS

AcunetixWebVulnerabilityScanner

POODLE漏洞

(PaddingOracleOnDownloadedLegacyEncryptionvulnerability)

SVN

Subversion的简称,是一个开放源代码的版本控制系统

Web安全漏洞检测与修复

1.1认证与授权类

1.1.1密码明文传输

漏洞名称

密码明文传输、

漏洞描述

密码明文传输一般存在于web网站登录页面,用户名或者密码采用了明文传输,容易被嗅探软件截取。

检测条件

1、已知Web网站具有登录页面。

检测方法

1、找到网站或者web系统登录页面。

2、通过过对网站登录页面的请求进行抓包,工具可用burp、wireshark、filder、等等,分析其数据包中相关password(密码)参数的值是否为明文。

如图利用wireshark抓包分析的密码:

修复方案

建议按照网站的密级要求,需要对密码传输过程中进行加密得使用加密的方式传输,如使用HTTPS,但加密的方式增加成本,或许会影响用户体验。

如果不用HTTPS,可以在网站前端用Javascript做密码加密,加密后再进行传输。

其他说明

1.1.2用户名可枚举

漏洞名称

用户名可枚举、

漏洞描述

存在于系统登录页面,利用登陆时输入系统存在的用户名错误密码与不存在的用户名错误密码,返回不同的出错信息可枚举出系统中存在的账号信息。

检测条件

1、已知Web网站具有登录页面。

2、登录错误回显不一至。

检测方法

3、找到网站或者web系统登录页面。

4、在web系统登录页面,通过手工方式,利用系统中存在的用户名与不存在的用户名,密码随意,尝试登录,查看其回显内容。

例如:

输入存在的用户名admin,回显如下:

密码错误;输入不存在的用户名test,回显如下:

用户不存在。

如图所示:

修复方案

建议对网站登录页面的判断回显信息修改为一致:

用户名或密码错误

其他说明

1.1.3暴力攻击

漏洞名称

暴力攻击、暴力破解、暴力猜解

漏洞描述

暴力破解的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。

常常存在于网站的登录系统中,通过对已知的管理员用户名,进行对其登录口令的大量尝试。

检测条件

1、已知Web网站具有登录页面。

2、登录页面无验证码,无锁定机制。

检测方法

1、找到网站登录页面。

2、利用burp对登录页面进行抓包,将其发送到Intruder,并设置其密码参数,如pwd=为变量,添加payload(字典),进行攻击,攻击过程中查看其返回的字节长度,来判断是否成功。

攻击效果如图所示:

修复方案

防止暴力攻击的一些方法如下:

1、账户锁定

账户锁定是很有效的方法,因为暴力破解程序在5-6次的探测中猜出密码的可能性很小。

但是同时也拒绝了正常用户的使用。

如果攻击者的探测是建立在用户名探测成功之后的行为,那么会造成严重的拒绝服务攻击。

对于对大量用户名只用一个密码的探测攻击账户锁定无效。

如果对已经锁定的账户并不返回任何信息,可能迷惑攻击者。

2、返回信息

如果不管结果如何都返回成功的信息,破解软件就会停止攻击。

但是对人来说很快就会被识破。

3、页面跳转

产生登录错的的时候就跳到另一个页面要求重新登录。

比如126与校内网都是这样做的。

局限性在于不能总是跳转页面,一般只在第一次错误的时候跳转,但是第一次之后又可以继续暴力探测了。

4、适当的延时

检查密码的时候适当的插入一些暂停,可以减缓攻击,但是可能对用户造成一定的影响。

5、封锁多次登录的IP地址

这种方法也是有缺点的,因为攻击者可以定时更换自己的IP。

6、验证码

验证码是阻止暴力攻击的好方法,但设计不好的验证码是可以绕过的,而且对于特定目标的手工探测来说验证码是没有作用的。

其他说明

1.1.4会话标识未更新

漏洞名称

会话操纵、会话标识未更新

漏洞描述

会话标识未更新漏洞,在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说没有建立新session,原来的session也没有被销毁),可能会窃取或操纵客户会话与cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。

检测条件

1、已知Web网站地址

2、Web业务运行正常

3、Web业务存在登陆认证模块

4、已知正确的用户名、口令

检测方法

1、打开网站登录页面。

2、登陆前通过软件工具抓取到的cookie信息值与在登录后抓取到的cookie进行对比,如果其值一样,则可判断其会话的cookies或者sessions未进行更新。

•登录前:

Cookie:

JSESSIONID=0000QG_uEL3xnYACkk2dHbZtcJy:

-1

•登录后:

Cookie:

JSESSIONID=0000QG_uEL3xnYACkk2dHbZtcJy:

-1

修复方案

始终生成新的会话,供用户成功认证时登录登陆界面与登陆成功的界面一致时,修改后台逻辑,在验证登陆逻辑的时候,先强制让当前session过期,然后用新的session存储信息:

登陆界面与登陆成功的界面不一致时在登陆界面后增加下面一段代码,强制让系统session过期。

request.getSession().invalidate();//清空session

Cookiecookie=request.getCookies()[0];//获取cookie

cookie.setMaxAge(0);//让cookie过期;

注意:

这段代码需要在页面的最后部分加上才可以,否则将报错

其他说明

1.1.5未授权访问

漏洞名称

未授权访问

漏洞描述

未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。

检测条件

1、已知Web网站具有登录页面。

或者具有不允许访问的目录或功能。

2、不用登录,可通过链接直接访问用户页面功能。

检测方法

1、通过对登录后的页面进行抓包,将抓取到的功能链接,在其他浏览器进行打开,

2、也可以通过web扫描工具进行扫描,爬虫得到相关地址链接,进行直接访问,如果未进行跳转到登录页面,则可判断为存在未授权访问漏洞。

修复方案

常见的修复方法:

在系统中,加入用户身份认证机制或者tonken验证,防止可被直接通过连接就可访问到用户的功能进行操作,简而言之,一定对系统重要功能点增加权限控制,对用户操作进行合法性验证,下列为针对常见的JSP语言编写的网站的安全修复方案:

1、采用JAVA过滤器技术,对/pages下所有URL进行登录状态检查,通过session.getAttribute()方法从session中获取登录成功时存入session中的身份标识,判断客户端传递过来的身份标识是否与session中保存的一致,不一致则跳转到登录页面。

关键代码如下:

//从session里取的用户名信息

Stringusername=(String)session.getAttribute("userID");

//getAttribute中变量根据实际变量传入。

//判断如果没有取到用户信息,就跳转到登陆页面

if((username==null)||"".equals(username)){

//跳转到登陆页面

res.sendRedirect("http:

//"+req.getHeader("Host")+"/login_oa.jsp");}

else{

//已经登陆,继续此次请求

chain.doFilter(req,res);}}

2、进行权限判断,以下代码为过滤器程序,通过会话获取用户身份信息,进行权限判断等操作:

//在配置文件中设置过滤器

SessionFilter

com.nsfocus.frame.filter.SessionFilter

SessionFilter

/pages/*

----------------------------------------------------------------------------------------------

//后台过滤程序

publicvoiddoFilter(ServletRequestrequest,

ServletResponseresponse,FilterChainchain)throws

IOException,ServletException{

HttpServletRequestreq=(HttpServletRequest)request;

HttpServletResponseres=(HttpServletResponse)response;

HttpSessionsession=req.getSession(true);

//从session里取的用户名信息

Stringusername=(String)session.getAttribute("userID");

//getAttribute中变量根据实际变量传入。

//判断如果没有取到用户信息,就跳转到登陆页面

if((username==null)||"".equals(username)){

//跳转到登陆页面

res.sendRedirect("http:

//"+req.getHeader("Host")+"/login_oa.jsp");}

else{

//已经登陆,继续此次请求

chain.doFilter(req,res);}}

publicvoiddestroy(){}

}

其他说明

1.1.6文件上传漏洞

漏洞名称

文件上传漏洞、任意文件上传

漏洞描述

文件上传漏洞,直面意思可以利用WEB上传一些特定的文件。

一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。

一般的情况有:

-1.上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;

-2.上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;

-3.上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;

-4.上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈;

检测条件

1、已知Web网站在登录前或者登录后具有上传页面。

2、上传的文件具备可执行性或能够影响服务器行为,所以文件所在的目录必须在WEB容器覆盖的路径之内;

3、用户可以从WEB上访问这个文件,从而使得WEB容器解释执行该文件;

4、上传后的文件必须经过安全检查,不会被格式化、压缩等处理改变其内容

检测方法

上传方式根据不同的web语言,检测方法也各式各样,以下列举基于JS验证的上传的几种常见的文件上传绕过方法:

1、我们直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可。

如图:

2、直接更改文件上传JS代码中允许上传的文件扩展名你想要上传的文件扩展名,如图所示:

3、使用本地提交表单即可,如下图,作相应的更改,如图所示:

4、使用burpsuite或者是fiddle等代理工具提交,本地文件先更改为jpg,上传时拦截,再把文件扩展名更改为asp即可,如图所示:

5、当然也有不是基于JS验证的上传,例如一些中间件IIS,Nginx,,PHP,FCK编辑器等等的解析漏洞,其上传绕过方式也是多种多样。

通过对上传页面进行检查,常见的文件上传检查针对文件类型进行,可以使用手动修改POST包然后添加%00字节用于截断某些函数对文件名的判断。

除了修改文件名来绕过类型检查外,还可以修改文件头来伪造文件头,欺骗文件上传检查,如图,修改文件头中的类型来进行绕过:

以上为几种常见的上传,更多的还需自行研究,进行上传绕过。

以下为总体的测试流程:

1、登陆网站,并打开文件上传页面

2、点击“浏览”按钮,并选择本地的一个JSP文件(比如hacker.jsp),确认上传。

3、如果客户端脚本限制了上传文件的类型(比如允许gif文件),则把hacker.jsp更名为hacker.gif;配置HTTPProxy(burp)进行http请求拦截;重新点击“浏览”按钮,并选择hacker.gift,确认上传。

4、在WebScarab拦截的HTTP请求数据中,将hacker.gif修改为hacker.jsp,再发送请求数据。

5、登陆后台服务器,用命令find/-namehacker.jsp查看hacker.jsp文件存放的路径。

如果可以直接以Web方式访问,则构造访问的URL,并通过浏览器访问hacker.jsp,如果可以正常访问,则已经取得WebShell,测试结束。

如果hacker.jsp无法通过web方式访问,例如hacker.jsp存放在/home/tmp/目录下,而/home/tomcat/webapps目录对应http:

//example/,则进行下一步

6、重复1~3,在burp拦截的HTTP请求数据中,将hacker.gif修改为../tomcat/webapps/hacker.jsp,再发送请求数据。

在浏览器地址栏输入http:

//example/hacker.jsp,访问该后门程序,取得WebShell,结束检测。

修复方案

针对文件上传漏洞的特点与必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:

1、最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;

2、文件类型检查:

强烈推荐白名单方式,结合MIMEType、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;

3、使用随机数改写文件名与文件路径,使得用户不能轻易访问自己上传的文件;

4、单独设置文件服务器的域名;

其他说明

1.1.7任意文件下载

漏洞名称

任意文件下载,文件遍历下载。

漏洞描述

目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者下载到系统中的文件,攻击人员通过目录遍历攻击可以获取系统文件及服务器的配置文件等等。

一般来说,他们利用服务器API、文件标准权限进行攻击。

严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计“漏洞”。

如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。

检测条件

1、网站URL中存在下载参数,并且未进行过滤../../../字符。

2、

检测方法

1、通过web漏洞扫描工具对网站实施扫描可能发现目录遍历或者任意文件下载漏洞,发送一系列”../”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。

2、也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造../../../WEB-INF/web.xml等,然后查看其是否可被下载出来。

随后可构造下载系统文件。

修复方案

1、净化数据:

对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。

2、web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。

www目录就是一个chroot应用.由chroot创造出的那个根目录,叫做“chroot监狱”(所谓"监狱"就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考:

http:

//blog.csdn/frozen_fish/article/details/2244870

3、任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。

4、要下载的文件地址保存至数据库中。

5、文件路径保存至数据库,让用户提交文件对应ID下载文件。

6、用户下载文件之前需要进行权限判断。

7、文件放在web无法直接访问的目录下。

8、不允许提供目录遍历服务。

9、公开文件可放置在web应用程序下载目录中通过链接进行下载。

参考代码:

publicStringdownload()throwsException{

//获取文件id

Stringid=Struts2Utils.getRequest().getParameter("id");

try{

//通过id进行文件查询

DownloadFiledownFile=fileService.findEntityById(Long.parseLong(id));

//获取该附件的类型

byte[]bt=null;

bt=downFile.getContent();

HttpServletResponseres=Struts2Utils.getResponse();

res.reset();

res.setContentType("application/x-msdownload");

res.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(uacFile.getName(),"UTF-8"));

OutputStreamout=res.getOutputStream();

out.write(bt);

out.flush();

out.close();

}catch(Exceptione1){

e1.printStackTrace();

}

returnnull;

}

其他说明

1.1.8脆弱的SSL加密算法

漏洞名称

弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAKAttack漏洞

漏洞描述

脆弱的SSL加密算法,是一种常见的漏洞,且至今仍有大量软件支持低强度的加密协议,包括部分版本的openssl。

其实,该低强度加密算法在当年是非常安全的,但时过境迁,飞速发展的技术正在让其变得脆弱。

黑客可利用SSL弱加密算法漏洞进行SSL中间人攻击,即强迫服务器与用户之间使用低强度的加密方式,然后再通过暴力破解,窃取传输内容。

强度较弱的加密算法将不能较好的保证通信的安全性,有被攻击者破解的风险。

对于linux中openssl的FREAKAttack漏洞,该漏洞是由于OpenSSL库里的s3_clnt.c文件中,ssl3_get_key_exchange函数,允许客户端使用一个弱RSA秘钥,向SSL服务端发起RSA-to-EXPORT_RSA的降级攻击,以此进行暴力破解,得到服务端秘钥。

此问题存在于OpenSSL版本0.9.8zd之前,或1.0.0p之前的1.0.0,或1.0.1k之前的1.0.1。

检测条件

1、已知Web网站开放443端口(https)。

2、开启了SSL协议。

检测方法

1、对于windows中的检测方法:

通过加密算法检测工具,与网站系统进行加密算法枚举通信,探测系统存在的加密算法及位数情况。

利用SSLciphercheck软件,通过CMD下运行,进行协议探测进行检测命令:

“sslciphercheck.exe-hip地址或者域名-p443”,或者是利用web扫描工具,如WVS,APPscan等进行扫描检测,相关检测截图:

2、对于openssl的FREAKAttack漏洞,检测如下:

https远程检查方法(看一个网站是脆弱的RSA弱密钥攻击,你可以使用OpenSSL命令):

openssls_client-connectfbi.gov:

443-cipherEXPORT,如果你看到”alerthandshakefailure”这句话就说明该网站是安全的:

RedHat系列检查命令:

rpm-qa|grepopenssl

Debian\Ubuntu系列检查命令:

dpkg-l|grepopenssl

修复方案

以下为针对脆弱的SSL加密算法漏洞的修复建议,其中包括IIS、apache、与windows本身的一些安全建议方法:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1