네트워크(Packet)를 제어하는 기술 (Mirroring / Inline / Proxy)

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM
9 min readSep 30, 2019

--

안녕하세요, 네이버 클라우드 플랫폼입니다.

오늘은 네트워크(Packet)를 제어하는 기술 중의 하나인 Mirroring / Inline / Proxy에 대해 말씀드리려고 합니다.

위 3가지 용어를 들어보신 분들도 계시고, 처음 접하시는 분들도 계실 것이라 생각됩니다.

위와 같은 네트워크(Packet)를 제어하는 기술들은 주로 네트워크 모니터링 솔루션, 접근통제 솔루션, 네트워크를 통한 컨텐츠 보호 솔루션, DB 보안, 방화벽, IDS(침입탐지), IPS(침입방지) 등의 네트워크를 제어하는 솔루션에서 많이 사용하는 기술입니다.

그럼, 이제부터 본격적으로 살펴보도록 하겠습니다.

위에서 말한 솔루션들은 네트워크 상에서 무언가를 제어 및 통제하기 위한 솔루션들입니다. 다시 말해, 네트워크 상의 Packet들을 가지고 조합하여 내용을 확인한 후에 제어 및 통제를 하는 솔루션들입니다.

Network(Packet) Mirroring 방식

미러링, 말 그대로 Packet을 복사하여 하나는 원래 가려던 곳에 또 하나는 제어 및 통제 솔루션으로 받는 것입니다.

미러링은 2가지로 많이들 사용하는데요.

1) 스위치 미러링

네트워크 장비인 스위치의 설정에 의해 스위치 포트로 들어오고 나가는 패킷들의 특정 한 포트에 미러링 시킬 수 있습니다.

제어 및 통제 솔루션은 해당 미러링 포트에서 복사된 Packet을 전달받게 됩니다.

■ 단점

스위치를 통한 미러링의 경우 스위치 자체에 부하가 심해지면, 미러링 패킷이 유실될 수 있습니다. 스위치 자체 내에서 소프트웨어적인 미러링을 하게 때문에 스위치의 부하가 심해지면 미러링보다는 스위치 본연의 임무가 더 우선시 되기 때문에 미러링은 우선순위에서 밀릴 수밖에 없습니다.

그러나, 별도의 장비(미러링 탭)가 추가되지 않는다는 점에서 스위치 미러링을 사용하는 경우도 있습니다.

2) 탭 미러링

남자 손바닥만 한 장비로 input 포트 1개, output 포트 2개로 (기본) 구성되어 있습니다.

스위치 미러링과 다르게 물리적(기계적)으로 복사가 이루어지기 때문에 Packet 유실률은 거의 없습니다.

■ 단점

네트워크 라인(선) 중간에 들어가야 하는 것이기 때문에 어디에 설치할지 포인트를 잘 잡아야 한다는 것입니다.

즉, 어느 위치에 설치해야 회사 내의 원하는 Packet 트래픽 또는 전체 Packet 트래픽을 모두 받아볼 수 있는지 판단해야 합니다

미러링 방식의 응용

그럼, Packet 미러링을 통해 무엇을 할 수 있느냐?

제어 및 통제 솔루션에서는 미러링 된 패킷을 솔루션 장비의 NIC 카드에서 솔루션으로 받아야 하는데요.

이때 사용하는 것이 Packet Capture 모듈입니다. 많은 분들이 사용하는 것으로 pcap 라이브러리(무료), PCAUSA(상용), 등의 대표 라이브러리들이 있습니다. NDIS라는 용어와도 무관하지는 않습니다, 네트워크 디바이스 드라이버 제작은 나중에 기회가 된다면 설명드리겠습니다. 최근에는 Intel에서도 Packet Capture 라이브러리가 나왔습니다.

해당 라이브러리를 통해 Packet 을 모두 받을 수도 있고, 특정 Packet만 필터링해서 받을 수도 있습니다. 이 필터링 시에 이용하는 것이 BPF (Berkeley Packet Filter)입니다. 형식은 어셈블리와 비슷하게 되어있습니다.

(http://en.wikipedia.org/wiki/Berkeley_Packet_Filter)

Packet를 솔루션으로 가져왔다면, Packet 조합과 Session 관리를 해야 합니다.

위 두 가지가 기술입니다. 즉, 네트워크 보안 솔루션들을 살펴보면 1G 처리 가능, 3G 처리 가능, 10G 처리 가능 등과 같이 이야기하는데요. 그러한 성능은 두 가지 기술에서 대부분 좌지우지됩니다.

Packet 조합과 Session 관리를 통해 원하는 정보를 뽑았다고 가정하겠습니다. 그럼, 저장만 하고 끝날 수도 있고요 (모니터링만 하는 경우) 특정 Session 을 차단하고 싶으면 어떻게 할까요?

RST 패킷 또는 FIN 패킷을 시퀀스 번호에 맞게 만들어서 목적지에 패킷을 전송합니다.

여기서도 기술이 필요합니다. 빠르게 만들어서 원래 시퀀스 번호의 패킷이 목적지에 도달하기 전에 RST 패킷 또는 FIN 패킷을 먼저 보내야 하기 때문입니다.

가까운 예로 회사에서 웹서핑을 하다 보면, 웹브라우저에 “해당 웹사이트에 접근이 차단되었습니다”라는 영어 문구가 뜰 때가 있습니다. (주)소만사의 WebKeeper라는 제품인데요, 바로 FIN 패킷의 패이로드(데이터 영역)에 해당 문구를 넣어 보내는 것입니다. FIN 패킷에도 데이터를 넣는 것이 가능합니다.

위와 같은 방식들을 미러링 방식에서는 많이들 사용합니다.

Network(Packet) Inline 방식

인라인, 말 그대로 날 통해서 지나가라는 말입니다.

인라인 방식은 그림에서 보는 것과 같이 구성을 가지게 되는데요, FOD(Fail Over Device)라는 네트워크 탭 장비를 사용하게 됩니다.

FOD의 동작 방식은 그림에서 보듯 A — B 구간 사이에 FOD가 들어가게 됩니다.

FOD는 4개의 포트로 구성되는데요, 4개의 포트를 임의로 A, B, C, D로 부르겠습니다.

A, B는 보시는 것과 같이 원래 구간이고, 해당 구간의 라인을 A, B 포트에 연결합니다.

C, D는 솔루션 장비의 라인에 연결합니다.

A → B 패킷의 경우,

A → C (솔루션에서 받고 분석 후) → D (패킷 전송) → B 이렇게 패킷이 진행.

B → A 패킷의 경우,

B → D (솔루션에서 받고 분석 후) → C (패킷 전송) → A 이렇게 패킷이 진행.

Health Check를 통해 솔루션 또는 솔루션의 장비가 문제인 경우, FOD 장비 자체에서 C, D를 거치지 않고 바로 A — B 간 통신할 수 있도록 해줍니다.

제어 및 통제 솔루션에서는 미러링과 같은 Packet Capture 라이브러리를 통해 패킷을 가져오고, 또한 전송할 수도 있습니다.

인라인 방식은 주로 강력한 Session 차단을 위해 많이 사용합니다.

차단은 패킷을 안 보내거나 (거의 사용하지 않습니다), RST 패킷 / FIN 패킷을 만들어 원래 패킷 대신 보냅니다.

차단 방식은 미러링과 동일하나, 패킷을 가로막은 상태에서 하는 것이기 때문에 강력할 수밖에 없습니다.

인라인에서는 차단뿐만 아니라, 특정 데이터를 보이지 않게도 합니다.

즉, 마스킹이라고 하는데요, 네트워크 상에 주민등록번호가 흘러간다고 한다면,

이를 탐지하여 해당 주민번호가 있는 패킷의 데이터(패이로드) 부분에 xxxxxx-xxxxxxx 식으로 마스킹을 합니다.

인라인 방식의 한계점은 미러링 방식에 비해 처리할 수 있는 용량이 작다는 것입니다.

미러링 방식은 필터링을 통해 원하는 패킷을 걸러가면서 받아 처리할 수 있는데 반해 인라인 방식은 일단 모든 패킷을 받아야 한다는 것입니다. 필요 없으면 그냥 통과를 시키더라도 제어 및 통제 솔루션에서 처리를 해주어야 합니다.

이렇다 보니, 이 처리 용량을 늘리는 것이 기술입니다. 전용 카드를 사용하고 NIC 카드 제작 업체와 콜라보 해서 전용 FOD 카드 및 전용 솔루션 장비를 만들기도 합니다.

Proxy 방식

일명, Socket Proxy 방식이라고도 불리는데요, 네트워크 장비 없이 순수하게 프로그램만으로 구동되는 방식입니다.

프로그래머라면 Proxy 가 어떤 것인지는 다들 아실거라고 생각합니다. (HTTP Proxy, HTTPs(SSL) Proxy, SSH Proxy 등등)

Proxy를 만들어서 클라이언트에겐 내가 서버인 것처럼 나한테 접속하게 하고 서버에겐 내가 클라이언트인 것처럼 서버에 접속합니다.

왜 그렇게 할까요?

위에서 언급한 HTTPs / SSL / SSH 등은 데이터를 암호화해서 전송하게 되어 있습니다.

그래서, 미러링 / Inline으로 패킷을 받아도 해당 내용을 확인할 수 없습니다. Key가 있어야 하는데 이것은 고유 Key여서 제3자가 암호를 풀 수가 없습니다. 그렇기 때문에 Proxy를 만들어 클라이언트는 내가 서버인 줄 알고 나한테 접속하여 서로 key를 교환하고 나는 내가 클라이언트인 것처럼 서버에 접속하여 서로 key 교환을 하여 데이트를 릴레이 시켜 주는 것입니다.

그럼, 클라이언트가 어떻게 나한테 접속하게 만들까요?

Socket Injection이라는 기술을 통해 드라이버를 만든 후 사용자 PC에 설치시킵니다.

그럼 이 드라이버에서 Socket 이 Open 할 때 후킹 하여, 실행시킨 프로그램이 웹브라우저인지, 터미널 프로그램인지, DB 접속툴인지 구분한 후 목적지의 IP 주소를 Proxy 주소로 바꾸어 줍니다.

요즘은 DB 보안 솔루션에서도 Proxy 방식을 이용하여 DB 쿼리를 제어한다든지, DB 쿼리를 결재를 한 후 수행 시킨다든지, 쿼리 응답 데이터에 개인 정보가 있으면 마스킹 처리한다든지 하는 방식을 많이들 사용합니다.

글을 마무리하며…

끝으로 미러링 / 인라인 방식에서 DMA라는 용어가 자주 등장합니다.

이전 설명에서 보면 솔루션 장비의 NIC 카드에서 패킷을 제어 및 통제 솔루션으로 가져오기 위해 Packet Capture 라이브러리 등을 많이 이용하는데요. 장비의 NIC 카드 버퍼 메모리에 있는 패킷을 커널 메모리에 복사한 후 솔루션의 버퍼에 가져오게 됩니다.

즉, NIC 카드 버퍼 (패킷) => 커널 메모리 (패킷) => 솔루션 버퍼 (패킷) 이렇게 동일 패킷에 대하여 몇 번의 복사가 발생되게 됩니다.

OS에서 할 일도 많고 버퍼도 낭비가 생길수밖에 없습니다. 그래서 Direct Memory Access라는 것이 나옵니다. 통제 및 제어 솔루션에서 버퍼를 생성하여 NIC 카드에 주면 NIC 카드는 해당 버퍼에 직접 패킷을 쓰는 방식입니다.​

긴 글 읽어주셔서 감사드립니다. 앞으로도 네이버 클라우드 플랫폼에 많은 관심 부탁드립니다!

다음엔 또 다른 주제로 찾아오겠습니다.

--

--

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM

We provide cloud-based information technology services for industry leaders from startups to enterprises.