五个安全测试步骤保护应用程序(转)

你可以不必找一个黑客或者解密高手来测试你程序的安全性,也不需要购买一大堆昂贵的黑客工具。但是,你必须有一套处理过程来发现潜在的问题。如果遵从我下面详细介绍的五个处理步骤,你就可以轻松发现一般的开发缺陷。而且一旦发现了这些缺陷,就可以减轻或消除他们。

  步骤一:端口扫描

  你需要做的第一件事是在客户端和服务器端进行一次端口扫描,找出那些打开但并不需要的通讯端口。各种服务如FTP、NetBIOS、echo、gotd等使用的端口是引起安全问题的典型因素。对于TCP和UDP端口来说,根据经验通常的做法是:关掉任何程序运行所不需要的服务或监听器。

  端口扫描被用来检测目标系统上哪些TCP和UDP端口正在监听,即等待连接。大多数的计算机默认地打开了许多这样的端口,黑客和破解者经常花很多时间对它们的目标进行端口扫描来定位监听器,这是他们开始攻击的前奏。一旦这些端口都被鉴别出来,要使用它们也就不困难了。

  端口扫描工具,通常叫端口扫描器,很容易在Internet上找到。其中很多是基于Linux的。例如Namp、Strobe、Netcat是比较好的一类。我最喜欢的基于Linux的端口扫描器是Nump。也有许多基于Microsoft Windows的端口扫描器,其中我最喜欢的是Ipswitch的WS Ping ProPack。WS Ping ProPack是一个低开销、多用途的网络问题定位工具,它将许多功能包装成简单易用的形式。

  有了端口扫描器后,对全部TCP和UDP端口进行一次完整的检查来确定哪些端口是打开的。将监测到的打开的端口与系统运行所需要用到的端口进行比较,关闭所有没有用到的端口。在Microsoft操作系统中关闭端口经常需要重新配置操作系统的服务或者修改注册表设置。UNIX和Linux系统就简单一些:通常只是将配置文件中的某一行注释掉。

  步骤二:检查用户帐户

  接下来,需要将目光转移,看看操作系统、任何数据库以及程序自身,特别注意guest用户帐户、默认账户或者简单密码账户以及不需要的用户ID。之所以需要这样做是因为大多数的默认设置留下了许多漏洞,创建了多余的账户,它们可能会被用来危及系统的安全。这种情况在使用数据库系统如Oracle或Web服务器如Microsoft Internet Information Services (IIS)时特别突出。

  我曾经通过使用本不该存在或应被禁止的用户ID和密码登陆进入过许多路由其、数据库和应用程序中。例如,若干年前,在测试一个简单的Web应用程序时,我尝试用Guest 账户ID和空密码登陆进系统。很出乎我的意料,程序很爽快地将Guest作为合法用户并允许我登陆。然后我又试了几个其它的账户,如输入用户ID和密码为空/空或管理员/管理员,结果都成功了。

  有了这次经验,我总是在软件安装手册的每一章寻找默认的账号和密码。我建立了一份这些默认账号和密码的列表,以确保能够把找到过的都试试。对于程序本身我也这样做,建立一份由程序员创建的测试用户帐户,也把它们试试。

  测试这些东西能够帮助发现危害系统的途径,禁用和删除不必须的账户是一种消除找到的缺陷的一种方法。对于通讯端口也有一个相似的方法:禁用任何系统运行所不需要的用户ID。如果某个用户ID不能被禁用,那么至少改变它的默认密码,使其不易被破解。

  你会问,怎样才算一个好的密码?它地长度至少为六到八个字符,并含有一个特殊字符。密码必须足够长,以使其不易被破解,但是必须能够容易记住——这是难以两全的。我喜欢使用缩写词或者容易记忆的设备。千万别用任何易猜的单词或习语,这是一个常见的密码失误。同样的,不要使用字典中的单个词语。我记忆最深刻的差密码之一是ROLLTIDE,这是我在

  阿拉巴马州大学一台被丢弃的机器上发现的(这所大学运动队的昵称是Crimson Tide)。

  步骤三:检查目录许可

  在关闭了无用端口并禁用了多余的账号后,仔细检查一下程序所用到的数据库和服务器目录的权限设置。很多攻击利用了配置失误的权限,这种方法经常被用来攻击Web服务器。

  例如,使用CGI脚本的Web站点有时允许写访问。通过它,一个恶意的供给者可以很简单地在CGI二进制目录下放置一个文件。然后他就能够调用这个脚本文件,Web服务器会运行它,典型地在管理员权限下。能够写并执行脚本是非常危险的,要开放这些权限应该格外小心。

  另一个例子,几年前,我给一个安全实验室里的一个非常重要的系统作测试。通过配置失误的权限,我可以在很短的时间内破坏整个实验室以及所有17个被认为是安全的机器。在端口扫描之后,我发现每个服务器都运行了一个FTP监听器,而且每个都允许匿名访问,使得我可以访问每个服务器系统。

  FTP监听器给了我对每台机器上真正存放密码文件的访问权限,真是一个巨大的配置失误。由于权限如此设置,我不仅可以下载存放密码的文件,而且可以通过把密码文件中的密码修改后再上传给服务器覆盖源文件而使这些用户“中毒”。当然我将自己授予了root访问权,从而取得了机器的管理员权限。

  如果正确地设置了目录权限,我就不能访问被指定给匿名用户使用的FTP目录以外的任何东西。因此,我本不能够得到真正存放密码的文件,更别提将其替换了。当然,如果他们曾经做过任何自己的端口扫描,就像我在步骤一里提到的,那么用这种方法我将哪里也到不了。

你可以不必找一个黑客或者解密高手来测试你程序的安全性,也不需要购买一大堆昂贵的黑客工具。但是,你必须有一套处理过程来发现潜在的问题。如果遵从我下面详细介绍的五个处理步骤,你就可以轻松发现一般的开发缺陷。而且一旦发现了这些缺陷,就可以减轻或消除他们。

  步骤一:端口扫描

  你需要做的第一件事是在客户端和服务器端进行一次端口扫描,找出那些打开但并不需要的通讯端口。各种服务如FTP、NetBIOS、echo、gotd等使用的端口是引起安全问题的典型因素。对于TCP和UDP端口来说,根据经验通常的做法是:关掉任何程序运行所不需要的服务或监听器。

  端口扫描被用来检测目标系统上哪些TCP和UDP端口正在监听,即等待连接。大多数的计算机默认地打开了许多这样的端口,黑客和破解者经常花很多时间对它们的目标进行端口扫描来定位监听器,这是他们开始攻击的前奏。一旦这些端口都被鉴别出来,要使用它们也就不困难了。

  端口扫描工具,通常叫端口扫描器,很容易在Internet上找到。其中很多是基于Linux的。例如Namp、Strobe、Netcat是比较好的一类。我最喜欢的基于Linux的端口扫描器是Nump。也有许多基于Microsoft Windows的端口扫描器,其中我最喜欢的是Ipswitch的WS Ping ProPack。WS Ping ProPack是一个低开销、多用途的网络问题定位工具,它将许多功能包装成简单易用的形式。

  有了端口扫描器后,对全部TCP和UDP端口进行一次完整的检查来确定哪些端口是打开的。将监测到的打开的端口与系统运行所需要用到的端口进行比较,关闭所有没有用到的端口。在Microsoft操作系统中关闭端口经常需要重新配置操作系统的服务或者修改注册表设置。UNIX和Linux系统就简单一些:通常只是将配置文件中的某一行注释掉。

  步骤二:检查用户帐户

  接下来,需要将目光转移,看看操作系统、任何数据库以及程序自身,特别注意guest用户帐户、默认账户或者简单密码账户以及不需要的用户ID。之所以需要这样做是因为大多数的默认设置留下了许多漏洞,创建了多余的账户,它们可能会被用来危及系统的安全。这种情况在使用数据库系统如Oracle或Web服务器如Microsoft Internet Information Services (IIS)时特别突出。

  我曾经通过使用本不该存在或应被禁止的用户ID和密码登陆进入过许多路由其、数据库和应用程序中。例如,若干年前,在测试一个简单的Web应用程序时,我尝试用Guest 账户ID和空密码登陆进系统。很出乎我的意料,程序很爽快地将Guest作为合法用户并允许我登陆。然后我又试了几个其它的账户,如输入用户ID和密码为空/空或管理员/管理员,结果都成功了。

  有了这次经验,我总是在软件安装手册的每一章寻找默认的账号和密码。我建立了一份这些默认账号和密码的列表,以确保能够把找到过的都试试。对于程序本身我也这样做,建立一份由程序员创建的测试用户帐户,也把它们试试。

  测试这些东西能够帮助发现危害系统的途径,禁用和删除不必须的账户是一种消除找到的缺陷的一种方法。对于通讯端口也有一个相似的方法:禁用任何系统运行所不需要的用户ID。如果某个用户ID不能被禁用,那么至少改变它的默认密码,使其不易被破解。

  你会问,怎样才算一个好的密码?它地长度至少为六到八个字符,并含有一个特殊字符。密码必须足够长,以使其不易被破解,但是必须能够容易记住——这是难以两全的。我喜欢使用缩写词或者容易记忆的设备。千万别用任何易猜的单词或习语,这是一个常见的密码失误。同样的,不要使用字典中的单个词语。我记忆最深刻的差密码之一是ROLLTIDE,这是我在

  阿拉巴马州大学一台被丢弃的机器上发现的(这所大学运动队的昵称是Crimson Tide)。

  步骤三:检查目录许可

  在关闭了无用端口并禁用了多余的账号后,仔细检查一下程序所用到的数据库和服务器目录的权限设置。很多攻击利用了配置失误的权限,这种方法经常被用来攻击Web服务器。

  例如,使用CGI脚本的Web站点有时允许写访问。通过它,一个恶意的供给者可以很简单地在CGI二进制目录下放置一个文件。然后他就能够调用这个脚本文件,Web服务器会运行它,典型地在管理员权限下。能够写并执行脚本是非常危险的,要开放这些权限应该格外小心。

  另一个例子,几年前,我给一个安全实验室里的一个非常重要的系统作测试。通过配置失误的权限,我可以在很短的时间内破坏整个实验室以及所有17个被认为是安全的机器。在端口扫描之后,我发现每个服务器都运行了一个FTP监听器,而且每个都允许匿名访问,使得我可以访问每个服务器系统。

  FTP监听器给了我对每台机器上真正存放密码文件的访问权限,真是一个巨大的配置失误。由于权限如此设置,我不仅可以下载存放密码的文件,而且可以通过把密码文件中的密码修改后再上传给服务器覆盖源文件而使这些用户“中毒”。当然我将自己授予了root访问权,从而取得了机器的管理员权限。

  如果正确地设置了目录权限,我就不能访问被指定给匿名用户使用的FTP目录以外的任何东西。因此,我本不能够得到真正存放密码的文件,更别提将其替换了。当然,如果他们曾经做过任何自己的端口扫描,就像我在步骤一里提到的,那么用这种方法我将哪里也到不了。

时间: 2024-10-30 09:11:15

五个安全测试步骤保护应用程序(转)的相关文章

转:使用五个安全测试步骤来保护你的应用程序

你可以不必找一个黑客或者解密高手来测试你程序的安全性,也不需要购买一大堆昂贵的黑客工具.但是,你必须有一套处理过程来发现潜在的问题.如果遵从我下面详细介绍的五个处理步骤,你就可以轻松发现一般的开发缺陷.而且一旦发现了这些缺陷,就可以减轻或消除他们. 步骤一:端口扫描 你需要做的第一件事是在客户端和服务器端进行一次端口扫描,找出那些打开但并不需要的通讯端口.各种服务如FTP.NetBIOS.echo.gotd等使用的端口是引起安全问题的典型因素.对于TCP和UDP端口来说,根据经验通常的做法是:关

五个广泛流传的对大龄程序员的误解

我们这一行受年龄歧视体现在好几个方面. 大家都热衷于热门的新技术,追求以不可想象的超速度掌握这些新知识的能力,永不疲倦的加班,让产品按时发布的干劲--所有的这些都是做软件这行中年轻人的特长. 我还没说年轻的员工很便宜的事吧? 不是一般的便宜. 这个计算机专业学历需求趋势统计并没有清楚的告诉你目前年轻.廉价的劳力已经严重的过剩,那些人力经理对这部分人的感觉就像是大海一样取之不尽用之不竭. 事实上,所有的数据都证明了一个结论:近10年来求职登记计算机专业学历水平要求正在下降或至少没升过. 如果说跟以

Qt多窗口界面设计的简单测试步骤

参考:http://bbs.qter.org/forum.php?mod=viewthread&tid=11&extra=page%3D1 快速学习测试如何建立多窗口应用程序,可以参考以上网站,教程的内容详细看过一遍之后,参考以下设计步骤自己一遍做出来,最好不要一遍对照教程一遍在自己电脑上一点点补充,这样学习效果可能不够好. 1.新建qt gui应用 2.在主窗口中添加按钮或者进行其他设计,如果仅为测试不需要对主窗口进行更改直接进入第3步 3.在工程中添加新文件,新建设计师类,并在弹出后的

Beaglebone Back学习五(PWM测试)

PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 Beaglebone Coding 101: Buttons and PWM 4 Using PWM outputs 5 beaglebone-black-cpp-PWM 6 Enabling PWM Support in the kernel 7 Beaglebone Back学习五(PWM测试

MySQL时间点数据恢复测试步骤--基于Position

MySQL时间点数据恢复测试步骤(基于Position): 1.查看当前的二进制日志的名称及位置 mysql> show master status ; | master-bin.000001 |      107 2.修改数据库的信息并记录相应的修改内容以便于恢复后比对. 例如本例对test.tb1插入了数据: +------+-------+ | id   | name  | +------+-------+ |    1 | tina  | |    2 | jason | +------

如何保护java程序不被反编译

Java是一种 跨平台的.解释型语言 Java 源代码编译中间“字节码”存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名.方法名 等.因此,Java中间代码的反编译就变得非常容易.目前市场上有许多免费的.商用的反编译软件,都能够生成高质量的反编译后的源代码.所以,对开发人员 来说,如何保护Java程序就变成了一个非常重要的挑战.下面我们就结合实例讨论 保护Java程序的基本方法然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序

登录窗口设计简单测试步骤

首先参考:http://bbs.qter.org/forum.php?mod=viewthread&tid=12, 详细看过以上教程一遍后,不在参考以上教程,而按照如下步骤独立完成登录界面设计,这样在对设计的流程和步骤的把握中形成自己的认识,增强学习效果: 1.新建qt gui应用 2.在主窗口中添加按钮或者进行其他设计,如果仅为测试不需要对主窗口进行更改直接进入第3步 3.工程中添加新文件--设计师类,并在创建成功后的弹出的ui设计界面拖入两个label和两个lineEdit作为用户名和密码输

Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置修改及测试步骤

测试环境:Oracle Enterprise Linux 64-bit (5.8版本) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/oracle/product/11.2.0/dbhome_1 ,数据库名为默认的orcl,Linux虚拟机的IP设置为192.168.1.121 一.修改listener.ora文件内容 命令:[[email protected] ~]$ vi /u01/app/oracle/product/11.2.0/

SOAPUI用测试步骤进行断言

soapUI提供两种断言方法:TestSteps中添加断言和Assertion TestStep(仅限PRO版本). Assertion TestStep扩展了断言处理和管理的想法.此功能允许创建简单到复杂的的灵活性断言,可以在测试用例中请求/响应,JMS,JDBC或安全相关活动中断言从项目级别到单个测试阶段的任何属性.此外,断言可以分组并利用布尔逻辑. 1. 添加步骤 右键单击TestCase,然后选择Add Step - > Assertion TestStep打开Assertion Tes