권한 확대

권한 확대(privilege escalation)는 보통 애플리케이션이나 사용자에 대해 보호되는 자원들에 대한 상승된 접근을 얻기 위해서 운영체제나 소프트웨어 애플리케이션에서 버그나 설계결함, 또는 설정을 익스플로잇하는 행동을 말한다. 이것에 의한 결과는 애플리케이션이 개발자나 시스템 관리자가 의도한 것보다 높은 수준의 권한을 얻어서 비허가 행동을 할 수 있게 된다.

배경 
대부분의 컴퓨터 시스템들은 여러 사용자들이 사용할 수 있게 설계된다. 권한은 사용자에게 할 수 있게 허가된 것을 말한다. 일반적인 권한으로 파일 읽기나 수정 등이 있다.

권한 확대는 사용자가 부여받지 않은 권한을 받는 것을 말한다. 이러한 권한들은 악의적인 목적으로 사용될 수 있다. 권한 확대는 두 형태로 일어난다.
 수직 권한 확대 또는 권한 상승은 낮은 권한의 사용자가 애플리케이션이 더 높은 권한의 사용자나 앺프리케이션을 위한 자원이나 함수들에 접근하는 것이다.
 수평 권한 확대는 일반 사용자가 다른 일반 사용자를 위한 자원이나 함수들에 접근하는 것이다.

수직 권한 확대 

이 유형의 권한 확대는 사용자나 프로세스가 시스템 개발자나 관리자가 의도한 것보다 높은 접근 수준을 가질 때 발생하며, 커널 수준 동작을 수행함으로써 가능해질 수 있다.

수직 권한 확대의 예시 
어떤 경우에, 높은 권한의 애플리케이션은 인터페이스에 명시된 것과 일치하는 입력이 제공된다고 가정하고, 입력을 확인하지 않는다. 공격자는 이 가정을 익스플로잇하여 비인가된 코드를 애플리케이션의 권한으로 실행시킨다.
 몇몇 윈도우 서비스들은 로컬 시스템 사용자 계정 아래에서 실행되도록 설정되어 있다. 버퍼 오버플로 같은 취약점들은 임의적인 코드를 로컬 시스템으로 상승된 권한으로 실행시킬 때 사용된다. 대신 에러가 정확히 처리되지 않은 경우에 더 낮은 사용자로 가장한 시스템 서비스가 사용자의 권한을 상승시킬 수 있다.
 크로스 존 스크립팅은 웹 브라우저의 보안 모델을 뒤엎는 권한 확대 공격의 한 종류로서, 클라이언트에 악의적인 코드를 실행시킬 수 있다.
 또한 애플리케이션이 다른 높은 권한의 서비스를 실행하고, 어떻게 클라이언트가 자신의 이런 서비스를 조작할 수 있는지에 대한 부정확한 가정을 갖는 상황이 존재한다. 만약 커맨드 라인이나 셸 명령어를 실행할 수 있는 애플리케이션이 확인되지 않은 입력을 명령어의 일부로 사용한다면, 셸 인젝션 취약점을 가질 수 있다. 공격자는 이후 애플리케이션의 권한을 사용해서 시스템 명령어를 실행할 수 있다.
 아이폰의 어떤 버전들은 잠겨져 있지만 비허가된 사용자가 폰에 접근할 수 있게 허용한다.

탈옥하기 (Jailbreaking) 
탈옥하기는 유닉스 계열 운영체제에서 chroot나 jail을 깨는 행위 또는 디지털 권리 관리(DRM)의 우회를 수행하는 행위나 툴이다. 전자의 경우 관리자가 사용할 수 있게 의도한 파일 시스템의 외부를 사용자가 볼 수 있게하며, DRM의 경우 사용자가 장치에서 임의적으로 정의된 코드를 실행할 수 있게 한다.

완화 전략 
운영체제들과 사용자들은 권한 확대를 줄이기 위해 다음과 같은 전략을 사용할 수 있다.
 데이터 실행 방지
 주소 공간 배치 난수화
 애플리케이션을 최소 권한으로 실행하기
 바이러스 검사 소프트웨어 사용
 패칭
 버퍼 오버런을 트랩하는 컴파일러 사용
 소프트웨어와 펌웨어 요소의 암호화
 강제적 접근 통제(MAC)를 사용하는 운영체제 사용

수평 권한 확대 
수평 권한 확대는 애플리케이션이 공격자가 애플리케이션이나 사용자에게 보호되고 있는 자원에 접근할 수 있게 허락할 때 발생한다. 이것의 결과는 애플리케이션 개발자나 시스템 관리자가 의도한 것과 같은 역할을 가지지만 다른 보안 문맥을 수행하게 된다. 이것은 효과적으로 제한적인 권한 확대의 형태이다.

수평 권한 확대의 예시 
이 문제는 종종 웹 애플리케이션의 취약점에 의해 발생한다.
 사용자 A는 인터넷 뱅킹 애플리케이션에서 자신의 은행 계좌에 접근한다.
 사용자 B는 인터넷 뱅킹 애플리케이션에서 자신의 은행 계좌에 접근한다.
 취약점은 A가 악의적인 행동으로 B의 계좌에 접근할 수 있을 때 발생한다.
이 악의적인 행동은 보통 웹 애플리케이션의 취약점에 의해 발생한다.

이러한 상황에 이를 수 있게 하는 잠재적인 웹 애플리케이션 취약점
 사용자의 HTTP 쿠키에서 예상 가능한 세션 ID
 세션 고정 (Session fixation)
 사이트 간 스크립팅
 쉽게 추측 가능한 비밀번호
 세션 쿠키의 훔치기나 하이재킹
 키로깅

같이 보기 
 권한 분리
 방어적 프로그래밍
 웹 컨텐트 보안
 안드로이드 루팅

각주 

취약점 공격
운영 체제 보안