TCP/IP 도스명령정리

카테고리 없음 2008. 1. 14. 10:30
TCP/IP 및 보안
앞에서 3번 악수를 한다고 해서 3핸드세이킹을 설명드렸습니다.
다시 요약하면 아래 그림과 같습니다
좀더 구체적으로 들어가보겠습니다.
우리가 텔넷으로 접속을 하면 패킷이 TCP 헤더+IP 헤더+TCP 데이터가 결합이 되어 전송이 됩니다.
구체적으로 말하자면
TCP 헤더 20Byte
IP 헤더 20Byte
TCP 데이터…
이렇게 결합이 되죠
앞에서 예를 든 것을 보자면
Source IP:211.183.87.68 Target IP:233.233.233.233
TCP Lenth:0 Source Port:1079 Target Port:23 Seq:00863FAAF Ack:00000000
Flags:S Window:8192 TCP ChkSum:25792 UrgPtr:0



Source IP:211.183.87.68 Target IP:233.233.233.233
이부분이 IP 헤더의 내용입니다

TCP Lenth:0 Source Port:1079 Target Port:23 Seq:00863FAAF Ack:00000000
이부분이 TCP 헤더의 내용입니다.
위에서 TCP Lenth:0 은 TCP 데이터가 없다는 뜻입니다
좀더 구체적으로 TCP 헤더와 IP 헤더를 보면(물론 실제소스가 이렇게 구성되어 있지는 않습니다.)
버전(4비트)헤더길이(4비트)서비스타입(8비트)패킷의길이(16비트)
식별(16비트)플래그(3비트)프래그먼트 옵션(13비트)
Time To Live(TTL:8비트)프로토콜(8비트)헤드체크섬(16비트)
소스 IP 주소(32비트)
목적지 IP 주소(32비트)



IP 헤더 총 20 Byte




소스포트(16비트)목적지 포트(16비트)
인증번호(Acknowledgment Number:32비트)
Time To Live(TTL:8비트)프로토콜(8비트)헤드체크섬(16비트)
헤더길이(4비트)예약(6비트)URGACKPSHRSTSYNFIN윈도우(16비트)
체크섬(Checksum:16비트)긴급포인터(Urgent pointer:16비트)


TCP 헤더 총 20Byte
좀더 구체적으로 패킷을 표현하자면 다음과 같이 랜카드의 하드웨어 주소인 MAC 어드레스가 포함된 이더넷 헤더 14Byte 가 IP 헤더 앞에 붙고 이더넷 트레일러 4Byte의 데이터가 TCP 데이터 뒤에 붙습니다
이더넷 헤더 14Byte +IP헤더 20Byte + TCP 헤더 20Byte + TCP 데이터 + 이더넷 트레일러 4 Byte


IP헤더 20Byte + TCP 헤더 20Byte + TCP 데이터 :IP 데이터 그램이라고 표현합니다.
TCP 헤더 20Byte + TCP 데이터:TCP 세크먼트 라고 표현합니다.
그다음 UDP 프로토콜을 보도록 하죠
소스포트 (16 비트)목적지 포트 16비트
메시지 길이 16비트체크섬 16비트

UDP 헤더 8바이트

위의 IP 헤더는 자신과 목적지의 주소를 가지고 있기 때문에 TCP 헤더나 UDP 헤더와 결합을 하는데 패킷이 전송할 때 IP 헤더 덕분으로 상대측의 주소를 알게 되는것입니다
UDP 는 3-핸드쉐이킹이 일어나지 않고 곧바로 목적지로 패킷을 전송시킵니다.

위에서 포트라고 했는데 포트는 일종의 통신상의 문이라 생각하시면 됩니다
즉 철수의 집이 있다면 철수의 집에 있는 문이 대문뿐만 아니라 화장실문,안방문,부엌문등
여러가지 들어갈수 있는 문이 있듯이 포트 또한 상대에게 접속하기 위해 각각 여러가지 종류마다 이용하는 포트가 있습니다.
메일:25번 포트
FTP:21번 포트
텔넷:23번 포트
DNS:53번 포트
POP3:110 포트
Http:80 번 또는 8080 또는 8000

UDP 프로토콜에 대해서 더 감을 잡자면
우리가 웹브라우져에서 www.daum.net 이라고 치면 우리의 컴퓨터는 아이피주소만을 인식하기 때문에 www.daum.net 이라는 웹메일 회사의 아이피 주소를 원하게 됩니다.
물론 www.daum.net. 이라는 회사의 서버또한 고정 아이피를 가지고 있지만 우리의 컴퓨터는 상대편의 아이피 주소를 알길이 없습니다
그래서 이때 중간에서 도메인 이름과 아이피 주소를 서로 변환시켜줄 서버가 필요하게 되는데 이것이 DNS (도메인 네임 서버) 입니다
웹브라우져에서 www.daum.net 이라고 치면 UDP 프로토콜을 이용해서 DNS 서버의 53 포트를 통해서 www.daum.net 의 아이피 주소를 알아옵니다
그리고 UDP 가 알아낸 상대서버의 아이피를 알아내면 비로서 TCP/IP 프로토콜을 가지고
DNS 서버를 거치지 않고 바로 상대 서버로 바로 갑니다
혹시 속도 체크기가 있다면 브라우져에서 www.daum.net 으로 친것보다 211.32.117.200
으로 친것이 더 빨리 간다는것을 알수가 있을것입니다.
만약 패킷이 제대로 전송되지 않는다면 게이트웨이(라우터)에서 ICMP(Internet Control Message Protocol) 이 발생해서 패킷전송이 실패했다는것을 알려줍니다

타입:8비트코드:8비트체크섬:16비트

ICMP 패킷의 헤더
Icmp 프로토콜 또한 상대와 자신의 아이피 주소를 알지 못하면 어디로 날아가야할지 모르기 때문에 IP 헤더를 붙이게 되는데 ICMP 패킷의 완전한 모양은 다음과 같습니다.
IP 헤더 20Byte + ICMP 헤더 20Byte + ICMP 데이터 이렇게 구성이 됩니다.
물론 프로그램적으로 따지자면 이것보다 더 복잡하게 프로토콜이 되어 있고 여러가지 암호인증 및 에러정정 등 갖가지 구조체의 집합으로 되어 있습니다

여기서 뭔가 번뜩 생각이 들지 않나요? 만약 각 프로토콜에 붙어서 패킷이 날아가야할 주소를 가려쳐주고 안내자 역할을 하는 IP 프토토콜을 변경시키면 상대컴에게 나이 주소를 속일수는 있지 않을까?
여기서 아이피 스푸핑이 나온것입니다 물론 소켓 프로그래밍에서 IP 프로토콜의 정의를 하고 있는 구조체를 변경시키면 되겠지만 우선 그것보다 앞시간에서 설명한 3핸드쉐이킹에서
상대가 보내는 SYN 을 예측을 해야 가능하게 됩니다.

■ IP 체계
아이피 주소 211.182.67.22 이것은 무엇을 의미하는것일까요?
각 점을 기준으로 4개로 나누어 지는데 각 1byte씩(즉 8비트)씩 차지하고 1바이트는 0~255까지 수를 가질수 있습니다
아마 각 공공기관의 자신이 사용하는 아이피를 확인해보시면 절대 255를 넘는 수는 보지못했을것입니다.
위의 아이피 주소는 10진수로 나타낸것입니다.물론 컴퓨터는 저 십진수를 2진수로 변환을 해서 인식을 합니다.
실제로 아이피를 사용할때는 0 은 예약된 주소이기 때문에 실제로 255 개의 주소만 사용합니다.
각 점을 기준으로 클래스라는 개념으로 나뉘게 되는데
A Class

0 (1비트)Net 위해 7비트 할당호스트위해 24 비트 할당


A클래스는 네트워크를 위해 1 바이트를 할당합니다.(위에서 0 (1비트)+ Net 위해 7비트)
위에서 0 은 예약된 주소이고 네트워크를 할당된 7비트는 즉 2에 7승은 127개의 네트워크를 가지고 호스트는 2에 24승-16,777,216 개의 호스트를 가질있다는 뜻을 의미합니다
A.B.C.D 여기서 자신의 아이피가 A 부분의 숫자가 127 이내에 있다면 전부 A 클래스에 속해있다고 말할수 있습니다(255,0,0,0)

B Class

10 (2비트)Net 위해 14비트 할당호스트위해 16 비트 할당

B 클래스는 네트워크를 위해 2바이트를 할당합니다 여기서 2비트는 클래스 인코딩을 위해 사용되고 2비트를 뺀 14비트를 네트워크를 위해 사용되는데 사용가능한 호스트는 2에 16승=65,536 개의 호스트를 가질수 있습니다.
네트워크는 2에 14승 16,384개의 네트워크를 가질수 있습니다.(255,255,0,0)
C Class

110 (3비트)Net 위해 21비트 할당호스트위해 8 비트 할당

위에와 마찬가지이며 호스트를 위해 2에 8승을 하면 256개의 호스트를 가질수있습니다
(255,255,255,0)


A 클래스 범위의 아이피는 이미 미국에서 다 잡았습니다 우리나라의 경우 클래스 C 행태가 많고 A 클래스는 대규모 ,B는 중간규모,C 는소규모의 네트워크에 사용됩니다.
■ 클래스당 네트워크 범위 보기
classRange
A
B
C
D0.0.0.0 ~127.255.255.255
128.0.0.0~191.255.255.255
192.0.0.0~223.255.255.255
224.0.0.0~239.255.255.255
240.0.0.0~247.255.255.255


아이피에 대해서 더 진행하자면
IP주소는 Network ID와 Host ID로 나누어지고 Network ID는 동일 네트워크 를 대표하는 주소이며 Host ID는 개별 호스트의 고유 주소를 나타냅니다.
IP Address의 형식은 4byte, 총 32bit의 길이를 8bit 단위로 묶어서 나타낸다. (1byte=8bit, 8bit 단위=옥텟(octet)) 이를 2진수로 배열할 수도 있고 옥텟으로 묶은 다음 각각을 십진수로 변환해서 나타낼 수도 있다

예제] 203.224.29.56 (10진수)
-> 11001011 11100000 00011101 00111000 (2진수)
이진수가 나오니..뭔가 이상한가? 일일이 계산할필요없다 그냥 윈도우 계산기를 이용하자
계산기에서
공학용을 선택한다. 왼쪽 상단 라디오 버튼 중 ‘Dec’ 를 선택하고, 10진수를 입력한 후 ‘Bin’ 을 선택하면 2진수로 변환한다
혹 교육생중에 이 윈도우 계산기를 삽입했는지 의아해 하는 분이 계실지 모른다.
강사 역시 가급적 글쓰기를 싫어하는 타입이지만 교재 페이지수 채우려고 이미지를 삽입한 것은 아니다.. 분명 이유가 있다..그 이유는 아래에 가면….





네트워크 ID호스트 ID비고
클래스 A최상위 1비트가 항상 0(1 옥텟까지사용)
2^7-2=126 개를 네트워크에 할당나머지 3옥텟
2^24-2=16,777,214127 번은 루프백로 사용함으로서 제외
클래스 B최상위 2비트가 항상 10(2 옥텟까지사용)
2^14-2=16,384 개를 네트워크에 할당나머지 2옥텟
2^16-2=65,534
클래스 C최상위 3비트가 항상 110(1 옥텟까지사용)
2^21-2=2,097,152 개를 네트워크에 할당나머지 1옥텟
2^8-2=254


★주소할당시 주의사항
1) 1) 모든 Network ID와 Host ID의 비트가 1이 되어서는 안된다. 모든 비트가 1로 설정되는 것은 브로드캐스팅으로 받아들여진다. 즉, 255.255.255.255 가 된다.
2) 2) 모든 Network ID와 Host ID의 비트가 0이 되어서는 안 된다. 모든 비트가 0이면 해당 주소는 이 네트워크 전송이라는 의미다. 즉, 0.0.0.0 인터넷 자체를 의미한다
3) 3) 하나의 Network ID 에 대해서는 중복되는 Host ID가 존재할 수 없다
이러한 이유에서 ‘-2’ 를 해주는 것이다
다음은 서브넷 마스크를 보자
subnet mask의 역할
1) IP주소에서 Network ID와 Host ID를 구분
Class A - 255. 0. 0. 0
Class B - 255. 255. 0. 0
Class C - 255. 255. 255. 0

옥텟 단위로 나누어지기 때문에 이 형태로 고정된다.

@목적지 Host의 IP주소가 동일 네트워크상에 있는지 확인
- 자신의IP 주소와 목적지의 IP주소를 서브넷 마스크와 각각 AND bit 연산을 통해서 얻은 결과가 동일하면 Local Network상에 목적지 Host가 존재하는 것이고, 틀리다면 원격 네트워크상에 존재하는 것이다. Local Network상에 존재한다면 ARP Broadcasting을 통해서 목적지 호스트의 하드웨어 주소(MAC Address)를 알아낸 후 데이터를 전달할 것이고, 원격에 존재한다면 기본 게이트웨이(Router)로 보낼 것이다.
다음 그림을 보면서 테스트를 해보자
위의 그림에서 네트워크 1과 2의 서브넷 마스크는 어떻게 될까요?
1은 Class C에 해당하므로 255.255.255.0이고, 2는 Class A에 속하므로 255.0.0.0이 된다는 것을 알 수 있습니다
네트워크 1의 서브넷마스크와 컴퓨터 A의 IP주소와 컴퓨터 B의 IP주소와의 And 연산의 결과는 다음과 같습니다,
A : IP주소 11001011 11100000 00011101 00000101
서브넷마스크 11111111 11111111 11111111 00000000
11001011 11100000 00011101 00000000
B : IP주소 11001011 11100000 00011101 00001000
서브넷마스크 11111111 11111111 11111111 00000000
11001011 11100000 00011101 00000000
è è A와 B의 AND연산결과가 같다는 것을 볼 수 있는데 이는 동일 네트워크상에 존재한다는 것을 의미합니다. A컴퓨터는 ARP브로드캐스팅을 해서 B컴퓨터의 하드웨어 주소를 알아내서 목적지 호스트 B를 찾아가게 됩니다.
- - 서브넷마스크와 C컴퓨터의 IP주소와의 AND연산을 해 보면…
C : IP 주소 01011001 00000000 00000000 00000111
서브넷마스크 11111111 00000000 00000000 00000000
01011001 00000000 00000000 00000000
è è A와 C의 And 연산 결과가 다르므로 이는 다른 네트워크상, 즉 목적지 호스트가 원격 호스트에 존재한다는 것을 의미합니다. 이때 네트워크 A에서는 사용자 컴퓨터 A가 아무리 불러도(브로드캐스팅을 해도) 반응이 오지 않습니다. 그러면 A는 패킷을 라우터에게 넘겨 목적지 호스트의 주소를 찾아오게 합니다





■ 이제 서브넷 구성에 대해서 보자
대부분이 여기서 이해를 하지 못하는 것이 건성으로 글을 읽어서 그렇다
글에 있는 단어하나하나를 되짚으면서 넘어가도록 하자.
Subneting의 정의
일반적으로 단일 네트워크 ID가 할당된 네트워크를 여러 개의 segment로 분할하는 것이다
Subneting의 목적
1) 서로 다른 네트워크 하드웨어를 통합할 수 있다. 동일 네트워크상에서는 서로 다른 유형의 하드웨어 장비 사용이 불가하고 라우터를 이용해서 연결이 가능하다.
EX) 라우터를 통한 Ethernet과 Token Ring의 연결…
2) 브로드케스팅의 문제점을 해결하기 위해서이다.하나의 segment에 너무 많은 호스트들이 존재하면 브로드캐스팅에 의한 트래픽이 많이 발생하는데, 서브네팅을 해서 segment를 분리하면 그만큼 부하를 줄일 수 있다
■ Subneting의 계획
1) 1) 분할할 서브텟 수와 호스트 수를 결정
2) 2) 서브넷 수 + 2(버릴 서브넷)
3) 3) 2)번에서 나온 숫자를 2진수로 변환하여 subnet ID 비트 수 결정
4) 4) subnet ID의 비트 수를 제외한 나며지로 Host ID에 할당 가능한 주소 결정
5) 5) Host ID의 모든 비트가 0 또는 1이 되는 두 개를 버린다.
6) 6) Network ID, subnet ID에 해당하는 비트를 모두 1로 하고, Host ID로 할당된 비트는 모두 0으로 채워서 서브넷마스크를 결정한다.
위의 공식을 달달 외우지 말고 어디 종이에다 적어두는 성의를 보이자.
천재라는것은 머리가 좋은 것이 아니라 메모광이고 어디에 무엇이 있다는 기억의 소유자라는 말이 있듯이…
세계일보는 203.224.3.0이라는 IP Address를 할당받았다. 당연히 서브넷 마스크는 255.255.255.0이라는 것이 쉽게 나올 것이다
<주의!!>
Subneting에 있어서 주의할 것은 Network ID(203.220.3)는 절대 건드지 말고, 뒷부분(0)만 변환해야 한다.
1) 1) 4개의 부서와 각 부서당 30대의 호스트를 할당하고자 한다.
2) 2) 4 + 2 = 6
3) 3) 6을 2진수로 변환하면 110이므로 subnet ID로 3비트가 필요하다


ß-------3비트----------à ß-------------5비트------------------à
0 0 0 0 0 0 0 0 = 0 사용불가(버린다)호스트아이디비트가 모두 0
0 0 1 0 0 0 0 0 = 32
0 1 0 0 0 0 0 0 = 64
0 1 1 0 0 0 0 0 = 96
1 0 0 0 0 0 0 0 = 128
1 0 1 0 0 0 0 0 = 160
1 1 0 0 0 0 0 0 = 192
1 1 1 0 0 0 0 0 = 224 사용불가(버린다) 호스트아이디비트가 모두1




4) 4) 25 - 2 = 30, 각 부서에 30대의 호스트 할당.
5) 5)
Network ID, subnet ID에 해당하는 비트를 모두 1로 하고, Host ID(위에서 5개의 비트)
할당된 비트는 모두 0으로 채워서 서브넷마스크를 결정한다
자 아직도 이해를 하지 못하겠는가?
그럼 얼른 윈도우 내장 계산기를 꺼내서 이진수 11100000 을 10진수로 변환시켜보자
계산기에 바이러스가 걸리지 않는 이상은 분명 244가 나올것이다
이렇게 서브넷 마스크를 계산한다..
강사가 제일 어려워 했던 부분이다 이유는 윈도우 계산기를 사용하라는 사람이 주위에 없었기 때문에….^^
위에서 어느정도 프로토콜에 대한 사용되는 종류와 흐름을 알았으리라 생각된다
여기서 한가지 더 추가할 것이 있다면 랜카드앞에서의 처리이다.
해당 아이피가 자신의 컴퓨터에서 사용되기 위해서는 실제로 ip 주소를 랜카드의 주소(48비트)로 전환을 시킨후 이 MAC 하드웨어 주소를 가지고 패킷을 전달하게 됩니다.
이때 아이피 주소를 mac 주소로 변환해주는 프로토콜이 ARP(address Resolution Protocol)을 사용하고 반대로 랜카드의 하드웨어 주소를 IP 주소로 변환해주는 RARP(Reverse Address Resolution Protocol) 이 있습니다.

대부분의 시스템에서 ARP 로 알아낸 MAC 주소를 캐시에 저장해서 다시 사용하는데 이 캐시를 변조함으로서 서버에게 방금 접속한 호스트인것처럼 위장하는 해킹방법이
ARP Spoofing 입니다.

이제 어느정도 네트워크에서 프로토콜이 어떻게 이용되는가 감이 잡힐것입니다.
일단 DNS 서버에 대한 질의는 TCP 가 아닌 UDP 프로토콜이 이용되며
이더넷 프레임의 구조는 다음과 같이 됩니다.
이더넷 헤더 (14바이트) + IP헤더 (20바이트) + UDP 헤더 20 바이트 +UDP 데이터+이더넷 트레일러 (4 바이트)


그리고 이것이 끝난후 목적지 서버로 갈때는
이더넷 헤더(14바이트) + IP헤더(20바이트) +TCP 헤더 20 바이트+TCP 데이터 + 이더넷 트레일러 4Byte


이렇게 패킷이 구성됩니다.







이제 본론으로 들어가서 보안문제에 대해서 생각해보자
이더넷 하부 네트워크의 문제점
네트워크 개론에서 언급하였지만 이더넷이라는 것은 전송패킷을 전체 세그먼트에 브로딩 캐스트 된다. 즉 브로딩 캐스트 된다는 것은 모든 호스트에 같은 데이터를 동시에 전송하는 것을 말한다 이에 반해서 멀티캐스팅은 여러 호스트에 동시에 전송하는 것은 같으나 선택된 호스트에만 데이터를 전송하는 방식인데 기존의 브로드캐스트 방식을 채택하고 있는 이더넷에서는 다른 컴퓨터에서 이 돌아다니는 패킷을 잡아서 읽을수 있다는데 문제점이 있다

즉 여기서 아이피 스니핑이라는 해킹기법이 발생하게 되는데 엉뚱하게는 관리자를 위해 만들어진 패킷수집기나 네트워크 모니터링 도구가 해커들의 해킹도구로 쓰여진다는데에 큰문제점이 발생하고 있다.
지금과 같이 수많은 곳에서 이더넷 형식을 사용하고 있는 상태에서는 여기에 대한 대응책은 없다고 볼수가 있다 한가지 방안이 있다면 패킷의 암호화 전송 같은 방식을 채택할수 있으나 이것또한 불확실한 면이 있다.

IP 인증체계의 문제점
위에서 언급했듯이 IP 프로토콜은 출발지와 목적지 IP 주소를 가지고 있다. IP 프로토콜의 문제점이라면 부가적인 인증체계를 가지고 있지 않다는 점이고 이를 악용하여 공격자가 도용한 IP 데이터 그램의 출발지 IP 주소를 대상 호스트가 신뢰하고 있는 IP 주소로 도용하였다면 해당 데이터 그램이 변조된것인지 확인할길이 없다는것이다.
이를 이용해서 IP: Spoofing 과 SYN Flooding 기법들이 선보이고 있다.
이를 해결하는 방법은 출발지의 IP 주소가 라우터에서 설정한 신뢰구역의 출발지 IP 주소를 가지고 있는 패킷인가 조사하는 방법이다.

ICMP 의 보안문제
ICMP 타입필드
●Echo Request/Reply: 핑 프로그램이 여기에 속하며 어떤 게이트웨이가 잘 작동하는지 echo 요청을 하면 그 게이트웨이 요청을 받아 echo 응답 source 호스트에게 전달해준다.
●Destination Unreachable: 게이트웨이가 데이터그램을 전송할수 없을 때 도달할수 없는 타입(Unreachable type)으로 ICMP 메시지를 source 호스트에 보낸다. 해당 호스트로 도달하지 않으면 모든 데이터그램은 버려지게 된다.ㅣ
●Redirect(Change a Route):Redirect 는 최적화된 경로를 제공해주는 메시지 타입으로서 게이트웨이는 호스트에 Redirect 메시지를 통하여 라우팅을 바꾸도록 요청한다.

Unreachable Type의 보안문제
Unreachable Type 은 해당 호스트로 데이터가 전송될수 없음을 나타내는 메시지타입니다.
여기서 문제가 되는 것은 도달할수 있는 호스트를 도달할수 없는 것처럼 판단하여 ICMP 프로토콜을 받게 되면 이것을 그대로 신뢰하여 목적지로 가는 네트워크가 끊어진다는것이다.

Redirect의 보안문제
Redirect 는 게이트웨이가 라우팅 경로를 바꾸도록 호스트에게 전달하는 메시지이다.
만약 침입자가 원래의 게이트웨이인것처럼 수소를 속여 목적 호스트에 Redirect 메시지를 보내고 침입자의 호스트로 라우팅하도록 요구하면 목적 호스트른 그대로 속아서 라우팅을 침입자 호스트로 향하게 되고 목적 호스트의 데이터 그램은 침입자의 호스트로 라우팅 된다는 문제점이 발생한다

RIP(Route Information Protocol)
RIP 는 로컬 네트워크에서 라우팅 정보를 알려주는 프로토콜이다 즉 라우팅 정보를 특정 게이트 웨이가 브로드캐스팅하는 형식을 취하여 자동적으로 라우팅 테이블을 갱신할수 있도록 해주는 것이 RIP 의 역할이다.
Rip 를 원리를 이용하여 목적호스트에게 특정 호스트로 라우팅 하라는 거짓딘 라우팅정블 전달할수 있다. 대상 호스트는 그 정보를 입수하여 모든 패킷을 침입자의 호스트로 라우팅하게 되는것이다. 이것또한 아이피 스푸핑 방식으로 정보를 중간에서 가로챌수 있다는 점에서 문제성을 드러내고 있다.
그밖에 여러가지가 있지만 이런것또한 어느정도 고수준의 프로그래밍 능력을 요구하기 때문에 국내 해커들의 현실을 감안한다면 이정도까지 구조체 타입을 변경시키가면서 툴을 제작을 해커는 아직 극소수라 보기 때문에 혹시나 하는 맘에 알고는 있으면 도움이 되리라 생각이 든다..
★.읽을거리..
이 교재를 제작하는 중에 필자가 궁금증이 들어 www.daum.net의 경로를 보았는데
다음과 같이 * 표시가 되어 있는 것이 경로 중간중간마다 방화벽이 있는 것을 보았다
이렇게 해보는 이유는 이러한 도스용 네트워크 프로그램들이 UDP 프로토콜을 이용한다는 것이다.

지나가는 소리….
만약 자신이 해커라면 갑자기 뭔가 흥미진진해지지 않는가?
중간중간마다 방화벽을 체크하고 네트워크 도면을 그린다음 어떻게 방화벽을 우회할까 생각해본다음 각 D 클래스의 아이피를 다 스캔해보고 침투경로를 정하고..물론 요즘은 스캐너 종류가 좋아서 해당 컴이 서버인지 클라이언트인지 또 운영체제 종류하며 여러가지 포트스캔을 통해서 서비스 종류를 알아내고 아스탈라비스타 홈으로 들어가서 그 운영체제에 맞는 익스플로잇 소스를 구하고 ….실력이 된다면 직접 짜도 좋다.
하여간 이런식으로….해커들은 공략서버에 대한 정보스캔부터 시작한다…
이것을 말하는 이유는 위의 네트워크에 대한 어느정도 지식이 수반되어야 툴을 사용한다고해도 쉽게 적응이 되고 또 관리자 입장에서도 모니터링 툴을 사용시 저런 지식이 없는것보다는 낳다는것이다.

■보안에 대한 지식
MS-SQL 설치시 프로토콜 선택화면
기본적으로 TCP/IP 프로토콜을 선택하지만 사실 이것은 Sql 서버 끼리 사용하는 프토토콜을 의미하는것으로 사실 보안을 생각하신다면 선택안하셔도 됩니다
포트는 1433 번을 이용하는데 엔티의 경우 엔티 IIS 에서 다음과 같이 포트를 막으시면SQL연결을 통한DB 유출을 막을수 있습니다.
나머지 운영체제나 프로그램에 대한 보안은 운영체제 보안시간에 다시 자세히 다루도록 하도록 하겠습니다.

저 위에서 이미 익숙한 포트번호가 눈에 들어올것입니다
아마 이렇게 설정한다고 해도 어떤 포트가 어떠한 곳에 쓰인다는 지식이 있어야 이것도 가능할것입니다
아래 대체적으로 많이 사용하는 포트에 대한 목록을 참고하면 좋을것입니다.
■포트목록
Auth(113)
Conference(531)
Courier(530)
Daytime(13)
Discard(9)
Domain(53)->DNS 포트입니다
Echo(7)
Efs(520)
Exec(512)
Finger(79) -> 리눅스에서 사용자에 대한 정보를 얻는 finger 포트입니다
ftp(21) -> 파일전송 프로토콜인 ftp 어플리케이션이 사용하는 포트입니다
hostnames(101)
http(8000)-> 웹에서 사용하는 포트로 이것도 TCP 프로토콜의 변형입니다.
ingreslock(1524)
link(87)
login(513)
mtp(57)
nameserver(42)
netnews(532)
netstat(15)->네트워크 상황을 알아보는 어플리케이션이 사용하는 포트입니다
nntp(119)->뉴스그룹에서 사용하는 포트입니다
pop2(109)
qotd(17)
remotefs(556)
jfe(77)
sftp(115)
shell(514)
smtp(25)->메일을 보낼 때 사용하는 우편 프로토콜입니다.
spooler(515)
sunrpc(111)
supdup(95)
systat(11)
telnet(23)-> 텔넷이 사용하는 포트입니다.
tempo(526)
time(37)
uucp(540)
uucp-path(117)
whois(43)->도메인 등록기관에 사용자에 대한 정보를 알아볼 때 사용하는 포트입니다.





■도스에서 할수 있는 네트워크 점검 도구들
◎ ping : 패킷을 보낸 후 되돌아 오는 시간이 얼마나 걸리는지 체크해 주는 프로그램.

사용법 : ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] destination-list

-t : Ping the specified host until stopped.
(특정한 호스트를 멈출 때까지 핑한다)

-a : Resolve addresses to hostnames.
(주소로부터 호스트 이름을 푼다)

-n count : Number of echo requests to send.
(count만큼 echo한다)

-l size : Send buffer size.
(보낼 버퍼사이즈 지정)

-f : Set Don't Fragment flag in packet.
(패킷에 '조각내지 않음' 플래그를 지정합니다)

-i TTL : Time To Live.
(수명)

-v TOS : Type Of Service.
(서비스 종류)

-r count : Record route for count hops.
(계수 홉의 경로를 기록)

-s count : Timestamp for count hops.
(계수 홉의 시간 기록)

-j host-list : Loose source route along host-list.
(호스트 목록에 따른 대강의 원본 경로)

-k host-list : Strict source route along host-list.
(호스트 목록에 따른 정밀한 원본 경로)

-w timeout : Timeout in milliseconds to wait for each reply.
(호스트 목록에 따른 정밀한 원본 경로)
실습…………..

◎NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [interval]

-a Displays all connections and listening ports.
모든 접속과 모든 포트를 보여준다.

-e Displays Ethernet statistics. This may be combined with the -s
option.
이더넷 통계를 보여준다. 이것은 -s 옵션과 결합해 사용할 수 있다.

-n Displays addresses and port numbers in numerical form.
숫자 형식으로 주소와 포트 넘버를 보여준다.

-p proto Shows connections for the protocol specified by proto; proto
may be TCP or UDP. If used with the -s option to display
per-protocol statistics, proto may be TCP, UDP, or IP.
proto에 의해 분류된 프로토콜의 접속을 보여준다.

-r Displays the routing table.
라우팅 테이블을 보여준다.

-s Displays per-protocol statistics. By default, statistics are
shown for TCP, UDP and IP; the -p option may be used to specify
a subset of the default.
프로토콜별 통계를 표시한다. 기본값으로 TCP, UDP, IP의
통계가 표시된다. 디폴트로 TCP, UDP, IP를 보여준다.

-p 옵션은 기본값의 서브셋을 지정하는데 사용될 수 있다
실습…………..


◎ NET 명령
NET HELP 명령과 오류 메시지에 대한 정보를 표시합니다.
NET INIT Protocol Manager에 네트워크 어댑터 드라이버를 바인딩하 지 않고 로드합니다.
NET LOGOFF 사용중인 컴퓨너와 이 컴퓨터가 연결된 공유자원 사이의 연결을 해제합니다.
NET LOGON 작업 그룹 구성원으로 식별합니다.
NET PASSWORD 로그온 암호를 변경합니다.
NET PRINT 인쇄 대기열 정보를 보여주고 인쇄 작업을 컨트롤합니다.
NET START 서비스를 시작합니다.
NET STOP 서비스를 중지합니다.
NET TIME 시스템 시간을 보여주거나 Microsoft Windows for Workgroup, Windows NT, Windows 95, NetWare 시간 서버의 시간에 시스템 시간을 맞춥니다.
NET USE 공유 자원에 연결하거나 연결 해제하며 또는 연결에 대한 정보를 표시합니다.
NET VER 사용 중인 작업 그룹 리디렉터의 종류와 버전 번호를 표시합니다.
NET VIEW 리소스를 공유하고 있는 컴퓨터 목록이나 특정 컴퓨터에 있는 공유 목록을 표시합니다.

실습…………..
●ARP
주소분석 프로토콜(ARP)에 사용되는 IP 실제 주소 번역표를 표시하고 수정합니당.

-a 현재 프로토콜 테이저를 쿼리하여 현재ARP 항목을 표시합니당.
INET_ADDR가 지정되면 지정한 컴퓨터의 IP 및 실제 주소만 표시됩니다
하나 이상의 네트워크 인터페이스에 ARP를 사용하면 각 ARP표의 항복들이 표시됨니당
-g "-a"와 같습니당
-N 지정하는 네트워크 인터페이스의 ARP항목을 표시합니당
-D 지정하는 호스트를 삭제 합니다
-S 호스트를 추가하고 INET_ADDR을 실제 주소 ETH_ADDR과 연결하니다. 실제주소는 하이픈으로 분리되는 6개의 8진수 바이츠로 표시됩니다. 항목은 영구적입니다.
ETH_ADDR 실제 주소를 지정합니당
IF_ADDR 있는 경우 주소 번역표가 수정되어야 하는 인터페이스의 인터넷주소를 지정합니다. 업는 경우 첫번째 응용 인터페이스가 가용됩니다.

ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr]


실습…………..
Nbtstat 명령
이 진단 명령은 NBT(TCP/IP 상의 NetBIOS)를 사용하여 프로토콜 통계와 현재 TCP/IP 연결을 표시합니다. 이 명령은 TCP/IP 프로토콜을 설치해야만 사용할 수 있습니다.
nbtstat [-a remotename] [-A IP address] [-c] [-n] [-R] [-r] [-S] [-s] [interval]
매개 변수
-a remotename
컴퓨터 이름을 사용하여 원격 컴퓨터의 이름표 목록을 표시합니다.
-A IP address
컴퓨터의 IP 주소를 사용하여 원격 컴퓨터의 이름표 목록을 표시합니다.
-c
각 이름의 IP 주소를 제공하는 NetBIOS 이름 캐시의 내용을 목록으로 표시합니다.
-n
로컬 NetBIOS 이름의 목록을 표시합니다. Registered는 브로드캐스트(B노드)나 WINS(다른 노드 형식)에 의해 이름이 등록되었음을 나타냅니다.
-R
NetBIOS 이름 캐시에서 모든 파일을 정리한 후에 Lmhosts 파일을 다시 로드합니다.
-r
Windows 네트워킹 이름 확인을 위해 이름 확인 통계 목록을 표시합니다. WINS를 사용하도록 구성된 Windows 2000 컴퓨터에서 이 옵션은 브로드캐스트나 WINS를 통해 확인되거나 등록된 이름의 개수를 반환합니다.
-S
IP 주소만 사용하여 원격 컴퓨터의 목록을 나타내는 방식으로 클라이언트와 서버 세션을 모두 표시합니다.
-s
클라이언트와 서버 세션을 모두 표시합니다. 이 스위치는 Hosts 파일을 사용하여 원격 컴퓨터 IP 주소를 이름으로 변환하려고 시도합니다.
interval
선택한 통계를 다시 표시하고 각 지연 시간 사이에 interval초 동안 멈춥니다. 통계를 다시 표시하지 않게 하려면 Ctrl+C를 누릅니다. 이 매개 변수를 생략하면 nbtstat는 현재 구성 정보를 한 번만 표시합니다.

실습…………..




Tracert 명령
이 진단 유틸리티는 대상에 대해 다양한 TTL(Time-To-Live) 값으로 ICMP(Internet Control Message Protocol) 에코 패킷을 보내 대상으로 가는 경로를 결정합니다. 경로 상의 각 라우터에서 패킷을 전달하기 전에 최소한 패킷의 TTL을 1만큼 줄여야 홉 수 계산에 TTL이 효과를 낼 수 있습니다. 패킷의 TTL이 0에 도달하면 라우터에서 ICMP 시간 초과 메시지를 원본 시스템으로 돌려 보낸다고 가정합니다. Tracert는 대상이 응답하거나 최대 TTL에 도달할 때까지 1의 TTL을 가진 첫째 에코 패킷을 보내고 이어지는 각 전송에서 TTL을 1씩 증가시켜 경로를 결정합니다. 경로는 중간 라우터들에서 반송한 ICMP 시간 초과 메시지를 검사하여 결정됩니다. 그러나 일부 라우터는 TTL 값이 만료된 패킷을 제거하기 때문에 tracert에서 볼 수 없습니다.
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
매개 변수
-d
주소를 컴퓨터 이름으로 풀지 않도록 지정합니다.
-h maximum_hops
대상을 검색할 최대 홉 수를 지정합니다.
-j computer-list
computer-list를 따라 신축적 원본 경로를 지정합니다.
-w timeout
timeout에 지정된 밀리초 동안 응답을 기다립니다.
target_name
대상 컴퓨터의 이름

Nslookup
이 진단 도구는 DNS(Domain Name System) 이름 서버로부터 정보를 표시합니다. 이 도구를 사용하기에 앞서 DNS의 동작 원리를 잘 알고 있어야 합니다. nslookup은 TCP/IP 프로토콜이 설치되어 있어야 사용할 수 있습니다.
모드
Nslookup에는 대화식 및 비대화식의 두 가지 모드가 있습니다.
데이터의 일부만 보려면 비대화식 모드를 사용합니다. 첫째 인수로 조회할 컴퓨터 이름이나 IP 주소를 입력합니다. 둘째 인수로 DNS 이름 서버 이름이나 IP 주소를 입력합니다. 둘째 인수를 생략하면 기본 DNS 이름 서버가 사용됩니다.
둘 이상의 데이터를 조회할 필요가 있으면 대화식 모드를 사용합니다. 첫째 인수에는 하이픈(-)을 입력하고 둘째 인수에는 DNS 이름 서버의 이름이나 IP 주소를 입력합니다. 인수를 모두 생략하면 기본 DNS 이름 서버가 사용됩니다.
nslookup [-option ...] [computer-to-find | - [server]]
매개 변수
-option ...
하나 이상의 nslookup 명령을 명령줄 옵션으로 지정합니다. 명령 목록은 Nslookup 하위 명령을 참조하십시오. 각 옵션은 하이픈(-) 다음에 바로 명령 이름과 값을 사용하여 구성합니다. 하이픈(-) 대신 등호(=)를 사용하는 경우도 있습니다. 예를 들어, 기본 쿼리 형식을 호스트(컴퓨터) 정보로 변경하고 초기 시간 제한을 10초로 변경하려면 아래와 같이 입력합니다.
nslookup -querytype=hinfo -timeout=10
명령줄 길이는 256문자를 넘어서는 안됩니다.
computer-to-find
현재의 기본 서버나 server를 지정한 경우 이 서버를 사용하여 computer-to-find의 정보를 조회합니다. computer-to-find가 IP 주소이고 쿼리 형식이 A나 PTR이면 컴퓨터의 이름이 반환됩니다. computer-to-find가 이름이고 뒤에 마침표가 없으면 이 이름에 기본 DNS 도메인 이름이 추가됩니다. 이 작동은 domains, srchlist, defname 및 search와 같은 set 옵션 상태에 따라 다릅니다.
현재 DNS 도메인에 없는 컴퓨터를 찾으려면 이름에 마침표를 추가합니다.
computer-to-find 대신 하이픈(-)을 입력하면 명령 프롬프트가 nslookup 대화형 모드로 변경됩니다.
server
이 서버를 DNS 이름 서버로 사용하도록 지정합니다. server를 생략하면 기본 DNS 이름 서버가 사용됩니다.
실습…………..

출처 : Tong - 대한민국에 안되는게 어딨어님의 컴119통