CentOS 5.2와 Fedora 9 는 아래 내용과 상관 없음
2008년 2월 8일 : 커널 2.6.17 ~ 2.6.24.1 버전까지 root exploit 버그가 발생했다.
이번 버그는 커널 관련이므로 배포판의 종류와는 무관하며, 위의 커널 버전을 사용하는 배포판들은 모두 해당된다.
(CentOS 5.1의 경우 필자의 노트북에서 테스트시 커널패닉으로 서버가 down(멈춤) 되었음)
내용 : 쉘 권한을 가진 유저가 접속하여 root 권한을 획득할 수 있다.
***반드시 커널 업데이트 또는 패치 후 커널을 재컴파일하세요.***
* 테스트 모습 *
-----------------------------------
Linux vmsplice Local Root Exploit
By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7f3c000 .. 0xb7f6e000
[+] root
[test@localhost tmp]# id
uid=0(root) gid=0(root) groups=510(test)
* 해결 방법 *
1. 기존 커널을 유지해야 할 경우
/usr/src/linux/fs/splice.c 커널 소스를 아래와 같이 변경한 다음 커널 컴파일을 하고 재부팅한다.(아래 붉은색 부분을 추가하고 커널을 재컴파일) error = -EFAULT; if(!access_ok(VERIFY_READ, base, len)) { /* http://www.kernel.org
커널 2.6.24.2 changlog 내용(ChangeLog-2.6.24.2) Linux 2.6.24.2 commit 1617e66d11d6621824f642728d62f242272fd063 splice: fix user pointer access in get_iovec_page_array()
if (unlikely(!base))
break;
error = -EFAULT;
break;
}
* Get this base offset and number of pages, then map
* in the user pages.
*/
off = (unsigned long) base & ~PAGE_MASK;
2. 2.6.24.2 버전 이상의 커널을 다운로드 하고, 커널컴파일하여 사용한다.
commit c78cb439103bf7deba5feb64921398d0ff93179a
Author: Greg Kroah-Hartman <gregkh@suse.de>
Date: Sun Feb 10 21:51:11 2008 -0800
Author: Bastian Blank <bastian@waldi.eu.org>
Date: Sun Feb 10 16:47:57 2008 +0200
patch 712a30e63c8066ed84385b12edbfb804f49cbc44 in mainline.
Commit 8811930dc74a503415b35c4a79d14fb0b408a361 ("splice: missing user
pointer access verification") added the proper access_ok() calls to
copy_from_user_mmap_sem() which ensures we can copy the struct iovecs
from userspace to the kernel.
But we also must check whether we can access the actual memory region
pointed to by the struct iovec to fix the access checks properly.
Signed-off-by: Bastian Blank <waldi@debian.org>
Acked-by: Oliver Pinter <oliver.pntr@gmail.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
3. CentOS 사이트의 공식입장이 나오기 전까지는 erek님이 만든 커널 rpm으로 업데이트한다.
http://erek.blumenthals.com/vmsplicekernels/kernel-2.6.18-53.1.7.el5.erek.i686.rpm
http://erek.blumenthals.com/vmsplicekernels/kernel-devel-2.6.18-53.1.7.el5.erek.i686.rpm
i688-PAE:
http://erek.blumenthals.com/vmsplicekernels/kernel-PAE-2.6.18-53.1.7.el5.erek.i686.rpm
http://erek.blumenthals.com/vmsplicekernels/kernel-PAE-devel-2.6.18-53.1.7.el5.erek.i686.rpm
x86_64:
http://erek.blumenthals.com/vmsplicekernels/kernel-2.6.18-53.1.7.el5.erek.x86_64.rpm
http://erek.blumenthals.com/vmsplicekernels/kernel-devel-2.6.18-53.1.7.el5.erek.x86_64.rpm
Source:
http://erek.blumenthals.com/vmsplicekernels/kernel-2.6.18-53.1.7.el5.erek.src.rpm
Xen, and several other RPMs are available at: http://erek.blumenthals.com/vmsplicekernels . Note that the PAE and Xen kernels are entirely untested.
* 패치된 커널로 업데이트 적용 후 모습 *
암호:
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# mkdir kernel
[root@localhost src]# cd kernel/
[root@localhost kernel]# lftpget http://erek.blumenthals.com/vmsplicekernels/kernel-2.6.18-53.1.7.el5.erek.i686.rpm
[root@localhost kernel]# lftpget http://erek.blumenthals.com/vmsplicekernels/kernel-devel-2.6.18-53.1.7.el5.erek.i686.rpm
[root@localhost kernel]# ls
kernel-2.6.18-53.1.7.el5.erek.i686.rpm
kernel-devel-2.6.18-53.1.7.el5.erek.i686.rpm
[root@localhost kernel]# rpm -Uvh kernel-2.6.18-53.1.7.el5.erek.i686.rpm
준비 중... ########################################### [100%]
1:kernel ########################################### [100%]
[root@localhost kernel]# rpm -Uvh kernel-devel-2.6.18-53.1.7.el5.erek.i686.rpm
준비 중... ########################################### [100%]
1:kernel-devel ########################################### [100%]
[root@localhost ~]#
grub.conf 파일을 봤더니 그냥 싹다 밀어버리고, 패치된 커널만 달랑 남기네요. ^^
[root@localhost ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-53.1.7.el5.erek)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-53.1.7.el5.erek ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.18-53.1.7.el5.erek.img
[root@localhost kernel]# reboot
*** 재부팅 후 테스트 ***
[multi@localhost tmp]$ gcc -o ex ex.c
[multi@localhost tmp]$ ls -al ex
-rwxrwxr-x 1 multi multi 8516 2월 12 19:53 ex
[multi@localhost tmp]$ ./ex
-----------------------------------
Linux vmsplice Local Root Exploit
By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7f3c000 .. 0xb7f6e000
[-] vmsplice: Bad address
[multi@localhost tmp]$
리눅스를 서버로 사용할시에는 대부분 일반 사용자 계정을 다른 사람들에게 나누어 주고 있지요.
이런 상황일때에는 공부의 목적이 아니라면 쉘접근 권한을 주지 않는것이 바람직 하겠다.
(사용자 계정의 쉘 지정에서 /bin/false[/etc/passwd])
가끔식 위와 같은 루트킷들이 공개됨으로써 서버 운영자는 추가적인 노동(일)을 해야할 경우가 생기게 되기 때문이다.
서버를 운영하고자 한다면, 보안적인 측면에서 무조건 단독 서버를 사용하고, 쉘권한을 가지는 사용자 계정을 하나만 등록하여 사용하고, 원격접속(ssh) 권한을 가지는 사용자계정을 하나만 지정해 두고, 패스워드는 되도록 길게 지정하고, root권한을 획득할 수 있는 수퍼유저 획득 권한(su 명령어)을 가지는 사용자 계정의 그룹(wheel 그룹)을 지정하여(su 명령어의 퍼미션에서 실행 그룹을 wheel그룹으로 지정) 서버를 운영하면 좀 더 안정적인 서버 운영이 가능할 것이다.
다시 한번 말하지만, 부득이한 경우가 아니라면 서버운영은 단독서버로 운영하길 권장한다.
CentOS 5.0 ~ 5.1을 사용하시는분들은 반드시 yum 을 사용하여 커널을 업데이트 하셔서 사용하세요.
kernel-2.6.18-53.1.13.el5.i686.rpm
kernel-devel-2.6.18-53.1.13.el5.i686.rpm
kernel-headers-2.6.18-53.1.13.el5.i386.rpm
# yum update kernel kernel-devel kernel-headers
- 日新又日新 -
한국LUG: http://www.lug.or.kr
이메일 :
네이트온 메신저:
* CentOS 리눅스 서버 구축, 컨설팅, 교육 의뢰하실분들은 메일(gmail)주시기 바랍니다. *
- 리눅스 교육/컨설팅, 웹서버, FTP서버, Qmail 메일서버 구축 의뢰-
* 2007년 *
1. CentOS 리눅스 구축관리실무 집필
2007년 12월 출판 - 출판사 : (주)수퍼유저코리아
* 2009년 *
2. 김태용의 C++ 기초 입문 :: gcc로 공부하는 C++와 wxWidgets GUI 집필
2009년 03월 출판 - 출판사: (주)수퍼유저코리아
3. 김태용의 리눅스 쉘 스크립트 프로그래밍 입문 집필
2009년 9월 출판 - 출판사: 제이펍
4. 자바와 웹 애플리케이션 JSP, 서블릿에 대하여 책을 쓰고 있음 ^^;; 파이팅!!
- 공학/기술인의 위상을 높이고, 공학과 기술중심의 TechNation Korea 건설을 위한 공학정치 실현
- 공학/기술인을 대한민국의 수장으로 만들기
- 1000만 달러 벌기 -> 우수 공학인재 서포팅하기
서식지 : 대구 어느 골짜기..
Who am I?