当前位置:   article > 正文

常见WEB漏洞还原案例以及修复方式_敏感信息明文传输漏洞修复

敏感信息明文传输漏洞修复

一、配置管理与潜在威胁

测试编号

测试项

本次是否测试

测试定性

Web_01

明文信息传输漏洞

√是□否

中危

Web_02

敏感信息泄露

√是□否

中危

Web_03

默认或可猜解用户账户

√是□否

中危

Web_04

会话重放攻击测试

√是□否

低危

Web_05

验证码缺陷

√是□否

中危

Web_06

http方法测试

√是□否

低危

    1.  明文传输漏洞 高危

漏洞描述:

数据传输过程中的账号、密码、身份证等敏感信息明文传输。

产生原因:

<1>密码等敏感信息没有经过加密,明文传输。

 

 

漏洞危害:明文传输的危害在于所有经过网关的流量都可以被黑客通过嗅探(ARP欺骗)的方式抓取到。

防护建议:

<1>启用SSL机制

<2>对系统内所以涉及到密码等敏感数据传输地方做加密处理,从而在一定的程度上避免这些敏感的数据受到威胁。确保所有登录请求都以加密方式发送到服务器。确保敏感信息,例如:姓名、身份证号码、社会保险号码、信用卡号码、驾照号码、电子邮件地址、电话号码、邮政编码等信息一律以加密方式传给服务器。

<3>确保使用了合适、强大的标准算法和强大的密钥,不要使用md5、base64编码、url编码等易被破解的加密方式,可以添加一个随机salt值做加密处理。并且密钥的管理要到位。

1.2明文存储漏洞 中危

漏洞描述:

查看系统是否存在鉴别数据、重要业务数据未加密存储,如页面源码、配置文件、缓存、前端cookie、localstorage、服务器、数据库、日志中是否存在敏感信息明文存储。

产生原因:

密码等敏感信息没有经过加密,明文存储。

漏洞危害:攻击者能够轻易获取到存储的敏感信息,通过这些有效信息进行进一步的攻击。

防护建议:

敏感信息脱敏处理后再进行存储,建议使用AES算法。

1.3弱口令或空口令 中危

漏洞描述:

查看系统是否采用了简单数字组合、常规等简单易猜解或空账户口令,如应用系统、中间件、数据库登录口令、服务器远程管理账户口令、guest账户、Axis2弱口令。

测试方法

对常见的端口、服务、管理后台等进行弱口令测试。

漏洞危害:

弱口令非常容易被攻击者猜解或通过弱口令扫描工具扫描到,导致攻击者通过弱口令可轻松登录系统中,从而进行下一步的攻击,如上传webshell,获取敏感数据,另外攻击者利用弱口令登录网站管理后台,可任意增删改等操作,从而造成负面影响。

防护建议:

设置合理的密码复杂度。

1.4不安全的加密算法 高危

漏洞描述:

测试系统是否采用了弱加密算法,如md5、base64、DES、escape、urlencode。

产生原因:

密码等敏感信息使用弱加密算法进行数据传输。

漏洞危害:敏感信息的数据加密采用比较简单的算法或编码,一旦被人获取足够的“样本”,将有可能被反向推测出解密算法,从而泄露重要数据。

防护建议:

<1>涉及密码等相关操作的业务场景,如登录、修改密码、用户注册等采用散列加盐或RSA非对称加密方式进行加密

·散列加盐(要求密码注册和下发过程做同样的散列加盐处理,数据库中存储的即为散列后的值,无法逆向破解)

用户注册

1、用户注册时,注册页面输入账号和密码,以及其他信息

2、前端将salt值与用户密码连接在一起(salt值为与服务端共同约定的一个固定也唯一的值uid,可选择用户手机号或用户名,保证每个用户的salt值唯一且不同)

3、对连接后的值进行散列(md5或SHA1),得到hash1值

4、服务端接收到注册请求后发送注册成功响应,并将hash1值存放到数据库中

用户登录

1、用户登录时,在登录页面输入用户名和密码

2、系统通过用户名找到与之对应的约定好的salt值,即uid

3、将salt值与用户输入的密码连接在一起,对连接好的值进行散列,得到hash2

4、比较hash1和hash2是否相等,相等则表示密码正确,否则表示密码错误

修改密码

1、修改密码时,在修改密码页面输入旧密码和确认密码

2、系统找到与之对应的约定好的salt值,即uid

3、将旧密码和确认密码分别拼接salt值,对连接好的值进行散列,得到hash3和hash4

4、比较hash3和hash4是否相等,相等则更新password字段,将hash4取代hash1存入数据库,并返回密码修改成功响应

图示

 

·非对称加密

用户注册

1、用户通过浏览器点击进入注册用户页面

2、web服务器生成RSA公钥和私钥(一个会话周期内有效,会话更新重新生成),并把公钥publickey发送到浏览器

3、在注册页面输入用户名和密码,用步骤2返回请求中的公钥publickey对口令进行加密encryptpass=RSA.encrypt(pass,publickey),将username+encryptpass POST给服务端

4、服务端接收到步骤3的请求后,用私钥privatekey对口令进行解密,还原成明文pass=RSA.decrypt(encryptpass,privatekey)。

5、依据项目需求,对敏感数据password作脱敏处理,调用统一的加密算法(用户口令建议使用hash算法)存入数据库,并将注册结果返回给客户端

用户登录

1、用户通过浏览器点击进入登录页面

2、web服务端生成RSA公钥和私钥(一个会话周期内有效,会话更新后重新生成),把公钥publickey发送给浏览器

3、在登录页面输入用户名和密码,用步骤二返回请求中的公钥publickey对密码进行加密encryptpass=RSA.encrypt(pass,publickey),并将username+encryptpass POST给服务端

4、web服务器接收到步骤3的请求后,用私钥privatekey对口令进行解密,还原成明文pass=RSA.decrypt(encryptpass,privatekey)

5、服务端对明文口令做业务规定的加密算法(与数据存储加密算法一致),并与数据库中存入的口令密文作对比,若一致则登录成功,不一致则登录失败。并将登录结果返回给客户端

修改密码

1、用户通过浏览器点击进入修改密码页面

2、web服务端生成RSA公钥和私钥(一个会话周期内有效,会话更新后重新生成),把公钥publickey发送给浏览器

3、在修改密码页面输入旧密码和新密码,用步骤二返回请求中的公钥publickey对旧密码和新密码分别进行加密,encryptoldpass=RSA.encrypt(oldpass,publickey)、encryptnewpass=RSA.encrypt(newpass,publickey),并将加密后的encryptoldpass\encryptnewpass POST给服务端

4、服务端接收步骤3的请求后,用私钥privatekey对旧密码和新密码进行解密,还原成明文oldpass=RSA.decrypt(encryptoldpass,privatekey)和newpass=RSA.decrypt(encryptnewpass,privatekey)

5、服务端对明文口令分别做业务规定的加密算法(与数据库存储加密算法一致),将加密后的old password与数据库中存储的口令密文作对比,若一致则将数据库中passord字段更新,将加密后的new password替换原来的,并返回密码修改成功响应

 

<2>表单提交,对敏感信息做加密处理解决项目上因特殊原因不能使用ssl,但表单中需要提交身份证号、家庭住址等敏感信息,采用混合加密(对称加密+非对称加密)采用混合的方式是因为非对称加密会影响性能,对于大数据量加密时应用对称加密,速度快,效率优,同时为了防止对称加密的密钥容易泄露的问题,又使用了一层非对称加密来保护密钥

1、客户端生成一次有效密钥key,用于对称加密(防止本地js泄露导致key值泄露,一次有效保证了即使获取本地js,但不能破解其他客户端或其他请求的加密数据,因为key变了)

2、服务端生成有效密钥对(公私钥,一个会话周期内有效,若重新登录或会话更新,则密钥对随之更新),并将publickey返回给客户端

3、客户端使用AES对称加密算法以及密钥key对敏感字段加密,encryptdata=AES.encrypt(data,key)

4、客户端使用RSA非对称加密算法以及公钥publickey对密钥key加密,encryptkey=RSA.encrypt(key,publickey)

5、将加密后的data和key通过post请求方式发送到服务端,encryptdata+encryptkey

6、服务端接收到客户端发送的表单请求后,使用RSA以及自己保存的私钥privatekey对encryptkey进行解密,得到key=RSA.decrypt(encryptkey,privatekey)

7、服务端用步骤6得到的key,使用AES算法对encryptdata进行解密得到原始敏感数据,data=AES.decrypt(encryptdata,key)

8、依据项目需求,对敏感数据data作脱敏处理,调用统一的加解密算法存入数据库

<3>服务端返回含敏感信息字段的请求给客户端,与上述表单提交业务场景一致,上面为存,这个是取

1、服务端接收到客户端请求后,将请求的敏感数据从数据库取出

2、服务端对数据库中的数据作解密得到原始数据data(数据存入数据库时根据业务需求调用了统一的加解密算法)

3、服务端使用AES算法对data进行对称加密并发送到客户端,key值与客户端约定为一个固定且唯一的值uid(保证了每个用户的key值均不同,只有自己能解密自己的响应请求数据)encryptdata=AES.encrypt(data,key=uid)

4、客户端接收到服务端的响应后,使用约定好的key=uid进行解密,获取原始数据回显在客户端,data=AES.decrypt(encryptdata,key)

1.4安全配置不当 中危

组件或中间件配置不当引起的安全漏洞。

<1>tomcat配置不当

<2>http方法配置不当

<3>跨域安全配置不当

<4>安全相关响应头配置不当

1.4.1 tomcat安全配置漏洞

漏洞描述: 在前端或通过其他方式可获得系统中间件版本、服务器信息等,造成敏感信息泄露。

漏洞危害:攻击者可以利用收集的敏感信息有针对性的指定计划对系统进行攻击。

防护建议:

<1>tomcat版本泄露,错误信息泄露了包名、开发框架等

 

<2>tomcat管理目录泄露

 

<3>tomcat样例目录泄露

修复

<1>tomcat版本控制

检查目前使用的Tomcat版本是否存在安全漏洞,如果存在安全漏洞,则需升级到新的安全版本。如果要从低版本升级到高版本,应先在测试环境中测试通过后再进行升级,以避免由于兼容性带来的问题。

<2>tomcat版本号隐藏

1、进入tomcat的lib目录找到catalina.jar文件

2、用压缩软件打开catalina.jar,进入org/apache/catalina/util目录下

3、编辑配置文件serverinfo.properties,修改server.info、server.number参数值,隐藏tomcat版本信息

<3>无关目录删除和隐藏

进入tomcat的webapps根目录下,删除docs、examples、host-manager、manager目录及其下的所有文件,ROOT目录下只保留自定义的error.html页面即可。以避免造成不必要的信息泄露或其他漏洞。

<4>封装程序异常报错信息

1、对于tomcat的中间件敏感信息泄露的问题,常用修复方式为修改tomcat根目录下conf文件夹下的web.xml文件,配置一个统一的静态页面,将400、403、404、500等常见报错重定向到该静态页面,而不是抛出异常(报错信息导致代码信息泄漏)

<!-- 400错误 -->  

<error-page>  

<error-code>400</error-code>  

<location>/error.html</location>  

</error-page>  

<!-- 404 页面不存在错误 -->  

<error-page>  

<error-code>404</error-code>  

<location>/error.html</location>  

</error-page>  

<!-- 500 服务器内部错误 -->  

<error-page>  

<error-code>500</error-code>  

<location>/error.html</location>  

</error-page>  

<!-- java.lang.Exception异常错误,此标记可定义多个类似错误提示 -->  

<error-page>  

<exception-type>java.lang.Exception</exception-type>  

<location>/error.html</location>  

</error-page>  

<!-- java.lang.NullPointerException异常错误,此标记可定义多个类似错误提示 -->  

<error-page>  

<exception-type>java.lang.NullPointerException</exception-type>  

<location>/error.html</location>  

</error-page>

2、编写error.html页面,并放入ROOT目录下

<5>加入异常捕获过程中预定义的错误编码

对于常用的jsp语言开发的网站,可在业务流程中加入异常捕获过程中预定义的错误编码,将异常输出到错误日志中,并在前台页面返回相应的错误编码,以便应用系统运维人员进行异常排查。

try {

//某业务处理流程

     ……

} catch (Exception e) {

e.printStackTrace();

logger.error(e.getMessage());

resultMessage = getText("业务处理发生异常,错误编码A-04221!");

return "errorJsp";

}

<6>修改服务器默认端口设置和指令

server.xml默认有下面一行:

<Server port="8005" shutdown="SHUTDOWN">

这样允许任何人只要telnet到服务器的8005端口,输入"SHUTDOWN",然后回车,服务器立即就被关掉了。从安全的角度上考虑,我们需要把这个shutdown指令改成一个别人不容易猜测的字符串,可以同时把端口也改了。

<Server port="6695" shutdown="molly1122hello">

<7>关闭war自动部署

默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。

<Host name="localhost"  appBase="" unpackWARs="false" autoDeploy="false">

<8>解决“slow http denial of service attack”漏洞

slow http denial of service attack漏洞是利用http post的时候,指定一个非常大的content-length,然后以很低的速度发包,比如10-100s发一个字节,让这种连接不断开,这样当客户端连接多了后,占用了webserver的所有可用连接,从而导制DOS,属于一种打拒绝服务攻击。

解决方法:

打开server.xml找到

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

将其中的connectionTimeout="20000"改为1000,其单位为ms。

1.4.2 http方法安全配置漏洞

漏洞描述:Web服务器默认情况下开放了一些不必要的HTTP方法(如DELETE、PUT、TRACE、MOVE、COPY),增加了受攻击的几率。

漏洞危害:Web服务器启用了不安全的HTTP方法,很可能会在 Web服务器上上传、修改或者删除 Web页面、脚本和文件,可能允许未授权的用户对其进行利用。

测试方法:

<1>打开fiddler-composer,构造option方法,并执行Execute

 

<2>使用fiddler抓包,查看构造请求得到的响应

 

 

防护建议:禁用不必要的HTTP方法

1、对于修改应用程序的Web.xml文件的协议,具体如下所示:

<?xml version="1.0" encoding=“UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

2、在应用程序的Web.xml中添加如下代码即可:

<security-constraint>

<web-resource-collection>

<url-pattern>/*</url-pattern>

<http-method>PUT</http-method> 

<http-method>DELETE</http-method>

<http-method>HEAD</http-method>

<http-method>OPTIONS</http

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/610677
推荐阅读
相关标签
  

闽ICP备14008679号