1. MITM( Man In The Middle )


MITM 공격은 글자 그대로 누군가의 사이에 끼어드는 것이다. 

클라이언트와 서버의 통신에 암호화된 채널을 이용하게 되면서 등장했다.

MITM은 전달되는 패킷의 MAC 주소와 IP 주소 뿐만 아니라 패킷의 내용까지 바꿀 수 있다.

네트워크 통신을 조작하여 내용을 도청하거나 조작하는 공격


* CAUTION

프로토콜 취약점을 이용한 공격으로 현재까지도 카페, 도서관 등의 공공장소에서 공격이 가능하다

ARP 스푸핑 공격만으로도 범죄다.

절대 공공장소에서 테스트하지 말고 가상환경에서 테스트해야 한다.


MITM 공격 방법은

ARP 스푸핑 공격을 하면서 Packet 포워딩을 하는 것이다.


필자는 ettercap 툴과 etterfiler 툴을 이용한다.


kali linux 터미널창을 열고 아래와 같이 명령을 입력하면 공격을 수행한다.


ettercap -T -M arp:remote //victim ip/ //gateway ip/



희생자 컴퓨터에서 인터넷 접속을 하게 되면 다음과 같이 나타난다.



즉 패킷에 대한 정보들을 화면에 출력해준다.


ettercap을 이용하면 이와 같이 패킷을 캡쳐할 수 있다.


이번에 볼 것은 etterfilter를 이용해 love 라는 단어를 hate라는 단어로 변조시키는 것이다.

이를 위해 먼저 코드를 작성해야 한다.

kali linux에서 vi 또는 edit 을 이용해 파일을 하나 생성한다. 파일의 확장자는 어느것으로 해도 상관 없다.

필자는 txt 롹장자로 하겠다.


코드를 작성한 후 다음 명령으로 적용할 필터 파일을 생성한다.

etterfilter -o love.elf love.txt


위와 같은 명령이 수행되면 love.elf 파일이 만들어진다. elf 파일은 ettercap 툴에서 필터링 할때 사용하는 파일이다.



ettercap -T -M arp:remote -F love.elf //victim ip/ //gateway ip/

위 명령을 수행하면 위 그림과 같이 나타나며 공격이 수행된다.


희생자가 인터넷에 'love'를 검색하면 'hate'로 변경되는 것을 확인할 수 있다.


* 희생자가 브라우저를 통해 'love'를 검색하는 화면


문자를 변경하는 것을 해봤으니 이제 이미지를 변경시키는 공격을 해보자.


우선 앞서 공격한 방식대로 코드를 먼저 작성한다.

필자는 image.txt 파일을 만들었다.



위 파일을 다음 명령을 수행해 필터 파일을 생성한다.

etterfilter -o image.elf image.txt


ettercap -T -M arp:remote -F image.elf //victim ip/ //gateway ip/

명령으로 공격한다.


희생자가 웹 사이트에 접속하면 이미지가 변경되는 것을 확인할 수 있다.


'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 세션 하이재킹  (0) 2017.05.01
[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
Posted by Imp3rio

세션 하이재킹은 '세션 가로채기'라는 의미다. 

세션은 '사용자와 컴퓨터, 또는 두 컴퓨터 간의 활성화 상태'를 말한다.


1. TCP 세션 하이재킹


TCP 세션 하이재킹은 서버와 클라이언트가 통신할 때 TCP의 시퀀스 넘버를 제어하는 데 문제점이 있음을 알고 이를 파고든 공격이다.

Non-Blind Attack과 Blind Attack이 있다. 

Non-Blind Attack : 공격 대상을 탐지할 수 있으며 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알아낼 수 있다

Blind Attack : 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알 수 없다. 즉, 찍어야 한다.



- 개념

클라이언트와 서버 간의 통신을 관찰할 수 있을 뿐만 아니라 텔넷, FTP 등 TCP를 이용한 거의 모든 세션을 갈취하는 것이 가능하다.

또한 인증에 관한 문제를 해결하기 위해 도입된 일회용 패스워드, 토큰 기반 인증을 이용한 세션 갈취도 가능하다.


- TCP의 시퀀스 넘버 교환

 명칭

 설명

 Client_My_Seq

 클라이언트가 관리하는 자신의 시퀀스 넘버

 Client_Server_Seq

 클라이언트가 알고 있는 서버의 시퀀스 넘버

 Server_My_Seq

 서버가 관리하는 자신의 시퀀스 넘버

 Server_Client_Seq

 서버가 알고 있는 클라이언트의 시퀀스 넘버

 Data_Len

 데이터의 길이


시퀀스 넘버에 따른 TCP 연결 상태는 동기화와 비동기화 두 가지다.

정상적인 접속일 경우 시퀀스 넘버는 동기화 상태에 있으며, 클라이언트가 가진 시퀀스 넘버를 서버가, 서버가 가진 시퀀스 넘버를 클라이언트가 정확히 알고 서로 일치한다.


① 연결이 되기 전 클라이언트의 포트는 Closed 상태

    서버는 서비스를 제공하기 위해 기다리는 Listen 상태

② 클라이언트는 32비트 숫자 중 임의의 숫자( Client_My_Seq )를 생성하여 서버에 SYN 패킷을 보냄

    서버는 클라이언트가 보낸 Cient_My_Seq 값을 읽어 Server_Client_Seq 값으로 저장

    이때 클라이언트는 SYN_Sent 상태

③ 서버는 Server_My_Seq 값을 생성하고, Server_Client_Seq에 패킷의 길이만큼 더해 클라이언트로 보냄

    여기서 데이터는 0이므로, 단지 +1 이라고만 표시

    이때 서버는 SYN_Received 상태

    클라이언트는 Server_Client_Seq+1 을 받음

    자신의 Client_My_Seq와 비교하고 일치하면 Server_My_Seq 값을 Client_Server_Seq 값으로 저장

④ 클라이언트는 Client_Server_Seq+1을 서버에 보내고 Established 상태

    서버는 클라이언트가 보낸 Client_Server_Seq+1과 Server_My_Seq와 비교 일치하면 Established 상태


이렇게 동기화가 되면 다음과 같은 상태가 된다.

Client_My_Seq = Server_Client_Seq

Server_My_Seq = Client_Server_Seq



- 비동기화 상태

TCP 세션 하이재킹은 동기화 상태를 무너뜨리는 것에서 시작한다. 즉, 서버와 클라이언트를 비동기화 상태로 만들어야 한다.


① 데이터가 전송되기 전까지는 안정적인( stable ) 상태

Client_My_Seq ≠ Server_Client_Seq

Server_My_Seq ≠ Client_Server_Seq

② 데이터가 전송될 때는 다음과 같은 상태의 데이터가 차후 사용을 위해 저장되지만 클라이언트에 서버의 승인 번호는 전달되지 않음

Server_Client_Seq < Client_My_Seq

Clinet_My_Seq < Server_Clinet_Seq + Data_Len

③ 패킷 수신이 불가능한 상태로, 데이터도 버려짐

Server_Client_Seq + Data_Len < Clinet_My_Seq

Client_My_Seq < Server_Client_Seq


- 비동기화 상태로 만드는 방법

> 서버에서 초기 설정 단계의 접속을 끊고 다른 시퀀스 넘버로 새로 접속을 생성

> 대량의 널( Null )데이터를 보냄


- 새로운 접속 생성하기

TCP를 이용한 세션은 네 가지 요소( 클라이언트의 IP 주소와 포트번호, 서버의 IP 주소와 포트번호 )로 이루어짐

먼저 서버와 클라이언트가 각자 알고 있는 시퀀스 넘버를 조작해서 속인 후 다음과 같은 상황을 만든다.

> 클라이언트측

Client_My_Seq = 공격자가 생성한 Server_Client_Seq

Client_Server_Seq = 공격자가 생성한 Server_My_Seq

>서버측

Server_Client_Seq = 공격자가 생성한 Client_My_Seq

Server_My_Seq = 공격자가 생성한 Client_Server_Seq


① 클라이언트는 서버와 모두 접속되어 있는 Establised 상태

    공격자는 적절한 시퀀스 넘버를 획득하기 위해 스니핑

② 공격자는 공격하려는 시점에 세션이 완전히 끊어지지 않는 시퀀스 넘버의 범위에서 RST 패킷을 서버에 보냄

    서버는 잠시 Closed 상태

    클라이언트는 그대로 Established 상태

③ 공격자는 A_Client_My_Seq를 생성하여 서버에 보냄

④ 서버는 새로운 A_Client_My_Seq를 받아들이고, Server_My_Seq를 재생성해 공격자에게 보냄

    서버는 SYN_Received 상태

⑤ 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두 Established 상태가 된다.

    원래의 클라이언트는 이 단계까지도 Established 상태

    서버의 네트워크 상태로 인한 잠시 동안의 연결 문제로 인식

    연결은 끊어졌지만 인증 세션은 열린 상태

⑥ 공격자는 공격 전 클라이언트가 서버와 통신을 하던 시퀀스 넘버를 모두 알고 있는 상태

    클라이언트와 정상적으로 통신

    서버와 공격자가 새로 생성한 시퀀스 넘버를 가지고 통신

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] MITM  (0) 2017.05.01
[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
Posted by Imp3rio

1. 스푸핑 공격에 대한 이해


스푸핑이란 '속이다'는 의미다. 인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑이 가능하다. 

스푸핑은 정보를 얻어내기 위한 중간 단계의 기술로 사용하는 것 외에 시스템을 마비시키는 데 사용할 수도 있다.



2. ARP 프로토콜


ARP는 IP 주소 값으로 MAC 주소 값을 알아내는 프로토콜이다.

RARP는 MAC 주소 값으로 IP 주소값을 알아내는 프로토콜이다.

동일한 LAN 내에 연결된 컴퓨터의 IP 주소를 얻는다.

목적지 IP에 대한 MAC 주소를 모를 때 발신측 컴퓨터는 목적지 MAC 주소를 브로드캐스트로 설정하고 패킷을 보낸다.

목적지 IP에 대한 MAC 주소를 아는 호스트가 유니캐스트로 탑중을 준다.



3. ARP 캐시 테이블


ARP 캐시는 static type과 dynamic type이 있다.

static type은 고정된 IP, MAC으로 설정한 상태로 유지되지만 재부팅 시 지워진다.

dynamic type은 arp reply로 인해 등록된 IP, MAC으로 부팅하거나 일정시간 후 삭제된다.


'arp -a' 명령은 arp cache table을 볼 수 있는 명령이다.

'arp -d' 명령은 dynamic type cache를 모두 지우는 명령이다.



4. ARP 패킷 헤더

5. ARP 취약점


ARP reply 패킷에 대한 인증을 거치지 않기 때문에 조작된 ARP reply 패킷을 보내 임의로 ARP 캐시 테이블에 Dynamic type의 < IP, MAC > 쌍을 등록할 수 있다.



6. ARP 스푸핑

arpspoof -t [victim ip] [gateway] 의 명령으로 공격할 수 있다.

위 명령을 수행하면 희생자의 ARP 캐시 테이블에 [공격자 MAC : gateway IP]가 추가된다.


- 공격을 수행하기 전( arp -a )

- 공격을 수행하기 전( arp -d 후 arp -a )


- kali에서 ARP 스푸핑 공격 수행

- 공격 당한 상태


희생자는 공격당한 상태에서 인터넷을 접속하려고 하면 접속이 되지 않는다.


그 이유는 게이트웨이의 MAC주소가 공격자의 MAC 주소로 설정됐기 때문에 희생자가 게이트웨이로 패킷을 보내면 실제로는 공격자에게 패킷이 가기 때문이다. 그리고 공격자는 희생자로부터 받은 패킷을 따로 처리하지 않고 기존 게이트웨이에 릴레이 시키지 않으므로 희생자는 인터넷을 이용할 수 없다.


7. ARP 스푸핑 방지


프로토콜단의 취약점이기 때문에 방지가 힘들다.

gateway IP, MAC 주소를 Static type으로 등록한다.

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] MITM  (0) 2017.05.01
[Network Hacking] 세션 하이재킹  (0) 2017.05.01
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
Posted by Imp3rio

1. 스니핑에 대한 이해


'sniff'를 사전에서 찾아보면 '코를 킁킁거리다'라는 의미다. 코를 킁킁거리듯 데이터 속에서 정보를 찾는 일이라고 생각하면 이해하기 쉽다. 스니핑은 막기가 매우 힘든 공격으로 알려져 있다. 게다가 탐지도 쉽지 않다. 스니핑을 수동적 공격이라고도 말하는데, 이는 공격할 때 아무 것도 하지 않고 조용히 있기만 해도 충분하기 때문이다.


2. 스니핑의 개념


스니핑의 개념을 찾을 수 있는 곳은 많다. 드라마에서 주인공이 문 앞에서 다른 이의 대화를 엿듣는 일, 즉 도청도 일종의 스니핑이다. 즉, 모든 도청과 엿듣기가 스니핑이다.


3. Promiscuous mode


스니핑을 하려면 랜 카드를 스니핑이 가능한 모드로 변경해야 한다. 이를 프러미스큐어스 모드라고 하는데, 이를 정확히 이해하려면 먼저 랜 카드의 정상적인 동작을 이해해야 한다.

모든 패킷은 2계층 정보인 MAC 주소와 3계층 정보인 IP 주소를 가지고 있다. 패킷이 네트워크에 돌아다닐 때, 각 PC는 패킷에 기록된 MAC 주소와 IP 주소를 보고 자신에게 제대로 전달된 것인지 여부를 안다. 정상적인 경우라면 자신의 네트워크 카드로 흘러 들어온 패킷에 기록된 MAC 주소와 IP 주소가 PC의 것과 일치하면 패킷을 분석하여 운영체제에 해당 패킷을 넘겨주고, 다르면 버린다.


하지만 스니퍼는 자신과 다른 MAC 주소와 IP 주소를 가진 패킷이라고 해서 버리지 않는다. 스니퍼는 자신에게 해당 사항이 없는 것을 훔쳐보는 일이 기본이기 때문이다. 패킷의 목적지가 자신이 아니더라도 흘러들어온 패킷을 모두 읽는다. 그러기 위해서는 랜 카드의 MAC 주소나 운영체제에 설정된 IP 주소가 패킷의 MAC 주소나 IP 주소와 달라도 패킷을 버리지 않게 해야 한다. 이처럼 MAC 주소와 IP 주소에 관계없이 모든 패킷을 스니퍼에 넘겨주는 것을 프러미스큐어스 모드라고 한다.


프러미스큐어스 모드는 기본적으로 소프트웨어적인 제어다. 하지만 하드웨어적으로 처리하는 것도 있는데, 이를 바이패스 모드라고 부른다.

'ifconfig' 명령을 사용해 현재 네트워크 카드를 확인한다.


'ifconfig eth0 promisc' 명령으로 eth0 장치를 프러미스큐어스 모드로 바꾼다.



4. 스니핑 공격 툴


- TCP Dump

TCP Dump는 리눅스에서 가장 기본이 되는 스니핑 툴이다. 불법적인 해킹 느낌보다는 관리자 느낌이 강한 스니퍼다. 이는 처음부터 스니핑 툴이 아니라 네트워크 관리를 위해 개발되었기 때문이다.


TCP Dump로 획득한 증거 자료는 법적 효력이 있다. 법적 효력을 발휘하려면 법원에서 인정하는 툴과 규약에 따라야 하는데, TCP Dump는 그 툴에 포함된다. 하지만 컴퓨터로 취득한 대부분의 자료는 재판 과정에서 직접적인 증거로 인정받기 어렵다는 사실을 알아둬야 한다. 위조나 변조는 너무 쉽지만, 이를 알아내기는 너무 어렵기 때문이다.


- Fragrouter

Fragrouter는 직접 스니핑을 하기보다는 스니핑을 보조해주는 툴로, 받은 패킷을 전달하는 역할을 한다. 스니핑을 하거나 세션을 가로챘을 때 공격자에게 온 패킷을 정상적으로 전달하려면 패킷 릴레이가 반드시 필요하다. 공격 대상의 세션이 끊어지면 계속 사용할 수 없어 공격자도 스니핑을 계속 할 수 없다.



5. ARP 리다이렉트와 ARP 스푸핑


ARP 리다이렉트는 공격자가 자신을 라우터라고 속이는 것이다. 사실 스푸핑이라고 해도 틀린 말은 아니다.

ARP 리다이렉트는 기본적으로 2계층 공격이며, 랜에서의 공격이라는 사실에는 변함이 없다.

이 공격은 위조된 ARP Reply 패킷을 보내는 방법을 사용한다. 자신의 MAC 주소가 라우터라며 주기적으로 브로드캐스트하는 것이다. ARP 스푸핑은 호스트 대 호스트 공격인데, ARP 리다이렉트는 랜의 모든 호스트 대 라우터라는 점 외에는 큰 차이가 없다. ARP 스푸핑처럼 공격자 자신은 원래 라우터의 MAC 주소를 알고 있어야 하며 받은 모든 패킷은 다시 라우터로 릴레이 해줘야 한다.


6. Sniffing 공격


- 더미 허브로 연결된 공격자와 희생자 사이에서의 Sniffing 공격

> 공격자 : Kali Linux

> 희생자 : Windows 10

> 공격자는 희생자와 같은 네트워크

> 공격자는 스니핑 중

> 희생자는 kitri 아카데미에 ID: kitri, PW: kitri로 로그인

> 공격자는 패킷을 분셕하여 희생자의 ID/PW 획득



Posted by Imp3rio

TCP와 UDP를 이용한 스캔은 시스템 자체의 활성화 여부가 아닌 포트 스캔을 한다. 물론 포트가 열려 있다면 해당 시스템은 활성화되어 있는 것이다.


1. TCP Open 스캔


TCP를 이용한 가장 기본적인 스캔으로는 Open 스캔이 있다. 먼저 동작하리라고 예상하는 포트에 세션을 생성하기 위한 SYN 패킷을 보낸다. 포트가 열린 경우 서버에서 SYN + ACK 패킷이 돌아오고, 공격자는 다시 ACK 패킷을 보낸다.



(a)에서 볼 수 있듯이 Open 스캔은 3-way-handshake 과정을 모두 거친다. 따라서 상대방 시스템에 로그가 남는다. 포트가 닫혀 있는 경우에는 (b)처럼 공격자가 SYN 패킷을 보내면 RST+ACK 패킷이 돌아오고, 공격자는 아무 패킷도 보내지 않는다.

Open 스캔 중에는 Reverse Ident라는 방법이 있다. 이 방법은 세션을 성립한 상태에서 원격지 서버에서 데몬을 실행하고 있는 프로세스의 소유권자를 확인하기 위한 것이다.


* 데몬 : 시스템의 사용자 인터페이스에는 나타나지 않지만, 서비스를 요청하면 이에 반응할 수 있도록 항상 실행되고 있는 프로그램을 말한다.



위 그림에서 확인할 수 있듯이 Reverse Ident 스캔은 세션을 성립한 후에 113번 포트를 연다. 113번 포트는 사용자 인증을 위해 사용되지만, 이 서비스는 보통 중지되어 있다.



2. 스텔스 스캔


스텔스 스캔은 세션을 완전히 성립하지 않고 공격 대상 시스템의 포트 활성화 여부를 알아내기 대문에 공격 대상 시스템에 로그가 남지 않는다. 따라서 공격 대상의 시스템 관리자는 어떤 IP를 가진 공격자가 자신의 시스템을 스캔했는지 확인할 수가 없다. 스텔스 스캔은 이처럼 단순히 로그를 남기지 않는 것만이 아니라, 공격 대상을 속이고 자신의 위치를 숨기는 스캔 모두를 통칭한다.

TCP Half Open 스캔이 대표적이다. 스캔의 시작은 Open 스캔과 같다. 먼저 SYN 패킷을 보낸다. 포트가 열린 경우 서버는 SYN+ACK 패킷을 보내고 공격자는 즉시 연결을 끊는 RST 패킷을 보낸다. 포트가 닫힌 경우는 Open 스캔과 같다.



스텔스 스캔의 다른 형토로 FIN 패킷을 보내는 방법이 있다. 포트가 열린 경우에는 응답이 없고, 포트가 닫힌 경우에만 RST 패킷이 되돌아 온다.



NULL과 XMAS 패킷을 보내는 때도 이와 같은 결과를 얻을 수 있다. NULL은 플래그 값을 설정하지 않고 보낸 패킷을 말하고, XMAS는 ACK, FIN, RST, SYN, URG 플래그 모두를 설정하여 보낸 패킷을 말한다. XMAS 패킷은 크리스마스 선물처럼 푸짐하게 모두 준다는 의미로 붙여진 이름이다.


또 다른 방법으로 ACK 패킷을 보내는 방법이 있다. 이때 포트 하나가 아니라 모든 포트에 ACK 패킷을 보낸다. ACK 패킷을 받은 시스템은 이에 대한 RST 패킷을 보내고 공격자는 RST 패킷의 TTL 값과 윈도우의 크기를 분석한다. 포트가 열린 경우 TTL 값이 64 이하인 RST 패킷이 돌아오고, 윈도우가 0이 아닌 임의의 값을 가진 RST 패킷이 돌아온다. 포트가 닫힌 경우에는 TTL 값이 운영체제에 따라 일정하게 큰 값이며, 윈도우의 크기가 0인 RST 패킷이 돌아온다.


TCP 패킷을 이용한 스캔 역시 ICMP 스캔처럼 모든 시스템에 동일하게 적용되는 것은 아니다. 이러한 스캔 방법은 최근 시스템에는 거의 적용되지 않는다고 생각해도 될 만큼 많이 알려졌다. 하지만 SYN 패킷을 이용한 스캔 방법은 세션을 성립하기 위한 정당한 패킷과 구별할 수 없기 때문에 아직도 유효하며 아주 효과적이다.


TCP를 이용한 또 다른 스텔스 스캔 방법으로는 TCP 단편화가 있다. 이 방법은 크기가 20바이트인 TCP 헤더를 패킷 두 개로 나누어 보내는 것이다. 첫 번째 패킷에 출발지 IP주소와 도착지 IP주소를, 두 번째 패킷에 스캔하고자 하는 포트 번호가 있는 부분을 보낸다. 첫 번째 패킷은 TCP 포트에 대한 정보가 없기 때문에 방화벽을 통과하고, 두 번째 패킷은 출발지 주소와 목적지 주소가 없어 방화벽을 지날 수 있다.

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
[Network Hacking] DNS( Domain Name System )  (0) 2017.04.24
[Network Hacking] OSI 7계층  (0) 2017.04.23
Posted by Imp3rio

1. 스캔에 대한 이해


스캔은 서비스를 제공하는 서버의 작동 여부와 서버가 제공하는 서비스를 확인하기 위한 작업이다. TCP 기반의 프로토콜은 기본적으로 요청을 보내면 응답을 전달해 준다. 스캔은 ㄴ방화벽과 IDS( 침입 탐지 시스템 )을 우회하기 위해 발전한 스캔은 종류가 무척 다양하다.



2. Ping


서버의 동작 여부를 알아보는 가장 기본적인 스캔은 ping을 이용하는 것이다. 검사하고자 하는 네트워크에서 동작하는 서버를 찾아내는 일은 공격 대상 네트워크에서 공격 대상의 IP 주소를 결정하는 데 무척 중요하다.

ping은 네트워크와 시스템이 정상적으로 작동하는지 확인하기 위한 간단한 유틸리티로, ICMP를 사용하며, 기본적으로 TCP/IP 네트워크에서 사용된다.

넷웨어와 같이 다른 프로토콜 체제를 쓰는 네트워크에서는 ping 유틸리티도 다르며, 모든 네트워크에 ping이 있는 것은 아니다. 


* 넷웨어 : 가장 광범위하게 설치되었던 노벨의 네트워크 서버 운영체제다. 초기 넷웨어는 대기업이나 중소기업용 근거리 통신망에서 노벨의 제품 간 통신에 주로 사용했다. 그후 대규모 네트워크의 필요성이 커지자 새롭게 설계되었다.

* ICMP : 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려주는 프로토콜이다.


3. ICMP 스캔


ICMP를 이용해 공격 대상 시스템의 활성화 여부를 알아보는 방법은 다음 네 가지다.


Ⅰ Echo Request( Type 8 )와 Echo Reply( Type 0 ) 이용하기

Ⅱ Timestamp Request( Type 13 )와 Time Reply( Type 14 ) 이용하기

Ⅲ Information Request( Type 15 )와 Information Reply( Type 16 ) 이용하기

Ⅳ ICMP Address Network Request( Type 17 )와 ICMP Address Network Reply( Type 18 ) 이용하기


가장 일반적인 방법은 Ⅰ을 이용하는 것이며, 일반적으로 옵션 없이 ping 유틸리티를 사용하면 된다.




① ICMP 패킷의 길이를 나타내는 것으로, 운영체제마다 보내는 바이트의 길이가 다르다. 유닉스와 리눅스와 같은 시스템은 위 그림처럼 대부분 56바이트 ICMP Echo Request 패킷을 생성하여 보낸다. 윈도우 시스템은 32바이트이다. 각 바이트의 내용은 의미없는 알파벳으로 채워진다.

② 공격 대상에서 보내온 ICMP Echo Reply 패킷의 크기이다.

③ TTL( Time To Live ) 값으로, 라우팅 정보가 잘못되어 패킷이 네트워크를 무한대로 돌아다니지 않도록 최초 라우터를 제외한 라우터를 지날 때마다 값이 1씩 줄어든다. TTL 값도 운영체제에 따라 조금씩 다르다.

운영체제 

 ICMP Request 패킷 TTL 

 ICMP Reply 패킷 TTL 

 리눅스 커널 2.6 

 64

 64

 리눅스 커널 2.2 - 2.4

 255

 64

 리눅스 커널 2.0

 64

 64

 우분투

 128

 128

 FreeBSD

 255

 255

 솔라리스

 255

 255

 HP-UX

 255

 255

 윈도우 95

 32

 32

 윈도우 98

 128

 128

 윈도우 NT

 128

 128

 윈도우 서버 2003, 2008, 2012

 128

 128

위도우 10 

 64

 64

줄어든 TTL 값으로 원격지 시스템이 라우터 몇 개를 거쳐서 도달했는지 알 수 있다. 세계 어느 곳에 있는 시스템일지라도 20여개 이상을 지나는 경우는 드물다. 보통 기본 TTL이 64라고 생각하는데, TTL 값이 55라면 자신의 경계라우터를 포함해 라우터 12개를 지나 목표 시스템에 도달한 것이다.

④ Echo Request 패킷을 보낸 후 Reply 패킷을 받기까지의 시간이다.

⑤ Request 패킷의 개수, Reply 패킷의 개수, 손실된 패킷의 개수를 보여준다.

⑥ Request 패킷을 보낸 후 Reply 패킷이 오기까지의 시간 정보를 알려준다.


라우터나 방화벽 등에서 ICMP Echo Request 패킷을 막는 경우가 있는데, 이때 이용할 수 있는 방법으로 세 가지를 생각할 수 있다.


첫 번째 방법은 Ⅱ를 이용하는 것이다. Timestamp Request 패킷은 원격지 시스템의 현재 시각을 알아보기 위한 것이다. 송신자가 패킷을 보낸 시각과 수신자가 패킷을 받은 시각, 송신자가 수신자에게 전송하는 동안 걸린 시간으로 공격 대상의 현재 시스템 시각을 알 수 있다. 하지만 Timestamp Request 패킷에 Reply 패킷을 돌려보내는 시스템이 시간만 알려준다고 생각할 수는 없다. 상대 시스템의 Reply 패킷이 돌아온다는 것은 상대 시스템이 활성화 되어 있음을 말하는 것이다.


두 번째 방법은 Ⅲ을 이용하는 것이다. 원래 Information Request와 Reply는 메인 프레임의 단말기처럼 부팅할 때 자신의 디스크가 없는 시스템이 스스로 IP를 설정할 수 있도록 하는 패킷으로, 자신이 네트워크를 찾기 위해 개발되었다. 기본 목적은 RARP, DHCP와 같은 프로토콜과 같지만 다른 프로토콜을 이용한 방법에 비해 원시적이라고 할 수 있다.


마지막으로 Ⅳ를 이용하는 것이다. 이 패킷 역시 Information Request 패킷처럼 단말기가 부팅될 때 자신이 속한 네트워크의 서브넷 마스크를 알기 위해 보낸다.


ICMP 패킷을 이용한 앞의 세 가지 방법이 모든 운영체제에서 작동하지는 않는다. 운영체제에 따라 일부만 지원하므로 지원 여부를 살펴보면 다음과 같다.


 운영체제 

 Information 

 Timestamp 

 Address Mask 

 리눅스 커널 2.2 - 2.6 

 X 

 O 

 X 

 FreeBSD 

 X 

 O 

 X 

 솔라리스 

 X

 O

 O 

 HP-UX 

 O 

 O 

 X 

 AIX v4 

 O 

 O 

 X 

 윈도우 98 

 X 

 O 

 O 

 윈도우 NT sp4 

 X 

 X 

 X 

 윈도우 2000 이상 

 X 

 O 

 X 


ICMP를 이용한 여러 가지 ping은 시스템 하나를 조사하기에는 적절하지만 큰 네트워크에서 활성화 시스템을 찾는 데는 그다지 효과적이지 않다. 네트워크 전체에서 활성화 시스템을 찾는 일을 스위핑( Sweeping )이라고 한다. 스위핑은 검색하고자 하는 네트워크에 브로드캐스트 ping을 보내거나 자동화 도구를 이용해 특정 범위의 네트워크에 ping을 보낸다.

'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] DNS( Domain Name System )  (0) 2017.04.24
[Network Hacking] OSI 7계층  (0) 2017.04.23
Posted by Imp3rio

1. DNS에 대한 이해


DNS는 숫자로 구성된 네트워크 주소인 IP주소를 사람이 이해하기 쉬운 명칭인 도메인 이름으로 상호 매칭시켜주는 시스템이다.

DNS는 인터넷을 사용하는 동안 항상 사용하는 서비스로, 계층 구조를 이용한다. DNS에서 가장 상위 개체는 '.'이다. 이를 루트( Root )라고 한다. 두 번째 개체로는 국가와 조직체의 특성이 있다.


* DNS의 두 번째 개체에 대한 내용


 항목

 내용

 

 항목 

 내용 

 com 

 영리기관 

 

 mil 

 군사기관 

 net 

 네트워크기관 

 

 edu 

 교육기관 

 org 

 비영리기관 

 

 int 

 국제기관 

 gov 

 정부기관 

 

 kr( korea ), jp( japan ) 

 국가 이름 


두 번째 개체가 국가 이름이면 세 번째 개체가 조직의 특성이 된다. 예를 들면, co( Company ), ac( Academy ) 등이다. 그렇지 않은 경우에는 고유한 조직 이름이 오며, 보통 맨 앞에 자신의 DNS 서버에서 지정해 놓은 www, ftp와 같은 특정 서버의 이름이 온다. DNS는 전체적으로 다음과 같은 계층 구조를 이룬다.


* DNS 계층 구조



2. DNS의 동작 원리


DNS를 사용하려면 클라이언트에서 사용할 DNS 서버를 직접 입력하거나 DHCP를 통해 자동으로 할당받아 설정할 수 있다. 리눅스에서는 /etc/resolv.conf 파일에 DNS 서버를 입력할 수 있다.



윈도우에서는 [제어판]-[네트워크 및 공유센터]-어댑터 설정 변경]의 '로컬 영역 연결'에서 마우스 오른쪽 버튼을 누른다. 메뉴가 나타나면 [속성]을 누르고 인터넷 프로토콜(TCP/IP)의 속성을 선택한다. 다음 그림에서 DNS 서버를 두 개까지 입력할 수 있지만, <고급> 버튼을 누르면 좀 더 다양한 설정도 가능하다.



현재 이용 중인 DNS 서버는 명령 창에서 'ipconfig /all' 명령어를 입력하면 다음과 같이 확인할 수 있다.



* DNS 이름 해석 순서



클라이언트가 www.wishfree.com에 접속하기 위해 이 사이트의 IP 주소가 캐시에 존재하는지 확인한다. 과거에 접속한 적이 있는 사이트는 캐시에 정보가 남아 바로 접속할 수 있다.


① hosts 파일에 정보가 없으면 시스템에 설정된 DNS 서버인 로컬 DNS 서버에 질의한다.

② 로컬 DNS 서버에도 해당 정보가 없으면 루트 DNS 서버에 질의를 보낸다.

③ 루트 DNS 서버에 www.wishfree.com에 대한 정보가 없으면 com을 관리하는 DNS 서버에 대한 정보를 보내준다.

④ 로컬 DNS 서버는 com DNS 서버에 www.wishfree.com에 대해 다시 질의한다.

⑤ 해당 정보가 없을 경우 com DNS 서버는 다시 wishfree.com에 질의하도록 로컬 DNS 서버에 보낸다.

⑥ 로컬 DNS 서버는 마지막으로 wishfree.com의 DNS 서버에 질의한다.

⑦ wishfree.com의 DNS서버로부터 www.wishfree.com에 대한 IP 주소를 얻는다

⑧ 해당 IP 주소를 클라이언트에 전달한다.


그러나 이는 일반적인 과정이 아니라 최악의 경우라 할 수 있다. 대부분 자신이 설정해 놓은 로컬 DNS 서버에서 최초 요청한 도메인의 IP 주소를 바로 얻을 수 있다. 그리고 윈도우에서는 이미 조회한 DNS 정보를 메모리에 저장해두는데, 시스템에 캐시된 DNS 정보는 'ipconfig /displaydns' 명령으로 볼 수 있다.



캐시된 DNS 정보를 모두 지우려면 'ipconfig /flushdns' 라고 입력한다.



DNS 서버는 도메인별로 주 DNS 서버, 부 DNS 서버, 캐시 DNS 서버로 나눌 수 있다. 주 DNS 서버는 도메인의 중심 DNS 서버며, 부 DNS 서버는 주 DNS 서버의 백업 서버라 생각할 수 있다. 캐시 DNS 서버는 주 DNS 서버와 부 DNS 서버에 대한 접속이 불가능 할 때를 대비한 임시 DNS 서버와 비슷하다.



3. DNS를 이용한 정보 습득


DNS를 사용하기 전에 많이 이용되었던 hosts 파일은 아직도 어려가지 목적으로 시스템 운영에 널리 사용되고 있다. hosts 파일에는 여러 시스템에 대한 IP 주소와 URL이 기록되어 있다. hosts 파일은 사용자가 각 시스템에 접근하는데 도움을 주었던 만큼 해커에게도 똑같은 이점을 제공한다.


DNS에도 hosts 파일이 노출되는 것과 비슷한 형태의 정보노출이 있다. 바로 DNS 영역 정보의 접근 허용이다. 부 DNS서버는 주 DNS 서버로부터 영역에 대한 정보를 전송받아 도메인에 대한 정보를 유지한다. DNS 서버의 기본적인 보안 문제는 영역이 전송되는 대상을 부 DNS 서버로 제한하지 않은데서 발생한다. 부 DNS 서버로 전달되어야 할 영역 정보를 해커가 획득하는 것이다.


DNS에 관한 정보를 얻어오는 툴로는 nslookup, dig 등이 있다. 여기서는 가장 일반적인 툴인 nslookup을 사용해본다. nslookup은 윈도우와 리눅스에 기본으로 설치되어 있다.


- 도메인 정보 수집하기

특정 도메인에 관한 정보를 알고 싶을 때는 다음과 같이 해당 도메인 이름을 입력한다.



검색하고자 하는 서버의 종류를 설정할 때는 'set type' 명령을 이용한다. 'set type=ns'라고 입력한 뒤 검색하고자 하는 도메인을 입력한다.



set type 명령으로 출력되는 DNS 정보를 DNS 레코드라고 한다. set type 명령으로 확인할 수 있는 DNS 레코드는 다음과 같다.


종류 

내용 

 A( Address )

 호스트 이름 하나에 IP 주소가 여러 개 있을 수 있고 IP 주소 하나에 

 호스트 이름이 여러개 있을 수도 있다. 이를 정의하는 레코드 유형이 

 A이며, 다음과 같이 정의한다.

 - www        A        200.200.200.20

 - ftp            A        200.200.200.20

 PTR( Pointer )

 A 레코드와 상반된 개념이다. A 레코드는 도메인에 대해 IP 주소를

 부여 하지만 PTR 레코드는 IP 주소에 대해 도메인명을 맵핑한다.

 NS( Name Server )

 DNS 서버를 가리키며, 각 도메인에 적어도 한 개 이상 있어야 한다.

 MX( Mail Exchanger )

 도메인 이름으로 보낸 메일을 받는 호스트 목록을 지정한다.

 CNAME( Canonical Name )

 호스트의 다른 이름을 정의하는 데 사용한다.

 SOA( Start of Authority )

 도메인에 대한 권한이 있는 서버를 표시한다.

 HINFO( Hardware Info )

 해당 호스트의 하드웨어 사양을 표시한다.

 ANY( ALL )

 DNS 레코드를 모두 표시한다.



'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
[Network Hacking] OSI 7계층  (0) 2017.04.23
Posted by Imp3rio

1. OSI 7계층이란 ?


국제표준화기구( ISO )에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다.



2. 목적


이 모델은 프로토콜을 기능별로 나눈것이다. 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공한다. '프로토콜 스택' 혹은 '스택'은 이러한 계층들로 구성되는 프로토콜 시스템이 구현된 시스템을 가리키는데, 프로토콜 스택은 하드웨어나 소프트웨어 혹은 둘의 혼합으로 구현될 수 있다. 일반적으로 하위 계층들은 하드웨어로, 상위 계층들은 소프트웨어로 구현된다.


- 물리계층

물리계층은 네트워크의 기본 네트워크 하드웨어 전송 기술을 다룬다. 네트워크의 높은 수준의 기능은 논리 데이터 구조를 기초로하는 필수 계층이다. 다양한 특징의 하드웨어 기술이 접목되어 있기에 OSI 아키텍처에서 가장 복잡한 계층으로 간주된다.


- 데이터 링크 계층

데이터 링크 계층은 포인트 투 포인트 간 신뢰성있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공한다. 주소 값은 물리적으로 할당받는데, 이는 네트워크 카드가 만들어질 때부터 MAC 주소가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 이 외에도 HDLC나 ADCCP 같은 포인트 투 포인트 프로토콜이나 패킷 스위칭 네트워크나 LLC, ALOHA 같은 근거리 네트워크용 프로토콜이 있다. 네트워크 브릿지나 스위치 등이 이 계층에서 동작하며, 직접 이어진 곳에만 연결할 수 있다.


* 프레임에 주소 부여( MAC - 물리적주소 )

* 에러검출 / 재전송 / 흐름제어


- 네트워크 계층

네트워크 계층은 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션, 오류제어, 인터네트워킹 등을 수행한다. 

라우터가 이 계층에서 동작하고 이 계층에서 동작하는 시위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조( IP ), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적이다.

서브네트의 최상위 계층으로 경로를 설정하고, 청구 정보를 관리한다. 개방형 시스템들의 사이에서 네트워크 연결을 설정, 유지, 해제하는 기능을 부여하고, 전송 계층 사이에 네트워크 서비스 데이터 유닛( NSDU : Network Service Data Unit )을 교환하는 기능을 제공한다.


* 주소 부여( IP )

* 경로설정( Route )


- 전송계층

전송계층은 양 끝단의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 시퀀스 넘버 기반의 오류 제어 방식을 사용한다. 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고, 연결 기반이다. 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다. 가장 잘 알려진 전송계층의 예는 TCP이다.

종단간 통신을 다루는 최하위 계층으로 종단간 신뢰성있고 효율적인 데이터를 전송하며, 기능은 오류ㄱ머출 및 복구와 흐름제어, 중복검사 등을 수행한다.


* 패킷 생성


- 세션계층

세션계층은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식, 반이중 방식, 전이중 방식의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.

통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.


* 통신을 하기 위한 세션을 확립 / 유지 / 중단 ➞ 운영체제가 해준다.


- 표현계층

표현계층은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 예를 들면, EBCDIC로 인코딩된 문서 파일을 ASCII로 인코딩된 파일로 바꿔 주는 것이 표현계층의 몫이다.


* 사용자의 명령어를 완성 및 결과 표현

* 포장 / 압축 / 암호화


- 응용계층

응용계층은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다.


* 네트워크 소프트웨어 UI 부분

* 사용자의 입출력( I/O )부분



'NCS보안3기 > 네트워크 해킹' 카테고리의 다른 글

[Network Hacking] 스푸핑 공격  (0) 2017.04.30
[Network Hacking] 스니핑  (0) 2017.04.30
[Network Hacking] TCP 스캔  (0) 2017.04.30
[Network Hacking] ICMP스캔  (0) 2017.04.30
[Network Hacking] DNS( Domain Name System )  (0) 2017.04.24
Posted by Imp3rio