'Remote file inclusion'에 해당되는 글 2건

  1. 2010.12.22 국내 공개 웹 게시판(제로보드) 취약점 주의
  2. 2009.12.08 안전한 PHP 프로그래밍 (첨부파일 다운 & include 함수)
2010. 12. 22. 11:06

국내 공개 웹 게시판(제로보드) 취약점 주의

_______________________________________________________________________________

원인 :  제로보드 4 게시판의 취약성을 이용한 파일 변조

증상  :   1. bbs/icon 폴더에 group_qazwsxedc.jpg 파일과 visitLog.php 생성

            2. 계정내 확장자가 html, php  파일들에 frame src="악성코드 배포지 URL 삽입
 (예: http://h.nexprice.com/css/x.htm)

                * 주로 bbs/폴더내의 파일들에 소스가 삽입됩니다.
                * 계정내 파일들에 iframe 삽입은 없을 수도 있습니다. 
           
            3. 제로보드 DB에 zetyx_group_table 생성되고 이 테이블의  header 또는
                header_url 에 위 2번과 동일한 악성코드 배포지 URL 생성.

조치  :  1. 1번 증상의 경우 해당 파일 삭제
           
           2. 2번 증상의 경우 파일의 소스를 확인하여 삽입된 iframe 삭제

           3. 3번 증상의 경우 제로보드 관리자로 로그인하여 생성된 그룹이 있는지
               확인하여 새로 생성된 그룹에 삽입된 소스를 삭제        
_______________________________________________________________________________

□ 개요
  o 국내 PHP 기반의 공개 웹 게시판 제로보드에서 XSS, CSRF 및 RFI 취약점이 발견됨[1, 2]
  o 해당 취약점을 이용한 홈페이지 변조 및 원격 실행 위협이 발생함에 따라, 취약한 버전 
     사용자의 주의 및 조속한 패치가 요구됨

□ 영향
  o 공격자는 제로보드 관리자 권한을 획득하거나, 취약한 버전의 제로보드가 설치된 서버에서 
     원격의 악의적인 PHP 파일을 실행 가능하며, 이를 이용한 웹 변조, 원격 명령 실행 등의 
     위협이 발생할 수 있음

□ 해당시스템
  o 제로보드 4 버전
  o 제로보드 XE 1.4.4.2 이하 버전

□ 해결방안
  o 제로보드 4 버전 사용자는 XE로 업그레이드[3] 하거나 RFI 취약점 보안 패치[6] 적용
    ※ 제로보드 4는 2009년 9월 25일 이후로 공식적인 배포가 중단되었으므로, XE 버전으로 
       업그레이드를 권고
  o 기존 제로보드 XE 사용자는 업데이트가 적용된 상위 버젼으로 업그레이드[4]
    ※ 공식사이트에서 취약점이 패치된 xe.1.4.4.3.zip 파일을 다운로드 받아 기존에 XE를
       운영중인 디렉토리에 설치

□ 사용자 주의사항
   o 사용자들은 제로보드의 공식 공지사항 및 정보공유 게시판[2, 5]을 주기적으로 확인하여 
      신규 취약점에 대한 정보를 숙지하고 이에 따른 조치를 취해야함

□ 용어 정리
   o 제로보드(ZeroBoard): PHP 언어로 작성된 홈페이지용 게시판 소프트웨어 또는 프레임워크
   o XSS (Cross Site Scripting) : 웹사이트 관리자가 아닌 이가 웹페이지에 클라이언트 사이드 
      스크립트를 삽입하여 다른 사용자가 이를 실행하게끔 허용하는 취약점
   o CSRF (Cross-Site Request Forgery) : 권한을 도용하는 가짜 요청문이 클라이언트의 
      웹브라우저상에서 실행되도록 유도 가능한 취약점
   o RFI (Remote File Inclusion) : 사용자 입력 값 검증이 부적절하게 이루어져서, 원격의 
      서버에 존재하는 스크립트 파일을 취약한 시스템 상에서 실행할 수 있는 취약점
   o PHP: 동적인 웹사이트를 위한 서버 측 스크립트 언어

□ 기타 문의사항
   o 한국인터넷진흥원 인터넷침해대응센터: 국번없이 118

[참고사이트]
[1] http://www.xpressengine.com/blog/textyle/19342723
[2] http://www.xpressengine.com/zb4_main
[3] http://migration.xpressengine.net/?document_srl=18298740
[4] http://www.xpressengine.com/?mid=download&package_srl=18325662
[5] http://www.xpressengine.com/index
[6] http://www.xpressengine.com/zb4_security/19346851


Trackback 1 Comment 0
2009. 12. 8. 16:42

안전한 PHP 프로그래밍 (첨부파일 다운 & include 함수)

1. 게시판 첨부파일 다운로드 개발시 주의점

국내 대형 IDC 운영사 사이트의 한 게시판에서 첨부파일 다운로드할 때, 내부 파일까지 다운로드할 수 있는 취약점이 있었다.
즉, /etc/ 이하의 파일이나 웹서버 설정 파일, 로그 등을 원하면 쉽게 받아볼 수 있는 취약점이었다.

이를테면 이런식이다. URL/download.html?path=/etc&file=resolv.conf&savename=resolv.txt
(물론 위처럼 직접적으로 URL을 표시하지 않았지만, 눈치만 있으면 쉽게 알 수 있음)
/etc/resolv.conf 를 받아서 PC에 resolv.txt 이름으로 저장하라는 예이다.
'어서오세요. 저희는 개방적인 마인드로 서버의 모든 것을 네티즌에게 원하는대로 다 드립니다.'라고 얘기하는 꼴이다.

이런 취약점을 통해

1) 시스템 사양 파악
  - 퍼미션에 둔감한 SE들이 상당히 많다.
  - 설정 파일 등 OS가 제공하는 기본 퍼미션을 그대로 사용하는 경우가 많다. 그러나 일반 user가 읽지 않아도 되는 파일이 상당히 많고, 실행하지 할 필요가 없는 파일도 매우 많다. 서비스 전에 미리 이런 파일들의 퍼미션을 강화하는게 좋다.
2) 내부 정보의 유출 (서버에 내부 정보 파일이 있다면)
3) 서버의 사양과 설정 파악으로, 시스템의 또다른 취약점까지 발견할 수 있는 위험도 있다.

첨부파일 다운로드시 다음과 같이 프로그래밍을 한다. (개인적으로 정리한 것)

1) 다운로드시 서버내 다운로드 경로를 URL로 지정하는 부분은 없앤다. 다운로드 로드 경로는 웹프로그램 내부 설정을 통해 처리해야.
2) /, \ 이나 .. 등 의 디렉토리 이동과 관련된 것은 사용하지 못하도록 한다. (필터링)
3) 파일명을 지정하지 않도록 하거나, (no=1 이면 게시물 1번의 파일 정보를 DB에서 읽어 다운로드시켜주면 된다.)
4) 암호화 처리하여 지정하게 한다.


2. php프로그래밍에서 include 취약

php에서 include() 함수를 사용할 때 주의하지 않아서, 내부 파일(local inclusion)이나 원격지 파일(remote file inclusion)을 include할 수 있는 취약한 사이트들이 있다.

의도적으로 URL을 통해 값을 넘겨받아 처럼) include하도록 개발하는 경우도 있다.
이를테면 왼쪽 메뉴는 고정인데, 오른쪽 내용만 바뀌는 페이지의 경우 include(page/$inc); 처럼 아주 단순하게 만들어 놓고, URL에는 사이트주소?inc=page1과 같이 처리하는 곳도 있다는 것이다. 유저를 너무나 신뢰하는, 믿음이 강한 개발자다.

1) include되면 원하는 서버 설정 파일을 볼 수 있는 것은 기본이다.

2) local include가 될 때 command를 실행할 수 있는 방법도 있다.
(원격지 파일을 include할 수 없더라도 command를 실행할 수 있음)

웹서버의 웹로그를 이용하는 방법이다. 특정한 방식으로 웹요청을 하여 웹로그에 <? ?> 등의 php tag가 저장되도록 하고, 이 웹로그 파일을 include되도록 하면 된다.
URL에 <? phpinfo(); ?> 를 요청하면 이게 %NN 처럼 인코딩되어 로그에 남기 때문에, 효과가 없다. 따라서 User Agent, Referer, 아파치 인증부분을 통해서 요청한다.

-
XAS(Cross Agent Scripting), XRS 취약점에 대해 (2009.3, 글 좋은진호)

위 XAS, XRS 취약점을 이용하듯이 웹요청을 하면, 웹로그에 <? phpinfo(); ?> 를 남길 수 있다. 위 글대로 요청할 때 웹로그에는 다음과 같이 남는다. 이해되는가? 이제 include에 이 로그파일만 지정해주면 php 명령을 실행할 수 있다. 물론 log파일을 읽을 수 있도록 퍼미션이 된 경우.
코드:

# 공개가 불필요한 부분은 ???로 변경해서 표시했다.

???.???.???.??? - - [??/???/2009:11:47:01 +0900] "GET / HTTP/1.1" 200 3901 "<script>alert('hello')</script>" "Mozilla/5.0 (X11; U; Linux i686; ko; rv:1.9.0.4) Gecko/200??????? Firefox/3.?.?"

-
Local File Inclusion - Tricks of the Trade (글 xeraph)

위의 글은 apache의 인증 부분을 필드에 <? .. ?> 와 같은 명령을 남기는 트릭입니다. 대단한 트릭이다. 어떻게 저런 생각을...

include 취약점을 없애기 위해 다음과 같이 프로그래밍을 한다. (개인적으로 정리한 것)

1) allow_url_include = off. php 5.2.x에서는 allow_url_include가 off로 되어 있다. 그 이전 버전 사용할 때, allow_url_fopen 로 설정하는데, 원격지 파일을 include나 fopen하는 경우가 없다면 off로 한다.
2) include() 함수에 사용되는 변수는 유저가 직접적으로(URL로) 설정할 수 없도록 한다.
3) include() 함수에 사용되는 변수값은 http :// , ftp :// 나 /, \, .. 등 을 필터링 처리한다.
4) 가능하면 register_globals = off


3. 안전한 php 프로그래밍에 관한 글들

-
PHP Security (Error reporting, SQL injections, XSS, file inclusion, XSRF 등)
-
PHP Security: Fortifying Your Website- Power Tips, Tools & How to’s
  ( Register_Globals, Error Reporting, XSS, File Inclusion, PHP Security Tools(PhpSecInfo, PHP Security Scanner, Spike PHP Security Audit Tool) 등)
-
PHP Security (PHP_SELF, Email Header Injection, Including Files, Error Reporting 등)
-
Remote File Inclusion


※ 참여자 : RedBaron, 범냉이, 티니, 좋은진호
※ 11.2(월)에 했던 커피닉스 이야기 중 비중 있는 부분을 별도로 정리했다.

출처 : http://coffeenix.net

Trackback 0 Comment 0