做安全测试的时候,首先请把白盒测试和黑盒测试遗忘掉,因为大部分安全测试是基于白盒测试和白盒测试与黑盒测试之间的灰盒测试。Web安全测试与其他测试一样,应该贯穿于软件开发始终。下面以电子商务系统来进行介绍。
电子商务系统参见附录A。
在需求阶段,需要做如下工作。
•根据产品类型评价安全性级别。
•确定各功能的安全性优先等级。
•分析可能存在何种安全性问题。
根据《XXX公司安全界别评定规则》,电子商务网站属于II级。
根据讨论,电子商务各大模块的安全优先级如下。
•第1级。支付模块。
•第2级。用户模块。
•第3级。订单模块。
•第4级。收货地址模块。
•第5级。商品、售后和购物车模块。
根据讨论,电子商务产品可能存在以下安全漏洞。
•XSS注入。
•CSRF注入。
•点击劫持。
•HTML5安全。
•安全响应头。
•SQL注入。
•XML代码注入。
•JSON注入。
•参数污染。
•XPath注入。
•信息探测。
•文件上传。
•命令行漏洞。
•XXE漏洞。
•文件包含漏洞。
•逻辑漏洞。
•加密与认证。
•DDOS攻击。
•URL跳转和钓鱼。
•拖库。
•暴力破解。
•提权。
•ARP欺骗。
采用Spring MVC开发框架、Tomcat WebServices、Oracle11g数据库、Ubuntu Linux操作系统。对于每种安全漏洞,采取如表4-14所示进行防御措施。
表4-14 对于每种安全漏洞采取的措施
安全漏洞 | 采取措施 |
---|---|
XSS注入 | •采用OWASP ESAPI Encode对输出数据进行编码。•Tomcat为Cookie设置HttpOnly属性。•加入Content-Security-Policy头。•加入X-XSS-Protection:1; mode=block头。•使用AngularJS 模块。•后台加Filter。 |
CSRF | •使用csrftoken防止CSRF•保证上一页与当前页同源•登录、注册采用验证码•删除操作进行二次确认 |
点击劫持 | •每一个请求加入HTTP头X-Frame-Options:SAMEORGIN |
HTML5安全 | •使用安全的iframe•所有具有target="_blank"属性的a标签都加入rel="noopener noreferrer"属性•访问本地地理位置需要得到用户认可•尽可能复杂的验证码•不适用HTML5本地存储机制 |
SQL注入 | •使用encodeForSQL函数•使用预编译•对关键操作使用表白名单进行过滤•自定义拦截器 |
XML代码注入 | •禁止操作XML |
JSON注入 | •禁止操作JSON |
参数污染 | •检查URL格式是否存在多同名参数 |
XPath注入 | •查询XML使用encodeForXPATH()函数 |
信息探测 | •做好服务器安全措施 |
文件上传 | •在客户端与服务器端都做好上传文件格式验证工作•后端通过通过MINE验证 |
命令行漏洞 | •不使用系统执行命令 |
XXE漏洞 | •禁止使用外部实体对XML进行解析操作 |
文件包含漏洞 | •做好关键文件权限管理•不使用动态包含•对包含文件使用白名单过滤 |
逻辑漏洞 | •做好水平越权验证•做好垂直越权验证•根据业务做好具体设计 |
加密与认证 | •采用HTTPS协议,做好传输层安全•用户名不得低于5位。密码不得低于8位,且必须包含数字和字母(至少一位大写)•采用SM2加密算法•数据存储采用SHA256+盐存储•使用安全的认证防护措施•使用安全的会话管理 |
DDOS攻击 | •采用验证码•一天不得注册五个账号•登录连续五次失败关闭两小时•提交反馈意见一天内不得超过20次•每天上传商品不超过20样•上传商品图片,一个商品最多五张 |
URL跳转和钓鱼 | •通过request获取之前的页面路径:Request.getHeader("Referer")•使用重定向和转发,则不要确定目标时涉及到用户参数•监控响应代码,在不应该出现3XX错误的地方出现,提出告警 |
拖库 | •防止SQL注入•做好Oracle系统安全设置(DBA负责)•对于超级管理员信息采用I级存储方案,卖方账户信息II级存储方案,其他用户•采取三级存储方案。•每三个月要求超级管理员和卖方修改密码,超级管理员密码不得与过去五次相同,卖方账户密码不得与过去三次相同。普通按需用户修改密码,密码不得与上次重复。•数据库服务器安装防病毒软件和防火墙,对网站漏洞检测、网站挂马、网站篡改进行有效的实时监控。 |
暴力破解 | •采用验证码•修改密码前,登录后需要进行手机短信或者Email二次确认•不允许同名、同Email、同手机号的用户注册 |
旁注攻击 | •采用独立的应用服务器和数据库服务器 |
提权 | •对服务器定期杀毒•对服务器及时升级•每两个月更新修改Linux root用户登录密码,MySQL root密码 |
ARP欺骗 | •IP与MAC静态绑定•采用Anti ARP Sniffer |
WAF | •使用启明星辰WAF |
开发期间进行如下工作,确保产品安全。
•开发前期建立安全代码检查表。
•开发完毕使用下列工具进行安全代码检测。(注意工具的误报)
ØCheckmarx CxSuite。
ØFortify SCA(Source Code Analysis)。
ØArmorize CodeSecure。
•定时根据安全代码检查表进行定期的Code Review。
测试阶段先使用Burp Suite和AWVS扫描检测系统中是否存在安全漏洞,为了防止误报,建议二者结合使用,以一个为主,另一个工具为辅。然后基于手工方法进行安全测试,特别是一些逻辑安全漏洞。