当前位置:首页阅读

(讲座笔记)安全测试测试方法和测试工具

(讲座笔记)安全测试测试方法和测试工具

安全测试

(讲座笔记)安全测试测试方法和测试工具

优品软件培育计划百场前沿技术系列讲座直播的第六场邀请到的是全球著名手机厂商QA Leader田超,从Web安全检测、App安全检测、Server安全检测、API服务安全检测等方面带大家一起探讨高段位测试必备技能,帮助大家建立全面稳固的安全测试知识体系。现将整场讲座的内容整理如下,供大家继续学习使用。(文章末尾附有直播回放视频)

-正文-

首先跟大家聊一下,什么是安全?安全的定义是什么?我们什么时候需要安全?就像下图我们平时所用到的锁子,它可以保障物品的安全,这是一种物理的安全。锁子是机械加工制造而成的,它有它的制造原理,也有设计原理。锁子的核心就是锁簧,由几个弹子保证锁子的安全性。下面的gif动图是一个开锁工具的动态演示,知道了锁子的原理之后,就可以轻松的开锁。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

根据加工精度,珠子的数量决定了最大的钥匙的组合的可能性,互开率就是评价一个锁子安全与否的关键指标。如果说互开率是固定的,比如说10%的互开率,也就是说我只要试10把钥匙,总有两把钥匙是可以开同一把锁的,这个时候锁子是不太安全的。那么大家考虑下,如何做不改变锁子的设计原理的前提下,提高锁子的安全性?

在日常的生活中,一把锁子有设计、制造、销售和使用这些环节,从设计和制造工艺已经固定的情况下,最终可以解决的是要么我不安装不安全的锁子,要么就是我安装了还想安全,这时候就是这十分之二的可能性,不要把这个卖给我的邻居,邻居拿到钥匙就可以开到我家的锁。

所以答案就是,在实际的销售过程中,厂家会把同样的钥匙、同样的锁芯,卖到不同的地方,比如一把锁卖到陕西、一把锁卖到长春。跨地域之后,由于钥匙是物理钥匙,不可能经过快速的运输,快速找到这把锁。这样就可以保证,在生产制造和设计环节的安全性都没办法提高的情况下,还可以提高产品的安全性。

这是一个思路,希望通过这些小的案例给大家拓宽一些思路,我们在讲安全的时候,原理和密码的强度是固定的,如何使它相对安全,或者提高它的安全性?这也是我们在做安全测试的时候需要去思考的,毕竟每个公司的设计开发能力是有限的,但是做出的产品需要是安全的,就要从多个方面进行考虑。

刚才举的锁具的例子,它是一种物理的安全。在计算机领域,安全最多提到的是加密。

银行里面的安全,钱是要放到保险柜中用锁子锁起来,但是如果钱是放在我们的手机银行里,更多的是靠我们自己设置的密码以及银行对交易过程的数据加密,保障即使你看到加密的密码之后,你也没有办法去把它破解掉。

我们知道当银行卡丢失时,如果有人捡到你的银行卡,在ATM机上只有两次试错的机会,第三次输入错误,银行卡就会被锁定,这也是一种安全机制,它保障了我们使用的安全。

计算机里面的安全更多的是靠密码,加密算法以及密码的长度、复杂度这些手段来保障的。我们经常用电脑,作为计算机用户,大家都知道,密码设置的时候比较容易,但是要记住密码就比较难,为了记住密码,通常我们都会设置一些有规律的密码。什么是有规律的密码?

123456是一种规律、654321也是一种规律。如何设置一个复杂的密码?既方便自己记住,别人又很难猜到,这个就需要一些技巧。

这里再给大家举一个例子,有一部电视剧是张嘉译主演的,他把家里的无线密码改了,孩子的妈妈就没有办法连上无线了,问他密码是什么,他说了一首唐诗,这句首诗里每个字的首字母再加一个符号、数字,这时候密码的复杂度就足够高了,你必须知道这首诗和附加的特殊字符才能猜到这个密码。我们的密码安全首先要便于记忆,再就是要有足够的复杂度,第三个要有足够的长度。再就是我们说的明文密码在计算机里要经过加密,否则就是一张白纸,你设置得再复杂,别人也是一看就明白。

就像我们之前听说过的,CSDN的用户密码全部都是明文,导致整个网站的信誉度就会下降,我不确定我在里面写的任何内容是不是都保存的是明文?

密码的复杂度有了之后,也经不起现在大数据、云计算、GPU计算以及像MD5字典这种解密工具,密码更多的是一种策略,不能说绝对安全,只能是相对安全,并且有时间限制。

另外,别人想要获取密码首先是有获取利益的需求,当密码保护的数据和信息不足以产生很大价值的时候,密码的安全度要求是不高的。

第三个问题就是我们安全性的脆弱点是在哪里?

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

就像下面给大家放的这个图片,这是一个珠串,这个产品它本身就有一个脆弱点,就是总有一天它会断,但是从哪个珠子断我们都不确定。它可能是最容易摩擦到的地方,也有可能刚拿到手还没用就断了,它有设计的原因,也有使用的原因。所以产品的脆弱点在哪里我们无从得知,但是在做软件的时候,安全是需要我们一点点去分析,建立模型,最终保证这个产品的安全。

接下来我们再来一起来探讨安全在保护什么?

在早些时候,安全是被设计成一种叫做“加密狗”的产品,它的使用方法是这个加密狗需要放在服务器的USB接口上,里面运行的程序,每一次数据都会经过加密狗的加密、解密才能保证软件产品的运作。它保障了软件的著作权,我的设计专利不会因为你拷走了这个软件就能工作,你必须要买加密狗才能让这套软件工作起来。

第二个就是“文件加密”,文件加密通常是商业公司里面,我起草了一个方案,起草了一个销售的项目书、意向书,怎么保证它的安全?不只是我要给文档加一个打开的密码、修改的密码,更多的是从二进制的角度,直接对内容进行加密,需要用特定的软件才能打开。

第三种是我们在日常工作和上网浏览的过程中经常见到的——动态验证码。它主要保证服务提供商的安全。大家都知道,网络上像黄马甲、水军等这种工具比较多,可以批量发送一些请求或数据包,导致我的系统是给特定的人群提供正常服务的,但是这些正常服务会受到干扰,很多正常的服务没有办法得到满足,反倒给有特殊动机的人提供了一些牟利的手段。为了避免这种事情发生,动态验证码就是为了验证,在操作这个网站的人,他是一个活生生的人,还是一个机器?

最开始的验证码都是比较简单的,像最左边的数字形式。随着机器学习或者图片处理算法的实现,这种密码或者动态验证码已经不能保证网站的安全了。现在更多的是像中间这种,像这第二张,姚明和李宇春,让你找出这里面有多少个姚明,还有就是12306这种,让你找出来有多少个沙拉。再有一种像最右边这张,安全验证是需要你去滑动滑块,需要手动操作一下,它的精确度要求比较高,用自动化工具或者脚本是无法完成这些识别的。这些都是为了保障服务商的安全。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

倒数第二个图,这个属于特定领域的验证码,它也是一种安全,它限制了什么?你能看懂个这个数学公式,能算对这个值的人,至少是大学里面学过数学的,它保障了我这个网站的受众的一个知识储备,这也是一种安全。

下面给大家举了一个例子,这个例子相当于家里的路由器,路由器有一个功能,如果插上U盘,我可以把路由器当前的配置信息,也就是说我维护的无线密码,加载的一些网关,每个网络网口做什么样的服务,这些信息都可以备份下来。备份下来之后的内容就是这张图下半的部分,它是加密的。我们是看不懂这样的文字的,但是网上有一种工具可以帮你把它解密。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

原理是什么呢?我拿出了这段Python代码,核心用到的就是我们学计算机语言的时候两个运算,第一个叫“模”,另一个叫“余”,其实“模”和“余”是一回事,“模”是我除完之后取“余”,对0到127这些ASCII码字符进行模余操作,把它转换到同等的空间里去,实现字符的转换。比如说M固定会转换成~、G换成Q......对于普通大众用户来说,它已经足够安全,但是对于网络上有心去做这个的人,这个就是不安全的。在普通人眼中已经很安全了,但是在特定的从业人员眼中是没有安全性的。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

接下来给大家介绍两个加密的方式,一个是Decode,我们平时从原文到密文的过程就叫Decode,它可以用很多算法,比如像这种模余的算法等等。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

也可以用Hash的方法,用Hash碰撞的方式,生成Hash串,就完全随机了,这都是保证信息安全的方法。

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

这个信息载体所表达的内容一般人是看不懂的,必须要有一定专业基础的人才可以看懂。我们作为安全从业人员,就需要去理解这些字符串的用途是什么?是怎么样生成的?他是什么样的安全等级?就像我们生活中传统的A\B\C三种类别的锁,A级锁能15秒破解,B级锁2分钟,C级锁40分钟,我们要知道文件的加密方式它能保证多长时间能被破解掉?是1秒还是100秒?还是说得需要10年的时间才能被破解掉?

01 安全测试的概念

安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。它一般是在产品开发基本完成到发布阶段才会去做的一件事情,这是一个普遍现象,但其实安全应该提前到更早,在设计阶段就应该把安全考虑进去,在设计的时候就验证产品的安全等级是什么样子,在最终实现的过程中再去一步步检验安全是不是达到了设计的标准。

另外,安全测试属于产品的安全需求定义书里定义的内容,也符合行业的质量标准,属于非功能需求的检验范畴,有时候我们的需求文档里可能都不体现安全,只说系统需要具备安全性,至于安全性是什么水平不明说,遵循什么样的国际标准或者国家标准也不明说,这个就需要我们安全从业人员去推广,或者通过培训,让公司、团队有安全意识。慢慢把这部分内容补充进去,才有的检验,否则就没有一个参考标准。

02 安全测试与功能测试的区别

安全测试与普通的测试有一些区别,功能测试是保证产品能够正常工作,输入A可以出来A的结果,输入B可以出来B的结果,但是安全问题是你可能输入的是%、输入的是*或者是“or 1=1”这种特殊的构造字符串,它能绕过程序设计逻辑,导致程序给用户暴露了不该暴露的数据。

我们一般认为大公司或者国外领先的公司的安全性是不错的,但其实也不一定,就像facebook它会暴漏个人隐私。我们知道个人隐私不属于程序设计方面的问题,但是在收集使用过程中它仍然属于安全,这种是数据的安全,数据的使用安全跟数据的收集安全,这也是国家从去年到今年一直在严厉打击的。非法收集公民个人信息,包括快递信息,家庭住址、电话...包括身份证的正反面、手持身份证的照片等信息,收集之后就有保管、保证其安全不泄露的义务。

这些都是功能测试里面所没有的,功能测试只是保证功能可以正常运转,上传一张手持身份证照片,上传完成后提示上传成功,但是上传成功之后,能不能被窃取到,安全测试去检查,不是功能测试检查的范畴。

目标不同:测试以发现BUG为目标,安全测试以发现安全隐患为目标。

假设条件不同:测试假设导致问题的数据是用户不小心造成的,接口一般只考虑用户界面。安全测试假设导致问题的数据是攻击者处心积虑构造的,需要考虑所有可能的攻击途径。

思考域不同:测试以系统所具有的功能为思考域。安全测试的思考域不但包括系统的功能,还有系统的机制、外部环境、应用与数据自身安全风险与安全属性等。

问题发现模式不同:测试以违反功能定义为判断依据。安全测试以违反权限与能力的约束为判断依据。

03 安全测试与渗透测试的区别

很多人认为安全测试就是渗透测试,但其实两者还是有许多区别的。渗透测试一般是有人邀请你去做安全,而安全测试是规定你必须做安全。渗透测试一般是要求外部帮我们内部来达成一个安全的检查,而安全测试是从公司内部出发,去解决安全的隐患,降低安全的风险,出发点是不一样的。

视角也不一样,渗透测试更多是攻击的方式,攻击有可能是盲目的也有可能是试探性的,但是安全测试来说,它可以看到源代码,我就知道在哪里会出问题,必须进行纠正。

从覆盖的差异来看,渗透测试只是选取边界的一些服务器或者边界的网络进行渗透,再进一步到内网,或者核心的网络,核心的服务器,需要一级级地去攻破目标才能达成下一级的目标。但是安全测试是从内部,从最核心的数据、数据库服务器、文件存储服务器以及最核心的交换机,从这些最核心的地方慢慢往外推演来保证安全。先是最核心的数据不能出现问题,再是应用不能出现问题,再就是应用和数据之间的通信不能出现问题,再就是用户访问应用的时候不能出现问题,最后再保证访问应用的这些人是安全的。

安全测试是从内到外的一种安全,而渗透测试是从外到内的,它是一种试探的方法。但是我们的安全要从源头上去解决,更重要的是从实际的可操作的层面上去直接封堵住安全漏洞。从解决方案和成本上也是有很大差异的,渗透测试是要有很大花费的,而且成效不一定很显著,但是安全测试,只要你做了这些安全检查,收效就是对等的,只要经过了这些检查,就必然没有这样的问题。

总结来说:

出发点差异:渗透测试是以成功入侵系统,证明系统存在安全问题为出发点;而安全测试则是以发现系统所有可能的安全隐患为出发点。

视角差异:渗透测试是以攻击者的角度来看待和思考问题,安全测试则是站在防护者角度思考问题,尽量发现所有可能被攻击者利用的安全隐患,并指导其进行修复。

覆盖性差异:渗透测试只选取几个点作为测试的目标,而安全测试是在分析系统架构并找出系统所有可能的攻击界面后进行的具有完备性的测试。

成本差异:安全测试需要对系统的功能、系统所采用的技术以及系统的架构等进行分析,所以较渗透测试需要投入更多的时间和人力。

解决方案差异:渗透测试无法提供有针对性的解决方案;而安全测试会站在开发者的角度分析问题的成因,提供更有效的解决方案。

04 软件系统设计开发运行的安全

软件系统经历过需求的分析、设计、开发到最终运行,安全在设计的时候已经融入进去了,运行的时候是安全最为重要的一个环节。有的软件要求7*24小时、7*365天不能出现问题,甚至出现问题后需要在多少秒之内解决。

我们现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运行以及已经设计出来的软件OpenSource组件去做检查。

比如说组件的安全漏洞已经被披露出来,做了一些补丁更新,这些补丁,新发布的版本必须去更换。但是作为一个软件来说,从低版本换到高版本会存在一些开发或者维护的工作量,需要去适配一下,看能不能用,但是不管难度有多大,一定要把工作做到,否则沿用存在安全隐患的版本会导致更大范围的安全隐患问题。

再就是注重安全扫描,一个是动态扫描,可以用AppScan、WebInspect等工具,再一个是静态扫描,可以用Fortify工具。这些工具都是全球知名的IT公司开发的,用这些工具可以解决知识储备不足的问题。如果没有安全从业人员,但是又想保证产品的安全,那就用工具来扫码就可以,工具里面集成了大公司里面安全专家总结出来的扫描知识库、编码的规则。在安全从业人员等级不够的情况下就可以用工具来替代。

同样,这些工具也是我们安全从业人员应该掌握的,第一掌握它的原理,第二掌握它的规则,为什么使用这些规则。

(注:道普云测试SaaS平台实现了测试工具的按需租用模式,现已集成LoadRunner Enterprise 2020、Fortify SCA 20.1、Fortify WebInspect 20.1,无须负担高昂的经费压力,可添加工作人员微信申请试用,vx:daopuyun)

再就是注重WAF和Firewall,WAF全称是Web Application Firewall,还有我们物理的Firewall。应用防火墙是在过滤每一个访问的请求数据包里面有没有安全的风险,里面有没有SQL注入、XSS攻击、远程的攻击命令或者木马等,物理的防火墙是保证了只允许信任的主机或者信任的客户端去连接某一个端口。这两个一个是软件层面的防火墙,一个是硬件层面的防火墙。

如果说WAF没有做到有效拦截的时候,就会导致木马进入到服务器里面,木马进入到服务器里面之后,就可能导致一些越权的执行命令,比如说拿到了一些特殊的文件。举一个极端的例子,通过WAF入侵了一个服务器,将这个服务器作为一个跳板,可以向局域网中去散布木马和恶意软件,网络维护人员刚好中招这个木马,他的电脑中招之后,电脑上保存的连接每一个交换机、每一个防火墙的连接口令都会泄露,导致一连串的蝴蝶效应,硬件防火墙也就被破解掉了。

这时候从网络到服务器到数据库一直到最终外界,就变成像我们说的“犹入无人之境”一样。这是比较严重的,所以我们要更多的注重WAF,因为WAF是能够快速识别到这些访问数据的,而物理防火墙只识别IP地址。

注重端口扫描和异常记录,我们既然有了防火墙,主机上开放的端口肯定比防火墙上开放的端口多,主机上这些端口是不是应该开,是不是安全呢?每个端口通信记录是什么?有没有异常,这些都需要去监控或者审计,定期去分析,这是运维上保证安全的一种手段。

设计分层、环境迁移测试、模块隔离部署,之前有一次出差,在客户现场,是做银行系统的,他们的开发有一个安全信条,俗称八荣八耻,放置在大家最常去的地方,这个标语的内容就是:以开发安全的、可用的软件为荣,以在系统中留后门留彩蛋为耻。为什么会有这样的口号呢?因为银行系统但凡有一个彩蛋或者一个后门在的话,相当于是留了一个取款机。

我们设计分层主要是不要把服务器去混着用,小公司或者不成熟的开发公司可能会把所有东西都放到一个服务器上,不管是应用、数据库还是API接口,都在一个服务器上,就导致业务数据、运行数据、客户数据都在一起,这时候风险就很大,当任何一个层面出问题,都是不可控的。

再就是环境迁移测试,我们既然做了设计的分层,那就必须保证这些分层的模块去独立的运行,应该经得起环境迁移的测试,而不能是只能在某一种容器上跑而不能做迁移。

模块隔离部署,什么叫模块隔离?我们说数据和应用要分开来部署,应用里面的应用也要进行模块隔离。给财务部门的应用应该跟给信息化部门的应用分开、跟生产部门的分开。为什么呢,因为财务是大家都比较关心的,安全级别会高一些,生产比信息化要高一些,应用层面也要隔离,否则一个服务器上布了很多个应用,当一个应用出问题的时候,就会出现像我们一开始说的链珠的例子的情况,当一个珠子断掉的时候,所有的珠子都会断,这时候安全根本没有办法去做防御。

整流、熔断、防DDoS攻击,这些如果部署在云上应该都会有,但是应用层面一定要考虑整流、熔断,建议大家可以用一些开源的组件。整流、熔断的隐患不属于安全的隐患,它属于性能的隐患,但是性能隐患最终会导致安全隐患,性能出了问题,服务器宕机之后,安全问题就会随之而来。

注重审计和日志记录、不留后门入口,这也是刚才举的例子里的,我们做软件开发、软件测试、软件设计,要保证没有人为的损害,因为人是最不可控的,程序是运行的逻辑,写的是if,就运行if,写的是else,就运行else,写的循环就运行循环,但是人确是不可控的,我们经常听到“删库跑路”的情况,这也就是为什么要留审计日志、审计不留后门,第一个是为了防止“删库跑路”,再者不把所有权限都开放给一个人。一定要注重账号权限,账号权限就是一把钥匙。

05 Web应用安全监测

静态代码扫描(Fortify SCA、Find Bugs),这块主要提供给开发,安全问题不是测试出来的,是开发出来的,在开发的过程中就已经将这个雷埋进去了,测试的时候只能去一个个排雷。更多是我们在开发阶段就不要去埋雷。

如何不埋雷呢?可能很多时候我们都不知道自己埋了一个雷,因为开发经验和开发阅历不够,这时候还是回归到我们刚才的话题,我们可以利用工具,直接把Fortify SCA或Find Bugs工具集成到开发环境中。这些工具可以帮助我们去解决编码或知识储备不足这样的情况。

动态扫描分析,主要是有WebInspect、 AppScan这两款工具,也有一些开源的工具,但是开源的工具知识库维护的比较少,规则库也不太更新或更新的不及时。这块是我们安全测试人员必须要掌握的,不仅要掌握工具怎么用,更多的是,要将工具扫描出的结果解释给开发,这是怎么样的一个漏洞,怎么样可以修复,修复之后怎样去验证。

舆情监控(CVE),这个每个公司都逃不过,要么用开源组件,要么用厂商的中间件,要么用小的中间件,要么用小的数据库。

账户安全策略(密码初始化、密码找回、账户过期、密码过期、账户休眠)。

很多应用中都不会去考虑这些,顶多考虑一个密码找回。密码初始化是说我们后台新建的账户,当这个账户真正开始用的时候,必须初始化一下密码。

账户过期指的是,我的账户如果输错了多少次密码,必须让它过期或者冻结一段时间,防暴力破解密码。密码过期指的是,密码只能使用一段时间,比如说银行里的密码,可能只能使用一天,第二天就必须换密码。

最后一个就是账户休眠,比如说给高层领导分配了一个很高权限的帐号,但是他几乎不上这个系统,开发人员知道这个密码后,他就可以拿这个账户当后门一样用,这都是风险,所以要关注休眠账户,有没有异常登录,有没有休眠策略。

接下来还有拦截各种SQL注入,XSS跨站、网站挂马、篡改、拖库等黑客攻击,并做到实时更新防护策略,第一时间防御各种0day漏洞。这种0day漏洞跟CVE一样,也要做日程监控,因为一般黑客拿到这个漏洞,他是不会去公布的,除非厂商自己知道才会对外公布。有一个时间差,在这个时间差里,很多人已经遭受攻击了。

应对0day漏洞就需要在公司内部培养一个安全团队,去挖掘出来产品里有没有0day漏洞,也就是一个安全实验室。但是大部分公司没有能力去建立一个安全实验室,就可以借助百度、腾讯、阿里、360这些对外输出的公司,去做这块防护。

防数据伪造及数据投毒,为什么一个web应用安全要防数据呢?数据指的是用户输的各种数据,用户有可能输的是业务数据,但是如果不是普通的用户,有可能输的是经过精心伪造的数据,它跟病毒是一样的,可以做到指哪打哪。

数据投毒是我在数据里加入了一些可以帮我debug,或者帮我调试的内容,就可以在系统里面打出一个个的断点,通过系统的断点就可以判断系统走到哪一步,就可以绕过支付环节,或者绕过权限验证,绕过服务器之间的数据通信,直接到达另外一个节点。

06 移动APP的安全检测

我们现在遇到的app一般有三个平台,andriod、ios、windows,大多都是andriod或ios。首先要保证开发环境是安全的,这里给大家举了一个例子,XcodeGhost事件。

这个事件在网上影响是挺大的,为什么会有这样事件?就是因为我们在中国区开发的时候要下Xcode,这个安装包比较大,在苹果官网上下的比较慢,很多人就选择像装系统那样,别人有的,我直接Ghost回来在我的电脑上用,结果就因为Ghost事件拷贝了别人的环境,但是别人的环境是有木马的,就留了后门,你开发出来的每一个app里面都暗藏了一个后门,这就是XcodeGhost事件。

很多人可能买不起工具,就用破解,破解里面就可能有木马,就像一个录屏软件,你写一行代码,人家就将这个代码发给对方的服务器,你的软件著作权还没有申请完的时候,代码已经跑到别人的服务器上去了。

SDK安全,我们开发的时候经常要用一些SDK的包,或者说我们有的厂商就专门做SDK的工具,针对这块,国家也了一些规定,SDK包谁提供,谁就要提供它安全的保证,安全的服务,否则就不要发布。《 App 使用软件开发工具包(SDK)安全指引》 大家也可以去关注一下。

应用数据安全,数据需要加密。正常不root(越狱)的手机可以正常用,拿不到核心的数据,如果越狱之后,这些数据就像一张白纸,谁都可以拿到,就需要保证,越狱之后,即使拿到这些数据,这些数据也是加密的,需要做很多处理才可以看到原文。

给大家举个例子,2019年发布的《移动应用(App)数据安全与个人信息保护白皮书(2019年)》,一方面要保护数据安全,另一方面也要保证个人信息的收集使用安全。现在这块权责分明,谁收集,谁使用,谁保证安全,如果不能保证国家就会进行处罚。

反破解、反调试、反逆向,吾爱论坛上会有一些破解的方法,如:吾爱破解安卓逆向入门教程app逆向入门分析——破解某APP登录请求参数,这些都是入门级的,不能说你开发了一个软件,却连入门级的破解都防御不了。一定要保证软件的反破解、反调试、反逆向。

最后一点使用Fortify、 CodifiedSecurity在开发阶段尽早介入安全,保证代码的安全。

下图是ios和android的逆向调试难度的对比

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

从表里看,每一项好像ios都比android要安全一些,但是话说回来,ios和android访问的是同一个系统,前台可能分了ios客户端和android客户端,但是对于后台来说,是同一个数据库,是同一个API服务器,如果能将android搞定的话,ios基本上也能如法炮制,虽然我不用ios的app,但是也可以通过效仿的方法,访问到ios可以访问的数据,这时候通过服务器就可以攻击到ios的设备上,这也是不安全的,所以需要双重的界定标准。一定要记住,虽然IOS安全,但是一旦出问题那将是雪崩式的问题。

07 Server安全检测

OS安全

端口安全、账户安全、漏洞扫描、入侵检测、最小服务集合、日志审计

这里面给大家说一下最小服务集合,我们经常会遇到windows服务器或者Linux服务器,它默认会带很多服务,比如说dhcp服务可能不需要,就不要把这些服务提起来。

再就是日志审计,如果服务器受到入侵,黑客会想尽办法去抹除日志,让你查不到行踪,不知道他干了什么事情。所以日志审计一定要有,还要备份相应的时间,再就是审计日志不能删除。

软件安全

最小集合原则、阉割的系统更安全

为什么阉割的系统更安全?就像最小服务集合一样,我们把一些常用的,容易出漏洞的一些问题规避掉,比如说windows里面不放cmd、command这种命令,那你想入侵的时候就没有办法指定命令行,这时候就会相对安全一些。他猜得透系统的密码,但是猜不透系统里面有什么。

Web中间件安全

修改默认端口,提高入侵门槛,阻止低端扫描

默认端口大家都知道,只要经过一个Nmap的扫描,就能扫描到这台服务器开了一些什么端口,一打一个准。但是你把端口改了之后,他就需要去猜,这个端口到底是干什么的?比如说我就把数据库故意放到网络端,放到80,让他猜去吧。

DB安全

修改默认端口,补丁及时更新,定期日志审计、备份安全

DB安全里面备份安全很重要,sever安全检测层面上更要去强调备份,服务器是属于硬件,即使是云服务器,也很难说哪天会突然坏掉,坏了之后就需要把这些安全策略重新构建一遍,如果没有备份,这些安全策略就需要手工去加,特别繁琐,还容易遗漏。

缓存服务安全

性能监控,只开放服务端口,管理端口禁止开放

现在很多云服务器都被挂了一些叫“挖矿”的木马,原因就是开放了一些默认端口、管理端口之类的,把这些缓存服务管理端口禁止开放,只开放服务端口,加强性能监控,一旦服务器出现异常的性能问题,一般来说它可能出现安全问题。性能和安全是相伴出现的,批量扫描、批量攻击肯定会导致性能突然间就飙上去了。

云主机业务隔离、网络隔离、数据隔离

这个是很多大公司都在做的,用了几千台几万台云服务器,每个业务、每个数据、每个网络都需要去隔离的,否则就会出现服务器云安全级别的雪崩。

08 API服务安全检测

Swagger API接口说明屏蔽

· API接口列表保护

· 使用 API 网关

API接口最简单,也最容易被忽视。很多人写完接口后,忘记删除API接口列表,或者为了方便别人调用API接口,去写了一个说明文档,结果这个接口没加权限,导致黑客上去随便一扫,就可以发现这个API列表。

这个列表拿下来之后,攻击所有的API,尝试一遍,将所有不需要传参或者传参比较简单的API全部攻击一遍之后,就会导致数据泄露或者数据出问题。

API为什么容易被攻击?因为API直接连到数据库,API的访问是直接跟数据库进行交互。通过API访问的所有请求ip地址全部是服务器,导致你在监控层面很难去发现这出了什么问题,岂不知道黑客已经站在API服务器上去打数据库服务器了。所以API也是很关键的,一定要去保障它的安全。

在API的管理方面,第一个要分权:

API访问权限控制

· 增删改查API需要单独确权(Auth2.0 Token验证)

查询的就只能去查询,只能去get,而不能去post,需要修改的,可能有post权限,但一定没有delete权限。

· API访问审计(日志)

Token授权机制、时间戳超时机制使用配额和限流、API加密签名机制 。这里专门拿一张图来说明Token授权

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

API没有办法去做登录验证,合理使用Token增加API安全的基础。

API版本安全

不同版本API直接兼容及信息保护。

因为我们的API通常会开发1.0版本、1.1版本、2.0版本、2.2版本...每一个版本对应的客户端可能不同,比如说1.1版本对应的是app的1.0版本,到了2.0的时候对应的app的4.0、5.0,这个时候客户端的app可能有低有高,有不同的版本。导致API不能高版本一上线、低版本立即下线,这个时候兼容性以及信息保护就需要提到日程上。不能出现低版本的客户端可以访问高版本的数据、高版本的客户端可以访问更低版本客户端的数据,通过这种迂回的绕过,导致API中的数据暴露出来。

最后给大家分享一个安全牛上的一个文章《API的安全危机》,大家可以去学习了解。链接:

09 知识、工具、技能

最后再跟大家探讨一下,安全从业人员需要哪些技能。

知识

· 密码学

· 社会工程学

· 汇编、调试

技能

· 电子数据取证

CTF、攻防技术,明白是怎么迂回绕过的,怎么去找黑客攻击的痕迹,或者说怎么去取证反编译、逆向破解,知其然也要知其所以然,找到安全漏洞的时候,可以把它直接取证出来,会写poc、会用poc。

· Python、shell、batch,这些都是最基础的

再就是给大家列了一些比较常见的工具,都是安全人员必须会用的,尤其是010Edit、bintext、binwalk、winhex这些二进制的工具,我们看到的软件可能是exe,安全人员看到的永远都是二进制或者汇编,一定要掌握这些基础,否则看不出有什么端倪。

Web网络工具

Burp Suite、Fiddler、wireshark、NetworkMiner

图片分析工具

ExifTool、pngcheck、stegsolve、ImageMagick

文件分析工具

010Edit、bintext、binwalk、winhex

反编译、调试

pyinstxtractor、dx2jar、Jd-GUI、IDA、WinDebug

10 安全测试的目标和意义

目标:

检查被检测对象是否符合某种安全标准,比如说国家出的安全标准,要检查产品是不是符合这些标准。

提升研发开发安全代码的意识,安全更多的是培养开发的安全意识,在开发的阶段不断地培训、检查,在开发阶段把这些安全问题规避掉。而不是等开发完成后才去扫描、去试探,这个时候其实是黑盒测试,这个时候已经来不及了,必须在白盒阶段把安全问题解决掉,或者说消灭掉。或者说没办法解决,就要加到备忘录里面去,知道这是已知的风险,在上线后,一定要去监控这些风险有没有发生。

维护品牌价值,增强客户信任。如果出现安全问题将会对品牌产生很大的负面影响,甚至股票就直接掉下去了,这些都是很大的经济损失。安全是经不起任何马虎的。

安全测试的意义:

全方面检查软件产品的安全,提升软件产品运行可靠性。

加高系统安全防线,保护产品,明确系统的安全风险。

这个刚才也提到过了,解决不了的就要写备忘录,能解决的一定要解决。能提高的一定要提高安全标准,比如说,开始用MD5加密,最后我用BASE64位加密,再不行就直接上AES-512、AES-256这种长度加密,提高产品的安全性。

今天的内容就到这里,最后有一句话送给大家“没有绝对安全,只有相对安全”,做不到绝对的安全,但是可以做到相对的安全,心知肚明的安全,让安全在工作中既可以给我们带来收益,也可以带来产品安全上整体的提升。

(编者按:文中讲师提到的工具Fortify CSA与WebInspect,如果您有兴趣了解,可以联系工作人员申请试用,vx:daopuyun)

end

下期介绍

下期直播将在1月5日举行,由软件质量专家师江帆博士为大家带来《基于AI的模型测试在工业界的应用》,敬请关注。

视频回放

(讲座笔记)安全测试测试方法和测试工具_WWW.XUNWANGBA.COM

(讲座笔记)安全测试测试方法和测试工具)宝,都看到这里了你确定不收藏一下??

92%的人还看了