《安全攻击及防范手册.doc》由会员分享,可在线阅读,更多相关《安全攻击及防范手册.doc(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、安全攻击及防范手册安全攻击与防范手册版本 年月1 概述1.1 简介 当今世界,(因特网)已经成为一个非常重要的基础平台,很多企业都将应用架设在该平台上,为客户提供更为方便、快捷的服务支持。这些应用在功能和性能上,都在不断的完善和提高,然而在非常重要的安全性上,却没有得到足够的重视。随着技术应用的范围越来越广泛,技术相关的安全漏洞越来越多的被挖掘出来,而针对站点的攻击已经成为了最流行的攻击途径。 不久前项目管理部对公司内外重点系统进行了一次安全隐患分析测试,并总结出了公司安全测试问题分类与描述的报告文档。本文针对此报告中提到的一些重大安全隐患问题逐一分析,并给出相应的解决方案。1.2 参考资料安
2、全性编程实例网站系统安全开发手册企业级安全性(构建安全的应用)2 安全隐患与预防措施2.1 会话标识未更新2.1.1 描述登陆过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。2.1.2 安全级别高。2.1.3 安全风险可能会窃取或操纵客户会话和 ,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以与执行事务。2.1.4 解决方案u 不要接受外部创建的会话标识。u 始终生成新的会话,供用户成功认证时登录。u 防止用户操纵会话标识。u 请勿接受用户浏览器登录时所提供的会话标识。u 如果有验证码的。
3、验证码改用存储。同时记得释放资源2.1.5 技术实现u 登陆界面和登陆成功的界面一致时修改后台逻辑,在验证登陆逻辑的时候,先强制让当前过期,然后用新的存储信息。u 登陆界面和登陆成功的界面不一致时在登陆界面后增加下面一段代码,强制让系统过期。()()清空 ()获取()让过期 注意:框架已经修改了登陆验证类,登陆成功后会清理掉当前,重新创建一个新的。凡是使用框架的项目均可统一增加此功能。2.2 不充分帐户封锁2.2.1 描述程序没有使用锁定功能,可以穷举密码,可以造成蛮力攻击,恶意用户发送大量可能的密码和或用户名以访问应用程序的尝试。 由于该技术包含大量登录尝试,未限制允许的错误登录请求次数的应
4、用程序很容易遭到这类攻击。2.2.2 安全级别高。2.2.3 安全风险可能会升级用户特权并通过 应用程序获取管理许可权。2.2.4 解决方案请确定允许的登录尝试次数(通常是 次),确保超出允许的尝试次数之后,便锁定帐户。 为了避免真正的用户因帐户被锁定而致电支持人员的麻烦,可以仅临时性暂挂帐户活动,并在特定时间段之后启用帐户。帐户锁定大约 分钟,通常用这样的方法阻止蛮力攻击。2.2.5 技术实现u 提供锁定信息配置类,可根据项目特定需求修改此配置信息。u 修改登陆验证逻辑,根据上面的配置信息提供帐户锁定功能。注意: 框架已经实现了此功能,凡是使用框架的项目均可统一增加此功能。2.3 可预测的登
5、录凭证2.3.1 描述发现应用程序会使用可预期的认证凭证(例如:、)。 攻击者很容易预测用户名和密码,登录应用程序,从而获取未获授权的特权。2.3.2 安全级别高。2.3.3 安全风险可能会升级用户特权并通过 应用程序获取管理许可权。2.3.4 解决方案不应使用易于预测的凭证(例如:、 等),因为它们可能很容易预测,可让用户不当进入应用程序。2.3.5 技术实现只要养成良好的习惯,坚决不使用容易预测的名和密码,即可彻底杜绝此类问题。2.4 登录错误消息凭证枚举2.4.1 描述当试图利用不正确的凭证来登录时,当用户输入无效的用户名和无效的密码时,应用程序会分别生成不同的错误消息。 通过利用该行为
6、,攻击者可以通过反复试验(蛮力攻击技术)来发现应用程序的有效用户名,再继续尝试发现相关联的密码。2.4.2 安全级别高。2.4.3 安全风险可能会升级用户特权并通过 应用程序获取管理许可权。2.4.4 解决方案不论名和密码哪个错误,都提示同样的消息。且同时加上登陆失败次数达到规定的帐户锁定功能。2.4.5 技术实现不论名和密码哪个错误,都提示如下所示同样的消息:一旦某个帐户连续登陆失败次数达到了规定的数值,就会按配置的时间被锁定,如下提示:如此一来,攻击者就没机会穷举帐户和密码了,此类攻击也就不可能发生了! 注意:框架已经实现了此功能,凡是使用框架的项目均可统一增加此功能。2.5 已解密的登录
7、请求2.5.1 描述通过 发送表单数据,这些数据将在报文中以明文的形式传输。对于一些敏感的数据(如用户名密码、信用卡密码)以传统的报文传输存在巨大的风险。2.5.2 安全级别中。2.5.3 安全风险可能会窃取诸如用户名和密码等未经加密即发送了的用户登录信息。2.5.4 解决方案(1) 饶过软件扫描(2) 对提交的敏感信息,一律以加密方式传给服务器。(3) 采用基于的传输协议,对提交的敏感信息在传输过程中加密。 敏感信息包括:用户名、密码、社会保险号码、信用卡号码、驾照号码、电子邮件地址、电话号码、邮政编码等。注意:如果不是基于的传输协议的话。对于提交的敏感信息即使加密后,软件同样认为该漏洞存在
8、。所以避免这一漏洞的有效方案是饶过扫描或者采用基于的传输协议。虽然采取传输数据有很高的安全性,但是也有以下几个显著的缺点:u 需要申请一个合法组织颁发的用来加解密的证书。u 部署、配置繁琐。u 同样的硬件环境,效率比慢很多。 通过上述分析,采取基于的传输协议,付出的代价有点大,是否有必要这样做,值得深入讨论。:把这个用其他的代替,就可以解决已解密的登录请求密;码: 代码 () ? : ; ? : ; (); (); () (); ; (); 2.5.5 技术实现(1) 饶过软件扫描绕过软件扫描有两种方式,如下:u 修改密码输入框名字和类型经过不断扫描测试分析,如果密码输入框的名字不包含、等关键
9、字的话,大部分页面就不会扫描出漏洞。如果还能扫描出漏洞的话,那就在修改密码输入框名字的基础上,把输入框的的属性值为的值改为,然后用函数来模拟实现星号代替输入值的密码输入效果即可饶过该扫描。示例步骤如下: 在原来的密码输入框前添加一个新的输入控件:如:注:其中()()中 为原来密码输入框的值,这个是为了键能起作用而设置的。 修改原来密码框的属性为,并添加函数如下:其中的为新添加的输入控件。 在页面的标签中间添加如下样式: 其中代表新添加的输入控件,代表原来密码输入框的。样式表的必须和控件的一致。u 采用登录 把登陆界面的标签去掉,采用登录。示例代码如下:登陆页面用户:;密码:; 记住密码 ; ;
10、 ; ; ; (); () (); () (); () ; () ()();();(, , );调用回调函数 ;(); () ( ) ( ) ; (); ( ) ( .); ( ) ( .); ( ); (2) 采用基于的传输协议 以默认配置为例,步骤如下:u 启动,进入。展开,单击服务器名,在右边的配置栏中,选择常规。在出现的内容中选中已启用监视端口,并配置监视端口,如下图:u 重新启动,测试协议,测试地址格式示例::端口2.6 注入2.6.1 描述随着模式应用开发的发展,使得使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平与经验也参差不齐,相当大一部
11、分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。攻击者可以通过互联网的输入区域,利用某些特殊构造的语句插入的特殊字符和指令,提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的端口访问),操纵执行后端的查询并获得本不为用户所知数据的技术,也就是 (注入)。2.6.2 安全级别高。2.6.3 安全风险可能会查看、修改或删除数据库条目和表。2.6.4 解决方案u 过滤掉用户输入中的危险字符。u 检查用户输入的字段类型,确保用户输入的值和类型(如 、 等)有效,且符合应用程序预期。u 屏蔽一些详细的错误消息,因为黑客们可以利用这些消息。u 使用专业的漏洞
12、扫描工具。u 企业要在应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署应用之前实施安全测试,这种措施的意义比以前更大、更深远。企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。2.6.5 技术实现()采用过滤器技术。过滤技术是通过特定过滤函数,去查找每个请求的每个参数对应的值,如果出现了不允许的字符,就会弹出如下提示: 点确定后即可回到请求页面,删除敏感字符即可请求成功!过滤器代码如下:* * 参数过滤类,过滤普通表单 * ; ; ; ; ; () ( , , ) , () ; () ? : (); () (, () (); ; ( () () (); ; () ()
13、; ( ; ; ) (); ()() ()() ; (); () (; );()(输入有误,请不要包含中的任何敏感字符!)(););(, ); ( ) (*); ()(); ()(); (); (); (); ; ();( ) (, )(); ( ) ; ( () (); ( ) ( ; ; ) ; ; ( ; (); ) (, ); ()() ( () ) ( () )( ); ; ( ) () ; ( () )( ); ;() () .*()( )().*; .*()( )().*; () .*( ).*; .*( ).*; ; ( ) ;() ; ; ; ; ; ;:; ; ( ) ()
14、;() (); (); ;()(); (); ( ) (); ();( )(); ();辅助类如下: ( ) (); (); ( ()() ? ; ; ( , ) ; ( ()() (,); ( ) ( ; ) ; ;配置片段如下:!*()每个请求都采取特定的数据验证函数,验证数据的类型和长度,只允许特定的特殊字符输入。 注意:u 有些聪明的攻击者在攻击的时候会把一些敏感字符转化成编码(即字符的的进制)来饶过检查。所以,我们在过滤字符的时候也要对敏感字符的编码进行过滤,如( 对应的编码是 3C)u 已经完成的且正在运行的系统,建议采用过滤器技术,因为过滤器技术侵入性小、代码量小、部署方便u 对
15、于未完成的且正在开发的系统,建议采用第二个方案。因为过滤器技术虽然能确保数据的正确性,但同时也存在着过滤不严或过滤太严的问题。不能满足某些特殊的业务需求。2.7 跨站点脚本攻击2.7.1 描述又叫 ( ) ,跨站脚本攻击。它指的是恶意攻击者往页面里插入恶意代码,当用户浏览该页之时,嵌入其中里面的代码会被执行,从而达到恶意用户的特殊目的。2.7.2 安全级别高。2.7.3 安全风险可能会窃取或操纵客户会话和 ,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以与执行事务。2.7.4 解决方案u 在你的浏览器上禁用脚本 u 开发者要仔细审核代码,对提交输入数据进行有效检查 2
16、.7.5 技术实现参见 2.6.5 技术实现中的过滤器技术。2.8 跨站点请求伪造2.8.1 描述( ),中文名称:跨站请求伪造,也被称为: ,缩写为:。你这可以这么理解攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账.造成的问题包括:个人隐私泄露以与财产安全。2.8.2 安全级别中。2.8.3 安全风险可能会窃取或操纵客户会话和 ,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以与执行事务。2.8.4 解决方案u 只允许请求检索数据,但是不允许它修改服务器上的任 何数据。这个修改
17、可以防止利用标签或者其它的类型的请求的攻击。u 要求所有请求都包含一个随机值。u 脚本利用:()2.8.5 技术实现(1) 对于有跨站点请求伪造漏洞的页面,添加一个能在中获取的隐藏字段。(2) 对于请求的页面,都需要添加一个固定名字的隐藏域,值为去服务器获取的随机值。格式如下: (3) 对于请求的页面,后需要添加一个固定名字的参数,值为去服务器获取的随机值。格式如下:(4) 添加过滤器,该过滤器拦截符合过滤规则的请求,取得表单的值,和服务上存储的值比较,如果一样,就放行,如果不一样,就自动跳转错误提示页面。J 过滤器代码 ; 不受保护的资源集合 ; 过期时间 ( ) (); (); ( ) ;
18、 ( , , ) , () ; (); (, () (); () ; ?:(); () ();(, ); ( ) (, ) ) ();(, );()(; );()(无效的安全标识符,请重新刷新当前页面!)(););(, ); () J 类代码,参见 注入技术实现中的辅助类代码。J 类代码 (); ; () ; (); (); (); ( ; ); () ( 0f); ( ) () ( ); () ( ( ); ( ) ;( ) ; () () (); (:)(); ; ( ) (); ; ( ) ();() () (); ; () (); ;J 配置 * 注意:这是目前唯一能解决此漏洞的可行方
19、案,但是有一定的工作量,且对系统效率也有轻微影响,是否有必要修改,值得商榷。2.9 发现数据库错误模式2.9.1 描述“ 注入”以外的攻击所触发的“数据库错误”, 插入的危险字符渗透了应用程序并到达 查询本身(即应用程序易受到 注入攻击)。2.9.2 安全级别高。2.9.3 安全风险可能会查看、修改或删除数据库条目和表。2.9.4 解决方案确保用户输入的值和类型(如 、 等)有效,且符合应用程序预期。 . 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用 命令对象来实施它们,以强化变量类型。 . 清理输入以排除上下文更改符号,例如: (单引号) (引号) (反
20、斜线转义单引号) (反斜杠转义引号) )(结束括号) ;(分号)2.9.5 技术实现参见 2.6.5 技术实现。2.10 应用程序错误2.10.1 描述如果攻击者通过探测 页来找寻引起异常的各种情况,则出现信息泄漏攻击。对于攻击者而言,这是一种颇有成效的攻击方法。因为异常细节信息常以 的形式返回并显示在浏览器中。这可能会泄漏很有用的信息,如堆栈跟踪。堆栈跟踪包含数据库连接字符串、数据库名、数据库方案信息、 语句以与操作系统和平台版本。2.10.2 安全级别中。2.10.3 安全风险攻击者可从错误信息判断出注入或其他攻击方式的漏洞。2.10.4 解决方案()检查所有的请求,以了解所有预期的参数和
21、值是否存在。当参数缺失时,发出适当的错误消息,或使用缺省值。 ()应用程序应验证其输入是否由有效字符组成(解码后)。 例如,应拒绝包含空字节(编码为 )、单引号、引号等的输入值。 () 确保值符合预期范围和类型。 如果应用程序预期特定参数具有特定集合中的值,那么该应用程序应确保其接收的值确实属于该集合。例如,如果应用程序预期值在 范围内,那么就该确保该值确实是数字,且在 范围内。()请勿在生产环境中输出调试错误消息和异常。2.10.5 技术实现养成良好的编码习惯,屏蔽错误信息,防止信息泄露,将默认的错误信息替换成一个事先定制好的页面,这个页面只显示一条简单的错误消息但不提供任何细节。例如:可以
22、将浏览器的、等错误以一个友好的界面展现出来。修改工程的,添加 这样的话,一旦出现错误,页面就会跳转到页面,如下:如果出现错误,则页面就会跳转到页面,如下:2.11 启用了不安全的 方法2.11.1 描述 头显示危险的 选项是已允许的,如: 等,这表示在服务器上启用了 ,可能允许未授权的用户对其进行利用。2.11.2 安全级别中。2.11.3 安全风险可能会在 服务器上上载、修改或删除 页面、脚本和文件。2.11.4 解决方案如果服务器不需要支持 ,请务必禁用它,或禁止不必要的 方法(动词)。2.11.5 技术实现u 添加过滤器,只允许和两个方法访问系统。J 过滤器代码 () ( , , ) ,
23、 () ; () ; ();()() ()()();(, ); ( ) J 配置 *注意:此漏洞仅在服务器中存在。2.12 管理界面2.12.1 描述 服务器包含若干管理用途的应用程序:、 和 。 攻击者可以访问其中一或多个应用程序,也许能够更改 站点的配置。2.12.2 安全级别中。2.12.3 安全风险可能会升级用户特权并通过 应用程序获取管理许可权。2.12.4 解决方案限制访问管理控制台,倘若不需要,请将其除去。2.12.5 技术实现u 将“”改名,改一个和业务相关的标识名字即可。实现步骤:(1) 进入管理控制台,地址格式为::端口(2) 点击左边的,如下图,点(3) 点击进入右边的配
24、置常规选项卡,然后点显示,出现高级选项,如下图(4) 修改上图中的控制台上下文路径,如,然后点击右下角的应用按钮,然后重新启动服务器即可。(5) 访问管理控制台的地址格式变为::端口u 禁用控制台(不建议)实现步骤:此方案的实现步骤几乎与上个技术方案相同。唯一不同的是步骤四,把上图中的已启用控制台前面的勾去掉,然后点击右下角的应用按钮,然后重新启动服务器即可。此时,访问控制台地址变为不可访问。所以此方法不建议使用,只作为了解。2.13 漏洞2.13.1 描述的核心是使用的,处理时通过(参数过滤器)调用的方法来处理的参数,它将每个参数声明为一个语句。例如:、请求参数? ? 、经转义后,在中执行代
25、码如下:? ? ()? ? ()?为了防范篡改服务器端对象,的不允许参数名中出现“”字符,但如果使用字符串表示,攻击者就可以绕过保护,修改保护方式执行的值。例如:在请求中带上如下参数:()() ()()()()()( ()可以停止当前所在的服务器(, , ,)。经过我的测试,利用该漏洞已经顺利地执行了, 操作。2.13.2 安全级别高。2.13.3 安全风险可能会框架漏洞利用来获取应用程序的管理许可权。2.13.4 解决方案下载最新的版本: 或者修改对应中的处理逻辑,然后编译打包替换旧的文件。2.13.5 技术实现为了防止攻击者调用任意方法任意参数 把标志 设置为 和 成员访问安全域“允许静态的方法访问”设置为. , 同时为了防止访问上下文变量和提供 白名单 参数名 请求 的参数2.1 不安全的参数设置2.1.1 描述的参数可以是“”、”或“”。三个可选值中,“” 表示文件可以与其嵌入到的 页进行通信,即使该文件来自不同于页的域也可以。当为时,表明嵌入的第三方文件可以执行代码。2.1.2 安全级别高。2.1.3 安全风险攻击者此时就可以利用该缺陷嵌入任意第三方文件而执行恶意代码。2.1.4 解决方案将参数设置为。2.1.5 技术实现 在的属性里面将参数改为就可以。3 系统安全隐患与预防措施 4 数据库安全隐患与预防措施 5 应用程序安全隐患与预防措施
限制150内