[정보보안/보안전문가] 모든 리눅스 커널에 심각한 보안 결함 발견
1개월도 안 되어 또 다시 모든 리눅스 커널에 심각한 보안 결함이 공개되었습니다. 이는 리눅스 커널의 메모리 관리 코드인 mremap 에서 bound 체킹을 제대로 하지 못하여 발생하는 것으로, 본 취약성은 2.2.x, 2.4.x, 2.6.0 을 포함한 모든 버전 및 하위 버전에 해당하며 이를 악용할 경우 일반 유저 권한으로 시스템을 reboot 하거나 상위권한(uid=0) 을 획득할 수 있는 것으로 알려졌습니다.
(2.0.x 및 2.2.x 버전은 취약한지 여부는 아직 확실하지 않습니다.)
따라서 2.4.23 이하(포함) 사용자는 2.4.24 로 업그레이드하거나 패치를 하시면 됩니다.
2.4.24 는 특별한 기능은 포함되지 않았으며 보안 패치만 추가되었습니다. 그리고 2.6.0 사용자는 2.6.1 버전으로 패치하시거나 업그레이드하시면 본 취약성에 안전한 것으로 확인하였습니다.
또한 현재 이와 관련된 해당 exploit 이 공개되었으며, 일반 유저로 exploit 을 실행시 모든 시스템이 바로 reboot 되는 것을 확인하였습니다. 만약 패치하였을 경우 다음과 같이 전혀 exploit 이 작동하지 않습니다.
[antihong@www antihong]$ ./kernel_exploit
[antihong@www antihong]$
아래는 2.4.23 에서의 관련 패치 부분입니다.
--- linux-2.4.23/mm/mremap.c 2003-08-25 04:44:44.000000000 -0700
+++ linux-2.4.24/mm/mremap.c 2004-01-05 05:53:56.000000000 -0800
@@ -241,6 +241,13 @@
if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
goto out;
+ /*
+ * Allow new_len == 0 only if new_addr == addr
+ * to preserve truncation in place (that was working
+ * safe and some app may depend on it).
+ */
+ if (unlikely(!new_len && new_addr != addr))
+ goto out;
/* Check if the location we're moving into overlaps the
* old location at all, and fail if it does.
패치 또는 업그레이드 후 정상적으로 패치되었는지 확인하기 위해서는 아래 URL 에서 코드를 다운로드 후 컴파일하여 테스트해 보시기 바랍니다.
http://buffer.antifork.org/security/mremap_bug.c
[antihong@www antihong]$ gcc -o mremap_bug mremap_bug.c
[antihong@www antihong]$ ./mremap_bug
이때 각각의 메시지는 다음과 같습니다.
* 취약한 경우 : This kernel appears to be VULNERABLE
* 취약하지 않은 경우 : This kernel appears to be NOT VULNERABLE
아울러, 아시는 바와 같이 Redhat 의 7.1 부터 8.0 에 대한 rpm 패치가 작년 12월로
종료되었으나 이번에는 특별히 7.1부터 8.0 에 대해서도 커널 rpm 패치를 내놓았습니다.
금번 패치가 7.1부터 8.0 버전의 마지막 패치라고 합니다. 참고로 9.0 에 대한 지원도
올 4월로 종료되므로 rpm 으로 커널을 관리하시는 분은 참고하시기 바라며
차후부터는 소스 컴파일을 하셔야 할 것 같습니다.
본 취약성에 대해서는 아래의 URL 을 참고하시기 바랍니다.
http://isec.pl/vulnerabilities/isec-0013-mremap.txt
https://rhn.redhat.com/errata/RHSA-2003-417.html
http://www.securityfocus.com/bid/9154/discussion/
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0985
출처 : http://www.it-bank.or.kr/boan/boan.htm