2010년 4월 30일 금요일

패킷(Packet) 편집/생성을 윈도우에서 쉽게 해보자!

리눅스 환경에서의 도구를 많이 소개했는데, 이번에는 윈도우 기반의 도구 하나를 소개한다. 패킷 편집을 쉽게 할 수 있는 도구이다. 가끔 작업을 하다보면 패킷을 내가 원하는 대로 수정하여 전송하거나 그럴 필요성이 있다. 제품의 테스트라든지, 탐지 패턴 규칙 테스트 형태들이 이에 속할 것이다.

아래 도구는 패킷의 각 필드를 세부적으로 쉽게 수정할 수 있는 기능을 제공해 주고, 바로 전송할 수 있도록 해 준다. 물론, 교육적, 개인적으로 사용하는 것은 무료이다. Colasoft Packet Builder 로 다음 사이트에서 다운로드 받을 수 있다.


사용하기도 워낙 쉬어서 실행하고 Add 나 insert 를 선택하여 패킷 형태를 선택해 주고 각 세부 정보를 수정하면 된다. 또는 기존에 만들어진 PCAP 파일등을 Import 할 수 있다. 헤더 정보를 수정하면 Checksum 값이 달라지는데 기본적으로 Checksum 을 자동으로 계산하여 반영해 준다.

원하는 대로 수정하고 나서 전송할 패킷을 선택하고 Send 를 선택하면 다음 화면을 볼 수 있다.
몇번을 전송할지 정할 수 있으며 ( 0 은 무한 루프이다) 기본 설정을 하고, Start 를 누르면 전송이 된다.

자 그럼 위에서 설정한 것과 같이 전송이 된다. TCP 전송을 하면서 1.1.1.1 을 찾는 ARP 도 같이 발생하였다.

패킷을 생성하는 이 프로그램은 워낙에 인터페이스가 쉬우면서도 직관적이어서 패킷에 대한 기본 지식이 있으면 어렵지 않게 사용할 수 있다. 패킷 편집이 필요하다면 한번 사용해 보세요!.


2010년 4월 29일 목요일

윈도우 기반의 QoS 트래픽 생성기

QoS(Quality of Service) 트래픽을 생성하는 커맨드 도구를 하나 소개한다. 트래픽을 대량으로 생산하는 그런 도구와 달리 QoS 기능을 테스트하기 위한 용도로 만들어 진 것이다. 이 도구는 윈도우 7 개발 과정과 QoS 기술을 테스트 하기 위해서 만들어진 것이라고 한다.  윈속을 통해 트래픽을 전달하는 기능과, TCP와 UDP 듀얼 모드 소켓을 지원한다. 32비트와 64비트 또한 둘다 지원한다.

간단하게만 우선 테스트 해 보았는데 아래 그림과 같이 실행하면 10초 동안 5메가 수준으로 트래픽을 생성한다.


윈도우 비스타와 7 환경에서 관련 프로그램을 개발하는 분들은 참고하길 바란다.

[다운로드]
[참고정보]

2010년 4월 28일 수요일

TCP 3 Way 핸드쉐이크의 사랑이란?...

오늘은 TCP 3 Way HandShake 의 과정을 이용하여 '사랑' 을 표현한 재미있는 만화 하나를 소개하고자 한다.

TCP가 UDP 와 다른점이 신뢰성 이다. UDP 는 패킷을 보내고 이것이 제대로 전달되었는지 확인하지 않는다.
그런데, TCP 는 3 Way 핸드쉐이크라는 과정을 거친다. UDP 보다 좀더 신뢰성이 있는 통신을 하는 것이다. 아래 이미지를 보면 SYN 을 보내고 SYN+ACK 를 받고 ACK 를 보내면서 통신 연결이 이뤄진다.

이미지출처 : www.tcpipguide.com


이러한 과정을 이용해 '사랑'을 표현한 것으로 한번 살펴보자. 남자가 SYN 을 보내고 여자는 이에 대한
대답으로 SYN-ACK 를 보낸다. 남자는 다시 ACK 를 보내고 환호한다. 데이트하기 위한 첫 과정은
성공했다 생각했을 것이다. 기뻐하는 것도 잠시, 여자가 RST 를 보내 단호히 거절한다. 그 후 남성의 표정은
확 바뀐다. 마지막 문구를 보면 TCP 를 비록 사용한다고 하더라도 사랑은 신뢰될 수 없단다.

이 그림을 보고 얼마나 웃음이 나오던지. TCP를 이해하고 있는 사람이라면 왜 웃음이 나오는지
금방 이해가 될 것이다.  ^.^
Love can be unreliable, even when you use TCP

2010년 4월 27일 화요일

패킷 분석 비주얼(Visual) 하게 살펴보자 - NetGrok

수 많은 패킷 파일 데이터와 뚫어져라 쳐다보는 눈과의 싸움. 그렇기 때문에 패킷 분석 시 어떻게 하면
빨리 분석을 수행할 수 있을지 다양한 방법들이 있다. 특히, 비주얼하게 패킷 데이터를 볼 수 있으면
분석은 한층 쉬워질 것이다. 다양하게 표현하는 방법이 있지만, 그 중에서도 오늘 소개해 보고자 하는 것은
NetGrok 이다.

자반 기반으로 플랫폼에 독립적으로 사용이 가능하며, 실시간적으로 비주얼 하게 표시도 해주며
PCAP 포맷의 패킷파일도 표현할 수 있다. 또한, 트리맵 구조로도 표시가 가능하다. 이렇게 설명하는 것 보다
직접 한번 보고 실행해 보는 것이 낳을 것이다.

일단, 관련 정보 및 파일은 아래의 URL 에서 받을 수 있다.


다운 받은 netgrok20080928.zip 의 압축을 해제하면 여러 파일들이 보이는데 그 중에서 배치파일이
눈에 띄일 것이다. netgrok20080928.bat 를 에디터로 열어 보면 아래와 같이 적혀 있다.

java -jar netgrok20080902.jar
pause

그런데, 실행해 보면 실행이 안된다. 그 이유는 파일의 이름이 잘못되어 있다. 다운 받은 파일은 20080928.jar
인데, 배치파일에는 20080902.jar 로 되어 있다. 아마 배포하면서 제대로 수정이 안된것 같으므로 20080928.jar
로 변경하여 수행해 보자.

실행해 보면 또 에러가 발생하였다. groups.ini 의 내용에서 문제가 생긴것 같은데,
groups.ini 를 보면

[local]
Private1=Wireless=192.168.0.0/16
Private2=172.16.0.0/12
Private3=10.0.0.0/8

위와 같다. 나의 경우는 첫 번째 라인을 아래와 같이 변경하고서는 정상적으로 수행이 되었다.

Private1=Wireless=192.168.0.0/16 -> Private=192.168.0.0/16 과 같이 변경

groups.ini 는 데이터를 표현할 때 하나의 그룹으로 표현될 주소를 기록해 두는 곳이다. 일단 실행하고
File 에서 실시간 패킷 캡쳐를 수행하면, 아래 그림과 같이 비주얼한 화면을 볼 수 있다. 현재의 상황에
따라 비주얼하게 각 데이터들이 움직이면서 변화하기 때문에, 특정 공격과 같은 특이한 행동 패턴은
금방 알아챌 수 있을 것이다.


좀더 테스트를 해보기 위하여 Syn Flooding 이 일어난 패킷 데이터를 가지고 테스트 해 보았다. 목적지
192.168.0.2 는 일부로 목적지 IP 를 변경한 것이고, 패킷파일의 목적지, 출발지 변경은 앞서 소개한
포스팅에서 다루고 있으니 tcprewrite 로 찾아보기 바란다.


자, 위와 같은 데이터를 읽어보았더니 아래와 같은 형태로 표시되었다. 가운데 192.168.0.2 를 중심으로
수 많은 녹색색깔의 원이 둘러 싸고 있다. 녹색색깔이 여러개 인 것은 소스 IP 주소가 랜덤하게
스푸핑 된 형태이기 때문이다. 즉, 목적지 한 곳으로 출발지가 아주 랜덤하게 다양한 것으로 추정할 수 있다.

아래 이미지는 TreeMap 으로 본 것이다. 전체 노란색에서 우측에 빨간색 부분이 약간 보인다.

오래 테스트 해보지는 않았지만, 비주얼하게 화면을 보여주는 면에서는 나쁘지 않았다. 다만, 대용량
패킷 파일을 처리하기에는 힘들어 보이지 않을까 한다. 로딩하여 데이터를 파싱하는 과정도 시간이
오래 걸리고 실시간적으로 표현하는 과정에서도 멈춤 현상이 보였다.

@Rigel

2010년 4월 26일 월요일

키보드 LED 를 이용한 패킷 송신/수신 표시하기

재미있는 유틸리티를 하나 소개하고자 한다. 트래픽 패킷 오가는 내용을 패킷 덤프 프로그램 말고
다른 방법으로 확인하면 어떨까? 소개하고자 하는 TLEDS 는 패킷의 인/아웃 수신상태를
키보드의 LED 를 통해 표시해 준다.

키보드에 NUM LOCK, CAPS LOCK, SCROLL LOCK 이 눌러졌을때 표시해 주는 부분이 있다.
보통 키보드의 우측 상단에 있는데, 바로 이 부분을 수신 상태를 표시하는 부분으로 활용한 것이다.
3가지의 키 부분중 NUM LOCK, SCROLL LOCK 이 네트워크 패킷의 송신 / 수신 상태를 가리킨다.
재밌는 아이디어 아닌가 ?

설치는 간단하다. 데비안 사용자라면 아래와 같이 설치할 수 있다.

# apt-get install tleds

컴파일을 수행할 사용자 라면 아래 경로에서 정보를 얻을 수 있다.


설치하고 나면 아래와 같이 실행이 되는데 -d 옵션은 모니터링할 인터페이스를 지정해 주고 얼마주기로
상태를 표시할지 정의한 것이다.

# ps -ef | grep tled
root     19566     1  0 20:21 ?        00:00:00 /usr/bin/tleds -c -q -d 100 eth0
root     19992  3822  0 20:22 pts/2    00:00:00 grep tled

실행하고 나면 여러분의 키보드는 이제 트래픽 송신/수신 상태를 가리킨다.

재미로 사용할 수 있는 부분이기도 하지만 업무에 응용해 볼수도 있을것 같다. 평상시 켜 두고 있는데,
갑자기 이 두개의 불빛이 격렬하게 움직인다면 분명 트래픽이 크게 오고 간다는 것을 가르킨다.
평소와는 다르게 움직인다는 것은 무엇일까? 일단 한번 확인할 필요는 있을 것이다.

항상 트래픽을 감시할 필요없이, 키보드 상태 표시를 보는 것만으로도 네트워트 상태를 알 수 있다는 점!
나름 유용하게 활용할 수 있지 않을까 ?

P.S /proc/net/dev 정보를 이용하므로, 이곳에 접근이 가능하여야 한다.

2010년 4월 24일 토요일

자바(Java)에서 패킷 덤프는 어떤 방법으로 ?

윈도우 환경에서 패킷 캡쳐를 할때 기본적으로 설치하여 사용하는 것이 Winpcap 이다.
자바에서도 패킷 캡쳐를 하려면 이걸 그대로 이용하면 될 것인가? 자바기반의 라이브러리가 필요하다. 그리하여 자바에서 사용하기 위한 JPcap 을 소개하고자 한다. 당연히 실시간적으로 트래픽을 모니터링 할 수도 있으며, 일반적인 Pcap 과 비슷한 방법을 제공한다. 참고로, JPcap 도 libpcap/winpcap 을 기반으로 작성된 라이브러리이다.

아래 사이트를 방문하면 다운로드 및 좀더 세부 정보를 얻을 수 있다.

- http://jpcap.sourceforge.net/

JPcap 을 이용한 간단한 예제를 수행해 보았는데, 위 사이트에서 제공하는 코드 중 tcpdump.java
를 실행해 본 것이다.

일단 실행하면, 아래와 같이 덤프를 뜰 인터페이스를 지정하는 화면을 보여준다.


위 4가지 인터페이스 중 하나를 선택하여 실행하면 아래와 같이 패킷 정보를 확인할 수 있다. 자바를
조금이라도 겪어 본 분들이라면 어렵지 않게 실행할 수 있을 것이다.

참고로 코드도 함께 소개한다. 아래 코드는 위 사이트에서도 받을 수 있다. 자! 자바를 기반으로 한
패킷캡쳐가 필요하다면 JPcap 이 큰 도움을 줄 것이다.

[코드 : Tcpdump.java]

import jpcap.*;
import jpcap.packet.Packet;

class Tcpdump implements PacketReceiver {
public void receivePacket(Packet packet) {
System.out.println("PacketInside.com : JPCAP Example");
System.out.println(packet);
}

public static void main(String[] args) throws Exception {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if(args.length<1){
System.out.println("usage: java Tcpdump <select a number from the following>");
for (int i = 0; i < devices.length; i++) {
System.out.println(i+" :"+devices[i].name + "(" + devices[i].description+")");
System.out.println("    data link:"+devices[i].datalink_name + "("
+ devices[i].datalink_description+")");
System.out.print("    MAC address:");
for (byte b : devices[i].mac_address)
System.out.print(Integer.toHexString(b&0xff) + ":");
System.out.println();
for (NetworkInterfaceAddress a : devices[i].addresses)
System.out.println("    address:"+a.address + " " + a.subnet + " "
+ a.broadcast);
}
}else{
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[Integer.parseInt(args[0])], 2000,

false, 20);
jpcap.loopPacket(-1, new Tcpdump());
}
}
}

2010년 4월 22일 목요일

Tcprewrite 를 이용한 패킷파일의 IP, 포트등 재 작성하기


이전 포스팅에서 패킷파일을 재 전송하기 위해 tcpreplay 를 이용하는 방법에 대해 소개하였다.
이번에는 패킷파일의 내용을 재 수정하는 방법에 대해 소개한다. 엄밀히 말하면 수정은 아니고,
패킷파일의 출발지IP, 목적지 IP , 맥 주소등의 재 작성 이다. 패킷파일의 세부적 수정 방법에
대해서는 추후 다시 소개할 것이다.

예를들어, 패킷 파일을 하나 가지고 있다고 하자. 이 패킷파일의 목적지 주소는 61.111.X.X 였다.
그런데 내부 장비 테스트를 위하여 해당 IP 를 내부 시스템으로 바꿔 해보고 싶다. 이럴때 목적지
IP 주소를 쉽게 바꿀 수 있는 방법중의 하나가 tcprewrite 를 이용하는 것이다. 이것은 tcpreplay 의
한 가족 라인이기도 하다 :-)

또는, 누군가에게 패킷파일을 전달해 주어야 하는데 내부 IP 가 들어있고 해서 꺼림직하다. 이럴때
IP 를 다른것으로 바꿔 전달해 줄수도 있다. 나름 유용하게 활용할 수 있는 부분이 많이 있다.

아래 그림과 같이 다양한 옵션이 있고, 어렵지 않게 사용할 수 있다.

 
자, attack.pcap 파일에서 목적지 IP 를 61.111.X.X 에서 192.168.0.2 로 변경하고자 한다면 아래와 같이
할 수 있다. 일부 IP 는 X 로 처리하였으며, 사용된 옵션은 아래와 같다.

-i : Input 으로 사용할 PCAP 파일
-o : 재작성 하여 저장될 PCAP 파일. 즉 Output 파일이다.
--dstipmap : 변경할 목적지 IP 로 인자 값을 두개 사용하였다. 앞 인자값은 원래의 주소이며, 다음 인자값은
변경할 IP 주소이다.
--srcipmap : dstipmap 과 같이 똑같이 소스IP 를 변경할 때 사용한다.
--endpoints : 출발지와 목적지 양쪽의 엔드포인트를 변경할 때 사용한다.
--portmap : TCP/UDP 포트를 변경한다.
--seed : 출발지/목적지 IP 주소를 랜덤하게 변경한다.
-C : IP/TCP/UDP 체크섬값을 재 계산한다.
-v : 세부적인 정보를 출력해 준다.


1. 61.111.X.X 에서 192.168.0.2 로 목적지 주소 변경
# tcprewrite -i attack.pcap -o attack_rewrite.pcap --dstipmap 61.111.X.X/32:192.168.0.2/32 -C -v
07:01:26.330171 IP c-76-115-162-XX.or.comcast.net.39170 > 61.111.X.X.www: S 3946446848:3946446848(0) win 8192 <mss 1460,nop,nop,sackOK>
07:01:26.330223 IP 242.XX.250.193.5138 > 61.111.X.X.www: S 2755133440:2755133440(0) win 8192 <mss 1460,nop,nop,sackOK>

변경된 목적지 주소

07:01:26.330171 IP c-76-115-162-XX.or.comcast.net.39170 > 192.168.0.2.www: S 3946446848:3946446848(0) win 8192 <mss 1460,nop,nop,sackOK>
07:01:26.330223 IP 242.XX.250.193.5138 > 192.168.0.2.www: S 2755133440:2755133440(0) win 8192 <mss 1460,nop,nop,sackOK>

2. 포트 주소 80 번을 8008 로 변경
# tcprewrite -i attack.pcap -o attack_rewrite.pcap --portmap=80:8008

3. 출발지/목적지 IP 주소를 랜덤하게 변경
# tcprewrite -i attack.pcap -o attack_rewrite.pcap --seed=586
07:01:16.192829 IP 99.198.139.41.1129 > adsl-215-216-170.kymp.net.www: . ack 1 win 64240
07:01:16.193060 IP 99.198.139.41.1129 > adsl-215-216-170.kymp.net.www: P 1:181(180) ack 1 win 64240
07:01:16.302383 IP adsl-215-216-170.kymp.net.www > 99.198.139.41.1129: P 1:401(400) ack 181 win 65535
07:01:16.494930 IP 99.198.139.41.1129 > adsl-215-216-170.kymp.net.www: . ack 401 win 63840

기존 PCAP 파일 과는 달리 완전히 새로운 주소로 랜덤하게 변경되었다.

2010년 4월 21일 수요일

구글 인증시스템 소스코드 해커에 의해 유출...

구글의 인증시스템 소스코드가 해커에 의해 유출되었다는 기사가 뉴욕타임즈에 의해 보고되었다.
구글 서비스를 이용하면 하나의 아이디로 모든 구글 서비스를 이용할 수 있게 되었는데,
Single SignOn 형태로 구성되어 있기 때문이다. Gaia 로 불리는 이 인증시스템 소스코드가 유출된 것이다.
다행히도, 고객들의 실제 패스워드는 유출되지 않은 것으로 알려졌다.

Bizbox by Slate - Small Business Help and Tips

이미지출처 : bizbox.slate.com


이 사건은 한창 중국의 구글 공격과 관련한 그 시점으로, 중국 차이나의 구글 직원에게 메신저를 이용한 악의적 링크를 보내 클릭하도록 유도한 것으로 알려졌다. 그리고 그 직원의 시스템의 권한을 획득 후, GAIA 시스템에 접근 가능한 다른 동료의 컴퓨터를 통해 접근한 것으로 알려져 있다. 시스템
권한 획득시 이용한 것은 IE 의 취약점이라고 한다. (그 당시 알려져 있지 않았던)

자세한 해킹 내막은 알 수 없으나, 대략 기사의 내용을 요약해 보면 이렇다. 어찌되었든 인증 소스코드가 유출된 것이 사실이라고 하면 구글 입장에서는 큰 피해다. 소스코드를 가지고 있으니 인증 형태를 다 알 수 있을 것이고, 코드를 통해 취약점을 찾아낼 수도 있을 것이다. (만약 존재한다면)

이번 사건이 잘 해결되기를 바라며...구글 힘내여~

[참고기사]

2010년 4월 19일 월요일

와이어샤크를 이용해 방화벽 차단 룰을 쉽게 만들어보자

와이어샤크의 Tools 메류를 보면 Firewall ACL Rules 이라는 것이 있다. 이것은
말 그대로 방화벽,접근제어와 같은 차단 룰을 만들어주는 기능을 제공해 주는 것이다.

아래 그림과 Product 를 선택하면 어떤 종류의 룰로 만들것인지 지정할 수 있으며,
필터를 누르면 그에 해당하는 필터 형태를 결정할 수 있다. 그리고 Inbound 차단시
Inbound 를 체크하면 되고 차단 정책인 경우 Deny 를 선택만 하면, 룰이 쉽게 만들어진다.

지원하는 룰 종류 형태는 아래와 같다.
  • Cisco IOS
  • IP Filter
  • IPFirewall
  • Netfilter
  • Packet Filter (pf)
  • Windows Firewalls (netsh)
룰 종류 형태가 여러개 있다 보니 사실 사용하면서 헷갈리기도 한 부분인데,
와이어샤크를 통해 패킷을 분석하다 차단해야 할 부분이 있으면 바로 이 기능을
통해 룰을 만들어 보면 편리할 때가 있다.

[룰 예제]
# Netfilter (iptables)
iptables -A INPUT -i eth0 -d 192.168.0.2/32 -j DROP

# Windows Firewall (netsh)
add portopening tcp 1550 Wireshark DISABLE 192.168.0.2

2010년 4월 18일 일요일

구글에서 배포한 웹 보안 스캐너 Skipfish 를 이용해 보자

웹 보안 스캐너 도구를 하나 소개해 보고자 한다. 워낙 많은 도구가 존재하지만, 그 중에서도
구글이 만들어 배포하는 Skipfish 를 소개한다. 다운로드 및 세부 정보는 아래의 사이트를
방문해 보자


Skipfish 의 가장 큰 특징은 C 로 만들어져 있어 초당 2000 개 이상의 요청이 가능하다.
HTTP 핸들링에 있어 최적화 되어 있고, CPU 사용을 최소화한다. 사용이 쉽게 설계했다는
것도 Skipfish 가 자랑하는 점이며, 적은 오탐률과 뛰어난 기능을 자랑한다고 한다.

이 도구가 지원하는 스캐너 기능으로는 상,중,하의 위험도로 구분된 패턴과 내부 경고
메시지와 정보성의 메시지 정도로 구분된다. 상 위험도라 하면 서버 측면의
SQL 인젝션, 명령어 인젝션, 포맷 스트링 취약점 등이 있다.

참고로 업데이트 속도가 빠르다는 것도 장점이다. 이 도구를 소개하기 위해 접한게
1.09b 버전이었는데, 지금은 벌써 1.31 베타 버전이다. 설치는 어렵지 않게 진행할 수 있으며,
리눅스의 경우라면 컴파일 하기 위해 필요한 약간의 라이브러리 사전설치와 make 를
해 주기만 하면 된다. 필자의 경우는 libidn 이 없어 이것만 설치하고 쉽게 사용이 가능하였다.

# apt-get install libidn11-dev

# make
cc skipfish.c -o skipfish -Wall -funsigned-char -g -ggdb -D_FORTIFY_SOURCE=0 -I/usr/local/include/ -I/opt/local/include/ -O3 -Wno-format http_client.c database.c crawler.c analysis.c report.c -lcrypto -lssl -lidn -lz -L/usr/local/lib/ -L/opt/local/lib

NOTE: See dictionaries/README-FIRST to pick a dictionary for the tool.

컴파일 후, 실행을 시켜보면 아래와 같이 간단하다.
# ./skipfish
skipfish version 1.09b by <lcamtuf@google.com>
[-] PROGRAM ABORT : Scan target not specified (try -h for help).
    Stop location : main(), skipfish.c:379

특정 사이트를 대상으로 한번 실행해 보면 다음과 같은 이미지 결과를 볼 수 있다.

 
자, 그리고 skipfish 가 수행한 결과는 웹 페이지 형태로 깔끔하게 볼 수 있는데, 다양한 결과를 보여주고 있다.


웹 사이트를 초기 구축하였거나 운영중인 사이트가 있다면 Skipfish 를 통해 웹 사이트 점검을 해 보는 것은
어떨까 한다. 분명 많은 도움을 받을 수 있지 않을까 생각한다. 최소한 아무런 보안 점검 없이,
이러한 점검은 분명 사이트 안전에 큰 도움이 된다.


2010년 4월 16일 금요일

자바 제로데이(Zero-Day) 공격 보고돼...보안업데이트 필요!

자바에서 제로데이(zero-day) 공격이 보고되어 실제 피해가 발생하였다. 자바를 사용하는
사용자들은 긴급히 자바를 업데이트 하기를 권고한다. Java SE6 Update 20 버전이
취약점을 해결한 버전이다. 이번 취약점은 구글 엔지니어가 보고하였고,
허용되지 않은 자바프로그램을 실행할 수 있게 된다. 이번 취약점 피해는 Songlyrics.com
에서 확인되었는데, 러시아의 해킹된 페이지로 IFRAME 태그를 삽입한 경우이다.
혹시 위 사이트를 방문한 적이 있다면 악의적 코드에 감염되어 있지 않은지 확인해 보아야 할 것이다.

자, 어찌되었든 Java SE 6 Update 20 으로 패치를 하자!

[업데이트 정보]
http://java.sun.com/javase/6/webnotes/6u20.html
[다운로드 정보]

P.S 이번 수요일에 보고된 윈도우즈 보안 패치도 꼭 수행하기를 바란다.
윈도우 업데이트를 꾸욱 한번 누르면 된다.

Oracle Java patch
[이미지 출처] www.computerworld.com

2010년 4월 15일 목요일

와이어샤크를 이용한 패킷파일에서 바이너리 파일 추출하기

캡쳐된 패킷파일에서 바이너리 파일은 어떻게 추출하여 저장 해야 할까 ? 패킷파일에서 실행파일이나 이미지 ,문서파일등과 같이 전송된 내용이 있으면 그것만을 패킷파일에서 떼어내어 저장하고 확인할 필요가 있다.

Follow TCP Stream 기능을 이용하면 통신 내용을 한눈에 보여주긴 하지만, 원하는 파일을 바로
바이너리로 저장할 수는 없다. 또한,  하나의 통신안에 다수의 파일이 포함된 경우라면 더욱 복잡해진다.
물론, RAW 파일로 저장하는 기능이 있지만 모든 통신 내용을 포함하는 것이다 보니 내가 원하는 바이너리
파일만 뽑아내기가 힘들어진다.

만약 HTTP 로 통신한 경우라면 좀더 쉽게 바이너리를 뽑아낼 수 있는 기능을 와이어샤크에서 찾아볼 수 있다.

File -> Export ->Objects -> HTTP

를 클릭해 보면 아래와 같이 오브젝트 리스트를 볼 수가 있다.

파일이름과 사이즈도 보인다. 원하는 파일을 선택하여 Save As 로 쉽게 저장이 가능하다. 알고보면 이렇게
쉬운 기능을 제공해 주는 것이 있다. 이와 비슷한 형태지만 데이터가 와이어샤크에서 Reassemble 이 가능한 경우라면 바로 RAW 데이터로 저장할 수 도 있다. 예를 들면 위 그림에서 SO8DrawCS.pdf 파일이 보인다.
전송된 부분을 클릭해 보면 아래와 같이 Reassembled 되어서 전체 길이인 91779 bytes 가 한 화면에 보인다.
선택한 해당 프레임은 1313 바이트지만, 이런 기능을 제공해 주어 좀더 쉽게 볼 수 있도록 해준다.
각 프레임 마다의 헤더는 없이 전송된 데이터를 이렇게 보여주니 해당 데이터를 바로 저장하면 원하는 형태로
뽑을 수 있다. 아래 선택된 부분을 저장하기 위해서는 Ctrl+H 를 눌러보자. 저장할 이름을 물어보고 바로 저장이 될 것이다.


이외에도 패킷 파일에서 데이터를 추출하기 위한 방법이 있는데, 이것은 다음번에 다뤄보기로 한다.
일단, 오늘은 와이어샤크의 기능을 활용하여 부분적으로는 쉽게 데이터를 추출하여 저장할 수 있다는 점을
기억하면 된다.


2010년 4월 14일 수요일

Apache.org 사이트 해킹 당해 정보 유출

웹 서버로 유명한 아파치 웹 사이트가 해커에 의해 공격당했다. 문제가 된 사이트는 버그트랙 관련
시스템이 운영중인 issues.apache.org 이다. 4월6일날 해킹이 당했고, 공격방법은 XSS 를 이용한 것이다.
글을 하나 등록하면서 XSS 가 포함된 스크립트를 삽입하여 세션을 얻어간 것이다. 올린 글 문구는
아래와 같다 :

ive got this error while browsing some projects in jira http://tinyurl.com/XXXXXXXXX [삭제]

즉, tinyurl.com/XXXXXXXX 에 XSS 가 있었고, 관리자가 클릭을 하면서 관리자의 세션이 노출이 된 것이다.
어찌되었든 그것이 기초가 되어 해킹에 까지 성공한 것이다. JIRA DB 가 유출되어 사용자들의 아이디,
패스워드가 노출되었다. 비록 SHA-512 로 해쉬화 되어 저장되어 있었지만, 간단한 패스워드를 사용한
경우라면 Brute Force 공격을 통해 비밀번호를 얻어낼 수 있는 상황이다.  이번 사건과 관련해 4월14일 새벽에
다음과 같은 메일이 나에게 왔다.

issues.apache.org 가 해킹 당했으니, 패스워드를 업데이트 하라는 내용이다. 보통, 다른 온라인
사이트에서도 같은 패스워드를 사용하는 경우가 많으니 업데이트 해줄것을 당부하고
자세한 내용을 블로그에 기재해 놓았다. 다음 블로그를 방문하면 자세한 내막을 알 수 있다.



블로그에서도 자세한 내용을 공개하는 것은 이번 사례를 통해 다른 사람들이 배우기를 원하는 것이다.
비록 이런 사건이 일어나서 안타깝지만, 발생 사실을 비교적 세세하게 공개하여 교훈을 얻을 수 있도록 한
점이 맘에 든다. 다만, 해킹 사건 이후 즉각적으로 알려지지 않아 아쉽지만.... 만약 이런일이
우리나라 사이트에서 일어났다면 어땠을까 ? 숨기기에 급급했을까..아니면...


2010년 4월 13일 화요일

IPv4 주소 고갈 대비해야 한다. IPv6 전환 준비하고 있는가?

IPv6 는 IPv4에 이은 차세대 인터넷 프로토콜의 주소 표현방식이다. 기존 IPv4 가 32비트의
주소체계를 갖고 있었다면 IPv6는 128비트의 주소체계를 갖추고 있다.
지금 우리가 사용하는 192.168.0.1 이 IP 주소였다면 128비트는
2001:fecd:ba23:cd1f:dcb1:1010:9234:4088 와 같이 외우기 쉽지 않은 주소이다.

무엇보다 가장 큰 장점은 IP 주소의 길이가 128 비트로 늘어났기 때문에 폭발적으로
늘어나는 IP 사용을 충분히 감당할 만큼의 주소를 확보할 수 있다는 점이다. 컴퓨터 뿐만 아니라
가전제품 및 휴대폰에도 IP 를 할당할 수가 있다. IPv6 의 자세한 이야기는 나중에 하기로
하고, 이제 IPv4 주소가 얼마 남지 않았다는 점이다. 오래전부터 국내에서도 IPv6 시범사업등
다양한 사업을 진행해 왔고, 2008년 이후 대중화 , 2010년 후 IPv6 Only 망을 예상하기도 했었다.

하지만, 지금 어떠한가? IPv6 가 전개되고 있다는 것은 사용자들이 아직 느끼지 못하는 수준이다.
물론, 아직 이런 시급성을 느끼지 못할지도 모른다. 기업 내에서는 각 사용 PC 에 공인 IP 를 할당하는
것이 아니라 비공인 IP 를 사용해 NAT 를 통해 인터넷을 사용하고, 개인들이 사용하는 수 많은
공유기도 NAT 를 이용한다. 이렇게만 보면 아주 지금 당장 IPv6 로의 전환을 필요로 하지 않아 보인다.
IPv6 로의 전환을 준비하자니 시스템/네트워크 엔지니어들은 전환을 준비해야 되겠고, 담당자
입장에서 보면 괴로운일이 될 수 있을 것이다. 지금도 잘 쓰고 있는데 말이다. 구현하면서 기존 IPv4 망과의
접속을 위해서 터널링을 지원해야 할 수도 있고, 일부 소프트웨어는 IPv6 를 지원할 수 있도록 수정해야 하며
네트워크 장비들 또한 IPv6 를 지원해야 할 것이다. 하지만, 언제까지 IPv4 로 유지하기에는 한계에 도달할
것이다.

이유는, 세계 인터넷 할당 번호 관리기관인 IANA(Internet Assigned Numbers Authority)는 IPv4가 고갈되는 시기로 예

측되는 2011년 후반(9월로 예상)부터 IPv4의 신규 할당을 중지하고 IPv6로 전환될 것으로 예상하고 있다.
할당현황은 다음 주소를 참고한다:


내가 2006년 초 당시 IPv6 를 리서치 하는 과정에서 그 당시의 IPv4 주소 고갈시기는 IANA 는 2012년
5월 이었다. 이 자료는 2005년 11월 APNIC 에서 조사한 수치이었다. IP 주소 고갈은 더욱 빨라지고 있어
빨리 전환이 준비되어야 할 것이다. 물론, 2011년 부터 인터넷을 사용할 수 없다는 이야기는 아니다.
단지 IP 의 신규 할당이 중지되면 기업 입장에서는 새로운 서비스를 준비하는데 영향을 받을 것이고,
새로운 IPv6 로의 서비스 진입이 늦어질 것이다. 가트너는 IT EXPO 2009 에서 IPv6 도입, 서두를 것이
없다고 하였다. 이유는 IPv6 로의 이전이 가져오는 경제적인 효과가 아직 사람들을 움직이지 못하고 있다는
것이다.

[참고: IDG] http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=59929

어찌되었든, IPv4 주소 고갈은 점차 현실로 다가오고 있다. 방통위 또한 ISP 백본 통신망을 2011년까지 IPv6 전환
하겠다는 기사를 보았다. 오래전부터 IPv6 로의 전환이 빨라질 것이라고 하였지만, 계속 늦어지고 있는
이 현실이 2011년 주소 고갈 예상이 양치기 소년의 또 다른 거짓말로 들릴지도 모른다.

세계는 이미 변하고 있다. 스마트폰의 대중화, 가전제품의 인터넷 기능 도입등. 점차 인터넷과
연결되는 비중은 커지고 있다. IPv4 주소고갈 시점 등. 이제는 기업에서 미리 준비는 해야 될 시점이다.
네트워크 장비를 구매한다면 IPv6 지원이 가능한 제품을 선택한다든지, 일부 테스트망을 운영한다든지
급변하게 변하는 이 현실에서 IPv6 전환을 준비해야 하는 전략을 가지고 있어야 할 것이다.

이것이 어느순간 현실이 될지 모르기 때문이다.
아래 주소 개수를 생각해 보라. IPv6의 수 많은 주소는 또 다른 비즈니스 창출 기회를 만들어주는
가능성이기도 하다.

IPv4 = 4,294,967,296
IPv6 = 340,282,366,920,938,463,463,374,607,431,768,211,456

@Rigel

2010년 4월 8일 목요일

TCPReplay 를 통해 패킷을 재 전송하기

저장된 패킷파일을 재 전송하기 위한 방법으로 tcpreplay 를 소개한다. 이미 익히 알고
있는 분들도 많이 계시겠지만, 패킷을 재 전송할때 유용하게 사용될 수 있다. 왜?
패킷을 재전송하냐고 반문할 수도 있겠지만, 나름 사용할 때가 꽤 많다. 도입된 장비에
대해서 다양한 테스트를 수행할 수도 있고, IDS 패턴 시그너처를 작성하고 정상적으로
차단하는지의 유무를 테스트할 때도 쓰일 수 있다.

일단 다운로드를 다음의 주소에서 한다.

기본적인 사용법은 다음과 같다. -i 옵션을 통해 트래픽이 나갈 인터페이스를 지정하고
전송에 사용될 패킷 파일을 지정하면 된다.

# tcpreplay -i eth0 packet.pcap

패킷을 전송할때 속도도 정의할 수 있는 이때 사용되는 옵션은

--pps
--mbps
--topspeed
--multiplier

와 같다. 대충 옵션 이름만 봐도 추정은 될 것이다. PPS 로 지정하여 초당 몇개의
패킷을 전달 할 것인지, mpbs 로 메가 단위로 전송속도를 조절할지, 최대 가능한
속도인 --topspeed 로 할 지를 정할 수 있다.

- 최대 가능한 전송 속도로 전송하기
# tcpreplay --topspeed --intf1=eth0 sample.pcap
# tcpreplay -i eth0 --topspeed test.pcap
sending out eth0
processing file: test.pcap
Actual: 72 packets (21961 bytes) sent in 0.46 seconds
Rated: 4724827.9 bps, 36.05 Mbps/sec, 15490.53 pps

Statistics for network device: eth0
        Attempted packets:         72
        Successful packets:        72
        Failed packets:            0
        Retried packets (ENOBUFS): 0
        Retried packets (EAGAIN):  0

- 10Mbps 비율로 전송하기
# tcpreplay --mbps=10 --intf1=eth0 sample.pcap

- 원래 속도의 반 정도로 조절하여 보내기
# tcpreplay --multiplier=0.5 --intf1=eth0 sample.pcap

참고로, 가끔 속도 지정없이 패킷을 전송하는 경우 패킷파일이 작은데도 불구하고
꽤 오래 걸리는 경우가 있다. 이럴 경우에 --mbps=10000 과 같이 크게 지정하여
전송하면 바로 전송되는 경험도 있었다. 또는 --topspeed 를 이용해 보자.

또 다른 옵션으로 -l(--loop) 옵션이 있다. 캡쳐파일을 주어진 수 만큼 반복하는 것이다
아래 예는 sample.pcap 을 20번 반복해서 eth0 로 전송하게 되는 것이고, 만약
0 를 지정하면 무한루프를 돌게된다. 즉, Ctrl+C 로 중지하기 전 까지는 계속 동작한다.

# tcpreplay --loop=20 -i eth0 sample.pcap

속도가 얼마나 나오는지 테스트를 위하여 xxxx.pcap 을 10번 전송해 보았다.

# tcpreplay -i eth4 --topspeed --loop=10 xxxx.pcap
sending out eth4
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
processing file: xxxx.pcap
Actual: 1352310 packets (238093580 bytes) sent in 4.90 seconds
Rated: 48583705.8 bps, 370.66 Mbps/sec, 275942.89 pps

Statistics for network device: eth4
        Attempted packets:         1352310
        Successful packets:        1352310
        Failed packets:            0
        Retried packets (ENOBUFS): 0
        Retried packets (EAGAIN):  0

와, 나쁘지 않은 속도를 보여주고 있다. 초당 370Mbps 수준이다.
참고로 tcpreplay 홈페이지에서 리눅스 환경에서 속도를 높이기 위하여 다음과 같은
설정을 제시했다. 물론 사용하는 OS 마다 다 다르겠지만,

echo 524287 >/proc/sys/net/core/wmem_default
echo 524287 >/proc/sys/net/core/wmem_max
echo 524287 >/proc/sys/net/core/rmem_max
echo 524287 >/proc/sys/net/core/rmem_default

거의 10 배가까이 속도가 좋아졌다고 한다. 내 환경을 살펴보니 아래와 같았는데도,
초당 370 메가까지 나왔으니 참고하길 바란다. 사용커널은 2.6.26-2 이다.

# cat /proc/sys/net/core/wmem*
110592
131071
# cat /proc/sys/net/core/rmem*
110592
131071

2010년 4월 7일 수요일

윈도우에 루프백(Loopback)어뎁터 설치를 통한 패킷 캡쳐

루프백 어뎁터는 로컬 컴퓨터에서만 사용이 가능한 형태의 가상의 네트워크 디바이스이다.
요새는 네트워크 카드가 없는 경우는 없지만 내부에서 가상의 네트워크 용도로도
사용할 수 있고, 개발시에도 활용할 수 있을 것이다. 또, VirtualPC 와 같은 가상화 환경에서도
유용할 것이다. 예를 들어, 하나의 컴퓨터안에서 여러개의 가상머신을 사용한다면
가상머신이 루프백 어뎁터를 이용하도록 설정하여 컴퓨터 내의 가상머신 끼리만 통신을
하게되므로 네트워크 트래픽이 밖으로 흐르지 않는다.

다음은 윈도우 XP 환경에서 루프백 어뎁터를 설치하고 ipconfig 로 본 화면이다.
하드웨어 추가를 통해서 쉽게 설치가 가능하며, 10.0.0.200 으로 IP 설정한 상태이다.

Ethernet adapter Local Area Connection 5:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : Microsoft Loopback Adapter
        Physical Address. . . . . . . . . : 02-00-4C-4F-4F-XX
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 10.0.0.200
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :

자 설정한 10.0.0.200 에 Ping 을 해보면 Ping reply 가 온다.

C:\>ping 10.0.0.200

Pinging 10.0.0.200 with 32 bytes of data:

Reply from 10.0.0.200: bytes=32 time<1ms TTL=128
Reply from 10.0.0.200: bytes=32 time<1ms TTL=128
Reply from 10.0.0.200: bytes=32 time<1ms TTL=128
Reply from 10.0.0.200: bytes=32 time<1ms TTL=128

Ping statistics for 10.0.0.200:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

네트웍이 되니 와이어샤크 같은 트래픽 분석 프로그램으로 해당 인터페이스를 대상으로
패킷 캡쳐가 가능할 것이다. 하지만, 막상 와이어샤크로 루프백 인터페이스로 패킷 캡쳐를 해보면
10.0.0.200 으로 ping 하는 트래픽이 잡히지는 않는다. 왜일까?  윈도우의 와이어샤크에서
로컬 루프백 IP 는 캡쳐를 할 수가 없다.

그래도 기껏 설치한 루프백 IP 에서 패킷 캡쳐 화면은 보아야 하지 않겠는가? 간단히 사용할 수 있는
방법이 arp 를 이용하여 추가하는 것이다.

10.0.0.201 IP 로 사용하기로 하고 맥주소는 루프백 어뎁터의 맥주소로 등록한다.
C:\>arp -s 10.0.0.201 02-00-4c-4f-4f-XX

등록된 ARP 테이블을 살펴보면 아래와 같다.
C:\>arp -a

Interface: 10.0.0.200 --- 0x4
  Internet Address      Physical Address      Type
  10.0.0.201            02-00-4c-4f-4f-XX     static

자 이제 10.0.0.201 을 요청하게 되면 루프백 어뎁터 맥 주소로 가게 될 것이다.

핑을 해보니 아래와 같이 timed out 이 나온다. 당연하다. 임시적으로 확인을 위해서만
정적인 ARP 테이블을 추가한 것이기 때문이다.  일단 해당 트래픽이 루프백 어뎁터로
흘러 들어갔다.

C:\>ping 10.0.0.201

Pinging 10.0.0.201 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.

와이어샤크에서 확인해 보면 아래와 같이 ICMP 요청을 볼 수 있다.

4 10.765561 10.0.0.200 10.0.0.201 ICMP Echo (ping) request

Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0 ()
    Checksum: 0x445c [correct]
    Identifier: 0x0400
    Sequence number: 1280 (0x0500)
    Data (32 bytes)

여기서는 간단히 바로 트래픽 확인을 위해서 이런 방법을 소개하였지만, 루프백 어뎁터를
이용하여 가상의 네트워크 통신 환경을 구성할 수 있을 것이다.

마지막으로 각 운영체제에서 루프백 어뎁터를 설치하기 위한 주소를 적어보니
필요한 분들은 참고하시길 바란다.

- 윈도우 2003
- 윈도우 XP
- 윈도우 2000

[참고]
1. 루프백을 이용한 터널링을 이용해 안전한 파일 공유를 위한 방법 소개  
Securing Windows File Sharing with SSH
http://www.bitvise.com/file-sharing




2010년 4월 6일 화요일

중요한 패킷 파일 안전하게 삭제하기

중요한 패킷파일을 분석했다고 가정하자. 이때 작업이 끝난 후에는 어떻게 할 것인가?
아마 대부분의 경우는 Shift 를 누르고 삭제로 끝내고 말 것이다.

그런데 이렇게 지운다고 완전히 컴퓨터에서 사라진 것은 아니다.
특별한 방식으로 삭제하지 않는 한, 복구할 가능성은 남겨지기 때문이다. (삭제 복구 프로그램등을 이용하여)

이 특별한 방식이라는 것은 무엇인가? 사실 특별한 방식이라고 하기 보다는 해당 데이터를 계속 덮어쓰기 하여 지우는 방식이다. 물론, 이 덮어씌우는 방법에는 다양한 알고리즘이 존재하며, 알고리즘의 자세한 내용은 생략하겠다. 한가지 덧붙이자면 소개하고자 하는 프로그램에서 기본적으로 사용하는 삭제 알고리즘인
Gutmann 은 35개의 패턴을 사용하여 지우게된다. 35 개의 패턴중 5번부터 31번까지는 지정된 패턴 데이터를 이용하고 나머지는 랜덤한 데이터를 이용한다.

자! 서두가 길었는데, 소개하고자 하는 프로그램은 Eraser 라는 것이다. 아래 URL 에서 다운로드 받아
설치할 수 있다.


설치하고 나면 윈도우 탐색기에서 지우고자 하는 파일이나 폴더에서 오른쪽을 클릭하면 'Eraser' 라는 메뉴를 볼 수 있다. 클릭하면 선택한 파일을 안전하게 지울 수 있다. 프로그램의 메뉴에서 셋팅을 선택해 보면 지우는 방식도 몇 가지가 있는데, 기본적으로 Gutmann 이 지정되어 있다.

이걸로 지우면 완전삭제로 파일을 깨끗이 지울수가 있을 것이다. 물론 패킷 파일 뿐만 아니라 모든 파일을 대상으로 사용할 수 있다 :-)

[참고]
1. Erasure method : Gutmann

2010년 4월 1일 목요일

와이어샤크 1.2.7 릴리즈

와이어샤크의 최신버전인 1.2.7 버전이 릴리즈 되었습니다. 이번 버전에는 몇 가지 버그 픽스와
프로토콜 지원 업데이트등 마이너적인 업데이트 입니다. 이번 버전의 자세한 릴리즈는 아래 경로에서
확인할 수 있습니다.


업데이트 된 프로토콜은

BSSMAP, DMP, GSM SMS, LDSS, NCP, PN/IO, PPP, SIP, SNMP 입니다.