第六章 确定适当的访问控制PPT讲稿.ppt
《第六章 确定适当的访问控制PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第六章 确定适当的访问控制PPT讲稿.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章 确定适当的访问控制第1页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制1ACL的重要性l下面的代码从具有危险ACL的注册表项中读取数据:#define MAX_BUFF 64#define MY_VALUE“SomeData”BYTE bBuffMAX_BUFF;ZeroMemory(bBuff,MAX_BUFF);/Open the registry./Open the registry.HKEY hKey=NULL;If(RegOpenKeyEx(HKEY_LOCAL_MACHINE,”SoftwareNorthwindtraders”,0,KEY_READ,&hK
2、ey)=ERROR_SUCCESS)/Determine how much data to read./Determine how much data to read.DWORD cbBuff=0;if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,NULL,&cbBuff)=ERROR_SUCCESS)/Now read all the data./Now read all the data.if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,bBuff,&cbBuff)=ERROR_SUCCESS/Cool!/We hav
3、e read the data from the registry.If(hKey)RegCloseKey(hKey);第2页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制RegOpenKeyEx函数函数用于打开指定的注册表键(Key).注意注意:键名不区分大小写键名不区分大小写.语法语法LONG WINAPI RegOpenKeyEx(_in HKEY hKey,_in_opt LPCTSTR lpSubKey,_reserved DWORD ulOptions,_in REGSAM samDesired,_out PHKEY phkResult);参数表参数表hKey需要打
4、开的键的句柄.该句柄可以来自于 RegCreateKeyEx 或 RegOpenKeyEx 函数,或者是以下预定义键之一:HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS lpSubKey 希望打开的子键(subkey)名,该名称不区分大小写.如果这个参数为NULL或一个指向空字符串的指针,函数将创建一个新的关联于hkey参数所指键的句柄.需要更多信息,查看Registry Element Size Limits(注册表项大小限制)ulOptions这个参数是预留的这个参数是预留的,它必须为它必须为0.samDe
5、sired指明希望使用何种权限打开该键.如果安全配置并不允许所希望的权限,函数调用将会失败.需要更多信息,查看Registry Key Security and Access Rights(注册表安全与存取权限).phkResult一个指向接受所打开键句柄变量的指针.如果该键不是预定义的,当你不再使用这个句柄时,调用 RegCloseKey函数.返回值返回值如果函数调用成功,返回值ERROR_SUCCESS.否则,函数将返回一个定义于 Winerror.h 的非零错误码.头文件 在Winreg.h声明;包含于(inculde)Windows.h.库 使用 Advapi32.lib.DLL Ad
6、vapi32.dll.第3页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制RegQueryValueEx找回所打开注册表键所关联的一个给定值的类型和数据。LONG RegQueryValueEx(HKEY hKey,/要查询键的句柄 LPTSTR lpValueName,/要查询值的名字的地址 LPDWORD lpReserved,/保留 LPDWORD lpType,/值类型缓存地址 LPBYTE lpData,/数据缓存地址 LPDWORD lpcbData/数据缓存大小地址);参数参数hKey 一个当前已打开键的句柄lpValueName 指向要查询值的名字的字符串(以空
7、字符结束)。如果lpValueName是NULL或一个空字符串(),这个函数找回这个键的未命名或默认值的类型和数据。lpReserved 保留,必须是NULL.lpType 指向与给定值相关联数据的类型的变量。这个值将通过这个参数返回,将是下面之一:值 含意 REG_BINARY 二进制数据。REG_DWORD 一个32位数字。REG_DWORD_LITTLE_ENDIAN 一个little-endian格式的32位数字。REG_DWORD_BIG_ENDIAN 一个big-endian格式的32位数字。REG_EXPAND_SZ 一个包含未被引用的环境变量的以空字符结束的字符串(如,%PAT
8、H%)。REG_LINK 一个Unicode符号连接。REG_MULTI_SZ 一个以空字符结束的字符串数组,被两个null字符结束。REG_NONE 未定义值类型。REG_RESOURCE_LIST 一个设备驱动资源列表。REG_SZ 一个以空字符结束的字符串。如果不需要类型lpType参数可以为空(NULL)。lpData 指定接收值数据的缓存区。如果数据是不需要的这个参数可以为空。lpcbData 以字节为单位,指向lpData参数所指定地缓存区大小的变量。函数返回复制到lpData的数据大小的变量。如果数据是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型,那么l
9、pcbData还将包括以空字符结束的大小。如果lpData是NULL,lpcbData参数可以是NULL。如果被lpData参数指定的缓存不够大,这个函数返回ERROR_MORE_DATA值,并取回被lpcbData指定的变量缓存的大小(以字节为单位)。如果lpData是NULL,lpcbData不是NULL,这个函数返回ERROR_SUCCESS,并取回被lpcbData指定的变量缓存的大小(以字节为单位)。这个为值的数据缓存分配最好的途径。返回值返回值如果这个函数成功,返回ERROR_SUCCESS。如果调有失败,返回一个非零错误码(定义在WINERROR.H)。第4页,共33页,编辑于2
10、022年,星期三第六章 确定适当的访问控制1ACL的重要性上述代码错误地假设注册表中的数据大小不超过64字节。其中第一次调用RegQueryValueEx从注册表中读取数据大小,而第二次调用RegQueryValueEx将根据第一次调用所确定的字节大小将数据读入本地缓冲区。如果数据大小超过64字节的话,将发生潜在的缓冲区溢出。注册表项的ACL决定了潜在的威胁。如果ACL是Everyone(完全控制),由于任何用户都可以对注册表项设置一个大于64字节的数据,造成该程序缓冲区溢出,所以这种潜在的威胁非常严重。此外,攻击者可以将这个ACL设置为Everyone(全部拒绝),这将拒绝你的应用程序对该数
11、据的访问。如果这个ACL是Administrators(完全控制)和Every(读取),由于只有管理员可以设置注册表项上的数据或更改ACL,所以这样带来的威胁就不太严重。第5页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制1ACL的重要性l对代码的修复/Determine how much data to read.DWORD cbBuff=0;if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,NULL,&cbBuff)=ERROR_SUCCESS)BYTE*pbBuff=new BYTEcbBuff;/Now read cbBuff byt
12、es of data.if(pbBuff&RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,pbBuff,&cbBuff)=ERROR_SUCCESS)/Cool!/We have read the data from the registry./use data.delete pbBuff;这段代码仍然有问题,但是性质已经不同。如果攻击者可以往注册表中写入10M数据的话,由于ACL存在的缺陷,使得攻击者强制你的应用程序分配10M的内存。第6页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制1ACL的重要性l对代码的进一步修复BYTE bBuffMA
13、X_BUFF;ZeroMemory(bBuff,MAX_BUFF);HKEY hKey=NULL;if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,“SoftwareNorthwindtraders”,0,KEY_READ,&hKey)=ERROR_SUCCESS)DWORD cbBuff=sizeof(bBuff);/now read no more than MAX_BUFF bytes of data.if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,bBuff,&cbBuff)=ERROR_SUCCESS)/Cool!/We ha
14、ve read the data from the registry.If(hKey)RegCloseKey(hKey);这种情况下,即使攻击者在注册表中放入一个大数据,这段代码也只读到MAX_BUFF个字节为止,如果还存在更多的数据的话,RegQueryValueEx将返回一个ERROR_MORE_DATA错误,指出这个缓冲区不足以容纳整个的数据。第7页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制2ACL的组成ACL是许多操作系统使用的一种访问控制方法,这些操作系统借助于ACL来判断一个账户对一个资源具有何种程度的访问权限。Windows NT及其后来的版本具有两种类型的A
15、CL:DACL(Discretionary access control list,自由选定访问控制表)和SACL(System access control list,系统访问控制表)。DACL用来确定对安全资源的访问权限;SACL用来确定对安全资源的审核策略。第8页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制2ACL的组成l判断文件系统是否支持ACL#include#include Void main()char*szVol=“c:”;DWORD dwFlags=0;if(GetVolumeInformation(szVol,NULL,0,NULL,NULL,&dwFla
16、gs,NULL,0)printf(“Volume%s does%s support ACLs.”,szVol,(dwFlags&FS_PERSISTENT_ACLS)?“”:”not”);elseprintf(“Error%d”,GetLastError();/*GetVolumeInformation(lpRootPathName:PChar;磁盘驱动器代码字符串lpVolumeNameBuffer:PChar;磁盘驱动器卷标名称nVolumeNameSize:DWORD;磁盘驱动器卷标名称长度lpVolumeSerialNumber:PDWORD;磁盘驱动器卷标序列号var lpMaxim
17、umComponentLength:DWORD;系统允许的最大文件名长度var lpFileSystemFlags:DWORD;文件系统标识lpFileSystemNameBuffer:PChar;文件操作系统名称nFileSystemNameSize:DWORD 文件操作系统名称长度);*/第9页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制2ACL的组成l可以使用DACL来进行安全化或者使用SACL进行审核的资源如下:文件和目录文件共享注册表项共享的内存作业对象互斥量(Mutex)命名管道打印机信号量(Semaphore)活动目录对象第10页,共33页,编辑于2022年,星
18、期三第六章 确定适当的访问控制2ACL的组成lDACL组成(*)每个DACL可以包括零个或多个ACE(Access Control Entries,访问控制项),一个NULL DACL意味着在相应的资源上没有访问控制。一个ACE包括两个主要的组件:由该帐户的安全标识符(Security ID,SID)所表示的一个账户,以及关于这个SID可以对给定资源进行哪些操作的描述。第11页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制3选择好的ACL的方法为你的资源定义合适的ACL的过程:(1)确定你使用的资源。需要使用哪些资源以及对哪些资源进行保护。(2)确定业务上定义的访问需求。(3)
19、确定适当的访问控制技术。(4)将访问需求转换为相应的访问控制技术。如下面是某一资源的ACL:主体主体访问权限访问权限Accounting拒绝所有访问Interactive Users读Administrators完全控制SYSTEM完全控制第12页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制4创建ACLl在windows NT 4中创建ACL/*NT4ACL.CPP*/#include#include#include PSID pEveryoneSID=NULL,PAdminSID=NULL,pNetworkSID=NULL;PACL pACL=NULL;PSECURITY_
20、DESCRIPTOR pSD=NULL;/ACL will contain three ACEs:/Network(Deny Access)/Everyone(Read)/Admin(Full Control)try const int NUM_ACES=3;EXPLICIT_ACCESS eaNUM_ACES;ZeroMemory(&ea,NUM_ACES*sizeof(EXPLICIT_ACCESS);/Create a well-known SID for the Network logon group.SID_IDENTIFIER_AUTHORITY SIDAuthNT=SECURIT
21、Y_NT_AUTHORITY;if(!AllocateAndInitializeSid(&SIDAuthNT,1,SECURITY_NETWORK_RID,0,0,0,0,0,0,0,&pNetworkSID)throw GetLastError();BOOL AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,/pointer to identifier authorityBYTE nSubAuthorityCount,/count of subauthoritiesDWORD dwSubAuthor
22、ity0,/subauthority 0DWORD dwSubAuthority1,/subauthority 1DWORD dwSubAuthority2,/subauthority 2DWORD dwSubAuthority3,/subauthority 3DWORD dwSubAuthority4,/subauthority 4DWORD dwSubAuthority5,/subauthority 5DWORD dwSubAuthority6,/subauthority 6DWORD dwSubAuthority7,/subauthority 7PSID*pSid/pointer to
23、pointer to SID);第13页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制4创建ACLl在windows NT 4中创建ACLea0.grfAccessPermissions=GENERIC_ALL;ea0.grfAccessMode=DENY_ACCESS;ea0.grfInheritance=NO_INHERITANCE;ea0.Trustee.TrustForm=TRUSTEE_IS_SID;ea0.Trustee.TrustType=TRUSTEE_IS_WELL_KNOWN_GROUP;ea0.Trustee.ptstrName=(LPTSTR)pNetw
24、orkSID;/Create a well-known SID for the Everyone group.SID_IDENTIFIER_AUTHORITY SIDAuthWorld=SECURITY_World_SID_AUTHORITY;if(!AllocateAndInitializeSid(&SIDAuthWorld,1,SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pEveryoneSID)throw GetLastError();ea1.grfAccessPermissions=GENERIC_READ;ea1.grfAccessMode=SET_ACCES
25、S;ea1.grfInheritance=NO_INHERITANCE;ea1.Trustee.TrustForm=TRUSTEE_IS_SID;ea1.Trustee.TrustType=TRUSTEE_IS_WELL_KNOWN_GROUP;ea1.Trustee.ptstrName=(LPTSTR)pEveryoneSID;第14页,共33页,编辑于2022年,星期三第六章 确定适当的访问控制4创建ACLl在windows NT 4中创建ACL/Create a SID for the BUILTIN/Administrators group.if(!AllocateAndInitial
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 确定适当的访问控制PPT讲稿 第六 确定 适当 访问 控制 PPT 讲稿
限制150内