'[학습] WMware 환경설정 ( 중단 ) /2. 네트워크 해킹 파트'에 해당되는 글 5건

[ 모의환경 구성도 ]

 

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

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

 

 

 

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

실전이라면, 라우터-다음 라우터까지의 거리를 디폴트 라우팅해주어야 하지만, 모의도에서는 직접 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군

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

,

SNMP(Simple Network Management Protocol)

 

과거
CMIP, SGMP 등으로 섞여 있다가, 프로토콜의 표준화가 1988년에 진행.
복잡함 -> 간소화(SGMP) -> SNMP 로 발전.
TCP/IP -> UDP

- 실제로 심플(간단한)한 프로토콜이 아닙니다.

 기존에 사용되던 프로토콜들보다 보다 간소화되었을 뿐. ( 혼동하지 말 것 )

 

 네트워크 관리 프레임워크 ( Network Management Framework )

->  NMS ( Network Management SYSTEM ) 
 
 명령 직접 전달이 아닌, 정보를 직접 전달하는 관리시스템
 = 변수를 객채마다 설정 후(MIB) 관리시스템에 체계적 전달.

 - 네트워크 관리 프레임워크에서는 SMI 로 변수를 만들어내고 이를 하나의 객채로 취급함

= MIB 
 


 -  MIB 에 의해 공용의 틀이 갖춰지기 때문에, 다른 시스템(에이전트)끼리라도,

상위의 관리 시스템에선 처리가 가능해 집니다. =>  SNMP Protocol

 

 

 

 


 
 NMS의 관리시스템 체계


 
 [ 하나의 관리시스템 체계 구성 ]

 


 1. 관리되는 노드
 2. 관리해주는 시스템
 3. 정보 공유 및 처리를 가능케 하는 공통 변수 ( MIB ) 필요.
 4. 이를 전달해주는 SNMP 프로토콜이 필요.


 
 을 모두 갖추고 있어야 합니다.
 
 
 편의상 SNMP 시스템을 = NMS 라고 부르고 있기도 합니다.


 
 
 SNMP 
 

 

 

 

[ MIB ]

 SMI ( 관리 정보 구조 )
= 데이터 설명 언어
= MIB 정보가 어떻게 정의되어야 하는지를 기술.
= 여러 장비의 호환성을 제공하면서 정의해야 하므로 공통된 방식으로 표현
= MIB 객체와 모듈이 구성될 때 지켜야 할 규칙을 정의하며, ISO 추상표기법(ASN.1, Abstract Syntax Notation) 이라고 하는 데이터 설명 언어를 기반으로 한다

 

 

 MIB
= 한 장비가 가지는 정보 객체의 집합
= MIB 객체는 주로, MIB 모듈이라고 불리는 집합으로 묶여 있음
= 모듈 형태로 구성되기 때문에 필요한 경우 추가해서 이용 가능하므로 확장성, 유연성이 높다.

 

 

 • SMI로 MIB 객체 생성 : 3단계 추상화
 - SNMP 프로토콜이 네트워크 장비의 현 상태를 나타내는 변수를 옮긴다.
 - MIB 는 이 변수의 의미를 정의
 - SMI가 MIB 내의 변수들이 어떻게 정의되는지 규정.

 


 
 • MIB 객체 속성 : 필수 5가지


 1) 객체명


 - 객체 서술명 : 문자로 된 이름
 - MIB객체가 속해있는 그룹에 따라 정해진다.
 - 객체 ID(=)OID=Object ID 
 -  * MIB 계층 안에서 해당 객체의 위치를 나타내는 숫자 이름
 -  * 현재 1만개 이상의 MIB 객체를 모두 다른 이름으로 관리하기 어려우므로 DNS 표기법과 같은 형식으로 구조화하여 최상위부터 점을 찍어서 표시하는 방법이다.


 
 최상위 ROOT 는 OID 표기를 하지 않는다.
 • ROOT { } : 별도의 이름이 없으며, 자식 노드 3개를 가지고 있는 역할만 하고 있다.
 • ccitt(0) : ITU(T) 를 위한 계층
 • iso(1) : iso 표준을 위한 계층
 • joit-iso-ccitt(2) : 위 두 개를 같이 쓰는 장비에서 지정한 표준을 위한 계층
 • 1.org(3) : 다른 조직을 위한 계층
 • 1.3.dod(6) :  미 국방성을 위한 계층
 • 1.3.6.internet(1) : 인터넷을 위한 계층
 -> 우리가 사용하고 있는 모든 객체는 1.3.6.1 에 소속된다.
  • 1.3.6.1.directory(1) : iso가 추후에 사용하기 위해 예약
  • 1.3.6.1.mgmt(2) : 대부분의 표준 MIB 객체가 속한 위치
  • 1.3.6.1.experimemtral(3) : 실험적 객체를 위한 공간
  • 1.3.6.1.private(4) : 사설 기업들을 위해 정의
  • 1.3.6.1.security(5) : 보안을 위해 예약
  • 1.3.6.1.snmpv2(6) : v2 만을 위한 객체 정의
  -> 일반객체(1.3.6.1.2.min(1)) , 사설객체(1.3.6.4.enterprise(1))
 ( 예제 cisco : 1.3.6.1.4.1 )

 

Root Manage 가 Agent 의 IP 에 도달하는 값은 큰 용량이 아닌 OID 의 단순한 1.3.6.1.1.1.4 의 값으로 정의되어 집니다.


   
 2) 형식 : MUB 객체의 자료형과 구조 정의


 • 일반 자료형
 - 정수, 문자열과 같이 정보 하나를 나타냄
 - v1 : 원시/정의 자료형
 - v2 : 기본 자료형

 


 
 • 도표형 자료형
 - 기본형 목록, 기본형을 표로 만든 경우
 - v1 : 생성자 자료형
 - v2 : 개념 자료형


 
 3) 접근 권한( vs : 최대 접근 권한 )


 v1 : 읽기/쓰기/읽고쓰기/접근 금지
 v2 : 계층적 5단계 구조, 상위 계층은 하위 계층 권한을 포함.
  * 5단계 : 생성 읽기(읽기/쓰기/생성)
  * 4단계 : 읽고 쓰기(읽기/쓰기)
  * 3단계 : 읽기(읽기만)
  * 2단계 : 통지 전용(통지, 트랩일 경우만)
  * 1단계 : 접근금지(특수 용도)

 

 

 4) 상태


  * 객체에 관한 필요 유무
  * v1 : 필수/선택/대체
  * v2 : 현재 사용(=v1의 필수)/대체/권장안함

 


 
 5) 정의
  * MIB 객체에 대해 글로 서술.

 


 
 6) 선택적 속성(v2)
  * 단위(Unit) : MIB 객체와 관련된 단위를 글로 서술.
  * 참조(reference) : 관련 문서나 기타 자료에 대한 내용을 추가할 때 사용
  * 인덱스 ( index ) : 여러 MIB 객체들로 이뤄진 객체들을 정의할 때
  * 증분(Augments) : 인덱스 대신 쓸 수 있는 속성
  * 기본 값 (DefVal) : 객체의 기본값 정의
 


 기타 정보 사이트  : http://www.iana.org/assignments/smi-numbers


 
  * 모듈 형식
  - SNMPv2에서 정의
  - 모듈명 : 모듈의 이름(서술형(문자)/숫자형(ID))
  - 마지막 갱신 : 모듈의 마지막 갱신 날짜, 시간
  - 조직 : 모듈을 개발한 조직의 이름
  - 연락처 : 모듈 담당자 이름, 주소, 전화번호, 이메일
  - 서술 : 모듈에 대한 요약 정보
  - 개정 요약/개정 번호 : 모듈 개발 과정을 기록하기 위해 개정될 때마다 개정 항목이 하나씩 추가되며 각 항목마다 개정 내역에 대한 설명을 덧붙임
 

 

 

SNMP Protocol Version History


 
 • SNMPv1
 - 1988년초 개발
 - 구성요소 : SMI, MIB, SNMP 프로토콜
 - 인증 : Community String(비밀번호)에만 의존. 공격에 매우 취약
 - 트래픽을 암호화하지 않으며 보안기능이 없음
 
 


 • SNMPsec
 - 1992년
 - party 라고 불리는 논리 식별자를 이용한 새로운 보안방식 정의
 = 네트워크의 과부하로 인한 속도 및 처리효율이 떨어짐.
 - 사(死)장됨.
 

 • SMNPv2
 
 1) SNMPv2 classic, SNMPv2p

  - SNMPsec의 party 개념을 그대로 이어옴
  - party 기반의 보안 모델이 복잡하다는 이유로 사장됨


  
 2) SNMPv1.5


  - SNMPv2의 내용 중 기능 향상 부분만 가져오고, v1의 Community String 인증을 계속 이용하는 형태
  - 상업적 실패


  
 3) SNMPv2c(community)


  - v2에서 복잡한 보안기능을 제거 

( v2 의 향상된 기능만 채용하고 보안 방식은 v1 의 Community String 을 그대로 채용하여 사용법도 간편 )


  - SNMPv 1.5와 같지만 상업적으로 성공. 
  - 실험적 표준 : RFC 1902 ~ 1908


  
  
 4) SNMPv2u(user)


  - 사용자 기반의 새로운 보안 모델 사용
  - Community String 보다는 보안성이 높고 Party 보다는 단순한 모델
  - RFC 1909 ~ 1910


  
 5) SNMPv2* = SNMPv2p 와 SNMPv2u 가 합쳐진 형태. 거의 사용하지 않음
 
 
 = 변종에 의한 혼란 때문에 많은 네트워크 관리자들이 SNMPv2 의 사용을 포기하고 SNMPv1 또는 SNMPv2c 를 이용.

 


 
 • SNMPv3


 - 1998년에 발표
 - SNMPv2 기능을 모두 포함하고 보안 모델을 SNMPv2u에서 사용된 사용자 기반 보안 모델, View 보안 모델 등 다양한 모안 모델을 지원.
 
 v3 부터는 에이전트 <-> 매니지먼트의 설정값 변경에 의해 역할 체인지 가능
 
 - SNMP 관리에 유옹한 각중 툴 정의
 - Manager 역할과 agent 역할이 호환(설정변경으로 역할을 서로 <-> 교체 가능)

 

 

 

 


 
 • SNMP 프로토콜 버전 별 RFC 문서 :
 http://www.rfc-editor.org/rfc-index.html
  

 • V2 에서는 표준 문서를 프로토콜 동작, 전송 매핑 2가지로 정의


 1) 프로토콜 동작
  - MIB 객체가 SNMP 메시지를 사용하여 실제로 전송하는 방법을 정의

 


 2) 전송 매핑
  - 여러 네트워크 환경에서 실제 전송되는 방법 정의
  가장 흔히 사용하는 전송 매핑 = IP

 

 • 통신 방식


 1) 기본 : 매니저가 요청하면(서버-------> 클라이언트) agent 가 응답
 2) polling 방식
  - 정보를 얻고자 하는 쪽에서 먼저 요청 
  - 기본 통신 방식


 3) 인터럽트 방식(=trap) 

= 문제,이벤트 등의 상황시 반대로 agent가 manager 에게 전달


  - 매니져의 요청이 없더라도 agent 가 정보를 전달
  - 긴급상황 발생 시 trap 을 통해 인터럽트 활성화.

 


  
 • SNMP PDU(=data)


 - 3가지 클래스로 구분
 1) Internal(내부형) : 내부 SNMP통신을 위한 report 메시지 
 2) Confirmed(확인형) : GetRequest, GetNextRequest, GetBulkRequest , SetRequest
 
 3) Unconfirmed(비확인형) :  (v1) (Get)response, Trap, InformRequest(v3)

 


 
 • SNMP 기본 동작


 1) 매니저가 GetRequest 생성.
  - 사용자/프로그램의 요청에 따라서 필요로 하는 정보를 구성
  - 메시지 = 매니저가 원하는 MIB 객체의 이름
  
 2) 매니저에서 GetRequest 메시지 전달 ( 매니저의 랜덤포트로 출발 )
 3) agent 에서 요청 메시지 수신 후 처리. ( agent의 161번 포트에 도착 )
  - 요청 받은 MIB 객체명의 목록이 agent 가 가지고 있는 MIB객체가 맞는지 확인 후 , 변수의 값을 읽어서 처리.
 4) agent 가 Respose 메시지 생성 ( 받은 161번 포트로 응답 전송 )
  - 요청 받은 MIB 객체의 값과 에러 코드를 포함
 5) agent 가 Response 전달 ( 매니저의 랜덤포트로 들어감 )
 6) 매니저에서 Resonse 수신 후 처리


 
 agent 가 발신한 Trap 메시지의 경우는 도착지가 매니저 쪽의 랜덤포트가 아닌 162번 포트로 들어간다.

 

 

 

 

 

 

 

메시지의 종류
 
 • GetNextRequest / GetBulkRequest
  ( 매니저(주서버)가 만들어내서 에이전트(클라이언트)에게 정보 요청하는 메세지 )


 
 1) MIB 객체 테이블이 구성되어 있는 상황에서만 이용 가능.


 2) Next
  - MIB 테이블의 값을 요청할 때 객체 하나씩을 요청하고 응답 하게 되면 비효율적으로 동작하고 트래픽이 낭비됨
  - 매니저는 에어전트의 테이블에 몇 개의 항목이 있는지 알지 못하기 때문에 몇 번 요청해야 할지 정확하게 구분하지 못한다
  - v1 에서 MIB 테이블의 값을 하나의 요청으로 응답받을 때 사용.
  - 매니저는 테이블 변수의 이름과 테이블 내부의 특정 항목의 이름을 포함해서 요청을 전달하며 에어전트는 지정한 객체의 다음 값을 읽어서 GetResponse 로 응답 ( 테이블은 처음부터 만들어져 있다 )
  - 반복해서 동작 하다가 마지막 값까지 반환하고 다음 테이블의 객체 값을 전송하므로 매니저에게 지정된 테이블의 전송이 완료 됐음을 알려주게 된다. -> 네트워크 부하가 생길 수 있다.


  
 3) Bulk
  - Next 의 동작방식 중 응답을 하나씩 받아와서 트래픽이 낭비되는 문제를 해결하기 위해 사용.
  - v2, v3 에서 사용하며, 테이블 또는 일반 객체를 요청했을 때 하나의 응답 메시지로 정보를 전달. -> 네트워크 부하가 줄어든다.
  - 특별 인자
   § 비반복(Non repeater) : 일반 개체
   § 최대 반복(Max repeater) : 테이블 변수의 항목 개수
  - 주의 : Bulk를 이용 하려면 먼저 테이블의 항목 수를 알아야 함
  아니면 여러 번 물어서 모든 항목을 응답 받음.

 

 

 • SetRequest 


  1) 관리자가 수정해야 할 변수와 값을 지정.
  2) 설정 변경은 시스템에 중요한 내용이므로 에이전트는 요청된 설정 변경 메시지를 분석, 확인한 후 요청을 받아 들임
   - 변경할 객체의 객체명 확인
   - 객체의 접근권한 확인
   - 요청 메시지 값의 자료형( IP 는 숫자형이 아니라 자료형이다 ) 등의 크기가 맞는지 확인

 


   
 • Trap  / InformRequest : 통지 , 알림


  1) 인터럽트 클래스의 메시지 
  2) 긴급 상황이 발생한 경우 에이전트에서 매니저 쪽으로 정보를 먼저 전달할 때 사용 하게 된다.
  3) Trap
   - 모든 에이전트가 사용할 수 있는 기본 내장.
   - 설정 된 트랩 조건이 발생하면 trap 기능이 활성화되면서 trap 메시지를 생성 후 전달.
  4) Inform Request
   - 매니저가 다른 매니저로 정보를 전달하기 위해 사용.
   - 매니저 간 정보를 전달하여 전체 네트워크간 에이전트가 전달한 트랩 메시지를 동기화 하는 목적으로 사용

 

 


   
  
 * SNMP 의 보안 문제 / 보안 정책

 

1) v1 의 보안문제
 - 단 하나의 보안 정책/기술만 이용 -> Community String ( 비밀 번호 )
 - 원래 목적은 관리 영역을 묶어주기 위해 사용

 

2) v2 / v3

 1) Party 기반 보안 모델 ( 장비 자체에 고정세팅 )


  - SNMPv2p에서 채택한 보안 모델
  - 특정 인증 프로토콜과 암호화 프로토콜을 미리 정의하는 파티라는 논리적인 실체를 정의
  - 파티에 정의 된 인증 프로토콜에 의해 인증하며 메시지를 전송하는 양 쪽이 같은 암호화 방식을 사용한다는 것을 보장. 

 


  
 2) 사용자 기반 보안 모듈(USM, User-Based Security Model)


  - SNMPv2u 에서 개발되었으며 SNMPv2* 에서도 채택
  - SNMPv3 에서도 채택
  - 장비별로 보안 정책을 수립하지 않고 사용자별로 보안 정책을 수립
  - 다양한 인증 방식과 암호화 프로토콜을 통해 접근권한을 지키고 메시지 보호.
  - 타임스탬프, 클럭 동기화 등의 기술을 사용해서 공격에 대비.

 


  
 3) 뷰 기반 접근 통제 모델(VACM, View-Based Access Control Model)


  - SNMPv3 에서 개발
  - 한 장비의 각종 MIB 객체의 접근 권한을 개별적으로 정밀하게 정의.
  - 뷰 = 특정 상황에서 특정 그룹에 속한 사람들의 접근이 허용된 MIB 객체를 가상의 테이블에 정의 후, 접근을 구별하여 암호화.
  - 뷰를 생성, 통제하므로 관리자는 누가 어떤 정보에 접근할 수 있는지 정의.

 

 

 


  
  
 SNMP PDU
 
 • 일반 PDU형식


 • PDU 제어 필드 - PUD 타입을 설명하며 정보를 한 SNMP에서 다른 SNMP로 전송하는 필드 모음


 • PDU 변수 바인딩 : PDU 내의 MIB 객체 설명 모음이며 각 객체는 이름을 값에 바인딩한 구조
 


 


 SNMPv1 일반 메시지 형식


 버전 번호 = 0 | 커뮤니티 스트링 | PDU 제어 필드           |

= PDU 변수 바인딩        |   ---> 메시지 본문(PDU)
  ㄴ ( 실제 요청 객체의 정보 등이 들어있다 )


 

SMNPv2p 일반 메시지 형식

v1과 흡사

버전 번호 = 1 | 커뮤니티 스트링 | PDU 제어 필드(PDU 변수 바인딩)


 
 Trap 일반 메시지 형식

 

PDU 종류 | 엔터프라이즈(회사명) | 에이전트 주소 | 트랩 일반 코드 | 세부 트랩 코드
  | 타임 스탬프 ( 시간값 확인 )  -  PDU 변수 바인딩 

 

트랩 PDU Type : 특정 상황의 발생을 매니져에게 알린다.


 
 

 v2 형식 ( 커지고, 사장된 클래스풀 방식 )
 
 버전 번호 = 2
 받는 측
 보내는 측
 컨텍스트
 PDU 제어 필드
 PDU 변수 바인딩
 
  

 

 

 

 

 
 
 주로 사용되는 SNMP(NMS) 관리 프로그램

=> 아주 간단하게 말해서, SNMP 라는 규약하에 속한다면, 윈도우즈, 리눅스 어느 시스템이건 간에, SNMP 패키지, 프로그램을 설치하여, 환경설정을 해 주고, 통합 관리 프로그램에서 정상적인 모니터링을 수행할 수 있게 됩니다.


 
 주로 사용되는 기업의 장비
 
 1. 중규모 ( 몇 백대 이하 ) : opmanager
 http://www.manageengine.com/network-monitoring/
 -> 10대까지 무료 , what's up gold, solawinds 등
 
 2. 대기업 : MC, CA(spectrum), HP, IBM 등
 
 3. 기타 : EM7 , 인프라니스 시스마스터(국산), operview
 
 4. 장비별 성능 비교 :
 http://en.wikipedia.org/wiki/Comparison_of_network_monitoring_systems
 
 
 
 
 
 [ 테스트 #01 ]


 http://www.solarwinds.com/network-performance-monitor.aspx
 
 [ test drive demo ] 를 클릭하여 preview 가능.

 
블로그 이미지

늙은M군

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

,