정보보안기사

[정보보안기사(실기)] SECTION 13 보안 장비 운영 - Snort, iptables

tnvori 2026. 6. 13. 18:47

디어다온의 푸딩 빙수. 탱글탱글함

1. Snort 침입 탐지 시스템

  1. 개요
    • 1998년 마틴 로시가 개발한 오픈소스 기반 네트워크 침입 탐지 시스템(NIDS)
    • 주요 기능
      • 스니퍼 모드 — 네트워크에서 수집한 패킷을 실시간으로 출력
      • 로거 모드 — 수집한 패킷을 파일 형태로 저장
      • 침입 탐지/방지 모드 — 네트워크 트래픽을 분석하여 공격 패턴을 탐지하며 구성 환경에 따라 패킷 차단 기능 수행
  2. 스노트 규칙 설정
    1. 개요
      • 룰 헤더
        • 검사 대상 패킷과 규칙이 매칭되었을 때 수행할 작업을 정의하는 부분
        • 규칙의 기본 구조를 정의하며 액션, 프로토콜, IP 주소, 포트 번호, 방향 성 등 지정
      • 룰 옵션
        • 패킷을 검사하기 위한 세부 조건을 정의하는 부분
        • 메시지 출력 설정, 콘텐츠 검사, TCP 검사 등 다양한 탐지 조건 지정
    2. 룰 헤더 설정
      • 액션 — 패킷이 매칭되었을 때 수행할 처리 방식
        • alert — 경고를 발생시키고 로그에 남김
        • log
        • pass — 패킷을 허용하고 해당 패킷에 대해 이후 다른 규칙을 적용하지 않음
        • activate — 경고를 발생시키고 대응하는 dynamic 규칙 활성화
        • dynamic — log 규칙과 동일하게 동작
        • drop — 패킷을 차단하고 로그에 남김
        • reject — 차단하고 로그에 남긴 후, TCP Reset 또는 ICMP 오류 메시지 전송
        • sdrop — 패킷을 차단하고, 로그를 남기지 않음
        • drop, rejcet, sdrop과 같은 패킷 차단 기능을 수행하는 액션은 인라인 모드에서만 동작
      • 프로토콜 — TCP, UDP, ICMP, IP 등
      • IP 주소 — 리스트는 []로 묶음
      • 포트 번호
        • 범위는 콜론으로 표현
        • IP, ICMP처럼 포트 개념이 없는 프로토콜도 포트 번호를 생략할 수 없고, 일반적으로 any 지정
      • 방향 지시자
        • 단방향은 오른쪽(→)만 사용
        • 양방향 <>
      • 룰 헤더 단방향 설정 예시
      • 룰 헤더 양방향 설정 예시
      • /etc/snort/snort.conf에서 환경변수 지정
        • ipvar — ip 주소/대역
        • portvar — 포트 번호/리스트
        • EXTERNAL_NET — 일반적으로 외부 네트워크의 IP 주소 지정
        • HOME_NET — 일반적으로 보호 대상 내부 네트워크 IP 주소 지정
    3. 룰 옵션 설정 — 일반 옵션 설정
      • msg — 이벤트 발생 시 출력할 메시지 지정
      • reference — 규칙과 관련된 외부 취약점 정보를 참조하기 위해 사용
      • sid
        • 규칙을 식별하기 위한 고유 ID 지정
        • 1 ~ 1,000,000 미만 — 스노트 개발팀 또는 공식 규정 제공자가 사용하는 예약 ID 범위
        • 1,000,000 이상 — 사용자 정의 규칙 작성 시 권장 ID
      • classtype
        • 규칙의 공격 유형 지정
        • 유형별로 기본 우선순위 결정되며 priority 옵션으로 변경 가능
      • priority
        • 규칙의 우선순위 지정
        • 1이 가장 높음
      • rev — 규칙의 수정 버전 번호. 변경될 때마다 1씩 증가
      • 규칙 작성 시 주의사항
        • 기본 형식 — <룰 헤더> <공백> <룰 옵션>
        • 룰 옵션 형식
          • 괄호 내부에 작성
          • 각 옵션은 세미콜론으로 끝남
          • 옵션명과 옵션값은 콜론으로 구분
          • 옵션값이 문자열인 경우 큰따옴표 사용
    4. 룰 옵션 설정 — 페이로드 > 탐지 및 범위 관련 옵션
      • content
        • 페이로드에서 검사할 패턴 지정
        • 큰따옴표 사이에 텍스트 또는 바이너리 형식으로 지정 가능
        • 바이너리 형식 — 패턴을 파이프 기호 사이에 16진수로 지정하며 일반적으로 가독성을 위해 바이트 단위로 공백 구분자 사용
        • 문자열 내에 예약문자(;, , “ 등)가 포함되어 있으면 역슬래시를 사용하여 이스케이프 처리
      • offset
        • 페이로드에서 패턴 검사를 시작할 위치를 지정
        • 페이로드의 첫 번째 바이트는 0번 위치부터 시작하며, offset을 지정하지 않으면 기본값은 0
      • depth — offset부터 몇 바이트 범위까지 검사할지 지정
      • distance — 이전 content 패턴이 매칭된 위치 이후 몇 바이트 떨어진 위치에서 다음 패턴 검사를 시작할지 지정
      • within — distance부터 몇 바이트 범위까지 패턴을 검사할지
      • nocase — 패턴 검사 시 대소문자를 구분하지 않게 하는 옵션
    5. 룰 옵션 설정 — 페이로드 > HTTP 관련 옵션
      • http_method
      • http_url
      • http_header
      • http_cookie
      • http_client_nody — HTTP 요청 메시지 바디부 검사
      • http_stat_code
      • http_stat_msg
    6. 룰 옵션 설정 — 이벤트 제한 관련 옵션
      • 개요
        • 특정 시간 동안 발생하는 이벤트 수를 제한하기 위한 옵션
        • HTTP GET Flooding 공격처럼 짧은 시간 동안 다량의 동일 이벤트가 발생하는 상황에서 과도한 alert 생성과 중복 탐지 방지
      • Threshold 옵션 형식 — threshold:type <limit|threshold|both>, track <by_src|by_dist>, count , seconds
      • type
        • limit — 매 s초 동안 최대 c번째 이벤트까지 액션 수행
        • threshold — 매 s초 동안 c번째 이벤트마다 액션 수행
        • both — 매 s초 동안 c번째 이벤트 시 한번 액션 수행
    • 스노트 규칙이 부정확할 때 발생 가능한 문제 — 오탐, 미탐, 성능
  3. 공격 패킷 탐지 실습
    1. FTP 익명 로그인 시도 탐지
      • 개요
      • 탐지 목적
        • anonymous 계정명은 대소문자를 구분하지 않으므로, 탐지 우회를 방지하기 위해 nocase 옵션 사용
        • 탐지 패턴 — USER anonymous
    2. FTP root 로그인 시도 탐지
      • 탐지 패턴 — USER root
    3. FTP 사전 대입 공격 또는 무차별 대입 공격 시도 탐지
  4. 비정상 패킷 탐지 실습
    1. 개요
      • 비정상 패킷 — RFC에 정의된 프로토콜 표준을 위반하는 패킷으로, 패킷 헤더에 정상적인 값이나 정의되지 않은 플래그를 사용하는 등 정상 동작 범위를 벗어난 패킷
      • 비정상 패킷 목적
        • 침입 탐지/방지 시스템 또는 침입 차단 시스템 우회
        • 비정상 패킷을 처리하는 과정에서 대상 시스템의 오류나 장애 유발
    2. 인터넷 구간의 사설 IP 패킷 탐지
      • 출발지 IP 주소가 사설 IP 주소로 되어있는 경우, 공격자에 의해 조작된 주소일 가능성 높음
      • 사설 IP 주소 대역
        • A 클래스 — 10.0.0.0/8
        • B 클래스 — 172.16.0.0/12
        • C 클래스 — 192.168.0.0/16
    3. 출발지와 목적지가 동일한 IP 패킷
    4. SYN/FIN 플래그 조합 비정상 TCP 패킷 탐지
      • 개요
        • 목적
          • 보안 장비를 우회하여 내부 시스템 접근
          • 스텔스 스캔 및 운영체제 식별 기법
      • 탐지 목적
        • TCP 플래그 — U(URG), A(ACK), P(PSH), R(RST), S(SYN), F(FIN)
      • 스노트 규칙 & alert 메시지
        • 출발지 포트가 80번인 경우 — 정상 클라이언트는 일반적으로 1024 이상을 출발지로 사용
    5. TCP FIN 스캔 탐지
    6. TCP NULL 스캔 탐지
    7. TCP Xmas 스캔 탐지 — flags:UPF

2. iptables 침입 차단 시스템

  1. 개요
    • 리눅스 커널에 내장된 netfilter 기능을 관리자가 설정하고 제어할 수 있도록 하는 도구
    • 리눅스 시스템에서 패킷 필터링 설정을 하기 위한 도구
    • netfilter — 리눅스 커널 내부에서 네트워크 패킷의 흐름을 제어하는 핵심 프레임워크
  2. 주요 기능
    • 패킷 필터링
    • 상태 검사
      • 방화벽을 통과하는 모든 프로토콜의 연결 상태를 일정 시간 추적하여 상태에 따라 패킷 필터링 정책 적용
      • 연결 추적 기능이라고도 표현
      • 상태 추적 테이블 또는 세션 테이블에 연결 상태 정보 저장 및 관리
    • NAT
    • 패킷 수준에서의 로깅
    • 확장 모듈을 이용한 기능 — TCP, UDP, ICMP, MAC 주소 등 다양한 조건 기반의 세부 필터링 기능을 추가로 제공
  3. 주요 용어 정리
    1. 테이블
      • ipatables에서 제공하는 기능을 분류하는 단위
      • 주요 테이블 — filter 테이블, nat 테이블, mangle 테이블, raw 테이블 등
    2. 체인
      • 네트워크 패킷이 통과하는 경로상에서 규칙을 적용하는 단위
      • 필터 테이블에서 사용되는 주요 기본 체인
        • INPUT 체인 — 외부에서 호스트를 목적지로 들어오은 패킷이 통과하는 체인
        • OURPUR 체인
        • FORWARD 체인
          • 호스트를 단순히 경유하는 패킷이 통과하는 체인
          • 호스트가 내위부 네트워크 사이에서 패킷 필터링 게이트웨이 역할
    3. 규칙
    4. 타깃
      • 설정한 규칙에 일치하는 패킷이 발생했을 때 적용할 동작
        • ACCEPT
        • DROP — 응답 없음
        • REJECT
        • LOG — 패킷 정보를 로그에 기록
      • 상단부터 순차적으로 검사하며 조건에 일치하는 규칙을 만나면 해당 타깃의 동작을 수행하고 이후 규칙 검사 중단
  4. 사용법
    1. 기본 형식 — iptables [Table 설정] [Chain 설정] [Rule 설정] [Target 설정]
    2. 테이블 설정
      • -t <테이블명>
      • 테이블을 명시하지 않으면 기본적으로 filter 테이블 적용
    3. 체인 설정
      • -[A | I | D | F] <체인명>
      • -A — 지정한 체인의 마지막 행에 규칙 추가
      • -I
        • 지정한 체인에 규칙 삽입
        • 삽입 위치를 지정할 수 있고, 생략 시 맨 앞에 규칙 삽입
      • -D — 지정한 체인에서 특정 규칙 삭제
      • -F
        • 지정한 체인의 모든 규칙을 한 번에 삭제
        • 체인을 지정하지 않으면 모든 체인의 규칙 삭제
    4. 규칙 설정
      • 프로토콜 지정
        • -p <프로토콜명>
        • 검사할 프로토콜 지정. 지정하지 않으면 모든 프로토콜 의미
      • 호스트 식별 IP 주소 지정
        • 출발지 — -s
        • 목적지 — -d
        • 지정하지 않으면 모든 목적지 IP 주소 의미
      • TCP/UDP 서비스 식별 포트 번호 지정
        • 출발지 포트 — —sport
        • 목적지 포트 — —dport
        • 지정하지 않으면 모든 포트 번호 의미
        • 포트 번호 대신 /etc/services에 정의된 서비스명으로 지정 가능
      • TCP 프로토콜 관련 제어 플래그 지정
        • SYN 제어 플래그 설정된 TCP 패킷 검사 — -p tcp —syn
        • 특정 제어 플래그가 설정된 TCP 패킷 검사
          • -p tcp —tcp-flags <검사 대상 플래그> <설정된 플래그>
          • 검사 대상 플래그에서 실제로 설정되어 있어야 하는 플래그 지정
      • ICMP 프로토콜 관련 메시지 타입 지정 — -p icmp —icmp-type
    5. 타깃 설정
      • -j <타깃명>
      • 설정한 규칙에 일치하는 패킷이 발생했을 때 적용할 동작 지정
    6. 기타 설정
      • 체인에 설정된 규칙 확인
        • -L <체인명> -n —line-numbers
        • -L — 지정한 체인에 등록된 규칙 목록 출력. 체인명을 생략하면 모든 체인의 규칙 목록 출력
        • -n — IP 주소와 포트 번호를 숫자 형식으로 출력
        • —nline-number — 각 규칙의 행 번호 출력
      • 체인에 기본 정책 설정하기
        • -P <체인명> <ACCEPT | DROP | REJECT>
        • 기본 정책 — 해당 체인의 모든 규칙에 일치하지 않는 패킷에 대해 마지막으로 적용되는 정책 의미
        • Negative — 기본 정책을 차단으로 설정하고 허용할 트래픽만 선택적으로 명시
        • Positive — 기본 정책을 허용으로 설정하고 차단할 트래픽만 선택적으로 명시
      • 정책 정보를 저장하고 복원하기
        • 정책 정보 저장 — iptables-save > <저장할 파일명>
        • 정책 정보 복원
          • iptables-restore < <복원할 파일명>
          • 기존 정책을 모두 초기화한 후 백업 파일 내용으로 교체
  5. 정책 설정 실습 — Stateless 정책
  6. 정책 설정 실습 — Stateful 정책
    1. 개요
      • 상태 설정 — iptables -m state —state <NEW | ESTABLISHED | RELATED | INVALID>
        • -m state — 상태 추적 모듈을 사용한다는 의미
        • —state — 지정한 패킷 상태에 해당하는 트래픽 선택
      • 상태 유형
        • NEW — 상태 추적 테이블에 새로운 연결 정보를 생성하는 패킷 상태
        • ESTABLISHED — 상태 추적 테이블에 이미 연결 정보가 있는 패킷 상태
        • RELATED — 상태 추적 테이블에 있는 기존 연결과 논리적으로 연관된 새로운 연결을 생성하는 패킷 상태
        • INVALID — 유효하지 않은 패킷 상태
      • 프로토콜별 연결 상태 추적
        • TCP
          • 호스트가 최초 SYN 패킷을 수신하면 상태 추적 테이블에 새로운 연결 정보가 등록되고 NEW 상태가 됨
          • 이후 같은 연결의 모든 TCP 패킷은 연결 종료 시까지 ESTABLISHED 상태로 관리됨
        • UDP
          • 논리적인 연결 상태를 유지하지 않음
          • 호스트가 최초 UDP 패킷을 수신하면 출발지/목적지 IP 주소 및 포트 번호를 기반으로 상태 추적 테이블에 임시 연결 정보가 등록되고 NEW 상태가 됨
          • 일정 시간 동안 동일한 연결의 UDP 응답 패킷은 ESTABLISHED 상태로 관리되며 해당 시간이 지나면 연결 정보는 자동으로 상태 추적 테이블에서 제거됨
  7. 정책 설정 실습 — 비정상 TCP 패킷 탐지 정책
  8. iptables 확장 모듈 활용
    1. 개요
      • 확장 모듈 — iptables의 기본 기능을 보완하여 패킷의 다양한 조건을 추가로 검사할 수 있게 하는 부가 모듈
    2. connlimit 모듈
      • 목적
        • 특정 IP 또는 네트워크의 동시 연결 수를 제한하기 위한 모듈
        • 클라이언트가 서버에 지속적으로 연결을 유지해 시스템 자원을 과도하게 사용하는 행위를 방지하거나 서비스별 클라이언트당 동시 연결 수를 제한할 때 사용
      • 모듈 설정
        • -m connlimit —conlimit-above N —conlimit-mask M
        • —conlimit-above N — 특정 IP 또는 네트워크의 동시 연결 수가 N개 초과 시 규칙 일치
        • —conlimit-mask M — 동시 연결 수를 계산할 때 적용할 네트워크 마스크 지정
    3. recent 모듈
      • 목적 — 특정 IP 또는 네트워크에서 일정 시간 내 반복적으로 접근하는 횟수를 기록하여 그 횟수에 따라 탐지 또는 차단하기 위한 모듈
      • 모듈 설정
        • iptables -m recent —name <이름> —set —update —seconds S —hitcount N
        • 접근 횟수 목록 관리 옵션
          • —name — 접근 횟수를 관리하는 목록 이름 지정
          • —set — 패킷의 출발지 IP를 지정한 목록에 등록
          • —update — 이미 모록에 등록된 IP가 있으면 접근 횟수와 시간 갱신
        • 일치 조건 옵션
          • —seconds S — hitcount N — 최근 S초 동안 N번 이상 접근했을 때 규칙 일치
    4. limit 모듈
      • 목적 — 특정 규칙의 일치 빈도수를 제한하기 위한 모듈
      • 모듈 설정 — iptables -m limit —limit <빈도수>