chenyb85 2008-2-20 16:50
[总结]软件安全测试涉及的一些方面
本人刚开始做软件安全测试,以下是本人的一些总结。这些方面是比较基本的。希望大虾们补充。谢谢!:loveliness:
[size=6][color=red][b]注:以下只是涉及WEB安全测试的一些方面,并不全,且不涉及网络安全和服务器安全方面的测试。[/b][/color][/size]
[align=center][align=center][color=#000000][b][font=宋体][size=16pt]软件安全测试涉及的方面[/size][/font][/b][b][size=16pt][/size][/b][/color][/align][/align][b][font=Times New Roman][color=#000000] [/color][/font][/b]
[b][font=Times New Roman][color=#000000]1.
[/color][/font][/b][b][color=#000000][font=宋体]输入的数据没有进行有效的控制和验证[/font][/color][/b]
[font=宋体][color=#000000]包括:[/color][/font]
[color=#000000][font=Wingdings]l
[/font][font=宋体]数据类型(字符串,整型,实数,等)[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]允许的字符集[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]最小和最大的长度[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]是否允许空输入[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]参数是否是必须的[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]重复是否允许[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]数值范围[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]特定的值(枚举型)[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]特定的模式(正则表达式)[/font][/color]
[font=宋体][color=#000000]([b]注[/b]:建议尽量采用白名单)[/color][/font]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]2.
[/color][/font][/b][b][color=#000000][font=宋体]用户名和密码[/font][/color][/b]
[color=#000000][font=Wingdings]l
[/font][font=宋体]是否设置密码最小长度[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]用户名和密码中是否可以有空格或回车?[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]是否允许密码和用户名一致[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]防恶意注册:可否用自动填表工具自动注册用户?[/font][font=Times New Roman] [/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]遗忘密码处理[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]有无缺省的超级用户[/font][font=Times New Roman]?[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]有无超级密码[/font][font=Times New Roman]?[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]是否有校验码?[/font][/color]
[color=#000000][font=Wingdings]l
[/font][font=宋体]密码错误次数有无限制?[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]3.
[/color][/font][/b][b][color=#000000][font=宋体]直接输入需要权限的网页地址可以访问[/font][/color][/b]
[font=宋体][color=#000000]如:没有登录或注销登录后,直接输入登录后才能查看的页面的网址,能直接打开页面;[/color][/font]
[color=#000000][font=Times New Roman] [/font][font=宋体]注销后,点浏览器上的后退,可以进行操作。[/font][/color]
[font=宋体][color=#000000]正常登录后,直接输入自己没有权限查看的页面的网址,可以打开页面。[/color][/font]
[b][font=Times New Roman][color=#000000] [/color][/font][/b]
[b][font=Times New Roman][color=#000000]4.
[/color][/font][/b][color=#000000][b][font=宋体]认证和会话数据作为[/font][font=Times New Roman]GET[/font][/b][b][font=宋体]的一部分来发送[/font][/b][/color]
[color=#000000][font=宋体]认证和会话数据不应该作为[/font][font=Times New Roman]GET[/font][font=宋体]的一部分来发送,应该使用[/font][font=Times New Roman]POST[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]5.
[/color][/font][/b][color=#000000][b][font=宋体]隐藏域与[/font][font=Times New Roman]CGI[/font][/b][b][font=宋体]参数[/font][/b][/color]
[font=宋体][color=#000000]分析:有此隐藏域中泄露了重要的信息,有时还可以暴露程序原代码。[/color][/font]
[color=#000000][font=Times New Roman] [/font][font=宋体]直接修改[/font][font=Times New Roman]CGI[/font][font=宋体]参数,就能绕过客户端的验证了。[/font][/color]
[color=#000000][font=宋体]如:[/font][font=Times New Roman]<input type="hidden" name="h" value="http://XXX/checkout.php">[/font][/color]
[color=#000000][font=宋体]只要改变[/font][font=Times New Roman]value[/font][font=宋体]的值就可能会把程序的原代码显示出来。[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]6.
[/color][/font][/b][b][color=#000000][font=宋体]上传文件没有限制[/font][/color][/b]
[font=宋体][color=#000000]分析:上传文件最好要有格式的限制;[/color][/font]
[color=#000000][font=Times New Roman] [/font][font=宋体]上传文件还要有大小的限制。[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]7.
[/color][/font][/b][b][color=#000000][font=宋体]把数据验证寄希望于客户端的验证[/font][/color][/b]
[font=宋体][color=#000000]分析:客户端是不安全,重要的运算和算法不要在客户端运行。[/color][/font]
[color=#000000][font=Times New Roman] [/font][font=宋体]重要的数据(如:密码)在客户端应该加密。[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[color=#000000][b][font=宋体]例:[/font][/b][font=宋体]保存网页并对网页进行修改,使其绕过客户端的验证。(如只能选择的下拉框,对输入数据有特殊要求的文本框)[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]8.
[/color][/font][/b][color=#000000][b][font=宋体]跨站脚本([/font][font=Times New Roman]XSS[/font][/b][b][font=宋体])[/font][/b][/color]
[color=#000000][font=宋体]分析:攻击者使用跨站脚本来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料[/font][font=Times New Roman] [/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[color=#000000][font=Times New Roman] [/font][font=宋体]测试方法:[/font][/color]
[color=#000000][font=Times New Roman]HTML[/font][font=宋体]标签:[/font][font=Times New Roman]<[/font][font=宋体]…[/font][font=Times New Roman]>[/font][font=宋体]…[/font][font=Times New Roman]</[/font][font=宋体]…[/font][font=Times New Roman]> [/font][/color]
[color=#000000][font=Times New Roman] [/font][font=宋体]转义字符:[/font][font=Times New Roman]&(&)[/font][font=宋体];[/font][font=Times New Roman]<(<)[/font][font=宋体];[/font][font=Times New Roman]>(>)[/font][font=宋体];[/font][font=Times New Roman] ([/font][font=宋体]空格[/font][font=Times New Roman]) [/font][font=宋体];[/font][/color]
[color=#000000][font=Times New Roman] [/font][font=宋体]脚本语言:[/font][/color]
[color=#000000][font=Times New Roman]
<script language=‘javascript’>[/font][/color]
[color=#000000][font=Times New Roman]
…Alert(‘’)[/font][/color]
[color=#000000][font=Times New Roman]
</script>[/font][/color]
[color=#000000][font=Times New Roman] [/font][font=宋体]特殊字符:‘[/font][font=Times New Roman] [/font][font=宋体]’[/font][font=Times New Roman] <
>
/[/font][/color]
[color=#000000][font=Times New Roman] [/font][font=宋体]最小和最大的长度[/font][/color]
[color=#000000][font=Times New Roman]
[/font][font=宋体]是否允许空输入[/font][/color]
[color=#000000][font=Times New Roman] [/font][b][font=宋体]例[/font][/b][font=宋体]:对[/font][font=Times New Roman]Grid[/font][font=宋体]、[/font][font=Times New Roman]Label[/font][font=宋体]、[/font][font=Times New Roman]Tree view[/font][font=宋体]类的输入框未作验证,输入的内容会按照[/font][font=Times New Roman]html[/font][font=宋体]语法解析出来[/font][/color]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]9.
[/color][/font][/b][color=#000000][b][font=宋体]注入式漏洞([/font][font=Times New Roman]SQL[/font][/b][b][font=宋体]注入)[/font][/b][/color]
[font=宋体][color=#000000]分析:用户登录处、不用登录可以查看到的数据库中的数据列表尤为重要。[/color][/font]
[font=Times New Roman][color=#000000] [/color][/font]
[font=Times New Roman][color=#000000] [/color][/font]
[b][font=Times New Roman][color=#000000]10.
[/color][/font][/b][b][color=#000000][font=宋体]不恰当的异常处理[/font][/color][/b]
[font=宋体][color=#000000]分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞。[/color][/font]
[font=Times New Roman][color=#000000] [/color][/font]
chenyb85 2008-2-20 16:50
[接上]
11. 不安全的存储
在页面输入密码,页面不显示 “*****”;
数据库中存的密码没有经过加密;
地址栏中可以看到刚才填写的密码;
右键查看源文件就可以看见刚才输入的密码;
12. 不安全的配置管理
分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护
程序员应该作的: 配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。
例:数据库的帐号是不是默认为“sa”,密码(还有端口号)是不是直接写在配置文件里而没有进行加密。
13. 传输中的密码没有加密
分析:传输中的密码要进行加密。
传输前加密用SSL加密,https的方式提交用户名和密码;
如果使用tomcat做服务器的话,SSL加密只需配置就可以了:
TOMCAT用https替换http的方法
//////////////////////////////////////////////////////////////
首先用java的工具keytool 生成一个ssl证书:
keytool -genkey -keyalg RSA -alias youraliasname -keystore .keystore
输入keystore密码: yourpass
您的名字与姓氏是什么?
[Unknown]: liubin
您的组织单位名称是什么?
[Unknown]: test
您的组织名称是什么?
[Unknown]: [url]www.test.com[/url]
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的州或省份名称是什么?
[Unknown]: beijing
该单位的两字母国家代码是什么
[Unknown]: cn
CN=liubin, OU=test, O=www.test.com, L=beijing, ST=beijing, C=cn 正确吗?
[否]: y
输入<CidSoftKey>的主密码
(如果和 keystore 密码相同,按回车):
然后修改tomcat的conf下的server.xml文件,将注视掉的如下的内容的注释去掉:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="100" debug="0" scheme="https" secure="true"
useURIValidationHack="false" disableUploadTimeout="true">
<Factory
className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" clientAuth="false" protocol="TLS"
keystoreFile="D:\tomcat4.1\key\.keystore" keystorePass="tmypwd" />
</Connector>
然后重起tomcat之后就可以访问了,记得端口是8443
而且,是要用https,不是http
14. 弱密码,默认密码
分析:使用了太常见的用户名(如:admin、admin888等)和密码(如:123456、000000等);
注册的用户可以用很弱的密码;
默认的密码是固定的。
以上都是不安全的。
15. 缓冲区溢出
分析:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。
16. 拒绝服务
分析:攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。
ruanyongjie 2008-2-21 20:09
善于总结,谢谢分享,相互学习