文件系统驱动编程基础篇之8.doc_第1页
文件系统驱动编程基础篇之8.doc_第2页
文件系统驱动编程基础篇之8.doc_第3页
文件系统驱动编程基础篇之8.doc_第4页
文件系统驱动编程基础篇之8.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

文件系统驱动编程基础篇之8安全机制 关键字:文件系统驱动编程,安全机制 作者:wskjuf 更新:2008-10-06 22:15:45 浏览:10388文件系统驱动编程基础篇之八安全机制 一、前略 本系列文章为业余编程爱好者而写,仅仅作为初学者的一个借鉴,真正的精华存在于参考资料*中。知识的积累将经历从薄到厚,再从厚到薄的反复过程,为了打下牢固的基础,请读者务必在阅读本文的基础上花费必要的时间完成参考资料。参考资料*:1.Programming Windows Security(中文版为Windows安全性编程)2.Microsoft? Windows? Internals, Fourth Edition(中文版为深入解析Windows操作系统)第八章3.深入研究Windows内部原理系列之九:Windows的安全机制和实现(该系列视频难度不大,但有着提纲挈领的作用)4.Programming Microsoft Windows 2000 Unleashed(中文版为Windows2000编程技术内幕)第七章5.Programming Applications for Microsoft Windows(中文版为Windows核心编程)3.1.2节6.Writing Secure Code7.Microsoft Windows Security Inside Out for Windows XP and Windows 2000(中文版为精通Microsoft Windows 2000和Windows XP安全技术)8.Creating a Security Descriptor for a New Object in C+9.Enabling and Disabling Privileges in C+10.Converting a Binary SID to String Format in C+11.Windows 操作系统中的常见安全标识符12.威胁和对策 13. WRK1.2(Windows操作系统的教学简化版本) 14. NTFS-3G Stable Read/Write Driver 阅读基础:不限。本章目的:了解系统的安全体系、基本的数据结构和安全函数。二、用户模式下的安全结构 请先观看资料3的视频,了解Windows系统安全体系的基本框架,接下来我们为资料4理清脉络:一)安全描述符CreateFile、CreateProcess、RegCreateKeyEx这些常用的函数都有一个安全属性参数,安全属性主要包含着对象的安全描述符。这里需要强调的是安全描述符是针对对象而言的,用于描述对象的安全性信息,它是我们接触到的第一支主线的纲。下图表达了安全描述符和各子结构的关系,读者不要立即陷入结构的细节中去,可暂时把每个结构都当成一个黑盒来看待。privilege特权,对系统相关操作而言的能力,比如是否允许关机、加载设备驱动、修改系统时间等,包含在访问令牌中 The right of a user to perform various system-related operations, such as shutting down the system, loading device drivers, or changing the system time. A users access token contains a list of the privileges held by either the user or the users groups.access right 访问权力,对对象而言的,和特权的区别需要实践来体会 A permission granted to a process to manipulate a specified object in a particular way (by calling a system service). Different system object types support different access rights, which are stored in an objects access control list (ACL).security identifier 安全标识符 (SID) A data structure of variable length that identifies user, group, and computer accounts. Every account on a network is issued a unique SID when the account is first created. Internal processes in Windows refer to an accounts SID rather than the accounts user or group name.access control entry (ACE) (acl分为sacl和dacl,acl可包含着多个ace,ace描述了特定sid拥有的访问权力) An individual entry in an access control list (ACL). An access control entry (ACE) contains an SID and describes the access rights to a system resource by a specific user or group of users. Each object has a set of all ACEs, which is used to determine whether an access request to the object is granted. discretionary access control list 用来确定谁可以访问对象,谁不能访问对象,详看资料2的5小节 (DACL) An access control list that is controlled by the owner of an object and that specifies the access particular users or groups can have to the object.system access control list 跟系统资源有关,详看资料2的7小节 (SACL) An ACL that controls the generation of audit messages for attempts to access a securable object. The ability to get or set an objects SACL is controlled by a privilege typically held only by system administrators. trustee 受托人The TRUSTEE structure identifies the user account, group account, or logon session to which an access control entry (ACE) applies. The structure can use a name or a security identifier (SID) to identify the trustee.ACE类型:/ 本文转自 C+Builder研究 - /article.asp?i=1061&d=ipj3xoAttribute Description ACCESS_ALLOWED_ACE Grants specified rights to a user or group. This ACE is stored in a discretionary ACL (DACL). ACCESS_DENIED_ACE Denies specified rights to a user or group. This ACE is stored in a DACL. SYSTEM_AUDIT_ACE Specifies what types of access will cause system-level audits. This ACE is stored in a system ACL (SACL). typedef struct _SECURITY_DESCRIPTOR PSID Owner; / 个体,注意这些都是指针,而不是结构 PSID Group; / 所属组PACL Sacl; PACL Dacl; SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;typedef struct _SECURITY_ATTRIBUTES DWORD nLength; LPVOID lpSecurityDescriptor; / 指向安全描述符 SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;二)令牌令牌(Token)是第二支主线的纲。在用户登录系统并完成密码的验证后,系统就为该用户创建了一个访问令牌(access token)。? 访问令牌分为两种:主令牌(primary token)和模拟令牌(impersonation token)。访问令牌包含了SID,用户所属组的ID,用户权力(right)和用户特权(privilege)等安全信息。每个进程都有这个用户访问令牌的副本,每个线程也可以有自己的访问令牌,但如果没有的话,它将使用进程的访问令牌。当线程需要访问一个对象时,系统默认使用主令牌。如果某线程如服务线程模拟了客户来访问对象时,系统将为该服务线程创建模拟令牌,模拟令牌保存着客户的安全信息,服务线程用模拟令牌来访问安全对象。因此,模拟了客户的服务线程将同时拥有主令牌和模拟令牌。打开进程的令牌的招牌动作:HANDLE hToken;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken); 三)ACTRL_ACCESSACTRL_ACCESS用于设置对象和其属性的ACL列表。但笔者建议在熟练掌握了前两个内容后再考虑是否有必要学习这个结构。四)SIDSID是一个可变长的数据结构,用来标识用户或组。SID的典型字符串表示形式为“S-R-I-S”,以字母S打头,R表示修订号,现在都是1,I表示授权(Authority,6bytes),S表示子授权(SubAuthority),因为子授权个数不定,所以整个SID的长度是可变的,结构里使用了“子授权数”域来表示SID包含了多少个子授权。知名SID(well-known SIDs)是一组系统已经预定了的常用SID,如Everyone(S-1-1-0),Administrators(S-1-5-32-544)SID等,详见资料11。创建知名SID可用CreateWellKnownSid函数,示例参见Msdn。资料3关于安全结构的主要内容已经介绍完毕,请读者在资料8的示例基础上总结出使用安全描述符的一般步骤(注意它并没有直接操作ace,而是通过trustee,同时注意ace的继承性),以资料9的示例学习如何调整令牌里的特权,以资料4的示例学习如何使用模拟令牌。三、内核模式下的安全 请先阅读资料2,这些论述来自于Windows源代码和文件系统驱动代码的总结,完全建立在实践的基础上。读者如果无法理解这些内容,也完全没有必要强记,因为很幸运,这些代码已经不是秘密了,你所需要的仅仅是将自身的能力提高到能够理解它们的水平。用户模式下的安全归根结底都要表现为内核模式下的安全控制,如DACL的本质就是对object的访问控制。下两图分别表示了对象访问以及系统审核策略(audit policy)的处理流程。?安全描述符仍然出现在内核模式下(没有白学呢_),除此之外,也出现了安全上下文这个术语,今后在编程实践中,将可能碰到IO_SECURITY_CONTEXT、SECURITY_SUBJECT_CONTEXT这些结构。security context The security attributes or rules that are currently in effect. For example, the current user logged on to the computer or the personal identification n

温馨提示

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

评论

0/150

提交评论