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/ee8/trackback
    List of Articles
    번호 제목 글쓴이 날짜 조회 수sort
    247 리눅스에서 PATH 적용하여 전체 사용자 적용 ADMINPLAY 2010-06-11 23267
    246 Vista Bootloader에 Fedora 10 부팅옵션 추가해서 듀얼 부... l2zeo 2010-03-08 23225
    245 Linux에서 Oracle 인스톨시 발생하는 에러 ADMINPLAY 2011-01-13 23215
    244 linux adduser 시 copydir(): preserving permissions 오... ADMINPLAY 2012-01-16 23206
    243 웹에서 ssh 를 지원해준다. [webssh] file ADMINPLAY 2009-09-08 23163
    242 ipchains bridge 방화벽 정리 자료. file ADMINPLAY 2009-09-08 23130
    241 아파치 HARD_SERVER_LIMIT ADMINPLAY 2009-06-17 23116
    240 CentOS 4.x 에서 yum 실패 대처 ADMINPLAY 2012-06-13 23101
    239 rpmfind (rpm패키지 검색사이트) ADMINPLAY 2009-06-01 23040
    238 LVS-NAT 구축(Linux Virtual Server) file ADMINPLAY 2009-11-04 22955
    237 Linux 소켓 접속 개수 늘리기 ADMINPLAY 2009-06-17 22953
    236 RPM 사용법 정리 ADMINPLAY 2009-12-10 22906
    235 crontab 예약실행 file ADMINPLAY 2009-09-22 22863
    234 젠투리눅스 설치기록 ADMINPLAY 2010-04-17 22848
    233 리눅스에서 하드웨어 스팩 보기 dmidecode ADMINPLAY 2009-05-28 22796
    232 squid.conf ADMINPLAY 2012-03-07 22738
    » CentOS 5.0~5.1 :: 커널 2.6.17~2.6.24.1 vmsplice 커널버... ADMINPLAY 2009-09-28 22529
    230 특수문자 정규 표현식 ADMINPLAY 2010-01-27 22495
    229 보안서버구축시 아파치 컴파일 중 "can not be used when ... ADMINPLAY 2009-07-04 22440
    228 ssh, ftp 접근 딜레이 현상 발생시 조치방법 ADMINPLAY 2009-05-28 22426

    Copyright ADMINPLAY corp. All rights reserved.

    abcXYZ, 세종대왕,1234

    abcXYZ, 세종대왕,1234