您的位置:首页 > 移动开发

入门读物(2) – WEB应用程序的安全 (www.team509.com)

2005-06-24 13:19 417 查看
大家都知道,这年头进行一次成功的网络攻击是越来越难了,特别是我们在对客户作安全服务的时候要做渗透测试。舍得花钱让我们做安全服务的客户,手里都有大把的银子,什么firewall,IDS,IPS,管它有用没用,全给加上,我们曾经见过一个WEB server前加俩防火墙的例子。在这种情况下,很多的攻击手段都无法使用,特别是buffer overflow的手段几乎没有用武之地,现在管理员的安全水准也有较大的提高,靠几个扫描器扫扫就能骗钱的时代已经一去不复返了。

 
                         入门读物(2) – WEB应用程序的安全
 
                                                 wooshi@gmail.com
 
       大家都知道,这年头进行一次成功的网络攻击是越来越难了,特别是我们在对客户作安全服务的时候要做渗透测试。舍得花钱让我们做安全服务的客户,手里都有大把的银子,什么firewall,IDS,IPS,管它有用没用,全给加上,我们曾经见过一个WEB server前加俩防火墙的例子。在这种情况下,很多的攻击手段都无法使用,特别是buffer overflow的手段几乎没有用武之地,现在管理员的安全水准也有较大的提高,靠几个扫描器扫扫就能骗钱的时代已经一去不复返了。那么,现在而今眼目下,什么东西的安全是最有用与最可能出问题的,答案是WEB应用程序的安全性。这部分程序大多是客户自己开发的,客户自己程序员的素质与开发web server,web application server等大厂商的程序员的素质还是有很大差别的,而且客户在开发过程中对安全问题的测试往往很忽视,这会造成极大的安全问题。我们曾经对一些电子商务的网站做过安全评估,理论上这些涉及到网上交易的客户应该安全性做的很好吧,很遗憾,没有,这些网站无一例外的存在严重的web应用安全问题,这些问题严重到足足可以让这些网站倒掉。
那么,web 应用安全主要集中在哪些方面呢?一般而言,主要有以下问题:
(1)                      SQL injection,这个是目前的web 应用安全的最重点。SQL injection分为blind injection 与 根据错误的返回值的injection. 这两方面的内容在[1],[2],[3]中有很详细的论述,这里我就不罗嗦了。需要强调的是根据错误的返回值的injection往往比blind injection要有效得多,所以尽可能使用根据错误的返回值的injection。但blind injection有个优势,它有自动化的攻击工具,Absinthe,目前支持三种数据库,MsSQL,ORACLE与PostGreSQL,可以很方面的查出table name, column name与下载record。但还有些常用的数据库是不支持的,MS access与Mysql是由于功能实在太简单了,没办法作很多事情,但db2与informix没有加进去我就有点想不通了,我估计大概的原因是这两种database应用不广。MS access与Mysql的SQL injection的利用方法可以分别参看[4]和[5]。最后强调一点,数字类型的SQL Injection的应用要比字符类型的要广泛得多,就其原因,是因为字符类型的SQL Injection需要加入特殊字符’,这个目前很多网站是通过种种方法(IIS加上lockdown,apache加上mod_security)过滤掉了。
(2)                      Trust Client.过分的相信客户端会造成灾难性的后果。目前国内的很多电子商务网站是有很多这样的毛病,他们利用javascript写了很多的脚本放到客户的本地去执行,其实有恶意的攻击者可以很方面的跳过他这样设置的陷阱,只需要一个proxy,webproxy是一个干这活不错的工具。经常容易出问题的地方是前后应该相同的数值它从客户端读数次,我们这时候可以通过proxy改掉数据,使我们花少量的钱买好东西,呵呵。
(3)                      Directory Indexing,多发于UNIX主机,是由于对目录没有去掉可读权限所致,这个问题本来说可大可小,无非就是让用户看到一点目录下的所有文件罢了,但往往这些目录下有很多文件是不能让人看的,比如说源代码备份文件,打包文件等等。
(4)                      信息泄漏,主要指debug信息的泄漏,就是系统处理出现问题的时候的报错信息,攻击者可以利用这些信息得到一些版本信息与application server所用的模块。
(5)                      非WEB文件的获取。主要指打包文件(rar,tar.gz,tgz,etc),备份文件(.bak,~,etc),头文件(.inc,.asa,etc),这些文件中往往包含重要内容,有非常高的价值。我曾经不止一次的看见过把用户名与密码写在这些文件中。最重要的是往往可以通过这些文件看到源代码,为进一步的攻击做好准备。
(6)                      CSS攻击。在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,可以用来偷取cookie.详细内容可以参考[6]。
(7)                      反向的proxy。Web proxy servers往往是双向的,即允许内部访问外部,又允许外部访问内部,双向的proxy可能产生严重的后果,导致内部的重要文档流失,利用方法把它设为你的浏览器的proxy,再去尝试访问你知道的内部地址。当然也可以利用某些app scanner去自动完成这个工作。
(8)                      非法命令的执行。当系统调用某些外部程序来执行某些功能的时候,我们的机会就来了,如果你发现你的目标网站是shell script与perl的话,发生这种问题概率比较大,还有如果你发现你的目标网站使用ldap作某些功能的话,试试在合适的地方输入一些通配符,如”*”,说不定有意外的惊喜。
(9)                      用户的身份认证与密码找回的问题,很多网站为了防止暴力破解,往往会加上一个认证的小图片,但是doublelee证明了这种方法并不可靠,详见[7]。密码找回的问题往往非常弱智,无数次我看到答案是与问题一样的,还有一些非常容易暴力破解的问题,如生日,颜色,等等。
(10)                   与网站开发语言特征相关的问题。比如perl的%00的问题,c/c++的buffer overflow,asp,jsp等等相应的问题。
说了这么多,我们作为初学者现在需要的是一个很好的工具,能够把这上面说到的问题都能自动的测试那就非常好了,目前市场上比较好的两种针对web app 的商业扫描器,一为appscan,一为webinspect,appscan的好处是扫描速度非常快,而且它可以手动与自动相结合,就是说你可以先手动的登录网站,再切换到自动模式,就可以自动的分析登录后的这些页面与内容。Webinspect优势在于比较权威,内容很多,不过速度倒是很慢。还有第三种,appdetective , 速度也很快。我们上面所讨论的这些问题,这三种商业软件基本上都能做到自动化测试。当然还有大量的免费软件,如nikto,wikto等等,不过我使用的结果好像还是商用软件比较好用。
       好了,先说到这里。
参考:
 
[1] http://www.nextgenss.com/papers/advanced_sql_injection.pdf
[2] http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf
[3] http://www.spidynamics.com/whitepapers/Blind_SQLInjection.pdf
[4] http://seclists.org/lists/pen-test/2003/May/0074.html
[5] http://www.nextgenss.com/papers/HackproofingMySQL.pdf
[6] http://www-128.ibm.com/developerworks/cn/security/s-csscript/index.html
[7] http://63.223.72.218/modules.php?name=News&file=article&sid=9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息