윈도우키+R을 누르면 실행창이 열린다. 여기에 CMD를 입력하자. 그리고 ipconfig 라는 ip를 입력하면 자신의 아이피가 보일 것이다.





IPv4 주소가 현재 인터넷 ip주소인 것이다. 하지만 여기서 192.168로 시작하는 IP주소는 가상의 IP 주소이다.
공인 IP주소가 아닌 사설 IP 주소라는 뜻이다. 
이게 무슨말이냐면 공인 IP주소를 받아와서 흔히 말하는 공유기를 거쳐 나오는 IP라는 뜻이다.

사설 IP로는 인터넷을 할 수 없다. 하지만 우리는 저 IP로 인터넷을 할 수 있는데, 그 이유는 공유기에 NAT가 있기 때문이다.
NAT는 네트워크 주소 변환으로 사설 IP를 공인 IP로 바꿔주는 기능을 한다. 
그렇다면 나의 공인 IP는 어떻게 알 수 있을까?

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%82%B4+IP%EC%A3%BC%EC%86%8C


이곳에 들어가면 나오는 IP가 나의 공인 IP 주소인 것이다.

여기에 나오는 나의 아이피를 
https://whois.kisa.or.kr/kor/main.jsp


이곳에 들어가 입력하면 나의 IP를 할당해준 기관이 나온다.
왜 자세한 위치는 안나오고 기관만 나올까? 
개인정보 보호 때문이다. 만약 이 IP로 사이버 범죄를 저질렀을 때, 할당된 기관을 확인하여 수사 의뢰를 하면 그 기관에서 나의 정보가 넘어갈 것이다. 그래서 일반인은 자세한 정보를 알 수 없다.

114.232.118.96 라는 IP로 검색을 해보자 . 좀 더 자세하게 나온다. (해킹 연습을 할때 쓰는 IP로 알고 있음)

어떠한 도메인 사이트에 서버 위치가 어디에 있는지도 알 수가 있다.
방법은 CMD 창에서 nslookup을 쓰는 방법인데 아래에서 살펴보자.










nslookup www.snu.ac.kr 
이것은 서울대학교의 도메인 주소이다. nslookup을 쓰고 서울대 도메인을 쓰면 
kaku2.snu.ac.kr의 이름으로 147.46.10.58의 주소가 나온다.

이것을 위에 알려준 한국인터넷 진흥원에 입력하면 서울대학교 정보화본부 라는 대략적인 정보를 알 수 있다.

만약에 누군가 해킹을 한 흔적(패킷)이 발견되어서 위와같이 위치를 알아서 경찰이 출동했다고 하자.
그사람에게 해킹했다는 완벽한 증거를 알아내야 한다. 공공장소라면 똑같이 사설IP를 할당받을 수도 있다.
그래서 그 IP를 사용하는 사람을 채포하려고 하자 자기는 하지 않았다고 한다. 
이와 같은 상황에는 어떻게 해야할까.

일단 사설IP를 할당하는 장비로 가서 패킷을 확인한다. (패킷 확인을 위해 WireShark를 사용해보자)





이와같이 의심되는 패킷을 찍어서 2계층 (Ethernet II) 부분에 Src (출발지) Dst(목적지) 의 모자이크 된 부분으로 MAC주소를 확인할 수 있다.

MAC주소란 컴퓨터에 할당된 고유의 주소로 컴퓨터 지문이라고 생각하면 편하다. 만약 이 MAC주소로 방금 해킹한 사람의 노트북에 있는 MAC와 비교하여 일치할 경우 유력한 용의자가 될 것이다. IP주소도 같고, MAC도 같은데 발뺌을 한다고 하면
"나는 280조분의 1 확률로 재수가 없는 사람입니다." 라고 말하는 꼴이다. MAC주소가 겹칠 확률은 280조분의 1이다.

아무리 유능한 해커라도 패킷을 숨길 수는 없다.


Nmap 포트스캔에 대해 와이어샤크로 알아보도록 해보겠습니다.
적절한 ip는 그냥 토토사이트 광고오는 도메인주소를 nslookup 하셔서 나오는 ip에 하도록 하겠습니다.
포트스캔에 종류에는 여러가지가 있습니다. 상대방이 어떤 포트가 열려있는지 확인하는 것이죠
tcp는 기본적으로 3핸드-쉐이킹 방법으로 연결을 하는데 이것을 이용한 방법입니다.
공격자가 사용하면 어떤 포트로 공격할지 준비를 하는거고 보안가가 사용하면 취약점을 진단하는 용도로 쓰입니다.



1.Open Scan
칼리에서 명령어는 nmap -sT [IP] 이다






다음과같이 일반적으로 포트에 신호를 주고 3핸드쉐이킹을 한다.







닫힌포트에는 [RST,ACK]가 오는것을 알 수 있다.



2.Half Open Scan
명령어는 nmap -sS [IP] 이다. 특정 포트에 주고싶으면 -P [포트번호] 하면 된다.







열린 포트에는 연결이 이루어 지지않게 끊어버리는것을 볼 수 있다.







닫힌포트는 똑같이 [RST,ACK]가 온다.






2.스텔스스캔
스텔스스캔은 IDS/IPS에 탐지되지 않기위해 쓴다. 정상 연결이 아니고 플래그를 보내고 기다리는 형태이므로 정확하지 않을 수 도있다. FIN , ACK , 또는 플래그가없는 패킷을 보내면 열려있는 포트는 응답이 없고 닫힌 포트는 [RST]를 보낸다.
ACK는 -sA
FIN은 -sF
NULL은 -sN 이다.






셋다 RST를 보낸다고 닫혀있는 포트라 생각하면 안된다.
스텔스스캔은 숨어있는 포트를 찾기에 적절하다.







nmap -sA -P0 -p [포트범위처음-포트범위마지막] [IP]
으로 22000번 포트가 열려있다는 것을 추측할 수 있다.

3.Xmas Scan
모든 플래그를 올려서 보내는 방법이다.
위에 설명과 비슷하다.

4.UDP Scan
-sU 명령어를 사용한다. UDP는 열려있으면 아무런 응답이없고 닫혀있으면 ICMP로 핑이 온다
"Destination Unreachable"






그외에 -T (1~5)까지로 포트스캔의 시간을 조정하는 방법도 있다.


와이어샤크를 킨 후에  한국 인터넷진흥원에 접속합니다.







너무많으니까 HTTP로 필터를 주고 GET표시난것 클릭하셔서 URI가 kisa.or.kr 인 패킷에 오른쪽 클릭을 합니다.
그리고 Follow ->TCP Stream 을 하면 그 패킷의 흐름만 볼 수 있습니다.
그런식으로 아무 사이트에 접속을 해봅시다.






1. 클라이언트 -> 서버 에게 SYN 을 보냅니다.
2. 서버->클라이언트 SYN,ACK를 보냅니다
3. 클라이언트->서버 에게 ACK를 보냅니다.
이로써 클라이언트와 서버간에 연결이 되었습니다. 이 연결을 3핸드 쉐이킹이라고 합니다.







cmd에서 netstat -an 을 입력하면 현재 연결되어있는 ip와 포트를 확인할 수 있습니다.
ESTABLISHED라고 나온것이 연결되어 있는 것입니다.







밑에 UDP연결들은 보시면 내것만 나와있고 상대편것은 나와있지 않습니다. 이렇게 UDP는 누가 들어와도 상관하지 않습니다. 3핸드쉐이킹을 하지 않아서 완벽한 연결이 없습니다.











다시보면 
4.HTTP (웹페이지)를 GET 하는 명령을 서버에게 보냅니다.
5.서버는 ACK로 알겠다고 응답합니다.
6.서버가 전송을 시작합니다. 이때 패킷이 클때 단편화를 하며 보내는데 Ack=537이 되어있는 것은 하나의 패킷을 단편화 한 것입니다. 








Seq Number는 1 응답하면서 +1 응답을 한다하고 1로 되었고
ack는 537입니다. 이제 다음 sequence number는 1에 TCP Segment Len을 더한 1461입니다. 
다음 패킷을 보면








Sequence number가 1461인것을 볼 수 있고. 그다음 Seq num은 1461+1460인 1921인것을 알 수있습니다. ACK=537 이므로 전에 패킷과 하나의 덩어리라는 것입니다.
계속 보내다가








IP 192(클라이언트)는 14(서버)에게 중간중간에 seq 537번 (서버에겐 ack=537입니다)
에 있는 자료 2921번까지 잘 받았다. 라는 응답을 합니다. 이것은 지정된 시간에 보내도록 한 약속입니다. 중간중간에 확인체크가 잘 되면








서버는 클라이언트에게 다시 전송을 시작합니다.(2921부터 다시 시작)








중간중간 Flag에 ack말고 Push가 1로 올라온 경우가 있습니다 [PSH,ACK]
이것은 중간중간 데이터버퍼가 쌓이면 다음계층으로 보내는 역할을 합니다.
데이터 모아뒀다가 어느정도 쌓이면 다음으로 보내고, 다시 모아두면 보내고 하는 역할을 PSH가 합니다.









그리고 클라이언트가 서버에게 TCP Window Update라는 패킷을 보내는데 이것은 버퍼가 얼마나 남았는지 많은지 적은지를 보내주고 남은 크기에따라 서버가 보내는 속도를 조절하면서 합니다.
이것이 흐름제어 이고 슬라이딩 윈도우 기법입니다.








이 패킷 아래에 설명을 보시면 
[Calculated windo size: ---] 가있는데 이것이 0이면 보내는 것을 중단합니다.







이렇게 전송을 다하면 
1.서버는 클라이언트에게 다보냈다는 OK사인을 보내고
2.클라이언트는 서버에게 ACK 사인을 보내고 
3.TCP Window 사이즈를 보내주고 혹시 남아있는 패킷을 위해 잠시 기다립니다.
4.그리고 [FIN,ACK]사인을 보내고 연결의 종료를 알려줍니다
5.[ACK]를 서버는 보내주고 연결이 종료됩니다.
이와같이 전송완료/종료(서버)->알겠음(클라이언트)->잠깐기다림->종료확인(클라이언트)->서버(확인)
하는 것을 '우아한 종료' 라고 합니다.








[FIN,ACK] 패킷에 FIN Flag가 올라온 모습입니다


UDP는 User Datagram Protocol 입니다.
TCP랑은 다르게 대충~ 하는 성격을 가져서 데이터의 속도만 중요시한 프로토콜입니다.
비 신뢰성, 비 연결지향성, 최소화된 Header로 
재 전송 시 빠른 처리를 위하여 작은 단위로 데이터를 생성합니다.
단편화 크기는 512byte로 작습니다.

빠른 통신 속도가 필요한 서비스에 적합합니다 ->실시간 통신, 음성 서비스 등






출발지 주소 / 목적지 주소 /길이 / 체크썸 으로 간단한걸 알 수 있습니다.
WireShark로 UDP를 볼 수 있는 가장 쉬운 방법은 바로










nslookup 으로 아무 도메인이나 친 후에
WireShark로 가서 필터에 dns 를 쓰고 확인해봅시다.






4번째 UDP를 보면 소스포트/ 데스티네이션포트/길이/첵썸 을 알 수 있습니다.





ip 헤더입니다. 와이어샤크를 키고 cmd로 가서 
구글(8.8.8.8)에 ping을 보내봅시다.







ip니까 3계층을 봐야합니다. Internet Protocol Verison 4, ~~를 클릭해 봅시다.











가장 처음에 나오는 것 0100 0101 입니다 .
-앞에 0100은 Version 4를 의미한다고. 와이어샤크가 알려줍니다.
-뒤에 0101 은 헤더길이 (IHL) 입니다.
-Differntiated Services Field는 8bit이고 패킷의 우선순위를 지정해줍니다. 0값이니 일반입니다.
-Total Length는 60인 것을 보니 60바이트 인것을 알 수 있습니다.
-Identification: 이것은 큰 바이트의 값을 보낼때 단편화라는 작업을 하게되는데 Flags와 같이 설명하겠습니다. 
cmd를 켜시고 
ping 8.8.8.8 -l 30000 
명령어를 보내면 google에 3만바이트짜리 핑을 보냅니다. 그리고 와이어샤크를 확인해봅니다.







이렇게되면 단편화를 하여 핑을 보내는데 Identification은 단편화 되었을때, 잘게 잘라졌을때 같은것 끼리 같은값을 가지게 됩니다. 뒤에 Flags도 와이어 샤크가 알려주듯이
마지막 more fragments가 set 되어있는걸로 보아 뒤에 더 값이 있는것을 알 수 있습니다.
단편화의 마지막 조각은 저 값이 0으로 되어있습니다.

-TTL은 라우터를 거쳐갈때마다 1개씩 감소하는 값으로 길을 찾지못해 빙빙도는 패킷이 발생할 때 네트워크 성능이 저하되는것을 방지할 수 있는 기능입니다. TTL이 0이 될때 라우터는 패킷의 시체를 담아서 발신지로 보내줍니다.
-Protocol 은 프로토콜 종류를 알려줍니다. ping이므로 ICMP입니다.
-checksum은 오류가 있는지 확인하는 코드입니다.
나머지 소스는 출발지 데스티네이션은 목적지 입니다.

이처럼 와이어샤크를 이용하면 헤더에 따라 분석하는것이 가능합니다.
원래는 다 이진수로 표현되어 있는것을 와이어샤크가 보기쉽게 분석해주는 역할을 합니다.


cmd에 가서 netstat -nr 을 치면 나오는 테이블입니다.
LAN을 벗어나 WAN으로 가고 MAN으로 가려면, 또는 멀리있는 컴퓨터와 통신을 하려면 수많은 라우터를 거치게됩니다. 이들은 어떻게 찾아가는 걸까요? 
저의 ip는 192.168.25.18 입니다.

IPv4경로 테이블에서 계산하는 방법은 간단합니다.
내가 '원하는 목적지의 ip 주소'와 저기 나오는 테이블의 '네트워크 마스크' 와 AND 연산을 하여서
그 계산값이 '네트워크 대상'값과 일치하면 안내를 받으면 됩니다.

계산을 맨 아래부터 시작합니다. 
만약 제가 192.168.25.22와 통신을 하고싶다면 어떻게 해야할까요
맨 아래부터 계산을 합니다.

192.168.25.22 와 255.255.255.255의 2진수 계산값은 192.168.25.22 입니다. 
255.255.255.255가 아니므로 일치하지 않습니다. 위로올라가서

192.168.25.22 와 240.0.0.0의 AND 값은 224.0.0.0이 아니고
192.0.0.0 입니다. 역시 일치하지 않습니다.






결국 일치하는 값을 찾을 수있는데 바로

255.255.255.0과 AND연산을 하고 '네트워크 대상'값이 192.168.25.0인

이것이죠. 게이트웨이의 값이 '연결됨'이므로 다이렉트로 연결되었다는 뜻입니다.
같은 LAN라는 뜻이죠.

이렇게 되면 밖으로 나가는 라우터를 거칠 필요 없이 대상의 MAC만 알면 통신이 가능합니다.
같은 LAN상에 있기 때문이죠.

MAC은 어떻게 아냐구요?
ARP Cache Table을 확인해서...없으면 ARP를 보내고... (전에 포스팅 했습니다.)

하나 더해봐서 만약 1.2.3.4와 통신을 하고싶다면 어떻게 해야 할까요.
아마 계산을 해보면 맨위에있는
0.0.0.0 / 0.0.0.0 과 일치하겠네요.
이 값을 디폴트 라우팅 값이라고 합니다.
테이블 맨 위에 있기때문에 마지막에 연산해서 아무것도 일치하지 않는경우 
옆에 써져있는 게이트웨이 주소로 가면 되는겁니다.

그럼 우리는 1.2.3.4와 통신하고 싶으면 게이트웨이 192.168.25.1로 우선 안내를 받죠.
그렇게 나가면 안내를 받은 곳에서 또 테이블을 찾아서 다른곳으로 안내를 받고 
최종적으로는 1.2.3.4에 도착할 수 있는 겁니다.


CIDR은 Classless Inter Domain Routing 으로 서브넷팅을 할때 좀 더 편하게 
한눈에 알아볼 수 있게 하는 방법이다.

만약 206.10.9.0 라는 ip address와 255.255.255.128이라는 subnetmask가 주어졌다면
계산을 할텐데 <편의상 마지막 옥텟만 2진수로 씁니다>
-표의 3번째 칸은 AND 연산을 한 값

206
10
9
0000 0000(0)
255
255
255
1000 0000(128)
206
10
9
0000 0000(0)

계산이 이렇게 됩니다. 그러면 ip는 두가지 영역으로 분리됩니다.
206.10.9.0 ~ 206.10.9.127
206.10.9.128 ~ 206.10.9.255


이것은 각각 2^7 -2 개의 ip를 할당할수 있는 두개의 영역을 나누어 진 것이고. 따라서
207.10.9.0/25 라고 표현을 합니다. 
그냥 쉽게 서브넷 마스크의 연속된 1의 갯수라고 생각하면 됩니다.
여기서 따로 Subnetmask로 표현을 하지 않고 옆에 /25같은 방법으로 나누는 것을 CIDR이라고 합니다.


VLSM은 가변길이 subnetmask이다.

만약 회사에서 ip를 할당하는데 
120 /50/ 25/ 5 로 할당 해야한다면 이걸 내가 할당받은 ip내에서 반만으로 쪼갤수는 없을 것이다.
따라서 VSLM을 쓰는데 방법은 다음과 같다.

만약
120 / 50 / 25/ 5를
211.20.115.0의 IP로 나눈다고 해보자. (편의상 마지막 옥텟만 2진수로 한다.

211.20.115.                                      0
000 0000 ->NET
255.255.255.1000 0000(128) 
-subnet mask 
111 1111 -> BC
2^7 -2개 까지 할당가능 (126개)
                                                           1
0
00 0000 ->NET
255.255.255.1100 0000(192)
                                                           1
0
11 1111 ->BC
2^6 -2 개 까지 할당 가능 (62개)
                                                           1
1
0
0 0000->NET
255.255.255.1110 0000(224)
                                                           1
1
0
1 1111->BC
2^5-2개 까지 할당 가능 (30개)
                                                           1
1
1
0 0000->NET
255.255.255.1110 0000(224)
                                                           1
1
1
1 1111->BC
2^5-2개 까지 할당 가능(30개)

NET -> network address
BC -> 브로드캐스트 


이와같이 서브넷 마스크를 다시 서브넷 하여 가변길이로 만들어줘서 좀 더 ip낭비를 줄이는것을 VLSM이라고 한다.


'네트워크<구축,해킹,보안> > 개념,WireShark' 카테고리의 다른 글

Routing Table이란?  (0) 2018.01.31
CIDR이란 무엇인가?  (0) 2018.01.31
SubnetMask  (0) 2018.01.31
Network Class란 무엇인가?  (0) 2018.01.31
WireShark 패킷분석  (0) 2018.01.31

클래스로만 네트워크를 나누기엔 네트워크가 너무 낭비된다.
그래서 더 효율적이고 잘게 쪼게기위해 서브넷마스크를 이용한다.

10.0.0.0 인 네트워크 주소가 있다고 하고 서브넷마스크가 255.128.0.0이라고 생각하자
2진수로 변환하면

0000 1010 . 0000 0000 . 0000 0000 . 0000 0000 -ip address
1111 1111 . 1000 0000 . 0000 0000 . 0000 0000 -subnet mask
-----------------------------------------------------------------  AND연산
0000 1010 . 0000 0000 . 0000 0000 . 0000 0000 -새로나온 ip address

서브넷 마스크는 왼쪽부터 채워지며 1인부분을 비트를 정해줘서 내려준다. 

저렇게 내려주면 2개의 subnet이 만들어진다. 
0000 1010 . 0000 0000 . 0000 0000 . 0000 0000 부터
0000 1010 . 0111 1111 . 1111 1111 . 1111 1111 까지

0000 1010 . 1000 0000 . 0000 0000 . 0000 0000 부터
0000 1010 . 1111 1111 . 1111 1111 . 1111 1111 까지



10진수로 변환하면 
10.0.0.0 -ip address 
~ 10.127.255.255 -브로드캐스트 주소

10.128.0.0 - ip address
~ 10.255.255.255 - 브로드캐스트 주소







할당 가능한 ip는 서브넷 전에 2^24 -2 개가 있었지만 1개가 더 정해져서 내려왔기 때문에 2^23 -2 개이다. 
여기서 2를 빼는 이유는 '할당가능' =사용가능한 아이피이므로 2개를 빼준다
아이피 범위중 가장 맨처음에 있는 ip는 쓸 수 있는 ip가 아니고 그 ip를 나타내는 대표적인 주소이다.
맨 마지막 주소는 브로드캐스트 주소이다.
브로드캐스트 주소는 영역에 있는 모든 ip에게 방송을 하는 주소이다. 쓸 수 있는 ip가 아니다.
그러므로 맨앞, 맨뒤 2개의 ip는 할당 가능하지 않은 ip이다.

만약 ip가 필요해서 ip를 신청했는데 쪽지 하나가 왔다
192.168.10.0
255.255.255.0

2진수로 해서 계산을하면 
192.168.10. 0부터 192.168.10.255 까지 할당가능한 2^8-2 개의 아이피를 받은것 이다.

192.168.10.128
255.255.255.192로 내려오면

192.168.10.128~ 192.168.10.191 까지의 ip가 할당된 것이다.
서브넷 마스크가 192면 마지막 옥텟이 1100 0000 이므로
2^2 개의 네트워크 영역을 나눌 수 있다.



'네트워크<구축,해킹,보안> > 개념,WireShark' 카테고리의 다른 글

Routing Table이란?  (0) 2018.01.31
CIDR이란 무엇인가?  (0) 2018.01.31
VLSM이란 무엇인가?  (0) 2018.01.31
Network Class란 무엇인가?  (0) 2018.01.31
WireShark 패킷분석  (0) 2018.01.31

세상에는 수많은(43억개) IP가 있지만 우린 그 IP를 다써간다. IP v4 가 우리가 일반적으로 쓰는 ip이고 사람들의 왕래가 적은 IPTV 같은  기기들에 IP v 6를 써가는 추세이다.
<KISA의 중요사업중에 IPv6주소 전환/확산이 있다>

예전에는 그냥 대~충 잘라서 나눠줬으면 됐지만 요즘은 ip가 너무나 부족한게 현실이다.

ip는 총 이진수로 된 24비트이다.
x . x . x. x 인데 각 x를 옥텟 이라고 부른다.

ip의 클래스는 첫번째 옥텟에 표기된다.
0으로 시작하면 A클래스
10로 시작하면 B클래스
110 은 C클래스
1110은 D클래스
1111은 E클래스이다.

무슨말이냐고?
구글의 ip 주소는 8.8.8.8 이다
이걸 2진수로 변환하면
0000 1000 . 0000 1000 . 0000 1000. 0000 1000 이 되겠다.
2진수로 변환된 IP를 보고 맨 앞 옥텟의 0을 보자마자
아! A클래스구나 하면 된다.






만약 
220.48.1.252 라는 IP 주소는 클래스가 뭘까?
바로 2진수로 바꿔본다.
1101 1100.0011 1000. 0000 0001. 1111.1100

앞에서 110이네? =C클래스. 
A클래스는 국가단위 B클래스는 기업단위 C클래스는 조직단위
X(1). X(2). X(3). X(4) 에서 클래스마다 네트워크 ID와 호스트 ID로 나눈다.
A클래스는 X(1) 이 NET / X(2,3,4)가 HOST ID이다. 네트워크 ID는 총 2^8개 HOST ID는 2^24개
B클래스는 X(1,2) 이 NET ID / X (3,4)가 HOST ID이다. 네트워크 ID는 총 2^16개 HOST ID는 2^16
C클래스는 X(1,2,3)이 NET ID / X(4)가 HOST ID이다.



'네트워크<구축,해킹,보안> > 개념,WireShark' 카테고리의 다른 글

Routing Table이란?  (0) 2018.01.31
CIDR이란 무엇인가?  (0) 2018.01.31
VLSM이란 무엇인가?  (0) 2018.01.31
SubnetMask  (0) 2018.01.31
WireShark 패킷분석  (0) 2018.01.31

+ Recent posts