2012년 4월 26일 목요일

최근 증가하는 국내 피싱(Phishing) 사이트 주의!


최근 국내에서 피싱 사이트가 많이 나타나고 있습니다. 그러다 몇일 전 휴대폰으로 문자 하나가 날라왔습니다.

번호도 국민은행이 맞습니다. (긴급통보) 로 보안승급 후 이용해 달라는 메시지와 함께 링크가 하나 걸려 있습니다.

해당 링크는 이미 삭제되어서 아래 그림과 같이 피싱 사이트로 접속은 되지 않습니다. 아래 화면을 보면 알겠지만, 똑같이 생겼죠. 앞으로도 이런 형태가 계속 나타날것 같은데 여러분들은 속지 마시고 그냥 무시하시거나 또는 신고해 주세요.

다음날 날라온 '국민은행 사칭문자 주의!' 는 진짜 국민은행에서 보낸 것입니다. :-)

모두들 피싱 조심하시기 바랍니다.

2012년 4월 23일 월요일

윈도우7에서 UNIX 기반의 환경을 만들어보자.

윈도우에서 유닉스와 같은 환경을 이용하고자 할 경우 많이 쓰이는 것으로 Cygwin 이 있다. 하지만, 윈도우 7에서도 이와 같은 기능을 제공해 주는 것이 있다. 윈도우 기능을 살펴보다가 보았는데, 나름 편리한것 같아 공유해 본다. 제어판->프로그램 에 보면 "Windows 기능 사용/사용 안 함" 이 있다.


클릭해 보면 "UNIX 기반 응용 프로그램용 하위 시스템" 이라는 것이 보인다. 이것을 체크하고 확인을 누르면 윈도우 메뉴에 다음과 같이 생긴다.


그리고, Download Utilities for Subsystem for UNIX-based Applications 를 클릭한다. 아래 그림과 같이 화면이 나타나게 되고, 다운로드를 하면 된다.


해당 프로그램은 다음과 같은 컴포넌트로 구성되어 있다.

- Base Utilities
- SVR-5 Utilities
- Base SDK
- GNU SDK
- GNU Utilities
- UNIX Perl
- Visual Studio Debugger Add-in

다운로드 받은 프로그램을 실행하면 압축을 풀 위치를 지정하고, 다 풀리게 되면 셋업파일이 실행된다. 기본적으로는 다음의 경로에 설치되게 되고,

C:\Windows\SUA

설치할 컴포넌트를 설정할 수 있다. 기본으로 설정하거나 또는 사용자가 지정할 수 있다.
Base SDK 에는 헤더, 라이브러리, 유틸리티 들이 포함되어 있고, GNU Utilities 에는 vi,find,gzip,gunzip,diff,bc 와 같은 GNU 의 대표적인 유틸리티들이 포함되어 있다. 컴파일을 하고자 한다면 gcc,g++ 등이 포함되어 있는 GNU SDK 를 설치하여야 하고, Perl 을 선택하면 펄도 설치할 수 있다. 설치되는 총 용량은 대략 500MB 이내이다.

설치를 끝내고 해당 메뉴를 다시 보면, C Shell 과 Korn Shell 이 보인다. 둘 중 원하는 것을 선택하고 실행하면 여러분이 원하는 유닉스 콘솔 화면이 나타난다. 나의 경우 예전에는 C 쉘을 즐겨쓰다 Korn 쉘을 더 즐겨 썼는데 지금은 주요하게 쓰는 것이 Bash 쉘이다.

어찌되었든 기본적인 GNU 유틸리티 실행이 가능하니 유닉스 도구가 익숙한 분들에게는 유용한 기능이 아닐까 한다.



$ df -k
Filesystem           1k-blocks      Used Available Capacity Type  Mounted on
//HarddiskVolume1     58613120  55505604   3107516    95%   ntfs  /dev/fs/C
//HarddiskVolume4     61440560  60736444    704116    99%   ntfs  /dev/fs/D
//HarddiskVolume5     40957716  33589816   7367900    82%   ntfs  /dev/fs/E



$ gcc -v
Reading specs from /opt/gcc.3.3/lib/gcc-lib/i586-pc-interix3/3.3/specs
Configured with:  : (reconfigured)  : (reconfigured) /dev/fs/E/gnu2.intel/egcs.s
ource//configure --verbose --prefix=/opt/gcc.3.3 --disable-shared --with-stabs -
-enable-nls --with-local-prefix=/opt/gcc.3.3 --with-gnu-as --with-gnu-ld --enabl
e-targets=i586-pc-interix3 --enable-threads=posix
Thread model: posix
gcc version 3.3


패킷 데이터를 분석시에도 유용하게 사용될 수 있는 부분이 있을 것이다.

2012년 4월 20일 금요일

Ethtool 을 통해 네트워크 카드(NIC) 정보 확인 또는 설정하기

패킷과 밀접한 관련이 있는 것이 네트워크 이더넷 카드이다. 오늘은 이더넷 디바이스에 대한 정보를 살펴볼까 한다. 네트워크 디바이스 드라이버와 하드웨어 셋팅을 보거나 설정할 수 있는 'ethtool' 을 통해서 말이다.
우리가 흔히 이더넷 정보를 확인할 때 대표적인 도구가 ifconfig 다. ifconfig 를 통해 링크상태, IP 주소, 맥 주소, 통신 상태 현황등을 살펴볼 수 있다. ethtool 은 이보다 더 많은 부분을 살펴볼 수 있고, 설정도 가능하다.

기본적으로 사용방법은

ethtool [옵션] [ethX] [파라미터]  와 같이 사용할 수 있다.

다음은 기본 정보를 살펴본 것으로 지원되는 링크 모드와 속도, Duplex 상태 등이 나온다.

[이미지 출처] 구글 이미지 (검색어: ethernet card)

# ethtool eth0
Settings for eth0:
 Supported ports: [ TP ]
 Supported link modes:   10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Full
 Advertised pause frame use: No
 Advertised auto-negotiation: Yes
 Speed: 1000Mb/s
 Duplex: Full
 Port: Twisted Pair
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: on
 MDI-X: Unknown
 Supports Wake-on: umbg
 Wake-on: d
 Current message level: 0x00000007 (7)
          drv probe link
 Link detected: yes
일목요연하게 이더넷 인터페이스에 대한 정보를 한눈에 보여준다. 자, 그럼 몇 가지 주요 옵션들에 대해서 알아보도록 하겠다. -s 옵션은 속도, Duplex 등의 값을 변경할 수 있다. 아래 예는 Auto-negotiation 기능을 Off 하는 것이다.

# ethtool -s eth0 autoneg off
이외 다음과 같은 옵션들이 있으니 설정에 참고하면 된다.

ethtool -s ethX speed N [duplex half|full] [port tp|aui|bnc|mii]
              [autoneg on|off] [advertise N] [phyad N] [xcvr internal|external]
              [wol p|u|m|b|a|g|s|d...]  [sopass xx:yy:zz:aa:bb:cc] [msglvl N |
              msglvl type on|off ...]

그럼 위 예를 참고하여 Speed 및 Duplex 를 조정하기 위해서는 다음과 같이 사용하면 된다:

# ethtool -s eth0 autoneg off speed 100 duplex half

참고로 e1000 드라이버를 사용하고 있는데, 설정이 제대로 반영되지 않았다. 이것은 드라이버의 특성이 있는것 같고 자세히 살펴보지는 않았지만 드라이버의 일부 패치가 필요할 것 같다. 다른 컴퓨터에서 사용하고 있는 r8169 드라이버에서는 변경이 잘 이뤄졌다. 사용하는 네트워크 인터페이스에 따라 차이가 있을 수 있으므로 이점은 참고하길 바란다.

ethtool 외에 modprobe 로 e1000 드라이버에 대한 옵션을 아래와 같은 형태로 설정할 수 가 있다.

modprobe e1000 [<option>=<VAL1>,<VAL2>,...]

다음은 Duplex 를 0 으로 설정한 예이다. 
# modprobe e1000 Duplex=0  (0=auto-negotiate, 1=half, 2=full)
본인이 사용하는 하드웨어가 각자 다르기 때문에 적절한 방법으로 사용하면 될 것이다.

다음은 r8169 를 사용하는 곳에서 변경을 해 본 것이다.


# ethtool -s eth0 autoneg off speed 100 duplex half
# ethtool eth0
Settings for eth0:
 Supported ports: [ TP MII ]
 Supported link modes:   10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Half 1000baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  Not reported
 Advertised pause frame use: No
 Advertised auto-negotiation: No
 Speed: 100Mb/s
 Duplex: Half
 Port: MII
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: off
 Supports Wake-on: pumbg
 Wake-on: g
 Current message level: 0x00000033 (51)
          drv probe ifdown ifup
 Link detected: yes

-i 는 드라이버에 대한 정보를 보여주는 것이다. e1000 드라이버를 사용하고 있고, eeprom 접근이 가능한지 여부등이 나온다.

# ethtool -i eth0
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: N/A
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes

-S 는 인터페이스 통계 정보를 보여준다. rx,tx 의 패킷 전송 개수, 바이트 정보, 브로드캐스팅 정보들이다. 대문자 S 를 사용했다는 점을 주의하자. 소문자 s 는 설정 할때 사용되는 옵션이다.

# ethtool -S eth0
NIC statistics:
     rx_packets: 10
     tx_packets: 29
     rx_bytes: 2145
     tx_bytes: 4100
     rx_broadcast: 0
     tx_broadcast: 3
     rx_multicast: 0
     tx_multicast: 18
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
-a 는 Pause 파라미터에 대한 정보를 보여준다. Auto Negotiation 정보를 좀더 상세히 보여준다고 보면 된다.
# ethtool -a eth0
Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: off
-p 는 어뎁터에서 어떤 포트가 내가 찾고자 하는 것인지 인지할 수 있도록 알려준다. 예를 들어, 어뎁터가 4개의 포트를 가지고 있다고 하자. 여기서 eth3 번이 어떤 포트인지 알고 싶을때 LED 를 깜빡 거리게 하여 알려줄 수 있는 것이다.
# ethtool -p eth3
-k  옵션은 네트워크 디바이스의 Offload 정보를 보여준다. 이 Offload 는 이더넷 카드에서 TOE 기능을 지원하게 되면 사용될 수 있는 기능으로, 여기서는 이렇게 설정 정보를 보여주는 기능이 있다는 정도에서만 설명하고 다음번 포스팅 때 Offload engine 에 대해서 다시 설명하도록 하겠다.
# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: off

ethtool 외에 lshw 를 이용해 network 관련한 정보를 확인할 수도 있다.
# lshw -C network
  *-network               
       description: Ethernet interface
       product: 82540EM Gigabit Ethernet Controller
       vendor: Intel Corporation
       physical id: 3
       bus info: pci@0000:00:03.0
       logical name: eth0
       version: 02
       serial: 08:00[deleted]:d0
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 66MHz
       capabilities: pm pcix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full firmware=N/A ip=10.0.2.15 latency=64 link=yes mingnt=255 multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:10 memory:f0000000-f001ffff ioport:d010(size=8) 
여기서는 일반적인 방법을 설명한 것이므로, 여러분들 환경에 맞는 방법으로 이더넷 카드의 정보를 확인해 보거나 또는 설정할 수 있다. ethtool 에 대한 더 자세한 정보는 MAN 페이지를 참고하길 바란다.

2012년 4월 17일 화요일

네트워크 포렌식 NetworkMiner 1.3 업데이트

네트워크 포렌식 도구인 NetworkMiner 가 1.3 으로 업데이트 되었다.


이번에 새롭게 추가된 기능으로는 다음과 같다:

  • Extraction of user names from HTTP Digest Authentication (RFC 2617), such as those found in US Cyber Challenge “Cyber Quest February 2012”.
  • HTTP headers are shown on the Parameters tab (including common headers like “Host” and “User-Agent” as well as rare ones).
  • HTTP X headers are shown for hosts under the “Host Details” > “Extra Details” node. These X headers include “x-up-calling-line-id” and “HTTP_X_UP_CALLING_LINE_ID”, which can be used to identify the phone number of the mobile device used to access a web page. This type of information leakage can be detected with Collin Mulliner's MNO Privacy Checker.
  • Support for the Null / Loopback link layer packets that are written when sniffing localhost on BSD operating systems.
  • Ability to select a custom cleartext dictionary file for the "Cleartext" tab. This feature can be used in order to look for text in a specific language.
  • Files with “.raw” extension are now treated as pcap files since this is the extension used by Sguil (hat tip to Doug Burks for this idea).
  • The alert window about WinPcap not being installed has been removed

프로페셔날 버전에서는 오프라인에서 후이즈 조회를 할 수 있는 기능이 추가 되었다고 한다.

2012년 4월 9일 월요일

2012년 6월 6일, 월드 IPv6 런치 (World IPv6 Launch)


일전에 블로그에서 월드 IPv6 데이를 통한 글로벌 IPv6 사전 테스트를 소개한 적이 있다. 2011년 6월8일 이었고 구글, 페이스북, 야후 등이 메이저로 참여하여 24시간동안 IPv6 연동 테스트를 진행하였다. 이제 IPv6 가 실제로 서비스에 반영하기 위한 시간이 다가오고 있다. 바로 2012년 6월 6일에 주요 웹 사이트 및 ISP(Internet Service Provider) 업체, 벤더들이 실질적으로 IPv6 서비스를 반영한다. 사실 아직까지도 IPv6 를 현실적으로 느끼지는 못하고 있고, 일반 사용자 입장에서는 더욱 그러하다. 하지만, 6월6일 런치 후에는 IPv6 로의 행보가 더욱 빨라지지 않을까 생각한다.

ISOC(Internet Society)는 2012년5월 30일까지 등록을 받고 있으며, 다음 경로에서 참여 업체를 알 수 있다.

http://www.worldipv6launch.org/participants/

아쉽게도 한국업체는 보이지 않는것 같다. 이에 반해 일본은 참여가 많은것 같고, 자료 또한 일본어로도 제공하고 있다. 항상 느끼는 것이지만, 이런 국제적인 행사나 기타 커뮤니티 활동에서 보면 한국은 참여가 상당히 저조한것 같아 아쉬움이 남는 부분이다.

[참고]
1. 월드 IPv6 런치 공식사이트
http://www.worldipv6launch.org
2. 월드 IPv6 데이(World IPv6 Day)를 통한 글로벌 IPv6 사전 테스트
http://www.packetinside.com/2011/04/ipv6-world-ipv6-day-ipv6.html
3. 패킷인사이드 IPv6 관련 글
http://www.packetinside.com/search/label/IPv6

2012년 4월 4일 수요일

Gnuplot 을 이용한 패킷 데이터 그래프 생성

 패킷 데이터가 많은 경우에는 텍스트 형태로만 확인하는 것이 어려워진다. 이럴 때 유용하게 사용될 수 있는 것이 비주얼한 방법을 사용하는 것이다. 가장 일반적인 것이 그래프 기능이며, 많이 사용되는 와이어샤크에도 간단한 그래프 기능이 있다.  이미  블로그에서도 와이어샤크에서 데이터를 CSV 로 추출하여 엑셀을 이용하여 만드는 방법을 소개하기도 하였다.

앞으로 다양하게 그래프를 만들어보기 위한 방법을 소개해 볼 것인데 그 중에 하나로, Gnuplot 을 살펴보려고 한다. Gnuplot 은 많은 플랫폼에서 이미 사용가능하도록 포팅되어 있으며 크게 2가지 모드로 사용이 가능하다. gnuplot 커맨드 프롬프트를 통해서 인터렉티브하게 그래프를 생성할 수 있는 방법과  파일에서 커맨드를 읽어들여 사용할 수 있는 배치모드가 있다.

우선,  패킷 데이터를 수집한다.

$ tcpdump -i eth0 -w output.pcap

수집된 패킷데이터에서 80 번포트를 대상으로 필터링하여 아래와 같은 출력형태로 tcp_80.txt 파일로 저장한다. (-tttt 옵션으로 날짜 출력을 조정하였다)

$ tcpdump -r output.pcap -nq -tttt 'tcp port 80' > tcp_80.txt

2012-04-02 09:46:04.382760 IP 192.168.10.53.80 > 192.168.10.40.39026: tcp 0
2012-04-02 09:46:07.361469 IP 192.168.10.40.59746 > 211.115.x.x.80: tcp 0
2012-04-02 09:46:07.370499 IP 211.115.x.x.80 > 192.168.10.40.59746: tcp 0
2012-04-02 09:46:07.489464 IP 192.168.10.40.42280 > x.x.206.100.80: tcp 0
2012-04-02 09:46:17.953463 IP 192.168.10.40.45101 > 199.7.x.x.80: tcp 0

이 데이터에서 cut 명령어를 통해 날짜 부분만을 잘라내고 정렬을 하여 uniq 명령어를 통해 카운트를 계산한다. 그리고 출력된 데이터에서 awk 를 통해 두번째 값과 첫번째 값을 출력하여 pps.txt 파일에 저장한다.

$ cut -c 12-21 tcp_80.txt | sort | uniq -c | awk '{print $2 " " $1}' > pps.txt

09:39:25.9 1
09:39:26.5 1
09:39:26.6 1
09:39:26.7 13
09:39:26.8 48
09:39:26.9 20
09:39:27.0 8
09:39:27.1 1
09:39:27.2 2
09:39:27.3 69
09:39:27.4 10
09:39:27.5 39
09:39:27.6 66
09:39:27.7 68
09:39:27.8 46
09:39:27.9 23
09:39:28.0 4
09:39:28.2 4
09:39:28.4 1
09:39:28.6 2

위와 같은 형태로 시간과 카운트 값이 저장된다. 바로 이 데이터가 gnuplot 으로 이용되는 것이다. 여기서는 간단한 예제로 초당 패킷카운트를 얻기 위해 사용된 것이고, 만들어내고자 하는 그래프 형태에 따라 다양하게 만들 수 있다.
gnuplot 을 실행하면 명령어를 입력하여 사용할 수 있으며, 아래 예제를 보는 것만으로도 대략적인 사용방법이 이해될 것이다.

$gnuplot
gnuplot> set title "TCP Port 80 packets/sec"
gnuplot> set xdata time
gnuplot> set xlabel "Time"
gnuplot> set ylabel "per Second"
gnuplot> set timefmt "%H:%M:%S"
gnuplot> set format x "%H:%M:%S"
gnuplot> set datafile separator " "
gnuplot> set style line 2 linecolor rgb "#00ff00" lw 1
gnuplot> plot 'pps.txt' using 1:2 title "packets" with line ls 1

그래프의 타이틀을 정해주고  x, y 축에 각각 사용할 레이블 정보를 지정해 준다. x 축은 시간이 사용되는데 시간 포맷을 지정해 주었다. 데이터파일은 공백으로 구분되어 있고, 라인스타일은 2번으로 정의하였다. 그리고 plot 명령어로 앞서 만든  pps.txt 데이터의 첫번째 두번째 데이터를 사용한다고 지정하였다. plot 명령어를 실행하면 바로 아래와 같은 그래프 정보를 얻을수 가 있다.



그래프를 통해 큰 변화가 보이는 부분을 쉽게 볼 수가 있다. 여기서는 간단히 PPS 기준으로 출력하였지만, 여러분들이 얻고자 하는 데이터 형태에 따라서 만들어 내는 기본 데이터가 달라진다. 내가 만들어내는 그래프를 통해서 무엇을 얻고자 하는가에 따라서 앞서 만들어내는 기본 데이터도 그것에 맞게 만들어내야 하는 것이다.

앞서 Gnuplot 은 두가지 모드가 있다고 하였는데, 나머지 하나는 배치모드로 사용되는 명령어는 동일하며 다만 파일로 만들어 연속적으로 배치작업 형태와 같이 실행되도록 하는 것이 있다.

에를 들어, graph_pps.plot 이라는 파일에 다음과 같은 내용을 정의한다.

set title "TCP Port 80 packets/sec"
set terminal png
set xdata time
set xlabel "Time"
set ylabel "per Second"
set timefmt "%H:%M:%S"
set format x "%H:%M:%S"
set datafile separator " "
set style line 1 linecolor rgb "#000000" lw 1

plot 'pps.txt' using 1:2 title "packets" with line ls 1

set output "packets_count.png"

그리고 gnuplot 에서 이 파일을 지정해 주기만 하면된다.

$ gnuplot graph_pps.plot

실행하게 되면 packets_count.png 파일이 만들어져 있을 것이다. 앞선 것과의 차이점은 output 으로 만들어질 것을 정의했다는 것이 다르다.

어떻게 보면 CSV 형태로 데이터를 뽑아내서 GUI 환경을 통해 만들어내는 것이 더 쉬울수도 있지만 그것은 여러분의 선택에 달려있다. 한가지 방법보다는 여러가지의 방법을 알고서 사용하는 것이 때에 따라서는 유용하기 때문이다.
이번에는 기본적인 그래프 형태만을 출력해 보았지만, 필자가 더 다양한 형태로 만들어 보게되면 다시 한번 공유해 보도록 하겠다. Gnuplot 이 익숙하지는 않다보니 더 공부가 필요할 것 같다.
:-)
그래프는 단지 이쁘게 만들어내기 위한 것이 아니라, 수 많은 데이터에서 어떻게 하면 빠르고 그리고  의미있는 데이터를 찾아낼 수 있는 가에 뜻을 두어야 한다. 패킷분석에서 비주얼을 이용하는 것도 바로 이런 이유가 있기 때문이다.