▷ 작성자 : nova (nova@a3security.com), 니키 (ngnicky@a3sc.co.kr)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)


Firefox Add-on (XSS ME, SQL Injection) 에 대해서


사용자마다 브라우저의 선택은 다르겠지만, Firefox의 부가기능들 중 관심을 가질만한 것들이 많습니다. 그중에서 "XSS ME" ,"SQL Injection ME" 라는 부가기능을 설명을 할려고 합니다. 실습환경은 CentOS + WebGoat 를 사용했습니다.

WebGoat의 환경 구성 방법은 아래 간단하게 설명을 하였습니다. 윈도우 버전도 동일하게 JDK와 WebGoat만 설치하시면 됩니다. 설치화면은 생략하겠습니다^^)

vmware 다운로드
vmware + centos 4.6 (images download)
- http://www.thoughtpolice.co.uk/

WebGoat 다운로드
OWASP WebGoat 5.2 Download (java, tomcat 포함)
- http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=61824&release_id=613045

JDK 다운로드
http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u12-linux-i586-rpm.bin?BundledLineItemUUID=lT5IBe.pae8AAAEfo3hqH7Yk&OrderID=1BlIBe.pJ38AAAEfiHhqH7Yk&ProductID=1O1IBe.pLl4AAAEerDlTv_an&FileName=/jdk-6u12-linux-i586-rpm.bin


1. vmware에서 centos images를 구동한다.


2. JDK 설치

다운로드한 JDK를 설치한다.

- 설치방법
#sh jdk-6u12-linux-i586-rpm.bin

- 설치 위치  확인
/usr/java/jdk1.6.0_12 설치 되었음.

- ./etc/profile,  /.profile,  /.bash_profile 중 한곳에 jdk path를 추가합니다.

[root@localhost jihpa# vi /etc/profile
##### for jdk setting #####
export JAVA_HOME=/usr/java/jdk1.6.0_10
export PATH=$PATH:/usr/java/jdk1.6.0_10/bin

- 환경설정 적용
#export JAVA_HOME=/usr/java/jdk1.6.0_10
#export PATH=$PATH:/usr/java/jdk1.6.0_10/bin

3. OWASP WebGoat 설치

압축해제 이후 대상 폴더안에 webgoat.sh를 수정해야함.
17번째 라인에 있는 $JAVA_HOME/bin/java -version 2>&1 | grep 'version \"1.5' >/dev/null 를 다음과 같이 수정

==========================================================================
17                 $JAVA_HOME/bin/java -version 2>&1 | grep 'version \"1.5' >/dev/null
17                 $JAVA_HOME/bin/java -version 2>&1 | grep 'version \"1.6' >/dev/null
==========================================================================

JDK의 버전 체크에서 문제가 되므로 반드시 수정해야함.

- OWASP WebGoat안에 tomcat/conf/server_8080.xml tomcat/conf/server_80.xml 파일 수정
vmware이미로 제공되는 os의 IP를 수정해야합니다.

127.0.0.1로 되어있는 부분을 vmware의 대상 서버IP로 변경해주시기 바랍니다.

여기까지 설정되었으면

#sudo sh webgoat.sh start8080 <<< 8080 port로 실행
#sudo sh webgoat.sh start80 <<< 80 port로 실행
#sudo sh webgoat.sh stop <<< webgoat 중지

접속방법
http://localhost/WebGoat/attack

login in as: user = guest, password = guest


결론부터 말씀드리면 무료로 제공하는 자동툴은 대부분 패턴의 부족함이 있습니다. 자신에 맞는 환경을 만들려면 그만큼 사용자들이 많은 시간을 소비해야 겠죠? Source까지 제공(대부분 Javascript) 을 하기 때문에 관련 툴에 대한 분석을 하면서 학습에 도움이 되는데 만족을 해야 할거 같습니다.

WebGoat 테스트 중에서 XSS 와 관련된 파트에서 테스트를 해봤으며, 결과가 드러나고 있지만 확실히 이런 취약점이 존재하는지는 수동으로 재점검 할 필요가 있습니다. Add-on 기능에서는 단지 이런 종류의 기능을 제공하고 있다는것뿐이며 평가는 항상 사용자들이 점수를 주고 있습니다.

Firefox Add-on 기능중 XSS(Cross Site Scripting)과 SQL Injection 부분에 대해서 부가기능을 제공하고 있습니다.
아래 사이트에 가시면 관련 정보와 Source 파일까지 모두 받을 수 있으니 학습하는데 참고하시기 바랍니다.

http://securitycompass.com/exploitme.shtml



Firefox의 부가기능을 추가하는 방법은 아래와 같이 도구->부가기능으로 검색하시면 됩니다. "XSS Me"로 검색하시면 해당 부가기능이 검색될것이며 "Firefox에 추가"를 누르면 설치가 자동으로 될겁니다.
다른 부가기능들도 이와같이 간단하게 설치가 가능하며, 부가기능 모음 을 클릭하시면 모든 부가기능에서 자신이 원하는 것을 찾으셔도 됩니다. 한번도 경험하지 못하신 분들은 관심을 가지시면 Firefox의 매력에 빠질지도....^^)


설치가 완료되면 아래와 같이 추가가 되어 있을겁니다. "Open XSS Me Slidebar"를 클릭하면 왼쪽에 해당 기능이 보일겁니다.


해당 입력폼(Search)에 대한 점검을 모두 한다고 체크를 해주시면 간단하게 테스트할 수 있습니다.


XSS Me Options에 가면 점검 패턴들이 등록되어 있습니다. 자신이 원하는것도 XML 파일로 Import하여 추가를 할 수 있습니다.



SQL Injection 에 대한 점검방법은 위와 동일하기 때문에 생략을 하고, SQL Injection ME Options에 보면 XSS Me와 동일하게 패턴들이 등록되어 있습니다.


XSS 점검 후에 결과보고서를 제공하고 있습니다. 뭐가 잘못된 부분인지 상당히 판단하기 어렵죠?^^);;
분명 부족한점이 더 많은듯 보이지만, 점점 패턴에 대한 업데이트가 이루어지다 보면 자신한테 도움이 될만한 패턴들이 제공될 수도 있습니다.
중국툴(HDSI, NBSI 등)도 사용자 측면에서는 매우 쉽게 사용을 하고 있는 해킹툴이지만 그안에 있는 패턴은 전혀 생각지 못했던 패턴들일때가 있습니다. 현재도 많이 제공되는 툴들에 대한 응용과 활용도가 높아지고 있다는거죠^^)..


간단한 Firefox 부가기능을 설명했습니다. 이외에도 좋은 기능들이 많습니다. 정리되는대로 포스팅을 하도록 하겠습니다^^)

▷ 작성자 : minams (minams@a3sc.co.kr)
▷ 편집자 : minams (minams@a3sc.co.kr)


MS Internet Explorer 7 Memory Corruption
(MS09-002)

Exploit 시연 동영상


By
minams@a3security.com

I. 동영상 개요

본 동영상은 보안의식 강화를 위해 (주)에이쓰리시큐리티컨설팅 지식사업팀(teamCRAK)에서 제작한
MS Internet Explorer Memory Corruption Exploit 시연 동영상입니다.

취약점 : MS Internet Explorer Memory Corruption (MS090-002)
취약점 영향 및 대응방안 : 'MS Internet Explorer 7 Memory Corruption (MS09-002) 취약점 보안 권고안' 참조



II. 동영상 시나리오

공격자와 일반사용자 구성
  - Victim(일반 사용자) - 192.168.31.131 - Guest OS
  - Attacker   (공격자) - 192.168.31.1 - Host OS

1. 일반 사용자가 공격자가 구성한 악의적인 웹 페이지 접근. (http://192.168.31.1/ms09-02/exploit.html)

2. 일반 사용자의 Internet Explorer가 멈추고, background로 28876 port Listening. (Bind Shell 실행)

3. 공격자가 victim(192.168.31.131) pc의 28876번 포트로 접근. (일반 사용자의 shell 획득)

4. 공격자에 의해 일반사용자의 PC가 제어당함. (계정생성, 파일 삭제(생성,복사) , 프로그램 실행, 컴퓨터 종료 등 가능)

5. ( 공격이 시작되기전 으로 복원 ) -> 보안 업데이트

6. 패치 후 -> 일반 사용자가 공격자가 구성한 악의적인 웹 페이지 접근. (http://192.168.31.1/ms09-02/exploit.html)


Copyright(c) 1998-2009 A3 Security ,LTD 

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

▷ 작성자 : indra (indra@a3security.com)
▷ 편집자 : indra (indra@a3security.com)


Castle (PHP버전) 공격 탐지 우회 보안 권고안

 

                                                               By indra@a3security.com
(A.K.A 1ndr4)

I.   취약점 개요

취약점

Castle (PHP버전) XSS 공격 탐지 우회

A3S Advisory ID

A3AID09-01

위험 등급

최초 발표일

2009.2.6

문서 작성일

2009.2.2

벤더

KrCert

현재 상태(패치여부)

패치 완료


1. 
요 약

Castle
PHP 버전에서 XSS 공격 탐지를 우회할 있는 취약점이 발견되었다. Castle KrCert에서 공격 차단 로그 채취를 위해 배포하고 있는 솔루션이며, 해당 솔루션은 PHP, JSP, ASP 언어로 작성되어 여러 환경에서 사용할 있도록 배포 되고 있다. 업데이트 배포를 맡고 있는 대표 사이트는
KrCert - http://www.krcert.or.kr 이며, 사이트에서는 09 1 20자로 해당 솔루션을 보급하고 있다.

이번 발견된 탐지 우회 취약점은 사용자의 입력에 대해 pattern-matching 수행하여 공격 패턴을 찾아내는 루틴에서 특정 함수를 사용하는 것으로 비롯되었으며, 이를 이용해 악의적인 외부 사용자는 XSS 공격 탐지를 우회하고 실행 있는 취약점이다.

2대상 시스템

- Castle PHP Version


3
심각도 및 취약점 영향

취약점 영향

위험도

XSS 공격 탐지 우회


II
취약점 세부 분석

1.  취약점 내용

본 취약점은
사용자 입력 값을 검증하는 루틴에서 NUL 문자를 제대로 처리하지 못하는 루틴을 사용함으로 발생되는 취약점으로, PHP 함수의 적법하지 않은 사용에서 기인한다.
다음 그림은 castle_referee.php 파일의 코드 중 일 부분이다.


[그림 1] castle_referee.php 파일의 부분

그림은 castle_referee.php 파일의 부분으로 castle_referee_eregi() 함수 내용을 보여주고 있다. castle_referee_eregi() 함수는 castle 에서 정의하고 구현된 wrapper 함수이며, 해당 함수는 내부적으로 eregi() 함수를 사용하여 pattern-matching기법을 사용한 문자열 탐지를 수행한다.

먼저 magic_quotes_gpc 설정 정보를 받아 해당 옵션이 enable 되어 있으면 stripslashes() 함수를 사용하여 문자열 사이에 존재하는 슬래시(‘\’) 문자를 제거하게 된다. magic_quotes_gpc 옵션은 php 설치 기본적으로 enable 되도록 설정된 옵션이며, 이는 GET, POST, COOKIE 데이터에 특수문자가 존재하는 경우 자동으로 특수 문자 앞에 슬래시(‘\’) 문자를 추가하는 기능이다.

, eregi() 함수를 사용하여 문자열을 탐지하게 되는데 $regexp 변수와 $str 변수가 argument 사용된다. $regexp 변수는 정의된 검색 패턴의 정보가 들어가고, $str 변수에는 사용자 입력 값이 들어가게 된다. 해당eregi() 함수의 사용 루틴은 321 라인에서 327 라인까지 진행된다.

이러한 루틴에서 NUL 문자를 검출하기 위한 패턴은 eregi() 함수 사용과 맞물려 기능을 제대로 수행하지 못하게 되고, 악의적인 공격자가 패턴 탐지를 우회하여 XSS 공격을 시도할 있는 취약점을 노출 시킨다.

다음의 그림은 “<script>” 라는 문자열을 정상적으로 탐지하여 차단 메시지를 출력한 화면이다.


[그림 2] 정상적으로 공격 탐지를 화면

위 그림에서 사용된 소스코드는 다음과 같다.



단순히 GET 방식으로 전달 msg 라는 변수의 값을 출력해 주는 소스코드이며, 변수 값에 존재하는 “<script>” 라는 문자열을 제대로 탐지해 경우이다.

다음 그림은 발견된 우회방법 이용해 사용자 Cookie 출력하는 스크립트를 실행 화면이다.


[그림 3] 취약점에 의해 스크립트가 실행된 화면

2위험 분석

해당
취약점은 현재 공식 패치를 적용하지 않은  Castle PHP버전을 사용하고 있는 페이지들이 취약하며, 이를 이용한 탐지 우회 시도 피해가 예상된다
.

III. 대응 방안

1.   보안 대책

가.  공식 패치

취약점과 관련하여 현재 KrCERT 에서 패치가 되어 배포되고 있으며, 패치 버전은 1.0.1 버전이다
 
Castle 1.0.1 Version Download : http://www.krcert.or.kr 



Copyright(c) 1998-2009 A3 Security ,LTD 

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

MS Internet Explorer 7 Memory Corruption(MS09-002)

취약점 분석/2009년 이후 2009. 3. 3. 13:52 Posted by 알 수 없는 사용자

▷ 작성자 : nohpro (nohpro@a3sc.co.kr)
▷ 편집자 : nohpro (nohpro@a3sc.co.kr)


MS Internet Explorer 7 Memory Corruption
(MS09-002)

취약점 보안 권고안


By
nohpro@a3security.com
(A.K.A nohpro)

I. 취약점 개요

취약점

MS Internet Explorer Memory Corruption (MS090-002)

A3SC Advisory ID

A3AID09-

위험 등급

긴급

최초 발표일

2009.02.18

문서 작성일

2009.02.27

벤더

Microsoft

현재상태(패치여부)

패치

1. 요 약
본 취약점은 2009년 2월 18일 PoC 가 공개되었으며 2월 20일 Exploit 이 공개되었습니다. Internet Explorer 7을 사용하는 시스템에서 해당 취약점을 이용한 공격이 이루어질 수 있습니다. 취약점이 존재하는 Explorer을 사용하는 사용자가 조작된 페이지에 접근 할 경우 임의의 코드를 실행 합니다. 해당 취약점으로 인해 원격코드 실행이 가능합니다.
본 보안 권고는 Windows XP 서비스 팩 2 한글버전(Internet Explorer 7)을 대상으로 분석하였으며, 현재 해당 취약점을 이용한 악성코드들이 전파되고 있고, 현재 bindshell을 맺을 수 있는 exploit이 공개된 상태입니다.


2. 대상시스템
해당 취약점에 영향을 받는 시스템 목록은 아래와 같으며, Windows XP 서비스 팩2 한글 버전(Internet Explorer 7)에서 임의의 코드실행 취약점이 확인되었습니다. 

Internet Explorer 7

-         Windows XP 서비스 2 Windows XP 서비스 3

-         Wikdows XP Professional x64 Edition Windows XP Professional x64 Edition 서비스 2

-         Windows Server 2003 서비스 1 Windows Server 2003 서비스 2

-         Windows Server 2003 x64 Edition Windows Server 2003 x64 Edition 서비스팩 2

-         Windows Server 2003 SP1(Itanium 기반 시스템용) Windows Server 2003 SP2(Itanium 기반 시스템용)

-         Windows Vista Windows Vista 서비스 1

-         Windows Vista x64 Edition Windows Vista x64 Edition 서비스 1

-         Windows Server 2008(32비트 시스템용)

-         Windows Server 2008(x64 기반 시스템용)

-         Windows Server 2008(Itanium 기반 시스템용)



3. 심각도 및 취약점 확인

취약점 영향

취약점 위험도

비정상 실행 원격코드실행




II. 취약점 세부분석

1. 취약점 내용
해당 취약점은 Internet Explorer 7을 사용하는 시스템에서 발생하는 취약점입니다. Internet Explorer가 CollectGarbage() 에 의해 삭제된 객체에 접근할 경우 원격코드 실행이 가능합니다. heap spray를 이용하여 메모리 상에 nopslide인 0x0c0c0c0c를 채워서 EIP가 shellcode 주소를 가리키게 하여 원격코드를 실행할 수 있는 취약점입니다.


2. 공격 분석
다음은 milw0rm에 공개된 MS09-002 취약점 PoC 코드 일부입니다.

URL) http://www.milw0rm.com/exploits/8077

다음의 PoC코드를 보면, 변수 c 에는 문자열이 입력되어 있습니다(exploit code 에서는 변수 c에 shellcode를 입력하게 됩니다). Heap영역에 spray할 size(val ls)를 정해주고, heap 영역에는 lh(nopslide) + c(shellcode)를 할당하게 됩니다. 



[그림 1] PoC 코드

다음의 코드를 보게 되면, o1객체를 생성하고 이를 cloneNode 메서드를 사용하여 o2로 복사를 합니다. o1.clearAttributes()에 의해 o1객체의 모든 값을 제거합니다. o1=null 에 의해 o1객체를 null로 초기화 시키고, collectGarbage()를 호출하여 o1객체를 삭제하게 되면 해당 메모리를 계속 사용 가능하게 됩니다. 이로 인해 heap영역에 nopslide가 채워지게 되고 최종적으로 shellcode가 실행됩니다.  


[그림 2] PoC 코드

 다음은 heap spray에 의해 메모리 영역이 nopslide인 0x0C 값으로 채워진 화면입니다.

[그림 3] heap spray

다음은 heap spray 코드가 실행된 화면입니다.

[그림 4] shellcode가 실행되는 메모리 영역

다음은 변수 c에 계산기를 실행하는 shellcode를 삽입한 exploit입니다. 

[그림 5] 계산기가 실행되는 shellcode

다음과 같이 Heap 영역에 nopslide + shellcode를 할당하여 최종적으로 EIP가 shellcode를 가리켜서 계산기가 실행됩니다.

[그림 6] shellcode로 인해 계산기 실행


다음은 2월 20일 milw0rm에 공개된 exploit입니다. 해당 exploit은 변수 c에 TCP 28876 port로 bindshell을 맺는 shellcode가 포함되어 있습니다.

URL) http://www.milw0rm.com/exploits/8079

[그림 7] bindshell을 맺는 shellcode


다음은 해당 exploit을 실행하기 전 사용자의 네트워크 상태입니다.

[그림 8] 사용자의 네트워크 상태

다음은 MS09-002 취약점을 이용한 시스템에 접근하는 화면입니다.  
 
[그림 9] MS09-002 공격

해당 URL 에 접근 할 경우 bind shell을 맺어 TCP 28876 port로 LISTENING되는 화면입니다.
 
[그림 10] 28876 port로 bindshell

다음은 사용자의 시스템에 28876 port로 접속을 시도하는 화면입니다.

[그림 11] 28876 port로 Telnet 접속


다음은 사용자의 시스템으로 28876 port로 접속한 화면입니다.
 


[그림 12] Telnet 접속 성공



3. 위험 분석
MS09-002 취약점을 이용한 웜/바이러스가 유포 중이기 때문에, Internet Explorer 7을 사용중인 일반사용자 및 서버관리자 중 윈도우 패치를 하지 않은 사용자는 시스템이 장악 당할 수 있습니다.



III. 대응 방안

1. 보안 대책
현재 MS09-002 취약점에 대한 패치가 공개된 상태이기 때문에 최신의 패치를 권고합니다.

2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같습니다.

http://www.microsoft.com/korea/technet/security/Bulletin/MS09-002.mspx
http://www.milw0rm.com/exploits/8077
http://www.milw0rm.com/exploits/8079


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

▷ 작성자 : 붉은반점(r3dp0int@a3sc.co.kr)
▷ 편집자 : 니키 (
ngnicky@a3sc.co.kr)



FreeBSD 7.0-RELEASE Telnet Daemon
Local Privilege Escalation Exploit



취약점

FreeBSD Telnetd Remote Code Execution 취약점

A3SC Advisory ID

 

위험등급

최초 발표일

2009 2

문서 작성일

2009 2 25

벤더

FreeBSD

현재상태(패치여부)

홈페이지 패치 가능


1. 요약
FreeBSD 텔넷 데몬(telnet(8))은 Telnet 가상 터미널 프로토콜의 서버를 구축하는데 사용하는 데몬입니다. 하지만, 보안의 이유로 2001년 8월부터 FreeBSD에서는 텔넷 대신 SSH프로토콜을 사용할 것을 권고해왔습니다. 텔넷 프로토콜은 접속한 클라이언트가 새롭게 생성된 로그인 세션에 대해 설정될 수 있는 환경변수를 직접 지정할 수 있도록 허가합니다. 이걸 사용하여 터미널 설정 등을 정할 수가 있게 됩니다.

이 점을 이용한 환경변수 기반의 공격을 막기 위해서는 텔넷 데몬이 해가 되는 환경변수 부분을 제거해주어야 합니다. 하지만, 환경변수 부분을 제대로 체크하지 못하는 점을 이용하여 텔넷 접속 시 root 권한으로 접속하여 코드 실행이 가능한 취약점입니다.


2. 취약점 대상
 FreeBSD (7.0 – Release) 버전
 FreeBSD (7.1 – Release) 버전


3. 취약점 영향

본 취약점은 아래와 같은 영향을 줄 수 있습니다.

취약점 영향

위험도

시스템 중요파일 변경 가능

시스템 코드 실행 가능




II. 취약점 상세분석

1. 취약점 개요
본 취약점은 /bin/login을 실행시키기 이전 단계에서 환경변수 LD_PRELOAD같이 LD_*를 체크하지 않아서 생기는 취약점입니다. 이는 원격에서 root권한으로 코드를 실행할 수 있습니다.

[program.c 원본 : http://www.milw0rm.com/exploit/8055] 일부 수정하였음.

이를 아래의 명령어를 이용하여 컴파일 할 것입니다.

#gcc –o program.o –c program.c –fPIC
#gcc –shared –Wl, -soname, libno_ex.so.1 –o libno_ex.so.1.0 program.o –nostartfiles

정상적으로 실행하였다면 아래 그림과 같이 파일이 존재하는 것을 확인할 수 있습니다.


[그림 1] 디렉토리 내 생성된 파일 확인

이중 라이브러리 함수를 쉽게 알 수 있는 임의의 위치에 복사를 해 놓습니다.
#cp libno_ex.so.1.0 /tmp/libno_ex.so.1.0

이 취약점을 실제 공격에 이용하기 위해서는 위와 같이 다른 공격을 이용하여 알려진 위치에 LD_PRELOAD 환경변수를 설정해놓은 다음 telnet을 이용하여 원격 혹은 로컬로 Root 권한을 얻어 낼 수 있게 됩니다.

이제는 위와 같은 과정을 거쳐 목표 서버에 환경설정을 완료했다는 가정하에 Telnet을 이용하여 Root 권한을 얻도록 하겠습니다.

telnet 을 열어 SRA(Secure RPC Authentication)을 끄고, 환경설정을 위해 심어놓은 라이브러리를 불러들여 권한상승을 실행할 수 있도록 합니다.

몇 줄 되지 않지만, 실행하면 아래의 그림과 같이 Root 만의 기호 #을 볼 수 있게 됩니다. 권한 비교 및 확인을 위해 id 명령어를 이용하였습니다.


[그림 2] Telnet 접속 시 환경설정을 이용하여 권한 상승에 성공한 화면
위와 같이 Telnet 을 이용해 권한 상승에 성공하였음을 확인하였습니다.


2. 소스코드 패치 분석
= 패치 시 삭제될 부분
= 패치 시 추가될 부분

  char **cpp, **cpp2;
  const char **p;
-
-  for (cpp2 = cpp = environ; *cpp; cpp++) {

+ char ** new_environ;
+ size_t count;
+
+ /* Allocate space for scrubbed environment. */
+ for (count = 1, cpp = environ; *cpp; count++, cpp++)
+  continue;
+ if ((new_environ = malloc(count * sizeof(char *))) == NULL) {
+  environ = NULL;
+  return;
+ }
+
+  for (cpp2 = new_environ, cpp = environ; *cpp; cpp++) {
   int reject_it = 0;
 
   for(p = rej; *p; p++)
@@ -1286,10 +1296,15 @@
   for(p = acc; *p; p++)
    if(strncmp(*cpp, *p, strlen(*p)) == 0)
     break;
-  if(*p != NULL)
-    *cpp2++ = *cpp;

+  if(*p != NULL) {
+   if ((*cpp2++ = strdup(*cpp)) == NULL) {
+    environ = new_environ;
+    return;
+   }
+  }
   }
  *cpp2 = NULL;
+ environ = new_environ;
 }


주요 패치 내용 )
새로운 포인트 변수 new_environ을 할당하고, 만약 환경변수 environ에 환경변수가 등록되어 있으면 이 값을 지워버리고 new_environ에 입력하여 environ 값으로 바꿔줍니다.



III. 결론

1. 대응 방안

근본적인 문제해결은 있을 수 없습니다. 하지만, Telnet 데몬을 사용하지 않는다면, 이 취약점에는 안전합니다.
FreeBSD 홈페이지에는 이미 패치가 올라와 있습니다. 이를 이용하여 패치할 수 있습니다.
http://security.freebsd.org/patches/SA-09:05/telnetd.patch


2. 참고 문헌 및 사이트
Exploit 소스 : http://www.milw0rm.com/exploits/8055 [Exploit 코드 부문 자체 수정이 있었습니다.]
공식 권고문 : http://security.freebsd.org/advisories/FreeBSD-SA-09:05.telnetd.asc
공식 패치 코드 : http://security.freebsd.org/patches/SA-09:05/telnetd.patch



[indra (indra@a3security.com) 의 한마디...]
LD_PRELOAD는 *nix 계열 environment 에서 동적 라이브러리를 로드하는데에 쓰이며, 이는 다른 라이브러리를 로딩하는 로직보다 우선순위를 가지고 있습니다.
따라서 예전에 함수의 반환값을 0으로 만드는 라이브러리를 LD_PRELOAD를 사용해 로드하고 shell을 실행하면 getuid() 계열 함수의 반환값이 0 이 되어 whoami, id 등의 명령어 결과를 root 로 만들게끔 조작하는 것이 가능했었습니다.

그러나 실제 kernel 상의 process image에는 권한등록이 일반 user로 되어 있기 때문에 실제 root의 권한은 아니었고요. 이러한 LD_PRELOAD의 기능을 이용한 것이 해당 exploit의 기본 아이디어 이구요.

원격접속을 받아 인증을 하고 pts, tty 등의 터미널 관련 device를 생성하는 등의 작업을 하기 위해서는 root 권한으로 daemon이 실행되어야 하는데, LD_PRELOAD 를 이용한 로드된 라이브러리에서 shell을 바로 실행시켜 버리기 때문에 권한이 낮춰지지 않은 상태의 root shell이 실행되게 됩니다.

exploit 은 현재 공개되어 있으며, 09년 2월 16일자로 공개되었습니다.

다음의 링크 입니다.

http://milw0rm.com/exploits/8055

exploit을 보면 environ 명령을 통해 환경변수를 설정할 수 있고, 이를 조작하여 원격접속 시 LD_PRELOAD라는 환경변수를 이용해 악의적인 라이브러리를 로드할 수 있게 됩니다.어떻게 보면 예전에 나왔던 SunOS telnet 취약점이랑 비슷합니다. remote 취약점은 아니나, web, ftp 에 접근하여 파일을 생성할 수 있는 경우 해당 취약점에 노출됩니다.

이에 대한 공식 권고문은 다음의 링크 입니다.

http://security.freebsd.org/advisories/FreeBSD-SA-09:05.telnetd.asc

공식 패치의 코드는 다음의 링크 입니다.

http://security.freebsd.org/patches/SA-09:05/telnetd.patch

패치된 코드는 환경변수를 의미하는 environ을 설정하고 환경변수가 등록되어 있으면 해당 값을 지워버리는 것으로 LD_PRELOAD의 환경변수 값을 지워버리게 됩니다. 따라서 공격자의 라이브러리는 로드되지 않겠죠.



Copyright(c) 1998-2009 A3 Security ,LTD


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