Skip to content

CentOS 5.2와 Fedora 9 는 아래 내용과 상관 없음

2008년 2월 8일 : 커널 2.6.17 ~ 2.6.24.1 버전까지 root exploit 버그가 발생했다.
이번 버그는 커널 관련이므로 배포판의 종류와는 무관하며, 위의 커널 버전을 사용하는 배포판들은 모두 해당된다.

(CentOS 5.1의 경우 필자의 노트북에서 테스트시 커널패닉으로 서버가 down(멈춤) 되었음)

내용 : 쉘 권한을 가진 유저가 접속하여 root 권한을 획득할 수 있다.

***반드시 커널 업데이트 또는 패치 후 커널을 재컴파일하세요.***


* 테스트 모습 *

[test@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
[+] root
[test@localhost tmp]# id
uid=0(root) gid=0(root) groups=510(test)



* 해결 방법 *

1. 기존 커널을 유지해야 할 경우

/usr/src/linux/fs/splice.c 커널 소스를 아래와 같이 변경한 다음 커널 컴파일을 하고 재부팅한다.(아래 붉은색 부분을 추가하고 커널을 재컴파일)

error = -EFAULT;
if (unlikely(!base))
        break;

if(!access_ok(VERIFY_READ, base, len)) {
        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 버전 이상의 커널을 다운로드 하고, 커널컴파일하여 사용한다.

http://www.kernel.org

커널 2.6.24.2 changlog 내용(ChangeLog-2.6.24.2)

commit c78cb439103bf7deba5feb64921398d0ff93179a
Author: Greg Kroah-Hartman <gregkh@suse.de>
Date:   Sun Feb 10 21:51:11 2008 -0800

    Linux 2.6.24.2

commit 1617e66d11d6621824f642728d62f242272fd063
Author: Bastian Blank <bastian@waldi.eu.org>
Date:   Sun Feb 10 16:47:57 2008 +0200

    splice: fix user pointer access in get_iovec_page_array()
   
    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/blog/2008/02/11/rhel-5-centos-5-kernel-rpms-patched-against-vmsplice-local-root-exploit/



* 패치된 커널로 업데이트 적용 후 모습 *

[multi@localhost ~]$ su -
암호:
[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그룹으로 지정) 서버를 운영하면 좀 더 안정적인 서버 운영이 가능할 것이다.


다시 한번 말하지만, 부득이한 경우가 아니라면 서버운영은 단독서버로 운영하길 권장한다.


* 2월 13일자로 CentOS 5.1 커널이 업데이트 되어 릴리즈 되었네요.
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?
  • profile

    일요일은 짜빠게뤼~ 먹는날~^^

    엮인글 :
    http://adminplay.com/2741/37f/trackback
    List of Articles
    번호 제목 글쓴이 날짜 조회 수
    147 제로보드4의 데이터를 XE 로 이전하는 방법 file ADMINPLAY 2009-11-23 21924
    146 LVS-NAT 구축(Linux Virtual Server) file ADMINPLAY 2009-11-04 23011
    145 리눅스 클러스터링 LVS(Linux Virtual Server) ADMINPLAY 2009-11-04 20448
    144 [LVS] CentOS5.2 기반 LVS 셋팅(Piranha) ADMINPLAY 2009-11-04 21754
    143 LVS 기능 및 장점과 설치프로그램 및 적용사이트 ADMINPLAY 2009-11-04 23440
    142 oracle IP 변경시 변경 해야될 파일 ADMINPLAY 2009-11-01 26315
    141 리눅스 하드디스크 에러메세지 ADMINPLAY 2009-11-01 26461
    140 가볍고 강력한 SNMP를 이용한 모니터링 프로그램입니다. file ADMINPLAY 2009-10-31 24910
    139 네트워크 관리자를 위한 통합 모니터링 툴 - N.E.W.T file [2] ADMINPLAY 2009-10-31 24759
    138 Dstat - 모니터링 file ADMINPLAY 2009-10-30 30737
    137 mrtg on freebsd , monitor windows2003 ADMINPLAY 2009-10-11 16817
    136 favicon 만들기 ADMINPLAY 2009-09-30 24876
    135 rm -rf * 잘못 쳤을 때 울지 않기! ADMINPLAY 2009-09-30 19210
    » CentOS 5.0~5.1 :: 커널 2.6.17~2.6.24.1 vmsplice 커널버... ADMINPLAY 2009-09-28 22562
    133 [Linux]RedHat Enterprise Linux 5 계열 VNC Server 설정 ADMINPLAY 2009-09-25 23756
    132 [설치/설정] APM 튜닝정보 조금 ADMINPLAY 2009-09-24 19136
    131 Making Linux Streaming Server RED5 스트리밍 리눅스서버... ADMINPLAY 2009-09-24 26679
    130 CentOS 리눅스에서 완벽 동영상 재생하기 ADMINPLAY 2009-09-24 20523
    129 Red Hat Linux 9 ADMINPLAY 2009-09-24 51605
    128 chkconfig ADMINPLAY 2009-09-24 19860

    Copyright ADMINPLAY corp. All rights reserved.

    abcXYZ, 세종대왕,1234

    abcXYZ, 세종대왕,1234