业务系统(暨应用系统)安全评估指南_第1页
业务系统(暨应用系统)安全评估指南_第2页
业务系统(暨应用系统)安全评估指南_第3页
业务系统(暨应用系统)安全评估指南_第4页
业务系统(暨应用系统)安全评估指南_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

密级:秘密文档编号:项目代号:业务系统(暨应用系统)安全评估指南Ver0.4二零零五年二月安氏互联网安全系统(中国)有限公司

版本控制版本日期参与人员更新说明0.42005-2-11崔天强文档框架开始建立分发控制编号读者文档权限与文档的主要关系1编写,修改文档作者2读取

目录1 概述 71.1 评估的范围与概念澄清 71.1.1 业务系统评估 71.1.2 应用系统评估 81.2 评估手段 91.3 评估实施环境 102 软件工程模型对安全评估的借鉴 102.1 软件工程对信息安全评估工作的借鉴意义 102.2 以业务为核心的全面风险评估 102.3 组织结构与功能 112.3.1 组织结构图 112.3.2 组织/业务关系图 122.3.3 业务功能表 132.3.4 组织结构与功能分析对安全评估的借鉴 132.4 业务流程分析 132.4.1 软件工程中的业务流程分析 132.4.2 安氏现有的业务流程评估 142.4.3 业务流程分析对安全评估的借鉴 152.5 数据流程分析 172.5.1 软件工程中的数据流程分析 172.5.2 数据流程分析对安全评估的借鉴 192.6 威胁模型 233 应用系统的安全开发过程 243.1 教育 243.2 设计阶段 243.2.1 面试时进行安全性考核 243.2.2 设定产品的安全目标 253.2.3 建立威胁模型 253.2.4 设置Bug阀值 253.2.5 安全小组检查 253.3 开发阶段 263.3.1 定义安全的编码准则 263.3.2 审查旧的安全问题 263.3.3 外部安全审查 263.3.4 安全推动活动 263.4 测试阶段 263.5 发行和维护阶段 273.5.1 响应过程 274 评估前的准备 274.1.1 确定用户配合人员 274.1.2 确定评估的范围 274.1.3 获得应用系统组件的清单 284.1.4 业务系统介绍会和相关文档 284.1.5 建立数据流程图和威胁模型 284.1.6 签署应用系统安全评估申请 295 常见应用系统的架构 295.1 C/S架构 295.2 N-tier架构 295.3 应用系统架构和安全性的关系 306 通用应用系统的评估 306.1 认证和鉴别 306.1.1 是否启用了PKI 316.1.2 是否启用了组织统一要求的PKI 316.1.3 是否识别错误的证书 316.1.4 认证进程是否适当 316.1.5 是否支持客户端对服务器的认证 326.2 用户帐户管理 326.2.1 用户ID不唯一 326.2.2 不活动用户是否禁用 326.2.3 不必要的内置用户是否禁用 326.2.4 用户ID是否有默认的或者弱口令 326.3 数据保护 336.3.1 敏感数据不适当地存储 336.3.2 敏感数据传输中没有适当的保护 336.3.3 使用未经验证的加密算法 346.4 审核 346.4.1 没有适当纪录安全相关的事件 346.4.2 日志将满没有警告 346.4.3 日志存在未授权删除、修改、泄露等漏洞 346.5 应用操作 356.5.1 基于角色的访问控制没有加强责任分离 356.5.2 应用在执行操作之前没有进行授权 356.5.3 进程运行的权限过高 356.5.4 应用没有对session的限制 356.5.5 应用修改在应用的范围之外的文件 366.5.6 用户绕过用户界面直接修改资源 366.6 生产环境下应用配置 366.6.1 应用和支持库中包含从未激活的代码 366.6.2 应用代码和数据在相同的目录中 366.6.3 安装源代码保存在服务器中 366.6.4 应用的环境中同时使用了不必要的软件或者服务 366.7 影响控制 376.7.1 网络架构不适当 376.7.2 没有灾难恢复计划 376.7.3 备份或者备份程序不完备 376.7.4 没有确保应用日志可以长时间保存的流程 376.7.5 敏感数据未经修改地直接导入测试环境 376.8 应用配置和授权 376.8.1 应用未恰当设置Banner信息 376.8.2 会话结束后应用在客户端保存认证凭证 376.8.3 普通用户可以执行超级用户权限 386.8.4 应用没有明显的logout的办法 386.8.5 认证凭证或者敏感数据在代码中保存 386.8.6 应用代码包含无效的网络资源引用 386.9 基于代码的因素 386.9.1 应用的进程在终止前没有从内存或者磁盘中删除临时对象 386.9.2 应用没有充分验证用户输入 396.9.3 应用直接暴露出错信息 396.9.4 应用失败能够导致不安全的状态 397 基于Web应用系统的评估 397.1 认证机制 407.1.1 验证代码可下载 407.1.2 HTTP认证 407.1.3 表单认证 407.2 授权 417.2.1 攻击种类 417.2.2 角色矩阵 417.2.3 常见攻击手段 427.3 会话状态管理 427.3.1 URL直接绕过 427.3.2 hidden字段 427.3.3 HTTPReferer头标 437.3.4 Cookie或者sessionID 437.4 输入验证 437.4.1 输入验证攻击的种类 437.4.2 缓冲区溢出攻击 447.4.3 shellinjection攻击 447.4.4 文件上传漏洞 447.4.5 数值边界校验 447.5 客户端验证 447.5.1 脚本验证 447.5.2 hidden字段 457.5.3 HTTP头标 457.6 SQLinjection测试 457.6.1 测试前准备 457.6.2 系统是否进行了基本的过滤 457.6.3 常用的其他测试方法 467.7 跨站脚本测试 467.7.1 跨站脚本攻击多发点 477.7.2 测试方法 477.8 其他问题 477.8.1 源代码在站点中可以下载 477.8.2 站点目录可以浏览 477.8.3 源代码泄漏 477.8.4 ODBC连接问题 487.8.5 错误消息泄漏 487.8.6 同时开放其他服务 48附录参考文献 48

概述本文是一个“业务系统”安全评估指南,但其主要关注“应用系统”安全评估(ApplicationSecurityReadinessReview)的过程,是在DISA(DefenseInformationSystemsAgency)的ApplicationSecurityChecklist基础上,增加或者修改了部分内容形成的。关于“业务系统”安全评估和“应用系统”安全评估之间的关系,将在本文第1.1节进行澄清。评估的范围与概念澄清业务系统评估业务系统安全评估应该包含业务系统的所有服务器端组件、以及需要安装或者配置的客户端组件,包含但不限于以下部分:一个全面的业务系统安全评估,应该包含该业务相关的以上各个方面。应用系统评估一般在评估项目中,会同时进行网络架构安全性评估、主机系统安全性评估、安全策略评估等;在这样的情况下,对业务系统的评估,就不必再进行这些部分的评估,侧重于“应用代码或程序”评估即可。所以本文对业务系统安全性评估的论述,侧重于对应用系统安全性评估。评估手段在应用系统安全评估中,应该综合采取以下方式,进行全面的应用系统安全评估:应用系统文档审核;包括应用系统开发、维护文档等,尤其关注其中的和安全性相关的部分;顾问访谈;询问应用系统开发者、系统管理员、普通用户等;一般若用户回答否,则结果为否;若回答是,则应尽可能实际上机验证;系统配置状况检查;实际登陆系统,检查其安全状况;源代码审核;可以针对具体的checklist检查项,在应用系统开发者的配合下,查看相关的源代码实现方式;渗透测试;可以部分采取渗透测试的方式,来检验系统的安全性,比如SQLinjection攻击、跨站脚本测试、口令的暴力破解等;sniffer也是一个好工具;在实际评估工作中,以上有些方式可能无法实现,比如源代码审核、配置文件检查等;这时候可以考虑通过其他方式来进行验证其现状,比如渗透测试。评估实施环境在应用系统安全评估工作中,评估环境一般可以分为测试环境和生产环境。有些评估工作只能在测试环境下面做,否则会对生产有影响,比如缓冲区溢出测试、脚本注入测试等等,不然有可能影响生产系统的正常运行。前提是测试环境下的代码要和生产环境下一致。有些测试要在生产环境下面做,因为有些情况下,具体的配置会产生巨大的影响。软件工程模型对安全评估的借鉴软件工程对信息安全评估工作的借鉴意义在计算机发展史上,在六七十年代,由于“软件危机”的产生,导致了软件工程科学的发展。在信息安全评估工作中,应该分析、借鉴软件工程的相关思想和模型,来提高信息安全评估工作的质量,原因如下:软件发展史上曾经遭遇从个体劳动、作坊劳动向大规模协作劳动的瓶颈,信息安全评估工作可以借鉴软件工程中克服该瓶颈的思想;分析软件工程中的过程和思想,有助于理解改善软件开发过程中安全水平;以业务为核心的全面风险评估对用户要求没有准确完整的认识,就匆忙着手编写程序是许多软件开发失败的主要原因之一。同样,对于信息安全评估工作,对于用户要求、用户现状的全面调查和分析,也是决定信息安全评估工作成败的重要原因。在软件开发过程中,代码编写所占的比例应该相对较小,而前期调研、系统设计应该花较多精力。同样,在信息安全评估工作中,应该有大量的时间是花在前期调研上。用户业务,应该是一切安全评估的基础。组织结构与功能组织结构图在软件工程的开发前期,需要调研企业的组织架构图,比如:组织/业务关系图在软件工程的调研、设计阶段,也需要调研企业的组织架构和业务关系,比如:业务功能表对于企业的应用系统,一般在开发过程中会有相应的业务功能表,比如:组织结构与功能分析对安全评估的借鉴在应用系统安全评估工作中,应该获得以上组织结构图、组织/业务关系图、业务功能表,以获得对用户现状的全面认识。业务流程分析软件工程中的业务流程分析在软件工程中,业务流程分析有助于了解某项业务的具体处理过程,发现和处理系统调查工作中的错误和疏漏,修改和删除原系统的不合理部分,在新系统基础上优化业务处理流程。业务流程图(TransactionFlowDiagram,简称TFD)就是用一些尽可能少的规定的符号及连线来表示某个具体业务处理过程。业务流程图易于阅读和理解,是分析业务流程的重要步骤。安氏现有的业务流程评估安氏现有的或者以前的业务系统流程分析,从部分售前文档中看,侧重于以下方面:1、详细的业务流程2、业务相关性分析是因为用户的维护部门的岗位职责设置通常是根据业务来设置的,用户关心业务系统和业务系统之间的、业务系统各组件(部分)间的安全问题,包括数据交换、权限、包括业务管理上安全要注意的问题等。3、数据流和数据存储方式4、业务流程和拓扑结构的关系业务流程分析对安全评估的借鉴从软件工程中的业务流程分析中借鉴可以看到,在软件工程中的业务流程分析,是准确意义上的业务流程分析。它描述的是纯粹的业务处理过程,是要在应用系统中实现的东西,和计算机系统本身没有直接关系。业务流程分析,对于用户业务的安全性,也有着重要的意义。最明显的例子,比如在银行存取款业务中,只有流程合理才能有效保证资金的安全。在银行存取款业务中,有部分流程可能在应用系统中实现了;而有部分流程未在应用系统中实现。对银行业务安全角度而言,可能这两部分都很重要。比如,银行用户是否会考虑委托专业的会计咨询顾问来做这个工作?在毕马威的ppt中看到,它们宣称有银行业务流程分析这个业务。本文建议我们的业务流程评估,只考虑“在应用系统中实现的部分流程”,即和计算机相关的部分,而不考虑“未在应用系统中实现的部分流程”。因此,在安全评估过程中,有必要对用户应用系统开发过程中产生的业务流程图等业务流程分析结果进行再分析,有以下益处:分析用户业务流程中是否存在逻辑上的安全弱点;有助于了解用户业务流程,为建立应用系统相关的威胁模型打下良好基础;从安氏现有的业务流程评估借鉴分析售前文档中提到的安氏现有的业务流程评估,可以从两个方面看:一方面,这个“业务流程评估”并非是准确意义上的业务流程分析;它涉及到应用系统架构、数据流程、网络拓扑结构、甚至应用系统开发等等各个方面。另一方面,这个“业务流程评估”较多关注用户的实际需求,应该充分借鉴。安氏现有的业务流程评估中,所提到的某些需要关注的问题,比如对数据流、数据存储等因素的考虑,可以在数据流程分析、应用系统安全评估中实现。除此之外,安氏现有的业务流程评估基本可以使用如下的业务系统结构图来表述:该结构图对于业务流程和网络拓扑的相关性分析、数据流程分析、应用系统架构分析都有所帮助。建议在这个业务系统结构图中,要充分表述以下方面:应用系统架构;和其他业务系统的访问关系,需要具体到端口号;外部访问用户的位置;业务功能的实体实现;可以看到,这个业务系统结构图中,包含了应用系统架构图。数据流程分析软件工程中的数据流程分析数据流程分析是把数据在组织(或原系统)内部的流动情况抽象地独立出来,舍去了具体组织机构、信息载体、处理工作、物资、材料等,单从数据流动过程来考查实际业务的数据处理模式。主要包括对信息的流动、传递、处理、存储等的分析。数据流程分析的目的是要发现和解决数据流通中的问题,如:数据流程不畅、前后数据不匹配、数据处理过程不合理等等。数据流程分析可以通过采用分层的数据流程图(DataFlowDiagram,简称DFD)来简单表示。把待解决的问题当作一个整体系统,找出其输入、输出和处理(即:外部项、处理功能、存储数据、数据流向),不考虑其中细节部分,画出第一层数据流图。遵循由上至下、逐步求精的原则,根据业务范围和处理功能,在第一层数据流图的处理框中进一步细划,找出其内部的业务处理关系和数据传输关系,画出第二层数据流图。根据问题的复杂程度按照上述方法逐步分层,直到所需表达的数据都显露出来。如图所示,是一个分层的数据流程图:以下以一个汽车配件厂为例,分析其数据流程图。第一层数据流层图,表述了其和外部实体之间的数据流关系。 第二层、第三层数据流程图,对汽车配件厂内部的数据流程,进行了更细致的表述。数据流程分析对安全评估的借鉴在业务系统安全评估过程中,可以通过对数据流程的分析,发现数据流在产生、传输、存储、处理、输出等过程中所经过的各个环节所可能存在的安全隐患。这种安全隐患,可能是应用系统设计上的问题,也可能是业务系统部署上的问题。一方面,在评估中,软件工程中的数据流程分析及其数据流程图,是一个非常重要、高效的信息来源,应该细致分析。另一方面,软件工程中的数据流程分析及其数据流程图,不能很好满足为安全评估目的的数据流程分析。它比较注重于软件各组件之间的逻辑关系,而安全评估中的数据流程分析,不仅仅要关注各组件之间的逻辑关系,也要关注实现各组件功能的实体。根据评估对象和目的的不同,所绘制的数据流程图可能有所不同。这里,建议可以考虑以下三种粒度的数据流程图:网络架构评估之数据流程图;业务系统评估之数据流程图;应用系统评估之数据流程图;网络架构评估之数据流程图在网络架构安全性评估中,尤其是在大型网络中,网络架构是否合理、网络架构该如何调整、如何实施访问控制,都和网络中的数据流程密切相关,可以考虑采用数据流程图的方式来作为网络架构评估的参考依据。下表是某广域网的数据流分析:可以看到,由于目前该网络上跨全网的应用系统较少,除DNS、电子邮件、WWW等基本网络应用外,只有办公自动化系统、财务系统等几个应用系统运行,所以广域网(城域网)上的流量较少,流向主要是全国中心与各省公司的双向传送,各省公司之间数据传输很少。流量较大的是本部局域网及对Internet的访问。也可以参照软件工程中分层次数据流程图的方式,以分层次的方式,来表述不同层次安全域中数据流程,比如,在第一级安全域中:在第二级安全域中:在第三级安全域中:调查各业务系统之间的数据流所用表格如图所示:在这样的网络架构评估中的数据流程图,一般具体到“业务系统”、“终端”这样的较小的“网段”单位即可满足需求。在这样的评估中,要特别关注外部网络边界、不同维护单位之间网络边界的数据流向,一般这是用户关注的重点。、业务系统评估之数据流程图业务系统评估所使用的数据流程图,可以使用软件工程中的数据流程图。这应该是目前我们在安全评估工作中的重点。应用系统评估之数据流程图在应用系统评估中,尤其是接近于源代码审核的层次,需要使用更细致的数据流程图,包括环境变量、配置数据等。威胁模型在建立了业务流程图、应用结构图、数据流程图以后,可以建立应用系统安全威胁模型,以对应用系统进行全面的、系统的安全性评估分析。应用系统的安全开发过程本章介绍一个软件开发生命周期模型中在安全方面增加责任制和结构性的方法,以供评估用户应用系统开发过程中对安全性的考虑作为参考。教育开发团队应该不断进行安全培训,提高安全意识和安全技能,安全应该是开发团队技术基础的一部分。由于新技术、新的安全威胁不断出现,安全教育也必须不断更新。设计阶段面试时进行安全性考核开发团队在面试的时候应该进行部分安全问题的考核,确定面试人选的安全技术基础。可以优先考虑雇佣具有技术思维倾向的人,他们能够发现不良的设计,了解如何修复它们,并指出如何在设计阶段就解决这些问题。设定产品的安全目标在产品的设计阶段,开发团队应该在需求分析中,综合考虑产品的安全需求,设定产品的安全目标,在需求分析中详细说明。建立威胁模型开发团队应该分解应用程序,绘制完整的数据流程图,确定系统面临的各种安全威胁,并形成相应的解决方案。设置Bug阀值应用程序很难做到完全杜绝Bug,所以应该设立一个较高标准的Bug阀值,只有达到这个阀值才能达到验收标准。安全小组检查在软件工程中,项目成功的重要因素之一在于坚持阶段性评审和复审。在开发过程中,对安全工作,也要坚持进行安全小组检查。开发阶段定义安全的编码准则开发团队应该定义最基本的安全编码准则,包括如何处理缓冲区、如何对待不可靠的数据、如何加密数据等。审查旧的安全问题开发团队在开发过程中,应该不断从过去的错误中吸取教训,防止发生同样的问题。外部安全审查开发团队在开发过程中,可以考虑雇佣专门的外部安全顾问公司来审查代码和计划。安全推动活动开发团队应该定期进行安全推广活动,以提高安全意识、去除编写程序中的坏习惯等。测试阶段在产品的测试阶段,除了对产品功能的测试以外,应该包含对安全性的测试。对于安全性的测试中,不仅仅要对已经设定的安全功能目标进行测试,也要尝试以一个攻击者的各种方式和角度进行攻击测试,确保产品在系统设计和编码上都能够承受攻击。发行和维护阶段响应过程在产品运行以后,有可能不断发现系统的安全缺陷。需要建立适当的响应策略和机制。一旦发现缺陷,就通过标准的修复机制,确定缺陷的严重程度,可以修复到何种程度,以及如何发行修复后的版本。评估前的准备为保证在用户评估现场的工作效率,有些工作应该在到达用户现场前就准备好,包括以下内容:确定用户配合人员和用户确定能够配合评估工作的人员,需要具有以下能力:了解应用系统,能够有效回答评估者的询问;能够提供对源代码的访问,并协助分析源代码;能够提供应用系统相关的开发、维护文档;能够提供超级用户权限的访问界面;能够提供普通用户权限的访问界面;……最终确定的配合人员,一般包括:程序经理、应用开发人员、系统管理员、普通用户、或者其他有足够的知识和权限能够配合评估工作的人员。确定评估的范围和用户确定本次应用系统评估的范围,包括哪些应用、哪些软件、哪些方面等。如前文所述,如果以前在其他工作中进行了主机系统、网络架构等评估,那么这部分工作可以不再进行,但是在最终报告中要涵盖所有的内容。获得应用系统组件的清单获得应用系统架构范围内的所有组件清单,包括网络拓扑图、IP地址信息、OS版本、数据库或者Web版本、第三方中间件版本、库文件或者其他组件等。业务系统介绍会和相关文档可以考虑召开应用系统介绍会,由开发人员、系统管理员介绍应用系统的基本情况,包括应用系统的基本功能、组件架构、部署情况、使用对象、安全设计思想、业务流程等:组织结构图组织/业务关系表业务功能表业务流程图数据流程图业务系统结构图(应用系统架构图)角色/权限矩阵表也应尽可能获得应用系统相关的开发文档、维护文档,比如:开发任务书需求说明书概要设计文档用户界面设计文档用户手册验收报告测试报告源代码建立数据流程图和威胁模型数据流程图一般根据目的的不同,有三种粒度:网络架构评估之数据流程图业务系统评估之数据流程图业务系统评估之数据流程图签署应用系统安全评估申请在应用系统安全评估实施之前,应该向用户提交并签署应用系统安全评估申请,以确保用户认可以下问题:接受评估的范围;接受评估过程中可能带来的操作风险;对物理、逻辑访问用户应用系统的授权;常见应用系统的架构本部分介绍主要的应用系统架构,以及其对于安全性的影响。C/S架构在较早的网络应用系统中,一般采用Client/Server结构,需要在客户端安装客户端程序,直接访问Server。N-tier架构随着Web应用的发展,越来越多的应用系统采用B/S结构,并象N-tier结构发展。应用系统架构和安全性的关系C/S架构中,客户端直接访问数据库,有暴露数据库服务器的弱点。而在N-tier架构中,对数据库的访问可以集中在中间层,中间件向用户屏蔽了数据库服务器。此时可以在网络层限制,只有中间件服务器才能访问数据库服务器,大大提高了安全性。通用应用系统的评估本部分主要介绍通用应用系统(GeneralApplicationsystem)的评估。认证和鉴别这部分主要测试用户或者进程如何进行身份认证。首先应该识别出应用系统中所有涉及认证和鉴别的行为,然后对它们逐个进行测试。本文主要介绍基于PKI的认证和鉴别测试,如果应用系统使用其他的认证和鉴别方式,可以比照执行。是否启用了PKI对于重要的系统,是否启用了PKI?如果配合人员说“否”,则纪录之。如果说“是”,那么对使用了PKI的组件进行实际验证。是否启用了组织统一要求的PKI如果配合人员说“是”,那么进行实际验证。是否识别错误的证书如果系统是基于Web方式的应用,那么可以直接使用revoked、过期的、错误的证书分别尝试登陆。如果系统是非Web方式的应用,那么和配合人员协商,安装相应的客户端,并安装revoked、过期的、错误的证书分别尝试登陆。认证进程是否适当列出应用系统中所有客户认证进程的清单,包括applicationserver与数据库服务器也构成client/sever关系。认证方式一般有:操作系统、数据库、目录服务、认证设备等。在认证过程中,是否存在以下问题:只使用用户名,不需要口令;是否有口令复杂性的策略要求;是否有帐户锁定的策略;用户口令不能更改;以上问题,可以通过查看配置文件、手工测试等方式来验证。是否支持客户端对服务器的认证进行测试。有些认证过程不是用户端触发的,比如后台设备之间的认证。那么可以查看配置文件,或者使用sniffer分析。用户帐户管理这部分主要检查保存的用户帐户可能存在的安全弱点。首先识别应用系统中用户ID保存在哪里。有些应用系统的用户ID可能保存在多个地方。如果应用系统使用操作系统、数据库的内置帐户,那么这部分应该在主机或者数据库安全性评估中已经进行,这里可以标记为NA。用户ID不唯一把用户按ID排序,检查是否存在ID重复的情况。把用户按姓名排序,检查是否存在一个姓名多ID的情况。不活动用户是否禁用超过90天没有登陆的用户,是否禁用?不必要的内置用户是否禁用如果commoncommercialoff-the-shelf(COTS)的软件,使用的内置用户,在其他评估中,已经进行了评估,那么这部分可以忽略。需要注意这些不必要的内置用户是否必要?尤其当它们是超级用户的时候。用户ID是否有默认的或者弱口令应该尝试应用系统广为人知的默认口令。或者使用bruteforce进行弱口令暴力破解。数据保护本部分主要检查数据在存贮、传输过程中的安全性,主要是读写权限、加密算法的问题。这部分依赖于数据流程图。敏感数据不适当地存储敏感数据需要有适当的权限保护,只有管理员、应用或者操作系统进程有权限进行读写。对于帐户数据库的本地备份,也应该检查其权限设置。其他用户对敏感数据、尤其是用户帐户数据文件的读或者写,都是危险的。可以参考passwd~shadow的权限设置。口令需要被加密,可以查看配置文件是否启用了加密功能。如果认证数据是可读的,看看它是否明文,或者脆弱的加密方式。也可以审核源代码,检查对加密函数的过程调用,启用了什么样的加密功能。如果应用系统中使用key进行认证,列出server中key的清单,并抽样检查。注意key文件的权限,一般用户或者进程不应该有写的权限。识别是否有不必要的用户或者应用进程(它在用户的背后读)对keys有读的权限。对于非公开的用户数据,询问配合人员它们存储在何处,及如何保护。用户的权限不应该超过最小授权的原则。注意全局权限,或者非管理员的组权限。敏感数据传输中没有适当的保护数据可以分成可以分成I&A和非I&A数据。所有的I&A数据在存储、传输过程中必须进行加密。检查系统是否使用telnet、ftp、basichttp等协议进行明文验证。如果是,那么是否在低层次的协议中进行了加密?比如IPSEC、L2TP、PPTP或者链路层加密。如果应用和数据库在同一台机器上,那么传输过程中无需加密。对于非I&A数据,也应该根据重要性、是在内网还是internet传输,来考虑其安全性。使用未经验证的加密算法列出应用系统中所有使用加密组件的清单,比如文件加密、VPN、SSH等。检查是否使用了未经验证的加密算法。这样的加密算法,安全性无法保证。审核没有适当纪录安全相关的事件至少,以下事件应该被纪录:启动和关闭;认证事件;授权用户对数据的受控访问;不成功的访问企图;删除数据;应用配置更改;……授权事件要保存请求的原始信息,比如IP地址等;删写事件,应纪录删或者写的数据对象的名称;纪录机制可以和操作系统、web、database、应用结合在一起;但是,要注意是否易读的问题,不能只有开发者可读。日志的备份问题?日志将满没有警告检查应用文档或者询问用户是否有此功能?通过配置文件确认之。日志存在未授权删除、修改、泄露等漏洞检查日志文件的权限,是否存在以上问题。应用操作基于角色的访问控制没有加强责任分离应该考虑以下分离:日志管理者~其他管理者;设置访问控制规则的人员~访问数据、编写程序的人员;如果应用中实施了分开,则可能使用的安全配置界面不同,或者使用不同的账号登陆。应用在执行操作之前没有进行授权授权机制可能包括文件权限、数据库、应用代码等。如果是在应用代码中,让开发者locateto相关代码,细细检查。如果使用文件权限、数据库的方式,注意Everyone、world、public、guest等用户或者组。进程运行的权限过高识别应用运行使用的账户。Windows中可以在“服务”中查看;Unix在ps–ef;n-tier结构,可能看连接数据库所使用的账户。如果使用administrator、uid=0、sa或者system等权限,都是安全隐患。搜索文件系统,看看有没有以运行进程所使用的用户为所有者的文件或者目录。若有,则它能改写这些文件了。应用没有对session的限制询问配合人员每个用户或者进程ID会话数目的限制;以及会话空闲的最大时间。可以检查配置文件、源代码进行验证。许多时候,配置文件、源代码可能都看不到。这些和DoS攻击有关。有时候测试会比较困难,比如idlelimits太长;这也可以作为一个结果记录下来。应用修改在应用的范围之外的文件搜索最近一周、一天内修改过的文件。看看有没有在应用的范围之外的文件。用户绕过用户界面直接修改资源检查系统开放的服务、防火墙或者路由器的访问控制措施,从而确定“威胁界面”的大小。如果是Web应用,可以尝试是否存在授权机制绕过的问题。可以询问管理员是否存在直接修改数据库的问题。生产环境下应用配置应用和支持库中包含从未激活的代码询问是否存在删除从未执行的代码的记录在案的过程。对于web应用,应包括asp、html等。对于数据库,应该包含存储过程。对于C/S结构或者分布式的应用,应该包含VB、C等开发语言模块。或者可以直接通过文件被浏览的时间来发现这个问题。应用代码和数据在相同的目录中它们不应该相同的目录中。安装源代码保存在服务器中这很危险,有可能被攻击者下载。应用的环境中同时使用了不必要的软件或者服务应该专机专用。影响控制网络架构不适当应该通过DMZ、内部访问控制等措施,减小应用中一台服务器被攻击对其他系统的影响。没有灾难恢复计划如果该应用是整个灾难恢复计划中的一部分,确保计划中包含详细的指导。备份或者备份程序不完备确保对应用数据、底层OS和应用组件都进行了备份。没有确保应用日志可以长时间保存的流程建议保存至少半年以上。敏感数据未经修改地直接导入测试环境应用配置和授权应用未恰当设置Banner信息会话结束后应用在客户端保存认证凭证可以搜索文件系统查找最新的文件。比如使用cookie作为凭证。检查cookie中是否包含用户名或者口令等敏感信息。其他的手段保存用户信息,也要注意。普通用户可以执行超级用户权限使用普通用户登陆,看看用户界面(图形的、web或者命令行)是否包含超级用户功能,比如:创建、删除用户帐号或者组;配置帐户锁定策略;更改其他用户的口令或者证书;设定应用如何应对错误请求;……应用没有明显的logout的办法即使有,不明确或者不好找,也是一个问题。认证凭证或者敏感数据在代码中保存审核源代码(包括global.asa)、脚本(注意数据库的备份角本)、HTML表单等,检查包含口令、证书、敏感数据的代码。如果找到了,注意文件的权限。即使编译在可执行文件中也不安全。应用代码包含无效的网络资源引用基于代码的因素这部分检查都需要审视应用代码,并且最好在测试系统上进行验证。应用的进程在终止前没有从内存或者磁盘中删除临时对象应该从内存中释放临时对象,也应该保证数据库的连接被关闭。可以进入程序进行选定的动作,然后退出,搜索最新创建的文件。在windows下,可以使用搜索。在unix下:#touch-t200301211020/tmp/testdatefile#find/-newer/tmp/testdatefile应用没有充分验证用户输入询问配合人员应用的测试计划。检查测试计划中包含对无效输入的检查,包括脚本标签、查询字串、SQL命令、无效的数据类型和大小等。可以进行查询字串伪造、脚本嵌入、SQLinjection、无效的输入大小或者类型等等攻击。划中是否包含了对缓冲区溢出的测试。可以输入大量的数据进行测试:在数字字段输入非常巨大的数字;正数、负数测试;对文本字段进行超过1M数据的输入;对于web的查询字符串,至少输入500个字符;如果出错,说明没有进行边界检查。应用直接暴露出错信息应用应该有出错处理进程,不能仅仅依赖内部系统的错误处理功能。如果应用不处理错误,而仅仅被底层系统处理,这是一个问题。尤其是,错误信息中不能包含变量名、变量类型、SQL字串、或者源代码等。这会导致进一步的攻击。应用失败能够导致不安全的状态检查测试计划中是否包含了对应用失效的测试。基于Web应用系统的评估本部分主要介绍基于Web的应用系统的评估,它仍然遵从第6章“通用应用系统评估”的要求,但是有Web应用系统的一些特点。本部分主要针对这些特点进行评估。认证机制认证机置是Web应用安全的第一步。一般会要求登陆用户输入用户名和口令等。验证代码可下载个别比较简单的Web应用程序使用的身份验证机制,会把验证代码、甚至用户名和口令直接下载到客户端执行。包括JavaApplet、可下载的JavaClass,或者其他下载到本地执行的验证代码,比如exe文件、flash文件等。这样的验证机制,都很容易被攻击者在本地进行破解。HTTP认证如果应用系统使用HTTP认证,一般包括以下认证方式:basicauthentication;digestauthentication;IntegratedWindows;其中,digestauthentication和IntegratedWindows使用Chap机制,口令不在网络中传输,安全性较高。而basicauthentication方式中,口令在网络中传输,仅仅进行了base64编码,而没有进行加密,很容易受到窃听攻击。可以考虑使用SSL方式保护。表单认证大部分应用系统使用表单进行认证,通过<FORM>、<INPUT>等标记进行身份验证输入。对于这类身份认证,要注意输入验证、会话ID欺骗等攻击。下文会详细论述。授权认证一般决定用户是否可以登陆系统;而一旦用户登陆了系统,它可以访问系统的哪些部分?则是由授权来决定。攻击种类水平权限提升比如,一个ID=12345的普通用户,登陆电子银行网站后,能否访问ID=23456或者其他ID的用户信息?垂直权限提升比如,一个ID=12345的普通用户,登陆电子银行网站后,能否访问具有管理员权限才能访问的信息?目录遍历一般,应该限制用户只能访问Web站点根目录以内的内容。如果系统出现误配置,则有可能进行目录遍历,访问服务器上的任意文件。角色矩阵在角色矩阵(rolematrix)中,可以清晰的看到不同角色的用户,可以执行什么样的动作,以及怎样执行、需要什么样的权标。通过角色矩阵,可以尝试进行各种授权绕过的测试。常见攻击手段querystring可以直接通过修改querystring来进行授权绕过,比如/profile/view.asp?uid=TB12345,修改为/profile/view.asp?uid=MS88888,或者其他uid。如果应用系统使用POST方法,而不是GET方法,同样存在这个问题。只是需要修改Content-Length的值。其他攻击手段对于授权的其他攻击手段,和对于“会话状态管理”的手段一致,请参见下一节。会话状态管理应用系统使用什么机制来作为会话状态管理的手段?HTTP协议本身没有这样的机制。因此,HTTP协议是一种“无连接”的协议。URL直接绕过如果应用系统没有很好的授权、会话状态管理机制,则可能受到URL直接绕过攻击。比如,正常情况下,用户需要经过认证后,方能访问某页面。但是如果授权、会话状态管理机制存在问题,那么攻击者可能通过猜测URI路径来直接访问该页面。著名的CiscoIOS的http://*.*.*.*/level/NN/exec/showconfig漏洞就是这样的例子。hidden字段其可以直接被用户修改,没有安全性可言。HTTPReferer头标其可以直接被用户修改,没有安全性可言。Cookie或者sessionID需要关注cookie或者sessionID中,是否包含了敏感信息?比如,有的cookie中直接包含了用户名和口令。cookie中,是否进行了加密?有的cookie仅仅进行了base64等编码。那么有可能别窃听或者篡改。cookie或者sessionID是否设置了超时时间?cookie或者sessionID是否随即产生,是否容易被预测?输入验证应用系统是否对用户输入进行了细致的校验?每一个来自用户输入的源头,都有可能成为攻击的来源。尤其是GET、POST请求。也要注意其他输入,比如环境变量、配置文件、来自数据库的数据等。输入验证攻击的种类不对用户输入进行验证,是许多攻击的来源,包括:缓冲区溢出攻击;shellinjection攻击;跨站脚本攻击;SQLinjection攻击;文件上传漏洞;数值边界校验;……其中,SQLinjection、跨站脚本攻击,将有专门章节论述,这里只论述其他攻击手段。缓冲区溢出攻击如果用户应用系统没有进行有效的校验,则可能受到缓冲区溢出攻击。测试手段请参见“通用应用系统评估”中的相关论述。如果攻击导致Web应用出现错误,可能产生core文件,其中包含重要的比如口令等敏感信息,可能被攻击者通过http的方式下载。shellinjection攻击如果应用系统使用shell编写CGI,并且没有对用户输入进行有效验证,则可能受到shellinjection的攻击。比如,/search.sh?file=hello.txt;/bin/ls或者用户端支持SSI、ASP、PHP等脚本,用户可能直接输入相关命令,在服务器上执行,导致安全问题。文件上传漏洞如果Web应用系统支持用户上传文件,并且没有进行有效的校验,则攻击者可以上传backdoor.asp后门程序。或者即使应用程序进行了文件后缀的校验,但是被攻击者通过以%00作为ASCII码来添加空格绕过。数值边界校验如果应用系统没有进行有效的数值边界校验,则存在安全隐患。比如,电子商务网站中购买商品的数量为负数,会发生什么结果?客户端验证脚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论