강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

라우터에서 불필요한 서비스 중단

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

라우터에서 불필요한 서비스 중단

 

서버와 마찬가지로 네트워크 장비 역시 초기에는 불필요한 서비스나 기능이 너무 많이 활성화되어 있으므로 꼭 필요한 서비스만 제외하고 불필요한 서비스는 반드시 끄도록 하는 것이 좋다.

 

물론 정상적인 서비스까지 disable하여 문제를 유발하지 않도록 주의해야 함은 당연하겠지만, 아래에서 소개하는 내용은 비활성화 하여도 서비스에 무방한 것들이다.

 

물론 이 기능들은 라우터에서만 disable하는 것이며 라우터 내부의 다른 시스템에는 영향을 주지 않는다.

 

만약 라우터 내부의 시스템들에도 적용하려면 access-list를 이용하여 특정 포트번호를 차단하면 된다.

 

아래는 “conf t”를 실행한 Global Configuration 모드에서 설정할 내용이다.

 

 

Router# conf tRouter(config)# no service udp-small-servers // udp 기반의 small 서버를 중지한다.

 

 

Router(config)# no service tcp-small-servers // tcp 기반의 small 서버를 중지한다.

 

 

Router(config)# no service finger // finger 서비스를 중지한다.

 

 

Router(config)# no ip finger

역시 finger서비스를 중지한다.

 

첫 번째는 구 버전, 두 번째는 신 버전의 IOS에서 작동방법인데, finger가 허용되었을 경우 외부에서 라우터에 로그인 해 있는 유저의 username이나 IP주소 등을 알 수 있게 되므로 반드시 서비스를 중지하도록 한다.

 

Router(config)# no service pad // x.25 프로토콜을 사용하지 않으므로 중지한다.

 

 

Router(config)# no ip bootp server

이는 라우터가 bootp 서버로 작동할 때 필요한 서비스인데, 부팅 시 bootp는 거의 사용되지 않으므로 끄도록 한다.

 

 

 

Router(config)# no ip http server // http 서비스를 중지한다.

 

 

Router(config)# no tftp-server // 보안에 취약한 tftp 서비스를 중지한다.

 

 

Router(config)# no ip source-route

IP Spoofing을 차단하기 위해 설정한다.

 

source-route는 패킷의 경유지를 패킷의 발송자가 임의로 설정 할 수 있는 기능으로 정상적인 경우 거의 사용되지 않으며 이를 허용할 경우 여러 가지 공격에 악용될 수 있으므로 차단하도록 한다.

 

Router(config)# no cdp run

Interface에서 비활성화하려면 "no cdp enable"을 실행하고 CatOS에서는 "set cdp disable"을 실행한다.

 

특별한 이유가 없다면 아래와 같이 모든 인터페이스에도 설정해 준다.

 

 

Routerh(config)# no cdp run

Router(config)# interface range fastethernet 0/1 - 24

Router(config-if)# no cdp enable

 

Router(config)# no service config

Router(config)# no boot system

Router(config)# no boot host

Router(config)# no boot network

부팅 시 네트워크를 통해 config 파일을 읽어 들일 경우 config 파일이 평문형태로 전송되고 인증되지 않은 유저에게 악용될 수 있으므로 비활성화 한다.

 

아마 이렇게 원격으로 config 파일을 가지고 와서 사용하는 경우는 거의 없을 것이다.

 

 

 

아래는 앞에서 비활성화한 small-servers 서비스가 제공 중일 때 daytime 서비스가 작동하는 것을 보여주고 있다.

 

 

Router# connect 14.2.9.250 daytime

Trying 14.2.9.250, 13 ... Open

Monday, April 3, 2008 11:48:39-EDT

[Connection to 14.2.9.250 closed by foreign host]

 

아래는 small-servers 서비스를 비활성화 한 후에는 daytime 서비스가 작동하지 않는 것을 알 수 있다.

 

 

Router# config t

Router(config)# no service tcp-small-servers

Router(config)# no service udp-small-servers

Router(config)# exit

Router# connect 14.2.9.250 daytime

Trying 14.2.9.250, 13 ...

% Connection refused by remote host

small-servers 서비스를 중지하였을 경우 일반적으로 취약하다고 알려져서 특히 서비스 거부공격으로 악용될 수 있는 라우터 자체의 20번 이내(1번부터 19까지 특히 7,9,13,19) 포트를 사용하는 서비스를 중지할 수 있다.

 

만약 라우터 자체의 서비스를 중단하는 것이 아니라 라우터 내부의 네트워크에 있는 모든 서버들에게도 이 설정을 적용하려면 아래와 같이 목적지 포트가 20번 미만인 포트를 차단하는 access-list를 정의하여 사용하면 된다.

 

일반적으로 20번 이내 포트를 사용하는 서비스를 제공할 필요가 없으므로 차단하는 것이 좋으며 물론 ftp-data로 사용되는 20번은 포함되지 않는다.

 

 

 

access-list 101 deny tcp any any lt 20

access-list 101 deny udp any any lt 20

아울러 쉽게 지나칠 수 있는 것 중 하나는 바로 네트워크 장비에서 제공하는 웹 기반의 GUI 기능(http server)이다.

 

일부 버전에서는 기본적으로 이 기능이 켜져 있어 관리자도 모르게 장비의 80번 포트가 열려있는 경우가 있는데, 이때에는 인증기능이 취약하여 불필요한 정보를 제공할 수 있을 뿐만 아니라 일부 버전에서는 CodeRedNimda공격 또는 단순한 스캔만으로도 라우터가 다운되는 현상이 발견되었으므로 http 설정이 되어 있는지 확인하고 만약 되어있다면 반드시 비활성화 하기 바란다.

 

웹 서비스가 제공되는지 여부는 스캔을 하거나 간단히 라우터의 80번 포트로 telnet접속해 보면 알 수 있다.

 

 

앞에서는 모든 인터페이스에 공통적으로 적용되는 global configuration 모드에서의 설정을 알아보았고, 이 설정 이후에는 각각의 인터페이스별로 세부적인 설정을 할 차례이다.

 

 

 

물론 이 설정은 지정한 인터페이스에만 적용될 것이다.

 

아래에서 설정하는 내용은 보안을 위해 각각의 인터페이스에서 모두 설정하는 것이 좋다.

 

현재 라우터에 셋팅 되어 있는 인터페이스는 "show ip interface brief (또는 sh ip int b)"를 입력하면 된다.

 

상태(status)up되어 활성화된 인터페이스는 물론이고 down된 인터페이스에도 만약을 위해 설정하도록 한다.

 

아래는 serial0 인터페이스에 설정하는 예를 보여주고 있다.

 

 

 

Router(config)# int serial0

Router(config-if)# no ip redirects

Router(config-if)# no ip directed-broadcast

Router(config-if)# no ip proxy-arp

Router(config-if)# no ip unreachables

Router(config-if)# no ip netmask-reply

 

????[유용한 팁]

만약 각각의 인터페이스에 동일한 설정을 반복적으로 지정하려면 일일이 인터페이스를 선택하여 지정할 필요 없이 range라는 옵션을 주어 한 번에 설정할 수 있다.

 

이를테면 아래와 같은 경우 gigabitethernet 6/1부터 3까지 한 번에 설정하게 된다.

 

 

Router(config)# interface range gigabitethernet 6/1 3

 

또한 일련된 인터페이스가 아닌 경우 ,”(콤마)를 이용하여 여러 인터페이스를 지정하면 된다.

 

 

 

먼저 “no ip redirects"icmp redirect를 차단하기 위한 설정인데, icmp redirect는 라우터가 호스트에게 최적화된 경로를 알려주는 용도로 사용된다.

 

그러나 고정IP를 사용하는 환경에서는 불필요한 기능이며 이 기능이 악용될 경우 시스템의 라우팅 테이블을 수정하여 특정 트래픽의 경로를 공격자가 의도한 곳으로 전달할 수 있는 위험이 있으므로 이 기능을 차단하는 것이 좋다.

 

물론 이와 함께 호스트 차원에서도 이 기능을 비활성화 하도록 해야 하는데, 굳이 라우터의 인터페이스에서 icmp redirect를 제공하지 않더라도 공격자가 icmp redirect 패킷을 위조할 경우가 있을 수 있기 때문이다.

 

 

따라서 리눅스 서버에서 아래와 같이 서버의 인터페이스에 대한 icmp redirect 커널 파라미터를 off하거나 iptables로 차단하는 설정을 하는 것이 좋다.

 

참고로 설정 변경은 echosysctl로 하면 되고 각각 0off, 1on을 의미한다.

 

 

 

net.ipv4.conf.eth0.accept_redirects = 0

net.ipv4.conf.lo.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv4.conf.all.accept_redirects = 0

 

그리고 “no ip directed-broadcast”는 앞장에서 언급한 바와 같이 스머프라는 icmp기반의 서비스거부 공격을 차단하기 위한 필수설정요소인데, 최근의 버전에서는 아예 기본 값으로 설정되어 있다.

 

 

 

다음으로, proxy-arp는 신뢰할 수 있는 양 또는 여러 LAN 세그먼트 사이에서 arp 정보를 투명하게 통과시켜주는 브리지(bridge)로 사용 할 경우에만 필요한데, default gateway가 없는 경우 호스트에게 arp서비스를 제공하는 역할을 한다.

 

따라서 한 호스트가 목적지 IP에 대한 MAC정보를 요청하면 proxy-arp가 설정된 라우터가 대신 응답하게 되는데, 이는 보안상 위배되며 실제 거의 사용되지 않으므로 비활성화 하도록 한다.

 

 

 

no ip unreachables를 설정하는 것은 뒤에 나올 blackhole filtering에서도 설명하겠지만, ip unreachables를 허용할 경우 다음과 같은 두 가지 문제가 발생할 수 있기 때문이다.

 

첫 번째로, 라우터에서 룰에 의해 트래픽이 차단되었을 경우 라우터에서는 패킷의 발신자에게 Host Unreachable과 같은 icmp 에러 메시지를 보내게 되는데, 계속적으로 공격이 이루어 질 경우 너무 많은 icmp 패킷 유발로 인하여 오히려 에러 메시지 응답 때문에 서비스거부 공격으로 악용될 수 있다.

 

두 번째로, 외부에서 내부에 스캔 등을 할 경우 차단된 트래픽에 대해서 역시 icmp로 응답하게 되므로 내부의 access-list 설정상황 등 민감한 정보를 알 수 있게 된다.

 

따라서 각 인터페이스마다 이 설정을 하는 것이 좋다.

 

특히 /dev/null과 비슷한 역할을 하는 Null0등의 인터페이스에는 반드시 설정하여야 한다.

 

마지막으로 no ip netmask-reply를 설정함으로써 외부에서 icmp netmask-request를 요청 시 이에 응답하지 않도록 할 수 있다.

 

만약 허용할 경우 내부의 netmask정보 등을 유출할 수 있다.

 

 

위와 같이 설정 후 “sh ip int serial0”과 같이 실행하였다면 다음과 같이 보일 것이다.

 

변경 전)

Directed broadcast forwarding is enabled

ICMP redirects are always sent

ICMP unreachables are always sent

ICMP mask replies are sent

 

변경 후)

Directed broadcast forwarding is disabled

ICMP redirects are never sent

ICMP unreachables are never sent

ICMP mask replies are never sent

 

또한 “show ip interface brief”를 실행하여 사용하지 않는 인터페이스는 다음과 같이 반드시 shutdown하도록 한다.

 

이는 사용하지 않은 서비스를 중지하는 것만큼 중요하다.

 

 

 

Router(config)# interface eth0/3

Router(config-if)# shutdown 또는 간단히 sh

// 만약 shutdown을 취소하려면 no shutdown

 

아울러 Aux port는 거의 사용하지 않으므로 역시 다음과 같이 비활성화 하도록 한다.

 

 

Router(config)# line aux 0

Router(config-line)# no exec

Router(config-line)# transport input none

Router(config-line)# exit

 

위와 같이 불필요한 서비스나 인터페이스를 제거한 후에는 최종적으로 라우터에 어떤 포트가 대기(listen)하고 있는지 확인해 볼 필요가 있다.

 

리눅스에서는 netstat -lnp로 간단히 확인해 볼 수 있었으나 라우터는 tcpudp서비스의 확인 방법이 서로 다르다.

 

 

* udp 포트 확인

 

udp 포트는 다음과 같이 "show ip sockets"를 실행하면 어떤 udp 포트가 사용되고 있는지 확인할 수 있는데, 아래의 경우 syslog 로깅설정을 하여 원격지 로그 서버인 log.server.com으로 로그를 남기는 설정 때문에 라우터에는 54085번이, log.server.com 서버는 514번이 리슨하고 있는 것을 알 수 있다.

 

그리고 두 번째 줄은 라우터에 udp 161번인 snmpdenable하여 mrtg.server.com서버에서 45757번 포트를 통해 라우터의 SNMP서비스에 접근한 것을 알 수 있다.

 

Router>sh ip sockets

Proto Remote Port Local Port In Out Stat TTY OutputIF

17 log.server.com 514 192.168.65.1 54085 0 0 0 0

17 mrtg.server.com 45759 211.47.65.1 161 0 0 1 0

* tcp 포트 확인

 

tcp 포트는 “show tcp brief all" 명령으로 확인할 수 있는데, 아래와 같이 어떤 tcp 포트가 사용 중인지 알 수 있다.

 

 

Router>sh tcp brief all

TCB Local Address Foreign Address (state)

643DA658 192.168.1.1.11006 192.168.1.2.179 ESTAB

61E7C058 10.1.1.2.23 10.1.1.1.11046 ESTAB

6675C850 192.168.1.1.23 192.168.3.5.60509 ESTAB

667B2318 *.* *.* LISTEN

62587B84 *.179 192.168.1.2.* LISTEN

 

첫 번째 줄의 경우 라우터의 IP192.168.1.1에서 다른 라우터인 192.168.1.2와 다이나믹 라우팅 프로토콜인 bgp(179/tcp)세션을 형성했다는 것을 알 수 있고, 두 번째와 세 번째 줄은 10.1.1.1에서 다른 인터페이스인 10.1.1.2, 192.168.3.5에서 192.168.1.1 인터페이스에 telnet 접속해 있는 상태임을 알 수 있다.

 

마지막 줄은 192.168.1.2bgp 설정을 해 두어 179번이 대기하고 있는 것임을 알 수 있다.

 

만약 각각의 연결현황에 대해 좀 더 자세하게 알려면 다음과 같이 “sh tcp tcb [tcb번호]”를 입력하면 된다.

 

 

 

Router>sh tcp tcb 643DA658

Connection state is ESTAB, I/O status: 1, unread input bytes: 0

Local host: 192.168.1.1, Local port: 11006

Foreign host: 192.168.1.254, Foreign port: 179

 

Enqueued packets for retransmit: 0, input: 0 mis-ordered: 0 (0 bytes)

 

Event Timers (current time is 0xF1A77E8C):

Timer Starts Wakeups Next

Retrans 202548 2474 0x0

TimeWait 0 0 0x0

AckHold 26866 24356 0x0

SendWnd 0 0 0x0

KeepAlive 0 0 0x0

GiveUp 0 0 0x0

PmtuAger 0 0 0x0

DeadWait 0 0 0x0

 

iss: 3463806198 snduna: 3525325297 sndnxt: 3525325297 sndwnd: 16378

irs: 1180139937 rcvnxt: 1180860613 rcvwnd: 16308 delrcvwnd: 76

 

SRTT: 300 ms, RTTO: 303 ms, RTV: 3 ms, KRTT: 0 ms

minRTT: 0 ms, maxRTT: 9116 ms, ACK hold: 200 ms

Flags: higher precedence, nagle

 

Datagrams (max data segment is 536 bytes):

Rcvd: 250112 (out of order: 0), with data: 26973, total data bytes: 720675

Sent: 287454 (retransmit: 2474, fastretransmit: 0), with data: 261798, total data bytes: 61519098

 

이 명령어 외에 추가적으로 라우터에서 꼭 필요한 서비스만 오픈 되었는지 확인하기 위해 nmap등과 같은 스캐너를 이용하여 라우터를 스캔해 보는 것도 좋은 방법이다.

 

 

tcp 1-65535 번 포트 스캔

# nmap sT p 1-65535 router.com

 

udp 1-65535 번 포트 스캔

# nmap sU -p 1-65535 router.com

 

 

강사 : 라쿠텐 홍석범부매니저

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,032 명
  • 현재 강좌수 :  35,772 개
  • 현재 접속자 :  159 명