몇일전에 안랩 보안 콘테스트를 소개해 드렸는데, 혹시 이번 안랩코어나 웨이브 행사에 오시는 분 계신가요? 작년에 코어에서 발표를 했었는데, 올해는 웨이브 오프라인 행사에서 네트워크 문제풀이를 진행합니다.
시간은 13:40 - 14:20 이고요, 네트워크 문제 3 개를 시연을 통해 소개해 드리고자 합니다. 2개 문제는 재미있는 요소들을 넣어서 만들어 진 것이고요, 나머지 1개는 해킹사고 때 많이 이용되는 기법을 담았습니다. 문제 설명이 끝나고서도 별도의 테이블을 마련하여 문제에 대해 논의하거나 또는 자유롭게 이야기 할 수 있는 공간도 있을 예정입니다. 오시면 놀러오세요 :-)
일시 : 2012년 9월 20일(목) 12:00 - 17:50
장소 : 코엑스 인터컨티넨탈 호텔 다이아몬드홀 (B1F)
12:00 ~ 13:00 Registration & Networking
13:00 ~ 13:30 Opening Keynote '안랩의 보안전문가 양성 마스터 플랜' – 김홍선 대표이사
13:30 ~ 13:40 온라인 콘테스트 진행결과 보고 – ASEC이호웅 센터장
13:40 ~ 14:20 Network 문제풀이
14:20 ~ 14:40 Break time
14:40 ~ 15:20 Digital Forensics 문제 풀이
15:20 ~ 16:00 Vulnerability 문제 풀이
16:00 ~ 16:20 Break time
16:20 ~ 17:00 Mobile 문제 풀이
17:00 ~ 17:40 Binary 문제 풀이
17:40 ~17:50 Closing
행사 홈페이지 : http://wave.ahnlabcore.co.kr/tutorial.php
2012년 9월 18일 화요일
2012년 9월 4일 화요일
보안 콘테스트 참가 어떠세요? 안랩 시큐리티 웨이브 2012
안랩에서 진행하는 해킹대회인 보안콘테스트가 있습니다. 작년에 이어 올해가 두 번째 인데, 너무 늦게 소개를 해 드리네요. 참가등록은 이번주 목요일 24:00 까지이고, 9월7일 밤부터 총 20시간에 걸쳐 대회가 이뤄집니다.IT 보안에 관심있는 분은 누구나 참여 가능하며 일정 레벨에 도달하시면 보안인증서와 소정의 기념품을 드립니다.
http://wave.ahnlabcore.co.kr/main.php (WAVE 2012 구경가기)
네트워크 관련한 문제도 있으니 관심있으신 분은 신청해 보세요.
9월20일(목) 오프라인 행사가 있을 예정이며 이때 문제풀이등이 있습니다.
그때 참가하시면 행사장에서 저를 보실 수도 있겠네요 ^^
차 라도 한잔 하시죠. :-)
/Rigel
P.S 웨이브 문제 설명 오프라인 행사는 이번 금요일 대회가 열리는 시점에 등록 가능하다고 하니, 참가하실 분들은 잊지 마세요! 선착순 350 명 무료입니다.~
2011년 10월 31일 월요일
안랩코어 '네트워크 포렌식' 강연 요약
안녕하세요,안랩코어에서 발표한 '개발자도 알아야 할 네트워크 포렌식' 의 사용한 명령어들에 대해서 정리해 드리기로 하였습니다. 시연때 보여드렸던 명령어와 시간이 부족하여 소개해 드리고 싶었지만 하지 못했던 내용도 몇가지 추가하여 요약해 보고자 합니다.
간단히 사용명령어 들에 대해서 나열해 드리고, 추가적인 세부 설명이 필요한건
따로 주제로 빼서 다시 언급해 드리고자 합니다. 대부분의 많은 내용들은
이미 블로그에 포스팅 되어 있으므로 자세한 것은 블로그 내용을 참고해 보시면 됩니다.
일단, 초반에 보여드렸던 안드로이드 폰에서의 패킷덤프 잘 보이지 않았죠?
이것은 다음 링크를 보시면, 안드로이드 관련한 주제로 살펴볼 수 있습니다.
http://www.packetinside.com/search/label/android
TCP Connection Tunnel using ICMP 부분은 패킷 덤프만을 잠깐 보여드렸는데,
ptunnel 이라는 프로그램을 통해서 캡쳐한 것입니다. 이것은 추후 다시 방법을
세부적으로 소개해 드릴 예정입니다.
회사에서 운영중인 '패킷센터' 에 대해서도 더 보여드리고 싶었지만, 이것은
나중에 기회가 되면 더 소개해 드릴 시간이 있겠죠? 보관중인 패킷만 해도
국내에서 최대가 아닐까요? ^^ 이런 데이터를 통해 다양한 리서치를 진행하고 있습니다.
수집된 패킷파일에서 100기가 패킷 파일을 잠깐 언급해 드렸는데, 다음 포스팅을 참고해 보세요.
100 기가 가 넘는 패킷 파일이라고 ?
다양한 도구가 나열되어 있는 페이지에서는,
많은 것을 소개해 드리고 싶었지만 여건상 와이어샤크 정도만 소개해 드렸습니다.
일단 블로그에서 검색해 보셔도 많은 도구가 이미 언급되어 있는데,
몇 가지만 보면 아래와 같습니다.
[1] IPLocation 을 이용한 위치 추적
# ruby1.8 iploc.rb -r test.pcap
IP 주소의 위치정보를 활용하여 멋진 그래프 만들기
[2] Wireshark 기능 일부 소개
GeoIP 를 이용한 위치 정보 지정은 다음 블로그를 참고하면 됩니다.
와이어샤크에서 위치정보 이용하기 - 접속국가를 쉽게 알 수 있다면...
이외 HTTP 를 통한 데이터 오브젝트를 쉽게 추출하기 위한 방법은
메뉴에서 File->Export->Objects->HTTP 를 선택하면 됩니다.
[3] Tshark 기능 소개
블로그에서는 세부적으로 많이 다루지 않은 것인데요, 조만간 따로 언급해 드리겠습니다.
다량의 패킷파일을 포렌식 한다는 측면에서 보면 Tshark 가 상당히 유용하게 이용될 수 있습니다.
커맨드 기반으로 실행될 수 있으므로, 원하는 데이터만 쉽게 추출하여
스크립트화 시키면 다량의 패킷파일을 대상으로 포렌식이 쉬워집니다. GUI 상에서 할 수 있는
대부분의 많은 것들을 커맨드 기반으로 해서 얻을 수 있다는 점이 큰 매력입니다.
몇 가지 사용예를 언급해 봅니다.
# tshark -V -r test.pcap
# tshark -r test.pcap -e ip.src -e ip.dst -Tfields -E separator=,
IP 요청 주소와 DNS 쿼리 네임을 출력하는 것입니다.
# tshark -r test.pcap -e ip.src -e dns.qry.name -E separator=";" -Tfields dns
192.168.0.240;www.google.co.kr
168.126.63.1;www.google.co.kr
.
.
패킷 파일에서 HTTP TOP URL 을 뽑아내는 것입니다.
# tshark -r test.pcap -R http.request -T fields -e http.host -e http.request.uri | sed -e 's/?.*$//' | sed -e 's#^
\(.*\)\t\(.*\)$#http://\1\2#' | sort | uniq -c | sort -rn | head
# tshark -r test.pcap -Tfields -e ip.src -e http.user_agent -R "http.user_agent"
# tshark -r test.pcap -q -z ip_hosts,tree
===================================================================
IP Addresses value rate percent
-------------------------------------------------------------------
IP Addresses 134 0.043431
192.168.0.240 134 0.043431 100.00%
168.126.63.1 16 0.005186 11.94%
72.14.213.99 55 0.017826 41.04%
74.125.127.102 7 0.002269 5.22%
72.14.213.103 32 0.010372 23.88%
72.14.213.100 24 0.007779 17.91%
===================================================================
# tshark -r test.pcap -q -z conv,tcp
[4] bittwist
패킷파일 편집 및 생성으로 아주 유용한 도구 입니다.
- bittwist : PCAP 기반의 패킷 생성기
- bittwistb : PCAP 기반의 이더넷 브릿지
- bittwiste : PCAP 파일 에디터
test.pcap 데이터를 dummy0 인터페이스로 전송시킨 것입니다.
bittwist -i dummy0 test.pcap
이것은 tcpreplay 인 다음과 같은 결과입니다.
tcpreplay -t -i dummy0 test.pcap
1) 패킷에서 1-2 까지만의 패킷을 뽑아내 저장해 보자.
# bittwiste -I test.pcap -O rigel.pcap -R 1-2
2) IP 를 변경해 보자.
# bittwiste -I test.pcap -O test2.pcap -R 1 -T ip -s 192.168.1.5,192.168.50.50
3) 포트번호 변경
# bittwiste -I test2.pcap -O test3.pcap -T udp -d 53,8080
4) 페이로드 데이터 입력
echo "ahnlab_core" | xxd
bittwiste -I test2.pcap -O test3.pcap -L 4 -X 61686e6c61625f636f7265 -T udp
tcpdump -r test3.pcap -XX
Bit-Twist 로 패킷파일의 편집과 생성까지 자유자재로..
[5] Scapy
패킷파일을 프로그래밍 하는 관점에서 아주 유용한 도구입니다.
a=rdpcap("test.pcap")
>>> a
>>> a.nsummary()
>>> a[5].show()
>>> hexdump(a[5])
>>> lsc()
>>> b=Ether()/IP(dst="192.168.1.1")/TCP()/"GET /index.html HTTP/1.0 \n\n"
>>> b
<Ether type=0x800 |<IP frag=0 proto=tcp dst=192.168.1.1 |<TCP |<Raw load='GET /index.html HTTP/1.0 \n\n' |>>>>
'Scapy' 레이블을 보시면, Scapy 의 기본적인 것을 배워볼 수 있는 세가지의 이야기가 있습니다.
http://www.packetinside.com/search/label/scapy
[6] Tcpdpriv
패킷파일을 분석 의뢰할때 민감한 정보가 포함되어 있는 경우가 있습니다. 예를들어, 사내 IP
가 해당될 수도 있겠지요.
# ./tcpdpriv -A 50 -P 99 -w test2.pcap -r test.pcap
-A 는 IP 주소 변경
-P 는 포트 번호
0 은 최대한 Private 한 것이고 99 는 정보를 보여주는
패킷파일의 민감한 정보를 지우고 전달하고자 하는 경우에는 이 방법을!
[7] 텍스트 내용을 PCAP 파일로 - text2pcap
text2pcap 을 이용하면 텍스트 내용도 PCAP 파일로 변환할 수 있습니다. 때로는
분석과정에서 유용하답니다.
-l Link 레이어 타입 지정 (기본은 이더넷이다)
-e <l3pid> -e 옵션 뒤에 이더넷 헤더를 지정할 수 있다. -e 0x806 이면 ARP 패킷을 뜻한다.
-i <proto> 프로토콜을 지정
-m 최대 패킷 길이
-u <srcport>,<destport> UDP 출발지,목적지 포트를 지정
-T <srcport>,<destport> TCP 출발지,목적지 포트를 지정
# od -Ax -tx1 tcpdpriv > in.txt
# text2pcap in.txt out.pcap
# text2pcap -T8888,9999 in.txt out.pcap
# tcpdump -r out.pcap
reading from file out.pcap, link-type EN10MB (Ethernet)
22:27:49.000000 IP 10.1.1.1.8888 > 10.2.2.2.9999: Flags [], seq 0:576, win 8192, length 576
http://www.packetinside.com/search/label/text2pcap
자, 그리고 CaseStudy 에서 언급한 것들을 한번 살펴보죠.
UDP Flooding 에서 보여준 패킷파일에서 이미지 데이터 추출은 foremost 를
이용했습니다.
-i 로 로우파일을 지정하고 -o 로 출력될 경로를 지정합니다. 주의할 점은
입력데이터가 패킷 파일이 아니라, 스크림한 데이터에서 저장옵션에 보면
RAW 형태로 저장하는 것이 있습니다. RAW 형태로 저장된 파일을 뜻합니다.
만약, 입력파일이 패킷 데이터면 Tcpxtract 를 이용해 볼 수 있습니다.
네트워크 패킷 캡쳐 파일에서 파일 추출하기 (using Tcpxtract)
악성코드 트래픽 분석에서 Slammer 는 패킷파일에서 바이너리 데이터 부분만을
떼어내어 해당 코드를 디스어셈블해서 본 것입니다.
와이어샤크에서 데이터 부분에서 오른쪽을 클릭해 보면 Export 를 할 수 있는 부분이
있습니다. 데이터를 Export 하고 objdump 를 이용해 -D 로 디스어셈블 하면 됩니다.
이것은 추후 세부적인 내용을 다시 설명드릴까 합니다.
마지막으로 Suspicious Payload Analysis 에서
마찬가지로 의심 데이터를 추출하고 Ollydbg 로 분석을 한 것입니다. 해당 데이터는
취약점을 이용한 공격코드에서 전송된 '쉘 코드' 부분만을 떼어내어
바이너리 형태로 만들고, Olly 에서 로드하여 스텝별 분석을 한 것입니다. 추출한
데이터는 아래와 같은 형태로 컴파일을 한 것입니다.
char sc[] = {
0xeb, 0x03, 0x5d, 0xeb, 0x05, 0xe8, 0xf8, 0xff
0xff, .................................. };
int main() {
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)sc;
}
이 부분 또한 궁금해 하실 부분 중에 하나이어서, Slammer 와 함께 세부적으로
다시 설명드릴 예정입니다.
발표 및 시연은 모두 리눅스 기반으로 진행되었습니다. 그래서 Ollydbg 가
리눅스에서 동작하는 걸 보고 의아해 하신 분도 있습니다. Ollydbg 는
WINE 을 통해 실행시킨 것입니다. 설치된 리눅스는 BackTrack5 입니다.
많은 것들이 이미 설치되어 있어서 시연하기에 편해
선택한 것입니다. 리눅스에서 발표에 이용한 유용한 도구도 시간이 나는대로
공유해 드릴 예정입니다.
제가 마지막 페이지에서 사용한 문구가 다음과 같습니다.
Share What you know, Learn What you don't
From PacketInside.com
큰 의미는 '정보의 공유' 입니다. 리눅스를 선택한 것도 오픈소스를 통해서
얼마나 많은 것들을 할 수 있는지 보여드리려 했던 것이고,
정보도 공개할 수 있는 수준의 범위내에서는
블로그로 많이 포스팅하여
네트워크에 관심있는 많은 분들이
참고하실 수 있도록 하려고 합니다.
마지막으로 네트워크 포렌식이 모든 문제해결의 '열쇠'가 되지는 않습니다.
하지만 큰 방향을 결정하는 중요한 '열쇠'가 되기도 합니다.
이 점을 잊지마시고요,
제가 또 언젠가 여러분들과 만날기회가 있다면
더 많은 이야기를 나눠보고 싶네요. :-)
행사에 와 주셨던 모든 분,
그리고 재미있고 알차게 들었다고 해 주신 모든 분들
감사합니다.
항상 행복하세요.
[참고]
1. 개발자도 알아야 할 네트워크 포렌식 분석 기술, '안랩코어 2011' 컨퍼런스
피드 구독하기:
글 (Atom)