安全测试项梳理及指导安全测试项梳理及指导

 

1.   安全测试在做什么?

扫描?在很多人的眼中,做安全的就是整天拿个工具在哪里做扫描操作,使用各种不同的工具做扫描。是的,扫描是安全测试的很重要的一部分,扫描可以快速有效的发现问题。扫描工具的易用性、方便性决定了重要地位。但是扫描工具的局限性、程序的不够灵活等缺点也是显而易见的。不管是扫描报告的分析、漏洞的深度挖掘、测试的组织等等的工作都离不开安全测试人员,所以只能说扫描工具减轻了测试人员的工作量,是安全测试的一种手段。

2.   安全测试者是怎样定位自己的?

我们经常可以从身边的朋友口中听到一些有关安全的名称,向什么软件安全、信息安全、网络安全、计算机安全等一些词组,这些领域都是做安全的,那么我们是属于哪一个呢?

大家可以上百度百科查看下这些词组的概念。软件安全往小了说就是某一个软件产品,说大了除了硬件就是软件了啊。信息安全看名字我们就知道关键是信息两个字,但是什么是信息呢,客户的数据还是一切有用的数据?网络安全,什么是网络,网络系统硬件、软件这都是写模糊的可大可小的概念。在看计算机安全,PC?服务器?路由器?好吧我们可以看到这些概念往大了说就成了组成我们今天互联网的各种设备包括各种的嵌入式机器、外接USB、蓝牙等设备的共同体的硬软件,以及使用、维护、管理等这些东西的人的整个的安全问题。在看他们的区别,他们已不同的地方作为其主要关注点,或者说出发点,他们并没有明显的界线却有着自己的侧重点。而我们的侧重点是什么呢,我们产品是一个什么样的产品呢?我们有WEB服务、接口服务、文件服务、视屏等服务等我们把它们统一称为我们的系统,那么我们就是在做这个系统的安全测试,所以我觉得我们应该定位为系统安全测试。

当然我们的系统运行中也涉及到人、涉及到硬件,此处都不是我们的关注点,我们只从软件技术的角度来识别它。那么,系统安全测试就成了区别于功能测试,和性能测试一样,单独列出来的专项测试了。

3.   安全的本质是什么?

信任、人性(网络安全的最大漏洞是人)、止损、攻防

以上是当前网上一些主要的论点,以信任或者不信任作为本质出发点的还是占据主流的。

4.   概念定义

敏感数据:

敏感数据的具体范围取决于产品具体的应用场景,产品应根据风险进行分析和判断。典型的敏感数据包括口令、银行帐号、大批量个人数据、用户通信内容和密钥等。

个人数据:

指直接通过该数据或者结合该数据与其他的信息,可以识别出自然人的信息。

匿名化:

指对个人数据进行的更改(例如单向散列、截短、替换等,如需保留个人数据真实值与替换值之间的对应关系,可以使用对称加密或映射表方式,但密钥/映射表必须由数据所有者控制),使原来有关个人的信息不再能归属到一个可识别的自然人,或推理这种归属需要耗费过多、不相称的时间、费用和精力

 

5.   我们应该如何去着手

如何着手去做这个系统安全测试呢?作为一个测试人员要保证系统整体的安全,这就需要有一个整体的结构的框架,就像盖房子一样,先造钢筋混凝土框架,然后砖块去填充它。这里的钢筋混凝土框架就是安全特性方向,其实就是从整体方向上的一个划分,可以有如下简单的划分。

5.1.  测试的特性

   安全特性:操作系统安全、数据库安全、WEB安全、软件的发布和安装安全、协议与接口攻防、敏感数据保护、手机端安全、静态代码分析。

5.1.1.   操作系统安全

操作系统安全我们可以把它分为以下几块:

系统漏洞(操作系统补丁)、系统配置(安全加固)

业界权威工具Nessus,其他如retina、绿盟、天镜等。开源的工具可以使用OpenVAS。

5.1.2.   数据库

数据库安全我们可以把它分为以下几块:

数据库漏洞(补丁)、数据库配置(安全加固)

工具可以使用Ngs

5.1.3.   web安全

数据库安全我们可以把它分为以下几块:

身份验证、验证码、会话管理、权限管理、敏感信息传输、安全审计、信息泄露、输入校验、输出编码、上传下载、异常处理、注释代码等

容器的安全(tomcat)

应用软件安全(nginx、负载均衡软件、jquery等)

扫描工:appScan、awvs

5.1.4.   软件的发布与安装安全

发布件的完整性校验(签名、哈希)

防病毒:需要安装的软件需要经过常用的杀毒软件(如360、卡巴斯基、金山毒霸等)的扫描,保证没有病毒特种码,以免被杀软处理掉。

5.1.5.   协议与接口攻防

业务交互数据在网络中使用的协议安全性测试

协议测试工具:codenomical

对外开放的端口:系统对外开放的端口必须是必须的,禁止开放无用端口

端口扫描工具:Nmap,近端可以直接在服务器上使用命令查看

接口:接口接受的数据需要做严格的处理

接口数据严格校验测试

5.1.6.   敏感数据保护

识别敏感数据:密码、秘钥、会话标识;个人信息、商业机密、客户信息等

保护:加密、存储位置、传输方式;获取数据脱敏、匿名化

5.1.7.   手机端安全

1、app的签名、反逆向

2、用户隐私

3、文件权限

4、网络通讯

5、运行时解释保护

6、组件权限保护

7、升级

8、3rd库

 

移动APP测试要点:http://blog.nsfocus.net/mobile-app-security-security-test/

5.1.8.   静态代码分析(纯白盒)

白盒测试主要是通过对代码的浏览来发现问题,当然问题的类型可能是跟我们黑灰盒总结的一致,拿出来单独讲是因为其不同于其他的测试方式。

1、危险函数、方法

2、工具检测

3、逻辑漏洞

 

灰盒

结合白盒和黑盒的一些思路,在实际的代码审计中建议采用灰盒的方式,在需要的地方对代码进行动态调试查看。审计中思路可以考虑如下这些部分:

1、涉及敏感数据的时候,检查是get、post哪种形式发送数据

Get传输的数据会被记录在代理、浏览器、web容器tomcat等的日志中

2、提交铭感数据的时候是否有防止csrf的token、refer、验证码等

3、sql注入

                   1)Statement和preparestatement

                   2)mybitas框架 #和$

4、XSS

我们用的antisamy只能过滤基于标签的XSS伪造,其他的无法过滤,需要做二次过滤

5、逻辑

此处是指,逻辑思路不合理,不符合安全的一些思想,如权限最小化等等

6、参数范围是否造成dos或者影响系统性能

7、权限校验、越权

         1)横、纵、多步骤关联性

         2)

8、session会话管理

         1)常规cookie及session形式

         2)把token作为session的形式,特别注入登录用户和token的绑定关系

9、参数是否是简单形式,是否可以造成遍历

10、代码中使用的第三方插件、开源软件是否是最新、是否有安全漏洞

11、代码中所使用的加密算法,是否是安全的

12、跳转中的redirect形式中不要带敏感信息,会被发回客户端重新请求的,相当于把这些参数放在了get请求中

13、SSRF服务端请求伪造,注意url中含有另外一个url的请求

         1)源码中使用urlconnection 支持的协议除了http和https以外,还有file、ftp、jar、mailto等

         request、httpurlconnecttion、httpClient、URL等发起网络请求

14、加密算法的使用,是否使用的是不合场景的弱算法

 

15、数据插入自增Id攻击

         数据传入过来做插入动作,并且使用spring自动绑定对象方法获取数据,之后使用生成的插入sql

    此时自动增长id不要写到更新语句中,如果写入可能造成恶意注入integer范围最大值2147483647,使功能不可用dos

16、Spring自动绑定参数,参数扩展攻击

    后台使用的对象参数自动绑定获取,相应的sql使用了自动的if是否为null和为空的判断条件,前台可以根据猜测

         注入队形的相应的属性实现非预料结果

5.2.  WEB安全测试

5.2.1.   身份验证

为防止密码破解和猜测:

复杂度要求,必须由大写、小写、数字等组成;

时效性要求,建议用户3个月更改一次口令;

密码长度要求,最小8位,最大?位;

管理员重置密码后密码必须在下次登录更改;

强度要求,不能跟原密码一致,不能与用户名相似(如,不能包含用户名正写反写大小写等),

(最新也有说法不建议频繁修改http://www.secdoctor.cn/html/sec/35995.html)

口令认证必须在服务端进行。

必须要有验证码机制。

登录锁定,登录需要有锁定机制即就是多次登录失败后锁定账号或者ip,在一段时间后自动解锁。

手机验证码轰炸

手机验证码超时机制

账户枚举测试

 

弱密码概念:https://help.aliyun.com/knowledge_detail/37509.html?spm=5176.7837442.2.5.ZotsLv

5.2.2.   验证码(普通验证码、知识验证码、无需思考的滑动验证码)

验证码字符生成算法的安全随机数

验证码字符不能被验证码识别工具识别

验证码必须是一次性的

验证码超时(验证码有效期的意义:1、增加图片处理识别的难度;2、验证码没有有效期的话导致服务器验证码堆积)

在忘记密码处做安全问答测试

 

 

 

建议的验证码形式:

当前的最流行的滑动块验证码,有点用户无需动脑,不会打断用户的思考。

(验证码的前世今生:http://www.freebuf.com/articles/web/102276.html

 

5.2.3.   会话管理

登录前后会话标示要有变化

安全退出会话标示注销

会话标示安全随机

会话标示的长度适度

会话超时机制

会话标识的传输和存储

会话标识夸PC访问

5.2.4.   权限管理

通过灰化(隐藏)使功能失效

纵向越权

横向越权

权限分离

(系统管理、安全管理、审计管理

系统管理员主要负责用户管理和系统日常运作相关的维护工作;

安全管理员负责安全策略的配置和系统资源安全属性的设定;

审计管理员则对系统审计信息进行管理)

参看《关于越权》

 

5.2.5.   敏感信息传输及存储

敏感信息不能以get方式提交

传输通道使用https(关键数据提交服务端不接收http明文数据)

严格安全传输HSTS(确保从浏览器发出的请求就是https的)

在url中有session

对用户保密的信息不能传输到客户端

含有敏感信息的页面需要设置不缓存

5.2.6.   安全审计

登录、退出、操作等都要有日志

日志格式标准(时间、谁、做了什么操作、结果怎样)

日志访问的限制

日志中的敏感信息

 

他们是如何迭代的?日志是否保存足够长的时间?

日志是如何被审查的?管理员能否通过审查出发现攻击行为?

日志备份如何保存?

日志记录数据前是否进行验证(最小最大长度,字符等)?

5.2.7.   信息泄露

数据库版本泄露

容器版本泄露

绝对路径泄露

异常信息泄露

泄露服务器路径

泄露容器版本

泄露程序详细堆栈信息

源代码泄露

检测Web网络是否存在源代码泄露漏洞,如果存在此漏洞,攻击者可直接下载网站的源代码。

管理地址泄露

网站管理地址属于内部使用的信息,公开增加了安全风险。

Bak信息泄露

搜索引擎发现和侦察信息泄露(暂时不涉及)

服务器指纹探测(使用指纹探测工具whatweb需要在linux上编译运行,httprint--最新的signatures.txt不然识别到不准确)

 

 

【其他关注项:】

枚举web服务器上存在的应用程序

Whois信息收集

识别Web应用框架

Owasp测试指南4中文:https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/zh/web_application_security_testing/review_webserver_metafiles_for_information_leakage_otg-info-003.html

拖库撞库http://blog.nsfocus.net/information-leakage-thinking-library-collision/

5.2.8.   输入校验

前台后台都必须校验(“移除已知的恶意数据”不如移除“良好数据之外的所有数据”)

5.2.8.1.            XSS(跨站点脚本攻击)

XSS-1反射型跨站点脚本编制

XSS-2存储型跨站点脚本编制(http://xxxxx0000sssss.lofter.com/post/14b1dc_50023e

XSS-3 DOM型跨站点脚本编制

dom xss并不复杂,他也属于反射型xss的一种,domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM,所以在道哥的《白帽子讲Web安全里》也有详细介绍。dom - xss是通过url传入参数去控制触发的。

HPP(HTTP参数污染[同名参数]http://blog.csdn.net/eatmilkboy/article/details/6761407

漏洞危害:

1、钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。

2、网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。

3、身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。

4、盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。

5、垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。

6、劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。

7、XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。

参考:

https://help.aliyun.com/knowledge_detail/37444.html?spm=5176.7837442.2.11.F8ceHg

http://blog.csdn.net/change518/article/details/51024706 隐藏域XSS(借助accesskey属性)

5.2.8.2.            SQL注入

(1、java预处理preparestatement;2、正则表达式过滤参数;3、严格字符串过滤;4、参数化的sql)

例子:参数date=if(now()=sysdate(),sleep(0),0)/*'XOR(if(now()=sysdate(),sleep(0),0))OR'"XOR(if(now()=sysdate(),sleep(0),0))OR"*/

Sql语句中的/斜杠:表示执行,把之前时间内的缓存中的语句再执行一遍

       \斜杠:表示语句未完换行

   单行注释:--

   多行注释:/* */

   If(now()=sysdate(),sleep(2),0)表示如果now()=sysdate(),为真执行sleep(2),否则执行0

当前形势下,新开发的网站,大部分采用新框架都已经可以预防sql注入了,只有手动拼接的sql语句易被sql注入。

生成注入用例时注意:

1)’ 单引号闭合

2)‘OR 单引号也可以有结束开始下一元素的效果

3)-- - 注释后面跟空格实现注释不跟后面语句连接,后面实际被注释掉效果

4)Select CONCAT_WS(0x3A, USER, PASSWORD) FROM mysql.user 获取数据库用户

5)union all 连接两个select查询结果,合union的区别不去重复;两个select查询的字段一样

6)insert into mysql.user(Host,User,Password) values("%","Sectest",password("111111")) 给数据库添加用户 %:远程用户,localhost:本地用户

 

系统使用了MyBatis动态SQL框架组装sql,注意配置文件中的$和#的使用,使用$可能导致sql注入

拼接后的语句再放入预编译对象是徒劳的,因为在预编译之前拼接的SQL语句执行逻辑已经被破坏,原 SQL语句的本意已经被改变了。

台服务器要彼此访问,同时此访问服务不需要提供给互联网,我们就可以把业务单独配置到内域,如果业务是提供给互联网的,那么配置到外域或者内域和外域。

 

posted @ 2019-08-04 22:30  Sylon  阅读(637)  评论(0编辑  收藏  举报
Live2D