[ 모의환경 구성도 ]

 

- 외부 네트워크단의 공격자가 터널을 뚫어 피해대상의 데이터를 스니핑한다.

( 최대한 자세하게 기술하였으나, 나중엔 해당 구성도만 보고도 스스로 구성할 수 있도록 숙달 연습하셔야 합니다 )

 

 

 

구성 후, 핑이 통하는지 확인합니다. 당연히 공격자는 피해자의 라우터까지만 도달하고, 피해자는 공격자의 라우터까지만 도달되는 상태여야 합니다. 내부는 네트워크 대역이 다른 사설아이피니까요.

실전이라면, 라우터-다음 라우터까지의 거리를 디폴트 라우팅해주어야 하지만, 모의도에서는 직접 ISP와 공격자/피해자가 직접 맞닿아(=Connected) 되어 있죠? 그래서, 디폴트 라우팅을 설정해주셔도 되지만, 지금은 안 해주셔도 핑이 가는 데엔 문제가 없습니다.

직접 커넥팅되면 ISP라는 라우터는  상대방을 알아서 학습(Learning) 하기 때문입니다.

 

이제 ISP를 위시한 WAN망( Router 들 ) 의 통신환경을 설정해 주어야 합니다. 보시다시피 OSPF 를 사용합니다.

이하 설명들은 반어체를 사용하겠습니다.

 

 

 

(1) 기본 설정

VICTIM_XP : 172.16.10.1

VICTIM_SERVER : 172.16.20.1

VICTIM_ROUTER FA0/0 : 172.16.10.254

VICTIM_ROUTER FA0/1 : 172.16.20.254

ATTACK_BT : 192.168.30.1

ATTACK_ROUTER : 192.168.30.254

 

[ Victim_Router 최소기본세팅 ]

1. 내부단 핑을 통하게 만든다.

 

Victim_Router#en
Victim_Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Victim_Router(config)#no ip domain-lookup
Victim_Router(config)#line con 0
Victim_Router(config-line)#exec-timeout 0 0
Victim_Router(config-line)#logging synchronous
Victim_Router(config-line)#exit

 

Victim_Router(config)#do sh ip int bri
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES unset  administratively down down   
FastEthernet0/1            unassigned      YES unset  administratively down down   
Serial1/0                  unassigned      YES unset  administratively down down   
Serial1/1                  unassigned      YES unset  administratively down down   
Serial1/2                  unassigned      YES unset  administratively down down   
Serial1/3                  unassigned      YES unset  administratively down down   
Victim_Router(config)#int fa0/0
Victim_Router(config-if)#ip addr 172.16.10.254 255.255.255.0
Victim_Router(config-if)#no shutdown
Victim_Router(config-if)#int fa0/1
Victim_Router(config-if)#i
*Mar  1 00:06:58.587: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar  1 00:06:59.587: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
Victim_Router(config-if)#ip addr 172.16.20.254 255.255.255.0
Victim_Router(config-if)#no shut
Victim_Router(config-if)#exit
Victim_Router(config)#
*Mar  1 00:07:08.035: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to up
*Mar  1 00:07:09.035: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up
Victim_Router(config)#

Victim_Router(config-router)#int s1/0
Victim_Router(config-if)#ip addr 1.1.12.1 255.255.255.240
Victim_Router(config-if)#no shut
Victim_Router(config-if)#

내부 핑 확인.

 

[ Attack_Router 최소기본세팅 ]

1. 내부 핑을 통하게 만든다.

 

Attack_Router#EN
Attack_Router#CONF T
Enter configuration commands, one per line.  End with CNTL/Z.
Attack_Router(config)#no ip domain-lookup
Attack_Router(config)#line con 0

Attack_Router(config-line)#exec-timeout 0 0
Attack_Router(config-line)#logging syn
Attack_Router(config-line)#exit
Attack_Router(config)#do sh ip int bri
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES unset  administratively down down   
FastEthernet0/1            unassigned      YES unset  administratively down down   
Serial1/0                  unassigned      YES unset  administratively down down   
Serial1/1                  unassigned      YES unset  administratively down down   
Serial1/2                  unassigned      YES unset  administratively down down   
Serial1/3                  unassigned      YES unset  administratively down down   
Attack_Router(config)#int fa0/0
Attack_Router(config-if)#ip addr 192.168.30.254 255.255.255.0
Attack_Router(config-if)#no shutdown
Attack_Router(config-if)#do ping 192.168.
*Mar  1 00:13:59.627: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar  1 00:14:00.627: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
Attack_Router(config-if)#do ping 192.168.30.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.30.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 8/21/36 ms
Attack_Router(config-if)#

Attack_Router(config)#int s1/1
Attack_Router(config-if)#ip addr 1.1.23.3 255.255.255.240
Attack_Router(config-if)#no shut

 

 

 

[ ISP ]

양쪽 시리얼 인터페이스를 오픈시켜준다.


ISP(config)#int s1/0
ISP(config-if)#ip addre 1.1.12.2 255.255.255.240
ISP(config-if)#no shut
ISP(config-if)#
ISP(config-if)#int s1
*Mar  1 00:23:43.083: %LINK-3-UPDOWN: Interface Serial1/0, changed state to up
*Mar  1 00:23:44.083: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up
ISP(config-if)#int s1/1
ISP(config-if)#ip addr 1.1.23.2 255.255.255.240
ISP(config-if)#no shut
ISP(config-if)#do sh
*Mar  1 00:23:58.247: %LINK-3-UPDOWN: Interface Serial1/1, changed state to up
*Mar  1 00:23:59.247: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/1, changed state to up
ISP(config-if)#do sh ip int bri
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES unset  administratively down down   
FastEthernet0/1            unassigned      YES unset  administratively down down   
Serial1/0                  1.1.12.2        YES manual up                    up     
Serial1/1                  1.1.23.2        YES manual up                    up     
Serial1/2                  unassigned      YES unset  administratively down down   
Serial1/3                  unassigned      YES unset  administratively down down   
ISP(config-if)#

 

OSPF 프로토콜로 Router 간을 네트워크로 묶어서 통신이 가능하게 만든다. 

= 이건 공격자나 피해자가 지정하는게 아니라, 외부 ISP 업체의 네트워크 묶음이라고 보면 된다.


 
 ( 여러 개의 OSPF 가 있을 경우, 식별 번호로 프로세스 아이디를 쓰지만, 모의환경은 단 하나이므로 아무 숫자나 써도 좋다. )
 
보통 OSPF의 사설 네트워크는 외부 공인단에 광고하지 않는다. 
가지고 있는 공인 네트워크만 광고한다. ( =인터페이스 개수에서 사설망 제외 )

와일드카드 마스크 = 0.0.0.0 ( 아이피 고정 ) 임을 유의.

 

1. OSPF 를 위한 Victim_Router 의 설정

= 해당 라우터간 라인에 광고할 공인 광고는 1.1.12.0/28 라인 인터페이스 한 개 뿐이다.

 

 

 [ 확인 ]

Victim_Router#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.23.2          0   FULL/  -        00:00:39    1.1.12.2        Serial1/0

 

 

2. OSPF 를 위한 ISP Router 의 설정

= 시리얼 보시다시피 양쪽 라인 다 광고해야 한다.

 

 

[ 확인 ]

ISP(config-router)#do show ip ospf nei

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.30.254    0   FULL/  -        00:00:38    1.1.23.3        Serial1/1
172.16.20.254     0   FULL/  -        00:00:33    1.1.12.1        Serial1/0 

 

 

 

3. OSPF 를 위한 Attack_router 의 설정

= 라우터간 자신의 인터페이스 하나를 광고한다. 사설쪽은 X

 

 [ 확인 ]

Attack_Router#show ip ospf nei

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.23.2          0   FULL/  -        00:00:39    1.1.23.2        Serial1/1

 

 

 

[ ISP 의 라우팅 정보 확인 ]

 

[ Victim_Router 의 정보 확인 ]

 

 

[ Attack_Router 의 정보 확인 ]

여기까지 연결하면 이제, 피해자-공격자 router 까지 Ping 은 가지만, 사설 네트워크단끼리의 통신은 여전히 되지 않는다.

당연히, 하위의 사설 대역은 알려 준 적도 없으니, 상대방이 길을 모르기 떄문이다.

공격자의 호스트(사설대역)가 피해자의 사설 호스트에 핑을 보내면, 해당 라우터까지는 도달은 하지만, 그 라우터는 응답을 보내야 할 목적지의 사설 대역을 알 도리가 없으니 Drop 시켜 버린다. 

 

사설대역을 공인대역으로 끌어올리는 NAT 설정을 해 주어야 한다.

 

 

[ NAT 설정 ]

 

TIP : NAT 의 범위를 ACL 로 지정해야 하는데, 거기서 보통 와일드카드 마스크를 0.0.0.255 로 줘서, 해당 마지막 호스트 부분만 공인으로 돌리는 케이스를 많이 볼 수 있다.

허나 이는, 차후 사설 네트워크단을 추가할 때, 불필요한 대역 낭비로 인한 재수정을 초래할 수 있으므로, 처음부터 가장 효율적으로 허용할 네트워크 범위를 구성해 주는 것이 좋다.

                                                         16 8 4 2 1             

172.16.|10.0       -------------  0000 1010 = 10

172.16.|20.0       -------------  0001 0100 = 20

---------------     ------------- --------------

  0   0 ( ) 255                     0001 1110 = 30 ( 둘다 0 아니면 무조건 1 )

 

= 0.0.30.255 로 설정하면 가장 효율적인 와일드카드 마스크가 된다.

 

1. 전체 NAT 구성 ( Victim_Router )

= ACL로 172.16.10.0 단과 172.16.20.0 단만을 효율적으로 네트워크 범위를 정해서, 외부 공인 대역으로 설정(NAT)

= 내부의 ACL의 범위는 인터페이스 S1/0를 통과할 때 NAT 임을 설정. ( Overload )

 

 

2. 라우터를 기준으로 해당 인터페이스의 In/Out 범위를 설정

 

3. Attack_Router 의 NAT 설정 ( 동일하다 )

 

 

핑 테스트 해본다. 정상적으로 도달해야 한다. 

 

 

모의환경 구성 끝

터널링 및 스니핑 공격은 다음 장에서.

 

 

 

[ 공격 모의 연결도 ]

 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

백과사전에서 말하는 PPTP란?

 [ point-to-point tunneling protocol ]

 

 컴퓨터와 컴퓨터가 1대 1 방식으로 데이터를 전송하여, 다른 시스템이나 인터넷으로 보안을 유지하면서 가상사설망(VPN)을 지원해주는 프로토콜이다.   

 PPTP는 기업들이 인터넷상의 사설 "터널"을 통해 자신들의 기업용 사설 네트웍을 확장할 수 있도록 해주는 프로토콜이다. 실제로, 기업들은 하나의 거대한 근거리통신망으로서 광역통신망을 사용한다. 그러나, 기업들은 이제 광역통신망을 위해 더 이상 자신들만의 독립 회선을 빌릴 필요가 없으며, 공공 네트웍을 안전하게 이용할 수 있다. 이러한 종류의 접속을 가상사설망, 즉 VPN이라고 부른다.

 

 

이 페이지에서는 PPTP 의 인증 유형 중 PAP과 CHAP 의 간단한 모의 환경을 살펴 보겠습니다.

 

 

 연결을 위해서, 본사-지사의 간단한 설정이 필요합니다.

[HQ - 본사] 에서는 지사가 본사로 접속할 때 필요한 "인증 정보 db"가 들어 있어야 합니다.

그 인증 방식은 PPP 로 패킷을 encapsulation 하는 것입니다.

 


 

[ HQ 의 Router Setting ]

running-config.cfg

본사는 지사가 접속할 로그인 인증정보를 가지고 있어야 합니다.

1. 그래서 라우터 내부에 첫째로 "지사의 USERNAME" 을 만듭니다.

2. 그리고 연결되어 있는 Serial 1/0 포트에 들어가서, 패킷의 형식을 ppp 프로토콜로 정의해 줍니다.

3. ppp 프로토콜의 인증 방식은 pap 를 쓰겠다고 선언합니다.

4. ppp-pap 의 인증 정보는 Branch 란 유저네임과 cisco 라는 비밀번호의 로그인 계정이라고 선언합니다.

5. 아직 인터페이스가 열려있지 않으므로 serial 1/0 은 down / down 상태입니다. 열어줍니다

6. 디버그 모드를 켜 보면 세션은 열려 있지만, 로그인한 대상이 없으므로, 인증을 요구하는 경고문이 뜨고 있음을 볼 수 있습니다.

7. 지사에서 이 쪽으로 접속을 한다면, Down 상태의 Protocol 정보가 up 될 것입니다.

8. up/up 이 연결 완료입니다.

 

 

 

 

[ Branch - 지사의 연결 설정 ]

동일하게 설정해 주면 됩니다.

연결이 되었다면, up/up을 확인할 수 있습니다.

 

 

본사 HQ 의 라우터로 돌아가보면, 이제 인증 정보를 만족하였으므로 정상 연결이 되면서 프로토콜이 활성화됨을 볼 수 있습니다.

 

 

 

 

CHAP 인증 방식도 거의 동일합니다.

인증 방식을 PAP이 아닌 CHAP 으로 입력하시면 됩니다.

 

PAP이나 CHAP 이나 보안에 많은 취약점을 가지고 있습니다. CHAP v2 도 마찬가지입니다.

Wireshark 등의 툴로 패킷을 추출해 보면, username 이나 , 각종 challange 패킷의 Value 값이 그대로 노출이 됩니다. 스니핑당한 상태라면, 외부에서 유저네임과 패스워드를 획득하여, 본사의 사설망에 침입하여 여러가지 크래킹을 시도할 위험이 있습니다.

이를 해결하기 위한 방법 중 하나가 본사 내부에 Radius 라는 별도 인증 서버를 두는 방식입니다. 다만 지사의 기존 인증 프로토콜들로는 해당 Radius 서버에 도달할 수 없으므로 EAP 라는 형식의 encapsulation 시킨 프로토콜이 필요하게 됩니다.

                                       도달                    인증

Branch ---------------------- HQ ------ (EAP) ------ Raduis  

        

 

다음 장에서는 VPN 망의 구성과 스니핑 후, 해당 인증 정보를 해킹하는 방법을 알아보도록

하겠습니다.

 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

 

 

 - Tunneling ?

항상 이야기하지만, 해킹의 선제 조건은 해당 타겟의 Sniffing 이 되어야 합니다.
고로 원격 공격자는 자신이 타겟 내부의 네트워크 일원인것처럼 뚫고 들어가서 위장해야 합니다.

= 논리적인 길을 뚫어서 공격대상의 Router 와, 공격자의 Router 를 연결된 하나의 논리적인 길로 연결하는 방법을 흔히 말하는

터널링이라고 합니다. 자주 쓰는 터널링 프로토콜이 있습니다.

 

 

 

 

- GRE Protocol


Generic Routing Encapsulation의 약자
Cisco 에서 개발한 Tunneling 프로토콜
IP 를 이용하여 다양한 종류의 Network Layer 패킷의 Encapsulation이 가능
VPN(Virtual Private Networks)를 구축하는데도 사용
Tunnel의 종단점의 상태를 확인하지 않으므로 주로 일반 클라이언트를 위한 IP Tunnel을 위해 주로 사용

 

= (가상적으로) 네트워크간의 복잡한 길을 거치지 않고 독자적으로
네트워크를 뚫고 가로질러서 바로 전달하기 위해 만들어진 프로토콜입니다.

 

이 프로토콜이 가장 흔히 사용되는 예시로

1. VPN

 

2. IPv6 = 6to4 Tunneling

 

3. SSH/SSL Tunneling

 

 

등이 있습니다. 보시다시피 대역이 다르거나, 다른 라우터가 지원하지 않는 ( 신형장비 <---> 구형장비 등 ) 데이터 등을 송수신하고, 또한 그러한 평문 데이터에 암호화를 덧붙이기 위해 고안된 방법입니다.

 

 

 

SSH 터널링은 예전에 다뤄보았고, 남은 두 개를 간략하게 설명하자면,

 

- VPN 터널링

 

WAN = 공용선(공용망) 입니다.


  전용선(ex : 전화, leased line : 극 보안용 일부만 서비스)
  ㄴ 기반상 한도가 있으므로, 결국 미리 만들어져있는 공용선을 이용해야 하는데(실제로도 우리는 WAN을 사용하지요), 사용하는 사용자 간(예를 들면 회사간)의 보안문제가 발생하지요. 그래서 이를 개별적인 전용선처럼 쓸 수 있는 가상화 방법으로 VPN을 고안하게 되었습니다. 


  1) Circuit Switched - 가격이 매우 비쌈. (통신 연결중인 한 라인 지속 임대)
  2) Packet Switched - (연결이 아닌 패킷마다 라인 임대,X-25,Frame Relay )
  3) Tunnelling -> VPN ( 논리적인 길을 뚫습니다. 암호화 별도 필요 SSL, ipsec 등 )

 

 

 

- IPv6 = 6to4 터널링

 

 IPv6 패킷을 보내면, WAN 망 안에서 많은 라우터 장비를 거쳐 전달되어야 하는데 현재 사용된지 얼마 안 된 IPv6 패킷 처리를 자체 지원하는 라우터 장비가 별로 없습니다.(대부분 한 세대 전 옛날 장비를 쓰지요. 항상 최신버젼이 꼭 좋은게 아닌 이유가 바로 현실성 때문.. ) - 즉 WAN 단의 장비들이 6의 프로토콜을 지원하지 않으므로, 결국 IPv6패킷 위에 기존의 IPv4 패킷을 덮씌워서(encapsulation) , IP4v Protocol (GRE Protocol, pptp, l2tp 등.. )를 사용하여,  논리적인 출발지를 만든 후, 다른 연결장비를 거치지 않고, 다음 논리적인 목적지에 단독으로 도달하도록 만든 기법입니다.  

 

 

 

Tunneling 의 3요소

 

- 궁극적으로 위 두 서비스의 도입목적과 크게 다르지 않습니다.

분류를 다음과 같이 나눕니다.

Passenger Protocol
• 전송하고자 하는 데이터를 담고 있는 프로토콜


Encapsulating Protocol
• 패킷을 Encapsulating / Decapsulating 하기 위한 프로토콜
• 예) GRE, PPTP, L2TP, L2F, IPSec


Carrier Protocol
• Encapsulating 된 패킷을 운반하기 위한 프로토콜
• 네트워크의 중간에 있는 (기존의) 라우터들이 이해할 수 있는 프로토콜
• 일반적으로 기존의 IP프로토콜이 이용된다.

 

= 주의점을 하나 말씀드리자면, 논리적으로 라우터-라우터를 연결한다! 는 개념입니다. 정말로 그런 터널을 통해 데이터가 전달되는 일은 불가능합니다. 정상적으로 모든 라우터를 거쳐서 가되, 캐리어 프로토콜에 의해 "이해할 수 있는 기존 형태" 로 인캡슐레이션 포장되어 이동된다는 개념으로 이해하시면 되겠습니다. 즉 터널링을 열어도, 원래대로의 물리적 경로가 없다면, 정상 전달되지 않습니다.

 

 

그러므로

Gre Sniffing 공격이 가능한 개요를 보자면

 - 터널링은 개념상 양쪽 호스트간 가상의 논리적 직선 통신채널이 형성된 것.


 - 실제 트래픽은 많은 라우터들을 거치지만, Passenger 입장에서는 직접 통신하는 것처럼 느끼게 됩니다.

 = 즉, 두 라우터 간의 HOP = 1 , cisco 장비에서는 직접 연결된 것(=Connected) 으로 인식합니다 (!)
 
 = 터널링으로 연결하면, 내부단처럼 인식하기 때문에, 이것이 바로 원격 스니핑이 가능한 요건이 됩니다.

 

GRE Sniffing 이란?


 GRE Tunneling 과 정책 기반 라우팅(PBR)을 이용하여 원하는 패킷을 공격자의 라우터쪽으로 유도하는 Remote Sniffing 기법입니다.

흔히 네트워크의 Border Router는 일반적으로 방화벽의 외부에 위치하게 되며,(과거에 만들어진 많은 회사들의 네트워크 상태가 여전히 이러합니다. 새로 보안성에 맞춰 컨설팅된 회사의 네트워크는 이렇지 않습니다. ) 상대적으로 해킹에 노출될 위험성이 큽니다. 그렇게 공격자에 의해 Router가 PBR 이 해킹된 경우 GRE Sniffing 을 시도 할 수 있습니다.

PBR(정책기반) 은 DBR(목적지 기반)의 설정보다 우선시됩니다.

 

 

 

DBR(Destination Based Routing)

 

 


전통적인 방식의 라우팅 방법
데이터 패킷의 목적지 주소를 이용해 라우팅 경로를 결정


• 예) 목적지가 192.168.1.100 인 패킷은 Router1로 보냄
• 목적지가 192.168.2.100 인 패킷은 Router2로 보냄

 


PBR(Policy Based Routing)

 

패킷의 목적지 주소를 포함한 패킷의 여러 가지 정보들을 이용해 라우팅 하는 방법
관리자가 원하는 정책에 따라 라우팅을 할 수 있다.
Cisco에서는 route-map 을 이용하여 PBR 설정이 가능하다

 

 

 

 

 

전개도

 

대상 타겟은 서버와 데이터를 주고받기 위해, 패킷을 목적지 기반으로 정상적으로 전송합니다. 하지만 공격자가 GRE Tunneling 을 통해, 논리적으로 라우터간 연결을 한 후, 타겟의 라우터를 목적지 기반이 아닌, 정책 기반의 라우팅( 에 : hop=1 인 바로 옆의 더 가까운 라우터로 데이터를 전송한다 ) 을 하도록, 설정해버렸습니다. 결국 해당 데이터는 서버로 바로 가지 않고, 터널을 통해 공격자에게 Sniffing 되어 흘러들어가게 됩니다.

물론 공격자는, 사용자들이 알아채지 못하도록, 다시금 자신에게서 Fowarding 되도록 설정하여, 서버에게 도달하도록 합니다.

 

 

모의환경 모델은 (2) 에서 뵙도록 하지요.

 

 


 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

[ SNMP 의 보안상 취약점 ]

 

현재, SNMP v2c를 쓰는 곳이 여전히 많은데 v2c 는 기능 향상을 가져왔을 뿐, 보안은
v1( Community String = 비밀번호 ) 에만 의존하므로, 취약점이 v1 과 같다고, 앞의 개론에서도 언급했습니다. agent 는 manage 가 정확히 누구인지 판단할 인증 시스템도 없지요.

 

Community String 을 알게 되면


 - 환경 설정 파일 열람 및 수정을 통한 공격 가능.
 - 간단한 정보 수집에서부터 관리자 권한 획득 및 Dos 까지 다양한 형태의 공격 가능.
 

[ Community String 획득 방법 ]


Default Community String
Hidden Community String
Bruteforcing, *Dictionary attack ( 공격자가 외부단일 경우 )
Sniffing ( 공격자가 내부단일 경우, v1 ,v2의 패킷은 암호화가 되어있지 않으므로 )

 

 

[ 모의 환경 ]

NMS 의 매니져인 XP <------> Router 의 Running Config 를
내부 네트워크의 Backtrack 공격자가 침투하여, 매니져 행세를 하면서
라우터의 설정을 파악하고, 또 조작하여 acl , 포트포워딩 등을 손봐서,

외부의 침투 경로를 허용시킨다.

 

[ LAB ]

Backtrack = Attack ( 10.0.0.3 )

XP = Manager ( 10.0.0.1 )

Router ( 10.0.0.254 )  

내부 네트워크 핑이 통하도록 LAB 구성 및 WM 테스트.

 

 

 

 

1. Router

 

- SMNP 관리용 Community String 을 두 개 만듭니다.

비밀번호 뒤에 모드를 입력하지 않으면 기본적으로 Read only 용 비밀번호가 만들어집니다.

수정할 수 있는 쓰기까지 같이 만들어 둡니다.

읽기전용의 C/S 는 public 이라는 비밀번호로.

수정가능한 C/S 는 prvate 이라는 비밀번호로 생성했습니다.

SNMP Protocol 이 시작되었습니다.

 

 

2. ATTACK

 

 

(1) Router Scanning

 이제 내부단의 공격자는, 일단 Router의 SNMP 를 제어할 Community String (=비밀번호) 를 알아내야 합니다. 내부단이므로 해당 장비에 연결이 되어 있겠지요. 즉 Scanning 의 단계에 들어가면 됩니다. UDP Port scanning 을 시도해 봅시다.

 

 

 

 

전체 스캐닝은 시간이 오래 걸리고, 부하를 줄 수 있으므로, SNMP 프로토콜 포트인 161번만 지정해서 스캔해 봅니다. 해당 프로토콜이 존재할 경우 스캐닝에 보이게 됩니다. 덤으로

현재 동작중인 OPEN..  즉 Active scanning 까지 같이 해 주는 멋진 nmap.

 

 

이제 정보를 파악했다면, one-sixty-one 이란 Tools ( Bruteforcing ) 을 사용하여, Community String 을 획득 시도해 봅시다.

 

 

dict.txt 파일 안에 수많은 Dictionary 단어들이 들어 있습니다. 그 중에 private, public 이라는 단어가 존재했습니다.

일치하는 단어를 찾아내면, 해당 값을 결과로 출력해 줍니다. 

 

 

./onesixtyone -c dict.txt 10.0.0.254 를 입력하여, dict.txt 안에 들어있는 단어와, 라우터의 커뮤니티 스트링이 일치했을 경우, 해당 결과를 출력해 줍니다. 다만 해당 비밀 번호가 ro 읽기전용인지, rw 수정권한용 커뮤니티 스트링인지는, 공격자는 알 수 없습니다. 그래도 뭐 두 번 시도해보면 되기에 큰 문제는 없습니다.

 

 

 

 

이제, 공격자는 Router SNMP 서비스의 비밀번호를 획득하였습니다. 이 권한을 이용하여

라우터의 Running-config 환경을 파일화하여, 가져오는 시도를 할 것입니다.

라우터에 직접 로그인할 권한은 없으므로, 이 SNMP 서비스에서의 업/다운로드 기능을, 방금 획득한 커뮤니티 스트링을 통해 권한을 취득하여, 내려받기 시도를 합니다. 

임베디드 시스템, 라우터 등에서 다운로드/업로드는 보통 TFTP 를 씁니다.

( TFTP 는 첨부한 TFTP 파워포인트 자료를 참조 하십시오. FTP 와의 차이점을 비교해 보십시오 )

 

 

TFTP.pptx

( 임의대로 재배포, 수정은 자제해 주십시오. )

 

TFTP 는 FTP 와의 차이점 중 하나가 프로토콜의 여부 외에도, 기본적으로 "디렉토리 인덱싱 서비스" 를 지원하지 않는다는 것입니다. 이 말은 즉, TFTP 를 통해 무언가 다운로드를 하려면, 해당 서버에 자리한 "정확한 파일명" 을 알아야 다운로드가 가능합니다. 하지만 그 이름만 알면, 다른 여타 보안관련 인증 시스템이 없으므로, 매우 손쉽지만 보안에 취약하게 됩니다.

 

 

 

 

(2) Backtrack 에서의 TFTP 실행

 

백트랙의 어플리케이션 탭에서 Wine 탭에 갑니다.

 

 

Configure Wine - DRIVERS 탭 선택 후 - Autodetect 를 눌러줍니다.

Backtrack 설치 경로와 /, /root 위치를 자동 지정해주는 것이지요.

 

 

 

Lunux 에서도 일부 WINDOWS 관련 어플을 실행할 수 있습니다

Application - Wine - Brower 에서 win 파일을 실행가능합니다.
 
추가 경로는 Pentest - windows-binaries - tools 안으로 들어가시면 됩니다.

 

 

 

 

막상 가보면, 실행이 안 되는데, 터미널 가서 리스트를 검색해 보면.

tftpd32.exe 파일이 존재하지만, 녹색으로 빛나지 않는. 즉 현재 실행 불가의 파일입니다.

이는 권한의 문제이므로 chmod 777 때려서, 실행가능한 상태로 만들고 다시 wine 가서 실행해 봅시다.

 

 

 

 

Current Directory 가 서버가 될 곳이고, 현재 Backtrack 의 IP 가 지정되어 있습니다.

 

 

TFTP 의 포트를 심심하니 확인해 봅니다.

 

 

보인다면 정상입니다.

 

 

 

(3) SNMP 에 메세지를 보내서, 외부 TFTP 서버로 라우터 환경파일 다운로드

이제 패킷을 봅시다. 지금 왜 이런 작업을 하는지 아시겠지만

위에서 설명했듯이, 라우터로의 직접적 접근권한이 없으므로 SNMP프로토콜의 커뮤니티 스트링을 통한 운용 권한을 이용하여 TFTP 를 통해, 해당 SNMP 프로토콜에게 "너의 환경 설정파일을 TFTP 를 통해 이쪽 서버로 내려보내라" 라는 SNMP OID 명령을 보내려는 것입니다.

 

BT 에 간편화된 툴이 있지만, 이해를 돕기 위해서, 수동설정과 패킷의 흐름을 보겠습니다.

 

공격자는 GetRequest OID 를 만들어서, 라우터의 SNMP 프로토콜에 전달합니다.

일단, 메세지를 만들 빈 번호(Instance) 를 찾아야 합니다.

임의의 Instance 를 만들어서 ( 저 위에선 마지막에 100번으로 만들어 보냈죠? ) 패킷을 보았더니 Nosuchinstance 라고 보였습니다. 네 이 메세지가 100번이라는 인스턴스는 존재하지 않는다는 소리입니다. 이 번호를 이용하여 메세지 리퀘스트를 만들 수 있습니다.

CISCO-CONFIG-COPY MIB의 OID 번호입니다. NMS 를 통해 라우터를 관리하기 위해 개발되었죠.

우리는 앞서서 SNMP 를 수정할 수 있는 rw 의 Community String 키 Private 라는 값을 알아냈으니, 이제 외부에서 명령을 내릴 수 있습니다.

 

 

snmpget : set이 아니라 get 입니다.

-v : 상세 보기

2c : 해당 SNMP의 버젼 ( v2c 군요 )

-c : Community String 을 지정하겠다는 소리입니다.

1.3.6.1.4.1.9.9.96.1.1.1.1.10 .100

(1) 100번이라는 인스턴트 값 메세지가 있었는지(업/다운로드 했는지) 라우터 SNMP 에 질의하는 OID 번호 입니다

 

 

 

지금부턴 snmpset : snmp 에 setting 을 합니다. ( 반드시 순서대로 진행하십시오 )

private 앞에서 획득해낸 커뮤니티 스트링(=비밀번호) 죠. 이걸 알아야, 라우터의 SNMP에 접근할 수 있겠죠?

 

1.3.6.1.4.1.9.9.96.1.1.1.1.2.100 i 1

 

(2) 라우터의 환경설정 파일을 up/down 할 Protocol 을 지정합니다. 우리는 TFTP 를 씁니다.

tftp(1), ftp(2), rcp(3), scp(4), sftp(5) 의 번호값을 가지고 있습니다.

i = int(정수)형 1이라는 숫자를 지정 = TFTP 를 사용하겠다.

 

 

1.3.6.1.4.1.9.9.96.1.1.1.1.3.100 i 4

 

(3) 중요합니다. 1.1.1.1."3" 의 의미는 라우터에서 TFTP 를 통해 내려받을 환경 설정 파일의 TYPE 을 지정하는 것입니다.

라우터의 현재 돌아가는 실시간 환경 설정 파일을 노려야 하므로, running-config 를 받아야 겠죠.

networkFile(1), iosfile(2), startupConfig(3), runningConfig(4), terminal(5)

i 4 로 정수형으로 지정해주었습니다.

 

 

1.3.6.1.4.1.9.9.96.1.1.1.1.4 100 i 1

 

(4) 이번엔 다운로드 받을 측에서(FTFP 가 설치된 서버쪽이 되겠죠) 받아오는 환경 설정 파일의 type 이 어떤 것인지 정의하는 것입니다.

해당 파일은 running-config 의 텍스트 내용을 저장한 router.run 이라는 파일로 다운로드 받을 예정입니다. 네트워크를 통하여 내려받는 것이니 Network type 으로 정의해 줍니다. 간단하게 말해서 "서버에 다운로드될(복사될) 파일의 타입 지정" 입니다.

형식은 위와 똑같습니다.

networkFile(1), iosfile(2), startupConfig(3), runningConfig(4), terminal(5)

 

 

1.3.6.1.4.1.9.9.96.1.1.1.1.5.100 a 10.0.0.3

 

 

(5) 이제 TFTP를 이용해 다운로드 받을 서버의 위치를 정해주는 OID입니다.

a 는 IP 를 입력하기 위한 옵션입니다. 10.0.0.3 은 지금 TFTP 를 설치하여 환경설정파일을 가로챌 이 공격자(BT)의 TFTP 서버를 적어주면 되겠죠.

 

1.3.6.1.4.1.9.9.96.1.1.1.1.6.100 s router.run

 

(6) 이제 다 됐습니다. 마지막으로 라우터의 Running-config 를 저장할 파일명입니다.

s(string) 으로 문자열로 쓰겠다는 정의를 내리고 저장할 파일명을 적어줍니다.

 

1.3.6.1.4.1.9.9.96.1.1.1.1.14.100 i 1

 

(7) 최종 실행의 메세지 OID 입니다.

정수형으로 1(active) 실행한다는 의미입니다. TFTP 스테이터스를 보면, 라우터에서, 이 쪽 TFTP 서버로 환경설정 파일이 지정된 이름으로 들어왔음을 볼 수 있습니다.

 

 

 

 

다시한번 (1)에서 시도했던, UP/DOWN 의 결과창을 봅시다.

100번이라는 Getrequest 를 만들고, 수행까지 다 했기 때문에, 이제 nosuchinstance 라는 메세지가 아닌, INTEGER = 3 이 보일 것입니다.

 (실패했다면 4번, 성공했다면 3번. 크기가 커서 동작 중이라면 2번, 비활성화 상태면 1번이 보일 것입니다.)

이제 해당 타겟 snmp를 사용하는 라우터에 침투하여, 환경설정 파일을 내려받았습니다.

 

 

 

이제 이 환경설정 파일을 조작하여, 외부 바인딩이나, 보안설정을 풀어버린 후, 이것을 타겟의 라우터에 다시 재 업로드 합니다.

그럼 해당 라우터는 보안이 풀린 상태로, 차후 여러 공격을 당하게 될 것입니다.

 

 

 

(4) 환경설정 파일을 업로드하기

다운로드와 똑 같습니다만 3,N 4,N 그룹을 바꾸는 것이 DOWN / UP 차이점입니다.

새로운 메세지이므로 위에서 다운로드 메세지로 썼던 100번을 더이상 사용할 수 없습니다.

( 업로드할 파일 타입 3.N 을 반대로 Network File  주고, 4,N running-config 바꿔주면 되겠지요. )

 


 

 

(5) 배치파일 형태로 만들기

여러 문장을 쳐야하니 반복적이고 귀찮을 것입니다. 이를 배치파일 형태의 스크립트로 만들 수 있습니다.

vi snmp_down.sh 라는 shell 파일 형식으로 만들어 봅시다.

 

 

 

그리고 실행권한을 chmod 777 을 줘서 실행파일로 바꿔버린 후 ./snmp_down.sh 를 입력하여

실행하면, 자동실행 스크립트처럼 동작합니다.

 

 

 

 

(6) 보안이 걸려 있을 경우, BT의 자동화된 TOOL 이용하기

위에서 했던 방법은 "작동 원리" 를 위한 수동세팅이라고 처음에 설명드렸는데요. 이제 이해하셨다면 아래의 Tool 을 사용할 수 있습니다.

 

 

해당 위치에 존재하는 다음의 두 파일입니다.

 

 

자.. TFTP 는 인증 보안이 없기 때문에, 파일명만 지정하면 자유롭게 업/다운로드가 가능하다고 말씀드렸죠. 그래서 이런 문제를 해결하고자, SNMP 의 라우터에서는 ACL 로 IP 제한(White/black list) 를 걸 수 있습니다. 그렇다면 위에서 했던 방법들은 마지막에 1.1.1.14 로 다운로드를 수행 할 때 공격자의 TFTP 서버(10.0.0.3)을 모르니까, 환경설정파일을 내 주지 않고 거부를 하게 됩니다.

 

그리고 TFTP 의 업/다운로드는 "지정된 IP 대역"의 서버에서만 가능하도록 설정해 주는 것이죠.

 

 

 

 

Router 에서 정책 설정
 
 ACL 지정 ( XP )
 access-list 50 permit host 10.0.0.1


 
 SNMP 프로토콜의 다운/업로드 서비스(tftp)에 ACL 을 지정
 snmp-server tftp-server-list 50


 

 

 

네.. ACL 이 걸려있으니, 10.0.0.3 으로의 다운로드가 거부되었습니다.

 

하지만, 이 또한 문제가 있습니다. 내부 네트워크에 침입한 공격자가 해당 네트워크 대역을 스니핑, Port Scanning 을 거쳐서, "허용된 정상 TFTP 서버의 IP" 를 알아낸다면 다른 방법이 생기는 것이지요. TFTP 프로그램의 "서버 역할" 뿐만이 아닌, "클라이언트 역할" 을 할 수 있는 기능을 이용할 겁니다.

Router 의 ACL list 는 TFTP 의 접근 경로만 차단했을 뿐, SNMP 메시지를 차단한 것은 보시다시피 아닙니다. 업/다운로드만 아이피 필터링을 통해 안 될 뿐이지, SET Messange 는 정상적으로 동작했지요.


 이럴 경우, 인증된 실제 tftp 서버(10.0.0.1) 를 경유지(Proxy)로 사용하여, 다운로드 받아올 수 있습니다.


  = snmp 메시지로 매니저(라우터)에 인증된 tftp 서버로 running-config 를 내려보내라고 요청한 후, 해당 정상 TFTP 서버에서 파일을 가져오는 겁니다. 이중작업이지요.

 

 

[ 환경 ]

이쪽이 정상 허용된 TFTP 사용자입니다. ( 10.0.0.1 ) TFTP 포트인 69번이 열려 있습니다.

공격자인 BT는 이 아이피를 모른다고 생각해야 합니다. 위에서 말한것처럼 포트 스캐닝으로 이 정상 TFTP 서버를 찾아내야 합니다.

 

공격자는 SNMP 가동중인 타겟의 라우터에게 메세지를 보냅니다.

허용된 TFTP 정상 사용자 쪽으로 running-config 파일을 내려보내도록 말이죠.

 

정상적으로 잘 갔습니다.

 

 

이제 뭐 간단하지요? 환경설정 파일을 업로드 당한 10.0.0.1 사용자는 ACL 같은 보안대첵이 전혀 없습니다.

우리는 스니핑을 통해, 정상 사용자가 라우터에서 받은 파일명을 알고 있고, TFTP 의 특성은 파일명만 알면 아무런 보안도 없다는 점을 이용할 수 있습니다.

이제 해당 10.0.0.1 의 사용자에게서 TFTP 로 파일명을 입력하여, 다운로드해 오면 됩니다.

 

 

정상 TFTP 사용자에게서 공격자 쪽으로 다운로드 되었습니다.

 

간단하죠?

 

이제 받은 환경설정 파일을, 보안이 무력화되도록, 수정한 후, 다시금 10.0.0.1 ACL 허용된 정상 TFTP 에게 업로드해 줍니다.

그리고 SNMP Router 에게 다시금 Getrequest 메세지를 만들어서 보냅니다.

정상 TFTP 사용자(10.0.0.1)의 환경설정 파일을, 자신의 라우터에 업로드시키라고.

 

업로드는 copy-router-config.pl 이 아닌 merge-router-config.pl 을 이용합니다.

 

 

 

 

 

(7) 외부 Getrequest 메세지를 차단하는 보안

이제, 상대방이 화가 단단히 났습니다 그래서 이제 OID 를 보내는 외부 요청 메세지 자체를 차단해버리려고 합니다.

커뮤니티 스트링을 만들 때, 메세지 허용 여부까지 ACL로 지정할 수 있습니다.

위에서 TFTP 의 업/다운로드 허용리스트를 만든 50번을 그대로 주도록 합니다.

 

 

 

rw뒤에 50을 쓰면 됩니다.

 

 

이제 수정된 환경 설정 파일을 올려보내려고 하니, 거부가 됩니다. 허용된 ACL(10.0.0.1)의 메세지 외에는 여타 snmpset 외부 메세지 지령 자체를 받아들이지 않는 것이지요.

 

자, 해커는 여기서 포기하면 안됩니다.

SMNP Protocol 은 UDP 를 사용하는 프로토콜이므로, IP 변조가 쉬운 축에 속합니다.

예전에 배웠던 "IP 변조 공격" = IP spoofing 을 사용하여, 자신의 아이피를 허용된 ACL로 위장해 봅시다.

= SNMP 포맷의 5계층 내용은 변하지 않고 3계층의 IP Source 를 허용된 ACL로 바꿔치는 방법입니다.

= 하지만 IP 무결성 검사의 checksum 에 걸려서 해당 패킷이 drop 되므로, 결국 전용 TOOL을 써야 하겠습니다.

 

 

[ IP 변조 ]

 

1. SNMP Router 간의 일반 메세지 요청을 캡쳐합니다. 물론 ACL에 걸려서 받아들이진 않겠지만

어찌됐든 이쪽은 계속 응답 요구를 보내고 있습니다.

 

캡쳐한 패킷들을 파일로 저장해 둡니다.

( SNMP_dump.pcap) libcap 형식으로 저장해야, 아래 변환에서 에러가 나지 않습니다!

 

 

2. 이제 4,5계층 포맷까지 변조할 수 있는 Tool을 이용할 것입니다.

아래의 주소에서 툴들을 보아둡니다.

 

 

3. tcprewirte 툴을 이용하여, 해당 패킷의 10.0.0.3(공격자)의 시작주소를 정상 ACL 주소로 바꿔줍니다

 -C :  체크썸 검사
 -S : 출발지 속이기
 -i [ 원본 캡쳐파일 ]
 -o [ 조작된 결과를 저장할 캡쳐 파일명 ]

re_snmp_down.pcap 이라는 출발지가 정상 ACL 사용자로 변조된 패킷 파일이 만들어졌습니다.

 

 

 

4. 이 변조된 파일의 패킷으로 이제, 라우터에 요청을 합니다.

라우터는 이제 ACL 사용자가 보낸 Request 라고 인식하고, 메세지를 받아들이게 됩니다.

 

 

 

 

[ Wireshark 로 패킷이 잘 안 떠질 때 ]

TEXT 모드인 백트랙 자체 내장 tshark 를 이용할 수 있습니다.

 

1. tshark -i eth0 -w a.pcap 이라고 입력하여, 지금부터 발생하는 모든 패킷을 a.pacp 이라는 파일로 저장합니다.

 


2. 새 터미널 창을 열어서 해당 라우터에게 메세지를 보냅니다. 물론 메세지 자체를 받지 않겠지요.  

 

[입력] ./copy-router-config.pl 10.0.0.254 10.0.0.1 private

10.0.0.1:pwnd-router.config -> 10.0.0.254:running-config... No response from remote host '10.0.0.254' at ../../cisco/copy-router-config/copy-router-config.pl line 34.

적당히 화면을 본 후 캡쳐를 종료 합니다.

 

3. 캡쳐 내용을 확인

tshark -r a.pcap

 

4. 이제 이 패킷을 변환할 수 있는 libpcap 방식으로 재 인코딩해야 합니다.

패킷 정보 보기 = capinfos a.pcap

= 형식이 나오는데 libpcap 방식이 아닐 것입니다.

 

패킷 인코딩하기 = editcap a.pcap -F libpcap a.pcap

-F libpcap : libpcap 형식으로 필터링하여 재 인코딩 합니다.

= 이제 tcprewite와 wireshark 가 알아 볼 수 있는 형식으로 변환되었습니다.

 

해당 패킷을 이제 다시 tcprewite 와 같은 경로에 넣고, 목적지를 바꿔칩니다.

 

 

./tcpreplay -i eth0 b.pcap 을 입력하여, 해당 패킷을 보내면 이제 패킷의 메세지 요청을 받아들이게 됩니다.

 

 

 

 

 

 

[ 예방 대책 ]

 

SNMP 를 사용하지 않는 시스템일 경우, SMNP 서비스를 꺼 줍니다.

 

#no smnp-service

= 커뮤니티 서비스만 죽인다고, snmp 프로토콜 서비스 전체가 꺼지는 것이 아니니 반드시 위 명령어를 써야 함.

 

다소 비싸고 복잡하더라도 SMNP V3  버젼을 사용. ( 현실적으로 금방은 힘든 이야기 )

 

 

 

 

 

 

 

- 지금까지의 방법은 해킹의 기본인 해당 타겟의 내부와 로컬적으로 연결된 "스니핑" 이 가능한 전제의 공격을 말씀드렸습니다.

하지만, 외부의 다른 네트워크에서 원격으로 공격하는 방법이 보통 더 무섭고, 멋있(..) 죠?

 

기본적으로 외부 해킹도, 원리가 크게 다르지 않습니다.

일단 해당 타겟 네트워크의 내부 돌아가는 현황(스니핑)을 모른다면, 불가능합니다.

 

그래서 원격 SNMP 해킹을 하는 경우는, 이제 공격자의 Router 와, 타겟의 Router 를 직통으로 연결하는 가상의 길 = Turnnel 을

을 만들게 됩니다. 즉 GRE Protocol 을 이용한 터널링 원격 공격입니다.

 

다음 글에서 뵙지요.

 

 

 

 

 


 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

무선랜은 기본적으로 Infrastructure 와 AD-HoC 방식이 존재합니다.

 

1. Infrastructure Network 

- 무선망 <-> 유선망 연결 ( 외부 연결 )

 

 - AP와 Wire Network 를 연결하여 외부 네트워크와 통신이 가능한 구조로 만든 Wireless LAN Network


 - 모든 통신은 반드시 AP 를 거쳐서 이루어집니다.
 - AP와 연결된 유선망 = Distribution System

= 무선망을 쓰지만 결국 최상위 업체로 거슬러 올라가면 유선망 하에서 연동된다는 의미.

 

 

 

무선은 Half Duflex 방식이므로, 상호 신호 충돌의 위험이 유선의 Full duflex 방식에 비해 큽니다. ( CSMA/CA )

BSSID : 해당 BSS를 관리하는 AP 기기의 MAC 주소와 동일합니다.
           AP까지만 찾아가는 위치지정 ID 입니다.

내부의 Station(단말기) 를 식별하기 위해서는 SSID 가 필요하게 됩니다.
BSS의 범위는 AP기의 신호의 강도에 따라 정할 수 있습니다.

그림에서 보시다시피 네트워크단이 서로 나누어져 있으므로, 기본적으로 통신할 수 없습니다. ( 사설망의 172.16.10.0/24 와 172.16.20.0/24 라고 생각하시면 이해가 빠릅니다 ), 고로 둘을 하나로 묶는 역할이 필요합니다. 그것이 바로 ESS 입니다.

 

 

2. Ad-Hoc Network

 

 - AP없이 내부 단말기(Station)으로만 구성된 Wireless LAN Network
 - 외부 네트워크와 통신 불능.
 - 외부 네트워크와의 통신을 위해 하나의 스테이션을 AP처럼 사용.
 - 보안에 취약점이 될 수 있으므로 사용을 권장하지 않습니다.


 
 

 EX ) 회사 내부의 무선 프린터 네트워크 공유 등…
 보안이 설정된 무선 네트워크 구역 안에 애드훅이 있을경우, 그건 뒷문과 같습니다.

해당 무보안의 Ad-HoC Station 에 침투하여, 악성코드를 설치해 둔다면, 차후

해당 애드훅 기기들이 BSS, ESS 망에 참여할 때, 네트워크 전체에 악성 코드가 퍼지고,  해킹당할 위험이 생기게 됩니다.

 

 

 

 

[ 네트워크 용어 설명 ]

 

•    AP(Access Point)


–유/무선 통신을 연결하는 역할

–전달받은 데이터를 다른 쪽으로 중계하는 역할
–Wire Network의 스위치와 비슷.

 


•    STA(Station)


–Wireless NIC(Network Interface Card)를 장착해서 IEEE 802.11표준을 수행할 수 있는 장비
–노트북, WLAN card를 장착할 Desktop PC 등

 


•    DS(Distribution System)


–여러 AP들을 연결하는 Backbone Network. = 기간망
–일반적으로 Ethernet이 많이 사용.

 


•    BSS(Basic Service Set)


– WLAN에서 최소 단위의 Network
– Infrastructure, Ad-Hoc 등
– 동일한 BSS내에 있는 AP와 STA 간에 통신이 일어납니다.
– BSS를 구분하기 위한 주소로 BSSID를 사용

 


•    ESS(Extended Service Set)


– 하나의 DS에 다수의 BSS가 연결된 Wireless Network
– 2개 이상의 AP가 존재하며 각 AP는 동일한 서비스를 제공
– 로밍(roaming)은 반드시 ESS에서만 가능합니다.

 


•    로밍(roaming)


– ESS내에서 BSS를 이동하는 과정
– 같은 ESSID를 사용하고 있는 상태에서만 로밍을 할 수 있습니다.

= 국제 로밍같은 경우가 바로, 해당 현지의 인터넷 업체와 계약을 맺고, ESS의 범위를 확장하는 개념이라고 생각하시면 됩니다.

 

•    BSSID(Basic Service Set Identifier)

 


- 48bit 의 크기를 가져가며 일반적으로 AP의 MAC주소를 의미
- Ad-Hoc Network의 경우 random
- 모든 BSSID 는 유일
- 각 BSSID 는 SSID 와 매치되어 있음

 

•    SSID(Service Set Identifier)

 


- WLAN의 NETWORK 이름
- 최대 32문자(대소구분)
- 동일한 Wireless Network 에 소속된 장비들은 모두 같은 SSID 를 가져야 함

 

•    ESSID ( Extended Service Set Identifier )

 


- BSS에서 확장된 ESS Network 이름
- ESS로 확장된 경우 포함된 모든 BSS들은 동일한 SSID(=ESSID )를 가짐.


 

 

 

 

[ 무선 랜카드 인터페이스의 Mode ]

 


 - Manage mode ( Infrastructure 등.. )

 


 - 기본값
 - STATION에서 AP로 통신할 때 사용 ( 기본적으로 AP로 가게 되어있다 )
 - 모든 통신의 진행을 AP에게 맡긴다
 

 


 - Ad-Hoc mode

 


 - Station 끼리 직접 통신
 - 각 스테이션이 통신에 관한 모든 책임을 지게 된다.
 

 

 

 - Master mode ( ex : 애드훅에서 잠시 외부 통신이 필요할 경우 )

 


 - WLAN card 가 다른 드라이브 SW 와도 결합해서 동작
 - 마치 AP처럼 인식
 - Ex ) 스마트폰 테더링 


 
-- 이상 유선 LAN 의 Bypass Mode 형식과 비슷합니다 -----

 

 

 - Monitor mode

 


 - RFMON(Radio Frequency Monitoring)
 - Data 를 직접 주고받지는 못하지만 Wireless Data 를 capture 할 수 있는 mode.


 
 --- 유선의 Promiscuous 모드와 비슷하지만, 들을 수만 있고(Listen), 송신할 수는 없습니다 ---

 

 

  모의환경에서는 하나의 물리 무선랜카드에서 Monitor mode 가상 랜카드를 TOOL 추출하고 , 나머지 mode 들을 동작시키면서, 그것을 캡쳐하고 분석하고, 해킹도 연습해 볼 것입니다. ( 0. 모의 환경 구성을 이 글들을 다 읽고 다시 한 번 보신다면, 어느정도 이해가 되리라 생각합니다 )

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

 

Wi-Fi ( Wireless Fidelity )


 - 이전 WECA(무선 이더넷 호환성 협회)에서 변경된 호칭
 - 802.11 표준을 사용하는 무선 장비를 인증하는 로고 제공 : 호환성 인증

 

 


 
 - 설립 목적 : Wi-Fi 제품의 상호 운용성을 보증하고, IEEE802.11X가 전 세계의 무선랜 표준이 되도록 추진한다


 - www.wi-fi.org

 

 

 

Frequency Modulation ( 전기신호 -> 전파신호로 변경하는 방법 )

 


 - Spread Spectrum

 


 • 최초 무선 개발 목적 : 군사용
 • 신호를 숨기거나 흐리는 기법으로 보호

 


 - FHSS(Frequency Hopping Spread Spectrum) ( 블루투스 )

 

 • 신호를 숨기는 기법
 • 각 채널당 신호를 잘라서 전송

 


 - DSSS(Direct Sequence Spread Spectrum) ( Wi-Fi )

 


 • 신호를 흐리는 기법
 • Data신호에 Noise 신호를 더해서 원래의 신호를 흐림
 

 


 - OFDM(Orthogonal Frequency Division Multiplexing)  802.11n

 - 신호를 여러 개의 부반송파로 변조하고

서로 직교시켜서 동시에 전송해서 대역폭을 줄인 다중화 기술
 
 

 

영역별 분류

 

PAN ( Personal Area Network )


 - 개인 통신망
 - Bluetooth

 

WLAN(Wireless LAN)


 - 무선 LAN
 - 802.11X, 802.11i, 802.1X

 
WMAN(Wireless MAN)


 - 무선 MAN
 


WWAN(Wireless WAN)


 - 무선 WAN
 - 2G(CDMA ..) , 3G(WiMAX & Wibro), 4G(LTE)

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

WIRELESS ?  

 

 - Wire(유선) Network


 

 • 물리적 선으로 연결 : 전기적 신호로 Data를 전달

 


 • IEEE 802.3(2) 표준 규칙 사용

 

 


 - Wireless(무선) Network 


 

 • 공기로 연결 : 주파수 신호로 Data 전달


 • IEEE 802.11 표준 규칙 사용


 
 • ISM Band

- Indusry + Science + Medical


 • 산업, 과학, 의료 분야에서 무료로 사용할 수 있는 주파수 대역
 • 사용자의 Data를 전송하기 위한 Wireless Network 목적으로 무료 사용가능
 • 2.4GH 대역, 5GHz 대역

 


 

 

 

 

 

IEEE 802.11 X

 

표준Protocol

Frequency Band

평균 속도

최고 속도

802.11

2.4GHz

1 Mbps

2 Mbps

802.11b

2.4GHz

6.5 Mbps

11 Mbps

802.11a

5GHz

25 Mbps

54 Mbps

802.11g

2.4GHz

11 Mbps

54 Mbps

802.11n Draft v2

2.4 & 5GHz

100 Mbps

300 Mbps

802.11n

2.4 & 5GHz

200 Mbps

600 Mbps

 

1. 802.11
–1977년 처음 공표, 2.4GHz대역 사용, 최고 전송 속도 2Mbps

 


2. 802.11b
–1999년 공표, 기존의 802.11표준 개선, 2.4GHz대역 사용, 최고 전송속도 11Mbps

 


3. 802.11a
–1999년 공표, 기존의 802.11표준을 개선하였으나 5GHz 대역 사용, 최고 전송속도 54Mbps(호환성문제로 널리 사용되지 않음)

 


4. 802.11g
–2003년 공표, 802.11b표준 개선, 2.4GHz대역 사용, 최고 전송속도 54Mbps

 


5. 802.11n   (802.11n Draft Version 2 : 임시표준)
–2007년 임시 표준 발표, 2.4GHz/5 GHz 대역 동시 사용, 최고 전송속도 300Mbps
–2009년 확정 표준 발표, 2.4GHz/5 GHz 대역 동시 사용, 최고 전송속도 600Mbps


 

 

 

 

관련 상세 정보 위키 : http://ko.wikipedia.org/wiki/IEEE_802.11n-2009

 

그 중 일부 발췌.

 

 가장 빠른 전송률을 얻기 위해서는 802.11n 5Ghz 네트워크를 사용하는 것이 좋다. 5GHz 대역은 2.4GHz 대역에 비해 적은 무선 간섭과 적은 채널 중복 때문에 상대적으로 더 나은 능력을 가지고 있다. 하지만 현재까지 대부분의 컴퓨터에서 802.11b/g 모드를 사용하고 있기 때문에 802.11n 만을 허용하는 네트워크(802.11n-only)는 비효율적이다. 오래된 컴퓨터에서 802.11n 만을 허용하는 네트워크를 사용하기 위해서는 호환되지 않는 기존의 WIFI 카드를 교체하거나 혹은 컴퓨터 전체를 교체해야 한다. 따라서 단기적으로는 802.11n 하드웨어가 널리 쓰일 때 까지 802.11b/g/n 이 혼합된 네트워크를 사용하는 것이 효율적이다. 802.11b/g/n이 혼합된 모드를 사용하는 경우 두 개의 라디오를 사용할 수 있는 AP를 이용하여 802.11b/g 트래픽은 2.4GHz 대역으로 802.11n 트래픽은 5GHz 대역으로 분리하여 사용하는 것이 일반적으로 가장 좋다.

 

 

 

 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

[ 모의환경 ]

1. 무선공유기(유/무선 공유기 등등.. )

2. 무선 랜카드

- Iptime 의 N150UA 무선 USB 랜카드를 사용하겠습니다.

 

3. 아이피타임 공식 홈페이지 가신 다음에 다운로드 페이지에서

해당 드라이버 최신 버젼을 설치해 주십시오.

 

 

가상환경상 불안정한 경우가 많으므로 신호가 제대로 잡히지 않을 경우에는

프로그램적으로 초기화 시도 후, 여러번 후에도 되지 않는다면, USB 무선랜카드를 뽑았다가 다시 인식시키는 편이 좋습니다.

 

 

 

[ 공유기 환경 설정 ]

 

Distribute System(DS) : 실습환경의 Ethernet ( 192.168.45.0/24 ) / DHCP

BSS(Basic service set) : 해당 실습라인은 2번째 AP 입니다.

각자의 AP마다 다른 네트워크 대역을 가질 것이며, 2번 AP 라인은

192.168.20.0/24 네트워크와 1번 Channel 에 연결하도록 하겠습니다.

SSID : WLAN_02 로 세팅 됩니다.

 

 

 

 

[ 무선랜카드 장착 ]

= 집에 일반적인 공유기 환경이 갖춰져 있을 경우 여기부터 시작하셔도 됩니다!!

 

USB 무선랜카드를 장착하면, 보통 로컬 하단에 무선랜 관리 창이 뜨는데,

만약 뜨지 않을 경우에는 service.msc 를 실행하신 후

WLAN_Autoconfig 를 재시작해 주시면 됩니다.

 

 

 

USB 무선 랜카드를 장착하면 VMware Station 의 Backtrack 아이콘에 다음과 같은 USB마크가 뜰 것입니다. 마우스를 갖다대서 WLAN 인지 확인하시면 됩니다. 비활성화되어 있다면 마우스 오른쪽을 클릭하여 연결하십시오.

 

 

 

 

무선랜카드를 꽃았지만 아직, 무선랜카드를 사용하여 통신을 위한 공인인터넷에 연결은 되지 않은 상태입니다.

 

 

 

 

[ 상태 확인 ]

무선랜 확인 명령어는 약간 다릅니다

유선랜이 ifconfig 였다면 무선랜은 iwconfig 를 사용합니다.

 

 

무선랜의 패킷을 관찰하려면, 기본 모드인 Managed Mode 가 아닌,  Monitor 모드를 가상화 인터페이스로 따로 빼낸 후, 그 인터페이스를 관찰해야 합니다. wlan0 을 관찰해도 유선랜의 흐름이 대부분 보이기 때문에, 관찰하기가 힘들기 때문입니다.

 

해당 가상화를 위한 툴이 Backtrack 에 들어 있습니다.

 

1. airmon-ng

 

 

 

해당 wlan 을 체크했을 때, 저런 잡다한 프로세스가 존재해서는 문제가 발생할 수 있습니다

kill -9 (강제종료) 명령어로 해당 PID 를 꺼주도록 합니다.

 

 

 

 

위의 dhclient3 문제는, 환경설정 파일( /etc/networking/interfaces ) 에서 wlan0 번이

dhcp 세팅을 받아오도록 설정되어 있기 때문에 일어나는 메세지입니다.

가서 설정을 static 으로 바꿔주도록 합시다.

하는 김에 pstree -p 명령으로 , 마저 dhclient , wicd , wireshark 같은 방해 프로세스들을

종료해두도록 합시다.

 

 

 

 

청소가 다 되었다면 이제 체크해보아도 아무 메세지가 안 나올 것입니다.

그렇다면 이제 monitor mode 의 인터페이스를 만들도록 합시다.

 

2. [ airmon-ng start wlan0 ]

 

 

 

모니터 모드가 mon0 이라는 인터페이스로 활성화되었다는 메세지가 뜹니다. 

 

 

이제 다시 무선랜 인터페이스를 확인해 보면 mon0 이라는 monitor mode 가

추가되었음을 확인할 수 있습니다.

 

 

 

[ 패킷 스니퍼의 작동 유무 확인하기 ]

1-1. Kismet

기본 디폴트로 ENTER 로 넘기고 ADD Source 추가에서

방금 만든 mon0 을 추가해주면, 모니터링 화면을 보실 수 있습니다.

자세한 사용법은 차후 다룰 기회가 있을 것입니다.

 

 

 

 

 

1-2. Airodump-ng

[ airodump-ng [ 인터페이스 ] (mon0) ]

 

해당 무선랜카드에 잡히는 모든 Becon들과 BSS들이 보입니다.

필터링을 통해, 현재 자신의 AP 수신 신호를 찾습니다.

위에서 SSID : WLAN_2 에 채널 1번이었던 사실을 떠올립시다.

 airodump-ng --bssid WLAN_2 --channel 1

 

 

 

1-3. Wireshark

주변 무선신호들이 어지럽게 패킷에 검출되고 있습니다.

다루는 법은 차후 다시 해보도록 합니다.

 

 

 

 

[ 자신의 공인아이피 공유기(AP)에서 IP 를 무선랜카드에 할당하기 ]

- 통신연결은 윈도우즈에서 여러분들이 간단히 접속하였던 "자동" 방식과

SSID와, 보안관련 정보 , 채널정보를 수동으로 입력해주는 "수동" 방식이 있습니다.

우리는 앞의 네트워크 대역 설정부터 수동으로 세팅한 경우이므로. 직접 입력해 주도록 합니다.

혹여 환경이 다르신 분들은, 자동으로 IP를 받아오셔도 무방합니다.

 

인터페이스 설정 후 dhclient wlan0 으로 AP(공유기)로부터 인터넷이 가능한 DHCP 임대 아이피를 받아오도록 합니다.

 

 

간혹 dhcp 할당 대역이 다 소진되거나, 가상화 문제로 인해

아무 문제가 없음에도 불구하고, 무한 sleeping 에 걸리는 경우가 있습니다.

( 문제가 없는지 확인하는 법은 위의 airodump-ng mon0 모니터링 했을 때

1번 채널에 정상적으로 자신의 BSSID 가 보였다면 정상입니다!! )

이 경우에는, WLAN 을 초기화해주어야 합니다.

초기화해주는 방법은 monitor mode 를 잠시 끄고 manage only 모드의 인터페이스

하나만 남긴 다음, 다시 재 설정하는 방법입니다.

 

 

 

 

1. WLAN 초기화
 
 1) airmon-ng check wlan0 : 실행 프로세스 확인


 2) pstree -p 후 kill -9 [PID] : 관련된 잡 프로세스 종료


 3) ifconfig wlan0 down : 비활성회(모드 변경전에는 항상 랜카드를 꺼야 한다)


 4) iwconfig wlan0 mode monitor


 5) iwconfig wlan0 mode manage

 : 모드를 모니터링 모드로 변경하고, 다시 매니지드 모드로 변경(초기화)


 6) iwconfig wlan0 essid [ESSID] : 이 환경에서는 WLAN_2


 7) iwconfig wlan0 channel [N] : 이 환경에서는 1


 8) dhclient wlan0 : AP(공유기)에 DHCP 공인아이피를 무선랜카드에 임대 요청
 
2. 재할당받는 방법


 1) dhclient -r wlan0 : 반드시 기존 임대 할당을 해제해야 다시 재임대 받을 수 있음.


 2) 1의 방법으로 되지 않으면, 위의 WLAN인터페이스 초기화 후 재시도

 

 

성공!

 

무선 연결 과정을 마칩니다.

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

Scanning 개요

 

앞서서 우리는 Foot Printing 으로 대상의 위치를 알아냈습니다.

이젠 그 서버가 현재 죽어있는지, 살아있는지, 만약 살아있다면 이제 어떤 경로로 침투해야 할지 길을 찾아야 합니다. 


 - 목표 네트워크에서 동작중인 시스템 탐색(os, 서비스 등등)
 

 


종류

앞 글의 전반적인 로드맵 글반드시 숙지하시기 바랍니다!!


 - Active Host Scanning ( 해당 네트워크의 동작중 유/무 확인 )
 - Port Scanning ( 살아있을 경우 포트 확인 )
 - Vulnerability Scanning

 

로 구성이 됩니다.

 

 

 

 • (4계층 장비) Port 란?


 1. 서비스의 종류
 2. 전송방식을 결정

 

OSI Layer 7계층에서 Port 를 사용하는 것은 4계층이라고 이미 아실 겁니다.
 
윈도우는 "웹서버는 포트80이고, tcp/ip 프로토콜을 사용한다"는 사실을 로컬 컴퓨터의 C:\Windows\System32\drivers\etc\services 에 저장하고 있습니다.

보내는 입장에서는 이미 계층의 정보를 알고 보내기에 상관없으나, 받는 입장(목적지)에서는 데이터가 들어오는 포트를 보고 데이터의 종류를 알 수 있게 되지요.

포트 번호 = 2byte(=16bit)
0~65535 의 총 65536(2의16승) 의 번호를 가지게 됩니다.

 

 1. 0~1023 = Well Known Port 
 - 잘 알려진 서비스를 구분하기 위한 서비스 ( 이미 지정된 포트 )
 - 25 smtp(메일 보내기), 110 pop3(메일 받기), 80 http . 43 whois 20,21 ftp, 22 ssh 67/68 dhcp 69 tftp 53 dns 161/162 snmp 등등...

위의 services 파일을 열어보시기 바랍니다.
 


 2. 1024~49151 = DCCP well Known Port = Registed port 
 - 등록된 포트 ( 주로 업체들이 사용 )


 
 3. 49152~65535 = Random Port
 - 데이터가 생성된 후 출발지 포트 등으로 사용합니다.

 


 

 

(1) Active Host Scanning
( 해당 네트워크의 동작중 유/무 확인 )


 Scanning 기법 중 가장 기본적인 방법으로 ping 을 보내서 흔히 확인하는 방법입니다. ( ICMP 프로토콜을 사용 )


ICMP : IP 를 도와주는 프로토콜 ( 3계층 )


 - Internet Control Message Protocol
 - IP 는 신뢰성을 보장할 수 없으므로, 장애 발생시 수신측에서 송신측으로 TYPE값을 통해 정보를 전달할 필요가 있습니다. 그에 사용되는 프로토콜입니다.
 - type 0,8 (echo reply/request) - 통신 전달 검증 ( 8번을 통해 요청 - 0번으로 응답 = 통신 정상 )
 

개수가 많을 경우 자동화된 툴을 이용할 수 있습니다.


(백트랙 기본설치) NMAP
 - 네트워크 보안을 목적으로 하는 스캐닝 툴.


(백트랙 기본설치) hping
 - TCP/IP packet generator 로써 packet 내부의 값을 옵션을 통해 지정해서 변경할 수 있는 툴. 일반적으로 포트 스캔, 방화벽 룰 테스트 등의 네트워크 성능과 보안성을 검증하기 위해 사용합니다.

 


활용 : 네트워크 통신 검증
 에러 메시지 검출

 

Ping 정보의 TTL = Time to Live ( 루프로 인한 다운 현상을 방지하기 위해, 최대한 패킷이 살아있을 시간 TTL 을 지정하게 됩니다.

 

목적지의 시스템 운영체제에 따라 디폴트 값이 달라짐.

 

TTL 값

 1. Linux Kernel 2.2 ~ 2.4 : ( ICMP 요청패킷 : 255 / 응답패킷 : 64 )
 2. Linux Kernel 2.0 ( 요청패킷 : 64 / 응답패킷 : 64 )
 3. Free BSD ( 요청패킷 : 255 / 응답패킷 : 255 )
 4. Solaris ( 요청패킷 : 255 / 응답패킷 : 255 )
 5. HP-UX ( 255/255 )
 6. Windows 95 ( 32 / 32 )
 7. Windows 98 ( 128 / 32 )
 8. Windows NT ( 128 / 32 )
 9. Windows 2000 ( 128 / 128 )

 

NMAP


 - 다운로드 및 설치 : www.nmap.org
 

 

 

프리피스 입력으로 해당 네트워크의 모든 살아있는 호스트를 체크할 수 있습니다.

추가로 네임서버조회도 동시에 실행됩니다.

 외부망 ICMP 외에 내부망(로컬) ARP 프로토콜 테스트도 가능합니다.

(죽어있는 호스트는 보이지 않으므로, 파악이 용이합니다. )

 

이제 우리는 DNS 서버를 공격하여 test.co.kr 의 여러 admin, cafe, ns1, ss 등의 트리 서버들을 알아내었고, nmap 을 이용하여, 현재 그 중 진짜로 살아있는 서버는 ns1.test.co.kr 하나뿐이라는 사실까지 확인할 수 있었습니다.

이제 저 살아있는 하나의 서버를 Port Scan 기법인 TCP scanning 을 해 봅시다

 

[ 다음 단원으로 ]

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

DNS ( Domain Name System ) 란?

 

- 네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스이다. ( 백과사전 )

 

FQDN - (절대경로) blog.naver.com.

= Fully QulifIied Domain Name

PQDN - (상대경로) blog(.naver.com.)
  상위 naver 에 소속되어 있는 구간에서의 독립 사용가능한 주소를 의미.

최대 63자까지만 사용가능.

마지막에 . 을 안 붙여도 보통 상관이 없습니다만 실제로는 존재한다고 보시면 됩니다.

 

차후 DNS Spoofing 이라는 공격 기법에서 DNS 의 정의와 포맷 등을 자세하게 다룰 예정이니, 지금은 이 DNS 의 간략한 정의와, 타겟의 DNS 정보를 어떻게 수집하여, 공격 기반의 초석을 다질 것인지 알아봅니다.

 

 

 

 

 

클라이언트가 DNS 를 요청하는 순서


 1. 클라이언트의 hosts 파일
 2. DNS 캐쉬
 3. DNS 요청(쿼리) - 내부 ( 로컬 쿼리 ) , 외부 DNS 서버 연동된 질의( 재귀 쿼리 )
 - DNS 서버 세팅된 곳을 목적지로 지정합니다.
 
DNS 서버도 일단 

 1. 자신의 캐쉬를 확인후 해당 도메인 정보가 없으면
 2. ZONE 영역을 확인. 거기서도 없으면
 3. Root Hint 지정 ( 상위의 ROOT DNS 에게 모르는 것을 묻습니다. )
 
 www.naver.com.     오른쪽의 .부터 역순으로 하나씩 DNS질의를 합니다.
 보통 해당 dns서버는 상위 한 단계의 정보만 가지고 있습니다.
 
 Ex).은 앞의 com의 정보만. Com의 dns서버는 naver 라는 곳의 정보만 가지고 있습니다.

즉, 순서대로 거슬러 올라가면, 결국 상위 루트 DNS 에서 알려주기 때문에, DNS 서버에 해당 도메인 서버의 정보가 없어도, 세계 어느 곳이던지 도메인명으로 찾아갈 수 있게 되는 것입니다.
 
 

 


 

- 윈도우즈에서의 DNS 캐쉬 초기화 


c:\windows\system32\driver\etc\hosts

Hosts 변경후 웹브라우저를 닫고
Ipconfig /flushdns 로 dns정보를 초기화

Hosts에 의한 dns요청정보를 확인하려면
Ipconfig /displaydns

 

 - 리눅스의 DNS 캐쉬 정보 초기화
 
 1. 리눅스의 hosts 는 /etc/hosts
 
 2. 서비스 초기화 ( service nscd restart )
 

 - MAC OS 의 DNS 캐시정보 초기화하기
 
 dscacheutil -flushcache

 

[ 특정 사이트의 DNS 정보 검색하기]

 

 

1. Whois 서비스 ( 4계층 스위치 )

 

한국  http://whois.kisa.or.kr

DNS LIST
(통신사별)
 1. SK Broadband 
   - 주 : 219.250.36.130
 - 보조 : 210.220.163.82
 2. KT
 - 168.126.63.1 / 2
 3. LG 파워콤
 - 164.124.101.2 / 203.248.252.2
 4. KT 지역별 DNS
 - 서울 : 168.126.63.1 / 2
 - 인천 : 61.74.63.1 / 168.126.63.1
 - 수원 : 61.77.63.1 / 168.126.63.1
 - 대전 : 61.81.63.1 / 168.126.63.1
 - 광주 : 203.251.63.1 / 168.126.63.1
 - 대구 : 211.229.63.1 / 168.126.63.1
 - 부산 : 211.216.63.1 / 168.126.63.1

보통 다음과 같은 정보들을 획득할 수 있습니다.

 

naver.com

 

 등록, 관리 기관
 도메인 이름
 목표 사이트 네트워크 주소와 IP 주소
 관리자, 기술 관련 정보
 등록자, 관리자, 기술 관리자
 레코드 생성 시기와 업데이트 시기
 주 DNS 서버와 보조 DNS 서버
 IP 주소의 할당 지역 위치
 관리자 이메일 계정

 

2. Linux 의 NC ( network cat ) 을 이용한 DNS 정보 수집

 

- 테스트 조건(Backtrack 환경)


 

 

 - NAT 랜카드를 입력후 DHCP 로 자동 임대 받아서 공인아이피 인터넷이 가능한 환경을 구성합니다. 

= ( 랜카드 VMnet8 (NAT ) 로 세팅 )

= 그 후 , dhclient eth0 입력하여 자동 IP 를 할당 받습니다. ifconfig 로 확인!
 

통신 구성 및 연결 확인 하기

 1. 게이트웨이 연결 여부를 확인 ( 로컬 if/pconfig /all ) , route
 2. IP/도메인으로 각각 외부 통신여부 확인 ( ping )

 

 

 

nc -v whois.kisa.or.kr 43 을 입력

( -v :상세 보기  , 43 = port )

그 후 원하는 검색 도메인명( ex : nate.com )을 입력.

whois nate.com 도 동일한 결과값을 얻을 수 있습니다.

 

 

 

 

3. Windows의 SmartWhois 를 이용한 DNS 정보 수집

 

 

 

 

4. netcraft 를 이용한 정보 수집

www.netcraft.com 에 접속하여 사이트를 검색.

 

 

5. nslookup 을 이용한 DNS 정보 수집

리눅스/윈도우즈 공통적으로 사용할수 있는 기본 내장 "네임서버 조회" 입니다.

 

조회를 거칠 네임서버를 직접 지정할 수 있습니다. 

 

 

ns1.nate.com 을 글로벌 도메인으로 연결 후, nate 관련 정보 검색

 

 

검색 타입을 SOA 로 바꾸고 세부 정보 검색

DNS에서의 SOA Type?

= 해당 도메인 네임서버에서의 이름을 할당 후, 해당 캐쉬(세션의 개념으로 이해하시면 됩니다 )의 유지/지속시간을 설정하는 Record 입니다. 즉 아래와 같이 각종 상황에 대한 지속시간의 정보가 나오는 것을 보실 수 있습니다.

 

 

 

리눅스의 dig 명령어를 이용한 사이트 정보 획득

1) 기본적으로 알아낸 네임서버 주소를 입력하여, 아이피를 획득

 

2) 해당 글로벌 네임서버 주소를 @로 기입하고 nate의 전체 도메인 구조 검색.

 

해당 네임서버의 구조와 아이피를 적에게 노출시키는 자체가 사실 공격의 빌미를 제공하게 되죠.  그래서 요즘은 보통 특정 대상에게만, 또는 외부에 정보를 노출하지 않도록 설정하는 곳이 많습니다. ( 이런 정보 노출했다가 작년에 국내 대형포털 n 모 곳이 해킹의 빌미를 제공했었죠 .. 일명 Zone Transfer 공격 기법이라고 합니다. ) 그 설정 방법은 DNS 서버를 구성하면서, 알 수 있을 것입니다.

 

6.Zone Transfer 를 이용한 DNS 정보 획득

타입 정의에는 axfr ( Full scan ) 방식과 ixfr( 증분 ) 방식이 있습니다.

타입 정의를 위와 같이 하고, 네임서버 조회를 하면, 해당 서버의 모든 구조가 다 보여지게 됩니다.

 

 

단순한 기본 검색과 set type=axfr 로 지정하고 같은 검색어로 조회한 결과 차이

 

해당 서버의 하위 모든 DNS 구성 정보가 보여집니다.

 

리눅스의 dig 명령어에 axfr 로 입력해도 잘 나옵니다

 

dig @ [ @다음에는 거쳐갈 네임서버의 아이피를 적어준다 ]

axfr = Full scan

 

이렇게 죄다 보여져 버리면 공격해달라고 광고하는 격이 되버리겠죠?

그래서 반드시 보안상 문제로, 외부에서는 이러한 조회를 할 수 없게 설정해야 합니다.

DNS 서버에서 외부에서 조회를 하지 못하도록 설정해야 합니다.

 

DNS서버구성 파일( /etc/named.rfc1912.zones )

allow-transfer { any; } 를 반드시 { none; } 또는 지정 아이피로 해주어야 합니다.

 

any = 모두에게 허용

none = 검색 불가

특정 아이피 = 해당 아이피만 검색 허용

 

 

 

 앞에서 행한 nslookup, dig, tansfer , 구글 해킹 등으로 해당 DNS 서버의 구조와 목록을 유추할 수 있습니다. ( 정보 수집 )

지금까지 보시다시피, axfr 로 transfer 를 질의하면, 해당 dns 서버의 모든 정보와 구조를 보여줄 수 있기에 named.rfc1912.zones 파일에서 transfer { none; 또는 특정 보조 dns 서버로 설정 } 를 수정해야 한다는 것까지 보았구요.

위의 수법이 막혔을 경우, 이제 무차별 대입(Brute Forcing) 이라는 방법을 사용할 수도 있습니다.


무작정 하나씩 서버에 질의를 보내, 해당 아이피가 진짜인지 아닌지 파악하는 행위를 이어서 행할 수 있는데, 일일이 하나씩 보내는 것이 아닌(Brute) 를 자동으로 프로그램화시켜(dictionary attack) 알아내는 기법이 존재합니다.

BackTrack 에 자체 내장된 DNSBrutefocing Tool 또는 DNSenum Tool 을 사용합니다.

보통 더 편리한 DNSenum 을 쓰게 됩니다.

 

백트랙 Bruteforcing

 - Backtrack R3 에서의 경로
 - /pentest/enumeration/web/revhosts/data/plugins/pig/DNSBruteforce/DNSBruteforce.py
 
 
 - 사용 방식
 - ./DNSBruteforce.py [ 도메인 ] [서버목록파일] [서비스목록파일]
 - (ex) ./DNSBruteforce.py test.co.kr server.lst hosts.txt


= 이 방법은, Wireshark 같은 패킷 감시 프로그램으로, 일일히 결과값을 확인해 봐야 한다는 단점이 있어, 잘 쓰지 않습니다.

 

백트랙 DNSenum

 - 경로 : /pentest/enumeration/dns/dnsenum/


 
 - 형식 : ./dnsenum.pl --dnsserver ( 서버 ip주소) -f (호스트 리스트의 사전파일) ( 도메인 )

 

예제 : ./dnsenum.pl --dnsserver 172.16.1.2 -f ./dict.txt test.co.kr

dick.txt 파일에는 앞의 호스트 네임들을 기입합니다.

생각보다 cafe.  ftp. mail. 등의 고정된 호스트 도메인을 쓰는 경우가 많기 때문에

이런 단어 기입(Dictionary Attack) 기법이 잘 통할 수도 있습니다.

 

 ./dict.txt 파일에 단어를 기입해 줍니다.

 

커맨드

172.16.0.2 => 정보를 얻어낼 해당 dns 도메인 서버의 아이피

 

결과값 = 일치하는 정보가 나옵니다.

 

여기까지 하면 도메인 서버의 네임주소 = IP 일치까지는 획득할 수 있습니다

하지만 실제로, 지금도 이 도메인 명을 사용하는지는 알 수 없지요.

그래서, 해당 주소에 이제 Port 를 이용한 Scan 과 접근으로, 탐지하고, 또 계속된 공격 수립을 준비할 수 있게 됩니다.

다음 편은 PORT 입니다.

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,