User mode2014. 1. 28. 18:53




[서비스에서 프로세스 접근 권한 조회]

프로세스의 접근 권한 조회 방법은 아래 사이트에 있는 ProcessPerms에 너무 잘 정리되어있다.

안그래도 관련 코드 찾기 힘든 와중에 단비같은 소스.


ProcessPerms_VS2010.zip


출처 : https://github.com/nccgroup/WindowsDACLEnumProject/tree/master/ProcessPerms




[서비스에서 프로세스 접근 권한 변경]

위 코드를 참조하여 현재 Process에 PROCESS_ALL_ACCESS 권한이 없다면 PROCESS_ALL_ACCESS 권한 부여.

회사에서 사용중인 솔루션에 포함된 코드들이 다수 있어 첨부 불가.


1. GetSecurityInfo() / GetAce() : ACE의 Type이 ACCESS_DENIED_ACE_TYPE인 것을 확인.

2. GetAclInformation( , , , AclSizeInformation) : ACL의 Size 계산

3. HeapAlloc으로 Size만큼 New ACL 할당

4. InitializeAcl() : New ACL 초기화

5. GetSidIdentifierAuthority() : 해당 SID의 Authority 알아오기

* S-1-1 : SECURITY_WORLD_SID_AUTHORITY (Everyone)

* S-1-5 : SECURITY_NT_AUTHORITY (System, Administrator, 사용자 계정 등등)

6. SID를 확인하여 System인지 Administrator인지 상세 구분.

* MSDN : Well-Known SIDs 참조

7. AllocateAndInitializeSid() : 위에서 구분한 그룹 및 사용자 계정에 따라 인자 설정.

* S-1-5-18 (SYSTEM)

-> AuthorityCount : 1

-> SubAuthority0 : SECURITY_LOCAL_SYSTEM_RID

* S-1-5-32 (Administrator)

-> AuthorityCount : 2

-> SubAuthority0 : SECURITY_BUILTIN_DOMAIN_RID

    SubAuthority1 : DOMAIN_ALIAS_RID_ADMINS

S-1-1 (Everyone)

-> AuthorityCount : 1

-> SubAuthority0 : SECURITY_WORLD_RID

* S-1-5-21 (사용자 계정)

-> AuthorityCount : 5

-> SubAuthority : GetSidSubAuthorityCount(), GetSidSubAuthority()로 구해와야 함.

* S-1-5-5 (Logon Session?)

-> AuthorityCount : 3

-> SubAuthority0 : SECURITY_LOGON_IDS_RID

-> SubAuthority1 : GetAuthLuid() - Luid.HighPart

-> SubAuthority2 : GetAuthLuid() - Luid.LowPart

8. AddAccessAllowedAce() : New ACL에 권한 재설정.

9. SetSecurityInfo() : 재설정한 ACL로 수정.

* 하나의 그룹에 대해서만 변경이 되지 않기 때문에 모든 그룹과 사용자 계정에 대해 1~8 작업을 반복하여 New ACL에 저장하였다가 마지막에 SetSecurityInfo로 Set!




[활성화된 윈도우 계정명 알아오기]

WTSEnumerateSessions, WTSQuerySessionInformation 함수를 이용하여

현재 활성화된 Session과 윈도우 계정명을 알아오는 예제.

코드는 정말 간단하지만 이런 작업은 처음이라 아래 사이트를 찾기 전까지 엄청 삽질.


출처 : http://blog.naver.com/PostView.nhn?blogId=ccandolyi&logNo=120059436475




'User mode' 카테고리의 다른 글

StartService 1053 (0x41D)  (3) 2014.03.07
IsUserAdmin  (0) 2014.02.05
InterlockedCompareExchange  (0) 2014.01.29
UAC 사용여부와 관리자 권한 획득 유무  (0) 2014.01.14
CreateRemoteThread - ERROR_NOT_ENOUGH_MEMORY  (0) 2013.08.08
Posted by hswang