레이블이 오픈소스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 오픈소스인 게시물을 표시합니다. 모든 게시물 표시

2014년 11월 23일 일요일

실시간 120만개의 패킷분석 - OpenSOC 프로젝트

올해 들어서 블로그에 글 쓰기가 힘들어 졌는데, 오랜만에 포스팅을 해 보려고 합니다.  오늘의 주제는 오픈소스 기반의 시큐리티 분석 프레임웍인 OpenSOC 입니다. OpenSOC 는 여러 보안 문제의 이슈를 빅데이터라는 관점에서 접근해 볼 수 있어, 보안 침해 사고에 대한 조사, Anonmaly 탐지 등 이용범위는 사용방법에 따라 다양해 질 수 있습니다.  오픈소스 기반인 만큼 여러가지 오픈소스를 이용하고 있는데요 Storm, Kafka, Elasticsearch 와 같은 하둡의 에코시스템 MySQL 등을 사용하고 있습니다.  이를 통해 패킷캡쳐 인덱스, 저장, 데이터 스트리밍 처리, 배치 처리, 실시간 검색, 집계등을 이용할 수 있게 됩니다. 


프레임웍에서 제공하는 주요 기능은 아래와 같습니다.

  • Extensible spouts and parsers for attaching OpenSOC to monitor any telemetry source
  • Extensible enrichment framework for any telemetry stream
  • Anomaly detection and real-time rules-based alerts for any telemetry stream
  • Hadoop-backed storage for telemetry stream with a customizable retention time
  • Automated real-time indexin for telemetry streams backed by Elastic Search
  • Telemetry correlation and SQL query capability for data stored in Hadoop backed by Hive
  • ODBC/JDBC compatibility and integration with existing analytics tools

OpenSOC 를 사용하기 위해서 필요한 것은 다음과 같습니다.
  • 2 개의 네트워크 패킷 캡쳐 카드 (Napatech 사의 NT20E2-CAP 추천)
  • 아파치 Flume 1.4.0 +
  • 아파치 Kafka 0.8.1+
  • 아파치 Storm 0.9+
  • 아파치 하둡 2.X 
  • 아파치 하이브 12+ (13 권장)
  • 아파치 Hbase 0.94+
  • Elastic Search 1.1+
  • MySQL 5.6+
OpenSOC 컴포넌트는 크게 데이터처리를 위한 스트리밍 쪽과 실제 분석을 하기위한 UI 화면으로 나뉘어져 있습니다.  OpenSOC 를 구현하기 위해 테스트된 환경은 시스코에서 제공한 것으로 14개의 데이터 노드와 3개의 클러스트 제어 노드, 2개의 ESX 호스트, 라우터, 스위치등이 있습니다. 

과거에 제가 진행해 보았던 패킷 분석 프로젝트와 비슷한 개념이 되기도 하는데, 더욱 큰 관점에서 프레임웍이 만들어져 있다는 점에서 매력이 있습니다. 오픈소스로 공개되어 있는 만큼 사용도 자유롭고 실시간으로 120 만개의 패킷을 처리할 수 있다는 것은 성능면에서도 만족스러워 보입니다.  관련 프로젝트를 진행해 보신 분들은 아시겠지만 패킷분석 처리가 만만치는 않은 작업입니다. 제대로 구현하면 얻어낼 수 있는 데이터도 많지만 이 엄청난 패킷 데이터를 저장하고 처리하고 의미있는 데이터로 얻어내기까지는 상당히 많은 작업들이 필요합니다. 

이걸 오픈소스로 이용할 수 있다는 측면에서는 아주 매력적이죠. 물론, 다양한 오픈소스를 사용해야 하기 때문에 어느정도의 경험이 필요로 할듯 해 보입니다.  

더 상세한 정보는 다음 사이트에서 얻을 수 있습니다.


혹시 OpenSOC 로 구현을 진행하였거나 진행할 계획이 있으신 분들은 알려주세요~ 

//Rigel   



2011년 8월 9일 화요일

Ethereal 과 궁합이 맞는 오픈소스 패킷분석기 Packetzyer

오픈소스 패킷 분석 도구인 Packetyzer 를 소개한다. 사실 이 도구는 더 이상 업데이트가 되고 있지 않지만, 나름 깔끔한 인터페이스로 어느정도 사용하기에는 충분한것 같다. 내가 지금까지 많은 패킷 도구들을 소개해 오고 있지만, 아직도 소개할 패킷도구들이 너무나 많이 남아 있다. 자기한테 적당한 도구를 선택하는 것은 여러분들의 몫이므로, 이런것이 있다는 것만 알아두자.

일단 현재 5.0 버전이며, 이더리얼 0.99.00 과 winpcap 3.1 이 포함되어 있다. 이더리얼의 기능을 이용해 구현된 것이라 볼 수 있다. 현재 와이어샤크로 불리기 이전 버전인 이더리얼 이므로 기능적으로는 와이어샤크에 비하면 못 할 수 잇겠으나 처음 패킷 분석을 접하는 윈도우 사용자에게는 쉬운 인터페이스와 윈도우적인 느낌으로 더 쉽게 다가설 수 있지 않나 싶다.
(참고로, 현재 이더리얼은 와이어샤크로 계속 개발되고 있으며, Ethereal 자체는 개발이 중지된 상태이다)

프로그램은 다음 경로에서 다운로드 받아 설치하면 된다. 윈도우 기반이라 따로 설치하는데 어려움은 없다.

http://www.gotomanage.com/open_source_tools/packetyzer_thankyou

실행하고, 캡쳐를 시작하면 다음과 같은 형태의 화면을 볼 수 있다:


처음 사용하는 사용자라도 몇번 클릭해 보면 어렵지 않게 사용할 수 있으며, 과거 이더리얼이 가지고 있던 기능들을 포함하고 있다. 출력 필터, 캡쳐 필터, 다양한 프로토콜 분석 기능등이 이에 해당한다. 이 프로그램이 또 다른 특징은 패킷 수정/보내기 기능이 있다. Session 메뉴에 Send Packet... 기능이 있는데, 각 헤더를 수정하여, 전송하는 기능을 가지고 있다.

윈도우 기반의 패킷분석기에 관심 있다면, Packetyzer 소스를 살펴보는 것도 도움이 될 것이다.


[참고]
1. Packetyer
http://www.gotomanage.com/open_source_tools/packetyzer
2. Packetyer 소스파일 받을 수 있는 곳
http://sourceforge.net/projects/packetyzer/

2011년 6월 9일 목요일

와이어샤크 1.6.0 버전 공개 - 1.4.X 사용자 분들은 업데이트를 ~

와이어샤크 1.6.0 이 릴리즈 되었다. 그간 보았던 1.5.X 버전은 사라지고, 1.4.X 의 Stable 버전에서 1.6.X Stable 버전이 릴리즈 된 것이다. 이번 버전은 1.6.X 버전대의 첫 번째 릴리즈 이며, 앞으로 Stable 버전인 1.4 버전대를 대체하게 될 것이다.

일단 이번 버전에서는 그간 알려진 버그들이 픽스 되었고, 1.4 와 달리 다음과 같은 새로운 기능 추가 및 변화가 있다.

- 큰 파일(2기가 이상) 지원 기능이 향상
- text2pcap 과 같이 와이어샤크와 Tshark 에서 텍스트 덤프파일 Import
- SSL 세션 키 Export
- 패킷 리스트에서 컬럼 숨기기
- SMB 오브젝트 Export
- dftest, randpkt 맨 페이지 추가 (randpkt 는 패킷 인사이드에 소개되었던 적이 있다)
- 패킷 길이 표시가 기본 컬럼으로 설정
- 그래프 기본 저장 포맷이 PNG 방식으로 변경
- 이외 기타 등등

프로토콜도 새롭게 몇가지 추가 지원하고 있다.

[윈도우 32비트]
http://wiresharkdownloads.riverbed.com/wireshark/win32/wireshark-win32-1.6.0.exe
[윈도우 64 비트]
http://wiresharkdownloads.riverbed.com/wireshark/win64/wireshark-win64-1.6.0.exe

릴리즈 된 세부 정보는 다음 문서를 참고한다.

http://www.wireshark.org/docs/relnotes/wireshark-1.6.0.html

현재 개발버전은 1.6.0rc2 버전이다.

앞으로 패킷인사이드에서도 와이어샤크 기능은 1.6.X 버전에 맞춰서 소개될 것이다. 지금 이 포스팅을 보고 있는 사용자라면, 지금 1.6.0 으로 업데이트 하여 안정된 새로운 버전의 기능을 느껴보기 바란다. : )

2011년 1월 21일 금요일

데비안 6.0 Squeeze 2월 첫째주 경 공식 릴리즈 예정

좋아하는 리눅스 배포판 중에 하나인 데비안 6.0 릴리즈가  코 앞으로 다가온거 같습니다.
현재 6.0 RC1 이 나왔는데, 이번주말 중에 RC2 가 나올 예정이며 큰 문제가 발생되지 않는 한 2월 첫째주 정도에 공식 발표될 것이라고 합니다. 데비안 6.0 은 Squeeze 이름을 갖고 있습니다.

2010년 11월 27일 5.0 의 7번째 업데이트가 나온 이후로, 드디어 6.0 이 나옵니다.
이번 데비안 6.0 은 완벽한 프리 커널을 지향하고 있습니다. 커널 상에 non-free 코드는
다 제거되어 진짜 프리로서 태어나는 것이죠.

6.0 RC1 을 다운받으려고 하는데, 무진장 느리네요.
어여 정식 릴리즈 되어서, 미러링 되었으면 좋겠습니다. 새로 설치할 리눅스들은
Squeeze 로 설치하게 말이죠!

[참고]
1. Debian 6.0 Squeeze to be released with completely free Linux Kernel
http://www.debian.org/News/2010/20101215
2. 데비안 사이트
http://www.debian.org

2011년 1월 4일 화요일

패킷정보를 요약하여 통신내용을 한눈에 살펴보자!

패킷파일 안의 내용이 간단하면 분석가가 직접 눈으로 살피는 것 만으로도 어느정도 파악이 쉽게 된다. 그런데, 패킷파일이 수십메가 이상이 되어버리면 분석은 쉽지 않아진다. 더군다나, 아주 다양한 내용으로 까지 구성되어 있다면 더욱 힘들다.

그렇기 때문에 패킷분석기의 도움을 받는 것이다. 하지만, 때로는 간단히 대략 살펴보고 싶기도 하다. 이럴때 유용하게 사용할 수 있는 것이 있다. 패킷파일안에서의 통신과정을 대략 요약하여 정리해 보여주는 'nstreams' 라는 것이 있다. tcpdump 형태를 분석해 줄 수 있는 도구로 보면 된다. 일단, 다운로드는 다음의 경로에서 할 수 있다.

http://www.hsc.fr/ressources/outils/nstreams/

다운받은 후 컴파일은 아래와 같은 순서로 진행하면 된다.

# tar -zxvf nstream-1.0.0.tar.gz
# cd nstreams
# ./configure
# make
# make install

이외 APT 패키지 사용자는
# apt-get install nstreams 로 간단히 설치할 수 있다.

관련파일이 2가지가 있는데, 없어도 사용하는데는 문제없다. 다만, 본인의 네트워크를 정의하거나 또는 사용 서비스를 정의해 놓으면 출력 내용을 볼 때 편리한 점은 있다.

1) 서비스 정의
nstreams-services 라는 파일이 있다. 여기에 프로토콜의 이름 같은 것을 정의할 수 있는데 형태는 아래와 같다 :

 protocol_name:server_port(s)/{udp,tcp}:client_ports(s)
 또는
 protocol_name:type(s)/icmp:code(s)

제일 앞에 프로토콜의 이름이 온다. 그리고 서버의 포트 그리고 클라이언트 포트 정보가 오는데 대략 봐도 어떤 형태의 구성인지 쉽게 이해가 될 것이다.

# vi /etc/nstreams-services
telnet:23/tcp:any
bsd-passive-ftp:49152-65535/tcp:1024-65535
icmp-echo-request:8/icmp:0
bootps:67/udp:68

2) 네트워크 정보
네트워크의 영역을 정의해 놓을 수 있다.
internal-network:192.168.1.0/24
test-network:212.198.0.0/16
internet:0.0.0.0/0

정의해 놓으면 화면 출력시 좀더 이해하기 쉬워지는데, 이것은 아래 출력 예제를 보는
것으로 쉽게 이해가 될 것이다.

# nstreams -f test.pcap
dns traffic between 192.168.0.240 and 168.126.63.1
http traffic between 192.168.0.240 and 72.14.213.99
http traffic between 192.168.0.240 and 74.125.127.102
http traffic between 192.168.0.240 and 72.14.213.103
http traffic between 192.168.0.240 and 72.14.213.100

아래서는 해당 네트워크 대역이 정의해 놓은 것으로 치환되어 나타난다.

# nstreams -n /etc/nstreams/nstreams-networks -f test.pcap
dns traffic between private-network and internet
http traffic between private-network and internet

또 파일 외에 -l 로 인터페이스를 지정하면 실시간으로 볼 수도 있다. 
# nstreams -l eth1 
http traffic between private-network and internet
http traffic between 192.168.15.11 and 219.94.214.228
http traffic between 192.168.15.11 and 74.125.53.132
http traffic between 192.168.15.11 and 210.171.226.45
icmp-unreach traffic between 192.168.15.11 and 168.126.63.1
http traffic between 192.168.15.11 and 74.125.127.113
http traffic between 192.168.15.11 and 128.31.0.36
http traffic between 192.168.15.11 and 35.9.37.225
telnet traffic between 192.168.15.11 and 74.125.127.105
icmp-unreach traffic between 192.168.15.11 and 168.126.63.2
http traffic between 192.168.15.11 and 86.59.118.153
http traffic between 192.168.15.10 and 72.14.213.191


출력되는 형태가 간단하여 분석할 패킷파일의 용량이 큰 경우에는 대략적인 형태를
파악하는데 도움이 될 것이다. 또 오픈소스 이므로, 본인이 원하는 형태로도 수정하여
사용가능하다. 예를 들어, 출력되는 부분을 약간 바꿔보고자 한다.

그럼, output.c 소스파일을 열어 살펴보자. 목적지 포트가 1024 인 경우에 조금
다르게 출력해 본다면, printf 로 출력되는 부분을 살짝 변경해 더 쉽게 볼 수 있게 한다든지
원하는 형태로 할 수 있다.

void
standard_output(output, status)
 struct output * output;
 int status;
{
 if(status)return;
 if(!strcmp(output->serv_name, "unknown"))
 {
  if(!opt_u)
  {
    if(output->dport > 1024) {
  printf("[* Suspicious > 1024] Unknown %s traffic between %s:%d and %s:%d  \n",
    output->asc_proto,
        output->src, output->sport,
    output->dst, output->dport);
    } else {
  printf("Unknown %s traffic between %s:%d and %s:%d\n",
    output->asc_proto,
        output->src, output->sport,
    output->dst, output->dport);
    }
  }
 }

오픈소스이기 때문에 내 상황에 맞게 적절히 수정하여 사용한다면 내 입맛에 맞는
최고의 분석도구가 될 것이다.  이게 바로 오픈소스의 맛 아닐까?