第六章 確定適當?shù)脑L問控制_第1頁
第六章 確定適當?shù)脑L問控制_第2頁
第六章 確定適當?shù)脑L問控制_第3頁
第六章 確定適當?shù)脑L問控制_第4頁
第六章 確定適當?shù)脑L問控制_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第六章確定適當?shù)脑L問控制第一頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的重要性下面的代碼從具有危險ACL的注冊表項中讀取數(shù)據(jù):#defineMAX_BUFF

64#defineMY_VALUE“SomeData”BYTEbBuff[MAX_BUFF];ZeroMemory(bBuff,MAX_BUFF);//Opentheregistry.HKEYhKey=NULL;If(RegOpenKeyEx(HKEY_LOCAL_MACHINE,”Software\\Northwindtraders”,0,KEY_READ,&hKey)==ERROR_SUCCESS){

//Determinehowmuchdatatoread.

DWORDcbBuff=0; if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,NULL,&cbBuff)==ERROR_SUCCESS) {

//Nowreadallthedata.if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,bBuff,&cbBuff)==ERROR_SUCCESS { //Cool! //Wehavereadthedatafromtheregistry. } }}If(hKey)RegCloseKey(hKey);第二頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制RegOpenKeyEx函數(shù)用于打開指定的注冊表鍵(Key).注意:鍵名不區(qū)分大小寫.語法LONGWINAPIRegOpenKeyEx(

__inHKEYhKey,

__in_optLPCTSTRlpSubKey,

__reservedDWORDulOptions,

__inREGSAMsamDesired,

__outPHKEYphkResult

);

參數(shù)表hKey

需要打開的鍵的句柄.該句柄可以來自于RegCreateKeyEx

或RegOpenKeyEx

函數(shù),或者是以下預定義鍵之一:

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

lpSubKey

希望打開的子鍵(subkey)名,該名稱不區(qū)分大小寫.如果這個參數(shù)為NULL或一個指向空字符串的指針,函數(shù)將創(chuàng)建一個新的關(guān)聯(lián)于hkey參數(shù)所指鍵的句柄.

需要更多信息,查看RegistryElementSizeLimits(注冊表項大小限制)

ulOptions

這個參數(shù)是預留的,它必須為0.

samDesired

指明希望使用何種權(quán)限打開該鍵.如果安全配置并不允許所希望的權(quán)限,函數(shù)調(diào)用將會失敗.需要更多信息,查看RegistryKeySecurityandAccessRights(注冊表安全與存取權(quán)限).

phkResult

一個指向接受所打開鍵句柄變量的指針.如果該鍵不是預定義的,當你不再使用這個句柄時,調(diào)用RegCloseKey函數(shù).

返回值如果函數(shù)調(diào)用成功,返回值ERROR_SUCCESS.否則,函數(shù)將返回一個定義于Winerror.h的非零錯誤碼.

頭文件在Winreg.h聲明;包含于(inculde)Windows.h.庫使用Advapi32.lib.DLL

Advapi32.dll.第三頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制RegQueryValueEx找回所打開注冊表鍵所關(guān)聯(lián)的一個給定值的類型和數(shù)據(jù)。LONGRegQueryValueEx( HKEYhKey,//要查詢鍵的句柄

LPTSTRlpValueName,//要查詢值的名字的地址

LPDWORDlpReserved,//保留

LPDWORDlpType,//值類型緩存地址

LPBYTElpData,//數(shù)據(jù)緩存地址

LPDWORDlpcbData//數(shù)據(jù)緩存大小地址);

參數(shù)hKey

一個當前已打開鍵的句柄lpValueName

指向要查詢值的名字的字符串(以空字符結(jié)束)。如果lpValueName是NULL或一個空字符串(""),這個函數(shù)找回這個鍵的未命名或默認值的類型和數(shù)據(jù)。lpReserved

保留,必須是NULL.lpType

指向與給定值相關(guān)聯(lián)數(shù)據(jù)的類型的變量。這個值將通過這個參數(shù)返回,將是下面之一:值含意REG_BINARY二進制數(shù)據(jù)。REG_DWORD一個32位數(shù)字。REG_DWORD_LITTLE_ENDIAN一個little-endian格式的32位數(shù)字。REG_DWORD_BIG_ENDIAN一個big-endian格式的32位數(shù)字。REG_EXPAND_SZ一個包含未被引用的環(huán)境變量的以空字符結(jié)束的字符串(如,"%PATH%")。REG_LINK一個Unicode符號連接。REG_MULTI_SZ一個以空字符結(jié)束的字符串數(shù)組,被兩個null字符結(jié)束。REG_NONE未定義值類型。REG_RESOURCE_LIST一個設(shè)備驅(qū)動資源列表。REG_SZ一個以空字符結(jié)束的字符串。如果不需要類型lpType參數(shù)可以為空(NULL)。lpData

指定接收值數(shù)據(jù)的緩存區(qū)。如果數(shù)據(jù)是不需要的這個參數(shù)可以為空。lpcbData

以字節(jié)為單位,指向lpData參數(shù)所指定地緩存區(qū)大小的變量。函數(shù)返回復制到lpData的數(shù)據(jù)大小的變量。如果數(shù)據(jù)是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ類型,那么lpcbData還將包括以空字符結(jié)束的大小。如果lpData是NULL,lpcbData參數(shù)可以是NULL。如果被lpData參數(shù)指定的緩存不夠大,這個函數(shù)返回ERROR_MORE_DATA值,并取回被lpcbData指定的變量緩存的大?。ㄒ宰止?jié)為單位)。如果lpData是NULL,lpcbData不是NULL,這個函數(shù)返回ERROR_SUCCESS,并取回被lpcbData指定的變量緩存的大?。ㄒ宰止?jié)為單位)。這個為值的數(shù)據(jù)緩存分配最好的途徑。返回值如果這個函數(shù)成功,返回ERROR_SUCCESS。如果調(diào)有失敗,返回一個非零錯誤碼(定義在WINERROR.H)。第四頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的重要性上述代碼錯誤地假設(shè)注冊表中的數(shù)據(jù)大小不超過64字節(jié)。其中第一次調(diào)用RegQueryValueEx從注冊表中讀取數(shù)據(jù)大小,而第二次調(diào)用RegQueryValueEx將根據(jù)第一次調(diào)用所確定的字節(jié)大小將數(shù)據(jù)讀入本地緩沖區(qū)。如果數(shù)據(jù)大小超過64字節(jié)的話,將發(fā)生潛在的緩沖區(qū)溢出。注冊表項的ACL決定了潛在的威脅。如果ACL是Everyone(完全控制),由于任何用戶都可以對注冊表項設(shè)置一個大于64字節(jié)的數(shù)據(jù),造成該程序緩沖區(qū)溢出,所以這種潛在的威脅非常嚴重。此外,攻擊者可以將這個ACL設(shè)置為Everyone(全部拒絕),這將拒絕你的應(yīng)用程序?qū)υ摂?shù)據(jù)的訪問。如果這個ACL是Administrators(完全控制)和Every(讀?。?,由于只有管理員可以設(shè)置注冊表項上的數(shù)據(jù)或更改ACL,所以這樣帶來的威脅就不太嚴重。第五頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的重要性對代碼的修復//Determine

howmuchdatatoread.DWORDcbBuff=0;if(RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,NULL,&cbBuff)==ERROR_SUCCESS){ BYTE*pbBuff=newBYTE[cbBuff]; //NowreadcbBuffbytesofdata. if(pbBuff&& RegQueryValueEx(hKey,MY_VALUE,NULL,NULL,pbBuff,&cbBuff) ==ERROR_SUCCESS)) { //Cool! //Wehavereadthedatafromtheregistry. //usedata. } delete[]pbBuff;}這段代碼仍然有問題,但是性質(zhì)已經(jīng)不同。如果攻擊者可以往注冊表中寫入10M數(shù)據(jù)的話,由于ACL存在的缺陷,使得攻擊者強制你的應(yīng)用程序分配10M的內(nèi)存。第六頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的重要性對代碼的進一步修復BYTEbBuff[MAX_BUFF];ZeroMemory(bBuff,MAX_BUFF);HKEYhKey=NULL;if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, “Software\\Northwindtraders”, 0, KEY_READ, &hKey)==ERROR_SUCCESS){ DWORDcbBuff=sizeof(bBuff); //nowreadnomorethanMAX_BUFFbytesofdata. if(RegQueryValueEx(hKey,MY_VALUE, NULL,NULL,bBuff, &cbBuff)==ERROR_SUCCESS){ //Cool! //Wehavereadthedatafromtheregistry. }}If(hKey)RegCloseKey(hKey);這種情況下,即使攻擊者在注冊表中放入一個大數(shù)據(jù),這段代碼也只讀到MAX_BUFF個字節(jié)為止,如果還存在更多的數(shù)據(jù)的話,RegQueryValueEx將返回一個ERROR_MORE_DATA錯誤,指出這個緩沖區(qū)不足以容納整個的數(shù)據(jù)。第七頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的組成ACL是許多操作系統(tǒng)使用的一種訪問控制方法,這些操作系統(tǒng)借助于ACL來判斷一個賬戶對一個資源具有何種程度的訪問權(quán)限。Windows

NT及其后來的版本具有兩種類型的ACL:DACL(Discretionaryaccesscontrollist,自由選定訪問控制表)和SACL(Systemaccesscontrollist,系統(tǒng)訪問控制表)。DACL用來確定對安全資源的訪問權(quán)限;SACL用來確定對安全資源的審核策略。第八頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的組成判斷文件系統(tǒng)是否支持ACL#include<stdio.h>#include<windows.h>Voidmain(){ char*szVol=“c:\\”; DWORDdwFlags=0; if(GetVolumeInformation(szVol,NULL,0,NULL,NULL,&dwFlags,NULL,0)) { printf(“Volume%sdoes%ssupportACLs.”,szVol, (dwFlags&FS_PERSISTENT_ACLS)?“”:”not”); } else { printf(“Error%d”,GetLastError()); }}/*GetVolumeInformation(

lpRootPathName:PChar;{磁盤驅(qū)動器代碼字符串}

lpVolumeNameBuffer:PChar;{磁盤驅(qū)動器卷標名稱}

nVolumeNameSize:DWORD;{磁盤驅(qū)動器卷標名稱長度}

lpVolumeSerialNumber:PDWORD;{磁盤驅(qū)動器卷標序列號}

varlpMaximumComponentLength:DWORD;{系統(tǒng)允許的最大文件名長度}

varlpFileSystemFlags:DWORD;{文件系統(tǒng)標識}

lpFileSystemNameBuffer:PChar;{文件操作系統(tǒng)名稱}

nFileSystemNameSize:DWORD{文件操作系統(tǒng)名稱長度}

);*/第九頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的組成可以使用DACL來進行安全化或者使用SACL進行審核的資源如下:文件和目錄文件共享注冊表項共享的內(nèi)存作業(yè)對象互斥量(Mutex)命名管道打印機信號量(Semaphore)活動目錄對象第十頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制ACL的組成DACL組成(*)每個DACL可以包括零個或多個ACE(AccessControlEntries,訪問控制項),一個NULL

DACL意味著在相應(yīng)的資源上沒有訪問控制。一個ACE包括兩個主要的組件:由該帳戶的安全標識符(SecurityID,SID)所表示的一個賬戶,以及關(guān)于這個SID可以對給定資源進行哪些操作的描述。第十一頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制選擇好的ACL的方法為你的資源定義合適的ACL的過程:(1)確定你使用的資源。需要使用哪些資源以及對哪些資源進行保護。(2)確定業(yè)務(wù)上定義的訪問需求。(3)確定適當?shù)脑L問控制技術(shù)。(4)將訪問需求轉(zhuǎn)換為相應(yīng)的訪問控制技術(shù)。如下面是某一資源的ACL:主體訪問權(quán)限Accounting拒絕所有訪問InteractiveUsers讀Administrators完全控制SYSTEM完全控制第十二頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL/*NT4ACL.CPP*/#include

<windows.h>#include

<stdio.h>#include

<aclapi.h>PSID

pEveryoneSID=NULL,

PAdminSID=NULL,

pNetworkSID=NULL;PACL

pACL=NULL;PSECURITY_DESCRIPTOR

pSD=NULL;//ACL

will

contain

three

ACEs://Network

(Deny

Access)//Everyone

(Read)//Admin

(Full

Control)try

{ const

int

NUM_ACES=3; EXPLICIT_ACCESS

ea[NUM_ACES]; ZeroMemory(&ea,

NUM_ACES*sizeof(EXPLICIT_ACCESS));

//Create

a

well-known

SID

for

the

Network

logon

group. SID_IDENTIFIER_AUTHORITY

SIDAuthNT=SECURITY_NT_AUTHORITY; if(!AllocateAndInitializeSid(&SIDAuthNT,1,SECURITY_NETWORK_RID, 0,0,0,0,0,0,0,&pNetworkSID))throwGetLastError();BOOLAllocateAndInitializeSid(

PSID_IDENTIFIER_AUTHORITYpIdentifierAuthority,//pointertoidentifierauthority

BYTEnSubAuthorityCount,//countofsubauthorities

DWORDdwSubAuthority0,//subauthority0

DWORDdwSubAuthority1,//subauthority1

DWORDdwSubAuthority2,//subauthority2

DWORDdwSubAuthority3,//subauthority3

DWORDdwSubAuthority4,//subauthority4

DWORDdwSubAuthority5,//subauthority5

DWORDdwSubAuthority6,//subauthority6

DWORDdwSubAuthority7,//subauthority7

PSID*pSid//pointertopointertoSID

);

第十三頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL ea[0].grfAccessPermissions=GENERIC_ALL; ea[0].grfAccessMode=DENY_ACCESS; ea[0].grfInheritance=NO_INHERITANCE; ea[0].Trustee.TrustForm=TRUSTEE_IS_SID; ea[0].Trustee.TrustType=TRUSTEE_IS_WELL_KNOWN_GROUP; ea[0].Trustee.ptstrName=(LPTSTR)pNetworkSID;

//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))throwGetLastError(); ea[1].grfAccessPermissions=GENERIC_READ; ea[1].grfAccessMode=SET_ACCESS; ea[1].grfInheritance=NO_INHERITANCE; ea[1].Trustee.TrustForm=TRUSTEE_IS_SID; ea[1].Trustee.TrustType=TRUSTEE_IS_WELL_KNOWN_GROUP; ea[1].Trustee.ptstrName=(LPTSTR)pEveryoneSID;第十四頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL //Create

a

SID

for

the

BUILTIN/Administrators

group. if(!AllocateAndInitializeSid(&SIDAuthNT,2,SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0,0,0,0,0,0,&pAdminSID))throwGetLastError(); ea[2].grfAccessPermissions=GENERIC_ALL; ea[2].grfAccessMode=SET_ACCESS; ea[2].grfInheritance=NO_INHERITANCE; ea[2].Trustee.TrustForm=TRUSTEE_IS_SID; ea[2].Trustee.TrustType=TRUSTEE_IS_GROUP; ea[1].Trustee.ptstrName=(LPTSTR)pAdminSID; //CreateanewACLwiththethreeACEs. if(ERROR_SUCCESS!=SetEntriesInAcl(NUM_ACES,ea,NULL,&pACL)) throwGetLastError(); //Initializeasecuritydescriptor. pSD=(PSECURITY_DESCRIPTOR)LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); if(pSD==NULL)throwGetLastError(); if(!InitializeSecurityDescriptor(pSD,SECURITY_DESCRIPTOR_REVISION)) throwGetLastError();InitializeSecurityDescriptor()函數(shù)初始化一個新的安全描述符。BOOLInitializeSecurityDescriptor(

PSECURITY_DESCRIPTORpSecurityDescriptor,//安全描述符地址

DWORDdwRevision//修訂級別

);參數(shù):

pSecurityDescriptor:一個指向函數(shù)初始化SECURITY_DESCRIPTOR結(jié)構(gòu)的指針。dwRevision:指定分配給安全描述符的修訂級別。它必須指定為SECURITY_DESCRIPTOR_REVISION。第十五頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL //AddtheACLtothesecuritydescriptor. if(!SetSecurityDescriptorDacl(pSD,TRUE,pACL,FALSE)) { throwGetLastError(); } else { SECURITY_ATTRIBUTESsa; sa.nLength=sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle=FALSE; sa.lpSecurityDescriptor=pSD; if(!CreateDirectory(“C:\\ProgramFiles\\MyStuff”,&sa)) throwGetLastError(); }//Endtry}catch(…){ //Errorcondition}第十六頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL if(pSD) LocalFree(pSD); if(pACL) LocalFree(pACL) //CallFreeSidforeachSIDallocatedbyAllocateAndInitializeSID. if(pEveryoneSID) FreeSid(if(pEveryoneSID); if(pNetworkSID) FreeSid(if(pNetworkSID); if(pAdminSID) FreeSid(if(pAdminSID);第十七頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL

創(chuàng)建一個ACL后,不是將一個ACL直接應(yīng)用在一個對象上,而是應(yīng)用到一個SD(SecurityDescriptor,安全描述符)上,再將該SD應(yīng)用到對象上。SD封裝在一個SECURITY_ATTRIBUTES結(jié)構(gòu)中,該結(jié)構(gòu)包含有一個字段,用來判斷這個SD是否是由相應(yīng)進程繼承而來。一個安全描述符中的信息描述了一個對象安全方面的下列幾個部分:一個所有者(由一個SID表示),使用SetSecurityDescriptorOwner來設(shè)置。一個主要的組(由一個SID表示),使用SetSecurityDescriptorGroup來設(shè)置。一個DACL,使用SetSecurityDescriptorDacl來設(shè)置。一個SACL,使用SetSecurityDescriptorSacl來設(shè)置。如果缺少安全描述符中的任何一個部分,則使用默認值,默認的所有者與調(diào)用該函數(shù)的進程的身份相同。第十八頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

NT

4中創(chuàng)建ACL

創(chuàng)建一個ACL的過程:(*)SIDSID許可權(quán)EXPLICIT_ACCESSEXPLICIT_ACCESS許可權(quán)ACLSECURITY_DESCRIPTORSECURITY_ATTRIBUTES資源應(yīng)用到資源第十九頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACL(*)Windows

2000安全工程小組添加了一種ACL和安全描述符的文本化表示方式,稱作安全描述語言(SDDL,SecurityDescriptorDefinitionLanguage)。在SDDL中,SID和ACE都是通過一些規(guī)范定義的文字來表示的。實例:下面的示例代碼創(chuàng)建了一個C:\MyDir的目錄,并設(shè)置了下面的ACE:Guests(拒絕訪問)SYSTEM(完全控制)Administrators(完全控制)Interactive

Users(讀、寫和執(zhí)行)第二十頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACL/*SDDLACL.cpp*/#define_WIN32_WINNT0x500#include<windows.h>#include<sddl.h>voidmain(){ SECURITY_ATTRIBUTESsa; sa.nLength=sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle=FALSE; char*szSD=“D:P” //DACL “(D;OICI;GA;;;BG)” //DenyGuests “(A;OICI;GA;;;SY)” //AllowSYSTEMFullControl “(A;OICI;GA;;;BA)” //AllowAdminsFullControl “(A;OICI;GRGWGX;;;IU”; //AllowInteractiveUsersRWX if(ConvertStringSecurityDescriptorToSecurityDescriptor(szSD,SDDL_REVISION_1, &(sa.lpSecurityDescriptor),NULL)) { if(!CreateDirectory(“C:\\MyDir”,&sa)) { DWORDerr=GetLastError(); } LocalFree(sa.lpSecurityDescriptor); }}第二十一頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACL(*)SDDL組件注釋D:PD是一個DACL,如果是S,則為SACL。P選項設(shè)置了SE_DACL_PROTECTED,使你對該對象ACE具有最大的控制權(quán),防止其父容器的ACE傳遞到該對象。如果不在乎從父對象繼承ACE,可以去掉此選項。(D;OICI;GA;;;BG)一個ACE字符串。每個ACE都括在一個括符中。D=拒絕ACE。OICI=執(zhí)行對象和容器繼承,即這個ACE將自動設(shè)置到本對象或容器之下的對象和容器上。GA=常規(guī)的全部訪問(完全控制)。BA=Guests組。這個ACE將阻止guest賬戶訪問本目錄及在本目錄之下創(chuàng)建的文件或子目錄。其中缺少的兩個值分別是ObjectTypeGuid和InheritedObjectTypeGuid。(A;OICI;GA;;;SY)A=允許ACE。SY=SYSTEM賬戶。(A;OICI;GA;;;BA)BA=Administrators組。(A;OICI;GRGWGX;;;IU)GR=讀,GW=寫,GX=執(zhí)行,IU=Interactive

Users第二十二頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACLSDDL字符串的一般布局:(*)D:(D;OICI;GA;;;BG)(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GRGWGX;;;IU)DACLACE允許或拒絕繼承標志委托人ACE掩碼第二十三頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACLSID類型:SDDL字符串賬戶名稱AOAccountOperatorsAUAuthenticatedUsersBABuiltinAdministratorsBGBuiltinGuestsBOBackupOperatorsBUBuiltinUsersCACertificateServerAdministratorsCOCreatorOwnerDADomainAdministratorsDGDomainGuests第二十四頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACLSID類型:SDDL字符串賬戶名稱DUDomainUsersIUInteractivelyLogged_onUsersLALocalAdministratorsLGLocalGuestsNUNetworkLogonUsersPOPrinterOperatorsPUPowerUsersRCRestrictedCode(受限的代碼)SOServerOperatorsSUServiceLogonUser第二十五頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL在windows

2000中創(chuàng)建ACLSID類型:SDDL字符串賬戶名稱SYLocalSYSTEMWDWorld(每個人通用)NSNetwork

Service(Windows

XP以上版本)LSLocal

Service(Windows

XP以上版本)ANAnonymous

Logon(Windows

XP以上版本)RDRemote

DesktopandTerminalServerUsers(Windows

XP以上版本)NONetworkConfigurationOperators(Windows

XP以上版本)LULogging

Users(Windows

Server

2003以上版本)MUMonitoring

Users(Windows

Server

2003以上版本)第二十六頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL用活動模板庫(ATL)創(chuàng)建ACL活動模板庫是一組基于模板的C++類,包含在Microsoft

Visual

Studio

6和Visual

Studio

.NET中。在Visual

Studio

.NET中還加入了一組與安全相關(guān)的ATL類,用來更加方便地管理常規(guī)的Windows安全任務(wù),包括ACL和安全描述符等。實例:用Visual

Studio

.NET的ATL創(chuàng)建一個目錄,并為該目錄分配一個ACL。這個ACL是:Blake(讀)Administrators(完全控制)Guests(拒絕訪問)第二十七頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制創(chuàng)建ACL用活動模板庫(ATL)創(chuàng)建ACL/*ATLACL.cpp*/#include<atlsecurity.h>#include<iostream>usingnamespacestd;voidmain(){ try{ //theuseraccounts CSidsidBlake(“Northwindtraders\\blake”); CSidsidAdmin=Sids::Admins(); CSidsidGuests=Sids::Guests(); //CreatetheACL,andpopulatewithACEs. //notethedenyACEisplacedbeforetheallowACEs. CDacldacl; dacl.AddDeniedAce(sidGuests,GENERIC_ALL); dacl.AddAllowedAce(sidBlake,GENERIC_READ); dacl.AddDeniedAce(sidAdmin,GENERIC_ALL); //CreatetheSecuritydescriptorandattributes. CSecurityDescsd; sd.SetDacl(dacl); CSecurityAttributessa(sd); //if(CreateDirectory(“C:\\MyTestDir”,&sa)) cout<<“Directorycreated!”<<end1; }catch(CAtlExceptione) { cerr<<“Error,Applicationfailedwitherror”<<hex<<(HRESULT)e<<end1; }}第二十八頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制對ACE進行正確的排序當你的代碼讀取某資源如注冊表項的ACL,添加ACE,然后更新注冊表時,需要正確地排列ACE的順序。如果在代碼中創(chuàng)建ACL,正確的ACE順序是:顯式拒絕;顯式允許;從父對象繼承拒絕;從父對象繼承允許;從祖父對象繼承拒絕;從祖父對象繼承允許;從曾祖父對象繼承拒絕;從曾祖父對象繼承允許,等等。第二十九頁,共三十三頁,編輯于2023年,星期四第六章確定適當?shù)脑L問控制對ACE進行正確的排序正確地向現(xiàn)有的ACL添加新的ACE,應(yīng)執(zhí)行下列步驟:使用GetSecurityInfo或GetNamedSecurityInfo函數(shù)從對象的安全描述符中獲取現(xiàn)有的ACL。對每個新的ACE,用描述該AC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論