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

1. Snort 침입 탐지 시스템
- 개요
- 1998년 마틴 로시가 개발한 오픈소스 기반 네트워크 침입 탐지 시스템(NIDS)
- 주요 기능
- 스니퍼 모드 — 네트워크에서 수집한 패킷을 실시간으로 출력
- 로거 모드 — 수집한 패킷을 파일 형태로 저장
- 침입 탐지/방지 모드 — 네트워크 트래픽을 분석하여 공격 패턴을 탐지하며 구성 환경에 따라 패킷 차단 기능 수행
- 스노트 규칙 설정
- 개요
- 룰 헤더
- 검사 대상 패킷과 규칙이 매칭되었을 때 수행할 작업을 정의하는 부분
- 규칙의 기본 구조를 정의하며 액션, 프로토콜, IP 주소, 포트 번호, 방향 성 등 지정
- 룰 옵션
- 패킷을 검사하기 위한 세부 조건을 정의하는 부분
- 메시지 출력 설정, 콘텐츠 검사, TCP 검사 등 다양한 탐지 조건 지정
- 룰 헤더
- 룰 헤더 설정
- 액션 — 패킷이 매칭되었을 때 수행할 처리 방식
- 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 주소 지정
- 액션 — 패킷이 매칭되었을 때 수행할 처리 방식
- 룰 옵션 설정 — 일반 옵션 설정
- msg — 이벤트 발생 시 출력할 메시지 지정
- reference — 규칙과 관련된 외부 취약점 정보를 참조하기 위해 사용
- sid
- 규칙을 식별하기 위한 고유 ID 지정
- 1 ~ 1,000,000 미만 — 스노트 개발팀 또는 공식 규정 제공자가 사용하는 예약 ID 범위
- 1,000,000 이상 — 사용자 정의 규칙 작성 시 권장 ID
- classtype
- 규칙의 공격 유형 지정
- 유형별로 기본 우선순위 결정되며 priority 옵션으로 변경 가능
- priority
- 규칙의 우선순위 지정
- 1이 가장 높음
- rev — 규칙의 수정 버전 번호. 변경될 때마다 1씩 증가
- 규칙 작성 시 주의사항
- 기본 형식 — <룰 헤더> <공백> <룰 옵션>
- 룰 옵션 형식
- 괄호 내부에 작성
- 각 옵션은 세미콜론으로 끝남
- 옵션명과 옵션값은 콜론으로 구분
- 옵션값이 문자열인 경우 큰따옴표 사용
- 룰 옵션 설정 — 페이로드 > 탐지 및 범위 관련 옵션
- content
- 페이로드에서 검사할 패턴 지정
- 큰따옴표 사이에 텍스트 또는 바이너리 형식으로 지정 가능
- 바이너리 형식 — 패턴을 파이프 기호 사이에 16진수로 지정하며 일반적으로 가독성을 위해 바이트 단위로 공백 구분자 사용
- 문자열 내에 예약문자(;, , “ 등)가 포함되어 있으면 역슬래시를 사용하여 이스케이프 처리
- offset
- 페이로드에서 패턴 검사를 시작할 위치를 지정
- 페이로드의 첫 번째 바이트는 0번 위치부터 시작하며, offset을 지정하지 않으면 기본값은 0
- depth — offset부터 몇 바이트 범위까지 검사할지 지정
- distance — 이전 content 패턴이 매칭된 위치 이후 몇 바이트 떨어진 위치에서 다음 패턴 검사를 시작할지 지정
- within — distance부터 몇 바이트 범위까지 패턴을 검사할지
- nocase — 패턴 검사 시 대소문자를 구분하지 않게 하는 옵션
- content
- 룰 옵션 설정 — 페이로드 > HTTP 관련 옵션
- http_method
- http_url
- http_header
- http_cookie
- http_client_nody — HTTP 요청 메시지 바디부 검사
- http_stat_code
- http_stat_msg
- 룰 옵션 설정 — 이벤트 제한 관련 옵션
- 개요
- 특정 시간 동안 발생하는 이벤트 수를 제한하기 위한 옵션
- 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번째 이벤트 시 한번 액션 수행
- 개요
- 스노트 규칙이 부정확할 때 발생 가능한 문제 — 오탐, 미탐, 성능
- 개요
- 공격 패킷 탐지 실습
- FTP 익명 로그인 시도 탐지
- 개요
- 탐지 목적
- anonymous 계정명은 대소문자를 구분하지 않으므로, 탐지 우회를 방지하기 위해 nocase 옵션 사용
- 탐지 패턴 — USER anonymous
- FTP root 로그인 시도 탐지
- 탐지 패턴 — USER root
- FTP 사전 대입 공격 또는 무차별 대입 공격 시도 탐지
- FTP 익명 로그인 시도 탐지
- 비정상 패킷 탐지 실습
- 개요
- 비정상 패킷 — RFC에 정의된 프로토콜 표준을 위반하는 패킷으로, 패킷 헤더에 정상적인 값이나 정의되지 않은 플래그를 사용하는 등 정상 동작 범위를 벗어난 패킷
- 비정상 패킷 목적
- 침입 탐지/방지 시스템 또는 침입 차단 시스템 우회
- 비정상 패킷을 처리하는 과정에서 대상 시스템의 오류나 장애 유발
- 인터넷 구간의 사설 IP 패킷 탐지
- 출발지 IP 주소가 사설 IP 주소로 되어있는 경우, 공격자에 의해 조작된 주소일 가능성 높음
- 사설 IP 주소 대역
- A 클래스 — 10.0.0.0/8
- B 클래스 — 172.16.0.0/12
- C 클래스 — 192.168.0.0/16
- 출발지와 목적지가 동일한 IP 패킷
- SYN/FIN 플래그 조합 비정상 TCP 패킷 탐지
- 개요
- 목적
- 보안 장비를 우회하여 내부 시스템 접근
- 스텔스 스캔 및 운영체제 식별 기법
- 목적
- 탐지 목적
- TCP 플래그 — U(URG), A(ACK), P(PSH), R(RST), S(SYN), F(FIN)
- 스노트 규칙 & alert 메시지
- 출발지 포트가 80번인 경우 — 정상 클라이언트는 일반적으로 1024 이상을 출발지로 사용
- 개요
- TCP FIN 스캔 탐지
- TCP NULL 스캔 탐지
- TCP Xmas 스캔 탐지 — flags:UPF
- 개요
2. iptables 침입 차단 시스템
- 개요
- 리눅스 커널에 내장된 netfilter 기능을 관리자가 설정하고 제어할 수 있도록 하는 도구
- 리눅스 시스템에서 패킷 필터링 설정을 하기 위한 도구
- netfilter — 리눅스 커널 내부에서 네트워크 패킷의 흐름을 제어하는 핵심 프레임워크
- 주요 기능
- 패킷 필터링
- 상태 검사
- 방화벽을 통과하는 모든 프로토콜의 연결 상태를 일정 시간 추적하여 상태에 따라 패킷 필터링 정책 적용
- 연결 추적 기능이라고도 표현
- 상태 추적 테이블 또는 세션 테이블에 연결 상태 정보 저장 및 관리
- NAT
- 패킷 수준에서의 로깅
- 확장 모듈을 이용한 기능 — TCP, UDP, ICMP, MAC 주소 등 다양한 조건 기반의 세부 필터링 기능을 추가로 제공
- 주요 용어 정리
- 테이블
- ipatables에서 제공하는 기능을 분류하는 단위
- 주요 테이블 — filter 테이블, nat 테이블, mangle 테이블, raw 테이블 등
- 체인
- 네트워크 패킷이 통과하는 경로상에서 규칙을 적용하는 단위
- 필터 테이블에서 사용되는 주요 기본 체인
- INPUT 체인 — 외부에서 호스트를 목적지로 들어오은 패킷이 통과하는 체인
- OURPUR 체인
- FORWARD 체인
- 호스트를 단순히 경유하는 패킷이 통과하는 체인
- 호스트가 내위부 네트워크 사이에서 패킷 필터링 게이트웨이 역할
- 규칙
- 타깃
- 설정한 규칙에 일치하는 패킷이 발생했을 때 적용할 동작
- ACCEPT
- DROP — 응답 없음
- REJECT
- LOG — 패킷 정보를 로그에 기록
- 상단부터 순차적으로 검사하며 조건에 일치하는 규칙을 만나면 해당 타깃의 동작을 수행하고 이후 규칙 검사 중단
- 설정한 규칙에 일치하는 패킷이 발생했을 때 적용할 동작
- 테이블
- 사용법
- 기본 형식 — iptables [Table 설정] [Chain 설정] [Rule 설정] [Target 설정]
- 테이블 설정
- -t <테이블명>
- 테이블을 명시하지 않으면 기본적으로 filter 테이블 적용
- 체인 설정
- -[A | I | D | F] <체인명>
- -A — 지정한 체인의 마지막 행에 규칙 추가
- -I
- 지정한 체인에 규칙 삽입
- 삽입 위치를 지정할 수 있고, 생략 시 맨 앞에 규칙 삽입
- -D — 지정한 체인에서 특정 규칙 삭제
- -F
- 지정한 체인의 모든 규칙을 한 번에 삭제
- 체인을 지정하지 않으면 모든 체인의 규칙 삭제
- 규칙 설정
- 프로토콜 지정
- -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
- 프로토콜 지정
- 타깃 설정
- -j <타깃명>
- 설정한 규칙에 일치하는 패킷이 발생했을 때 적용할 동작 지정
- 기타 설정
- 체인에 설정된 규칙 확인
- -L <체인명> -n —line-numbers
- -L — 지정한 체인에 등록된 규칙 목록 출력. 체인명을 생략하면 모든 체인의 규칙 목록 출력
- -n — IP 주소와 포트 번호를 숫자 형식으로 출력
- —nline-number — 각 규칙의 행 번호 출력
- 체인에 기본 정책 설정하기
- -P <체인명> <ACCEPT | DROP | REJECT>
- 기본 정책 — 해당 체인의 모든 규칙에 일치하지 않는 패킷에 대해 마지막으로 적용되는 정책 의미
- Negative — 기본 정책을 차단으로 설정하고 허용할 트래픽만 선택적으로 명시
- Positive — 기본 정책을 허용으로 설정하고 차단할 트래픽만 선택적으로 명시
- 정책 정보를 저장하고 복원하기
- 정책 정보 저장 — iptables-save > <저장할 파일명>
- 정책 정보 복원
- iptables-restore < <복원할 파일명>
- 기존 정책을 모두 초기화한 후 백업 파일 내용으로 교체
- 체인에 설정된 규칙 확인
- 정책 설정 실습 — Stateless 정책
- 정책 설정 실습 — Stateful 정책
- 개요
- 상태 설정 — 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 상태로 관리되며 해당 시간이 지나면 연결 정보는 자동으로 상태 추적 테이블에서 제거됨
- TCP
- 상태 설정 — iptables -m state —state <NEW | ESTABLISHED | RELATED | INVALID>
- 개요
- 정책 설정 실습 — 비정상 TCP 패킷 탐지 정책
- iptables 확장 모듈 활용
- 개요
- 확장 모듈 — iptables의 기본 기능을 보완하여 패킷의 다양한 조건을 추가로 검사할 수 있게 하는 부가 모듈
- connlimit 모듈
- 목적
- 특정 IP 또는 네트워크의 동시 연결 수를 제한하기 위한 모듈
- 클라이언트가 서버에 지속적으로 연결을 유지해 시스템 자원을 과도하게 사용하는 행위를 방지하거나 서비스별 클라이언트당 동시 연결 수를 제한할 때 사용
- 모듈 설정
- -m connlimit —conlimit-above N —conlimit-mask M
- —conlimit-above N — 특정 IP 또는 네트워크의 동시 연결 수가 N개 초과 시 규칙 일치
- —conlimit-mask M — 동시 연결 수를 계산할 때 적용할 네트워크 마스크 지정
- 목적
- recent 모듈
- 목적 — 특정 IP 또는 네트워크에서 일정 시간 내 반복적으로 접근하는 횟수를 기록하여 그 횟수에 따라 탐지 또는 차단하기 위한 모듈
- 모듈 설정
- iptables -m recent —name <이름> —set —update —seconds S —hitcount N
- 접근 횟수 목록 관리 옵션
- —name — 접근 횟수를 관리하는 목록 이름 지정
- —set — 패킷의 출발지 IP를 지정한 목록에 등록
- —update — 이미 모록에 등록된 IP가 있으면 접근 횟수와 시간 갱신
- 일치 조건 옵션
- —seconds S — hitcount N — 최근 S초 동안 N번 이상 접근했을 때 규칙 일치
- limit 모듈
- 목적 — 특정 규칙의 일치 빈도수를 제한하기 위한 모듈
- 모듈 설정 — iptables -m limit —limit <빈도수>
- 개요
'정보보안기사' 카테고리의 다른 글
| [정보보안기사(실기)] SECTION 14 시스템 점검 도구 (0) | 2026.06.16 |
|---|---|
| [정보보안기사(실기)] SECTION 13 보안 장비 운영 (2) (1) | 2026.06.14 |
| [정보보안기사(실기)] SECTION 12 클라우드 컴퓨팅 보안 (0) | 2026.06.11 |
| [정보보안기사(실기)] SECTION 11 데이터베이스 보안 (0) | 2026.06.10 |
| [정보보안기사(실기)] SECTION 10 이메일 보안 (0) | 2026.06.08 |