[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
Handle Table Inheritance (=Handle Table 상속)
✦ Handle Table에는 Parent Process에서 Child Process로 Handle Table 상속 여부에 관한 값 존재
✧ CreateProcess()의 Parameter5의 TRUE/FALSE
✦ SECURITY_ATTRIBUTES가 NULL일 경우
✧ Handle Table 상속 여부 값이 No
✦ sa.binheritHandle이 TRUE일 경우
✧ Handle Table의 상속 여부 값이 Yes
✦ Handle Table을 상속한 Child Process는 접근 가능한 Process가 가지는 기존의 UC 증가: 0 ??이게먼개소리
SECURITY_ATTRIBUTES 구조체에서 Handle 상속 여부를 결정하는 값 설정
✦ SECURITY_ATTRIBUTES 구조체를 생성할 Child Process의 Parameter 중 포인터로 전달
✧ Child Process도 Parent Process의 종료를 기다릴 수 있음
✦ Ex)
// Child Process의 Handle Table에 Parent Process의 Handle 값이 있을 경우
(...)
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.blnheritHandle = TRUE; // TRUE
(...)
CreateMailslot(... &sa); // &sa는 Parameter4
(...)
Plain Text
복사
Pseudo Hande
✦ DuplicateHandle()의 Paramter에 자기 자신을 중복시켜 자기 자신의 Handle Table에 동일 Kernel Object를 포인터에 담긴 주소가 가리키는 Handle 값으로 해 추가
✧ 이후 Kernel Object는 동일해지므로 UC 1 증가
DuplicateHandle(Handle A, 256, Handle B, &val, ...);
✦ 자기 자신의 Handle 값을 다른 Process의 Handle Table에 등록시켜 동일 Kernel Object를 포인터에 담긴 주소가 가리키는 값으로 한 API (먼말이냐;)
✧ Ex) Handle A 값 256을 Handle B에 저장. 이후 Kernel Object는 동일해지므로 UC 1 증가
→ 값이 다른 건 Handle 값이 Process마다 독립적이기 때문



