설명 - 이 취약성은 4.4BSD 커널내의 권한이 없는 일반 사용자가 시스템상에 수행중인 임의의 프로세스로 특정 Signal을 보낼수 있도록 한다. 운영체제와 목적 프로그램에 따라서 특정 프로그램의 수행을 방해하거나, 프로세스를 중지할 수 있다.
- 유닉스 운영체제에서 구현된 프로그램들은 여러 태스크를 조작하기 위하여 asynchronous I/O(비동기 I/O)를 사용한다. 비동기 I/O는 입력 소스로부터 읽을 데이터가 준비되었음을 프로세스에게 알리는데, 이때 커널은 시그널(signal)을 이용하여 데이터가 준비되었음을 알린다.
- 비동기 I/O는 fcntl() 시스템 콜을 사용하여 디스크립터(descriptor)를 활성화 시킨거나, FIOASYNCH ioctl()을 이용하여 디스크립터를 활성화 시킨다.
- 복수의 프로세스들을 사용하는 어플리케이션의 경우에, 시그널은 디스크립터를 다른 프로세서에 전달하기 위하여 사용한다.
- 비동기 I/O 오퍼레이션 코드의 문제로 소켓이나 장치 파일 디스크립터를 사용할 때 프로그램이 임의의 프로세스 ID를 명시할 수 있도록 한다. 프로그램 소유가 아닌 프로세스를 시그널 전달의 수신자로 설정하면, 커널은 임의의 프로그램에 시그널을 발생시키게 된다.
부가적으로, 취약점을 가진 커널들은 I/O 시그널을 보낼 프로세스를 결정할 때, 프로세스와 관련된 신뢰성의 자취를 유지하지 않기 때문에 침입자 소유의 프로세스에 PID를 명시할 수 있고, 그 프로세스를 파괴할 수 있고, 그것의 PID를 재사용 할수 있다. PID를 획득한 새로운 프로세스는 그 소유자에 관계없이 침입자에 의해 시그널을 보내게된다.
해결책 OpenBSD 패치를 설치한다. 패치의 내용은 참조된 원문에 있다.
|