웹 공격 방어와 인프라 아키텍처
방화벽(Network Firewall)
일반적으로 우리가 ‘방화벽’이라고 부르는 장비는 OSI 7계층 중 3계층(네트워크 계층)과 4계층(전송 계층) 에서 동작합니다.
들어오고 나가는 패킷의 출발지 IP, 목적지 IP, 프로토콜, 포트 번호를 확인합니다. 미리 정의된 접근 제어 목록(ACL, Access Control List) 규칙에 따라 패킷을 통과시킬지(Allow) 버릴지(Drop) 결정합니다.
상태 기반 검사(Stateful Inspection)
초기의 방화벽(Packet Filtering)은 단순 무식하게 규칙만 확인했습니다. 하지만 현대의 방화벽은 통신 ‘세션(Session)’의 상태를 기억합니다. 내부에서 외부로 먼저 요청을 보낸 정상적인 연결에 대한 응답 패킷은 자동으로 통과시키고, 외부에서 갑자기 내부로 들어오려는 뜬금없는 패킷은 차단합니다.
Blind Spot
방화벽은 ‘포트’까지만 확인하고, 그 안에 든 데이터(Payload)의 내용물은 절대 뜯어보지 않습니다.
웹 서비스를 하려면 80번, 443번 포트를 무조건 열어두어야 하는데, 해커가 이 열려있는 포트를 통해 악성 코드나 해킹 공격(SQL Injection 등)을 섞어 보내면 일반 방화벽은 “포트가 443이네? 통과!” 하고 그냥 들여보내는 치명적인 맹점이 있습니다.
웹 방화벽(WAF)
방화벽의 맹점을 노린 웹 애플리케이션 공격이 급증하자 등장한 것이 바로 웹 방화벽(WAF) 입니다.
OSI 7계층(애플리케이션 계층) 에서 동작하며, 특히 HTTP/HTTPS 트래픽에 특화되어 있습니다. 클라이언트가 보낸 HTTP GET/POST 요청의 헤더(Header), 쿠키(Cookie), 바디(Body) 내용물(Payload)을 모두 뜯어보고(Deep Packet Inspection), 악의적인 패턴이 있는지 분석합니다.
OWASP Top 10
일반 방화벽이 막지 못하는 애플리케이션 레벨의 공격들, 즉 SQL Injection(데이터베이스 조작), XSS(크로스 사이트 스크립팅), 웹 셸(Web Shell) 업로드 등을 완벽하게 탐지하고 차단합니다.
성능(Performance) 오버헤드
일반 방화벽은 IP/포트만 보고 빠르게 패킷을 넘기기 때문에 대용량 트래픽 처리에 유리합니다. 하지만 WAF는 무거운 정규표현식을 돌리며 트래픽의 내용물을 낱낱이 검사해야 하므로 CPU 연산 비용이 크고 지연 시간(Latency)이 발생합니다. 그래서 실무에서는 서버 앞단이 아닌 CDN 엣지(Edge) 구간에 클라우드 기반 WAF(AWS WAF, Cloudflare)를 배치하여 부하를 분산시키는 설계를 선호합니다.
IPS (Intrusion Prevention System, 침입 방지 시스템)
방화벽과 WAF의 중간 지대에 있는 장비입니다. 주로 L4~L7까지 아우르며 네트워크망 전체에 돌아다니는 웜 바이러스, 트로이 목마, OS 취약점 공격의 ‘시그니처(Signature)’ 를 기반으로 악성 패킷을 차단합니다.
NGFW (Next-Generation Firewall, 차세대 방화벽)
현대의 보안 아키텍처에서는 방화벽, IPS, VPN, 그리고 제한적인 WAF 기능까지 하나의 강력한 어플라이언스(Appliance) 장비에 통합한 NGFW(예: Palo Alto, Fortinet)를 사용하는 추세입니다. 관리가 일원화되는 장점이 있습니다.
주요 네트워크 공격들
수많은 장애와 해킹 시도를 분석하다 보면, 대부분의 네트워크 공격은 한 가지 근본적인 원인에서 출발한다는 것을 알게 됩니다. 바로 “TCP/IP 프로토콜 자체가 애초에 ‘보안’보다는 ‘연결성(Connectivity)’과 ‘효율성’을 최우선으로 설계되었다” 는 점입니다.
가용성(Availability)을 파괴하는 DoS와 DDoS 공격
서비스를 다운시켜 비즈니스를 마비시키는 가장 직관적인 공격입니다.
DoS (Denial of Service)
단일 해커가 엄청난 양의 트래픽을 보내 서버의 자원(CPU, 메모리, 네트워크 대역폭)을 고갈시키는 공격입니다. 하지만 현대의 고성능 서버 앞에서는 혼자만의 힘으로는 역부족인 경우가 많습니다.
DDoS (Distributed DoS)
DoS의 한계를 극복하기 위해 해커는 미리 악성코드에 감염시켜 통제권을 뺏은 수만~수십만 대의 좀비 PC(Botnet)나 IoT 기기들을 조종하여, 타겟 서버를 향해 일제히 트래픽 폭탄을 던집니다.
서버는 들어오는 요청이 정상 사용자인지 봇(Bot)인지 즉각적으로 판별하기 어렵습니다. TCP 연결을 맺는 과정이나 HTTP 요청을 처리하는 데 서버는 큰 자원을 소모하지만, 공격자는 쓰레기 패킷을 보내기만 하면 되므로 ‘비대칭적인 자원 소모’가 발생합니다.
스크러빙 센터(Scrubbing Center)와 CDN 도입
실제 서버(Origin Server)의 IP를 숨기고, 앞단에 거대한 대역폭을 가진 클라우드 방어막(e.g., Cloudflare, AWS Shield)을 배치합니다. 이 방어막은 전 세계에 분산된 엣지(Edge) 로케이션에서 트래픽을 흡수한 뒤, 더러운 공격 트래픽(Scrub)은 버리고 깨끗한 정상 트래픽만 내부 서버로 전달합니다.
막대한 인프라 유지 비용이 발생합니다. 또한, 모든 트래픽이 방어막을 한 번 거쳐야 하므로 미세한 네트워크 지연(Latency) 이 추가될 수 있습니다.
신원과 신뢰를 속이는 Spoofing과 MitM
네트워크 장비들이 서로의 신원을 엄격하게 검증하지 않는다는 점을 파고드는 공격입니다.
Spoofing (스푸핑, 위장)
자신의 신분을 속이는 모든 행위를 통칭합니다.
- ARP Spoofing (L2 계층) : 로컬 네트워크(LAN) 내에서 발생합니다. 해커가 자신의 MAC 주소를 라우터(공유기)의 MAC 주소인 것처럼 속여, 같은 네트워크에 있는 희생자의 모든 트래픽이 해커를 거쳐 가도록 만듭니다.
- IP Spoofing (L3 계층) : 패킷의 ‘출발지 IP 주소’를 조작하여 정상적인 내부 사용자가 보낸 것처럼 방화벽을 통과하거나, 공격의 진원지를 숨기는 기법입니다.
Ingress / Egress Filtering
라우터나 방화벽에서 패킷의 출발지 IP를 검사합니다. 예를 들어, 외부에서 들어오는 트래픽(Ingress)의 출발지 IP가 우리 사내망 IP 대역으로 찍혀 있다면, 이는 100% 조작된(Spoofed) 패킷이므로 즉시 폐기(Drop)합니다.
MitM (Man-in-the-Middle, 중간자 공격)
스푸핑 등을 통해 통신하는 두 당사자(예: 클라이언트와 서버) 사이에 몰래 끼어들어 트래픽을 도청하거나 조작하는 공격입니다.
양측은 서로 직접 통신하고 있다고 굳게 믿지만, 실제로는 해커가 중간에서 데이터를 받아 양쪽으로 릴레이 해주고 있는 상황입니다. 앞서 우리가 배운 TLS/SSL(HTTPS) 이 MitM 공격을 무력화하기 위해 ‘인증서’를 도입한 대표적인 방어책입니다.
전 구간 HTTPS 적용 및 HSTS
TLS/SSL을 적용하여 중간에서 패킷을 가로채도 읽을 수 없게 암호화합니다.
HSTS (HTTP Strict Transport Security) : 사용자가 실수로
http://로 접속하려 해도, 브라우저가 강제로https://로만 통신하도록 서버가 지시하는 보안 헤더입니다. 해커가 중간에서 HTTP 통신으로 다운그레이드시키는 공격(SSL Stripping)을 막아냅니다.
로직과 데이터를 파괴하는 웹 애플리케이션 공격 (L7)
방화벽(L4)을 무사히 통과한 정상적인 HTTP 트래픽 안에 악의적인 코드를 숨겨 서버나 클라이언트를 공격합니다. 웹 방화벽(WAF)이 막아야 하는 주 타겟입니다.
SQL Injection (SQLi)
웹 브라우저의 입력 창(예: 로그인 폼, 검색 창)에 일반적인 텍스트 대신 admin' OR '1'='1 같은 데이터베이스 쿼리 조작 문구를 주입(Injection)합니다.
개발자가 사용자의 입력을 검증 없이 동적 SQL 쿼리 문자열에 그대로 결합할 때 발생합니다. 시스템이 ‘데이터(Data)’와 ‘명령어(Code)’를 구분하지 못하고 입력값을 실행해 버리는 치명적인 설계 결함입니다.
Prepared Statements
과거에는 사용자의 입력을 문자열(String)로 이어 붙여 SQL 쿼리를 만들었습니다(예:
SELECT * FROM users WHERE id = '+ 입력값 +').현대에는 Prepared Statements(파라미터화된 쿼리) 를 사용합니다. 데이터베이스 엔진에 “내가 이런 뼈대의 쿼리를 실행할 건데, 나중에 들어올 값은 오직 ‘데이터’로만 취급해 줘”라고 미리 준비시킵니다(예:
SELECT * FROM users WHERE id = ?). 이렇게 하면 해커가1 OR 1=1이라는 ‘명령어’를 주입해도, DB는 이를 단순한 문자열 ‘데이터’로만 인식하여 공격이 무력화됩니다.
XSS (Cross-Site Scripting)
공격자가 게시판 등에 악의적인 자바스크립트 코드를 심어놓습니다. 일반 사용자가 그 게시글을 읽는 순간, 사용자 브라우저에서 그 코드가 실행되어 세션 쿠키나 인증 토큰을 해커에게 몰래 전송합니다.
웹 브라우저는 서버에서 내려준 코드를 ‘100% 신뢰’하고 무조건 실행하도록 설계되어 있습니다. 서버가 사용자 입력값을 출력할 때 위험한 문자(예: <script>)를 이스케이프(Escape) 처리하지 않으면 브라우저가 속아 넘어갑니다.
출력값 인코딩과 CSP
Output Encoding : 사용자가 입력한 내용을 화면에 보여줄 때, 브라우저가 코드로 인식할 수 있는 특수문자(
<,>,&,")를 HTML 엔티티(<,>등)로 치환(Escape)합니다. 스크립트가 실행되지 않고 단순 글자로 출력되게 합니다.CSP (Content Security Policy): 서버가 HTTP 헤더를 통해 브라우저에게 “우리 사이트에서는 내가 허락한 도메인(예: 우리 서버)에서 가져온 자바스크립트만 실행해!”라고 백리스트/화이트리스트 규칙을 선언하는 강력한 방어책입니다.
CSP를 너무 빡빡하게 설정하면 정상적인 서드파티 스크립트(구글 애널리틱스, 결제 모듈 등)까지 차단되어 서비스가 망가질 수 있습니다. 도입 시 꼼꼼한 테스트가 필요합니다.
TCP 3-Way Handshake의 맹점을 노린 SYN Flooding
수많은 DDoS 공격 기법 중, 대표적인 공격이 바로 TCP SYN Flooding입니다.
- 정상적인 TCP 연결은 SYN $\rightarrow$ SYN-ACK $\rightarrow$ ACK 의 3단계(3-Way Handshake)를 거칩니다.
- 이때 서버는 클라이언트로부터 첫 번째
SYN을 받으면, 연결을 준비하기 위해 메모리의 ‘백로그 큐(Backlog Queue)’ 라는 공간에 클라이언트 정보를 잠시 저장하고SYN-ACK를 보냅니다. - 해커는 존재하지 않는 가짜 IP(IP Spoofing)로 수만 개의
SYN패킷만 서버에 마구 던집니다. - 서버는 정직하게 응답(
SYN-ACK)을 보내고 마지막ACK가 오기를 애타게 기다리며 백로그 큐의 자원을 계속 쥐고 있습니다. - 결국 백로그 큐가 가득 차버려(Overflow), 정상 사용자가 보내는 새로운 연결 요청(SYN)을 서버가 더 이상 받을 수 없게 되어 서비스가 다운됩니다.
SYN Cookie 적용
서버가 SYN 요청을 받았을 때 백로그 큐(메모리)에 상태를 저장하는 대신, 클라이언트의 정보와 암호화된 해시값을 조합하여 특별한 쿠키(Cookie)를 만들어 SYN-ACK 응답으로 보냅니다. 클라이언트가 정상적으로 이 쿠키를 다시 돌려주면 그때서야 메모리를 할당합니다. 자원 고갈을 원천 차단하는 CS적 기법입니다.
네트워크 용어 정리
네트워크 터널링과 클라이언트 대리인
이 두 기술은 주로 클라이언트(사용자) 측의 보안과 익명성을 위해 사용됩니다.
VPN (Virtual Private Network, 가상 사설망)
공중망(인터넷)을 마치 사내 전용선(LAN)처럼 안전하게 사용할 수 있도록, 사용자와 네트워크 사이에 암호화된 가상의 터널을 뚫어주는 기술입니다.
카페의 공용 와이파이를 쓰더라도 패킷이 암호화되어 해커가 엿볼 수 없습니다(기밀성).
- 재택근무자가 외부에서 사내 인트라넷(내부 IP)에 안전하게 접속하기 위해 필수적으로 사용합니다.
프록시 서버 (Proxy Server / Forward Proxy)
클라이언트를 대신하여 인터넷(외부 서버)에 요청을 전달해 주는 ‘중계서버’ 입니다.
(클라이언트 $\rightarrow$ 프록시 $\rightarrow$ 인터넷)
- 익명성 보장 : 외부 서버는 요청이 실제 누구(어떤 IP)로부터 왔는지 모르고, 오직 프록시 서버의 IP만 보게 됩니다.
- 아웃바운드 통제 및 캐싱 : 내망에서 직원들이 특정 유해 사이트에 접속하지 못하도록 막거나(필터링), 자주 가는 사이트의 데이터를 미리 저장(캐싱)해 두어 대역폭을 절약합니다.
서버 측 방어와 확장성 아키텍처
현대의 웹 서비스 백엔드에 반드시 들어가는 핵심 컴포넌트들입니다.
리버스 프록시 (Reverse Proxy)
포워드 프록시와 반대로, 서버들을 대신하여 외부 클라이언트의 요청을 먼저 받아주는 역할입니다.
(인터넷 $\rightarrow$ 리버스 프록시 $\rightarrow$ 내부 서버)
- 보안(Origin IP 은닉) : 외부 해커는 실제 백엔드 서버의 IP를 알 수 없으므로 직접 공격이 불가능해집니다.
- SSL Termination : 무거운 HTTPS 복호화 작업을 백엔드 서버 대신 리버스 프록시(Nginx 등)가 앞단에서 전담 처리하여 내부 서버의 CPU 부담을 줄여줍니다.
로드 밸런서 (Load Balancer, LB)
들어오는 네트워크 트래픽을 여러 대의 서버로 골고루 분산시켜 주는(Traffic Routing) 장비나 소프트웨어입니다.
OSI 7계층 중 어디서 동작하느냐에 따라 나뉩니다.
- L4 로드 밸런서 : IP와 포트(TCP/UDP)만 보고 빠르고 단순하게 트래픽을 나눕니다.
- L7 로드 밸런서 : HTTP 헤더, URL 경로 등 애플리케이션 데이터를 분석하여 정교하게 라우팅합니다. (
/api트래픽은 API 서버로,/images트래픽은 이미지 서버로)
트래픽 폭주로 인한 단일 서버의 다운(SPOF)을 막고, 서버를 무한히 수평 확장(Scale-out)할 수 있는 가용성(Availability) 의 핵심입니다.
글로벌 성능 최적화와 브라우저 보안
CDN (Content Delivery Network)
이미지, 동영상, CSS, JS 같은 정적 리소스를 전 세계 곳곳에 흩어진 엣지(Edge) 서버들에 미리 복사(캐싱)해 두는 네트워크 시스템입니다.
- 지연 시간 극복 : 한국에 있는 서버의 이미지를 미국 사용자가 요청하면 태평양 해저 케이블을 건너야 하므로 느립니다(높은 RTT). CDN을 쓰면 미국 사용자는 가장 가까운 뉴욕의 CDN 서버에서 이미지를 바로 다운받으므로 체감 속도가 비약적으로 상승합니다. (트래픽 부하 분산 및 DDoS 방어 효과는 덤입니다.)
CORS (Cross-Origin Resource Sharing, 교차 출처 리소스 공유)
웹 브라우저의 핵심 보안 정책인 SOP(Same-Origin Policy, 동일 출처 정책) 를 안전하게 우회하여, 서로 다른 도메인 간에 API 데이터를 주고받을 수 있게 해주는 HTTP 헤더 기반의 메커니즘입니다.
CORS는 서버를 보호하는 것이 아니라 ‘사용자의 브라우저’를 보호하는 정책입니다. a.com이라는 악성 사이트에 접속했는데, 그 사이트의 자바스크립트가 사용자의 권한을 이용해 몰래 bank.com으로 돈을 송금하는 API를 호출하는 것을 브라우저 단에서 컷(Cut)하는 것입니다.
서버 개발자가 HTTP 응답 헤더에 Access-Control-Allow-Origin: https://안전한-프론트엔드.com 이라고 명시해 주어야만 브라우저가 안심하고 데이터를 프론트엔드 코드에 넘겨줍니다.
OSI 7계층과 인프라 장비의 매핑
- L3 (네트워크 계층 - IP 기반) : VPN (IP 패킷 자체를 암호화하여 터널링)
- L4 (전송 계층 - TCP/UDP 포트 기반) : L4 로드 밸런서, 일반 네트워크 방화벽
- L7 (애플리케이션 계층 - HTTP 데이터 기반) : 리버스 프록시, L7 로드 밸런서, CDN, WAF (모두 HTTP 헤더나 URL, 쿠키를 읽고 처리함)
- 참고 : CORS는 네트워크 장비의 개념이 아니라, L7(HTTP) 통신 위에서 동작하는 ‘브라우저와 서버 간의 보안 약속(Protocol)’ 입니다.
서비스 아키텍처를 설계할 때, 사용자의 요청은 브라우저의 CORS 정책을 통과하여, 가장 가까운 CDN을 거치거나 인터넷망을 타고 백엔드로 진입합니다. 백엔드 앞단에서는 로드 밸런서와 리버스 프록시가 트래픽을 분산하고 보안을 챙기며, 사내 직원은 VPN이나 포워드 프록시를 통해 내부망에 안전하게 접근합니다. 이들은 각자의 계층에서 가용성, 성능, 기밀성을 담당하는 필수 인프라 요소들입니다.