第 1 章 计算机信息系统安全概述

210

Click here to load reader

Upload: rowena

Post on 13-Jan-2016

121 views

Category:

Documents


18 download

DESCRIPTION

第 1 章 计算机信息系统安全概述. 1.1 计算机信息系统的定义 1.2 计算机信息系统安全简介 1.2.1 计算机信息系统安全的定义 1.2.2 信息系统自身的安全脆弱性 1.2.3 对信息系统安全的威胁 1.3 Windows 信息系统安全机制简介 1.3.1 Windows 2000 安全机制简介 1.3.2 SQL Server 2000 安全机制简介 1.4 Windows 信息系统面临的安全威胁 1.4.1 安全威胁之系统破解 1.4.2 安全威胁之计算机病毒 1.4.3 安全威胁之恶意攻击. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 1 章  计算机信息系统安全概述
Page 2: 第 1 章  计算机信息系统安全概述

第 1 章 计算机信息系统安全概述1.1 计算机信息系统的定义1.2 计算机信息系统安全简介1.2.1 计算机信息系统安全的定义1.2.2 信息系统自身的安全脆弱性1.2.3 对信息系统安全的威胁1.3 Windows信息系统安全机制简介1.3.1 Windows 2000 安全机制简介1.3.2 SQL Server 2000 安全机制简介1.4 Windows信息系统面临的安全威胁1.4.1 安全威胁之系统破解1.4.2 安全威胁之计算机病毒1.4.3 安全威胁之恶意攻击

Page 3: 第 1 章  计算机信息系统安全概述

1.1 计算机信息系统的定义

信息系统是指用于采集、处理、存储、传输、分发和部署信息的整个基础设施、组织结构、人员和组件的总和。

信息系统 ( Information System )是指由计算机及其相关和配套的设备、设施(含网络)构成的,按照一定的应用目标和规则对信息进行采集、加工、存储、传输、检索等处理的人机系统。

Page 4: 第 1 章  计算机信息系统安全概述

1.2 计算机信息系统安全简介

1.2.1 计算机信息系统安全的定义 信息系统安全定义为:确保以电磁信号为主要形式的、在计算机网络化(开放互联)系统中进行自动通信、处理和利用的信息内容,在各个物理位置、逻辑区域、存储和传输介质中,处于动态和静态过程中的机密性、完整性、可用性、可审查性和抗抵赖性,与人、网络、环境有关的技术安全、结构安全和管理安全的总和。

Page 5: 第 1 章  计算机信息系统安全概述

1.2.2 信息系统自身的安全脆弱性 1 .硬件组件

2 .软件组件

3 .网络和通信协议

信息系统硬件组件的安全隐患多来源于设计,主要表现为物理安全方面的问题。

软件组件的安全隐患来源于设计和软件工程中的问题。

( 1 )缺乏对用户身份的鉴别( 2 )缺乏对路由协议的鉴别认证( 3 ) TCP/UDP 的缺陷

Page 6: 第 1 章  计算机信息系统安全概述

1.2.3 对信息系统安全的威胁 1 .基本威胁( 1 )信息泄露( 2 )完整性破坏( 3 )服务拒绝( 4 )未授权访问2 .威胁信息系统的主要方法( 1 )冒充( 2 )旁路控制( 3 )破坏信息的完整性攻击者可以从以下三方面破坏信息的完整性:篡改:改变信息流的次序、时序、流向、内容和形式。删除:删除消息全部或其中一部分。插入:在消息中插入一些无意义的或有害的消息。

Page 7: 第 1 章  计算机信息系统安全概述

( 4 )破坏系统的可用性( 5 )重放( 6 )截取和辐射侦测( 7 )陷门( 8 )特洛伊木马( 9 )抵赖3 .威胁和攻击的来源( 1 )内部操作不当( 2 )内部管理不严造成系统安全管理失控( 3 )来自外部的威胁和犯罪① 黑客② 信息间谍③ 计算机犯罪

Page 8: 第 1 章  计算机信息系统安全概述

1.3 Windows 信息系统安全机制简介

1.3.1 Windows 2000 安全机制简介 Windows NT 4.0 的不足 Windows NT 应用于企业级服务时,如果不使用那些繁冗的附加软件产品,便无法提供分布式 SSO (单点登录)服务。委派功能(将针对限定账号集合的有限管理优选权指派给另一用户的能力)则更是少得可怜。同样无法借助平面化 Windows NT 域就组织层次和管理结构进行适当规划。 Windows NT 4.0 也没有为和用户账号有关的应用程序专用信息提供存储位置。而 Windows NT 所具备的 PKI 功能(最多只能算雏形状态)则仅被限定于 Web 环境,并只能面向基于 Microsoft Exchange Server 的通信任务提供部分支持,但 PKI 功能本身却没有实现全面集成化。

Page 9: 第 1 章  计算机信息系统安全概述

首先, Microsoft 在围绕 Win2K 展开设计工作的过程中,秉承了多项旨在弥补 Windows NT 4.0 自身缺陷的技术意图,该公司将这种操作系统定位于终极电子商务支持平台。

其次, Win2K 在很大程度上依赖于行业标准和相关协议。

再次, Microsoft 还需要提供一个有助于降低应用程序开发成本的软件系统平台。

最后,为应对电子商务所提出的挑战, Win2K已具备了在整个操作系统内面向PKI 提供技术支持的能力。

Page 10: 第 1 章  计算机信息系统安全概述

1 . AD组件AD堪称Win2K操作系统的旗舰级组件,主要用来克服 Windows NT 4.0 在目录功能方面存在的伸缩性、扩展性、开放性和管理能力问题。

AD 为操作系统存储账号及控制策略信息。

AD依赖操作系统控制对 AD 对象的访问。操作系统对 AD 中对象强制实施许可进入。

操作系统的授信信息存放在 AD 中。

Page 11: 第 1 章  计算机信息系统安全概述

2 . CryptoAPI 组件CryptoAPI 的设计目标在于,面向基于使用可安装加密服务提供程序之操作系统的全部应用程序及其他相关组件提供针对低级加密服务的一站式“采购”模式

Applications

Certificate Server

Smart Card Service

EFS

Authenticode

Secure Channel

Exchange KM

CSP

Crypto Service

Certificate Management

Service

CryptoAPI

CryptoAPI为应用程序提供一站式“采购”服务

Page 12: 第 1 章  计算机信息系统安全概述

3 .证书服务器证书服务器,主要用来针对证书的申请、签发、公布和管理任务提供 CA所应具备的基本功能特性。

证书服务器可面向 Exchange Server 提供许可证码身份验证和安全 MIME ( S/MIME )集成特性 。

管理人员必须为针对证书服务器配置实施操控而以手工方式就文本文件进行编辑。证书服务器缺乏对于 PKI 企业级使用需求来说是至关重要的管理特性。证书服务器具备在其他第三方目录中实现证书发布的能力。

Page 13: 第 1 章  计算机信息系统安全概述

4 .身份验证服务SSPI ( Security Support Provider Interface )将通过另一种 API 提供身份验证服务。客户端 /服务器应用程序不仅需要对访问服务器的客户端执行身份验证,而且,有时甚至需要对访问客户端的服务器实施验证。

SSPI 在身份验证服务中所扮演的角色

Page 14: 第 1 章  计算机信息系统安全概述

5 .加密服务Win2K所配备的 EFS 则允许你仅仅通过选中一个复选框的简单操作即可在文件系统层对相关文件进行加密。 EFS 可借助面向用户和应用程序的完全透明度对加密和解密任务进行处理。

Win2K主要凭借 IPSec面向用户和应用程序提供充分透明度,进而跨越网络系统对数据资料加以保护。 IPSec 可面向 TCP/IP通信提供身份验证、机密性、数据完整性和筛选服务。

IPSec’s Place in the Win2K Architecture

Policies

Hashing

Encryption

Key generation

IPSec

Active

Directory

CryptoAPI

IPSec 在 Win2K体系结构中所处位置

Page 15: 第 1 章  计算机信息系统安全概述

1.3.2 SQL Server 2000 安全机制简介

SQL Server是Microsoft 公司开发的大型数据库软件,Microsoft为 SQL Server 建立了一种既灵活又强大的安全管理机制, SQL Server的安全机制是与下层的 Win2K操作系统结合在一起的,它能够对用户访问 SQL Server服务器系统和数据库的安全进行全面的管理。

1 .验证方法选择 验证是指检验用户的身份标识;授权是指允许用户做些什么。构造安全策略的第一个步骤是确定 SQL Server用哪种方式验证用户。

Page 16: 第 1 章  计算机信息系统安全概述

2.Web环境中的验证IIS 5.0 ,可以用四种方法验证用户 :第一种方法是为每一个网站和每一个虚拟目录创建一个匿名用户的 Win2K账户 ;第二种方法是让所有网站使用 Basic 验证 ;

在客户端只使用 IE 6.0 、 IE 5.0浏览器的情况下,你可以使用第三种验证方法。你可以在 Web网站上和虚拟目录上都启用Win2K验证 ;第四种方法是如果用户都有个人数字证书,你可以把那些证书映射到本地域的 Win2K账户上。

Page 17: 第 1 章  计算机信息系统安全概述

3 .设置全局组

构造安全策略的下一个步骤是确定用户应该属于什么组。

控制数据访问权限最简单的方法是,对于每一组用户,分别地为它创建一个满足该组用户权限要求的、域内全局有效的组。除了面向特定应用程序的组之外,我们还需要几个基本组。基本组的成员负责管理服务器。

Page 18: 第 1 章  计算机信息系统安全概述

4 .允许数据库访问权限分配给角色而不是直接把它们分配给全局组。

创建了数据库之后,我们可以用 sp_grantdbaccess 存储过程授权 DB_Name Users 组访问它。

如果要拒绝数据库访问,我们可以创建另外一个名为 DB_Name Denied Users 的全局组,授权它访问数据库,然后把它设置为 db_denydatareader以及 db_denydatawriter 角色的成员。

Page 19: 第 1 章  计算机信息系统安全概述

5 .分配权限实施安全策略的最后一个步骤是创建用户定义的数据库角色,然后分配权限。完成这个步骤最简单的方法是创建一些名字与全局组名字配套的角色。

创建好角色之后就可以分配权限。在这个过程中,我们只需用到标准的 GRANT 、 REVOKE和 DENY 命令。

接下来我们就可以加入所有 SQL Server验证的登录。用户定义的数据库角色可以包含 SQL Server登录以及 NT 全局组、本地组、个人账户 。

由于内建的角色一般适用于整个数据库而不是单独的对象,因此这里建议你只使用两个内建的数据库角色,即 db_securityadmin 和 db_owner 。

Page 20: 第 1 章  计算机信息系统安全概述

6 .简化管理SQL Server 验证的登录不仅能够方便地实现,而且与 NT验证的登录相比,它更容易编写到应用程序里。但是,如果用户的数量超过 25,或者服务器数量在一个以上,或者每个用户都可以访问一个以上的数据库,或者数据库有多个管理员, SQL Server 验证的登录便不容易管理了。由于 SQL Server没有显示用户有效权限的工具,要记住每个用户具有哪些权限以及他们为何要得到这些权限就更加困难。即使对于一个还要担负其他责任的小型数据库管理员,简化安全策略也有助其减轻问题的复杂程度。因此,首选的方法应该是使用 NT验证的登录,然后通过一些精心选择的全局组和数据库角色管理数据库访问。

Page 21: 第 1 章  计算机信息系统安全概述

1.4 Windows 信息系统面临的 安全威胁

1.4.1 安全威胁之系统破解

1 . Windows 系统登录密码破解简介( 1 )删除 SAM文件(仅适合于 Windows 2000 )( 2 )修改账户密码( 3 )穷举法破解账户密码

Page 22: 第 1 章  计算机信息系统安全概述

2 .文件级加密破解简介( 1 ) Office文件加密与破解( 2 ) FoxMail 账号加密与破解

3 .软件注册码破解简介

注册码加密保护的原理比较简单,即要求软件安装者必须输入正版软件才拥有的一组字码(字符或数字的组合),经软件验证通过后方可完成安装。注册码的验证方式根据不同的软件各有不同,有的是直接明文放在软件中,有的经过加密或变形后再进行比较,还有的需要通过网络申请注册码,然后再进行验证。不管通过哪种验证方式,注册码的破解均有一定的规律可循,即通过反汇编工具追踪软件的验证过程,在找到验证规律的基础上实现破解。

Page 23: 第 1 章  计算机信息系统安全概述

1.4.2 安全威胁之计算机病毒

1 .计算机病毒的基本特征( 1 )传染性( 2 )隐蔽性( 3 )破坏性( 4 )可触发性

2 .计算机病毒的发展趋势( 1 )网络成为计算机病毒传染的主要载体;( 2 )传统病毒日益减少,网络蠕虫成为最主要和破坏力最大的病毒类型;( 3 )恶意网页的泛滥;( 4 )病毒与木马技术相互结合,出现带有明显木马特征的病毒;( 5 )传播方式多样化;( 6 )跨操作系统的病毒;( 7 )手机病毒、信息家电病毒的出现。

Page 24: 第 1 章  计算机信息系统安全概述

3 .计算机反病毒技术的发展趋势( 1 )适当增加杀毒软件的功能( 2 )杀毒软件的技术革新( 3 )操作系统的稳固性( 4 )企业病毒解决方案和个人病毒防范

Page 25: 第 1 章  计算机信息系统安全概述

1.4.3 安全威胁之恶意攻击

1.源 IP地址欺骗攻击假设同一网段内有两台主机 A和 B,另一网段内有主机X。 B 授予A某些特权。 X 为获得与A相同的特权,所做欺骗攻击如下:首先, X冒充 A,向主机 B发送一个带有随机序列号的 SYN包。主机 B响应,回送一个应答包给A,该应答号等于原序列号加 1 。然而,此时主机 A已被主机 X利用拒绝服务攻击“淹没”了,导致主机 A服务失效。结果,主机 A将 B发来的包丢弃。为了完成三次握手, X还需要向B回送一个应答包,其应答号等于 B向 A发送数据包的序列号加 1 。此时主机 X 并不能检测到主机 B的数据包(因为不在同一网段),只有利用 TCP顺序号估算法来预测应答包的顺序号并将其发送给目标机 B。如果猜测正确, B则认为收到的 ACK是来自内部主机 A。此时, X即获得了主机 A在主机 B上所享有的特权,并开始对这些服务实施攻击。

Page 26: 第 1 章  计算机信息系统安全概述

要防止源 IP地址欺骗行为,可以采取以下措施来尽可能地保护系统免受这类攻击:( 1 )抛弃基于地址的信任策略 阻止这类攻击的一种十分容易的办法就是放弃以地址为基础的验证。这将迫使所有用户使用其他远程通信手段,如 telnet、 ssh、 skey 等等。( 2 )使用加密方法 在包发送到网络上之前,我们可以对它进行加密。虽然加密过程要求适当改变目前的网络环境,但它将保证数据的完整性、真实性和保密性。( 3 )进行包过滤 可以配置路由器使其能够拒绝网络外部与本网内具有相同 IP地址的连接请求。而且,当包的 IP地址不在本网内时,路由器不应该把本网主机的包发送出去。

Page 27: 第 1 章  计算机信息系统安全概述

2.源路由欺骗攻击假设主机 A享有主机 B的某些特权,主机 X想冒充主机 A从主机 B(假设 IP为 aaa.bbb.ccc.ddd )获得某些服务。首先,攻击者修改距离 X最近的路由器,使得到达此路由器且包含目的地址 aaa.bbb.ccc.ddd 的数据包以主机 X所在的网络为目的地;然后,攻击者X利用 IP欺骗向主机 B发送源路由(指定最近的路由器)数据包。当 B回送数据包时,就传送到被更改过的路由器。这就使一个入侵者可以假冒一个主机的名义通过一个特殊的路径来获得某些被保护数据。

为了防范源路由欺骗攻击,一般采用下面两种措施:1. 对付这种攻击最好的办法是配置路由器,使它抛弃那些由外部网进来的却声称是内部主机的报文。2. 在路由器上关闭源路由。用命令 no ip source-route 。

Page 28: 第 1 章  计算机信息系统安全概述

3.拒绝服务攻击

SYN Flood常常是源 IP地址欺骗攻击的前奏,又称半开式连接攻击。每当我们进行一次标准的 TCP连接就会有一个三次握手的过程,而 SYN Flood 在它的实现过程中只有三次握手的前两个步骤,当服务方收到请求方的 SYN并回送 SYN-ACK确认报文后,请求方由于采用源地址欺骗等手段,致使服务方得不到ACK回应,这样,服务方会在一定时间内处于等待接收请求方ACK报文的状态,一台服务器可用的 TCP连接是有限的,如果恶意攻击方快速连续地发送此类连接请求,则服务器的系统可用资源、网络可用带宽急剧下降,将无法向其他用户提供正常的网络服务。

Page 29: 第 1 章  计算机信息系统安全概述

为了防止拒绝服务攻击,我们可以采取以下的预防措施:

1.建议在该网段的路由器上做一些配置的调整,这些调整包括限制 Syn半开数据包的流量和个数。2. 要防止 SYN数据段攻击,我们应对系统设定相应的内核参数,使得系统强制对超时的 Syn请求连接数据包复位,同时通过缩短超时常数和加长等候队列使得系统能迅速处理无效的 Syn请求数据包。3.建议在路由器的前端做必要的 TCP拦截,使得只有完成 TCP三次握手过程的数据包才可进入该网段,这样可以有效地保护本网段内的服务器不受此类攻击。4. 对于信息淹没攻击,我们应关掉可能产生无限序列的服务来防止这种攻击。

Page 30: 第 1 章  计算机信息系统安全概述

4 .网络嗅探攻击网络嗅探就是使网络接口接收不属于本主机的数据。计算机网络通常建立在共享信道上,以太网就是这样一个共享信道的网络,其数据帧头包含目的主机的硬件地址,只有硬件地址匹配的机器才会接收该数据包。一个能接收所有数据包的机器被称为混杂模式节点。通常账户和口令等信息都以明文的形式在以太网上传输,一旦被攻击者在混杂模式节点上嗅探到这些信息,相关的计算机和用户就难以避免被攻击的厄运。

对于网络嗅探攻击,我们可以采取以下措施进行防范:( 1)网络分段 ( 2)加密 ( 3)一次性口令技术 ( 4)禁用杂错节点

Page 31: 第 1 章  计算机信息系统安全概述

5 .缓冲区溢出攻击

缓冲区是用户为程序运行时在计算机内存中申请到的一段连续的存储空间,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。

一般的防范措施包括:( 1)程序指针完整性检查 ( 2)堆栈的保护( 3)数组边界检查( 4)利用工具软件发现漏洞并修补

Page 32: 第 1 章  计算机信息系统安全概述

2.1 Windows系统的注册表2.2 Visual C++编程基础2.3 汇编语言编程及反汇编调试2.4 Windows系统驱动程序开发

第 2章 基础知识简介

Page 33: 第 1 章  计算机信息系统安全概述

2.1 Windows 系统的注册表 2.1.1 注册表的结构

注册表的外部形式是 Windows目录下的两个二进制文件 System.dat和 User.dat,内部组织结构是一个类似于目录管理的树状分层的结构。

对于树枝,我们把它叫做“项”,对于树叶,叫做“值项”。值项包括三部分:值的名称、值的数据类型以及值本身。

Page 34: 第 1 章  计算机信息系统安全概述

Windows 系统的注册表有 5 种数据类型,它们是:REG_BINARY:二进制值( B)。REG_DWORD: DWORD值( D)。REG_EXPAND_SZ:可扩展字符串( E)。REG_MULTI_SZ:多重字符串( M )。REG_SZ:数据字符串( S )。

Page 35: 第 1 章  计算机信息系统安全概述

注册表的根键主要包括 5大根键,即:HKEY_CURRENT_USER:包含当前登录用户的配置信息的根目录。用户文件夹、屏幕颜色和“控制面板”设置存储在此处。该信息被称为用户配置文件。HKEY_USERS :包含计算机上所有用户的配置文件的根目录。 HKEY_CURRENT_USER是 HKEY_USERS的子项。HKEY_LOCAL_MACHINE:包含针对该计算机(对于任何用户)的配置信息。HKEY_CLASSES_ROOT :是 HKEY_LOCAL_MACHINE\Software的子项。此处存储的信息可以确保当使用 Windows资源管理器打开文件时,将使用正确的应用程序打开对应的文件类型。HKEY_CURRENT_CONFIG:包含本地计算机在系统启动时所用的硬件配置文件信息。

Page 36: 第 1 章  计算机信息系统安全概述

1 . HKEY_LOCAL_MACHINE根键HKEY_LOCAL_MACHINE根键中存放的是用来控制系统和软件的设置。

( 1 ) HARDWARE子键 该子键包含了系统使用的浮点处理器、串口等有关信息。

DESCRIPTION:用于存放有关系统信息。DEVICEMAP:用于存放设备映像。RESOURCEMAP;用于存放资源映像。

( 2 ) SAM 子键 ( 3 ) SECURITY子键 该子键位于 HKEY_LOCAL_MACHINE\Security 分支上,该分支只是为将来的 高级功能而预留的。( 4 ) SOFTWARE子键 该子键中保留的是所有已安装的 32 位应用程序的信息。

( 5 ) SYSTEM 子键该子键存放的是启动时所使用的信息和修复系统时所需的信息,其中包 括各个驱动程序的描述信息和配置信息等 。

Page 37: 第 1 章  计算机信息系统安全概述

2 . HKEY_CLASSES_ROOT根键

HKEY_CLASSES_ ROOT主键与当前注册使用的用户有关,它实际上是 HKEY_CURRENT_USER\ SOFTWARE\ Classes 和 HKEY_LOCAL_MACHINE\ SOFTWARE\ Classes 的交集。如果两者的内容有冲突,则 HKEY_CURRENT_USER\ SOFTWARE\ Classes优先。

( 1 )同一台计算机上的不同用户可以分别定制不同 的 Windows 2000 。

( 2 )提高了注册表的安全性。

( 3 )支持漫游类注册。

“单用户类注册”( per-user class registration )

Page 38: 第 1 章  计算机信息系统安全概述

3 . HKEY_CURRENT_CONFIG根键

如果你在 Windows 中设置了两套或者两套以上的硬件配置文件( Hardware Configuration file),则在系统启动时将会让用户选择使用哪套配置文件。而 HKEY_CURRENT_CONFIG根键中存放的则是当前配置文件的所有信息。

Page 39: 第 1 章  计算机信息系统安全概述

4 . HKEY_USERS根键 该根键保存了存放在本地计算机口令列表中的用户标识和密码列表,即用户设置。每个用户的预配置信息都存储在 HKEY_USERS 根键中。 HKEY_USERS是远程计算机中访问的根键之一。其内容取决于计算机是否激活了用户配置文件,若未激活用户配置文件,则可以看到称为 .DEFAULT 的单一子键,该子键包括和所有用户相关的各种设置,并且和 \Windows 下的 USER.DAT文件相配合。若激活了用户配置文件并且正确地执行了登录,则还有一个“用户名”的子键,该用户名为用户登录的名称。

Page 40: 第 1 章  计算机信息系统安全概述

5 . HKEY_CURRENT_USER根键

HKEY_ CURRENT_USER下面有 7个子键:AppEvents :这个子键里登记已注册的各种应用事件。 ControlPanel:它里面涉及控制面板设置有关的内容。InstallLocationsMRU: Windows 安装路径的有关信息。 Keyboardlayout :关于键盘设置的信息。 Network:有关网络设置的信息。 RemoteAccess :安装 IE时建立的子关键字,包含该应用程序的有关信息。 Software :用户安装软件的有关信息。

HKEY_CURRENT_USER根键中保存的信息(当前用户的子键信息)与 HKEY_ USERS\.Default 分支中所保存的信息是相同的。任何对 HKEY_CURRENT_USER根键中的信息的修改都会导致对HKEY_USERS\.Default 中子键信息的修改,反之也是如此。

Page 41: 第 1 章  计算机信息系统安全概述

2.1.2 注册表的操作 1 .注册表的备份点击注册表编辑器的“文件”菜单,再点击“导出”选项,在弹出的对话框中输入文件名“ regedit”,将“保存类型”选为“注册表文件”,再将“导出范围”设置为“全部”,接下来选择文件存储位置,最后点击“保存”按钮,就可将系统的注册表保存到硬盘上。同样,如果点击“导入”选项,选择要导入的注册表文件,就可以完成整个注册表的还原。

2 .注册表项目的还原单击程序界面“文件”项下拉菜单中的“导入”命令,程序会给出一个对话框,在其中的文件列表窗口中选择需要还原的文件名,之后单击“打开”按钮确定即可。 3 .向注册表中添加新的项或子项启动注册表编辑器,在程序左边的树形列表窗口中选择将在其下添加新项的项或子项。单击程序界面菜单条中的“编辑”项,并从关联的下拉菜单中选择“新建”命令,在出现的窗口中的“项名称”文本框中输入需要添加的新项名称,对于指定类别,可根据自己的需要设置,当然如果不添加也可以。最后单击确定按钮,返回程序界面即可。

Page 42: 第 1 章  计算机信息系统安全概述

4 .以关键字方式查找 首先在注册表编辑器界面中选择需要扫描的项或子项所在窗口,单击界面菜单条“编辑”项下拉菜单中的“查找”命令。在“查找内容”文本框中输入需要查找的内容关键字,并选择相应的扫描控制方式,之后,单击“查找下一个”按钮确定即可。

5 .删除注册表中无用的子项或值项首先在程序界面中找到需要删除项目所在的主项窗口,然后定位需要删除的值项,一般对于软件注册项都包括在 HKEY_CURRENT_USER项下的 Software 子项中。单击程序界面菜单条“编辑”项下拉菜单中的“删除”命令或者是直接按下“ Delete”键,程序会给出删除确认对话框,单击“ Yes”按钮确认即可。

Page 43: 第 1 章  计算机信息系统安全概述

6 .设置注册表项的权限首先在程序界面窗口中选择需要指定权限的项,单击界面“编辑”项下拉菜单,从中选择“权限”命令,在“名称”列表框中选择需要设置权限的用户或组,如果暂时还没有添加,可单击“添加”按钮,在关联的“选择用户、计算机或组”设置界面中选择需要添加的对象。在界面中的“权限”项列表框中设置允许当前选择对象的使用权限,其中包括“读取”和“完全控制”(读写)。此外,当点“高级”项,程序会给出针对当前授权注册表项访问控制设置,其中包括了更加严密的授权设置,如是否允许查询数值、设置数值、创建子项、枚举子项、通知、创建链接、删除、写入 DAC 、写入所有者、读取控制等,根据自己的需要选择即可。

Page 44: 第 1 章  计算机信息系统安全概述

2.2 Visual C++编程基础 2.2.1 Visual C++ 概述

Visual C++(以下简称 VC++)是微软开发的一套 C/C++编译器,它包含了综合的微软基本类库( Microsoft Foundation Class Library ),使得开发 Windows 应用程序变得简单而高效。它提供有复杂的资源编辑器,可以编辑对话框、菜单、工具栏、图像和其他许多 Windows 应用程序的组成元素。它还有一个非常好的集成开发环境—— Developer Studio ,用它可以在编写 C++程序时对程序的结构进行可视化的管理。

Page 45: 第 1 章  计算机信息系统安全概述

2.2.2 MFC 简介 MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。

MFC的基本结构是层次结构。该层次结构包容了Windows API 中的用户界面部分,并使你能够很容易地以面向对象的方式建立Windows 应用程序。MFC库的主要优点是效率高。

当使用 MFC 时,首先编写的代码是用来建立必要的用户界面控制并定制其外观。

Page 46: 第 1 章  计算机信息系统安全概述

2.2.3 Windows 消息机制简介 一个消息由一个消息名称( UINT )和两个参数( WPARAM , LPARAM )组成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息。

一个消息必须由某一个窗口来接收。作为程序员,在窗口的进程( WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。

系统将会为每一个进程维护一个消息队列,所有属于该进程的消息都会被放入队列中。

2.2.4 Visual C++ 编程示例

Page 47: 第 1 章  计算机信息系统安全概述

2.3 汇编语言编程及反汇编调试 2.3.1 Win32汇编与Masm32

Win32汇编是指 32 位 Windows 平台下的汇编语言,它可以调用 Windows 的 API,用 Win32汇编写Windows应用程序类似于用 C/ SDK编程。 Win32汇编没有进行那么多的封装,更接近系统的底层,使用起来更加灵活,能做到许多高级语言无法做到的事(如代码重定位)。汇编程序生成的可执行文件体积小,执行速度快,可用于软件的核心程序段,以提高软件性能。

与计算机硬件密切相关的驱动程序开发,计算机病毒的分析与防治、软件加密解密、软件调试等方面都会用到Win32汇编的知识。

Page 48: 第 1 章  计算机信息系统安全概述

1 . MASM32 简介MASM32 就是一个用于 Win32汇编的软件包,它包括汇编编译器Ml.exe 、资源编译器Rc.exe 、 32 位链接器 Link.exe 和一个简单的 IDE 环境 QEDITOR.exe 。

Page 49: 第 1 章  计算机信息系统安全概述

2 . MASM32 与其他 Win32 汇编开发工具的比较

Win32汇编最好的选择还是 MASM32 ,它可以支持高级语法,使汇编编程更简单。同时它还集成了与之配套的链接器和资源编译器,不需要自己逐个搜集。另外,用它附带的 IDE进行。总之,使用 MASM32 可以方便、快捷地开发出一个汇编程序,是很适合初学者的一个开发平台。

Page 50: 第 1 章  计算机信息系统安全概述

2.3.3 W32Dasm与静态反汇编

静态反汇编是指把 PE等格式的可执行文件反汇编为类似汇编源文件的文本文件,其中的机器指令码用汇编助记符来表示。

W32Dasm 是一个著名的静态反汇编分析工具,它除了能将应用程序反汇编为汇编源程序,还提供许多相关信息及便捷的操作以帮助对程序的静态调试,另外还有简单的动态调试功能。

2.3.2 MASM32编程示例

Page 51: 第 1 章  计算机信息系统安全概述

2.4 Windows 系统驱动程序开发 2.4.1 Windows 系统设备驱动程序简介

Win32 API调用

系统服务接口

传递 IRP给驱动程序派遣函数

HAL调用

平台相关操作

用户模式

内核模式

硬件

硬件抽象层

设备 驱动程序

I/O管理器

Win32 子系统

应用程序

Windwos 系统结构图

当用户模式程序需要读取设备数据时,它就调用 Win32 API函数,然后通过 Win32 子系统模块(如 KERNEL32.DLL )调用平台相关的系统服务接口实现该 API ,而平台相关的系统服务将调用内核模式支持函数。

Page 52: 第 1 章  计算机信息系统安全概述

2.4.2 Windows 系统驱动程序分类

内核模式 驱动程序

虚拟设备 驱动程序(VDD)

文件系统 驱动程序

遗留设备 驱动程序

PnP 驱动程序

显示 驱动程序

WDM 驱动程序

类 驱动程序

迷你 驱动程序

Windows 系统中的设备驱动程序分类结构图

Page 53: 第 1 章  计算机信息系统安全概述

虚拟设备驱动程序( VDD)是一个用户模式部件,它可以使DOS 应用程序访问 x86 平台上的硬件。内核模式驱动程序其分类包含许多子类。 PnP驱动程序就是一种遵循Windows 2000即插即用协议的内核模式驱动程序。WDM驱动程序是一种 PnP驱动程序,它同时还遵循电源管理协议,并能在 Windows 98 和 Windows 2000 间实现源代码级兼容。显示驱动程序是用于显示和打印设备的内核模式驱动程序。 文件系统驱动程序在本地硬盘或网络上实现标准 PC文件系统模型(包括多层次目录结构和命名文件概念)。遗留设备驱动程序也是一种内核模式驱动程序,它直接控制一个硬件设备而不用其他驱动程序帮助。

Page 54: 第 1 章  计算机信息系统安全概述

2.4.3 Windows 系统驱动程序开发模型

上层过滤器驱动程序

功能驱动程序

总线驱动程序

下层过滤器驱动程序

FiDO

FDO

FiDO

PDO

IRP

WDM 中设备对象和驱动程序的层次结构

WDM模型使用了如图 2-19所示的层次结构。图中左边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这样的数据结构。处于堆栈最底层的设备对象称为物理设备对象( Physical Device Object ),或简称为PDO。在设备对象堆栈的中间某处有一个对象称为功能设备对象( Functional Device Object ),或简称 FDO。在 FDO上面和下面还会有一些过滤器设备对象( Filter Device Object ),或简称 FiDO。

Page 55: 第 1 章  计算机信息系统安全概述

2.4.4 Windows 系统驱动程序开发工具简介 开发WDM离不开 DDK,微软公司提供的 DDK版本有: Windows 98 DDK, Windows 2000 DDK, Windows XP DDK( Windows.XP.SP1 DDK)和 Windows.Server.2003 DDK。

开发WDM也可以使用驱动开发工具 DriverStudio ,它是一个开发工具包,包含 VtoolsD 、 DriverWorks 、DriverNetWorks 和 SoftICE 等开发工具。

Page 56: 第 1 章  计算机信息系统安全概述

2.4.5 Windows 系统驱动程序框架结构 1 . DriverEntry 函数每个驱动程序必须有一个 DriverEntry函数以用来初始化驱动程序范围内的数据结构和资源。当 I/O管理器装入驱动程序时,它调用 DriverEntry函数。

NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){……}

Page 57: 第 1 章  计算机信息系统安全概述

2 . AddDevice 函数WDM驱动程序有一个特殊的 AddDevice函数, PnP 管 理器为每个设备实例调用该函数。

NTSTATUS AddDevice ( IN PDRIVER_OBJECT DriverObject,

IN PDEVICE_OBJECT PhysicalDevObject

){

……}

*调用 IoCreateDevice 创建设备对象,并建立一个私有的设备扩展对象。 * 寄存一个或多个设备接口,以便应用程序能知道设备的存在。另外,还可以给出设备名并创建符号连接。 初始化设备扩展和设备对象的 Flag 成员。 *调用 IoAttachDeviceToDeviceStack函数把新设备对象放到堆栈上。

Page 58: 第 1 章  计算机信息系统安全概述

3 . Dispatch函数

NTSTATUS ( *PDRIVER_DISPATCH )(IN PDEVICE_OBJECT DeviceObject ,

IN PIRP Irp){

……(略)}

Dispatch函数如下处理输入 IRP 的过程如下:*在 IRP 中检测驱动程序的 I/O栈位置以决定做什么,并且如果有参数的话,检测参数的有效性。*尽可能满足请求并完成 IRP;否则,由较低层驱动程序或其他设备驱动程序函数传送它以做进一步处理。

Page 59: 第 1 章  计算机信息系统安全概述

4 . StartIo函数

大多数设备驱动程序有一个 StartIo函数,该函数是用来完成 IRP的排队功能的,因为大多数PC外设同时仅能处理一个设备 I/O操作。

VOID ( *PDRIVER_STARTIO )( IN PDRIVER_OBJECT DeviceObject,

IN PIRP Irp )

{……

}

Page 60: 第 1 章  计算机信息系统安全概述

5 .其他一些函数及其功能

函数名称 函数功能Unload 卸载驱动程序ISR 中断服务函数

DpcForIsr 延时过程调用函数,完成一个 I/O请求和开始另一个中断驱动的传输

IRP处理函数 被调来处理希望处理的 IRPCancel 取消一个 IRP

Completion当一个低层驱动程序完成一个 IRP的处理时被调用,这允许当前的驱动程序做更多的工作

AdapterControl 当一个 DMA通道适配器可用时调用

ControllerControl 当一个控制器空闲时调用

Timer 定时器回调函数CustomerTimerDp

c TimerDpc 的回调函数

CustomerDpc 通常用于处理工作队列ConfigCallBack 查询设备硬件描述回调

临界段函数 同步一个处理器上的中断执行。由低级 IRQL 的任务调用来与硬件交互

即插即用通知 当设备 PnP状态发生变化时被调用电源通知 当设备 Power状态发生变化时被调用

Page 61: 第 1 章  计算机信息系统安全概述

2.5.6 Windows 系统驱动程序设计准备工作 如果你在设计一个设备驱动程序,你应该支持和其他相同类型设备的 NT驱动程序相同的 IRP_MJ_XXX和 IOCTL 请求代码。如果你是在设计一个中间层 NT驱动程序,应该首先确认你下层驱动程序所管理的设备,因为一个高层的驱动程序必须具有低层驱动程序绝大多数 IRP_MJ_XXX 函数入口。高层驱动程序在接到 I/O 请求时,在确定自身 IRP 当前堆栈单元参数有效的前提下,设置好 IRP 中下一个低层驱动程序的堆栈单元,然后再调用 IoCallDriver 将请求传递给下层驱动程序处理。 一旦决定好了你的驱动程序应该处理哪些 IRP_MJ_XXX,就可以开始确定驱动程序应该有多少个 Dispatch函数。

Page 62: 第 1 章  计算机信息系统安全概述

2.5.7 Windows 系统驱动程序开发的一般过程

最简单的驱动程序开发步骤如下:( 1 )写一个 DriverEntry函数,在里面调用IoCreateDevice创建一个 Device 对象。( 2 )写一个处理 IRP_MJ_CREATE请求的 Dispatch函数的基本框架。( 3 )编译你的驱动程序。( 4 )安装测试你的驱动程序。

Page 63: 第 1 章  计算机信息系统安全概述

第 3 章 PE病毒及反病毒技术相关实验

3.1 PE文件病毒简介3.2 简单PE病毒模拟实验 3.3 PE病毒的变异实验 3.4 多进程自保护病毒实验 3.5 病毒的线程注入实验 3.6 PE文件自免疫防病毒实验

Page 64: 第 1 章  计算机信息系统安全概述

3.1 PE 文件病毒简介

通过操作系统的文件系统进行感染的病毒都称为文件病毒 .

DOS环境下有 4 种基本的可执行文件格式 :

1.批处理文件。是以 .BAT 结尾的文件。2. 设备驱动文件。是以 .SYS 结尾的文件。3.COM文件。是以 .COM 结尾的纯代码文件。4.EXE文件。是以 .EXE 结尾的文件。

Page 65: 第 1 章  计算机信息系统安全概述

1 .覆盖病毒这种病毒直接用病毒文件替换被感染的文件,这样所感染文件的文件头也变成了病毒程序的文件头,不用做任何调整。显然,这种病毒不可能广泛流行,因为被感染的程序立刻就不能正常工作了,用户可以迅速的发现病毒的存在并采取相应的措施。这类病毒并不是一种典型意义上的文件病毒,主要出现在病毒发展的初期,现在已经很难发现了。

Page 66: 第 1 章  计算机信息系统安全概述

2.寄生病毒( 1)“头寄生”病毒

实现将病毒代码放到程序的头上有两种方法,一种是将原来程序的前面一部分拷贝到程序的最后,然后将文件头用病毒代码覆盖;另一种是生成一个新的文件,首先在头的位置写上病毒代码,然后将原来的可执行文件放在病毒代码的后面,再用新的文件替换原来的文件从而完成感染,感染原理如图所示。

原程序代码

病毒代码

原程序代码头

原程序代码

原程序代码头

病毒代码

原程序代码头

原程序代码

感染方式 1

感染方式 2

Page 67: 第 1 章  计算机信息系统安全概述

( 2 )“尾寄生”病毒“尾寄生”病毒可以不对原程序的代码位置进行修改,而且病毒代码一般作为一个相对独立的节加入,因而相对容易实现。但这种感染方式会增加原文件及运行文件的大小,因而隐蔽性较差。

DOS EXE文件头

PE文件头

感染前的程序

DOS EXE文件头(修改后)

PE文件头(修改后)

感染前的程序

病毒代码

感染

Page 68: 第 1 章  计算机信息系统安全概述

( 3 )“插入寄生”病毒病毒可以将自己插入到被感染的程序中,可以整段的插入,也可以分成很多段,如果是插入到节间空位,则不会改变文件大小,隐蔽性较高,但需要被感染文件提供相应条件(如具有必要的空位等 ).

DOS EXE文件头

PE(NE)文件头

感染前的程序

DOS EXE文件头(修改后)

PE(NE)文件头(修改后)

感染前的程序(某节)

病毒代码

病毒代码

感染前的程序(某节)

感染

Page 69: 第 1 章  计算机信息系统安全概述

3.无入口点病毒有一类 PE病毒,在被感染程序执行的时候,没有改变 PE 文件的程序入口地址 , 病毒代码无声无息地潜伏在被感染的程序中,可能在非常偶然的条件下才会被触发开始执行。

PE文件头

运行时刻库的初始化程序

原来的程序代码

病毒找到这部分代码,使用

跳转到病毒代码的指令替

换某条跳转指令

感染之后

PE文件头

运行时刻库的初始化程序

原来的程序代码

跳转到病毒代码的指令

病毒代码

Page 70: 第 1 章  计算机信息系统安全概述

4.对象文件、库文件和源代码病毒一些病毒可以感染编译器生成的中间对象文件( OBJ文件),或者编译器使用的库文件( .LIB )文件,由于这些文件不是直接的可执行文件,所以病毒感染这些文件之后并不能直接的传染,必须使用被感染的 OBJ 或者 LIB链接生成 EXE 程序之后才能实际地完成感染过程 .

Page 71: 第 1 章  计算机信息系统安全概述

3.2 简单 PE病毒模拟实验

3.2.1 实验目的 * 熟悉 PE文件结构* 掌握修改PE文件入口地址*掌握在 PE文件中添加新节

Page 72: 第 1 章  计算机信息系统安全概述

3.2.2 实验原理 PE 文件格式( Portable Executable File Format)是目前最常用的可执行文件格式,其基本结构如图所示。

Page 73: 第 1 章  计算机信息系统安全概述

1 . PE文件头简介该部分是由一个 IMAGE_NT_HEADERS 结构来定义的:

IMAGE_NT_HEADERS STRUCT Signature DWORD ?; PE文件标识

FileHeader IMAGE_FILE_HEADER <> ; PE文件表头

OptionalHeader IMAGE_OPTIONAL_HEADER32 <> ; PE文件可选表头

IMAGE_NT_HEADERS ENDS

Page 74: 第 1 章  计算机信息系统安全概述

PE文件头又可以分成三个部分 :

( 1 ) PE文件标识PE文件头的第一个数据结构是 DWORD类型的一个标志,它被定义为 00004550h ,也就是字符“ P” ,“ E” 加上两个 0 ,这也是“ PE” 这个称呼的由来。PE文件的文件属性由该标志后面的 PE文件表头( IMAGE_FILE_HEADER )和 PE文件可选表头( IMAGE_ OPTIONAL_HEADER32 )来定义。

Page 75: 第 1 章  计算机信息系统安全概述

( 2 ) IMAGE_FILE_HEADER结构

IMAGE_FILE_HEADER结构的定义如下所示 : IMAGE_FILE_HEADER STRUCT Machine WORD ?; 0004h - 运行平台 NumberOfSections WORD ? ; 0006h - 文件的节数目 TimeDateStamp DWORD ? ; 0008h - 文件创建日期和时间 PointerToSymbolTable DWORD ? ; 000ch - 指向符号表(用于调

试) NumberOfSymbols DWORD ? ; 0010h - 符号表中的符号数量

(用于调试) SizeOfOptionalHeader WORD ? ; 0014h - IMAGE_OPTIONAL_

HEADER32 结构的长度 Characteristics WORD ? ; 0016h - 文件属性IMAGE_FILE_HEADER ENDS

Page 76: 第 1 章  计算机信息系统安全概述

*Machine字段用来指定文件的运行平台。 Windows 可以运行在 Intel和 SUN 等几种不同的硬件平台上,不同平台指令的机器码是不同的(如 Intel 386 平台的机器码为 014ch)。为不同平台编译的可执行文件显然无法通用,如果Windows 检测到这个字段指定的适用平台与当前的硬件平台不兼容,它将拒绝装入这个文件。*NumberOfSections字段(本节实验 2需修改该字段)指出本文件中存在的节的数量。*Characteristics字段属性标志字段,它的不同数据位定义了不同的文件属性,这是一个很重要的字段,不同的定义将影响系统对文件的装入方式。

Page 77: 第 1 章  计算机信息系统安全概述

( 3 ) IMAGE_OPTIONAL_HEADER32 结构IMAGE_ OPTIONAL_HEADER32 结构的详细定义如下:

IMAGE_OPTIONAL_HEADER32 STRUCT Magic WORD ? ;0018h 107h= ROM Image,10Bh=exe Image MajorLinkerVersion BYTE ? ;001ah 链接器版本号 MinorLinkerVersion BYTE ? ;001bh SizeOfCode DWORD ? ;001ch 所有含代码的节的总大小 SizeOfInitializedData DWORD ? ;0020h所有含已初始化数据的节的总大小 SizeOfUninitializedData DWORD ? ;0024h 所有含未初始化数据的节的大小 AddressOfEntryPoint DWORD ? ;0028h 程序执行入口 RVA BaseOfCode DWORD ? ;002ch 代码的节的起始 RVA BaseOfData DWORD ? ;0030h 数据的节的起始 RVA ImageBase DWORD ? ;0034h 程序的建议装载地址

Page 78: 第 1 章  计算机信息系统安全概述

SectionAlignment DWORD ? ;0038h 内存中的节的对齐粒度 FileAlignment DWORD ? ;003ch 文件中的节的对齐粒度 MajorOperatingSystemVersion WORD ? ;0040h 操作系统主版本号 MinorOperatingSystemVersion WORD ? ;0042h 操作系统副版本号 MajorImageVersion WORD ? ;0044h可运行于操作系统的最小版本号 MinorImageVersion WORD ? ;0046h MajorSubsystemVersion WORD ? ;0048h 可运行操作系统的最小子版本号 MinorSubsystemVersion WORD ? ;004ah Win32VersionValue DWORD ? ;004ch 未用 SizeOfImage DWORD ? ;0050h 内存中整个 PE映像尺寸

Page 79: 第 1 章  计算机信息系统安全概述

SizeOfHeaders DWORD ? ;0054h 所有头+节表的大小 CheckSum DWORD ? ;0058h Subsystem WORD ? ;005ch 文件的子系统 DllCharacteristics WORD ? ;005eh SizeOfStackReserve DWORD ? ;0060h 初始化时的堆栈大小 SizeOfStackCommit DWORD ? ;0064h 初始化时实际提交的堆栈大小 SizeOfHeapReserve DWORD ? ;0068h 初始化时保留的堆大小 SizeOfHeapCommit DWORD ? ;006ch 初始化时实际提交的堆大小 LoaderFlags DWORD ? ;0070h 未用 NumberOfRvaAndSizes DWORD ? ;0074h 下面的数据目录结构的数量 DataDirectory IMAGE_DATA_DIRECTORY 16 dup( <>) ;0078h IMAGE_OPTIONAL_HEADER32 ENDS

Page 80: 第 1 章  计算机信息系统安全概述

*AddressOfEntryPoint字段指出文件被执行时的入口地址,这是一个 RVA地址。*ImageBase字段指出文件的优先装入地址。*SectionAlignment字段和 FileAlignment字段SectionAlignment字段指定了节被装入内存后的对齐单位。也就是说,每个节被装入的地址必定是本字段指定数值的整数倍。FileAlignment字段指定了节存储在磁盘文件中时的对齐单位。*DataDirectory字段这个字段是一个非常重要的字段。 PE文件中用一个数据目录(即DataDirectory )结构来指明这些特定数据块的位置。

Page 81: 第 1 章  计算机信息系统安全概述

2. PE文件中的节和节表( 1 ) PE文件到内存的映射

Windows装载器在装载的时候仅仅建立好虚拟地址和 PE文件之间的映射关系,只有真正执行到某个内存页中的指令或者访问某一页中的数据时,这个页面才会被从磁盘提交到物理内存 。

PE文件映像 内存映像 hModule

低端地址

高端地址

其他节

data节

rdata节

text节

节表

PE文件头

DOS块

DOS文件头

rdata节

text节

节表

PE文件头

DOS块

DOS文件头

relos节

文件头

文件尾

其他节

Page 82: 第 1 章  计算机信息系统安全概述

*内存页的属性在装载PE文件时,与节对应的内存页的属性要按照节的属性来设置。* 节的偏移地址节的起始地址在磁盘文件中是按照 IMAGE_OPTIONAL_HEADER32 结构的 FileAlignment字段的值对齐的,而被装载到内存中时则是按照同一结构中的 SectionAlignment字段的值对齐的。* 节的尺寸对节尺寸的处理有两个方面:首先是由于磁盘映像和内存映像中节对齐单位的不同而造成的长度扩展;其次是对包含未初始化数据的节的处理。*不进行映射的节有些节中包含的数据仅仅在装载的时候用到,当文件装载完毕的时候,它们不会被递交到物理内存页。

Page 83: 第 1 章  计算机信息系统安全概述

( 2 )节表

PE 文件中所有节的属性都被定义在节表中,节表由一系列的节表项( IMAGE_ SECTION_HEADER结构)排列而成,每个节表项用来描述一个节,节表项的排列顺序和它们描述的节在文件中的排列顺序是一致的,最后以一个空的节表项作为结束,所以节表中总的节表项数量等于节的数量加 1 。

Page 84: 第 1 章  计算机信息系统安全概述

IMAGE_SECTION_HEADER结构的定义如下:

IMAGE_SECTION_HEADER STRUCTName1 db IMAGE_SIZEOF_SHORT_NAME dup ( ? )

; 8 个字节的节区名称 union Misc PhysicalAddress dd ? VirtualSize dd ? ;节区的尺寸 ends VirtualAddress dd ? ;节区的 RVA地址 SizeOfRawData dd ? ;在文件中

Page 85: 第 1 章  计算机信息系统安全概述

对齐后的尺寸 PointerToRawData dd ?

;在文件中的偏移 PointerToRelocations dd ?

;在 OBJ文件中使用 PointerToLinenumbers dd ?

;行号表的位置(供调试用) NumberOfRelocations dw ?

;在 OBJ文件中使用 NumberOfLinenumbers dw ?

;行号表中行号的数量 Characteristics dd ?

;节的属性IMAGE_SECTION_HEADER ENDS

Page 86: 第 1 章  计算机信息系统安全概述

*Name1字段Name1字段定义了节的名称,字段的长度为 8 个字节。*VirtualSize字段代表节的大小,这是节的数据在没有进行对齐处理前的实际大小。*VirtualAddress字段指出节被装载到内存中后的偏移地址,这是一个 RVA地址。这个地址是按照内存页对齐的。*PointerToRawData字段指出节在磁盘文件中的所处的位置。这个数值是从文件头开始算起的偏移量。*SizeOfRawData字段指出节在磁盘文件中所占的空间大小,这个数值等于 VirtualSize字段的值在进行文件对齐处理以后的大小。*Characteristics字段这是节的属性标志字段,共 32 位,其中的不同数据位代表了不同的属性,这些数据位组合起来描述了节的属性。

Page 87: 第 1 章  计算机信息系统安全概述

( 3 ) RVA和文件偏移的转换

RVA是相对虚拟地址( Relative Virtual Address )的缩写,顾名思义,它是一个“相对”地址,也可以说是“偏移量”, PE文件的各种数据结构中涉及地址的字段大部分都是以RVA表示的。

PE文件映像 内存映像

低端地址

高端地址

rsrc节

data节

rdata节

text节

节表

PE文件头

DOS块

DOS文件头

rdata节

text节

节表

PE文件头

DOS块

DOS文件头

relos节

文件头

文件尾

rsrc节

hModule 00400000h

文件

偏移 =4000h

Data Dir

RVA=5000h

00405000h

Page 88: 第 1 章  计算机信息系统安全概述

*循环扫描节表并得到每个节在内存中的起始 RVA(根据VirtualAddress字段),并根据节的大小( SizeOfRawData字段)算出节的结束 RVA,最后比较判断目标 RVA是否落在某个节之内。*如果目标 RVA处于某个节之内,那么用目标 RVA减去节的起始 RVA,这样就得到了目标 RVA相对于节起始地址的偏移量 RVA'。*在节表中获取节在文件中所处的偏移( PointerToRawData字段),将这个偏移值加上上一步得到的 RVA'值,这才是目标在文件中的真正偏移位置。

Page 89: 第 1 章  计算机信息系统安全概述

3.2.3 实验环境 实验平台:Windows XP。相关软件:Win32汇编语言开发环境(例:MASM32 ),文本编辑器(例: UltraEdit )。

3.2.4 实验准备 UltraEdit 的学习与使用。

Page 90: 第 1 章  计算机信息系统安全概述

3.2.5 实验内容

1.修改 PE文件入口地址实验。

2.在 PE文件中添加新节。

Page 91: 第 1 章  计算机信息系统安全概述

3.2.6 实验的分析与讨论 本实验主要是对执行文件的二进制代码进行操作,难点在于对 PE文件的结构的理解以及对相对虚拟地址( RVA)的理解和运用。在实验的“修改PE文件入口地址”部分,着重要求对 IMAGE_OPTIONAL_HEADER32 结构中 AddressOfEntryPoint字段的理解和掌握,相对比较简单,应该比较容易完成。而在实验的“PE文件中添加新节”部分,则不仅要求对 PE文件的结构有更深入的理解,而且需要对汇编调试分析也有一定的要求,如果读者在完成这部分实验时有困难,可能需要在这些基础知识上加强学习。

Page 92: 第 1 章  计算机信息系统安全概述

3.3 PE病毒的变异实验

3.3.1 实验目的 *理解 PE病毒变异原理

* 掌握文件的自我变异方法

Page 93: 第 1 章  计算机信息系统安全概述

3.3.2 实验原理 可变异病毒的变化能力可将其划分为以下几类:( 1 )具备普通病毒所具有的基本特性,然而,病毒感染一个目标后,其自身代码与前一被感染目标中的病毒代码几乎没有三个连续的字节是相同的,但这些代码其相对空间的排列位置是不变动的。一般称其为一维变异病毒。( 2 )除了具备一维变异病毒的特性外,那些变化的代码相互间的排列距离(相对空间位置)也是变化的,有的感染文件的字节数不定。一般称其为二维变异病毒。( 3 )具备二维变异病毒的特性,并且能分裂后分别潜藏在几处,随便某一处的子病毒被激发后都能自我恢复成一个完整的病毒。病毒在附着体上的空间位置是变化的,即潜藏的位置不定。

Page 94: 第 1 章  计算机信息系统安全概述

3.3.3 实验环境 实验平台:Windows XP。相关软件:VC++,文本编辑器(例: UltraEdit )。

3.3.4 实验准备 编写一个 VC++程序用于实验

Page 95: 第 1 章  计算机信息系统安全概述

3.3.5 实验内容 本实验的目标是在程序运行时改变文件内容,我们设计的实验是在程序运行时复制自身并实现变异,变异后的程序运行时会将关键字“ ***hello!***”改为“ $$CHANGED!$$”。

Page 96: 第 1 章  计算机信息系统安全概述

3.3.6 实验分析与讨论 本实验是在程序正常运行时改变程序本身的内容以达到自我变异的目的,实验的难点在于选择变异的关键字(本例为“ ***hello!***”),变异的条件(本例在点击按键“点击变异”时)以及发生变异的时机(本例在进行自我复制时修改缓存内容)。由于本例是对缓存进行操作(数组操作),因此必须对数组的内容有充分的了解。在添加语句时应注意添加的位置,添加后也应再次对文件内容进行核实,再次确定修改内容的位置的正确性。

Page 97: 第 1 章  计算机信息系统安全概述

3.4 多进程自保护病毒实验

3.4.1 实验目的

*了解进程的相关概念和原理*了解病毒自保护的原理* 掌握进程之间相互扫描的方法* 掌握在一个进程中开启其他进程的方法

Page 98: 第 1 章  计算机信息系统安全概述

3.4.2 实验原理 1 .进程的定义和特征

进程( Process )是一个具有一定独立功能的程序在一个数据集上的一次动态执行过程。当你运行一个程序,你就启动了一个进程。进程具有动态性、独立性、并发性和结构化等重要特征。

动态性是指进程具有动态的地址空间。独立性是指各进程的地址空间相互独立。并发性也称为异步性,是指从宏观上看,各个进程是同时独立执行的。结构化是指进程空间的结构化划分。

Page 99: 第 1 章  计算机信息系统安全概述

2 .进程与程序的关系进程是动态的,而程序是静态的。程序是有序代码的集合,进程是程序的执行。进程是暂时的,程序是永久的。进程有一定的生命期,是一个状态变化的过程。而程序是指令的集合,可以长期保存,本身无“运动”的含义。进程和程序的组成不同。进程包括程序、数据和进程控制块(即进程状态信息)。进程与程序是密切相关的。一个程序可以对应多个进程,但一个进程只能对应一个程序。进程可以创建其他进程,而程序并不能形成新的程序。

Page 100: 第 1 章  计算机信息系统安全概述

3 .进程的描述进程控制块( Process Control Block, PCB)是由操作系统维护的用来记录进程相关信息的数据结构。

一般进程控制块的内容都包括以下几个部分:进程描述信息,包括进程标识符( process ID )、进程名(通常是进程所对应的可执行文件名)、用户标识符( user ID )、进程组( process group)和父进程号等。进程控制信息,包括当前进程状态、优先级、代码执行入口地址、程序的外存地址、运行统计信息(执行时间、页面调度)、进程阻塞原因和通信说明等。资源占用信息,是指进程占用的系统资源列表,包括本进程已分得的外设类别、数量、共享段的起始地址与长度等各种资源信息以及本进程正在申请的资源名称等。现场保护结构,用于保留进程暂停时的断点信息以便重新运行时恢复,主要是保存寄存器值。

Page 101: 第 1 章  计算机信息系统安全概述

4 .进程的状态转换

退出 运行 就绪

提交

调度

超时

释放 创建 就绪 运行 退出

阻塞

Page 102: 第 1 章  计算机信息系统安全概述

( 1 )运行状态进程占用处理器资源,处于此状态的进程的数目小于等于处理器的数目。。( 2 )就绪状态进程已获得除处理器以外的所需资源,等待分配处理器资源。( 3 )阻塞状态由于进程等待 I/O操作或进程同步等条件而暂停运行时处于阻塞状态。在满足条件之前,即使把处理器分配给该进程,进程也是无法执行的。( 4 )创建状态进程正在创建过程中,还不能运行。( 5 )退出状态进程已经结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息。

Page 103: 第 1 章  计算机信息系统安全概述

5 .病毒通过创建多个进程实现自保护的原理

必须通过 API钩子技术,通过建立一个后台的系统钩子,拦截 PSAPI的 EnumProcessModules 等相关的函数来实现对进程和服务的遍历调用的控制。当检测到进程 ID ( PID )为病毒进程的时候直接跳过,从而不在系统进程列表中显示病毒进程,这样就实现了进程的隐藏。

Page 104: 第 1 章  计算机信息系统安全概述

3.4.3 实验环境 安装Windows XP 操作系统和 Visual C++的 PC 机一台。

3.4.4 实验准备 1 .模拟病毒代码的编写

2 .主要结构体与函数说明

( 1 ) PROCESSENTRY32 结构( 2 ) CreateToolhelp32Snapshot函数( 3 ) Process32First 和 Process32Next函数( 4 ) WinExec函数

3 .进程之间的关系

Page 105: 第 1 章  计算机信息系统安全概述

3.4.5 实验内容 1 .源程序的编译

2 .模拟病毒的执行

3 .模拟病毒的自保护测试

Page 106: 第 1 章  计算机信息系统安全概述

3.4.6 实验分析与讨论

本实验的重点和难点是正确使用系统API函数CreateToolhelp32Snapshot 来获取系统所有进程快照和对进程快照储存结构 PROCESSENTRY32 的有效访问,以及掌握直接通过运行程序来开启进程的方法。掌握了这些知识点,就可以灵活运用多进程方法来实现病毒的自保护。

Page 107: 第 1 章  计算机信息系统安全概述

3.5 病毒的线程注入实验

3.5.1 实验目的

*理解进程和线程的概念,两者的联系与区别*了解进程隐藏的技术* 掌握使用远程线程注入的技术实现进程隐藏

Page 108: 第 1 章  计算机信息系统安全概述

3.5.2 实验原理 线程是操作系统分配处理器时间的基本单位,一个线程可以看成是一个执行单元,它负责执行包含在进程地址空间中的代码。

系统中可以同时存在多个进程,每个进程中同时又可以有多个线程在执行,为了使所有进程中的线程都能够“同时”运行,操作系统为每个线程轮流分配时间片,当轮到一个线程执行的时候,系统将线程的程序寄存器值恢复回去并开始执行,当时间片结束的时候,系统打断线程的执行,将线程当前的寄存器环境保存下来并切换到另一个线程中去执行,如此循环。

Page 109: 第 1 章  计算机信息系统安全概述

3.5.3 实验环境 实验平台:Windows XP。相关软件:Win32汇编语言开发软件(例:MASM32 ),汇编级分析调试器(例:Ollydbg)。

3.5.4 实验准备 1 . VirtualAllocEx函数2 . CreateRemoteThread函数

Page 110: 第 1 章  计算机信息系统安全概述

3.5.5 实验内容 实验的第一步就是设计远程线程使用的代码,代码中必须包括一个线程函数作为远程线程执行的入口,在线程函数中必须完成所有所需 DLL 的装入工作和 API函数地址的获取工作,然后调用创建窗口的主程序。第二步就是修改所有访问全局变量的代码,以解决重定位问题。

Page 111: 第 1 章  计算机信息系统安全概述

3.5.6 实验分析与讨论 本实验使用远程线程注入的技术实现进程隐藏,我们用 Win32汇编语言实现了远程线程注入,代码中实现了可重定位调用 Win32 API函数,并且运用了代码自定位等技术手段。总体来说,这个实验的难度较大,代码量也相对较多,对于初学者来说,需要慢慢理解相关概念,逐步掌握这些技术。

Page 112: 第 1 章  计算机信息系统安全概述

3.6 PE文件自免疫防病毒实验

3.6.1 实验目的 *复习一般病毒的感染方式*巩固PE文件的结构* 掌握使用校验和方式自免疫防范PE病毒的方法

Page 113: 第 1 章  计算机信息系统安全概述

3.6.2 实验原理 本实验主要运用了校验和的方法防范 PE病毒,因此我们需要先了解一些计算机病毒校验和法诊断的原理。该方法首先需要计算正常文件的校验和,将该校验和写入文件中或写入别的文件中保存。在文件使用前或文件使用过程中定期地检查文件内容,根据文件内容算出校验和并比较与原来保存的校验和是否一致,从而可以发现文件是否感染,这种方法既可发现已知病毒又可发现未知病毒。

Page 114: 第 1 章  计算机信息系统安全概述

3.6.2 实验环境 实验平台:Windows XP。相关软件:VC++,文本编辑器(例: UltraEdi

t )。

3.6.4 实验准备 本实验使用前面 3.3节“PE病毒的变异实验”中实验准备时的 VC++程序 CopyMe.exe ,将其按钮名称修改为“自我校验并复制到 c:”,将对话框内容修改为“该程序演示自我校验并复制”。

Page 115: 第 1 章  计算机信息系统安全概述

3.6.5 实验内容 本实验的目的是在程序运行时首先检验文件中几处重要内容是否被修改,这几处内容是: PE 文件入口地址、节表、节间空余部分以及语句间的空余部分。因此,我们需要先确定这几处内容的具体位置。

Page 116: 第 1 章  计算机信息系统安全概述

3.6.6 实验分析与讨论 本实验的目的在于程序运行前进行校验,校验成功程序正常运行,否则提示校验出错信息。实验的关键在于何时、以何种方式以及用怎样的算法对文件进行校验。实验的难点在于针对各种可能的非法修改采取不同的校验策略,本例中:校验文件入口地址采取直接比较,节表处采取判断空项是否保持为空(避免添加新节),节间和语句间采取零校验(避免节间插入和空洞插入)。

Page 117: 第 1 章  计算机信息系统安全概述

第 4 章 Windows 系统攻击技术相关实验

4.1 Windows系统攻击技术简介 4.2 Windows系统LC5口令破解实验 4.3 防范UNICODE攻击演示实验

4.4 防范浏览器溢出入侵攻击演示实验 4.5 堆栈溢出模拟实验 4.6 防范堆栈溢出执行攻击代码的模拟实验 4.7 防范远程堆栈溢出攻击的模拟实验

Page 118: 第 1 章  计算机信息系统安全概述

4.1 Windows 系统攻击技术简介

4.1.1 拒绝服务攻击( DoS ) 拒绝服务( Denial-of-Service ,简称 DoS )攻击就是通过消耗目标主机或者网络的资源,从而干扰或者瘫痪其为合法用户提供的服务。

Data General

Data General

Data General

Data General

Data General

Data General

Data General

Data General

Data General

攻击者 受害者

代理端

代理端

代理端

代理端

代理端

代理端

主控端

主控端

主控端

Page 119: 第 1 章  计算机信息系统安全概述

目前 DDoS攻击主要分为两类,即带宽耗尽型和资源耗尽型。1.带宽耗尽型2.资源耗尽型

检测 DDoS攻击的主要方法有以下两种:( 1 )根据异常情况分析( 2 )使用 DDoS检测工具

Page 120: 第 1 章  计算机信息系统安全概述

4.1.2 黑客入侵 对于大多数入侵来说,均可分成三个阶段:信息收集;系统攻击及破解;后门设置。

1 .信息收集( 1 )使用各种扫描工具对入侵目标进行大规模扫描,得到系统信息和运行的服务信息。( 2 )利用各种查询手段得到与被入侵目标相关的一些信息。

SNMP协议:用来查阅网络系统路由器的路由表,从而了解目标主机所在网络的拓扑结构及其内部细节。 TraceRoute 程序:能够用该程序获得到达目标主机所要经过的网络数和路由器数。 Whois 协议:该协议的服务信息能提供所有有关的 DNS域和相关的管理参数。 DNS 服务器:该服务器提供了系统中可以访问的主机 IP地址表和它们所对应的主机名。 Ping实用程序:可以用来确定一个指定的主机的位置。

Page 121: 第 1 章  计算机信息系统安全概述

2 .系统攻击及破解( 1 )口令破解攻击者攻击目标时常常把破译用户的口令作为攻击的开始。在得到用户账号后,对口令的破解一般有以下三种方法:第一种方法是通过网络监听非法得到用户口令。这类方法有一定的局限性,但危害性极大。监听者往往采用中途截击的方法来获取用户账户和密码。还有一种中途截击攻击方法,它在你同服务器端完成“三次握手”建立连接之后,在通信过程中扮演“第三者”的角色,假冒服务器身份欺骗你,再假冒你向服务器发出恶意请求,其造成的后果不堪设想。第二种方法是利用一些专门软件远程强行破解用户口令。这种方法不受网段限制,但攻击者要有足够的耐心和时间。第三种方法是获得 Windows 系统的 sam文件对其破解。

Page 122: 第 1 章  计算机信息系统安全概述

( 2 )系统漏洞利用系统漏洞即系统中某个程序(包括操作系统)在设计时未考虑周全,当程序遇到一个看似合理,但实际无法处理的问题时,从而引发出不可预见的错误。Unicode漏洞。 输入法漏洞。系统管理权限漏洞。( 3 )缓冲区溢出攻击缓冲区溢出攻击的原理是通过往程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。最常见的攻击方法是通过制造缓冲区溢出使程序运行一个用户 shell,再通过 shell执行其他命令。

Page 123: 第 1 章  计算机信息系统安全概述

3 .后门设置在成功地侵入系统后,为了下次可以方便地再进入,黑客一般会在系统中设置自己才知道的后门。所谓后门,可以是一个软件,也可以是一种系统设置,甚至可以是一个网页,重要的是提供一个隐秘的进入通道。

Page 124: 第 1 章  计算机信息系统安全概述

4.2 Windows 系统 LC5口令破解实验

4.2.1 实验目的

1. 了解密码破解的原理及方式;2.学习利用 LC5密码破解工具进行密码破解;3.学习如何设置安全密码。

Page 125: 第 1 章  计算机信息系统安全概述

4.2.2 实验原理 口令密码应该说是用户最重要的一道防护门,如果密码被破解了,那么用户的信息将很容易被窃取,所以密码安全是尤其需要关注的内容。随着网络黑客攻击技术的增强和方式的改变,许多口令都可能被攻击和破译,这就要求用户提高对口令安全的认识。这个实验中介绍了口令破解的原理和工具的使用,可以用这些工具来测试用户密码的强度和安全性,以使用户选择更为安全的口令。

Page 126: 第 1 章  计算机信息系统安全概述

4.2.3 实验环境

4.2.4 实验准备

安装Windows 2000/XP 系统的 PC 机一台,安装 L0phtCrack5.02密码破解工具。

学会使用 LC5.

4.2.5 实验内容 通过 LC5 的使用,了解密码设置的安全性。

Page 127: 第 1 章  计算机信息系统安全概述

4.2.6 实验分析与讨论 由上面实验我们掌握了 LC5 的用法,从破解设置密码的情况上看,暴力破解理论上可以破解任何密码,但如果密码过于复杂,暴力破解需要的时间会很长。我们在设置密码时要遵循一些原则,比如,密码长度最好不要小于 8 个字符,密码最好要包含由大写和小写的英文字母、数字和特殊符号的组合,不要包含自己姓名、单词、生日以及这几项的组合,不要使用常用单词以避免字典攻击,要定期修改密码,不要把口令写下来,不要将口令存在电脑文件中,不要在不同系统上,特别是不同级别的用户上使用同一个口令,要对口令文件进行隐藏。

Page 128: 第 1 章  计算机信息系统安全概述

4.3 防范 UNICODE攻击演示实验

4.3.1 实验目的

*了解 UNICODE的编码方式,掌握 UNICODE攻击原理;*了解利用 UNICODE漏洞进行攻击;* 学习如何防护 UNICODE攻击。

Page 129: 第 1 章  计算机信息系统安全概述

4.3.2 实验原理 IIS4.0 和 IIS5.0 在 Unicode 字符解码的实现中存在一个安全漏洞,导致用户可以远程通过 IIS执行任意命令。当 IIS打开文件时,如果该文件名包含 Unicode字符,它会对其进行解码,如果用户提供一些特殊的编码,将导致 IIS错误的打开或者执行某些Web 根目录以外的文件。

Page 130: 第 1 章  计算机信息系统安全概述

4.3.3 实验环境 安装Windows 2000 系统( SP1 )的 PC 机一台,安装了 IIS 4.0 。

4.3.4 实验准备 一些利用 UNICODE漏洞入侵的常用命令。1. dir命令2.md命令3. del命令4. copy命令5 . type命令6 . attrib命令7. echo命令8.管道工具

Page 131: 第 1 章  计算机信息系统安全概述

4.3.5 实验内容 模拟攻击。

4.3.6 实验分析与讨论 本次实验基于 UNICODE漏洞的入侵演示,只是具有 Guest权限。要想对服务器进行控制就需要更高的权限了。攻击者为了达到控制服务器的目的,往往使用一个叫 TFTP 的程序,将自己的计算机做成一个 FTP 主机,当找到一台存在 UNICODE漏洞的服务器后,就可以使用 FTP 将后门工具传到目标服务器上,一旦服务器上运行这些后门程序,就会开放一些低端端口,当攻击者连接到这些低端端口后就能对整个服务器或者网络进行控制。

Page 132: 第 1 章  计算机信息系统安全概述

4.4 防范浏览器溢出入侵攻击演示实验

4.4.1 实验目的 *了解浏览器溢出入侵攻击原理* 学习如何利用漏洞以使浏览器溢出

Page 133: 第 1 章  计算机信息系统安全概述

4.4.2 实验原理 Microsoft HTML Help是 Microsoft 的联机帮助编辑系统。它通常为软件程序、多媒体标题、 Intranet 、Extranet或 Internet创建帮助的作者或开发人员使用。HTML Help 联机帮助系统中的主题编写成标准的 HTML文件。 HTML Help 中的许多可用功能是通过 HTML Help ActiveX 控件 ( HHCtrl.ocx)实现的。 HTML Help ActiveX 控件用于提供导航功能(如目录),显示辅助窗口和弹出式窗口定义,以及提供其他功能。HTML Help ActiveX 控件,可以从已编译的帮助系统的主题中使用,也可以在 Web 浏览器显示的 HTML 页中使用。而本实验所利用的正是 HTML Help ActiveX 控件在处理 Image属性时存在的漏洞,该漏洞表现为:如果对 HTML Help ActiveX 控件对象的 Image属性进行循环赋值,当反复赋值至少 128 次后,就会造成堆溢出。攻击者可以通过在恶意网页中嵌入 JavaScript 的脚本,多次对相关属性赋值,如果用户受骗访问了该恶意网页就会导致本地溢出,甚至可能执行任意指令。

Page 134: 第 1 章  计算机信息系统安全概述

4.4.3 实验环境 装有 Windows XP 系统的 PC主机, Internet Explorer浏览器。

4.4.4 实验准备

newObj = new ActiveXObject ( servername.typename, [location] )

具体参数:newObj :必选项。要赋值为 ActiveXObject 的变量名。Servername :必选项。提供该对象的应用程序的名称。 typename :必选项。要创建的对象的类型或类。 Location :可选项。创建该对象的网络服务器的名称。

ActiveXObject函数的作用是启用并返回 Automation 对象的引用,该函数的原型如下:

Page 135: 第 1 章  计算机信息系统安全概述

4.4.5 实验内容 <html><body><script>function overflow (){

var a = new ActiveXObject ( "Internet.HHCtrl.1" ) ;var b = unescape ( "XXXX" ) ;while ( b.length < 256 ) b += b;for ( var i=0; i<4096; i++ )

{ a['Image'] = b + "";

}}</script>点击下面的按钮,将使你的浏览器溢出 <br><br><input type='button' onClick='over flow () ' value=' 开始测试 '>

</body></html>

Page 136: 第 1 章  计算机信息系统安全概述

4.4.6 实验分析与讨论 通过本实验我们了解了 HTML Help ActiveX控件在处理 Image属性的溢出漏洞,并通过实验验证了此漏洞,实验中并没用利用此漏洞进行攻击。但是网络上却有利用此漏洞的攻击程序, Exploit.HHCtrl.Jiaozhu(教主)就是利用此漏洞的攻击程序,通过 HHCtrl漏洞执行恶意代码。通过诱骗用户点击恶意网页进行传播。可在被感染计算机内自动下载并运行其他木马程序。而且由于此漏洞发现较晚,而且此漏洞在系统中不易被发现。

Page 137: 第 1 章  计算机信息系统安全概述

4.5 堆栈溢出模拟实验

4.5.1 实验目的 * 掌握堆栈溢出原理*了解堆栈溢出的调试方法

Page 138: 第 1 章  计算机信息系统安全概述

4.5.2 实验原理 缓冲区是一块连续的计算机内存区域,可以保存相同数据类型的多个实例。最常见的缓冲区是字符数组,与C语言中所有的变量一样,字符数组可以被声明为静态或动态的。静态变量在程序加载时定位于数据段;动态变量在程序运行时定位于堆栈之中。动态缓冲区的溢出问题,也就是基于堆栈的缓冲区溢出。

Page 139: 第 1 章  计算机信息系统安全概述

4.5.3 实验环境 安装Windows XP系统的 PC机一台,编程工具为 VC6.0 。

4.5.4 实验准备 堆栈溢出分析要进行大量调试,本实验中选择的调试工具就用 VC自带的调试工具。在进行实验前,应熟练掌握。1 .调试窗口2 .使用断点和单步调试功能

Page 140: 第 1 章  计算机信息系统安全概述

4.5.5 实验内容 用一个可以产生堆栈溢出的程序来进行调试,从而掌握堆栈溢出原理。

4.5.6 实验分析与讨论 本实验主要讨论了堆栈溢出的基本原理,了解了局部变量是如何分配的,局部变量和堆栈之间的关系,以及函数调用、函数返回地址与堆栈的关系,并通过实验验证了堆栈溢出的过程。但并没有涉及大多数堆栈溢出的攻击方式和原理。目前,主要的黑客攻击方式就是利用堆栈溢出的漏洞进行攻击,它们都是在利用堆栈溢出时转而执行自己精心编译的代码,从而对发生堆栈溢出的主机进行攻击。

Page 141: 第 1 章  计算机信息系统安全概述

4.6 防范堆栈溢出执行攻击代码的模拟实验

4.6.1 实验目的

* 掌握利用堆栈溢出进行攻击的原理* 学习利用代码( Shollcode )的编写和调试技

Page 142: 第 1 章  计算机信息系统安全概述

4.6.2 实验原理 一般而言,攻击者必须达到如下的两个目标:在程序的地址空间里安排适当的代码。通过适当地赋值寄存器和存储器,让程序跳转到安排的地址空间执行。有两种在被攻击程序地址空间里安排攻击代码的方法:( 1 )植入法( 2 )利用已经存在的代码1 .激活记录2 .函数指针3 .结构化异常处理4 .通过跳转指令执行攻击代码

Page 143: 第 1 章  计算机信息系统安全概述

4.6.3 实验环境 安装Windows XP 系统的 PC 机一台,编程工具为 VC6.0 。

4.6.4 实验准备 本节实验将用跳转指令( jmp esp)来进行堆栈溢出攻击模拟演示,由前面实验原理的叙述可知,要用 jmp esp指令,必须要从 dll 文件中得到该指令的地址。我们先设计了一个专门的程序来得到在 user32.dll 文件中的 jmp esp指令地址。

Page 144: 第 1 章  计算机信息系统安全概述

4.6.5 实验内容 溢出攻击的程序以上一节实验字符串拷贝程序为基础。当我们将 ret 用 0x77d5af0a覆盖后,程序运行到此处将执行指令 jmp esp,而此时的 esp所指的内容就是我们编写的执行代码。在执行代码中要确保我们所需要的动态链接库都加载到进程空间。一种办法是利用该被攻击程序本身调用的动态链接库,另外一种办法是从溢出代码中加载动态链接库。本次实验采用第一种方法,但是在上一节实验的程序中没有装载user32.dll 文件,而弹出消息的函数是从user32.dll 文件中加载的,所以原来的基础程序中要加入 LoadLibrary (“user32.dll”),以确保能调用 MessageBox( )函数。

Page 145: 第 1 章  计算机信息系统安全概述

4.6.6 实验分析与讨论 本节实验实现了利用堆栈溢出,并通过跳转命令来执行 shellcode,然后我们在 shellcode中利用MessageBoxA( ) 函数弹出一个消息对话框。如果我们想通过溢出打开一个 dos窗口。打开一个 dos窗口的程序如下:

#include <windows.h>#include <winbase.h>typedef void ( *MYPROC )( LPTSTR ) ;int main (){HINSTANCE LibHandle;MYPROC ProcAdd;char dllbuf[11] = "msvcrt.dll";char sysbuf[7] = "system";char cmdbuf[16] = "command.com";LibHandle = LoadLibrary ( dllbuf ) ;ProcAdd = ( MYPROC ) GetProcAddress ( LibHandle, sysbu

f ) ;( ProcAdd )( cmdbuf ) ;return 0;}

Page 146: 第 1 章  计算机信息系统安全概述

4.7 防范远程堆栈溢出攻击的模拟实验

4.7.1 实验目的

* 掌握远程堆栈溢出攻击原理* 学习网络通信编程及调试技术*了解远程主机控制技术

Page 147: 第 1 章  计算机信息系统安全概述

4.7.2 实验原理 两台电脑之间进行网络通信需要用套接字( socket)编程来实现。套接字( socket)是支持 TCP/IP 协议的网络通信的基本操作单元,可以将套接字看成不同主机间的进程进行双向通信的端点。一般来说,跨机应用进程之间要在网络环境下进行通信,必须在网络的每一端都建立一个套接字。根据传输数据类型的不同,套接字可分为面向连接的数据套接字( SOCK_STREAM)、无连接的数据报套接字( SOCK_DGRAM)和原始套接字( SOCK_RAM)三种类型。因为 telnet是使用 TCP 协议的,所以本节实验采用面向连接的套接字来实现网络通信。

Page 148: 第 1 章  计算机信息系统安全概述

4.7.3 实验环境 装有 Windows XP系统的 PC机两台:一台 PC机作为服务器,运行有堆栈溢出漏洞的服务程序,另一台PC机将作为客户端运行攻击程序对服务器进行远程堆栈溢出攻击。服务器程序和攻击程序均为 VC6.0开发。反汇编工具:W32Dasm 。

4.7.4 实验准备 根据实验准备中的攻击程序代码就能获得有堆栈溢出漏洞的服务器程序所在的服务器的系统控制权,进而进行攻击。但这个程序是 C程序,我们要想实现攻击必须要将这个程序提取成 shellcode 。

Page 149: 第 1 章  计算机信息系统安全概述

4.7.5 实验内容 本实验中,我们需要设计一个客户端程序来进行演示。我们用 VC建立一个对话框,并在对话框中加入 2 个Button控件、 1 个 Edit Box控件、 1 个 IP Adress控件,并在 View->ClassWizard->Member Variables 中给Edit Box控件和 IP Adress控件分别添加一个成员变量,前者添加一个 int类型变量 m_port ,后者为 CIPAdressCtrl类型变量 m_ip 。添加完毕后,将 2 个 Button控件分别改名为 Send 和 Connect ,双击确认后将产生两个函数 OnSend 和 OnConnect ,在 OnSend函数中我们将实现对服务器程序溢出后打开一个 cmd窗口并开放一个端口 4444 ,在 OnConnect函数中我们实现通过 telnet连接服务器端口 4444 ,获得服务器的系统控制权。

Page 150: 第 1 章  计算机信息系统安全概述

4.7.6 实验分析与讨论 本节实验我们分析了对有堆栈溢出漏洞的服务器程序进行攻击的原理及 shellcode 的编写过程。但是我们针对的只是一个 strcpy函数的溢出漏洞,溢出点是很容易确定的,确定了溢出点我们才能准确地利用 jmp esp命令进行我们的 shellcode 。但在实际攻击中,我们需要熟练地使用各种反汇编软件以及各种调试工具,通过不断调试才能找到溢出点。

Page 151: 第 1 章  计算机信息系统安全概述

第 5 章 Windows 系统防范技术相关实验

5.1 Windows系统防范技术简介5.2 软件电子注册实验5.3 软件反破解实验5.4 公开密钥加密演示实验5.5 图像文件的数字水印实验

Page 152: 第 1 章  计算机信息系统安全概述

5.1 Windows 系统防范技术简介

5.1.1 软件保护技术 这些反破解措施主要有:花指令、代码自生成、程序加壳等。所谓花指令,简单来说,就是将垃圾数据和代码一起放在同一个段,导致代码反汇编的时候出错。或者可以认为是在程序中掺杂一些采用“跳转指令加数据”的代码,可以局部破坏对软件的反汇编。

Page 153: 第 1 章  计算机信息系统安全概述

5.1.2 数据加密技术 加密技术从技术体系上通常分为两大类:“对称式”和“非对称式”。对称式加密、就是加密和解密使用同一个密钥,通常称之为“ Session Key”,这种加密技术目前被广泛采用,如美国政府所采用的 DES 加密标准就是一种典型的“对称式”加密法,它的 Session Key长度为 56Bits 。非对称式加密就是加密和解密所使用的不是同一个密钥,非对称式加密体系中每个通信者都有两个密钥,分别称为“公钥”(公开给每个通信者)和“私钥”(自己才知道),它们两个必须配对使用。

Page 154: 第 1 章  计算机信息系统安全概述

5.1.3 系统数据恢复技术 造成数据丢失的原因大致分为两种:软件故障和硬件故障。软件故障有:病毒感染、误操作、磁道损坏、硬盘逻辑锁、操作时断电等。软件现象一般表现为操作系统无法启动、读盘错误、文件找不到、打不开、乱码、报告无分区、无格式化等。而硬件故障有:磁盘划伤、磁组变形、芯片及其他元器件烧坏等。硬件故障一般表现为读写错误、硬盘不认、硬盘异响、电机不转等现象。

根据数据被破坏的原因应该采用不同的恢复方法。

Page 155: 第 1 章  计算机信息系统安全概述

5.2 软件电子注册实验

5.2.1 实验目的

* 通过实验学习并掌握电子注册中机器信息的获取过程* 理解注册码的有关知识* 了解软件保护技术的原理

Page 156: 第 1 章  计算机信息系统安全概述

5.2.2 实验原理

软件正常运行 限制功能实用 正常运行

取机器信息 计算注册码 注册否 注册否

程序运行 软件用户 软件开发者

发送机器信息

返回注册码

安装软件 算法

软件电子注册功能的实现可以分成三个部分:* 用户端注册信息的提取和发送* 开发者根据用户信息注册码的生成* 用户使用注册码完成注册

Page 157: 第 1 章  计算机信息系统安全概述

5.2.3 实验环境 安装Windows XP/Windows 2000 操作系统和 Visual C++的 PC机一台。

5.2.4 实验准备 本实验的代码相对比较简单,关键的是理解软件电子注册的原理和掌握相关 API函数的使用方法。

Page 158: 第 1 章  计算机信息系统安全概述

5.2.5 实验内容 1.获取用户信息 运行获取用户信息的小程序,提取硬盘序列号。2 .生成注册码 在获取用户信息后,下一步就是生成注册码。3.验证注册码 最后我们用一个小程序对注册码进行验证,这个过程实际上包含了前面的两个过程。输入注册码后点击“验证” 。

Page 159: 第 1 章  计算机信息系统安全概述

5.2.6 实验分析与讨论 本实验是一个相对来说比较简单的实验,但对于读者理解软件电子注册的原理来说还是有积极意义的。另外,在进行比较复杂的实验前,先完成一些简单的实验将有助于读者掌握一些基础知识并增强独立完成进一步实验的自信心。本实验只是在一台机器上模拟电子注册过程,进一步的实验可以设计在网络环境中的两台机器上进行,还可以尝试对机器信息进行一些复杂的数据变换。

Page 160: 第 1 章  计算机信息系统安全概述

5.3 软件反破解实验

5.3.1 实验目的 *复习汇编编程及反汇编调试技

术* 掌握代码自生成的软件保护技

术*加深对系统防范技术的认识

Page 161: 第 1 章  计算机信息系统安全概述

5.3.2 实验原理

文件保存时 运行时

关键代码(空) 关键代码(空)

加密后数据 加密后数据

数据段

代码段

数据段

代码段

加密

解密

如果我们对软件进行反汇编,找到进行注册码验证的指令序列,我们就可以想办法绕开注册码验证,甚至自己写出模拟开发者的注册机,这种技术就叫做软件破解技术。

Page 162: 第 1 章  计算机信息系统安全概述

5.3.3 实验环境 安装Windows XP操作系统和 Visual C++的 PC机一台,安装Win 32Dasm 及 MASM32 。

5.3.4 实验准备 本实验首先用汇编语言编写了一个简单的窗口程序( limit3.exe ) ,在实验中接下来要做的就是对这段代码加密后放到数据段专门留出的区域中(开始分配了一个字符数组,并全部初始化为“ *”,称为: key_code区),并在程序中设置一段代码在运行时将关键代码从 key_code区恢复到原来位置。

Page 163: 第 1 章  计算机信息系统安全概述

5.3.5 实验内容 本实验分成 3步来实现:添加解密代码;用外部程序实现关键代码的加密存放;修改相关属性使程序正常运行。1.添加解密代码2.用外部程序实现关键代码的加密存放3.修改相关属性使程序正常运行

Page 164: 第 1 章  计算机信息系统安全概述

5.3.6 实验分析与讨论 本实验中的内容不仅涉及到软件保护技术的相关知识,还涉及一些第 3章介绍的 PE 文件格式的知识。我们可以发现,系统安全的技术分类不是绝对的,也会存在一些交叉,所以我们应该将各种技术方法融会贯通,才可能在技术上更上一层楼。在本实验基础上还可以作进一步地延伸,如可以将注册码的判断作为关键代码进行更接近真实情况的模拟实验;也可以进一步加入其他动态检查机制(如防病毒机制),从而实现对软件的综合保护。

Page 165: 第 1 章  计算机信息系统安全概述

5.4 公开密钥加密演示实验

5.4.1 实验目的 * 掌握PGP加密软件的使用*理解并掌握公开密钥加密的原理与应

Page 166: 第 1 章  计算机信息系统安全概述

5.4.2 实验原理 公开密钥加密机制也叫做非对称加密机制。非对称加密算法需要两个密钥——公开密钥( Public key)和私有密钥( Private key)。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能进行解密;如果用私有密钥对数据进行加密,则只有用对应的公开密钥才能解密。正因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。这种算法的优点是不用将需要保密的密钥在网络上传递;缺点是速度很慢,不太适合于对大文件加密而只适用于对少量数据进行加密。

Page 167: 第 1 章  计算机信息系统安全概述

5.4.3 实验环境 安装Windows XP/Windows 2000 操作系统的 PC机一台, PGP加密软件安装文件。

5.4.4 实验准备 在正式进行实验前,我们需要先安装PGP加密软件并生成自己的一对密钥。

Page 168: 第 1 章  计算机信息系统安全概述

5.4.5 实验内容

下面我们就具体来演示使用 PGP进行加密邮件发送的完整过程,我们将过程分为三步:导出自己的公钥;导入对方发来的公钥;用对方公钥加密邮件后发给对方。

Page 169: 第 1 章  计算机信息系统安全概述

5.4.6 实验分析与讨论 本实验是一个演示性的实验,总体来说比较简单,主要目的是通过该实验掌握PGP这种非对称加密应用软件的使用方法,从而在需要进行加密通信时能够很容易地实现。同时,通过亲身体验,能够理解非对称加密体制在网络通信中应用的优势。

Page 170: 第 1 章  计算机信息系统安全概述

5.5 图像文件的数字水印实验

5.5.1 实验目的 * 掌握数字水印的基本概念*掌握水印的嵌入与提取过

程*了解数字水印的相关应用

Page 171: 第 1 章  计算机信息系统安全概述

5.5.2 实验原理 数字水印就是在被保护的数字对象(如静止图像、视频、音频等)中嵌入某些能够证明版权归属或跟踪侵权行为的信息,这些信息可能是作者的序列号、公司标志、有意义的文本等等。

Page 172: 第 1 章  计算机信息系统安全概述

5.5.3 实验环境 安装Windows XP操作系统及 VC++编程环境的 PC机一台。

5.5.4 实验准备 BMP位图是一种以像素为单位描述颜色值的最简单的图像文件格式,易于操作。本实验即是用一个 BMP位图文件来实现数字水印, Windows库文件中提供了一个名为BITMAP的结构,定义了位图的类型、高度、宽度、颜色等属性。

Page 173: 第 1 章  计算机信息系统安全概述

5.5.5 试验内容 前面我们介绍了实现数字水印的关键代码,下面我们来看具体的实验过程。我们首先用 VC++构建了一个对话框程序,上面放置了四个按钮,前面介绍关键的代码放置在“嵌入水印”按钮及“提取水印”按钮的点击响应函数中。

Page 174: 第 1 章  计算机信息系统安全概述

5.5.6 试验分析与讨论

该实验的难点在于对水印数据的嵌入与提取,以及对位图比特位的直接操作。比特位操作的基本思想都蕴含在Operate_Byte和 Operate_ByteOut这两个函数中。认清这两个函数的作用,会对完成本实验有较大帮助。

Page 175: 第 1 章  计算机信息系统安全概述

第 6 章 Windows 系统控制技术相关实验 6.1 Windows系统控制技术简介6.2 基于注册表的系统控制实验 6.3 键盘信息截获试验 6.4 网络通信端口的监控实验 6.5 进程隐藏实验 6.6 驱动层控制外设实验 6.7 禁止复制粘贴功能的实验

Page 176: 第 1 章  计算机信息系统安全概述

6.1 Windows 系统控制技术简介

6.1.1 Windows注册表控制技术 Windows 的注册表是整个系统的控制中心,用户或应用软件通过注册表对系统进行控制是对 Windows 系统的最主要的控制手段。注册表关乎系统的各个方面,使得它在系统控制方面起到了及其重要的作用,通过它可以设置系统各个方面,大到网络硬件的控制,小到右键菜单,都可以通过注册表来实施控制。

Page 177: 第 1 章  计算机信息系统安全概述

6.1.2 Windows钩子控制技术 Windows 的钩子是指一些对 Windows 系统消息进行截获的设置,通过它,我们可以对系统流程进行监控和修改,因而 Windows 的钩子控制技术可以实现很多注册表等“合法”控制所实现不了的一些超级控制技术。

Page 178: 第 1 章  计算机信息系统安全概述

6.1.3 Windows防火墙控制技术 现阶段的个人防火墙主要有以下功能:控制应用程序的通信规则防火墙可以对应用程序设置规则,这项功能对付木马十分有用。数据包过滤和记录防火墙有专业级别的包内容记录功能,可以使用户更深入地了解各种攻击包的结构网络端口列表防火墙的网络端口列表窗口中列出了所有使用网络端口的应用程序及其所使用的端口。检测、阻挡入侵并记录防火墙可以检测到来自 Internet 网和局域网的多种网络入侵,其中入侵检测能够检测并阻止 DDoS 攻击;

Page 179: 第 1 章  计算机信息系统安全概述

6.1.4 Windows驱动层控制技术

因为 Windows 的驱动程序全部位于系统核心部分,驱动程序的开发难以避免地涉及到许多系统底层的知识,因而它一直是一项具有很高难度的技术工作,即便是编写过具有相当难度Win32 程序的开发人员,在编写设备驱动程序时也将面临新的挑战。

Page 180: 第 1 章  计算机信息系统安全概述

6.2 基于注册表的系统控制实验

6.2.1 实验目的 * 熟悉注册表的使用* 掌握使用注册表进行基本的系统控

制* 熟悉与注册表相关的系统安全知识

Page 181: 第 1 章  计算机信息系统安全概述

6.2.2 实验原理 注册表实质上是一个包含各种系统参数的二进制数据库。其中保存着系统正常运行所需要的软、硬件的有关配置和状态信息,应用程序和资源管理器外壳的初始条件、首选项和卸载数据,计算机的整个系统的设置和各种许可权限,文件的扩展名与应用程序的关联,计算机性能纪录和底层的系统状态信息以及各类其他数据。

Page 182: 第 1 章  计算机信息系统安全概述

6.2.3 实验环境 安装Windows XP操作系统的 PC机一台。

6.2.4 实验准备

1 . Regedit编辑器的使用2 .注册表的导入与导出

Page 183: 第 1 章  计算机信息系统安全概述

6.2.5 实验内容 1 .通过注册表禁止重要程序的使用

( 1 )禁止他人非法编辑注册表( 2 )禁止使用控制面板( 3 )禁止使用任务管理器( 4 )禁止运行指定程序

2 .通过注册表限制系统的某些功能

3 .程序自动加载运行

( 1 )隐藏驱动器( 2 )锁定“开始”菜单

Page 184: 第 1 章  计算机信息系统安全概述

6.2.6 实验分析与讨论

本节的实验内容主要涉及的是修改一些注册表设置,从而提高系统的安全性能。正因为注册表有着如此方便的功能,它成为攻击者关注的重点。很多病毒或木马程序为了实现自身功能通常会修改注册表的一些表项,同时为了防止被用户清除,它们还可以恶意禁止注册表编辑器的使用。

Page 185: 第 1 章  计算机信息系统安全概述

6.3 键盘信息截获试验

6.3.1 实验目的 *理解键盘信息获取的原理* 掌握钩子的使用*进一步了解系统流程及控制技

Page 186: 第 1 章  计算机信息系统安全概述

6.3.2 实验原理 钩子是 Windows 的消息处理机制中的一个截获点,应用程序可以在该处安装一个监控子程序,这样就可以在系统中的消息流到达目的窗口之前监控它们。

钩子程序一般包括以下 3 个功能模块:*主程序。*钩子回调函数——用来接收系统发过来的消息并对感兴趣的消息进行处理。*钩子的安装和卸载程序。

Page 187: 第 1 章  计算机信息系统安全概述

6.3.3 实验环境 装有 Windows NT 操作系统的 PC机一台。

6.3.4 实验准备 本实验的源程序包含 Hookdll.asm ,Hookdll.def , Main.asm , Main.rc 。我们还提供了 makefile文件。其中 HookDll.asm 和 HookDll.def文件用来生成动态链接库;Main.asm 和 Main.rc 是主程序部分。

Page 188: 第 1 章  计算机信息系统安全概述

6.3.5 实验内容 首先进入 Windows 系统的控制台界面,切换到源程序所在的文件夹(这里是 C:\KeyHook),输入 nmake(makefile 文件名),敲回车键。如果出现界面时,就表示程序已经成功的编译并构建好了。我们可以在该目录下看到 hookdll.DLL和Main.exe 两个文件。这时我们可以运行Main.exe程序,一个标题为“键盘钩子”的窗口将会出现。这时如果再在任意程序中输入一些字符,我们可以看到键盘钩子均可以截获这些信息并显示在窗口中 .

Page 189: 第 1 章  计算机信息系统安全概述

6.3.6 实验分析与讨论 本实验通过简单的键盘钩子程序实现了键盘信息的截获。通过这个实验,大家可以认识到键盘钩子在系统安全中扮演的角色。如果把钩子用在后台执行的程序中,就能够偷偷检查任何程序中发生的 WM_CHAR消息,这样用户输入的任何内容,包括用户名,密码等都可以被截获,甚至记录下来,从而造成私人信息的泄漏。事实上,很多木马程序就是这样做的,像冰河一类的木马程序就可以在后台记录用户的击键并偷偷发送到攻击者的信箱中去。在深入理解了键盘信息截获的原理之后,我们就可以采取相应的办法,来防止键盘消息被记录。

Page 190: 第 1 章  计算机信息系统安全概述

6.4 网络通信端口的监控实验

6.4.1 实验目的 * 掌握网络通信端口的监控方法* 掌握端口与进程相关联的方法*理解系统安全中有关网络的知识

Page 191: 第 1 章  计算机信息系统安全概述

6.4.2 实验原理 端口在网络通信中具有重要的作用,因而在入侵中通常会被作为第一个攻击目标。入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的。从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,然后根据这些信息对系统发起攻击。另一方面,在侵入系统后,留在系统中的后门要和攻击者通信,一般也要通过端口来进行。

Page 192: 第 1 章  计算机信息系统安全概述

6.4.3 实验环境 安装Windows XP操作系统和 Microsoft Visual C++的 PC机一台。

6.4.4 实验准备 1 .获取 TCP连接表的函数2 .获取 UDP连接表的函数3 .程序中用到的其他API函数4 .程序中定义的函数

Page 193: 第 1 章  计算机信息系统安全概述

6.4.5 实验内容

使用 Visual C++编写前面介绍的相应程序后,编译链接将得到一个可执行文件( netstatp.exe ),运行这个可执行文件 .

Page 194: 第 1 章  计算机信息系统安全概述

6.4.6 实验分析与讨论

本实验实现了端口的监控,运用的代码有一部分是 Windows 系统本身的 netstat功能的源代码。除了防火墙,还有一些工具可以实现端口的监控,比如 fport,它使用 GetTcpTable和 GetUdpTable函数来获取 TCP 和 UDP连接。其中的 GetTcpTable函数能返回当前系统中全部有效的 TCP连接。

Page 195: 第 1 章  计算机信息系统安全概述

6.5 进程隐藏实验

6.5.1 实验目的 * 掌握VC++编程实现本机进程隐藏的技

术*理解系统进程控制链的工作原理*了解 Windows 的进程管理知识

Page 196: 第 1 章  计算机信息系统安全概述

6.5.2 实验原理 下面介绍本实验涉及的几个知识点。1 .活动进程链的结构2 . Windows 进程调度3 .如何直接访问物理内存4 . Windows如何枚举进程5 . Windows 进程转换原理

Page 197: 第 1 章  计算机信息系统安全概述

6.5.3 实验环境 安装Windows XP操作系统和 Microsoft Visual C++的 PC机一台。

6.5.4 实验准备 1 .自定义的 HideProcess函数2 . HideProcess函数中调用的各个函数( 1 ) OpenPhysicalMemory函数( 2 ) SetPhyscialMemorySectionCanBeWrited函数( 3 ) GetData函数和 SetData函数( 4 ) LinearToPhys函数

Page 198: 第 1 章  计算机信息系统安全概述

6.5.5 实验内容 本实验需要先实现一个简单的对话框程序( hideprocess.exe),具体实现技术可以参考本书第 2章的有关内容。在该对话框中设置一个按钮 Button1 ,在它的点击响应函数中调用函数HideProcess 。对程序进行编译并构建后,运行程序 。

Page 199: 第 1 章  计算机信息系统安全概述

6.5.6 实验分析与讨论 如果我们要想检测当前系统中存在的进程,最好的办法是对当前系统中活动线程的检测。在这里提出两种查看隐藏的进程的方法。一种方法是: Windows 的线程之间切换需要调用一个 Swap Context函数。另一种方法是: Windows 内核中存在着 4 个链表,这 4 个链表是线程调度的依据(不同优先级的线程队列),也就是说系统中的每个线程必然会是这 4 个链表其中之一,我们可以读取这 4 个链表,然后再检测每个链表中的线程所对应进程是否在进程活动链中即可 。

Page 200: 第 1 章  计算机信息系统安全概述

6.6 驱动层控制外设实验

6.6.1 实验目的

*了解驱动程序控制外设的原理* 掌握编写驱动程序的方法* 掌握 USB过滤驱动程序设计以及安装方法

Page 201: 第 1 章  计算机信息系统安全概述

6.6.2 实验原理

在 WDM驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个驱动程序我们称为功能( function )驱动程序,通常它就是你认为的那个硬件设备驱动程序。它了解使硬件工作的所有细节,负责初始化 I/O操作,有责任处理 I/O操作完成时所带来的中断事件,有责任为用户提供一种设备适合的控制方式。另一个驱动程序我们称为总线( bus )驱动程序。它负责管理硬件与计算机的连接。

Page 202: 第 1 章  计算机信息系统安全概述

6.6.3 实验环境 安装Windows XP操作系统和 Windows XP DDK以及 Visual C++的 PC机一台。

6.6.4 实验准备 1 .在 Windows XP操作系统中安装Microsoft Visual Studio C++ 6.02 .安装Windows XP DDK3 .设置环境变量并编译生成所需要的库文件4 .设计编写源程序6.6.5 实验内容

Page 203: 第 1 章  计算机信息系统安全概述

6.6.6 实验分析与讨论 在本实验中,通过编写一个 USB存储设备的过滤驱动来实现禁止对 USB进行写操作,从而实现通过驱动层控制外设。该驱动程序是通过拦截 SCSIOP_WRITE或者 SCSIOP_WRITE6 操作码进行处理来实现防写的。可以修改这个驱动程序,如果拦截的是 SCSIOP_READ操作码则不能对 USB设备进行读操作,如果拦截的是 SCSIOP_COPY操作码则不能进行复制操作。还有很多的不同的操作码,通过拦截不同的操作码则可以满足不同的需求,因此该驱动程序具有很大的扩展性。

Page 204: 第 1 章  计算机信息系统安全概述

6.7 禁止复制粘贴功能的实验

6.7.1 实验目的

* 熟悉 Visual C++的使用*通过 VC++编程实现本机上禁止 *Word文档到记事本文档的复制粘贴* 熟悉系统安全的相关知识

Page 205: 第 1 章  计算机信息系统安全概述

6.7.2 实验原理

1 .系统剪贴板2 .系统钩子( 1 )利用注册表( 2 )使用 SetWindowsHookEx函数( 3 )使用 CreateRemoteThread函数( 4 )运用 BHO

Page 206: 第 1 章  计算机信息系统安全概述

6.7.3 实验环境 安装Windows XP操作系统和 Microsoft Visual C++的 PC机一台。

6.7.4 实验准备 1 . CModuleScope函数 2 . GetProcessHostName函数3 . GetProcessHostFullName函数4 . GetCurrentProcessId函数5 . GetTraceEnabled函数

Page 207: 第 1 章  计算机信息系统安全概述

6 . GetIniFile函数7 . GetInstance函数 8 . ManageModuleEnlistment函数9 . LogMessage函数10 . InitializeHookManagement函数11 . PostMessage函数12 . ManageModuleDetachment函数13 . GetZeroHandle函数14 . InstallHookMethod函数

Page 208: 第 1 章  计算机信息系统安全概述

15 . InjectModuleIntoAllProcesses函数16 . MyOpenClipboard函数17 . OpenClipboard函数18 . EnumClipboardFormats函数19 . GetClipboardFormatName函数20 . EmptyClipboard函数21 . CloseClipboard函数

Page 209: 第 1 章  计算机信息系统安全概述

6.7.6 实验分析与讨论 首先,在程序中要实现两个应用程序之间的文档的复制粘贴,必须知道这两个应用程序的名字,如果是实现任意两个应用程序之间的防复制粘贴,则必须对所有的应用程序进行监控,实现起来有一定的复杂性。其次,该方法并未对键盘上的截屏键实现屏蔽,恶意用户可以利用截屏把Word文档中的内容记录下来,因此应同时对键盘上的截屏键进行屏蔽以解决该问题。但又不能防止其他的截屏软件的使用,同样又存在一定的隐患。最后,在 Windows 系统中有系统剪贴板,还有 Office剪贴板,而本实验只能清除系统剪贴板的内容。

6.7.5 实验内容

Page 210: 第 1 章  计算机信息系统安全概述