13 Security Lab

RPL(Requested Privilege Level) 본문

Computer Science/Windows Externals

RPL(Requested Privilege Level)

Maj0r Tom 2014. 2. 28. 00:13
※ 높은권한 = ring level 0 : kernel level privilege, 
    낮은권한 = ring level 3 : user level privilege 

RPL은 높은권한의 코드가 낮은권한의 프로세스의 요청을 처리할때 DS, ES SS, FS GS 레지스터들의 마지막 두비트. RPL 필드는 CPL를 강화(보완)하기 위해 사용된다

높은 권한을 가진 디바이스 드라이버가 (디스크에서 직접적으로 낮은권한프로세스의 데이터세그먼트로 데이터를 복사할 수 있는) 이런 메카니즘을 지원한다고 가정하면, 낮은권한의프로세스들은 그것들의 디바이스드라이버로의 데이터세그먼트 사양(셀렉터, 복사하기위한 주소와 데이터의 크기)을 패스해야 한다. 조건을 만족시키면 디바이스드라이버는 적절한 위치로 데이터를 복사할 수있다


디바이스드라이버가 높은 권한을 가질때, 낮은권한의 프로세스는 높은권한데이터세그먼트로 복사하기 위해 속인다. 간단하게 틀린 셀렉터 값을 우회하게 되는것이다. 이런형태의 딕스플로잇을 권한상승(Privilege Escalation)이라고 부른다

Q. 어떻게 RPL이 권한상승 문제를 해결하는가

위의 예제에 이어서 말하자면, 디바이스드라이버가 목적지세그먼트를 로드하는 언제나, 이것은 바꾼다 목적지세그먼트의 RPL을 requestor process(lower-privileged인)와 맞추기(match) 위해서. 데이터세그먼트를 위한 보호 규칙은 CPL <= DPL 과 RPL <= DPL 둘다 체크하고, 높은 권한프로세스는 RPL<=DPL체크에서 protection-fault가 나게된다.

여기서 포인트는 높은권한의 코드는 낮은권한의프로세스로 서비스될때 권한의 요청자의 권한 레벨에 맞춰서 권한을 낮춰야한다는 것.



비슷한 류의 참고 Ref.
http://stackoverflow.com/questions/9485235/ring-level-shift-in-win-nt-based-os
http://board.flatassembler.net/topic.php?p=109916


Comments