카테고리 없음

네트워크 보안 ( 방화벽, IDS/IPS, WAF)

1-yuna 2025. 3. 3. 19:16

네트워크 보안의 중요성 

웹 애플리케이션을 개발하고 서버를 운영하다 보면, 정상적인 요청뿐만 아니라 비정상적인 트래픽이나 악의적인 접근 시도가 발생할 수 있다. 이러한 위협을 방치하면 서비스의 안정성이 저하되고, 심각할 경우 데이터 유출이나 시스템 마비까지 이어질 수 있다. 따라서 효과적인 네트워크 보안 전략을 수립하는 것은 필수적이다. 

이를 위해 방화벽, 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS), 웹 애플리케이션 방화벽(WAF)과 같은 보안 기술이 필요하다. 

 


방화벽 

방화벽은 네트워크 보안의 가장 기본적인 장치로, 내부 네트워크와 외부 네트워크 사이에서 트래픽을 제어하는 역할을 한다. 

예를 들어, 회사 내부 직원들은 인터넷을 자유롭게 사용할 수 있지만, 보안상 외부 사람이 회사 내부 서버에 직접 접근하는 것은 막아야 한다. 이럴 때 방화벽을 설정하면, 내부 직원들의 인터넷 접속은 허용하면서도 외부에서 내부로 들어오려는 요청은 차단할 수 있다.

 

즉, 미리 정의된 보안 규칙에 따라 허용된 트래픽만 통과시키고, 비정상적이거나 허가되지 않은 트래픽은 차단한다. 

* 내부 네트워크: 기업, 조직 또는 개인이 운영하는 네트워크로, 사설 IP를 사용한다. 인터넷에서 직접 접근할 수 없고, 보안이 중요한 영역이다. 

* 외부 네트워크: 주로 인터넷을 의미하며, 내부 네트워크에서 벗어난 모든 네트워크를 포함한다.

 


방화벽 기본 기능 

1️⃣ 접근통제

특정 IP 주소, 포트 번호, 프로토콜 등을 기반으로 필터링 할 수 있다. 

예를 들어, SSH(포트 22) 접근을 특정 IP에서만 허용하도록 설정할 수 있다. 

 

2️⃣ 로깅 및 모니터링 

방화벽을 통해 허용되거나 차단된 트래픽 정보를 기록(Log)하고 분석할 수 있다. 

예를 들어,한 IP에서 짧은 시간 동안 여러 번 로그인 시도를 하면 차단하고 로그를 남길 수 있다. 

 

3️⃣ NAT(Network Address Translation) 기능 지원

내부 네트워크의 사설 IP를 공인 IP로 변환하여 외부에 노출되지 않도록 보호한다. 

예를 들어, 회사 내부의 여러 컴퓨터(사설 IP)가 방화벽을 통해 공인 IP 하나로 인터넷에 접속하도록 설정할 수 있다.

→ 프록시 자체가 내부 서버의 ip주소를 외부에 노출시키지 않기 때문에 nat의 역할을 대신 한다. 

 


방화벽 종류 

1️⃣ 패킷 필터링 방화벽 

네트워크 계층(L3), 전송계층(L4)에서 동작하며, 패킷의 출발지/목적지 IP, 포트 번호를 기반으로 필터링 한다. 

 

🔷 예시 

출발지 IP 192.168.1.10에서 오는 패킷 차단

목적지 포트 22(SSH)로 가는 패킷 차단

 

🔷 방어하는 공격 종류

1. IP 스푸핑 공격 일부방지

외부에서 내부로 들어오는 트래픽 중 내부 네트워크에서 사용할 수 없는 출발지 IP를 가진 패킷을 차단할 수 있다. 

그러나 방화벽이 개별 패킷만 보고 트래픽의 연속적인 흐름(세션)을 고려하지 않기 때문에 IP가 위조된 패킷을 식별하는 데 한계가 있다.

즉, 출발지 IP를 위조해서 정상적인 요청처럼 보이게 만들면 방화벽을 속일 수 있다. 

* IP 스푸핑 공격: 출발지 IP를 속여 접근하는 공격 

 

 

2. 포트 스캔 공격 일부 방지

외부에서 내부 네트워크로 들어오는 트래픽 중 특정 포트 범위를 반복적으로 스캔하는 패킷을 감지하고 차단할 수 있다.

그러나 패킷 필터링 방화벽은 개별 패킷 단위로만 검사하기 때문에, 공격자가 느린 속도로 분산된 방식으로 스캔하는 경우 탐지하기 어렵다.

즉, 공격자가 여러 출발지 IP를 사용하거나, 일정 시간 간격을 두고 천천히 스캔하면 방화벽을 속일 수 있다. 

* 포트 스캔 공격: 공격자가 시스템에서 열려 있는 포트를 찾기 위해 여러 포트에 순차적으로 접속을 시도하는 공격

 

 

따라서, 패킷 필터링 방화벽은 개별 패킷 단위로만 검사하기 때문에 트래픽의 연속성을 확인하지 못하고, 공격자가 우회 기법을 사용하면 탐지하는 데 한계가 있다. 이러한 한계를 보완하기 위해 세션 정보를 유지하고 패킷의 흐름을 분석하는 상태추적 기능이 필요하게 된다.

 


 

2️⃣ 상태 추적 방화벽 

네트워크 계층(L3), 전송계층(L4)에서 동작하며, 패킷 필터링 방화벽보다 더 발전된 방식이다.

세션 정보(연결 상태)를 유지하여, 허용된 연결의 응답 패킷은 자동으로 허용한다. 또한, 연결 상태를 추적하여 이상한 패킷을 차단할 수 있다. 

 

🔷 예시 

사용자가 웹사이트에 접속(클라이언트 → 서버)하면, 그 응답(서버 → 클라이언트) 패킷은 자동 허용해준다. 

 

🔷 방어하는 공격 종류

1. IP 스푸핑 방지

세션 기반을 사용하여, 연결의 흐름을 추적하고 이전 패킷과 일치하는지 확인하기 때문에, 중간에 갑자기 충발지 IP가 바뀐다면 비정상적인 패킷 흐름이라 감지하고 차단할 수 있다

 

2. 포트 스캔 방지

세션 기반을 사용하고 있기 때문에, 공격자가 느리게, 분산된 방식으로 포트를 스캔한다 하더라도 비정상적인 세션 흐름을 감지하여 공격을 차단할 수 있다

 

3. SYN Flood (DDoS 공격의 일종) 방지

공격자가 많은 SYN을 보내더라도 3-way handshake를 완료하지 못한 상태라면, 공격으로 받아들이고 차단할 수 있다.

* SYN Flood: 많은 SYN 요청을 보내 서버가 정상적인 연결을 할 수 없게 만든다. 

 

4. 비정상적인 TCP 연결 시도 방지

FIN이 예상치 않은 순서로 오거나 정상적인 TCP 연결 흐름을 따르지 않는다면 비정상적인 연결로 감지하여 차단한다.

 


 

3️⃣ 애플리케이션 게이트웨이 

애플리케이션 계층(L7)에서 동작하며, 프록시 서버는 3,4,7 계층 모두 필터링이 가능하다. 

그러나 3, 4 계층에서는 IP와 포트 필터링 같은 간단한 필터링만 가능하며, 이 방식은 세션 흐름이나 상태 추적에 한계가 있을 수 있다. 또한 7계층에서 모든 처리를 하기에 성능적인 한계가 있을 수 있다. 따라서 애플리케이션 게이트웨이는 주로 애플리케이션 계층에서 발생하는 공격에 강점을 가진다.

 

🔷 예시

server {
    listen 80;
    server_name example.com;

    # 3계층- IP 필터링: 특정 네트워크만 허용
    allow 192.168.1.0/24;
    deny all; # 그 외 모든 IP 차단

    # User-Agent 필터링: curl 포함된 요청 차단 
    if ($http_user_agent ~* "curl") {
        return 403;
    }

    # 백엔드 서버로 프록시 요청 전달
    location / {
        proxy_pass http://backend_server;
    }
}

 

🔷 방어하는 공격 종류

1. SQL Injection 방지
애플리케이션 게이트웨이는 입력값을 필터링하여, 악성 SQL 코드가 데이터베이스 쿼리로 전송되지 않도록 차단한다. 예를 들어, 사용자 입력에서 특수 문자를 감지하고 이를 변환하거나 제거하여 SQL 쿼리로 처리되지 않도록한다.  

* SQL Injection: 사용자가 입력하는 데이터를 SQL 쿼리로 직접 실행시켜 데이터베이스를 조작하거나 정보 유출을 일으키는 공격

 

2. XSS (Cross-Site Scripting) 방지
애플리케이션 게이트웨이는 HTML, JavaScript 등의 코드가 사용자 입력을 통해 삽입되지 않도록 필터링한다. 예를 들어, 사용자 입력값에서 <script>, <img>, <iframe> 등 HTML 태그와 스크립트 관련 태그를 제거하거나, 이를 안전한 문자로 변환하여 악성 스크립트가 실행되지 않도록 한다. 

*XSS: 공격자가 웹 애플리케이션에 악성 스크립트를 삽입하는 공격

 

3. 악성 HTTP 요청 차단
애플리케이션 게이트웨이는 특정 User-Agent나 의심스러운 HTTP 헤더가 포함된 요청을 감지하여 차단한다. 이를 통해 비정상적인 요청, 예를 들어 웹 스크래핑 툴이나 자동화된 공격 도구에 의한 공격을 막을 수 있다.

 


방화벽의 한계 

방화벽은 기본적으로 정해진 규칙에 따라 트래픽을 필터링한다. 하지만 이 규칙이 불완전하거나 잘못 설정되었을 경우, 방화벽은 악성 트래픽을 허용할 수 있다. 또한, 방화벽은 IP 주소나 포트 번호, 프로토콜 기반으로 필터링을 하기 때문에, 정해진 패턴에 맞춰서만 필터링할 수 있다.

 

따라서 비정상적인 활동이나 공격 패턴을 실시간으로 감지하는 보안이 필요하다. 이것이 바로 IDS와 IPS이다.


IDS (침입 탐지 시스템)

공격 패턴과 정상적인 트래픽 패턴을 학습시켜, 악의적인 접근을 탐지하고 이를 관리자에게 경고하는 시스템이다. 


IDS 탐지 방식의 종류 

1️⃣ 시그니터 기반 탐지 ( 패턴기반 탐지) 

공격 패턴을 미리 데이터베이스에 저장하고, 네트워크 트래픽을 실시간으로 모니터링하면서 이 패턴과 일치하는 트래픽을 탐지한다. 

예를들어, DDoS 공격이나 SQL 인젝션과 같은 알려진 공격 패턴을 실시간으로 감지한다. 

 

장점: 빠르고 정확하게 알려진 공격을 탐지할 수 있다.

단점: 새로운 공격이나 변형된 공격에는 반응하지 못할 수 있다. 

 

 

2️⃣ 비헤이비어 기반 탐지 (이상 탐지) 

정상적인 트래픽의 패턴을 학습하고, 이를 기준으로 비정상적인 트래픽을 식별하여 경고한다.

 

장점: 새로운 공격이나 변형된 공격도 탐지할 수 있다. 

단점: 정상적인 트래픽의 변화가 잘못 참지될 수 있는 오탐 혹은 과탐이 발생 가능성이 있다. 

* 오탐: 보안 시스템에서 정상적인 트래픽이나 행동을 공격으로 잘못 인식하는 경우

* 과탐: 공격이 아닌 활동을 공격으로 잘못 탐지하는 경우 

ex. 실제로 공격이 발생하지 않았지만 이를 공격으로 잘못 감지하는 것

 

 

3️⃣ 호스트기반 IDS( HIDS) 

개별 시스템(서버, PC 등)에서 실행되어 해당 시스템의 내부 활동을 모니터링하고 분석하는 시스템이다. HIDS는 시스템의 로그 파일, 프로세스, 파일 시스템, 메모리 등의 변화를 감지하여 악의적인 활동을 탐지한다. 

 

장점: 시스템 내부에서 발생하는 공격을 탐지할 수 있어, 파일 변조 등의 활동을 실시간으로 감지할 수 있다. 

단점: 호스트 내에서 동작하므로 시스템 자원을 많이 사용하며, 리소스가 제한적인 경우 성능 저하를 유발할 수 있다. 

 

 

4️⃣ 네트워크 기반 IDS( NIDS) 

네트워크를 통해 흐르는 모든 트래픽을 실시간으로 분석하고, 네트워크 상의 공격을 탐지하는 시스템이다. NIDS는 네트워크 장비나 방화벽에 연결되어, 네트워크 트래픽을 분석하여 공격을 탐지한다. 

장점: 네트워크 상의 모든 트래픽을 모니터링하여, 넓은 범위에서 발생하는 공격을 감지할 수 있다.

단점: 암호화된 트래픽에 대해서는 정상적인 흐름을 알기 어렵기 때문에, 암호화된 데이터를 분석하는 데 한계가 있다. 

 


IPS 

IDS와 비슷하지만, 공격을 탐지할 뿐만 아니라 실시간으로 공격을 차단할 수 있다. 

 

IPS 특징 

1️⃣ 실시간 모니터링

IDS와 동일하게, 패턴 기반 탐지, 이상 탐지를 이용하여 공격을 찾아낼 수 있다.

 

2️⃣ 실시간 공격 차단 

IPS는 네트워크 트래픽을 실시간으로 모니터링하고 분석하여 악성 트래픽을 탐지한 후 즉시 차단한다. 공격이 발생하면 바로 그 트래픽을 차단함으로써 침입을 미리 예방한다. 

 

IPS는 탐지한 공격에 대해 즉시 반응할 수 있다. 공격이 탐지되면 패킷을 차단하거나, 세션을 종료하는 등의 자동화된 조치를 취할 수 있다. 

1. 자동 차단: 악성 트래픽을 실시간으로 차단한다. 

2. 세션 종료: 공격이 발생한 세션을 종료시키고, 더 이상의 피해를 방지한다. 

 

🤔 그렇다면 IDS는 사용안하고 IPS만 사용하나? 

IPS도 탐지 기능이 있는데, IDS는 사용할 필요가 없지 않은가? 

IDS는 침입을 탐지하고 경고만 보내는 역할을 하고, IPS는 탐지된 공격을 즉시 차단하는 역할을 한다. 
즉, 보안 담당자가 공격을 탐지하고 경고를 받아 분석 후 대응을 원한다면 IDS와 IPS를 사용하고,
실시간 차단이 중요하다면 IPS만 사용하면 된다. 


 


WAF

웹 애플리케이션을 보호하기 위한 방화벽으로, 웹 애플리케이션 계층에서 발생할 수 있는 공격을 방어한다. WAF는 HTTP/HTTPS 트래픽을 검사하여 SQL 인젝션, 크로스사이트 스크립팅(XSS), 파일 포함 공격 등 웹 애플리케이션 공격을 방어한다. 

 

WAF가 방어하는 공격 종류 

1️⃣ SQL 인젝션

WAF는 입력값에 포함된 악성 SQL 쿼리 문법(예: SELECT, UNION, DROP, OR, --)을 검사한다. 이를 통해 의도된 악성 SQL 쿼리가 데이터베이스로 전달되기 전에 차단한다. 

 

2️⃣ 크로스 사이트 스크립팅(XSS)

WAF는 HTML 태그나 JavaScript 코드가 포함된 요청을 차단한다. <script>, javascript:, onload=, onclick= 같은 HTML 이벤트 처리기나 스크립트 코드가 포함된 요청을 필터링하여 차단한다. 

 

3️⃣ 크로스 사이트 요청 위조(CSRF)

WAF는 CSRF 공격을 방지하기 위해 요청에 포함된 CSRF 토큰을 확인한다. 정상적인 요청은 유효한 CSRF 토큰을 포함해야 하므로, 토큰이 없거나 잘못된 요청을 차단한다. 

 

4️⃣ 파일 업로드 취약점

WAF는 업로드된 파일의 확장자를 검증하여, 실행 가능한 파일(예: .php, .exe)이나 위험한 파일 형식이 업로드되지 않도록 차단한다. 

 

5️⃣ 서비스 거부(DoS/DDoS)

WAF는 비정상적인 트래픽 패턴을 감지하고, 초당 요청 수가 일정 한도를 초과하는 IP를 차단하여 DoS/DDoS 공격을 방지한다. 

 

6️⃣ 비정상적인 URL 접근

WAF는 URL에 포함된 악성 패턴(예: ../, ..//)을 탐지하고 차단한다. 이를 통해 시스템 파일에 접근하려는 경로를 막는다. 

 


 

🤔 방화벽 있는데 WAF가 추가로 나온 이유? 

방화벽 
수동적인 보안 설정: 애플리케이션 게이트웨이는 개발자가 직접 설정하고 관리해야 하는 보안 장치이다.예를 들어, 특정 SQL 인젝션 패턴이나 XSS 공격을 차단하려면, 개발자가 직접 규칙을 작성하거나 로직을 코드로 구현해야 한다.즉, 개발자가 코드나 규칙을 수동으로 작성해서 애플리케이션 흐름에 맞게 보안을 적용해야 한다. 

WAF
자동화된 보안: WAF는 미리 정의된 규칙을 기반으로 웹 애플리케이션을 자동으로 보호하는 보안 장치이다.SQL 인젝션, XSS, CSRF 등 일반적인 웹 애플리케이션 공격 패턴을 자동으로 탐지하고 차단한다.WAF는 특정 공격에 대한 규칙이 내장되어 있어, 추가적인 개발 없이도 자동으로 웹 공격을 차단한다.