OpenVMS 운영체제의 WASD 웹서버 여러 취약성의 이해

 1598, 1/80 회원가입  로그인  
   x90c
   OpenVMS 운영체제의 WASD 웹서버 여러 취약성의 이해

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=486 [복사]


=------------------------------------------------------------------------------=

             OpenVMS 운영체제의 WASD 웹서버 여러 취약성의 이해
         "Multiple vulnerabilities in WASD http server for OpenVMS"

   작성자       : x90c ( geinblues@gmail.com )
   홈페이지     : http://www.chollian.net/~jyj9782/
   문서위치     : http://gailly.net/security/wasd-vuln-2002-09.txt
  
   % 개인적으로 이 문서를 먼저 보시고 보기 쉽게 정리하는데 도움을 주신
   % Prosper (http://www.lastlog.com) 님께 감사드립니다.

=------------------------------------------------------------------------------=

이 문서는 지난 2002년 9월에 공개된 WASD 웹서버의 취약성 보고서를 기반으로
VMS 시스템 경험이 없는 분들이 이해하기 쉽도록 설명하기 위해 작성 되었습니다.


[Index]
1. WASD http개요
2. 어떤 문제가 발생할수 있는가?
3. 위험 분류
4. 취약한 버전
5. 문제 원인
6. 공격 패턴
7. 결론





OpenVMS 는 한국에서 그렇게 대중적인 운영체제는 아닙니다.
이 VMS 운영체제는 처음 미국의 DEC 사에서 만들어졌다가 현재 IBM 사에서 OpenVMS를 판매
유지보수하고 있어요. 이 문서의 원문은 2002년 후반에 나온 버그리포팅 문서인데 한국에
계신 많은 해커분들의 주목을 받지는 못했던거 같습니다. 개인적으로는 OpenVMS 사용자
이기 때문에 OpenVMS 운영체제를 이해하고 또 해킹과 관련해서 연관지어가는데 하나의
모토가 될수 있도록 재조명해 보고자 이 문서를 작성하게 되었습니다.

그럼 부족하나마 이 문서를 접하시고 VMS 라는 운영체제 대해 관심을 가질수 있는 계기가
되었으면 하는 바람을 가져봅니다.


P.S: 이 문서가 설명하는 취약성들은 그 발생 특성상 몇가지 경우를 보여줄뿐입니다. 즉
응용되면 생각치 못한 문제점이 드러날수도 있습니다. ( 대게 웹취약성이 그렇듯이.. )

=------------------------------------------------------------------------------=

1. WASD http 개요

WASD 웹서버는 OpenVMS 라는 운영체제에서 사용되는 http 서버 프로그램입니다.
GNU 의 GPL 라이센스를 따릅니다.

WASD 홈페이지 : http://wasd.vsm.com.au/WASD/


2. 어떤 문제가 발생할수 있는가?

다음의 문제들을 내포하고 있으며, 원문에 나와있는 문제를 나열하였습니다.
응용될 수 있는 몇가지 사례라고 볼 수 있을것 같습니다.

        - 광범위한 디렉토리 노출
        - 웹서버 전체 디렉토리에 대한 임의접근
        - 접근제어 규칙의 간단한 우회
        - document 최상위 디렉토리 위치 파악
        - 웹서버 설정 전체에 대한 읽기권한
        - 모든 웹서버 로그에 대한 읽기권한
        - 숨겨져야 할 디렉토리의 노출
        - 모든 cgi 스크립트 파일 목록 파악
        - 모든 cgi 스크립트 파일의 소스코드 파악
        - 사용자의 홈 디렉토리의 읽기권한
        - 기본 설치된 특정 cgi 스크립트의 활성화에 따른 중요한 결함
        - 그외 다른 기본으로 설치된 cgi 스크립트들에 대한 문제들


3. 위험 분류 : 매우 위험 ( Critical )


4. 버전 정보

        # 취약버전
        - WASD 7.1
        - WASD 7.2
        - WASD 7.2.3
        - WASD 8.0

        # 안정버전
        - WASD 8.0.1        ( 업데이트 버전 )
        - WASD 7.2.4        ( 업데이트 버전 )
        - WASD 8.1        ( 새로 릴리즈된 버전 )




5. 문제 원인

인터넷 사용자의 허가되지 않은 접근을 허용하기 때문에 발생하는 문제입니다.
WASD의 설정이 시스템 자원에 접근하는 것을 기본적으로 허용하기 때문에 이러한 문제가 발생합니다.




6. 공격 패턴

*OpenVMS의 알고 있어야 할 사항

-                 : 유닉스시스템의 .. 와 같은 의미로 ../../ 는 -- 로 대치될수 있습니다.

.com                 : .com 파일은 MS-DOS 의 파일포맷을 의미하는게 아니라,
                  OpenVMS 의 쉘스크립트 정도로 생각할수 있습니다.

*.*                : VMS 는 MS-DOS 처럼 "파일명.확장자;버전번호" 라는 파일명명규칙을
                  사용하는데, *.* (더블와일드카드) 가 의미하는것은 "모든파일.모든확장자" 입니다.

...                : 모든디렉토리

http$map.conf        : 이 파일은 웹서버의 설정파일로 웹상으로 접근가능한 자원과 접근이 불가능
                  한 자원을 분류하여 키워드로 설정할수 있습니다. 간단히 아래 예제를 살펴
                  보면 pass 키워드가 붙은것은 통과의 의미로 웹상에서 요청이 허용되며
                  fail 이 붙은것은 실패의 의미로 요청이 거부됩니다.

예) http$map.conf
  --bof-
        pass /ht_root/wwwroot*
        fail /ht_root/*
  --eof--

*.공격 파라메타의 이해(wov)

wov-1: http://webserver/tree/

        기본적으로 웹서버상의 전체 디렉토리는 내장된 tree 스크립트
        를 통해서 열람이 가능합니다. 이 스크립트에 대한 접근은 위
        파라메타처럼 /tree/ 디렉토리로 접근하면 가능합니다.

        참고 : http://wasd.vsm.com.au/ht_root/doc/env/env_0400.html#43
        
wov-2: http://webserver/dirname/*.*

        특정한 디렉토리 트리의 목록을 노출시키려면 /*.* 를 이용해보세요

        http://webserver/member/*.*
        웹서버상의 member 라는 디렉토리의 목록을 확인 할 수 있습니다.

        참고 : http://wasd.vsm.com.au/ht_root/doc/env/env_0400.html

wov-3:        http://webserver/upd/dirname/
                
        tree 외에 또 다른 내장형 스크립트로 upd 가 있습니다.
        upd 는 디렉토리        목록을 확인하기 위한 그래픽 인터페이스입니다.
        열람하길 원하는 디렉토리가 /backup/ 이라고 가정할때
        아래와 같은 파라메타를 구성할수 있습니다.

        http://webserver/upd/backup/

        참고 : http://wasd.vsm.com.au/ht_root/doc/env/env_0700.html#97

wov-4:        http://webserver/ht_root/wwwroot/-/*.*
        
        http$map.conf 설정이 아래와 같다면 이 wov-4 를 통해서 우회가 가능합니다.
                
        pass /ht_root/wwwroot*
        fail /ht_root/*
        fail /-/*        
                        
        ht_root/wwwroot/-/*.* 라는것은 실제 ht_root/*.* 를 의미하므로
        웹서버의 상위디렉토리를 가리킵니다.
        위의 접근제어 룰에는 첫번째 허용규칙에 의거해서 통과되고
        두번째 세번째 실패규칙에 의해서도 문제가 되지 않습니다.                

wov-5:        http://webserver/ht_root/-/local/httpd$map.conf

        웹서버의 설정파일인 http$map.conf 은 웹서버 취상위 디렉토리하의
        /local/httpd$map.conf 에 위치합니다. 하지만 아래와 같은 실패규칙
        이 적용되어 있어 대게 열람이 불가능합니다.

        fail /ht_root/local/*

        wov-4 와 마찬가지로 - 는 매우 유용하겠죠?
        wov-5 는 /ht_root/-/local/httpd$map.conf 와 같이 구성함으로써 우회가
        쉽게 이루어질수 있습니다. 결국 이것은 실패규칙에 걸리지 않으며 같은
        설정파일의 의미하기 때문입니다.

        로그파일에 대해서도 똑같이 적용됩니다.

        fail /ht_root/log/* 는 /ht_root/src/-/log/ 와 같이 src 와 같은 임의
        디렉토리명을 통해서 파라메타를 구성할수 있습니다.


wov-6:        http://webserver/tree/ht_root/

        /ht_root 와 같은 디렉토리는 분명 숨겨져야하지만 wov-1 에서 사용해본
        tree 스크립트는 이 숨겨져야할 디렉토리를 노출시킵니다.


wov-7:        http://webserver/.../*.com?search=$

        http://webserver/ht_root/script_local/ 은 분명 존재하지만 잘 보호되
        어 있어서 /script_local/*.* 나 tree 스크립트를 통해서 열람이 되지 않을
        수 있습니다. 이럴때는 탐색기능을 이용할수 있습니다.

        wov-7 가 의미하는것은 ...(모든디렉토리)에서 .com 확장자를 가진 파일을
        탐색해달라는 요청입니다.

wov-8:        http://webserver/cgi-bin/glist/ht_root/?list=now

        wov-7 기본 탐색기능이 제한되어 있을땐 glist 라는 다른 스크립트를 사용하면
        탐색이 가능합니다. 이것은 주어진 디렉토리의 목록만 표시합니다.
        즉 하위디렉토리에 대해서는 열람해주지 않는다는 뜻입니다.

        예를 들어 /ht_root/hack/ 이라는 디렉토리의 목록을 열람하고 싶다면..
        http://webserver/cgi-bin/glist/ht_root/hack/?list=now
                
wov-9:        http://webserver/ht_root/wwwroot/-/script_local/*.*
                
        cgi 스크립트들은 대게 /cgi-bin 에 위치하는데 이 곳이 막혀있다면 다른 곳에
        있는 스크립트를 확인해볼수 있습니다. 지금까지 설명한 테크닉을 이용해서 말이죠.
        
wov-10: http://webserver/~username/xxx/-/cgi-bin/*.*

        http://webserver/~username/cgi-bin/*.*
        이 구문은 fail 에 의해 막혀져 있을 것 입니다.
        - 를 처음으로 존재하지 않는 디렉토리 xxx 를 앞에 새우고        
        - 를 이용해 우회 할수 있습니다.
        그렇지만 이것 역시 막혀 있다면 다른 우회 방법을 생각해 볼수 있습니다.

wov-11: http://webserver/~username/.../*.com?search=$

        wov-11 에서 막혀진 기능은 역시 이전에 살펴본 내장 탐색기능을 이용한다면
        또한 우회가 가능합니다.
        
wov-13: http://webserver/ht_root/wwwroot/-/script_local/scriptname

        wov-13 의 scriptname 에는 열람하고자 원하는 스크립트 파일명을 사용하면
        웹브라우저상에서 해당 스크립트의 소스코드를 열람할수 있습니다.
                
wov-14: http://webserver/ht_root/wwwroot/-/script_local/scriptname.com?highlight=$

        wov-13 이 거부된다면 역시 탐색기능을 이용하면서 스크립트파일명을 명시하면
        소스코드를 열람할수 있습니다.

wov-15: http://webserver/~username/x/--/*.*
        
        http://webserver/~username/-/*.* 와 같이 홈디렉토리를 열람하려는 시도는 아래와
        같은 규칙에 의해 가로막히지만 위에서 살펴봤듯이 존재하지 않는 디렉토리 x 와
        두단계 상위디렉토리로 이동을 의미하는 --(../../) 를 이용하면 우회가 가능 하다.

        pass /*/-/* ht_root/runtime/*/*

wov-16: http://webserver/cgi-bin/cgi-process

        cgi-process는 직접적이진 않지만 해커들이 시스템에 침입하는데
        유용한 정보를 제공하여 줍니다.
        이것은 유닉스의 setuid 처럼 작동하므로 공격의 실마리를 제공하게 됩니다.

wov-17: http://webserver/plrte/PerlRTE_example1/%25x%25x%25x

        포맷스트링 버그입니다.
        익스플로잇(Exploits)하는것은 불가능하지만 유용한 정보를 보여줍니다.

        %25x = /x

이 외에도 where query extract 등의 스크립트들이 비슷한 기능을 하도록 존재합니다.




6. 결 론

이 보안보고서에서 언급된 문제들은 적절한 설정을 통해서 방어할수 있습니다.
하지만 cgi 스크립트의 어떤 기능이 문제가 될지는 미지수이기 때문에 완전한 해결책은 아닙니다.

방어 1. 웹관련 파일들에 대한 로컬 접근제어를 명확히 한다.
방어 2. 또한 일반적인 스크립트 기능의 사용을 막기위해서 아래와 같이 실패규칙을 추가할수 한다.

exec /~*/cgi-bin/* /user_disk/*/cgi-bin/*
fail /tree/
fail /tree/*
fail /upd/*
fail /where/*
fail /query/*
fail /extract/*

방어 3. cgi 스크립트를 통한 모든 로컬사용자에 대한 접근을 막는다.

마지막으로 덧붙이자면 VMS 는 대게 단일사이트 서버로 존재하지 않을수 있습니다.
여러 사이트가 연결된 형태로 구성 되었을때는 사이트 사이에서 발생하는 문제점이 존재할 수
도 있습니다.









  Hit : 10366     Date : 2006/02/18 02:25



    
     [공지] 강좌를 올리실 때는 말머리를 달아주세요^ㅡ^ [29] 멍멍 02/27 19523
1597   [Write Up] Crypto Cat's CTF 2024 - BabyFlow     해킹잘하고싶다
12/29 68
1596   [pwnable.kr] bof     해킹잘하고싶다
12/25 69
1595   [pwnable.kr] Shellshock[1]     해킹잘하고싶다
11/23 191
1594   Shellshock의 기본 요약     해킹잘하고싶다
11/23 158
1593   [pwnable.kr] fd     해킹잘하고싶다
11/23 159
1592   VPN이 연결되었다가 도중에 꺼도 웹 브라우저상에서 유지되는 이유     해킹잘하고싶다
11/22 154
1591   해커들이 해킹시 사용하는 디렉토리 공간[1]     해킹잘하고싶다
11/22 197
1590   Keyboard Hooking -part2 - (Python3 ver)     해킹잘하고싶다
11/20 172
1589   [Windows API] Keyboard Hooking     해킹잘하고싶다
11/20 147
1588   [pwnable.kr] cmd1 공략     해킹잘하고싶다
10/23 326
1587   netdiscover 파이썬으로 구현하기     해킹잘하고싶다
08/13 592
1586   파이썬을 이용한 심플 웹 크롤러     해킹잘하고싶다
08/13 472
1585   파이썬 random모듈을 이용한 숫자맞추기 게임 구현     해킹잘하고싶다
05/30 1029
1584   파이썬 채팅 프로그램 구현     해킹잘하고싶다
05/28 900
1583   파이썬 소켓 프로그래밍의 기초     해킹잘하고싶다
05/26 1073
1582   리눅스 웹 로그 분석     해킹잘하고싶다
05/20 712
1581   리눅스/윈도우 보안 장비 로그     해킹잘하고싶다
05/20 862
1580   고수님들의 도움을 받고 싶습니다     vbnm111
02/11 951
1579   리눅스 커널 2.6 버전 이후의 LKM     jdo
07/25 1472
1 [2][3][4][5][6][7][8][9][10]..[80]

Copyright 1999-2025 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org