Search

'네트워크 보안 이야기'에 해당되는 글 5건

  1. 2017.01.22 네트워크 패킷 필터, netfilter - iptables
  2. 2017.01.21 가상랜 VLAN
  3. 2017.01.15 L2 스위치, L3 스위치, L4 스위치, L7 스위치 3
  4. 2017.01.15 OSI 7 계층 vs TCP/IP 계층
  5. 2017.01.09 IPS vs IDS

리눅스나 유닉스계열 서버의 접근통제 정책을 얘기할 때 iptables와 tcp wrapper를 많이 언급하고 그 둘의 장단점을 비교하지요. 보안기사에서도 시험에 종종 나오구요.


tcp wrapper는 inetd 데몬에서 처리하는 접근제어이고, 여기서는 iptables로 많이 알려진 기능을 지원해주는 netfilter의 개념을 설명하고자 합니다.


netfilter 개요

리눅스 커널소스를 보면, 네트워크관련 소스가 전체의 1/3 정도를 차지합니다. 그만큼 네트워크의 비중이 높다는 뜻인데요, 그 중에서도 netfilter는 리눅스 커널모듈로서 네트워크 패킷을 처리하기 위한 프레임워크입니다.


주요 제공 기능

  • NAT(Network Address Translation) : 사설IP와 공인IP를 변환해주거나 포트변환 등
  • Packet filtering : 특정 패킷을 차단 또는 허용하는 기능. 서버의 접근제어 또는 방화벽기능 구현 가능
  • packet mangling : 필요시 패킷 헤더의 값을 변경

netfilter 구조
netfilter는 커널에서 패킷을 처리하는 과정에 필요하면 룰에 따라 처리해줄 수 있도록 5군데의 후킹(hook)지점을 제공합니다. 패킷 처리과정에 내가 원하는 지점에서 원하는 패킷처리를 할 수 있도록 지원하는 것이지요.





위에서 말한 5곳의 후킹지점은 위 그림의 kernel space에 해당하는 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 입니다.


각 후킹지점의 주요기능을 간단하게만 설명하겠습니다.
  • PREROUTING : 인터페이스를 통해 들어온 패킷을 가장 먼저 처리. 목적지 주소의 변경(DNAT)
  • INPUT : 인터페이스를 통해 로컬 프로세스로 들어오는 패킷의 처리(즉, 패킷을 받아 처리할 프로세스가 내 시스템에서 동작하는 경우). INPUT에서 패킷 처리(차단/허용) 후 user space의 프로세스로 전달
  • OUTPUT : 해당 프로세스에서 처리한 패킷을 밖으로 내보내는 패킷에 대한 처리(차단/허용)
  • FORWARD : 다른 호스트로 통과시켜 보낼 패킷에 대한 처리(차단/허용). 방화벽이나 IPS 등과 같이 내가 수신하는 패킷이 아니고 지나가는 패킷을 처리
  • POSTROUTING : 인터페이스를 통해 나갈 패킷에 대한 처리. 출발지 주소의 변경(SNAT)

iptables을 이용하여 netfilter에 룰을 넣자
커널에서 동작하는 netfilter에 내가 원하는 접근통제를 할 수 있도록 룰을 넣어야 할텐데 어떻게 할까요? iptables를 이용하면 됩니다. iptables는 netfilter에 룰을 넣을 수 있는 단순한 user space의 실행프로그램입니다.
iptables의 구체적 사용방법은 별도로 한 번 검색해보시구요, 여기서는 간단한 사용법만 보겠습니다.

iptables commnad 종류
  • -A : add rule to chain
  • -D : delete rule from chain
  • -I : insert rule
  • -R : replace rule
  • -F : flush all rules
  • -L : list all rules
  • -N : create a new chain
  • -X : delete user defined chain
  • -P : set default target

아래와 같이 실행하면 현재 netfilter의 룰을 조회할 수 있습니다.

> iptables -L

예를 들어, 현재 서버에 telnet 서비스(tcp 23)를 차단하고 싶다면 아래와 같이 실행하면 됩니다.

> iptables -A INPUT -p tcp --dport 23 -j DROP

그 다음 "iptalbes -L"을 실행하여 룰을 조회하면 위의 룰이 추가된 것을 볼 수 있고, 현재 서버에 telnet서버가 떠있건 말건 외부에서 현재 서버로 telnet(tcp 23) 접속은 차단됩니다.

(iptables 사용법은 반드시 다른 자료를 참고하여 더 숙지해주세요)


netfilter 활용 예시
두 가지 활용에 대해서 설명하겠습니다. 첫째는 서버입장에서 서버로 들어오고 나가는 네트워크 패킷에 대한 통제를 하는 경우(내부방화벽), 두번째는 netfilter를 이용하여 네트워크기반의 방화벽을 구현하는 경우입니다.

① 서버의 내부 방화벽(접근통제)

서버로 들어오는 네트워크 패킷 또는 서버에서 나가는 네트워크 패킷을 통제하고자 할 경우 아래 그럼처럼 INPUT과 OUTPUT 필터에 정책을 적용하여 구축가능합니다.

INPUT은 서버에서 동작하는 네트워크 프로세스에게 전달되기 전에 패킷을 처리하고, OUTPUT은 네트워크 프로세스에서 나가는 패킷을 처리합니다.



② 네트워크기반의 방화벽 구현

대부분 로컬 시스템으로 들어오거나, 로컬 시스템에서 나가지 않는 패킷을 핸들링하는 경우는 드물죠. 나의 패킷은 아니지만, 지나가는 패킷을 통제해야하는 경우가 있는데 방화벽이나, IPS 등이 대표적입니다.
방화벽의 기본적인 기능을 가진 경우 출발지IP/출발지PORT/목적지IP/목적지PORT/프로토콜 등으로 지나가는 패킷을 정책에 따라 허용 또는 차단을 하지요. 이러한 룰을 iptables를 이용하여 netfilter의 FORWARD에 적용하면 됩니다. 참고로, NAT를 구현하기 위해서는 PREROUTING과 POSTROUTING를 이용하면 됩니다.


 
FORWARD를 이용하여 방화벽을 구현한다는 의미를 좀 그려봤습니다.(펜으로 직접 그려봤는데 참 허접하네요..ㅎㅎ)


장비에 포트 2개가 있다면 지나가는 패킷이므로 한 포트로 들어가서 다른 한 포트로 나갈것이고 그 과정에 FORWARD에서 패킷을 허용한 것만 나갈 수 있겠죠.



정리


기억해 둘 것만 정리해보겠습니다.
  • 커널모듈로 네트워크 패킷을 처리할 수 있는 프레임웍이 있는데 그걸 netfilter라고 하는구나.
  • netfilter는 INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING이라는 5개의 hook(후킹)지점을 제공하는구나.
  • INPUT, OUTPUT은 내 서버의 로컬 프로세스로 전달하거나 로컬 프로세스에서 나가는 패킷들에 대한 처리를 할 수 있어서 내 서버를 보호하기 위한 접근통제에 사용할 수 있구나.
  • FORWARD는 방화벽이나 IPS 등과같이 나의 시스템과는 관련은 없지만 지나가는 패킷을 처리할 때 네트워크 접근통제 정책을 설정할 수 있구나. 그리고 PREROUTING와 POSTROUTING은 NAT할 때 사용할 수 있구나.
  • netfilter에 내가 원하는 정책을 넣어야 하는데 그럴 때 사용하는 프로그램이 iptables라는 것이구나. iptables은 그냥 룰을 넣고 조회하는 단순한 프로그램이구나.
  • netfilter는 커널에서 통제를 하기 때문에 tcp wrapper처럼 어플리케이션 레벨에서 접근통제하는 것보다 우선순위가 높고 보안성이 우수하겠구나. 





'네트워크 보안 이야기' 카테고리의 다른 글

가상랜 VLAN  (0) 2017.01.21
L2 스위치, L3 스위치, L4 스위치, L7 스위치  (3) 2017.01.15
OSI 7 계층 vs TCP/IP 계층  (0) 2017.01.15
IPS vs IDS  (0) 2017.01.09

가상랜 VLAN

네트워크 보안 이야기 2017. 1. 21. 21:14 Posted by 낭만이삘삘

보통 기업 내부망 접근제어를 위해 VLAN(Virtual Local Area Network)을 많이 사용합니다. 망과 노드에 대해서 네트워크 트래픽을 분리하고 접근통제하기 위해 모든 것을 물리적으로 적용하면 훨씬 좋겠지만, 비용과 시간이 많이 들겠죠. 가상으로, 즉 논리적으로 망을 재구성할 수 있게 하는 것이 VLAN입니다.


VLAN 개념


VLAN은 물리적으로 혼재된 네트워크 노드들을 논리적으로 구성하여 워크그룹단위로 묶는 네트워크 표준입니다.

예를 들어, 기업내에서 부서별로 네트워크를 묶거나, 특정 업무에 관련된 PC들만 별도로 네트워크를 구성하는 등 필요에 따라 네트워크를 구성하거나 접근통제를 해야하는데 이럴 때 사용할 수 있는 것이 가상랜입니다.



<출처 : http://www.learncisco.net>


위 그림에서 VLAN2, VLAN3... 과 같이 VLAN옆에 붙은 숫자가 VLAN ID입니다. 같은 ID로 묶인 PC들이 같은 네트워크상에 있는 것입니다. VLAN이 없다면 그냥 다들 2개의 스위치에 연결된 상태이겠죠. 스위치에서 VLAN을 지원한다면 논리적으로 다시 구성할 수 있는 것입니다.

그러면 조금 더 자세히 들어가보겠습니다.


 IEEE 802.1Q


VLAN을 위한 표준입니다. Inter-Switch Link(ISL)은 시스코 스위치에서 지원하는 방식이고, IEEE 802.1Q가 표준입니다. 아래 그림은 802.1Q 태그에 대한 그림입니다.




<출처 : https://ciscohite.wordpress.com>


이 그림은 L2의 프레임입니다. DA, SA는 L2의 MAC주소인 일반적인 이더넷프레임에 파란색의 802.1Q VLAN TAG(4bytes)가 추가된 것입니다. OSI 7계층으로 보면 L2와 L3사이에 VLAN 계층이 하나 추가된거죠.


VLAN태그는 4바이트 이고, 그 4바이트는 두번째 라인처럼 구성되어 있습니다. 그중에 마지막 12bits에 해당하는 부분이 VLAN ID이고 12bits가 할당되어 0~4095까지 설정할 수 있죠.


VLAN TAG

  • TPID(16bits) : VLAN 프로토콜임을 나타내는 0x8100 값을 가집니다.
  • UP(3bits) : 우선순위로서 QoS에 활용합니다.0~7(3bits)까지 표현가능합니다.
  • CFI(1bit) : MAC주소가 Canonical Format인지 여부를 나타내는 플래그입니다. Non-Canonical format을 가지는 토큰링을 구분할 수 있습니다.
  • VLAN ID(12bits) : 가장 중요한 VLAN ID입니다. ID가 같은 PC들만 통신할 수 있습니다. 0~4095(12bits)까지 표현할 수 있습니다.


VLAN Trunk


스위치와 스위치 사이에 VLAN 프레임을 주고 받기 위한 통로를 트렁크(Trunk)라고 합니다.

 



서로 다른 스위치에 연결된 PC들을 같은 VLAN으로 묶을수도 있지요. 스위치간에 VLAN 구성에 대한 정보를 주고받기 위한 프로토콜을 VTP(VLAN Trunking Protocol)라고 합니다.




VLAN 구성방식


VLAN을 구성하는 대표적인 방법 3가지를 비교해보겠습니다.


 구분

 포트기반

MAC주소기반 

IP주소기반 

 개념

 스위치의 각 포트별로 구성

 MAC주소를 이용하여 구성

IP주소를 이용하여 구성

 Layer

 1계층

2계층 

3계층 

 장점

 구성하기가 쉬움

 VLAN변경시 물리적 변경없이 작업 가능

 PC의 물리적 위치와 관계없이 설정 가능

 단점

 VLAN변경시 물리적으로 포트를 변경하는 작업필요

 NIC추가 또는 변경 등 MAC주소 변경시 재설정 필요

 DHCP 사용 어려움



마무리


VLAN을 사용하면 논리적으로 네트워크를 재구성할 수 있기 때문에 비용이 절감되겠죠. 그리고 스위치 레벨에서 접근통제를 할 수 있어 보안성이 강화됩니다.

보안담당자로서는 보안성에 집중하면 될테구요. 시스템간에 접근제어를 해야할 때 VLAN 활용을 고려해보시고, 포트/MAC/IP 등 구성방식에 따라 보안성을 참고하여 선택하면 되겠습니다.



스위치가 뭔지는 알아도 조금 더 구체적으로 들어가면 L2스위치, L3스위치, L4스위치, L7스위치 등... 숫자가 들어가지요. 스위치라고 다 똑같은 스위치가 아닙니다. L2와 같이 기능이 단순한 것도 있지만, L7과 같이 기능이 무지 많고 엄청 비싼 스위치도 있습니다.


스위치 계층

L2스위치, L3스위치, L4스위치 등 스위치를 보통 얘기할 때 스위치가 처리할 수 있는 계층(Layer)을 의미하는 숫자가 함께 붙습니다. 계층을 잘 모른다면 아래 글을 한 번 보시길 바랍니다.



"OSI 7 계층 vs TCP/IP 계층"



예를 들어, 보통 우리가 많이 쓰는 L2스위치는 MAC주소를 기반으로 패킷을 처리해주는 스위치입니다. L3스위치는 L2에 해당하는 MAC주소 뿐만 아니라, L3에 해당하는 IP주소를 기반으로 패킷처리가 가능합니다. 이런식으로 보면 L4스위치는 MAC, IP주소 뿐만 아니라 Port번호를 기반으로도 패킷을 처리해줄 수 있겠죠. 


계층별 스위치

계층별로 스위치가 패킷을 처리하는 개념을 보겠습니다.


L2스위치

Layer 2 기반의 스위치입니다. L2스위치는 PC들이 연결되면 NIC(Netwrok Interface Card)에 할당되어 있는 MAC주소들을 수집하여 각 포트별로 연결된 PC들을 구분합니다. 즉, MAC 주소 테이블을 관리한다는 뜻이구요. 이를 이용하여 L2스위치에 연결된 서로 다른 PC들이 통신을 한다면 L2스위치는 두 PC가 연결되어 있는 인터페이스로만 패킷을 전달합니다.



<출처: 구글검색>


예를 들어, 위와 같은 L2 스위치의 각 포트에 A, B, C, D의 시스템이 연결되어 있다면 L2스위치는 위와 그림에서처럼 MAC주소와 포트정보로 구성된 MAC테이블을 관리합니다. 그리고 A가 C에게 패킷을 보내기 위해서 C의 MAC주소를 목적지로 하는 패킷을 보내면 L2스위치는 C가 연결된 E2 인터페이스로만 패킷을 보냄으로써 C가 패킷을 수신하게 됩니다.

몇 가지 부연설명을 하자면,

- E1, E3에 연결된 B, D 시스템은 A가 C에게 보낸 패킷을 구경도 할 수 없습니다. 이유는 스위치가 그쪽으로 패킷을 아예 보내지도 않기 때문입니다. 참고로, 더미허브였다면 모든 패킷을 복사하여 모든 포트로 보내주기 때문에 B와 D도 C로 가는 패킷을 구경할 수 있습니다. 스니핑(snifing)이라고 하지요.

- 또하나, A가 C에게 보낸 패킷에는 L2에 해당하는 MAC주소 말고도 L3에 해당하는 IP주소도 있습니다. 하지만 L2는 L2의 헤더에 해당하는 MAC주소정보만 참고하고 나머지는 모두 관심없는 L3이상의 데이터이기 때문에 IP주소조차 확인하지 않습니다. L3스위치라면 IP까지도 볼 수 있겠지만요. 그래서 L2스위치는 IP정보를 이용하여 접근제어는 못하지만 MAC주소로 접근제어는 가능하겠죠. 


L3스위치

L3스위치는 L2와 L3의 정보를 모두 확인하기 때문에, L2보다 스마트하다고 할 수 있죠. L2가 할 수 있는 기능은 당연하고, L3에 해당하는 IP정보를 확인하여 패킷처리가 가능합니다. IP정보를 기반으로 패킷 필터링도 가능하겠죠. L3는 보통 네트워크와 네트워크간에 패킷을 전송하는 라우터에 해당됩니다.


<출처: 구글검색>

 

같은 네트워크가 아니라면 라우터를 통해 패킷이 목적지까지 라우팅되어야 원하는 목적지까지 패킷이 전달됩니다. 위 그림과 같이 라우터는 L3에 해당하는 IP정보를 처리하여 라우팅을 합니다.



L4스위치

그런식으로 L4스위치는 L2, L3는 물론 L4에 해당하는 Port정보를 확인하여 패킷처리가 가능합니다. 보통 Port정보를 이용해서 처리하는 것은 로드밸런싱이나 포트포워딩, QoS 등의 기능이 있죠. 보안기능으로 보면 소스IP/소스Port/목적지IP/목적지Port를 기반으로 패킷을 허용 또는 차단하는 기본적인 방화벽기능도 가능합니다. 점점 스마트해지고 점점 비싸지는 거죠...


아래 그림은, L4 스위치에 가상IP(Virtual IP)를 할당하고 포트에 따라 L4스위치 뒤에 실제로 배치된 웹 또는 메일서버(SMTP)로 연결하기도 하고 부하를 고려하여 로드밸런싱도 하는 예를 설명하고 있습니다.



<출처 : 구글검색>




L7스위치

L7 스위치는 예상하시는 것과 같이 패킷의 모든 계층의 정보를 커버할 수 있으니 하고 싶은 것은 다 할수 있겠죠. L4스위치가 하는 것은 물론이고, 웹프록시 같은 L7프로토콜을 처리하는 것도 가능하고, 캐싱도 가능합니다. 패킷을 검사하여 침입탐지도 가능합니다. 물론 기본적으로 스위치의 역할에 충실해야하니 너무 많은 기능을 넣으면 스위치 성능이 떨어질테죠.


L4와 L7 스위치를 비교하면 아래와 같습니다.


<출처 : 정보보안기사, 예문사>



결론

계층이 높을 수록 스마트하지만 비싼 스위치가 됩니다. 용도에 맞게 적절한 스위치를 사용하여 네트워크 인프라를 설계해야 합니다.

그리고 보안 담당자는 각 스위치의 동작원리를 어느정도 이해해야 합니다. 다른 시스템간의 통신을 훔쳐보는 것을 스니핑(sniffing)이라고 하는데, 이것을 막기위해 기본적으로 허브를 사용하지 않고 스위치를 사용합니다. 스위치를 사용하더라도 패킷을 내가 훔쳐볼 수 있도록 스위치 재밍(switch jamming)을 할수도 있으며, ARP spoofing을 이용하여 패킷을 훔쳐보고 변조할 수도 있습니다. 오늘은 이러한 공격기법을 설명한 것은 아니지만 이런 것들을 이해하려면 기본동작원리는 어느정도 이해해야 합니다.


'네트워크 보안 이야기' 카테고리의 다른 글

네트워크 패킷 필터, netfilter - iptables  (0) 2017.01.22
가상랜 VLAN  (0) 2017.01.21
OSI 7 계층 vs TCP/IP 계층  (0) 2017.01.15
IPS vs IDS  (0) 2017.01.09

OSI 7 계층 vs TCP/IP 계층

네트워크 보안 이야기 2017. 1. 15. 00:14 Posted by 낭만이삘삘

L3 스위치...L4스위치...L7 프로토콜... L4에서 동작해? L2야? 등 등...

네트워크 관련된 얘기를 하다보면 1~7 사이의 숫자가 많이 등장하죠. 바로 OSI 7 계층(Layer)에서 정의한 계층을 의미합니다.

이번에는 네트워크 관련된 어떠한 내용이던, 이해를 하거나 의사소통하는데 반드시 알아야 할 필수 아이템인 OSI 7계층에 대해서 (역시나) 개념만 간단히 설명하겠습니다. OSI 7계층이 이론상 표준이라고 한다면, 사실상 표준에 해당하는 TCP/IP 계층과 살짝 비교하면서 마칠께요.


개요

네트워크 통신에는 통신 끝단의 클라이언트와 서버, 중간에서 패킷들을 처리해서 전달해 주는 스위치, 브릿지, 라우터 등 많은 요소들이 있습니다. 보이지 않는 것들까지 자세히 보자면 더 많죠. 이렇게 요소들도 많지만, 하드웨어든 소프트웨어든 이를 만들어 제공하는 벤더들도 참 많죠. 그래서 의사소통이나 각 요소들간의 호환성을 목적으로 네트워크 통신에 필요한 기능들을 쪼개고 쪼개서 각 계층을 7가지로 정의하고 표준화한 것이 OSI 7계층입니다. 각 계층별 정의부터 보죠.


<출처 : 정보보안기사, 예문사>



네트워크 통신에 필요한 기능을 쪼개어 위와 같이 계층을 나누었습니다. 그 역할은 위 표를 보면되구요. 꼭 알아야 할 계층만 설명해보면,

  • 1계층 - 전기적인 신호입니다. 예를들어 유선랜 통신은 랜케이블의 전기적 신호이고, 무선랜인 경우 무선AP와 통신하는 무선주파수가 해당됩니다.

  • 2계층 : NIC(네트워크 인터페이스 카드)(유/무선)에서 1계층에 해당하는 전기신호를 bit 신호로 바꾸겠죠. 그리고 통신을 하기 위해 주변의 NIC와 통신해야하는데 이때 MAC주소라는 것이 사용됩니다. NIC의 주소이죠. 이더넷의 경우 6바이트이구요. MAC주소는 Broadcast Domain내에서만 사용됩니다. 즉 내 PC가 연결되어 있는 작은 네트워크 내에서만 사용되고 다른 네트워크에 전달되기 위해서는 상위계층인 IP주소를 이용해야합니다.

  • 3계층 : IP주소를 사용하는 계층입니다. IP주소는 네트워크 내에 PC나 서버까지 데이터를 도달할 수 있는 주소입니다. 

  • 4계층 : 포트를 사용하는 계층입니다. 3계층인 IP주소를 이용해서 해당 시스템까지 데이터가 전달되었다고 해봅시다. 그 시스템에는 데이터를 기다리는 여러 서비스가 실행되고 있을텐데, 그 시스템으로 데이터가 도달하더라도 어떤 통신프로그램에게 데이터를 전달해야할지 정해야합니다. 이 역할을 하는 것이 포트번호입니다. 즉, 내 PC로 구글검색도하고, 메신저도 써야하기 때문에 내 PC의 IP로 전달된 데이터들도 포트번호를 보고 구글검색을 하는 웹브라우저로 전달할지 메신저에게 전달할지 결정합니다.

  • 7계층 : 5~6계층은 그냥 읽어보시면 되고, 7계층은 우리가 보통 웹프로토콜(http), 메일프로토콜(smtp, pop3 등) 등 최종적으로 어플리케이션이 사용하는 데이터들을 처리한다고 보면 됩니다.

 

캡슐화
한 시스템에서 동작하는 어플리케이션이 다른 시스템에 있는 어플리케이션에게 데이터를 보내는 걸 생각해보죠. 어플리케이션이 사용하는 데이터는 7계층에 해당합니다. 원하는 메시지를 보낼때 7계층에서 시작해서 1계층까지 타고 내려가는데, 계층을 하나씩 내려갈 때 마다 상위계층으로부터 내려받은 데이터는 해당 계층의 관심대상이 아니기 때문에 캡슐로 싸버리듯 그냥 데이터라고 보고 나의 계층에서 처리할 때 필요한 정보만 헤더라는 이름으로 앞에 추가로 달고 아래 계층으로 내보냅니다. 그러면 그 아래 계층 역시, 위에서 받은 것은 그냥 난 관심없는 데이터이니 캡슐로 싸버리고 내가 필요한 정보만 헤더라는 이름으로 앞에 또 추가해서 내립니다. 이런 식으로 1계층까지 갑니다. 그리고 데이터를 최종적으로 받는 시스템은 각 계층마다 내가 필요한 정보(헤더정보)만 처리하고 나머지(캡슐화된) 데이터는 위로 올려보냅니다. 이런 식으로 7계층까지 올라가면 최종적으로 어플리케이션이 자신이 받은 데이터를 인식하게 됩니다.

<출처 : 정보보안기사, 예문사>



OSI 7계층 vs TCP/IP 계층
위에서 살펴본 OSI 7계층이 이론적 표준(De jure)라고 한다면, 사실상 표준(De facto)은 TCP/IP계층입니다. 이론적으로는 OSI 7계층이 있지만, 실제로 현업에서는 단순화한 TCP/IP계층을 더 많이 쓴다는 얘기입니다. 프로그래밍을 할 때 TCP/IP계층을 더 많이 쓰긴 하지만, 계층을 지칭할 때의 숫자는 대부분은 OSI 7계층이니 OSI 7계층의 개념도 잘 알고 있어야 합니다. TCP/IP 4계층을 간략하게 정리하면 아래와 같습니다.

  • 어플리케이션(Application) 계층 : 네트워크를 사용하는 응용프로그램. FTP, TELNET, HTTP 등
  • 전송(Transport) 계층 :  애플리케이션 계층에 세션과 데이터그램(Datagram) 통신 서비스 제공. TCP, UDP 등
  • 인터넷(Internet) 계층 : 어드레싱(addressing), 패키징(packaging), 라우팅(routing) 기능 제공. IP, ARP, ICMP, IGMP 등
  • 네트워크 연결(Network Access) 계층 :  TCP/IP 패킷(packet)을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당



OSI 7계층보다 훨씬 간단하죠. 둘의 계층을 비교하면 아래와 같습니다.




각 계층별로 공부할게 많으니 별도로 공부하시길 바라고, 앞으로 네트워크에서 계칭을 지칭하는 숫자들이 자주 등장하는데 각 계층의 개념과 역할을 알고 있어야 이해가 바로 올겁니다.



'네트워크 보안 이야기' 카테고리의 다른 글

네트워크 패킷 필터, netfilter - iptables  (0) 2017.01.22
가상랜 VLAN  (0) 2017.01.21
L2 스위치, L3 스위치, L4 스위치, L7 스위치  (3) 2017.01.15
IPS vs IDS  (0) 2017.01.09

IPS vs IDS

네트워크 보안 이야기 2017. 1. 9. 08:45 Posted by 낭만이삘삘

대표적 네트워크 보안장비 중에 IDS와 IPS를 빼놓을 수 없죠. 이 둘은 거의 동일한 탐지엔진을 가지고 있지만 용도에 따라 활용이 조금 다르고, 용도가 다르기 때문에 주의할 점도 조금 다릅니다. 오늘은 IDS와 IPS의 주요기능을 살펴보고 어떻게 다른지 알아보겠습니다.


시기적으로 보면 침입탐지시스템이라고 하는 IDS(Instrusion Detction System)가 먼저 나왔다가 엔진이 안정화되고 장비성능이 안정화되면서, 탐지가 아니라 아예 사전에 방지하자는 침입방지시스템인 IPS(Intrusion Protection System)로 진화했다고 할 수 있습니다. 하지만 장단점이 있어서 둘 다 현재 많이 사용되고 있지요.


IDS나 IPS는 호스트기반 IDS/IPS, 네트워크 기반 IDS/IPS가 있지만 자주사용하는 네트워크 기반 유형만 설명하겠습니다.


설치 위치


ips 네트워크에 대한 이미지 검색결과

<출처: www.kumkang21.co.kr>


보통 방화벽 뒤에 내부망(또는 DMZ)에 설치합니다. 그 이유를 간단히 설명하겠습니다.

  • 거의 최전방에 위치하는 이유 : 내부망으로 들어오는 모든 패킷을 검사하기 위해서입니다. IDS/IPS는 모니터링하고 있는 네트워크를 지나가는 모든 패킷을 검사할 수 있습니다. 
  • 하지만 방화벽 뒤에 주로 위치하는 이유 : 성능입니다. IDS/IPS는 패킷의 헤더부터 페이로드 내 데이터까지 모두 Deep Inspection을 하기 때문에 주로 패킷의 헤더정보만 검사하는 방화벽보다 많은 성능을 필요로 하기 때문입니다. 즉, 방화벽에서 쓸데없는 패킷들을 우선 필터링 해주고 방화벽에서 허용해준 트래픽에 대해서만 IDS/IPS가 고급정보까지 심도있게 분석하여 공격을 탐지 및 차단하겠다는 것입니다. 경우에 따라서는 방화벽 앞에 가기도 합니다. 방화벽에서 차단할 것이지만, 어떤 공격들이 우리 네트워크에 인입되려는 시도가 있었는지도 궁금하다면 그럴 수 있겠죠. 예를 들면, 관제목적으로 사용되는 경우 그럴 수 있습니다. 하지만, 성능이 충분히 보장되어야 합니다.


진단 룰

IDS/IPS를 만드는 벤더들은 대부분 리눅스 기반에 snort엔진을 많이 수정하여 사용합니다. 최근에는 성능을 고도로 높이기 위해 전용하드웨어를 도입하여 하기도 하지만 원리는 크게 변하지 않을 것입니다.


snort(https://snort.org)는 오픈소스의 네트워크 보안 소프트웨어 입니다. 사이트를 한 번 들어가보는 것도 추천합니다. snort룰은 거의 사실상 표준(defacto)이라고 보면 됩니다. 웬만한 네트워크 보안 장비들은 snort룰 형식을 사용합니다. 보안기사 시험에도 종종 나오죠. 룰의 세세한 옵션까지 자세히 이해하려면 많은 시간과 지식이 필요하구요, 개념만 살펴보겠습니다.



         [snort 룰 예]

<snort룰 예>

<출처 : 정보보안기사 예문사>



위의 내용과 같이, 패킷의 내용을 분석하여 특정 조건에 해당될 경우 drop하라는 등 탐지조건과 처리방법을 정의할 수 있습니다. 보통 IPS/IDS에는 이러한 룰들이 몇 천 개 이상 들어가고, 패킷을 하나 하나 검사할 때마다 들고 있는 모든 룰들에 해당하는지를 검사해야 합니다. 이것을 패턴매칭이라고 하고 이 패턴매칭 알고리즘이 장비의 성능을 좌우한다고 할 수 있습니다. 


또한 룰을 얼마나 잘 정의하느냐에 따라 외부 공격을 잘 탐지 및 차단하느냐를 결정합니다. 룰을 잘 못 정의하면 오탐 또는 미탐이 발생할 수 있습니다.

  • 오탐(False Positive) : 정상패킷을 공격으로 잘 못 탐지를 한 것입니다. 정상적인 서비스가 안될 수 있겠죠.
  • 미탐(False Negative) : 공격패킷을 정상으로 인지하여 탐지하지 못한 것입니다. 외부로부터 공격패킷을 내부로 그냥 보내게 되겠지요.
IDS/IPS는 성능도 중요하지만 이러한 룰이 얼마나 잘 만들어져 있고, 최신 공격에 대해 룰을 얼마나 신속하게 업데이트하여 대응하느냐가 굉장히 중요합니다.

IPS와 IDS의 비교

IPS는 보통 인라인(inline)장비라고 합니다. 네트워크 라인 내 중간에 삽입된 개념으로 IPS로 인입되는 패킷을 신속하게 처리하여 내보내줘야 서비스가 느려지지 않습니다. 인입된 패킷을 검사한 결과 공격이라고 탐지한 경우, 그 패킷을 내보지 않고 차단(drop)시킨다면 공격패킷을 내부로 들어가지 못하게 되는 것입니다. 이렇기 때문에 공격을 실시간으로 차단할 수 있습니다.


반면, IDS는 패킷을 미러링(Mirroring)합니다. 즉, 지나가는 패킷을 복사하여 검사를 합니다. 복사하여 검사는 하지만, 이미 그 패킷을 지나가버린 상태이죠. 그래서 내부로 공격패킷을 인입되는 것을 실시간으로 막을 수는 없고 사후에 탐지하는 개념으로 보면 됩니다.


그렇다면, IPS가 무조건 IDS보다 좋은걸까요? 장단점이 있습니다.

  • IPS : 실시간 공격차단 가능하지만, 처리할 트래픽이 많을 경우 네트워크 부하가 발생하여 서비스가 지연될 수 있고, 장비가 다운될 경우 네트워크에 장애가 발생합니다. 이래서 이중화가 중요하지요. 부하를 줄이기 위해서는 룰 최적화가 중요하고 그래도 부하가 있으면 룰을 줄여서 탐지를 다 못하더라도(Hit가 적은 룰부터 삭제 등) 네트워크 가용성을 확보해야 겠지요. 또한 오탐발생 시 아주 심각합니다. 예를 들어, 정상적인 인터넷뱅킹을 이용하는데도 공격으로 오인하여 서비스장애가 발생할 수 있기 때문입니다.
  • IDS : 네트워크 부하를 유발하지 않습니다. IDS장비가 소위 버벅거린다해서 실제 네트워크에는 영향을 주지 않아 부담이 적습니다. 하지만, 공격패킷을 실시간 차단할 수 없는 단점이 있습니다. 공격 탐지 시 방화벽과 연계하는 등의 조치가 필요합니다. 부담이 적다보니 오탐이 발생해도 둔감할 수 있어 룰최적화가 실질적으로 잘 안이루어질 수 있고 오탐에 의한 이벤트로그들이 다량으로 발생할 경우, 보안 담당자는 IDS의 로그를 신뢰하지 않고 귀찮게 여기는 경우도 비일비재합니다. 관리를 잘 해야겠지요.

요약표가 있으니 참고하시기 바랍니다.

<출처 : 정보보안기사 예문사>



보안 담당자 체크 포인트


설치 위치 및 성능

보호하고자 하는 네트워크 지점이 어디인지를 고려하여 적절하게 위치해야 합니다. 또한 장비의 성능을 고려하여 네트워크 트래픽이 과도하게 몰려 성능부하가 초래되지 않도록 설치 위치를 결정합니다. 예를 들어, 방화벽 앞에 있는 것과 뒤에 있는 것은 장비로 인입되는 트래픽이 많이 차이날 것입니다. 장비의 성능만 확실하다면 가장 최전방에 설치하는 것이 모든 트래픽을 검사할 수 있겠죠. 하지만 트래픽이 너무 많은 경우 장비의 가용성을 고려하여 분산시켜 위치할 수도 있습니다.

또한, VPN과 같이 암호화된 패킷이 존재하는 경우 복호화되는 시점 이후에 검사를 하느냐에 따라 암호화 패킷도 제대로 검사할 수 있는지도 결정됩니다.


룰 최적화 및 최신 업데이트

룰을 최적화하는 것이 오탐 및 미탐을 줄일 수 있으며 장비의 성능에도 영향을 줄 수 있습니다. 또한, 최신 공격에 얼마나 신속하게 대응하느냐도 중요한 요소입니다.


네트워크 이중화

특히 IPS의 경우 인라인장비로서 가용성이 매우 중요합니다. 반드시 이중화하여 장비가 다양한 이유로 다운 될 경우에도 네트워크 가용성이 확보될 수 있어야 합니다.

참고로, 장비가 다운될 경우 네트워크가 끊어진 것처럼(Fail close) 할 것인지 장비가 없는 것처럼 동작(Fail open)할 것인지를 보통 장비에서 선택가능합니다. Fail close는 장비 다운 시 네트워크가 단절이 되기 때문에 정상패킷과 공격패킷 모두 차단되겠죠. 반면, Fail open은 장비가 다운 시 네트워크 라인을 물리적으로 연결시켜주기 때문에 장비가 없는 것과 같이 정상 패킷, 공격 패킷 모두 허용됩니다. 공격패킷을 일부 허용하더라도 정상서비스 유지가 중요한지, 정상서비스를 못하더라도 혹시 모를 공격패킷은 절대 허용할 수 없는 상황인지에 따라 선택하겠죠.