软件安全实验指导书
目录
实验一 GINA编程实验 .................................................................................................................. 1
实验二 信息系统安全实验 ........................................................................................................... 5
实验三 软件安全测试实验 ....................................................................................................... 10
实验四 安全代码实验 ................................................................................................................. 18
实验五 TAM2应用实验 ................................................................................................................ 24
实验一 GINA编程实验
实验所属系列: 实验对象:本科 相关课程及专业:软件安全,软件工程,信息安全
实验类型:公共基础 实验时数(学分):4
一、实验目的
了解WINDOWS操作系统的安全机制,掌握在WINDOWS环境下应注意的主要安全问题,了解软件系统安全的的主要设计理念。
了解WINDOWS系统中WinLogon和GINA实现安全登录控制的机制,掌握改变WINDOWS登录机制的方法。
二、实验内容与要求
1)实验基础(必要的基础知识)
实现WindowsNT/2000/XP安全模型的安全子系统的一些组件和数据库如下:
(1) 安全引用监视器(SRM):是WindowsNT执行体
(NTOSKRNL.EXE)的一个组件。它负责执行对象的安全访问的检查,处理权限(用户权限)和产生任何的结果安全色审计消息。
(2) 本地安全认证(LSA)服务器:是一个运行映像LSASS.EXE的用户态进程,它负责本地系统安全性规则(例如允许用户登录到机器的规则,密码规则,授予用户和组的权限列表以及系统安全
性审计设置)用户身份验证以及向“事件日志”发送安全性审计
消息。
(3) LSA策略数据库:是一个包含了系统安全性规则设置的数据库。该数据库被保存在注册表中的:
HKEY_LOCAL_MACHINE\security下。它包含了这样一些信息:那些域被信任用于认证登录企图;那些用户可以访问系统以及怎
样访问(交互、网络、服务器登录方式)谁被赋予了那些权限;
执行的安全性审计的种类。
(4) 安全帐号管理服务:是一组负责管理数据库的子例程。这个库包括定义在本地机器上或用于域(如果系统是域控制器)的用户名
和组。SAM在LSASS进程的描述表中运行。
(5) SAM数据库:包含定义用户和组以及它们的密码和属性的数据库,它保存在HKEY_LOCAL_MACHINE\SAM下的注册表中。
(6) 默认身份认证包:被称为msv1_0的动态连接库DLL在进行
Windows身份验证的LSASS进程的描述表中进行,它负责检查
给定的用户名和秘码是否和SAM库中指定的相匹配,如匹配,
返回该用户的信息。
(7) 登录进程:是运行在WINLOGON.EXE的用户态进程,它负责搜寻用户名和密码。将它们发送给LSA用以验证它们。并在用
户会话中创建初始化进程。
(8) 网络登录服务:是一个响应网络登录请求的SERVICES.EXE进程内部的用户态服务。身份验证同本地登录一样,是通过把它们
发送到LSALL进程来验证的。
关于GINA编程:
登录是通过登录进程(WinLogon),WinLogon是一个受托进程负责管理与安全性相关的用户相互作用。它协调登录时启动用户外壳,处理注销和管理各种与安全性相关的其他操作包括登录是输入口令,更改口令以及锁定和解锁工作站。WinLogon进程必须确保与安全性相关的操作对任何其他活动的进程是不可见的。例如:WinLogon保证非受托进程在进行在进行这些操作中的一种是不能控制桌面并由此获得访问口令。WinLogon是从键盘截取登录请求的唯一进程,它将调用LSA来确认试图登录的用户。如果用户被确认,那么该登录进程就会代表用户激活一个登录外壳。登录进程的认证和身份验证都是在名为GINA(图形认证和身份验证)的可替换DLL中实现的,标准
Windows2000 GINA.DLL——MSGINA.DLL实现了默认的Windows登录接口。但是,开发者们可以使用他们自己的GINA.DLL来实现其他的认证和身份验证机制,从而取代标准Windows用户名/口令的方法。另外,WinLogon还可以加载其他的网络供应商的DLL来进行二级身份验证。该功能能够使多个网络供应商在正常登录的过程中同时收集所有的标示和认证信息。
2)实验步骤
第1步:打开MSDN,选中Platform SDK;
第2步:查找Platform SDK中GINA的相关内容;
第3步:完成文档,《GINA及其开发方式》;
第4步:使用Visual C++,编写自己的GINA.DLL;
第5步:备份WINDOWS系统的MSGINA.DLL;
第6步:装载所开发的GINA.DLL;
第7步:重启WINDOWS,验证GINA.DLL;
第8步:卸载GINA.DLL,恢复系统。
3)实验注意事项
(1) 本实验的文档部分在课下完成;
(2) 注意开发完成的GINA.DLL在实验完成后必须恢复系统。
三、实验开设方式
1) 小组实验,每组3人;
2) 无实验内容讲授;
3) 文档制作的内容在课下完成。
四、实验设备与环境
1)基本环境要求
计算机实验室,40台以上计算机。
2)最低设备要求
硬盘:10G以上;
内存:512M以上;
CPU:INTEL,讯驰或酷睿平台
3)系统平台要求
WINDOWS XP。
4)软件、硬件及相应工具要求
Visual Studio .Net或者Visual C++6.0;
MSDN。
五、实验评分标准
1)评分标准(A优秀、B良好、C中等、D及格、E不及格)
A:实现完整的身份认证功能,正常实现GINA登录控制,正常恢复系统,文档制作规范。
B:实现GINA的替换,并且自己开发完成代码,正常恢复系统,完成文档设计。
C:了解GINA的机制,实现GINA的替换,完成文档设计。
D:了解GINA机制,完成文档设计,文档规范。
E:提交文档,文档不规范。
2)测评方式
实验课程中检查实验结果;
课下提交文档和报告;
按照成绩等级进行评定。
六、实验开发教师
郭建东
实验二
实验所属系列:信息系统安全实验 实验对象:本科
相关课程及专业:软件安全,软件工程,信息安全
实验类型:公共基础 实验时数(学分):4
一、实验目的
掌握信息系统的安全需求,充分了解MIS的登录控制机制,掌握登录控制在信息系统中应完成的主要内容是需要的数据,了解信息系统登录控制开发的主要方式。
二、实验内容与要求
1) 实验基础(必要的基础知识)
系统是按照一定的结构组织起来的、完成某种功能目标的多种相互作用、相互依存的元素组成的一个有机整体。系统的主要特性可以概括为:○1整体性—系统的各个部分一定以整体目标为目标,追求全局最优;○2目的性—一个系统一定是具有明确目标的,并完成一定的功能;○3层次性—一个系统可以分为若干层次和子系统;○4边界性—每一个系统都能够明显地区别于其他系统,系统之间有明确的界限;○5关联性—系统包括若干元素,元素之间存在一定的关联性;○6环境性—系统处于一定的环境之中并受环境影响。
而IS的主要特征包括:○1一定是依赖于计算机的;○2涉及了计算机的软件和硬件;○3实现数据的采集、传递、加工、处理功能。
在一个信息系统的实施过程中,有一些非常典型的问题[3,4,5],通过对文献[3,4,5]的研究并结合工程经验,可以看到对一个信息系统的安全威胁来自于系统的内部和外部:○1外部的恶意攻击者;○2外部的意外闯入者;○3内部的合法授权用户;○4内部不当获得授权的用户。
在系统实施中,IS的安全问题常常体现为:○1如何使经理或管理者消除对敏感信息失密的顾虑?○2系统管理员是否可信?○3系统第一次如何启动?即如何使用户获得第一次权限?○4如何建立一个可信的口令机制?○5如何确认某个操作人员的行为?
在登录控制界面,完成的主要功能包括:○1口令验证;○2口令修改;○3口令数据的加密;○4登录时间记录。
关于登录控制的设计主要考虑:
(1) 用户ID
输入用户ID,从权限数据中提取出相应的用户名。采用用户编号的原因是回避重名,简化输入,同时用户号本身也可以增加一定的安全性。
(2) 用户修改口令,而不是系统管理员
系统管理员对用户授权,但是口令由用户在用户界面输入,并加密存储至后台数据库中,以避免系统管理员获取用户口令造成泄密。
(3) 初始口令的安全
系统的第一次运行关键是初始口令的赋予,由信息主管(或其他高层)完成用户身份的确认,同时要求用户第一次登录时必须更改初始口令。
(4) 口令安全
系统口令安全机制要求:○1口令长度限制;○2口令字符集限制;○3口令有效期限制。
(5) 用户封锁
当出现用户多次登录系统失败的情况时,系统将锁定用户的操作并提示,解锁过程必须由系统管理员完成。
2) 实验步骤
第1步:设计和登录控制相关的数据库,写出数据库设计文档; 第2步:利用ACCESS构建数据库;
第3步:配置ODBC数据源,作为访问数据库之用;
第4步:利用Visual Basic或者Visual C++开发系统登录窗口; 第5步:同上,开发完成后台数据库管理窗口,实现权限管理; 第6步:验证登录过程,检查数据库中的登录数据。
第7步:完成实验报告,写出自己的设计思路和对信息系统权限及登录控制内容的考虑,写明自己设计的理由。
3) 实验注意事项
(1) 数据库的设计应该在课下完成;
(2) 文档的写作在课下完成,注意提交;
(3) 建议采用Visual Basic实现,开发效率较高。
三、实验开设方式
1)小组实验,建议每组人数3人;
2)无实验授课;
3)无实验占有时间。
四、实验设备与环境
1)基本环境要求
计算机实验室,40台以上计算机。
2)最低设备要求
硬盘:10G以上;
内存:512M以上;
CPU:INTEL,讯驰或酷睿平台
3)系统平台要求
WINDOWS XP。
4)软件、硬件及相应工具要求
Visual Studio .Net或者Visual Basic6.0或者Visual C++6.0;
五、实验评分标准
1)评分标准(A优秀、B良好、C中等、D及格、E不及格)
A:实现完整的权限管理过程和登录验证过程,代码完整,文档规范。
B:实现登录验证过程,设计有欠缺,代码完整,文档规范。
C:有自己完成的代码,登录验证过程步完整,文档规范。
D:有自己完成的代码,文档全面。
E:有自己完成的代码,有书写的文档。
2)测评方式
实验课程中对设计结果进行验证,文档在课下提交。
六、实验开发教师
郭建东
实验三 软件安全测试实验
实验所属系列: 实验对象:本科 相关课程及专业:软件安全,软件工程,信息安全
实验类型:公共基础 实验时数(学分):4
一、实验目的
了解软件测试的方法和技术,掌握软件安全测试的基本概念和方法,掌握软件安全测试报告的写作和软件风险/威胁分析报告的写作方法。
二、实验内容与要求
1) 实验基础(必要的基础知识)
DREAD模型是进行威胁程度级别分析的有效技术,由Michael Howard 和David Leblanc在《编写安全的代码》提出。
DREAD:
潜在的破坏(Damage potential)
再现性(Reproducibility)
可利用性(Exploitability)
受影响用户(Affected users)
可发现性(Discoverability)
利用DREAD模型对威胁分级的考虑:
潜在的破坏
如果该漏洞被利用,所产生的破坏程度。
再现性
探测并利用该漏洞所需要的努力要多久。
可利用性
是否需要身份鉴别?
需要身份鉴别
不需要身份鉴别,但需要难以确定的知识 不需要身份鉴别,也不需要特殊的知识
受影响的用户
漏洞利用的影响面有多大?
仅仅是特殊的配置 普通情况 默认用户或者大多数用户
可发现性
漏洞研究人员或黑客找出该漏洞的可能性。
TRAP模型是进行漏洞分级的另外一种方法,基于可利用性提出。 TRAP模型中包括因素:
时间(Time) 可靠性(Reliability)/再现性(Reproducibility) 访问(Access) 定位(Positioning)
利用TRAP模型对威胁分析:
时间:某些漏洞可能需要长时间的探测并利用。如加密漏洞需要数千年的时间计算才能利用,表示该漏洞的风险非常低。 可靠性/再现性:漏洞的严重程度依赖于该漏洞可被攻击者利用的可靠性或再现性。通常高级别漏洞的可靠性和可再现性高。 访问:利用漏洞通常可以为攻击者提供更高的访问权。 定位:利用一个漏洞,攻击者必须能够与存在该漏洞的应用程序交互,并能访问到含有该漏洞的代码。
安全测试的目标是在给定的时间和资源不变的情况下,尽可能多地找出最为严重的安全缺陷。
威胁建模=风险建模
软件测试中基于风险的测试是软件测试的保证安全性的常规方法。
基于风险的测试步骤如下:
Step1 信息搜集
Step2 威胁(风险)建模
Step3 可用性分析
Step1 信息搜集:
信息搜集的目的:
– 熟悉程序的设计
– 了解程序访问入口点位置
– 了解程序所涉及的信息资产-需要保护的信息
信息搜集的方法:
– 程序设计文档的评审
– 与设计人员和架构师会谈
– 运行时分析-使用调试和诊断程序
与架构师会谈是搜集信息的有效方法,与架构师会谈内容:
了解系统组件框架
了解组件之间的主要数据流
了解来自系统进程空间之外的数据流-程序外的数据是非受信数据,可能是攻击性输入
可能的外部数据流:
网络I/O 远程过程调用(RPC) 外部系统查询:域名系统(DNS)、数据库查找、轻量级目录访问协议(LDAP)
文件I/O 注册表 命名管道,互斥、共享内存 WINDOWS 消息
其他的操作系统调用
要求架构师对外部数据流给予说明:
数据流的目的
是否进行了输入检查?白名单还是黑名单?
有没有与数据流结合的身份鉴别或会话管理?
是否有反拒绝服务攻击的保护措施?
Step2 威胁建模:
进行威胁建模的目的是排定测试优先级,找出测试区域,发现系统弱点。关于威胁建模的参考资料:
《Thread Modeling》,Frank Swiderski,Window Snyder,Microsoft公司
《Application Consulting and Engineering,ACE》
进行威胁建模的步骤:
识别威胁路径
识别威胁
识别漏洞
将漏洞分级/排定优先级
威胁建模步骤1-识别威胁路径:
识别威胁路径的目的:识别应用程序级别最高的风险领域,确定相应的保护措施。
识别威胁路径的步骤:
① 了解应用程序平台和编程语言的整体强度
② 确定用户的访问类别
③ 建立并分析数据流图
威胁建模步骤2-识别威胁:
识别威胁的目的:深入识别沿威胁路径的处理,逐一理清与处理相关的每一种威胁。
针对威胁路径的每一个处理组件的问题列表:
– 该组件执行什么样的处理
– 该组件如何确定身份
– 该组件信任数据或者其他组件吗
– 该组件修改了什么数据
– 该组件有何外部连接
在一个威胁路径上的高风险活动:
① 数据解析
② 文件访问
③ 数据库访问
④ 生成子进程
⑤ 身份鉴别
⑥ 授权
⑦ 同步或会话管理
⑧ 处理私密数据
⑨ 网络访问
威胁建模步骤3-识别漏洞:
目的:找出可能存在于组件中的实际漏洞。
对漏洞的可能缓解措施:
– 数据验证测试
– 资源监视
– 关键功能的访问控制
搜寻漏洞的方法及途径:
– 安全设计审查
– 安全代码审查
– 安全测试
威胁建模步骤4-风险分级:
DREAD模型:
– Damage potential 潜在的破坏
– Reproducibility 再现性
– Exploitability 可利用性