본문 바로가기

High Level Technique/Reversing

Session in Kernel 6

Session in Kernel 6


최근 Windows 7, 10을 많이 사용할 겁니다. Winodws Vista 이후부터 Session이 6.0 으로 바뀌고, ASLR 기능이 적용되어 보안이 강화되었습니다.


DLL Injection을 할 때 CreateRemoteThread()을 사용하여 Injection을 시도했었습니다. 하지만 Kernel 6.0 프로세스들에는 CreateRemoteThread()가 사용되지 않습니다.




Session


Session이라는 것은 로그온 사용자 환경을 말합니다. OS는 여러 사용자에게 로그온을 허가하고 각 로그온에 대해서 독립된 사용자 환경을 제공합니다.


Session을 확인하는 방법은 Process Explorer에서 View 항목을 선택하면 현재 실행되고 있는 프로세스들이 어떤 세션인지 알려줍니다.


View - Select Collumns - Session 체크




핵심원리에서는 Windows7과 XP를 비교하여 Session을 설명해 뒀는데, 7에서는 Session이 0, 1, 2 세가지인 반면 XP에서는 0, 1로 두가지 입니다.



처음에 그냥 Process Explorer를 실행시킨 결과 session 값이 나타나지 않는 경우가 있는데, 이러한 경우 작업관리자로 실행하면 됩니다.





Session 0 Isolation


첫 번째 로그온 사용자 세션을 1로 하여 시스템 세션 0과 구별 되도록 했는데, 이렇게 시스템 세션과 사용자 세셔을 분리시켜 서로에 대한 상호작용을 없애는 정책으로 부분적 하위 호환 문제가 발생했지만 그대신 시스템 보안이 강화 되었습니다.











이렇게 ASLR, kernel 6 와 같이 모두 보안강화를 위해 추가된 기능입니다. 하지만 session 0 process들이 완전히 분리된 것이 아니여서 session 1 process에서 session 0 process들을 종료시킬 수 있습니다. ReadProcessMemory(), WriteProcessMemory(), VirtualAllocEx() 등의 디버깅 API들도 모두 사용됩니다.




'High Level Technique > Reversing' 카테고리의 다른 글

Thread Local Storage CallBack (TLS)  (0) 2016.08.01
DLL Injection in kernel 6  (0) 2016.07.27
Address Space Layout Randomization (ASLR)  (0) 2016.07.26
WinDBG명령어와 분석방법  (0) 2016.07.26
64비트에서 달라진 점  (0) 2016.07.26