CERTCC-KR 권고문: kmalloc관련 리눅스 local서비

geekforum의 이미지

CERT 팀에서 온 보안 권고문입니다.
제가 얼핏 보기엔 심각한 것 같은데... ==========================================================================

CERTCC-KR 권고문: KA-2000-013 kmalloc관련 리눅스 local서비스거부공격
취약성
-------------------------------------------------------------------------

최초작성일 : 2000/04/11
갱신일 :
출처 : Bugtraq, Thu Mar 23 2000

-- 제목
------------------------------------------------------------------

kmalloc관련 리눅스 local서비스거부공격 취약성

-- 해당 시스템
-----------------------------------------------------------

인텔 x86계열 CPU에서 운용되는
리눅스 커널 2.2.12 (Red Hat 6.1표준 커널, Corel Linux 1.0),
2.2.14 (최근 안정버전 kernel, Debian 2.1 )
2.2.15pre-16
2.3.99-pre2 (최근 개발버전 kernel)

--
설명-------------------------------------------------------------------

리눅스에서 어플리케이션 프로세스에 의해 커널메모리를 요청받았을 경우에
리눅스 운영체제는 메모리를 요청한 프로세스를 잠시 보류시키고, 충분한
물리적 메모리가 생길때까지 작업을 대기큐에 넣어놓는다. 또한 free메모리가

부족하다면, 물리적 메모리를 폐기하거나 swap장치로 swap out한다.

그러나 짧은 시간에 프로세스에 의해 갑자기 많은수의 커널메모리요청
system call이 이루어지게 되도록 악의적인 코드를 만들어서 실행하게 되면
커널메모리 할당 루틴이 실패하여

Mar 25 15:52:47 hostname kernel: rge
Mar 25 15:52:47 hostname kernel: kmalloc: Size (131076) too large
Mar 25 15:52:47 hostname last message repeated 454 times

등과 같은 에러를 계속적으로 발생시키는 루프에 빠지게 되며
경우에 따라서 시스템이 crash되기도 한다.

이런식으로 시스템을 마비시키는 local 서비스거부공격은 root권한이
아니더라도
쉽게 가능하다.

이런한 공격방법은 root권한을 획득하지는 못하고, 일반 사용자 계정을
도용하는
경우 리눅스 시스템을 crash시키려는 목적으로 악용될수 있다.

-- 해결책
----------------------------------------------------------------

1. 리눅스 커널 2.2.14 에서는 다음과 같이 커널소스를 패치하여
재컴파일해야 한다.

/usr/src/linux-2.2.14/net/core/sock.c 파일 패치

--- sock.c.orig Fri Mar 31 23:36:00 2000
+++ sock.c Fri Mar 31 23:36:29 2000
@@ -79,10 +79,6 @@
* Jay Schulist : Added SO_ATTACH_FILTER and
SO_DETACH_FILTER.
* Andi Kleen : Add
sock_kmalloc()/sock_kfree_s()
* Andi Kleen : Fix write_space callback
- * Lorenzo `Gigi Sullivan' Cavallaro: Temporary Fix to
local DoS due to
- * too big buffer
(AF_UNIX SOCK_DGRAM).
- * Maybe this will broke
something else.
- * I apologize.
*
* To Fix:
*
@@ -570,18 +566,6 @@
skb->sk = sk;
return skb;
}
-
- /*
- * kmalloc (mm/slab.c) checks the size to allocate
through a
- * `cache size struct'.
- * If we try to allocate much more then the maximum,
just report it
- * backwardly.
- * XXX Will this broke something, like
sock_wait_for_wmem()
- * defined here (net/core/sock.c)?
- * Is this the right way ?
- */
-
- sk->err = EMSGSIZE;
}
return NULL;
}

/usr/src/linux-2.2.14/net/unix/af_unix 파일 패치

--- af_unix.c.orig Fri Mar 31 23:36:40 2000
+++ af_unix.c Sat Apr 1 00:31:40 2000
@@ -43,6 +43,8 @@
* number of socks to 2*max_files
and
* the number of skb queueable in
the
* dgram receiver.
+ * Lorenzo `Gigi Sullivan' Cavallaro : Fixed local DoS
attack, due to
+ * unchecked sysctl_wmem_max sysctl (I hope) :)
*
* Known differences from reference BSD that was tested:
*
@@ -972,6 +974,16 @@
if (sock->passcred && !sk->protinfo.af_unix.addr)
unix_autobind(sock);

+ /*
+ * This should FIX the local DoS attack about sending msgs >
sk->sndbuf
+ * Never had time to look the optimization code used for
unix_stream,
+ * so, if the buffer we are going to send is > sysctl_wmem_max,
just
+ * report an error (Drop the `packet').
+ */
+
+ if (len > sk->sndbuf - 16)
+ return -EMSGSIZE;
+
skb = sock_alloc_send_skb(sk, len, 0,
msg->msg_flags&MSG_DONTWAIT, &err);
if (skb==NULL)
goto out;

2. 리눅스 커널 2.2.15pre-16 에서는 다음과 같이 패치한다.

/usr/src/linux-2.2.15pre-16/net/unix/af_unix 파일 패치

--- af_unix.c.orig Sat Aug 14 02:27:46 1999
+++ af_unix.c Tue Mar 28 17:27:52 2000
@@ -969,6 +969,10 @@
return -ENOTCONN;
}

+ err = -EMSGSIZE;
+ if (len > sk->sndbuf)
+ goto out;
+
if (sock->passcred && !sk->protinfo.af_unix.addr)
unix_autobind(sock);

-- 기타
------------------------------------------------------------------
보다 상세한 내용을 알기 위해서는 첨부한 원문을 참고바람

-- 한국정보보호센터 CERTCC-KR 침해사고 지원 안내
-------------------------
전 화 : 02-3488-4119 FAX : 3488-4129
Email : cert@certcc.or.kr
침해사고 접수 방법은 http://www.certcc.or.kr/service.html을 참고 바람
========================================================================

첨부원문

Bugtraq, Local Denial-of-Service attack against Linux kmalloc
http://207.126.127.66/templates/archive.pike?list=1&date=2000-03-22&msg=20000323175509.A23709@clearway.com

---------------------------------------------------------------------------

--
Cho YongSang, Security Incident Coordinator of CERTCC-KR/KISA
Korea CERT* Coordination Center/Korea Information Security Agency
[E-mail] meteor@kisa.or.kr, meteor@certcc.or.kr
[Fax]+82-2-3488-4129 [Phone]+82-2-3488-4127

한꺼번에 읽기