转载——安全测试的一点思考

2011-06-12  邓智群 

公司产品的安全检测,这次领导不知道咋安排的,居然派我一个测试人员过去。没有商务,没有网络工程师,更没有开发人员,如果人家问我数据流的过程,我该怎么回答哦?

  看来还是多看资料吧,我赶紧把公司需要检测的四个产品资料都弄到电脑里,一有时间就看,会的就不记录了,不会的,使用各种工具,把流程图画出来,然后发给公司的人员,让他们确认。

  还好,检测提前完成,我躺在宾馆的床上,把出差近一个月来的事情仔细的都想了一遍。各个产品的环境搭建,基本没碰到大问题,碰到的问题,上网找资料基本都解决了,唯一麻烦的一件事情,就是oracle数据库安装在linux操作系统上,通过终端导入数据都乱码了。这个事情闹了半天,最终是因为linux需要修改一个系统配置文件,OK了。

  忽然想起来,我在平时测试中忽略的一个问题,安全测试。

  我又找人四处问,朋友们都崩溃了,上网也找了很多的资料,现将一些想法写出来,抛砖引玉吧,希望各位达人多提供给我一些解决方案哦。

  大家都知道,目前操作系统存在的各种漏洞,使得网络攻击者能够利用这些漏洞,通过TCP/UDP端口对客户端和服务器进行攻击,非法获取各种重要数据,给用户带来了极大的损失,因此,网络安全就成为测试的一个必要步骤。

  其次,如果网络不安全了,我们的产品又如何保证数据的安全呢?系统之间的通信安全,系统代码的是否暴露等。

  首先我们来看网络安全的几个特征:

  网络安全应具有以下五个方面的特征:

  保密性:信息不泄露给非授权用户、实体或过程,或供其利用的特性

  完整性:数据未经授权不能进行改变的特性。即信息在存储或传输过程中保持不被修改、不被破坏和丢失的特性可用性:可被授权实体访问并按需求使用的特性。即当需要时能否存取所需的信息。例如网络环境下拒绝服务、破坏网络和有关系统的正常运行等都属于对可用性的攻击

  可控性:对信息的传播及内容具有控制能力

  可审查性:出现的安全问题时提供依据与手段

  1 产品安全

  1.1 通信之间信息的安全

  这个是我们测试人员需要做的,我们有很多种方法,而且,必须通过各种手段,才能保证信息的安全。

  1.1.1 信道安全

  使用网络截包工具(这些工具网上很多,在上海的公安局检测中心,我们用的是一个叫sniffer show的工具,但是上网没找到。不过有sniffer,这个就很够用了)

  使用sniffer,安装在主机上,以root用户运行,就能很轻松的获取它和其他机器的通讯数据。然后查看数据详情,就可以清晰的看到常用的一些TAG,很容易看明白,哪些是账号,哪些是密码,其他数据又是什么等等。

  如果数据没有加密,你会很容易的知道用户名,密码,这样就很不安全了。我忽然想起来我玩游戏的账号是怎么丢的了,是不是也是这样呢?

  这种情况,最容易解决的方案,就是使用https协议,我在上海的时候配过tomcat的https协议,不难,配置好了,CA与RA的两个tomcat之间通讯数据就加密了。我们同样可以使用这种方法解决其他类似的问题。不过服务器之间的https配置特别麻烦,现在还没弄明白。

1.1.2 数据加密以及数据签名

  记得在做139邮箱的时候,我们所有的通讯数据,都用了base64编码进行了处理。不过这种数据,能够很容易的被解析出来,欺骗的只是一些网络小毛毛虫而已,稍微有点编程基础的,就能很快的解析出来,毕竟走的是标准的base64嘛。

  现在做安全产品了,原来保证数据的安全就有很多方式哦。

  在信息通信过程中,有四个基本的安全要素:一是机密性,通信是否机密的,是否能被拦截,通信的机密性无法保障,则对于个人的通信隐私无法保障;二是完整性,通信中的信息是否被篡改了?无法保障完整性,就无法保障通信过程的准确和有效;三是身份认证,通信的基本前提是我得知道是在和谁通信,在信息传输的开放互联环境中,身份认证能否被伪造,无法确认身份,则无法实现信息交流和交互;四是不可抵赖,即交易的过程不被抵赖,特别是在电子商务、电子政务等过程中,通信的抗抵赖显得尤其迫切。

第一种场景:首先女朋友和我约定一个共享密钥,女朋友使用该密钥进行信息的加密,然后通过公开环境进行传输,而我收到信息后,利用共享密钥解密,得到“明晚西单见”的信息,就算被其他人截获,没有该共享密钥,无法解密,也就无法知道信息的确切内容,保障了信息传输过程中的机密性。但是,该场景忽略了一个问题:女朋友和我的如何约定这个共享密钥?需要一位红娘通过线下的方式传递消息,在实际的 Internet通信中,没有红娘怎么办?我们可以引入另一类算法,非对称算法,非对称加密算法则很好的解决了这个问题。

  第二种场景:我和女朋友利用非对称密码算法。即通信的双方女朋友和我都各有一对密钥,其中,对社会公布一个密钥,称公钥;自己私自保护好另一个密钥,称为私钥,通过公钥加密的信息,可以通过私钥来进行解密,通过私钥加密的信息,可以通过公钥来解密。女朋友要发送这个信息,可以通过公开途径,得到我的公钥,然后将信息通过我公钥进行加密后得到密文,然后将信息传给我,因为只有我有私钥,所以只有我才能解开密文,得到明文信息,其他人得到密文,没有私钥,无法解密密文。这种通信方式也很好的保证了信息的机密性,而且相比较对称密钥的密钥分发困难,非对称密钥对的公钥可以通过公开途径就能得到,不用担心密钥分发的问题。当然非对称密钥还有另外一种应用场景:我们看这个场景,也有个问题,那就是我如何能确切知道这个信息就是女朋友发送的呢,因为公钥是通过公开途径就能得到,有可能是其他人使用我的公钥做的恶作剧呢?或者说女朋友将来抵赖,说根本没传送过这个信息呢?

  第三种场景:女朋友为了让我确信该信息就是她发送的,可以使用她自己的私钥对信息进行加密,得到密文,发送给我,我通过公开途径得到女朋友的公钥,利用女朋友的公钥对密文进行解密,如果能解密开,则证明了信息确实是女朋友发送的,如果解不开,则说明信息不是女朋友发送的,这样就解决了女朋友的身份确认问题。实现了抗抵赖功能。总结非对称密钥的两个用法,很好的解决了信息通信的机密性、身份认证、抗抵赖任侍猓导试谑迪止讨校颐腔岱⑾址嵌猿泼茉恳灿懈鑫侍猓褪欠嵌猿扑惴ǜ丛樱猿ば畔⒔屑用埽确嵌猿扑惴?00倍甚至上千倍,会慢的无法接受。针对该问题,在通信系统中,又引入了一种新的算法,信息摘要算法。

数字摘要算法和现实生活中的指纹识别或者虹膜识别一样,具有三个典型的特征:一是原实体信息量大,而摘要后的信息量要小很多;二是实体与摘要一一对应,不同的实体不可能生成一样的摘要,不同的摘要肯定对应不同的实体;三是算法不可逆,通过摘要无法还原或推导出信息实体。这样的一个算法过程就称为摘要算法。目前采用的摘要算法主要有 MD5和SHA1,其中信息编码中的一个字节的改变,都将导致输出摘要的改变。目前三种算法都介绍完了,实际通信过程中,往往综合利用三种算法,进行安全通信。

  数字签名的过程。首先将发送方A要发送的明文,通过摘要算法生成信息摘要,然后用发送发A的私钥对摘要进行加密,形成摘要的密文,我们称该密文为数字签名。将数字签名和明文一起打包发送给接收方。接收方B用户收到信息后将数字签名,使用用户A的公钥进行解密,得到签名前的信息摘要。另外接收方B将与数字签名一起发送的明文进行与A用户相同的摘要算法得到信息摘要,与解密数字签名后的信息摘要进行对比,如果一致,就说明信息没有被篡改,同时也表示信息确实是用户A发出的,有效解决了信息传输过程中的数据完整性、身份认证、和抗抵赖等问题,同时由于信息摘要数据短,有效避免了非对称算法加密长数据慢的问题,同时信息摘要与原明文信息一一对应,对摘要进行签名,与对原明文进行签名所获得的效果一样,一般签名就是对原明文信息摘要用私钥进行加密,完成一个数字签名的过程。

  刚解释完了数字签名,我们再来来看看数字信封的过程。数字信封过程是:发送发用户A要发送一个信息给接收方用户B明文信息,通过对称密钥对明文信息进行加密,形成密文,然后通过公开途径获取接收方用户B的公钥,用该公钥对对称密钥进行加密,形成数字信封,将对称密钥加密后的密文和数字信封一起传送给接收方。接收方B获取密文和数字信封后,通过独有的私钥对数字信封进行解密得到对称密钥,然后使用对称密钥对密文进行解密得到明文。这就完成了一个数字信封的通信过程。

数字信封的一个典型应用过程,清晰地表示了发送方用户A要发送明文给接收方用户B,通过综合利用数字签名、数字信封等技术,确保整个通信过程的机密性、完整性、身份认证和抗抵赖。首先:发送方A将需要发送的明文通过摘要算法形成数字摘要,然后使用A的私钥进行加密形成数字签名,然后将要发送的明文和数字签名及发送方A的公钥打包使用对称密钥进行加密形成密文,然后用接收方的公钥对该对称密钥进行加密形成数字信封,将密文和数字信封一起发送给接收方B用户。接收方用户B收到信息后,使用接收方B的私钥对数字信封进行解密,得到对称密钥,然后用该对称密钥对密文进行解密,还原出加密前的明文、发送方的数字签名、发送方的公开密钥。将明文通过与发送方同样的算法进行摘要算法得到摘要,另外利用发送方的公开密钥对数字签名进行解密得到发送消息明文的数字摘要,比较两摘要,如果相同则表示信息确实是发送方用户A发送的,且传输过程中没有被篡改,因为有发送方对信息摘要进行私钥加密,私钥只有发送方用户A所有和保管,表明了信息发送方的确是A用户,有效防止以后A用户对所发信息的抵赖。由于在网络上传输的都是密文,有效降低了信息泄露的风险。所有综合使用,最终,有效解决了信息通信过程中面临的四个问题:机密性,完整性、身份认证和抗抵赖的需求,是信息安全的有效解决方案。

1.2 系统代码暴露情况

  这个我话题我也不班门弄斧,还是由研发人员去做。不过,如果某天我需要做这些,再去学习了

  2、网络安全:

  2.1 本地安全

  记得在学校,我们老师就用netstat命令查看各个端口的使用情况。今天,查了些资料,把具体的使用写下来,方面以后自己用。

  Netstat命令是Windows内置的一种网络测试工具,通过这个命令,就可以检测到第一种情况所有可能出现的东西。

  ● Netstat命令语法

  NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]

○ 参数说明

  -a:显示所有连接和监听端口。

  -b:显示包含于创建每个连接或监听端口的可执行组件。在某些情况下已知可执行组件拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。这种情况下,可执行组件名在底部的[ ]中,顶部是其调用的组件等,直到TCP/IP部分。注意此选项执行可能需要很长的时间,如果没有足够权限可能失败。

  -e:显示以太网统计信息。此选项可以与“-s”选项组合使用。

  -n:以数字形式显示地址和端口号。

  -o:显示与每个连接相关的所属进程ID。

  -p proto:显示proto指定的协议的连接;proto可以是下列协议之一,TCP、UDP、TCPv6或UDPv6。如果与“-s”选项一起使用可显示按协议统计信息,proto可以是下列协议之一:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6。

  -r:显示路由表。

  -s:显示按协议统计信息。默认显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息。

  -p选项用于指定默认情况的子集。

  -v:与“-b”选项一起使用时将显示包含于为所有可执行组件创建连接或监听端口的组件。

  Interval:重新显示选定统计信息,每次显示暂停时间间隔(以秒计)。按【Ctrl+C】组合键停止重新显示统计信息。如果省略,netstat显示当前配置信息(只显示一次)

  2.2 网络主机安全

  这个是我问公司的网络工程师得来的,有一种检测工具叫(HostScan)的,安装在服务器上,就可以扫描主机的IP地址、IP端口还有网络服务等。然后我下载了这个工具使用了一把,操作也很简单,这里就不做详细的描述了,不过每个数据的含义,希望自己根据实际情况慢慢摸索,毕竟工具是死的,人是活的呗。

  2.3 漏洞检测

  这个话题仅仅作为抛砖引玉用,漏洞的检测很复杂,我们需要专业的去了解。一般的公司,都有自己的网络工程师,这些,让他们保证就可以啦。我们测试工程师,把主要的精力放在产品安全的测试上

388°/3889 人阅读/0 条评论 发表评论

登录 后发表评论