Wireshark 온라인 도움말 : http://www.wireshark.org/docs/wsug_html Wireshark 도움말 PDF 파일 : http://www.wireshark.org/download/docs/user-guide-a4.pdf 각 패킷 샘플 다운로드 : http://wiki.wireshark.org/SampleCaptures |
Search
'(무선)네트워크'에 해당되는 글 16건
- 2011.03.30 [참고 사이트] Wireshark 도움말 사이트
- 2011.01.17 [툴 소개] Wifite - mass WEP & WPA Cracking Tool 1
- 2010.10.22 [추천자료] 알기쉬운 무선랜 보안 안내서
- 2010.01.21 커널 디버깅하기
- 2010.01.18 Network Convert Channel #2 2
- 2010.01.18 Network Convert Channel #1
- 2009.12.08 DLL 파일 다운로드 사이트
- 2009.12.08 WPA Crack 지원 사이트(?)
- 2009.11.10 Apple iPhone Worm 발견!
- 2009.11.02 Driver 개발시 간단하게 Loading된 Driver 리스트 보기
Backtrack4 에서 무선랜점검을 위해 사용하는 툴인 aircrack-ng 툴을 좀 더 편하게 사용할 수 있는 툴이 있어서 소개하려고 합니다.
Wifite 라는 대량의 WEP & WPA 암호화를 사용하는 AP에 공격을 수행할 수 있는 툴입니다.수행을 직접한다기 보다는 파이썬 스크립트를 사용하여 aircrack-ng 를 좀 자동화(?) 및 시각화를 해준 툴이 아닐까 생각합니다.
직접 사용해보면 40일동안 무선랜 점검만 한 장인이 터미널창에 한줄 한줄 입력한 것보다는 못하겠지만, 사용자 측면에서 불필요한 고민(?)이나 작업에 대한 수고를 덜어줌으로써 시간절약이 된다는 면이 좋았습니다.
해당 툴의 홈페이지는 http://code.google.com/p/wifite/ 입니다.
실행을 위해 필요한 내용은 아래와 같습니다.
- Linux 환경(Backtrack4 의 경우 Ubuntu 기반)
- Python 2.4.5 와 2.5.2 버전에서 테스트 되었음.(홈페이지 정보) : 그 상위버전이면 모두 가능할거라 생각됩니다.
- 모니터모드와 Injection이 가능한 무선랜카드 사용
- aircrack-ng Suite 설치(v1.1 이상)
- python-tk (초기설정 시 GUI 사용), xterm(설정 완료 시 실행화면)
- macchanger (실행 중 필요에 의해 자동으로 mac주소 변환을 하는데 사용.)
- pyrit : cap파일에서 WPA 핸드쉐이크를 originally strip 하는데 사용하는데 (이건 옵션이라고 합니다.)
정확한 용도가 궁금하신 분은 http://code.google.com/p/pyrit/ 여기를 ^^;; 사용해본 게 아니라서 이게 더 정확할 거 같습니다.
공부를 해서 훗날을 기약해보는것도...(언제쯤?ㅎㅎ)
Backtrack 4 사용 시 LiveCD이지만, USB사용할 것을 개인적으로 권장드리는 바인데, 이유는 속도차이입니다.
CD가 윙 돌고 그러는 시간을 무시를 못하겠더라구요 그냥 USB는 실행이 되는데 CD 그 딜레이를 전 못참겠습니다..후훗
1) 인터넷 연결되고 wifite.py를 받고 싶으시다 그러시면
#wget -O wifite.py http://wifite.googlecode.com/svn/trunk/wifite.py
전 USB에 파일 넣어 놓고 USB부팅해서 /media/cdrom0/ 에서 꺼내서 사용합니다.
2) 받은 파일 실행합니다.
#./wifite.py
3) GUI가 등장을 합니다.
가장 최근 버전으로 보이는 wifite_r54.py 의 GUI 화면입니다.
- interface : 선택가능함 (선택안할 경우 실행화면에서 선택하도록 되어 있음..) - Encryption Type : 암호화방식 WEP / WPA / WEP & WPA 세가지 방식. 이 세가지 타입에 해당이 되는 AP를 검색하도록 함. - channel : 미리 알고 있는 경우가 아니라면 all channels 선택 select targets from list 또는 everyone - dictionary : Backtrack4 라면 디폴트로 경로 정해져있음. 전 한번도 건드린 적 없음. - WEP/WPA timeout(min) : 각각의 암호화 방식에 대해 공격 제한 시간. - WEP options : WEP 공격기법 종류 다중선택. (ignore Fake-Auth 선택할 경우에는 Fake-Auth가 실패한 경우에도 바로 공격으로 넘어감. 아래 부분의 400 은 적절하게 잡아서 해주면 됩니다. GUI 설정이 끝나고 아래 빨간색 버튼 h4x0r 1t n40 버튼을 눌러주면 실행됩니다. |
4) 실행화면 확인.
이후 부분은 직관적으로 확인 및 선택 등이 가능하며, 직접 해보실 것을 권해드립니다.
홈페이지에 여러가지 옵션을 써가며 설명이 되어 있는데요
Example ) 아래의 명령어들은 옵션에 대한 설명을 위해 존재하는 부분입니다. GUI 설정에서 지정해주면 실행하게 되면 아래의 명령어가 자동으로 생성되어 xterm 에서 실행되게 됩니다.
to crack all WEP access points:
./wifite.py -all -nowpa
to crack all WEP access points with signal strength greater than (or equal to) 50dB:
./wifite.py -p 50 -nowpa
to attack all access points, use 'darkc0de.lst' for cracking WPA handshakes:
./wifite.py -all --dict /pentest/passwords/wordlists/darkc0de.lst
to attack all WPA access points, but do not try to crack -- any captured handshakes are saved automatically:
./wifite.py -all -nowpa --dict none
to crack all WEP access points greater than 50dB in strength, giving 15 minutes for each WEP attack method, and send packets at 600 packets/sec:
./wifite.py --power 50 -wepw 15 -pps 600
to attempt to crack WEP-encrypted access point "2WIRE752" endlessly -- program will not stop until key is cracked or user interrrupts with ^C):
./wifite.py -e "2WIRE752" -wepw 0
실행화면은 홈페이지의 스냅샷 이미지로 대체합니다.
스냅샷 URL 경로 http://wifite.googlecode.com/files/snapshot-gui-r39.png
좋은 하루 되세요. 스크롤의 압박속에 읽느라 고생하셨습니다. ^^
--------------------------------------------------------------------------------------------------------------
방송통신위원회(위원장 최시중)와 한국인터넷진흥원은 안전한 무선랜 이용을 위해 누구나 무선랜 접속장치의 보안설정을 쉽게 따라할 수 있도록 하는「알기쉬운 무선랜 보안 안내서」를 마련하여 배포하기로 하였다.
이번에 마련한 무선랜 보안 안내서는 ▲무선랜 서비스 개념 ▲무선랜 보안의 필요성 ▲무선랜 안전 이용 수칙 ▲무선랜 보안설정 방법 등의 내용을 담고 있으며, 개인적으로 무선랜 서비스를 이용하는 일반 이용자들은 누구나 쉽게 이해하고 따라할 수 있도록 안내하고 있다. [...이하생략..]
다운로드 : http://www.kcc.go.kr/user.do?boardId=1042&page=P05030000&dc=K05030000&boardSeq=29815&mode=view
요즘은 커널 디버깅을 하기위해 WinDBG를 많이 사용합니다.
그래서 커널 디버깅을 하기 위해 기본적으로 정리해야 할 개념들에 대해 정리해 보았습니다.
1. 디버깅 유형
가. 라이브 디버깅
라이브 디버깅은 대상을 실행시켜 놓고 이를 Tracing하며 분석 하는 디버깅 기법입니다.
대상을 Tracing하며 분석하기 때문에 대상에 대한 이해가 보다 쉬우며, 직관적으로 다가갈 수 있습니다.
다음은 WinDBG를 이용하여 ndis.sys를 라이브디버깅하는 그림입니다.
나. 덤프 디버깅
덤프디버깅은 시스템이 Crash 된 후 어느 지점에서 어떤 이유로 인해 시스템이 Crash됐는지 알아보고 이를 수정하는 디버깅 기법입니다. 보통 커널모드에서는 조금의 실수도 시스템 Crash로 이어지기 때문에 많이 쓰이는 디버깅 방법입니다.
다음 화면은 시스템 Crash로 인해 덤프디버깅 하는 그림입니다.
2. 심볼(Symbol)
가. 심볼 개념
심볼파일은 어플리케이션, 혹은 드라이버 등을 개발하고 이를 링킹하는 작업이 이루어질 때, 생성되는 파일입니다. 심볼파일은 바이너리가 실행될때 필요하진 않지만, 디버깅 과정에서 아주 유용하게 사용되는 다양한 정보를 가지고 있습니다.
다음은 심볼이 포함하고 있는 정보입니다.
전역변수 |
지역변수 |
함수이름 |
EntryPoint |
FPO Data |
Source Linenumber |
이러한 정보들은 바이너리를 디버깅 할 때 정보를 제공해 줌 으로써 디버깅작업을 좀 더 효율적으로 진행하게 도와줍니다.
나. 심볼 유무에 따른 차이
NIDS는 심볼이 있고, vmmouse는 심볼이 없습니다.
NDIS를 디스어셈블링 한 결과입니다.
vmmouse를 디스어셈블링 한 결과입니다.
심볼이 있는경우는 심볼의 정보를 참조해서 함수라던지 이름이 잘 나오지만 심볼이 없는경우 offset값으로 판단을 하게 됩니다.
이렇게 심볼이 있는 바이너리를 디버깅 할 때와 심볼이 없는 바이너리를 디버깅 할 때 획득 할 수 있는 정보의 양이 달라지는 것을 확인할 수 있습니다. 이 말은 디버깅을 하려는 바이너리와 일치하는 심볼 파일이 있는지 확인을 해야 한다는 것을 의미합니다.
이런 이유로 라이브 디버깅과 덤프 디버깅 에 대하여 디버깅을 할 경우 심볼이 필요합니다.
3. 명령어
가. BP VS BU
(1)BP명령어
bp명령어는 직접적인 주소에 브레이크 포인트를 설치합니다. 그러므로 로딩되지 않은 모듈에는 브레이크 포인트를 설치하지 못합니다. 즉 로딩된 모듈에 브레이크포인트를 설치하고 디버깅 할 때에 주로 사용합니다. 그리고 Debuggee가 다시 시작될 경우 해당 주소에는 모듈의 내용이 맵핑되어 있지 않기 때문에 설치됐던 브레이크 포인트는 전부 사라지게 됩니다.
(2)BU명령어
bp와는 달리 로딩되지 않은 모듈에 브레이크 포인트를 설치 할 수 있습니다. 이를 Unresolved BreakPoint 라고 부릅니다. 그리고 Debuggee가 다시 시작 될 경우 설치됐던 브레이크 포인트는 그대로 남아있게 됩니다.
나. 조건
(1) j (if - else)
KD > bp 0x87ffb4e7 “j(MySymbol = 0) ‘’; ‘gc’”
bp 0x87ffb4e7 | 0x87ffb4e7 에 브레이크 포인트를 설치 |
j(MySymbol = 0) | if(MySymbol = 0) |
‘’ | if문이 참일 때 실행 |
‘gc’ | if문이 거짓일 때 브레이크 포인트를 실행 |
(2) z (while)
while문 형식의 명령어로 특정 조건을 만족할때까지 같은 작업을 반복할 수 있습니다.
KD > t;z(eax=0x875a4d00)
t | 트레이싱 |
z(eax=0x875a4d00) | eax가 0x875a4d00 일때까지 |
▷ 작성자 : 김민상 (minams@a3sc.co.kr)
Network Convert Channel #2
목 차
I. 개요
1. 연구 개요
2. 연구 주제
II. NETWORK CONVERT CHANNEL #1
1. SNIFFING COMMUNICATION
2. SNIFF CHATTING CODE
3. REFERENCE
I. 개요
1. 연구 개요
09. 09 A3 지식사업팀에서는 좀 더 한정된 PT환경에서 DNS서버의 해킹으로 인한 내부 서버의 위협가능성을 판단하고 이를 보완하고자 자체적으로 PT(터널링)툴 개발을 진행하였으며, 개발 과정에 연구된 내용을 바탕으로 작성하게 되었습니다.
2. 연구 주제
Network Layer에서의 Convert Channel 기법
구분
주제
Network Convert Channel #1
Sniffing 기법을 이용한 Convert Channel
Network Convert Channel #2
UDP Outbound Session을 이용한 사설망 접근
II. Network Convert Channel #2
1. UDP Outbound Session
흔히 NAT에서 outbound/inbound라고 표현을 하며, session을 붙여 inbound session(밖에서 안으로 성립/허가된 session), outbound session(안에서 밖으로 성립/허가된 session)이라 합니다. 정리하면,
구분
설명
inbound
(NAT) 밖에서 안으로 향하는 Packet
outbound
(NAT) 안에서 밖으로 향하는 Packet
inbound session
밖에서 안으로 향하는 허가(성립)된 연결
outbound session
안에서 밖으로 향하는 허가(성립)된 연결
기존에 outbound session을 이용하여 inbound 방화벽을 우회하는 Reverse Connection이라든가 Reverse Tunneling 등의 위협은 잘 알려져 있습니다. 이러한 outbound session을 이용(UDP)하여 외부에서 사설망 내부IP에 접근하는 기법에 대하여 이야기 하고자 합니다.
다음은 네트워크 UDP packet을 dump한 화면입니다.
[그림 1] UDP Dump
위 Packet들을 유심히 들여다보면 168.126.63.1은 외부에서 사설망 내부 IP로 접근을 했다는 사실을 알 수 있습니다. 그래서 어떻게 해서 외부에서 내부 IP에 접근할 수 있었냐를 확인해본 결과, UDP packet의 src IP/Port, dst IP/Port 의 쌍이 그 답이었습니다.
다음은 두 packet의 in/outbound packet dump 화면입니다.
[그림 2] outbound packet
[그림 3] inbound packet
외부에서 들어온 inbound packet의 MAC Address를 확인해보면 실제 서버의 MAC이 아닌 Gateway의 MAC이며, 이는 외부에서 session을 유지한 채 packet을 전송하기 위해서 전송해야 할 IP가 내부 IP가 아닌 Gateway의 IP가 되어야 함을 의미하게 됩니다.
다음은 위의 두 packet의 MAC Address가 Gateway의 MAC Address임을 확인하는 화면입니다.
[그림 4] Gateway MAC Address
다음과 같은 outbound packet에 대하여 대응(연결)는 inbound packet을 구성해보면 다음과 같습니다.
outbound packet
inbound packet
Source IP
192.168.0.2
1.1.1.1
Source Port
9090
53
Destination IP
1.1.1.1
192.168.0.2 사설망의 외부IP(Gateway)
Destination Port
53
9090
위의 서버를 생성(Port Listening) 하지 않고 수신한 packet중 원하는 Packet만 가공(printf)하였기 때문입니다.
2. Outbound Session이용하기
다음 그림과 같이 내부에서 주기적으로 다음과 같은 packet을 전송하고 있습니다.
[그림 5] Outbound Packet
이 packet으로 인하여 Gateway(192.168.0.1-10.10.10.86)에는 내부PC-192.168.0.2(9090)에서 10.10.10.86(53)으로 나가는 Outbound Session이 생겨났습니다.
[그림 6] Packet Capture 1
그 다음 같은 사설망이 아닌 외부 PC에서 사설망 Gateway IP(10.10.10.84)로 아래의 그림과 같이 Source IP, Port와 Destination Port를 맞춰 data(ShowMe?)를 전송하도록 하였습니다.
[그림 7] Inbound Packet
그 결과 외부 IP(10.10.10.86, 192대역 사설망에서의 외부)에서 192.168.0.2로 원하는 data 수신이 가능하였습니다.
[그림 8] Inbound Packet Capture
지극히 당연한 결과지만 이를 통해 다음과 같은 내용들을 확인할 수 있습니다.
첫째로, 내부에서 의도적인 outbound session 생성 즉, 목적지 IP, Port와 Gateway의 IP만 알 수 있다면 Raw Packet을 이용(임의의Source IP, Port 셋팅)하여 외부의 그 어떤 PC를 이용하더라고 원하는 data를 전송할 수 있습니다.
둘째로, 문서에 테스트과정을 포함시키지 않았지만 나와있지 않지만, Gateway에서는 초기 outbound packet의 IP와 Port를 이용하여session을 맺기 때문에 내부의 PC 한대로 또 다른 내부의 PC로의 data전송이 가능(Source IP 수정하는 방법을 사용 시)하였습니다.
이러한 방법을 이용하면 외부의 IP추적이 어려워지며, 두 번째 방법을 적용하게 되면 실제 data를 수신한 PC만으로는 통신내역을 분석할 방법이 없다는 것입니다.
3. in/outbound packet 생성 코드
이 테스트 프로그램은 정상적인 packet으로 위장하기 위하여 정상적인 DNS packet에 data를 추가하는 방법을 사용하여 packet을 전송하였습니다.
다음은 테스트 프로그램의 main()함수 입니다. UDP timeout session을 유지하기 위하여 반복적으로 session을 생성하게 됩니다. int SetUdpPacket(unsigned char *Packet, char *SourceIP, char *DestinationIP, char *SendBuffer) …중략 iphdr = (IPV4_HDR *)Packet; // UDP 해더 셋팅------------------------------------------------------------------ return nSend;
USHORT checksum(USHORT *buffer, int size);
void UdpPseudoHeaderChecksum(void *iphdr, UDP_HDR *udphdr, char *payload, int payloadlen);
int SetUdpPacket(unsigned char *Packet, char *SourceIP, char *DestinationIP, char *SendBuffer);
bool SendRawPacket(unsigned char *Packet, int nSend);
int SetFakeDnsQueryBuffer(char *SendBuffer, char *SendData, int nSendData);
int main(int argc, char *argv[])
{
unsigned char Packet[MAX_PACKET] = {0x00,};
int nSend = SetUdpPacket(Packet, argv[1], argv[2], argv[3]);
while(1){
SendRawPacket(Packet, nSend);
Sleep(30000);
}
}
다음은 미리 약속한 IP, Port 를 이용하여 session을 맺기 위하여 RAW socket을 사용하였습니다.
{
…중략
// Source IP, Port 셋팅
SourceInfo.sin_addr.s_addr = inet_addr(SourceIP);
SourceInfo.sin_port = htons(53);
// Destination IP, Port 셋팅
DestinationInfo.sin_addr.s_addr = inet_addr(DestinationIP); // 외부IP(외부로 나가는 IP면 어디든 상관없음)
DestinationInfo.sin_port = htons(9090);
// IP 해더 셋팅--------------------------------------------------------------------
iphdr->ip_version = 4;
//iphdr->ip_header_len = (4 << 4) | (sizeof(IPV4_HDR) / sizeof(unsigned long)); //ip_version, ip_header_len setting
iphdr->ip_header_len = sizeof(IPV4_HDR) / sizeof(unsigned long);
iphdr->ip_tos = (unsigned char)0;
iphdr->ip_total_length = htons(iphdr_len + udphdr_len + nSend /* Total length */);
iphdr->ip_id = 0;
iphdr->ip_ttl = (unsigned char)128;
iphdr->ip_protocol = (unsigned char)IPPROTO_UDP;//IPPROTO_UDP
iphdr->ip_checksum = (unsigned short)0; // checksum 구하기 전에 0으로 셋팅
iphdr->ip_srcaddr = SourceInfo.sin_addr.s_addr;
iphdr->ip_destaddr = DestinationInfo.sin_addr.s_addr;
iphdr->ip_checksum = checksum((unsigned short *)iphdr, sizeof(IPV4_HDR));
…중략
udphdr = (UDP_HDR *)(Packet + iphdr_len);
udphdr->source_port = SourceInfo.sin_port;
udphdr->dest_port = DestinationInfo.sin_port;
udphdr->udp_length = htons(udphdr_len + nSend);
UdpPseudoHeaderChecksum(iphdr, udphdr, SendBuffer, nSend);
…중략
}
4. Reference
[site]
http://support.microsoft.com/kb/190351/ko
http://netcat.sourceforge.net/
http://wiki.kldp.org/Translations/Raw_IP_FAQ-KLDP
http://www.winpcap.org/docs/docs_41b5/html/main.html
http://www.codesos.com/book/network/IN_ADDR.html
http://uuzazuk9.egloos.com/906428
[book]
윈도우 네트워크 프로그래밍 TCP/IP 소켓 프로그래밍
Network Programming for Microsoft Windows 2nd Edtion
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.
▷ 작성자 : 김민상 (minams@a3sc.co.kr)
Network Convert Channel #1
목 차
I. 개요
1. 연구 개요
2. 연구 주제
II. NETWORK CONVERT CHANNEL #1
1. SNIFFING COMMUNICATION
2. SNIFF CHATTING CODE
3. REFERENCE
I. 개요
1. 연구 개요
09. 09 A3 지식사업팀에서는 좀 더 한정된 PT환경에서 DNS서버의 해킹으로 인한 내부 서버의 위협가능성을 판단하고 이를 보완하고자 자체적으로 PT(터널링)툴 개발을 진행하였으며, 개발 과정에 연구된 내용을 바탕으로 작성하게 되었습니다.
2. 연구 주제
Network Layer에서의 Convert Channel 기법
구분
주제
Network Convert Channel #1
Sniffing 기법을 이용한 Convert Channel
Network Convert Channel #2
UDP Outbound Session을 이용한 사설망 접근
II. Network Convert Channel #1
1. Sniffing Communication
기존의 network통신에서 데이터를 주고 받을 때, 기 연결된 소켓을 이용하여 recv()를 호출하면 kernel에서 대응(매칭되는)하는 Packet을 알아서 전달해 주게 되어있습니다. 이것은 packet 받기 위해선 사전에 매칭되는 소켓을 가지고 있어야 함을 의미하게 됩니다. 그러나 알려진 대로 NIC는 Promiscuous Mode로 동작하기 때문에 Sniff용 소켓을 생성하는 것만으로도 packet의 수신 및 가공이 가능하게 됩니다.
다음의 화면은 간단히 채팅이 가능하도록 구현된 프로그램입니다.
[그림 1] 채팅 Client 1
[그림 2] 채팅 Client 2
위 그림들을 보면 보통의 채팅 프로그램과 유사하게 동작하는 것 같지만 WireShark등을 이용해 그 Packet을 확인해보면 보통의 채팅 프로그램과 다르다는 것을 알 수 있습니다.
[그림 3] Packet 분석
위의 packet을 가만히 보면 Destination port가 일정하지 않고 항상 다릅니다. 그 이유는 채팅을 위해 서버를 생성(Port Listening) 하지 않고 수신한 packet중 원하는 Packet만 가공(printf)하였기 때문입니다.
2. Sniff Chatting Code
이 프로그램에서는 Packet에 단순한 Signature를 삽입하여 이를 이용하여 판별하였으며, 일부 코드는 다음과 같습니다.
다음은 위 채팅코드 main의 일부 입니다.
SOCKET SnifferSocket = SetSnifferMode(); // Sniff 모드 Socket 생성
if(SnifferSocket == INVALID_SOCKET)
return 0;
… 중략
while(1){
randPort = rand() % 65535; // 목적지 port를 매번 다르게 셋팅
SOCKADDR_IN DestAddr;
memset(&DestAddr, 0x00, sizeof(DestAddr));
DestAddr.sin_family = AF_INET;
DestAddr.sin_port = randPort;
DestAddr.sin_addr.s_addr = DestIP;
memset(SendBuffer, 0x00, sizeof(SendBuffer));
… 중략
PacketSend(DestAddr, SendBuffer, nSend); // SendBuffer 전송
// 원하는 패킷 수신 int PacketRecv(SOCKET, char *RecvBuffer)
nRecv = PacketRecv(SnifferSocket, (char *)RecvBuffer);
printf("Recv Msg : %s", RecvBuffer);
memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
}
return 0;
다음은 원하는 Packet을 수신하는 PacketRecv() 함수의 일부 입니다. do{ UDP_HDR *udphdr;
SniffPacket = (unsigned char *)malloc(65536); // Packet Buffer
if(SniffPacket == NULL) return FALSE;
memset(SniffPacket, 0x00, 65535);
nPacket = recvfrom(SnifferSocket,(char *)SniffPacket,65536,0, 0, 0);
… 중략
// 원하는 패킷 판별 1
if(iphdr->ip_protocol == 17&&iphdr->ip_srcaddr != ServerAddr.sin_addr.s_addr){
unsigned short iphdrlen = iphdr->ip_header_len*4;
udphdr = (UDP_HDR *)(SniffPacket + iphdrlen);
MSI_MSG *msi = (MSI_MSG *)(SniffPacket + iphdrlen + sizeof(UDP_HDR));
// 원하는 패킷 판별 2(단순한 signature 이용)
if(!strncmp((const char *)msi->signature, SIGNATURE, 8)){
DestIP = iphdr->ip_srcaddr;
memcpy(RecvBuffer, msi->msg, 512);
free(SniffPacket);
return (nPacket - iphdrlen - sizeof(UDP_HDR) - sizeof(MSI_MSG) + 512);
}
}//if(iphdr->ip_protocol == 17){ // UDP
}while (nPacket > 0);
free(SniffPacket);
3. Reference
[site]
http://support.microsoft.com/kb/190351/ko
http://netcat.sourceforge.net/
http://wiki.kldp.org/Translations/Raw_IP_FAQ-KLDP
http://www.winpcap.org/docs/docs_41b5/html/main.html
http://www.codesos.com/book/network/IN_ADDR.html
http://uuzazuk9.egloos.com/906428
[book]
윈도우 네트워크 프로그래밍 TCP/IP 소켓 프로그래밍
Network Programming for Microsoft Windows 2nd Edtion
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.
해당 사이트에서 검색해서 관련 DLL 파일을 검색할 수 있습니다.
http://www.dll-files.com/
WPA Crack 사이트 : http://www.wpacracker.com/
단돈 2만원이면 듀얼코어가 5일이 넘게 걸리는 것을 20분이면 끝내준다는 부분이 눈에 들어옵니다.
클라우드 컴퓨팅이 좋긴 좋네요..
그렇게 했는데.. 1억 3천 5백만 개에 들어있지 않는 단어가 패스워드라면??? 그래서 쓸데없는 짓을 좀 해봅니다;;;;
1234567890abcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+}]{'";:?/.>,<\|~`ABCDEFGHIJKLMNOPQRSTUVWXYZ (총 94개)
특수기호 제외 (62개)
대문자 제외 (36개)
확률 적인 계산이긴 하지만.. 참 신기하게도 어마어마하게 들렸던 1억 3천 5백만이라는 숫자(135,000,000)가 94와 62, 그리고 36을 곱해가기 시작하니까 초라해지네요;;
우리가 보통 추천하는 비밀번호 8글자 이상..
94 ^ 8 = 6095689385410816
62 ^ 8 = 218340105584896
36 ^ 8 = 2821109907456 ( 2조 8천억...억....억....;;;;) 위는 볼것도 없군요;;;
이거 머 게임도 안되는데 너무 큰 기대를 했었나봅니다... 그래서 한 수 접고 5글자로 계산해보니까...
94 ^ 5 = 7339040224
62 ^ 5 = 916132832
36 ^ 5 = 60466176 ( 드디어 가시권에 들어왔네요...) 6천만개...
여기다가 다시 36을 곱하면 1억을 안 넘을리가 없겠죠...ㅎㅎ
135 billion이 되면 취약한 패스워드는 점검해볼만 하겠네요.
Apple iPhone에서 SSH를 설치한 후에 기본 계정을 바꾸지 않으면 배경화면을 바꾸는 Worm 형태가 나타난다고 하네요.
드라이버를 개발하다 보면 혹은 드라이버를 사용하는 특정 프로그램을 실행하다보면 드라이버가 로딩되었는지 확인하고 싶을 때가 있습니다. 물론 DriverView나 sysobj 혹은 icesword와 같은 프로그램으로 확인 할 수 있지만
간단하게 확인하는 팁을 알려 드리겠습니다. 콘솔창에 driverquery 라는 명령어를 사용하여 현재 로딩된 드라이버의 목록과 속성을 확인할 수 있습니다.
아무런 파라미터 없이 명령을 실행하면 기본값의 출력이 명령창에 출력됩니다.
driverquery 파라미터
기본적으로 위 형태로 출력되며 파라미터는 help를 통해 확인할 수 있지만 드라이버의 리스트를 확인하기 위한 유용한 파라미터만 보면
옵션 | 설명 |
/v | verbos |
/FO list table csv 중 1개 | 형식을 정해서 보여줌 |
자세한건 help를 통해 확인을 통해 볼 수 있습니다.
이처럼 리다이렉션을 통해 파일로 저장도 가능합니다.