2012년 8월 31일 금요일

제로데이(0-day) 자바 취약점 주의, CVE-2012-4681

자바 7 버전에서 원격의 사용자가 조작된 애플릿을 통해 임의의 코드를 실행할 수 있는 취약점이 보고 되었다. (CVE-2012-4681) 현재 해당 취약점은 와일드 하게 사용되고 있으므로, 자바를 사용하고 있는 사용자는 주의가 필요하다. 이 시간 현재 해당 취약점 공식 패치는 존재하지 않으므로 패치가 나오기 전까지는 수동으로 임시적인 조치가 필요하다.

우선, 본인이 사용하는 브라우저가 안전한지 확인해 보는 가장 쉬운 방법으로는 다음 사이트에 방문하여 점검해 볼 수 있다:

http://isjavaexploitable.com/

만약 안전하다면 다음과 같은 화면을 볼 수 있다. 그렇지 않다면 경고 메시지가 나타날 것이고, 수동으로 자바 플러그인을 제거할 수 있는 방법을 제시해 준다. 해당 페이지의 자바 패치 통계를 보면 65% 정도는 패치되지 않은 Unpatched 상태이다. 그만큼 많은 사용자가 자바 취약점에 노출되어 있는 것이다.


플러그인 제거는 간단하다. 크롬의 경우라면 오른쪽 상단의 도구 아이콘을 선택한 후 설정을 통해 콘텐트 설정에서 플러그인을 선택한 후 '개별 플러그 사용중지' 를 통해 예외처리 할 수 있다. 자바 플러그인을 Disable 해주면 된다. 인터넷 익스플로러 사용자라면 제어판에서 자바 아이콘을 선택후 "Java" 탭에서 View 를 선택하고 나타나 있는 JRE 버전을 "enabled" 를 모두 언체크 해주면 된다. 또는 설정에서 '추가 기능 관리' 를 통해 나타나는 자바 관련 기능을 '사용 안 함' 상태로 바꾸어 주면된다. 이외는 레지스트리를 직접 수정하는 방법도 있다. IE 의 경우는 몇 가지 방법들이 있는데, 앞서 언급한 체크 페이지를 통해 방문해 보고 취약하다고 나온 경우 제시한 방법들을 적용해 보면 된다.

브라우저에서 자바 플러그인 제거 방법은 다음 URL 을 참고하면 된다.

http://krebsonsecurity.com/how-to-unplug-java-from-the-browser/

패치가 나오기 전까지는 수동으로 대응할 것을 강력히 권장한다.

[참고]
1. CVE-2012-4681
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4681



2012년 8월 27일 월요일

안드로이드 취약점 스캐너, X-Ray


안드로이드 취약점을 스캐닝 해 줄 수 있는 도구인 X-Ray 를 소개한다. XDA 의 멤버가 개발한 앱으로 안드로이드에 알려진 취약점을 스캐닝해주어 위협을 사전에 인지할 수 있도록 해준다. 현재 X-Ray 앱이 판단 가능한 취약점은 8개이며 다음과 같다:


  • Exploid (Up to Android 2.1 Eclair)
  • ASHMEM (Up to Android 2.2 Froyo)
  • ZimperLich (Up to Android 2.2 Froyo)
  • Gingerbreak (Up to Android 2.3.2 Gingerbread)
  • Levitator (Up to Android 2.3.5 Gingerbread; devices with PowerVR SGX)
  • ZergRush (Up to Android 2.3.* Gingerbread; patched in different GB versions by different vendors)
  • Mempodroid (Up to Android 4.0.4 ICS)
  • Wunderbar (Linux kernel exploit; may or may not be patched yet)




Gingerbreak 경우는 안드로이드 악성코드에서 널리 이용되는 취약점중에 하나이고 Wunderbar 는 리눅스 커널상에서 발생되는 널 포인터 관련한 것으로 안드로이드 플랫폼에서 이 취약점을 통해 권한 상승이 가능하다. Mempodroid 는 리눅스 커널상에서 이어진 취약점으로 /proc/pid/mem 인터페이스를 통해 setuid 프로세스 메모리 주소에 임의의 기록이 가능하다.

블로그에서 안드로이드 취약점과 관련한 포스팅 글이 있으므로 참고하길 바란다. (android 태그 검색)

다운로드는 다음의 경로에 가면 받을 수 있다.

www.xray.io/

2012년 8월 24일 금요일

여러개의 패킷파일 하나로 합치기 (using mergecap)

블로그에서 패킷분할과 관련해서는 몇 가지 포스팅 된 글이 있는데, 여러 패킷을 한개로 합치는 것은 지금 찾아보니 소개한 적이 없었다. 이미 와이어샤크에 기능이 포함되어 있었는데 말이다.

여러개의 패킷을 한개로 합치는 방법은 와이어샤크에서 제공해주는 'mergecap' 을 이용하는 것이 편리하다. 기본 사용방법은 다음과 같다:


Usage: mergecap [options] -w <outfile>|- <infile> ...

Output:
  -a                concatenate rather than merge files.
                    default is to merge based on frame timestamps.
  -s <snaplen>      truncate packets to <snaplen> bytes of data.
  -w <outfile>|-    set the output filename to <outfile> or '-' for stdout.
  -F <capture type> set the output file type; default is libpcap.
                    an empty "-F" option will list the file types.
  -T <encap type>   set the output file encapsulation type;
                    default is the same as the first input file.
                    an empty "-T" option will list the encapsulation types.

Miscellaneous:
  -h                display this help and exit.
  -v                verbose output.
mergecap 을 이용해 -w 로 합쳐질 파일 이름을 지정해 주고, 그 뒤로 합칠 패킷파일들을 나열해 주면 된다. -v 옵션은 추가적인 동작 정보를 제공해 준다.

$ mergecap -v -w output.pcap input1.pcap input2.pcap


패킷 파일 이어붙이기


기본적으로 패킷파일들이 하나로 합쳐질 때는 패킷 프레임의 시간에 기준하여 합쳐지게 된다. 이러한 방법이 아니라 끝에다 이어붙이기를 할 수도 있는데, -a 옵션을 사용하면 된다. 첫번째 입력으로 주어진 파일 뒤쪽에 두번째 주어진 패킷파일이 이어진다.

$ mergecap -v -w output.pcap input1.pcap input2.pcap -a 


특정 길이로 한정해서 합치기


패킷 덤프를 할 경우에도 snaplen 길이를 정의하여 패킷의 얼마만큼을 볼 것인지 정의할 수 있었다. 합치는 경우에도 -s 로 snaplen 을 정의하여 지정된 바이트 만큼으로 패킷을 잘라낸다.

$ mergecap -v -w output.pcap input1.pcap input2.pcap -s 1000

캡슐화 타입 정의하기


합쳐질 패킷파일의 캡슐화 타입을 정의할 수 있다. -T 옵션 다음에 정의해 주면 되고, 인자값 없이 -T 만 사용하면 캡슐화로 사용가능한 목록을 살펴볼 수 있다. 기본적으로는 처음 입력으로 들어오는 패킷파일의 타입을 사용하게 된다.

$ mergecap -v -w output.pcap -T ether input1.pcap input2.pcap 

캡슐화에 대해 궁금한 분들은 다음 포스팅을 참고해 보기 바란다.

"패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?"
http://www.packetinside.com/2011/03/encapsulation.html


와이어샤크에서 제공해주는 mergecap 파일외 파이썬으로 제작된 FLAG(Forensic and Log Analysis GUI)에서 제공해주는 mergecap.py 파일을 이용해 볼 수도 있다.

http://code.google.com/p/pyflag/source/browse/utilities/mergecap.py

2012년 8월 18일 토요일

와이어샤크 보안업데이트, 1.8.2 최신버전 릴리즈


와이어샤크 보안 업데이트가 반영된 최신 버전이 8월15일 릴리즈 되었다.
특히 이번 릴리즈에는 많은 보안 업데이트가 이뤄진 만큼, 와이어샤크 사용자는 업데이트를 권고한다. 1.8.2 버전의 경우 다음과 같은 취약점이 해결되었다.

CVE-2012-4285
CVE-2012-4287
CVE-2012-4288
CVE-2012-4294
CVE-2012-4295
CVE-2012-4289
CVE-2012-4296
CVE-2012-4297
CVE-2012-4291
CVE-2012-4292
CVE-2012-4293
CVE-2012-4290
CVE-2012-4286
CVE-2012-4298

이번 보안 업데이트는 몽고DB,XTP,ERF,AFP,RTSP2, GSM RLC MAC, CIP, STUN 등의 패킷 파서에서 발견된 문제점들이며, 이번 버전에서는 새로운 기능 추가는 없다.

다음 경로에서 최신 버전을 다운로드 받을 수 있다:

2012년 8월 17일 금요일

패킷 파일 찾을때 간단하게 이렇게 해 보면 어떨까?

패킷파일을 많이 보관하고 있는 경우 find, grep 등의 명령어를 사용하여 찾고는 한다. 이럴 때 간단하게 다음과 같이 사용하여 pcap 파일을 쉽게 찾아쓰는건 어떨까?


$ fpcap() { find -maxdepth 2 -type f | grep -i "$1\.pcap"; };

fpcap 를 실행할 시 find 명령어를 이용하여 현 디렉토리에서 최대 깊이를 2단계 까지 하고 타입이 파일인 것을 대상으로 grep 을 통해 확장자가 .pcap 파일을 찾는다. 만약 인자가 주어지면 $1 이 대입된다.

인자값이 주어지지 않는 경우 확장자가 .pcap 인 것을 찾아낸다.


$ fpcap
./ppp.pcap
./packet/smtp.pcap
./http.pcap

인자값이 주어지면 해당 파일명만 보여준다.

$ fpcap smtp
./packet/smtp.pcap


여기서는 간단한 사용형태만 예로 들었지만, 사용하는 환경이 모두 다르므로 자기 업무에 맞게 이런 기본 기능들을 활용하여 적용해 보면 의외로 유용하게 사용할 수 있는 것이 많다. 비롯 간단한 명령어지만 조금이라도 수고를 덜어줄 수 있다면 유용하지 않을까 한다.
(또는 확장자를 대상으로 하지 않고 file 명령어를 통해 pcap 파일을 확인하여 사용할 수도 있을 것이다. 방법은 무한하다)

여러분들만의 유용한 도구로 상상의 나래를 펼쳐보자~

2012년 8월 1일 수요일

iptables 를 이용한 트래픽 복사하기

특정 인터페이스에서 발생한 트래픽을 다른쪽으로 전달하고자 할때 사용할 수 있는 방법이 있다. 스위치에서 '미러링'을 하는 것과 같은 기능을 구현할 수 있는 것으로 iptables 을 이용하고 있다면 어렵지 않게 만들어 볼 수 있다. iptables 의 모듈중 TEE 를 이용하면 간단하다. *NIX 시스템을 이용해본 사용자라면 tee 명령어에 대해서 알고 있을 것이다. tee 명령어가 수행하는 것과 같은 기능이며 아래 예제는 PREROUTING 으로 설정하고 인터페이스 eth2 에서 발생되는 tcp 프로토쿨 중 목적지가 80번인 트래픽을 192.168.0.1 로 보낸다는 것이다.

iptables -A PREROUTING -t mangle -i eth2 -p tcp --dport 80 -j TEE --gateway 192.168.0.1

그런데 실행하다보면 TEE 모듈이 없다고 아래와 같이 에러가 발생하는 경우가 있다.

iptables v1.4.8: Couldn't load target `TEE':/lib/xtables/libipt_TEE.so: cannot open shared object file: No such file or directory


Try `iptables -h' or 'iptables --help' for more information.

/lib/xtables/libipt_TEE.so 파일이 존재하지 않기 때문이다. so 파일을 찾아보면 찾아볼 수가 없다.

# ls -l *.so
-rwxr-xr-x 1 root root  8116 Jul 27 18:57 libxt_CHAOS.so
-rwxr-xr-x 1 root root  8545 Jul 27 18:57 libxt_condition.so
-rwxr-xr-x 1 root root  6833 Jul 27 18:57 libxt_DELUDE.so
-rwxr-xr-x 1 root root  9482 Jul 27 18:57 libxt_dhcpmac.so
-rwxr-xr-x 1 root root  9491 Jul 27 18:57 libxt_DHCPMAC.so

libipt_TEE.so 파일이 필요하고 이것이 /lib/xtables 경로에 있어야 한다는 뜻이 된다.

해당 so 파일을 만들어 내기 위해서는 itables 컴파일등 복잡한 과정이 필요해질 수 있다. iptables 가 기본으로 설치되어 있는 경우라면 이것을 다시 컴파일 하기 까지는 적지않은 시간이 소요될 수가 있는 것이다. 데비안, 우분투와 같은 패키지 사용자라면 다음과 같이 쉽게 사용해 볼 수 있다.

우선 xtables 패키지를 검색해 보자.


# apt-cache search xtables
iptables-dev - iptables development files
xtables-addons-common - Extensions targets and matches for iptables [tools, libs]
xtables-addons-source - Extensions targets and matches for iptables [modules sources]

xtables-addons 에 관련 모듈이 들어 있는데, 패키지로 찾을 수가 있다. 소스파일이 보이니 이것을 컴파일 해주면 되는 것이다.

# apt-get install xtables-addons-common xtables-addons-source

로 설치해 주면 /usr/src 밑에 xtables-addons.tar.bz2 파일이 생성되게 된다. 그런데 이 소스를 가지고 어떻게 해 주어야 하는 것인가?

데비안의 경우 module-assistant 를 이용하면 쉽게 컴파일이 가능하다. 크게 다음과 같은 순서로 설치가 가능해진다.


# apt-get install module-assistant 
# ./module-assistant prepare
# ./module-assistant auto-install xtables-addons-source

module-assistant 를 이용하여 build 를 할 수 있고 module-assistant 를 설명을 보면 아래와 같다. 사용가능한 옵션들이 보이는데, build 는 컴파일을 수행하는 것이고 install 은 설치 purge 는 삭제다.

NAME
       module-assistant - manage kernel modules packages

SYNOPSIS
       module-assistant  [  -fihnqstv  ]  [ -k source/headers directory ] [ -l
       kernel versions ] { update | search | prepare | auto-install |  list  |
       list-available | list-installed | auto-unpacked | get | build | install
       | clean | purge | fakesource } [ pkg ... ]

       m-a ...

위 예에서는 auto-install 을 통해 한번에 자동으로 설치되는 것을 예로 들었는데, 직접 build 만을 하기 위해서는  " m-a build xtables-addons-source " 와 같이 사용하면 된다. module-assistant 가 길기 때문에 'm-a' 로 줄여서 사용할 수 있다.

실행하게 되면 /usr/src 에 존재하는 xtables-addons 소스를 확인하고 압축해제후 컴파일을  수행한다. 완료되면 deb 패키지로 만들어 주게되는데, 수동으로 이 deb 패키지를 설치하면 된다. dpkg -i 패키지명.deb 와 같이 말이다.

# m-a build xtables-addons-source
Extracting the package tarball, /usr/src/xtables-addons.tar.bz2, please wait...
Done with /usr/src/xtables-addons-modules-2.6.32-5-amd64_1.26-2+2.6.32-45_amd64.deb .



auto-install 은 컴파일과 설치까지 한번에 다 진행하게 되는데, 만약 이런 과정에 문제가 있을시에 각 단계를 따로 진행하면서 문제의 원인을 파악해 볼 수 있다. 더불어
텍스트 모드로드 실행할 수 있는데 -t 옵션을 사용하면 된다.

# m-a -t  build xtables-addons-source
Extracting the package tarball, /usr/src/xtables-addons.tar.bz2, please wait...
dh_testdir
/usr/bin/make -C /lib/modules/2.6.32-5-amd64/build M=/usr/src/modules/xtables-addons XA_ABSTOPSRCDIR=/usr/src/modules/xtables-addons clean
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-amd64'
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-5-amd64'
dh_clean

-t 옵션은 텍스트로 설치과정을 세세하게 보여주므로 어디서 문제가 발생하는지 쉽게찾을 수 있다. 만약 제거를 한다면 아래와 같이 사용하면 된다.

# m-a purge --force xtables-addons-source

이외 m-a 를 그냥 실행하면 아래와 같이 interactive 화면을 볼 수 있으며, overview 를 통해서 사용가능한 명령어들을 세부적으로 확인할 수 있다.


그런에 위와 같이 설치가 완료되더라도 so 파일이 존재하지 않는다고 나타난다. 커널 모듈 형태로 컴파일이 되었기 때문에 *.ko 와 같은 파일을 대신 볼 수 있을 것이다. iptables 가 설치된 환경이 다르지만 나의 경우는 so 파일이 필요하였기에 다음과 같이 컴파일을 수행했다.

/usr/src/modules/xtables-addons 경로로 이동 후 아래와 같이 실행한다.

# /usr/bin/make -f Makefile.iptrules M=/usr/src/modules/xtables-addons XA_TOPSRCDIR=/usr/src/modules/xtables-addons XA_SRCDIR=/usr/src/modules/xtables-addons
  CC     libxt_CHAOS.oo
  CCLD   libxt_CHAOS.so
  CC     libxt_DELUDE.oo
  CCLD   libxt_DELUDE.so

그러면 .so 파일이 만들어지는 것을 볼 수 있을 것이다. 그럼 이것을 경로에다 복사해 넣어주면 OK 다. iptables 를 이용한 설정은 간단하였는데, 오히려 libipt_TEE 를 사용하기 위해서 기술한 내용이 많았다. iptables 뿐만 아니라 다른 부분에서도 유용할 수 있으니 알아두면 유익할 것이다. :-)