방화벽의 정의
네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 허용하거나 차단하는 장비를 방화벽이라 한다.
일반적으로 방화벽은 네트워크 3, 4 계층에서 동작하며 세션을 인지하는 상태 기반 엔진(Stateful Packet Inspection, SPI)으로 동작한다.
초기 방화벽
초기에는 패킷의 인과 관계를 확인하지 못하고 장비에 등록된 정책만으로 단순히 패킷을 필터링했다.
이러한 방화벽을 스테이트리스(Stateless) 또는 패킷 필터(Packet Filter) 방화벽이라고 한다.
패킷이 장비에 인입되면 해당 패킷이 방화벽에 설정된 정책에 일치되는 것이 있는지 확인하는데 이때 참고하는 조건을 5-튜플(5-Tuple)이라고 한다.
5-튜플은 패킷의 3, 4계층 헤더 중 Source IP, Destination IP, Procotol No, Source Port, Destination Port 5가지 주요 필드를 뜻한다.
이와 같은 패킷 필터링 방화벽은 인터넷 통신과 같이 불특정 다수 기반의 정책을 정의할 때는 룰셋(Ruleset)이 복잡해지고 보안이 약화되는 문제가 있다. 또한 5-튜플 외의 3, 4 계층 헤더를 변조해 공격하면 적절한 방어를 할 수 없다.
룰셋(Ruleset) : 방화벽을 기준으로 보호하고자 하는 네트워크의 외부와 내부에 존재하는 시스템들의 IP와 포트 단위
로 이루어지는 것
허나 패킷 필터링은 부하가 적고 간단히 동작하므로 현대적인 일부 방화벽에서 특수한 기능으로 남아있다.
예를 들면 지정 IP를 방어하는 데는 패킷 필터링이 부하가 적기 때문에 패킷 필터링과 SPI를 함께 동작시킨다.
현대적 방화벽의 등장(SPI 엔진)
기존 페킷 필터 방화벽이 정책만으로 제어하던 한계를 극복하기 위해 상태 기반 방화벽(Stateful Inspection Firewall)이 개발되었다. 현재 사용 중인 방화벽에 세션 기반으로 동작하는 상태 기반(SPI) 엔진을 탑재하고 있다.
통신은 대부분 양뱡향으로 이루어지는데 패킷 필터는 이런 양뱡향성을 고려하지 못하고 단순히 패킷이 조건과 일치하는지만 검사한다.
내부 사용자가 외부의 특정 웹페이지에 접속할 때 3 웨이 핸드셰이크(3 Way Handshake)를 거친 후 HTTP 요청과 응답 과정을 거친다. 이때 목적지는 불특정 다수의 웹이 될 수 있다.
패킷 필터 방화벽이 내부에서 외부로 나가는 정책을 설정할 수 있지만 응답에 대한 정책도 설정해야 한다면 외부의 웹 사이트는 불특정이므로 출발지가 모든 IP여야 하고 목적지 서비스 포트 또한 모든 포트가 되어야 한다.
이는 보안상 매우 취약한 문제 발생하므로 패킷의 인과 관계를 파악할 수 있는 상태 기반 SPI 엔진이 나오게 되었다.
SPI 엔진은 패킷의 인과 관계와 방향성을 인지해 정책을 적용할 수 있어 내부 네트워크에서 인터넷으로 통신할 대 유용하게 사용된다.
방화벽 동작 방식
최근 방화벽들은 보안을 강화하고 성능을 높이기 위해 여러 개의 엔진과 다양한 기능을 가지고 있고 이를 위해 동작방식이나 패킷 처리 순서가 다를 수 있다.
보통 방화벽이 패킷을 처리하는 순서는 다음과 같다.
- 장비에 패킷이 들어오면 우선 세션 테이블 확인
- 조건에 맞는 세션 정보가 있을 때 포워딩 테이블 확인(라우팅, ARP 포함)
- 조건에 맞는 세션 정보가 없을 때 방화벽 정책을 확인
- 방화벽 정책은 맨 위의 정책부터 확인해 최종 정책까지 확인한 후 없을 때 암시적인 거부 규칙을 참고해 차단
- 허용 규칙이 있으면 내용을 세션 테이블에 적어 넣는다.
- 포워딩 테이블을 확인(라우팅, ARP 포함)
- 조건에 맞는 정보가 포워딩 테이블에 있을 때, 적절한 인터페이스로 패킷을 포워딩
- 조건에 맞는 정보가 포워딩 테이블에 없을 때, 패킷 폐기
SPI 엔진은 세션 인지 기능이 있어 단순히 5-튜플 조건만 확인하는 것이 아니라 OSI 3, 4 계층의 세부적인 필드도 함께 확인한다.
TCP 컨트롤 플래그에 따라 동작 방식이 변하거나 시퀀스와 ACK 번호가 갑자기 변경되는 것을 인지해 세션 탈취 공격을 일부 방어할 수 있는데 이를 TCP Anti-Replay 기능이라고 한다.
세션 테이블 덕분에 세션 로깅이 쉬우며 이런 로그를 기반으로 어떤 통신이 문제가 있는지 확인 가능하다.
ALG
방화벽은 패킷 필터 엔진보다 헤더 정보를 상세히 확인하고 세션을 인지할 수 있지만 애플리케이션 헤더 정보를 인지할 수 없다.
세션 방화벽 등장 이전 대표적인 포로토콜 FTP는 방화벽과 같은 세션 장비를 고려하지 못해 통신 중간에 방화벽이 있으면 정상적인 통신이 불가능했다.
FTP는 컨트롤 프로토콜과 데이터를 보내는 데이터 프로토콜이 분리되어 동작한다. 게다가 컨트롤 프로토콜과 데이터 프로토콜이 반대로 세션을 맺으므로 FTP의 기본적인 동작을 알아야 정상적인 서비스 제공이 가능하다.
다음은 FTP의 기본적인 동작이다.
- 클라이언트는 랜덤 포트(2000)을 통해 서버 커맨드 포트 21에 접속하고 데이터 포트로 사용할 2001(n + 1) 번 포트 정보를 서버에 전송한다.
- 서버에서 클라이언트의 커맨드 포트(21)에 응답한다.
- 서버는 서버의 데이터 포트(20)를 클라이언트 데이터 포트(2001)에 접속한다.
- 클라이언트에서 서버의 데이터 포트에 응답한다.
FTP 액티브 모드에서는 초기 접속 방향과 반대로 데이터 프로토콜이 동작하기때문에 방화벽을 정상적으로 통과할 수 없다.
패시브 모드로 변경하게 되면 세션 방향이 반대가 되지 않지만 패시브 모드 자체를 제공하지 못하는 컴포넌트가 있을 수 있고 이미 개발된 애플리케이션 변경이 불가능한 경우도 있다.
그래서 방화벽에서 FTP 액티브 모드를 통과시키기 위해 애플리케이션 프로토콜을 확인하고 필요에 따라 세션을 인지해 포트를 자동으로 열어주는데 이것을 ALG(Application Layer Gateway) 기능이라고 한다.
ALG는 PAT기능이 동작하는 방화벽에서 PAT를 정상적으로 통과하지 못하는 프로토콜들을 자동으로 인지해 애플리케이션 정보를 변경해주거나 세션 테이블을 만들어주는 작업을 수행한다.
ALG 기능을 동작하기 위해선 방화벽이나 해당 패킷이 참조되는 정책에 ALG 기능이 활성화되어 있어야 한다.
다음은 FTP 프로토콜이 방화벽을 지나갈 때의 동작 순서이다.
- FTP ALG 기능은 초기 FTP 요청 커맨드를 모니터링
- 서버 쪽에서 사용할 데이터 세션에서 사용할 포트를 클라이언트로 알려줄 때 이 정보를 확인하고 적절한 세션 정보를 만든다. 해당 정보는 세션 테이블에 저장된다.
- 서버에서 클라이언트로 데이터 세션을 열 때 세션 테이블에 정보가 있다면 정책을 확인하지 않고 패킷이 포워딩된다.
ALG는 편리한 기능이지만 최근 대부분의 애플리케이션이 이런 방화벽이나 NAT를 고려해 개발되고 있고 STUN과 같은 홀 펀칭 기술들도 많이 발전하여 ALG 기능을 사용하지 않는 추세이다.
방화벽의 한계
방화벽이 많은 곳에서 사용되자 다양한 방법의 새로운 공격 방식이 생겨났다. 공격 목표가 서비스 중단 쪽으로 바뀌고 DDoS 공격이 새로운 트렌드가 되었다. 또한 방화벽을 우회하는 방법이 나오고 특히 대규모 웜 공격으로 인터넷 서비스가 마비되면서 방화벽의 한계가 드러났다.
SPI 엔진은 3, 4 계층에서만 동작하므로 많은 한계가 있다. 애플리케이션 단에서 취약점이 발견된다면 방화벽은 애플리케이션 영역을 검사하지 못하기 때문에 대응이 불가능했다.
이러한 웜 공격을 막기 위해 등장한 것이 IPS이다.
<참고> 현대 방화벽 NGFW, UTM
SPI 엔진은 레거시 방화벽이라고도 부른다. 사이버 공격은 계속 발전하기 때문에 그에 대응하는 방화벽이 많이 발전해야한다.
NGFW(Next Generation Firewall)와 UTM(Unified Threat Management Firewall)은 방화벽을 애플리케이션 영역까지 확장한 보안 장비이다.
NGFW는 다양한 보안 장비의 기능이 논리적으로 통합되어 있고 UTM은 물리적인 여러 가지 엔진을 통합해 함께 동작한다.
두 장비 모두 다양한 보안 기능 통합과 애플리케이션 계층을 포함해 보안을 제공한다는 공통점이 존재한다.
'CS > 네트워크' 카테고리의 다른 글
DDoS 방어 장비에 대해 (0) | 2022.08.13 |
---|---|
IPS, IDS 에 대해 (0) | 2022.08.13 |
보안과 보안 솔루션 (0) | 2022.08.12 |
DHCP(Dynamic Host Configuration Protocol) (0) | 2022.07.12 |
GSLB(Global Server/Service Load Balancing) 란 (0) | 2022.07.07 |