(中国N客)教你做好网络安全防护 让Web远离木马

社区服务
高级搜索
猴岛论坛电脑百科(中国N客)教你做好网络安全防护 让Web远离木马
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
1个回复

[系统问题](中国N客)教你做好网络安全防护 让Web远离木马

楼层直达
NCK上 官

ZxID:17989712

等级: 列兵
举报 只看楼主 使用道具 楼主   发表于: 2012-06-06 0
随着网络规模的进一步扩大,越来越多的Web应用渗透了现代人的工作与生活。人们在享受Web带来便利的同时,也面临着急剧增加的Web安全风险。我们无法摆脱对Web的依赖,那么了解其危害并有效规避无疑是明智的选择。

  Web应用程序暗藏漏洞

  Web时代的到来,为脚本语言提供了广阔的舞台。由于脚本语言降低了编程的门槛,增强了开发的灵活性,并能快速高效地搭建平台环境,实现各类应用,因而Web开发者对此青睐有加。

  但由于人们使用脚本语言的随意性,为攻击者提供了很多可利用的漏洞。另外,使用perl、python、shell等语言编写的简短代码,可以解决许多在入侵中和入侵后需要面对的情报搜集、数据回传、痕迹清除等繁琐工作。因此,脚本语言常常成为攻击者用于攻击的“黏合剂”。

  可见,脚本语言在Web的攻防两端都扮演着极其重要的角色,要想深入了解Web的安全技术,必须掌握常用的脚本语言。

  目前常用的脚本语言有perl、ruby、php、javascript、vbscript、wscript、bat、shell、python等等。它们各有特点,用处广泛。其中,perl对正则表达式的支持强大,处理文本的能力极强,又有丰富的模块可利用,能大大加快开发的进度;ruby和php适合做CGI,最新的Metasploit framework模块就是用ruby编写的,而3.0之前的版本则是由perl开发的;javascript在客户端的浏览器中运行,可用于编写溢出代码;vbscript、wscript、bat、shell则可以分别应用于windows和*nix的系统远程管理方面。

  安全风险来自三方面

  Web安全可以分为三个层次:环境安全、Web应用安全、客户端安全。环境安全的主体是系统管理员,Web应用安全的主体是开发程序员,客户端安全的主体是浏览用户。一次成功的攻击,可能是这三个方面的任意一个环节的安全隐患造成的,或者是对多个环节的安全漏洞的综合利用。所以,要保证Web安全,必须严格审查这三方面的安全漏洞,任何一个环节的缺失,都会给攻击者带来可乘之机。

  环境安全指的是Web服务提供者自身的基础安全保障,它又可以分为网络安全、主机安全和数据库安全。具体来说,管理员首先要保证服务器和主机的安全,设置强保护的密码,关闭不需要的服务,密切关注包括操作系统、已安装的应用软件的升级信息和安全公告,及时下载安装安全补丁。

  数据库安全也会影响到整个系统的安全。由于数据库带有与操作系统交互的存储过程,可以直接运行系统命令,所以,一旦取得了数据库的权限,就意味着能够取得主机系统权限。

  环境安全可以通过管理员自身的安全意识的提高来确保,但Web应用安全就不是单靠管理员小心谨慎就可以保证的了。事实上,大量的Web应用软件往往由于开发程序员的疏忽,给系统带来较高的风险。最常见的是利用Web应用发起的攻击包括SQL注入、跨站攻击(XSS)等。

  环境安全和Web应用安全的主体是管理员和程序开发人员,其攻击也主要针对服务器端展开,而浏览用户一端也并不安全。

  最常见的客户端软件漏洞就是浏览器漏洞,作为浏览网页的基本工具,浏览器使用频率是各类软件里最高的。一旦其安全屏障被攻破,就会爆出漏洞,那么攻击者将能轻易地通过网页向浏览用户的主机植入木马、引发系统崩溃。

  除了浏览器本身的漏洞之外,浏览器插件同样可能成为攻击的对象。各种Flash插件、上网过滤插件如果存在漏洞,将直接导致使用者在上网浏览信息时暴露在攻击者面前。所以,浏览用户要保护自己的上网安全,除了要选择相对安全的浏览器、及时升级补丁之外,还要慎重选择安装各种插件,及时升级插件版本,尽量不访问可能存在安全问题的网站,在访问时尽量关闭浏览器的javascript功能。
 破解Web典型攻击

  作为Web攻击的典型应用,SQL注入和跨站攻击一直是人们关注的热点。
  SQL注入
  1.原理
  SQL注入是通过把SQL命令注入到B/S应用或C/S应用中,最终达到欺骗服务器执行恶意SQL命令的一种攻击行为。
  产生SQL注入漏洞的根源在于程序命令和用户数据之间没有做到泾渭分明,这使得攻击者有机会将程序命令当作用户输入的数据提交给程序执行。如果编写B/S应用或C/S应用的程序员未对用户输入进行仔细检查就传入SQL语句,即导致SQL注入漏洞的产生。
  目前常见的SQL注入一般存在于B/S模式的Web应用中。各种架构类型的网站,包括ASP+SQL Server,ASP+Access,PHP+MySQL等都是通过SQL语句与数据库进行交互,SQL的广泛应用导致SQL注入成为攻击Web系统的一个重要手段。
  一般来说,攻击者通过SQL注入可以猜测用户密码、获取数据库内容和系统权限。

  2.演示
  本文通过一个简单的演示来展示攻击者通过SQL注入能够达到的目的。
  最常见的SQL注入存在于如:http://xxx.xxx.xxx/xxx.php?x=y的动态页面中。这种动态页面带有1个或多个参数,只要该页面用所带的参数与数据库进行交互,那么就有可能存在SQL注入漏洞。下面以http://127.0.0.1/show.php?id=x为例,进行一次针对PHP+MySQL架构的虚拟SQl注入。

  (1)用1=1,1=2测试法判断漏洞存在与否
  发送以下三个请求:
  http://127.0.0.1/show.php?id=1
  http://127.0.0.1/show.php?id=1 and 1=1
  http://127.0.0.1/show.php?id=1 and 1=2
  存在注入漏洞的表现是:
  第一个请求正常显示,此时提交给数据库的SQL语句类似:select * from 表名 where id=1。
  第二个请求正常显示,内容与上一个的相同,此时提交给数据库的SQL语句类似:select * from表名 where id=1 and 1=1。
  第三个请求显示错误信息或显示自定义的信息,此时提交给数据库的SQL语句类似:select * from 表名 where id=1 and 1=2。
  满足以上3个条件的页面肯定存在SQL注入漏洞。

  (2)判断数据库类型
  不同类型的数据库使用的函数和注入方法都有差异,因此在注入前需要判断数据库的类型。
  方法一,根据出错信息判断数据库类型。
  如果服务器未关闭出错信息,那么通过构造错误的SQL语句就可以从返回的出错信息中得到数据库类型。
  方法二,通过数据库内置函数或系统表判断数据库类型。
  如果服务器关闭了出错信息,那么可以通过数据库的内置函数或系统表来判断数据库的类型。
  利用数据库的系统表也可以达到相同的目的。例如MySQL数据库有个mySql.user表,记录着数据库的用户信息,构造SQL语句查询该表就可以判断服务器端是否使用MySQL数据库。当请求http://127.0.0.1/show.php?id=1 and (select count(*) from mySQL.user)>0的结果时,能够返回正常的内容说明服务器端使用MySQL数据库。

  (3)猜解当前数据库用户名
  利用MySQL的内置函数,用ASCII解码法可以逐字猜解当前的数据库用户名。由于MySQL数据库默认使用root用户,因此可以通过发送下面这个请求进行验证:http://127.0.0.1/show.php?id=1 and ord(mid(user(),1,1))=114。其中114是字符r对应的ASCII码。如果页面返回正常内容,则表示当前数据库用户名的第一个字母是r,用此方法可以逐字推测出当前数据库用户名。

  (4)猜解数据表
  猜解表名可以用类似http://127.0.0.1/show.php?id=1 and (select count(*) from member)>=0的请求。如果页面返回正常内容,则说明数据库中存在member这个表,否则就说明不存在这个表。循环此操作,直到猜解出表名为止。
  请求http://127.0.0.1/show.php?id=1 and (select count(*) from member)>=0返回页面异常,说明不存在member这个表。
  请求http://127.0.0.1/show.php?id=1 and (select count(*) from user)>=0返回正常页面,说明存在user这个表。

  (5)猜解字段名和字段数
  猜解字段名可以采用跟猜解表名类似的方法,将select count(*)改为select count(字段名)。请求http://127.0.0.1/show.php?id=1 and (select count(id) from user)>=0猜解user表中是否有id这个字段,返回正常页面说明存在id这个字段。
  利用SQL语句中union的特性,提交类似http://127.0.0.1/show.php?id=1 union select 1,1这样的请求可以快速确定当前表中的字段个数。此时提交的SQL语句相当于“select * from 表名 where id=1 union select 1,1”,只有union select的个数与当前表中的字段数相同时,这个SQL语句才能正常执行,页面才能返回正常的内容,而select 1的个数就相当于当前表中的字段数。
  当union select的个数与当前表中字段数不一致时,返回页面异常。
  当union select的个数与当前表中的字段数相同时,返回正常页面。

  (6)猜解字段内容
  猜解字段分为猜解本表的字段和猜解跨表的字段。
  首先是猜解本表的字段。假设已经猜解出本表的表名是article,其中有一个字段是title,接下来就要猜解各列对应的title字段的内容。采用与猜解数据库用户名类似的ASCII解码法,提交请求http://127.0.0.1/show.php?id=1 and ord (mid(title,1,1))=116,页面返回正常内容说明当前表中id为1的记录所对应的title字段第一个字母为t。
  依次类推,可以猜解出本表各字段的完整内容。
  接下来猜解跨表的字段。假设已经猜解出另一个表名为user,其中包含id,username,password三个字段。此时需要用到union的一个特性:用union连接的两条SQL语句,当前一个select语句为假时,最终只返回第2个select语句的结果。因此可以构造特殊的SQL语句,让页面显示我们需要的特定数据。构造请求http://127.0.0.1/show.php?id=999 union select 1, username, password from user where user.id=1时,原先显示文章内容的位置现在显示的是user表中id为1的username列内容。
  类似的,调换第2个select中的username和password的顺序构造请求http://127.0.0.1/show.php?id=999 union select 1, password, username from user where user.id=1时候,原先显示文章内容的位置现在显示的是user表中id为1的password列内容。以此类推,可以猜解出user表中其他的username和password内容。

  3.防御方法
  防御SQL注入一般从两个方面着手:一是对服务器端进行安全设置,二是对客户端的输入进行严格验证。
  服务器端的安全设置:
  (1)关闭服务器的错误信息。攻击者可以从服务器返回的错误信息中得到很多有用的信息,包括服务器端的数据库类型、Web服务器类型、数据表的名称等。
  (2)对于使用PHP的服务器,设置magic_quotes_gpc为on。这一设置使得传递参数时自动过滤一些特殊字符,给攻击者的注入行为制造一些麻烦。
  (3)不要使用默认的管理员账号连接数据库。默认的数据库管理员账号,如MySQL的root账号和MSSQL的SA账号,都拥有系统权限,如果没有设置密码或者设置弱密码,易于被攻击者侵入并拿到系统权限。
  (4)根据实际情况,不同的数据库账号只分配满足需求的最小权限。
  (5)给数据库账号设置较强的密码,必要时定期更换密码。
  (6)及时更新系统补丁,避免攻击者利用系统漏洞进行攻击。

  客户端的输入验证:
  (1)验证客户端输入的类型。例如对于要求是整形的客户端输入,在PHP程序中可以先用intval()函数处理,然后再提交执行。在上文演示的服务端程序中,将SQL查询语句改为:mysql_query("SELECT * FROM article WHERE id=".intval($id)."");这样就将客户端输入先转换为整型,然后再提交给SQL语句执行,这提高了整个程序的安全系数。
  (2)过滤敏感数据。敏感数据主要是与SQL语句相关的字符和字符串,如“’”,“;”,“=”,“<”,“>”,“and”,“or”,“union”,“select”,“insert”,“delete”,“update”等,同时也包括这些字符和字符串的十进制和十六进制形式。服务端程序先对接收到的客户端输入进行验证,只有通过验证全部合法的输入数据才提交给SQL语句执行。
  跨站脚本XSS
  1.原理
  跨站脚本攻击(简称XSS)通过在Web页面中插入恶意脚本,当访问者浏览该页面时,恶意脚本就在访问者的浏览器中偷偷运行,执行特定的任务或者窃取访问者的隐私信息并向第三方站点发送这些信息。
  XSS可分为持久型(Persistent)和反射型(Reflective)两种类型。
  持久型XSS因其会影响到Web服务器自身的安全而危害较大。攻击者通过XSS将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临被攻击的可能,其中包括了Web服务器的管理员。
  反射型XSS一般存在于URL中,它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,URL中的恶意代码被HTML解析、执行。它的特点是非持久化、用户必须点击带有特定参数的链接才能引发但数量多。
  攻击者利用XSS可以达到以下目的:
  (1)盗取用户cookie。攻击者通过XSS可以窃取cookie,并发送给第三方页面,进而仿冒用户身份,造成用户隐私信息的泄露。
  (2)嵌入恶意构造的脚本或页面。攻击者通过XSS可以嵌入恶意脚本或仿冒页面,执行特定的任务(如传播AJAX蠕虫)或者进行钓鱼攻击。
  (3)结合客户端浏览器漏洞挂马。攻击者通过XSS,根据客户端所使用的浏览器,执行特定的恶意脚本,利用浏览器漏洞进行挂马。

  2.实例
  某银行的官方网站曾被曝存在XSS漏洞(目前银行网站的XSS漏洞都已修复),存在漏洞的页面地址是http://www.****.com.cn/news/hotspot.jsp。由于该页面没有对提交的数据进行验证或过滤就直接返回到页面上,导致漏洞的产生。例如,攻击者通过构造类似http://www.****.com.cn/news/hotspot.jsp?column=<iframe src=http://www.baidu.com>这样的URL请求就可以在该页面中插入百度的页面。
  攻击者可以构造恶意脚本实现窃取用户个人信息或网页挂马。

  3.防御方法
  XSS本质上是Web应用服务的漏洞,因此主要的防御方法是在Web应用程序中消除XSS漏洞,具体如下:
  (1)检验用户输入。Web应用程序在接收到用户提交的数据时,先对数据类型进行验证,如整形,日期型等,只有验证通过之后才继续执行。
  (2)特殊字符进行过滤和替换。对用户输入和输出中的一些特殊字符进行统一的编码,以达到过滤特殊字符的目的。PHP和ASP都有自带的函数可对特殊字符进行编码,如PHP中的htmlspecialchars()函数和ASP中的HTMLEncode()函数。
  (3)认证cookie设置HttpOnly属性。Web服务端可以设置如下的Http头信息将cookie的属性设为HttpOnly:Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:45:20 GMT; HttpOnly。带有HttpOnly属性的cookie对于document来说是不可见的,使得XSS攻击者不能再利用document.cookie窃取cookie信息,大大提升了Web应用的安全性。HttpOnly在IE6以上版本和Firefox较新版本中都得到了比较好的支持。
  值得一提的是,Web应用服务端为防御XSS所作的基于特征字符串的过滤并不是万能的,XSS攻击者可以有多种方法绕过服务端的检测。下面列举几种常见的方法:
  (1)在特征字符串中间增加一个或多个tab符:
  <BGSOUND SRC="jav ascript:alert('XSS');">
  (2)在特征字符串中间增加一个或多个换行符:
  <BGSOUND SRC="jav
  ascript:alert('XSS');">
  (3)用注释符分割特征字符串:
  <img style="xss:expr/*XSS*/ession([code])">
  (4)对特征字符串进行编码:
  <BGSOUND SRC=&#x6A&#x61&#x76&#x61& #x73&#x63&#x72&#x69&#x70&#x74 &#x3A&#x61&#x6C&#x65&#x72&#x74 &#x28&#x27&#x58&#x53&#x53&#x27&#x29>
  (5)在特征字符串之间插入会被替换为空的字符串:
  {height:exp<SCRIPTression(***)}
  (6)利用css写XSS代码:
  <STYLE>@import'http://ha.ckers.org/xss.css';</STYLE>
  <DIV STYLE="width: expression(alert('XSS'));">
  类似的方法还有很多,可以参考http://ha.ckers.org/xss.html。

  总之,随着AJAX方式的Web应用的增多,XSS的攻击方式也变得更加多样化。XSS蠕虫就是XSS与AJAX技术结合之后的攻击方法。由于AJAX的特性,使得XSS蠕虫可以在用户不知情的情况下在后台偷偷运行,与服务器端进行交互,自我复制的功能使其具备像蠕虫病毒一样快速传播的特性。

  Web安全是一项系统性的工程,只有努力提高安全意识,采取技术防范,执行安全规范,才能确保各个环节的安全。


 Hazel丶瘾

ZxID:16550531

等级: 中将
举报 只看该作者 沙发   发表于: 2012-06-07 0
    谢谢分享,外链编辑一下

                             3Q

际遇之神

惩罚

恶意灌水时遇到巡视论坛的督查,被扣了DB5

« 返回列表
发帖 回复