보안 모니터링 8편: Wazuh 설치 및 Agent 연동
1. Wazuh 개요
1.1 Wazuh란?
- OSSEC 기반의 HIDS (Host-based Intrusion Detection System)
- 위협 헌팅(Threat Hunting) 시 블루팀이 사용하는 보안 모니터링 도구
- 엔드포인트 보안 + 로그 관리 + 취약점/컴플라이언스 + 대시보드를 포함한 올인원 SIEM
1.2 Wazuh 구성 요소
| 구성요소 | 역할 |
|---|---|
| Wazuh Manager | 에이전트 관리, 룰 처리, 알람 생성 |
| Elasticsearch | 로그/이벤트 저장, 검색 엔진 (DB 역할) |
| Kibana | 웹 대시보드 UI |
| Filebeat | 로그 수집 및 전달 |
1.3 실습 환경
| 역할 | IP | 호스트명 | 형태 |
|---|---|---|---|
| Wazuh Server | 192.168.2.10 | wazuh-server | 서버 |
| Agent 1 (Ubuntu) | 192.168.2.11 | wazuh-agent1 | Agent 형태 |
| Agent 2 (Ubuntu) | 192.168.2.12 | wazuh-agent2 | Agentless 형태 |
| Agent 3 (Windows) | 192.168.2.13 | (Windows) | Agent 형태 |
1.4 Agent vs Agentless
| 방식 | 설명 | 장단점 |
|---|---|---|
| Agent 형태 | 클라이언트에 프로그램 설치 | 상세 모니터링 가능, 설치 필요 |
| Agentless 형태 | 서버에서 SSH로 원격 모니터링 | 설치 불필요, 제한적 모니터링 |
2. Wazuh 서버 설치
2.1 사전 준비
호스트명 변경
# 서버
sudo hostnamectl set-hostname wazuh-server
# Agent 1
sudo hostnamectl set-hostname wazuh-agent1
# Agent 2
sudo hostnamectl set-hostname wazuh-agent2
중요: 서버와 Agent의 호스트명이 같으면 충돌 발생!
IP 고정 (Netplan)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: no
addresses:
- 192.168.2.10/24
gateway4: 192.168.2.2
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply
2.2 Wazuh 설치 스크립트
sudo -i
mkdir /wazuh && cd /wazuh
# 설치 스크립트 다운로드 및 실행
curl -sO https://packages.wazuh.com/resources/4.2/open-distro/unattended-installation/unattended-installation.sh
bash unattended-installation.sh -i
-s: Silent Mode,-o: Output 파일명,-i: Install
설치 완료 시 자동 설치되는 항목:
- Elasticsearch (로그 저장/검색)
- Kibana (웹 대시보드)
- Filebeat (로그 전달)
- Wazuh Manager
2.3 비밀번호 변경
# 비밀번호 변경 도구 다운로드
curl -sO https://packages.wazuh.com/resources/4.2/open-distro/tools/wazuh-passwords-tool.sh
# 이름 변경 및 실행 권한 부여
mv wazuh-passwords-tool.sh wazuh-passwords-tools.sh
chmod +x wazuh-passwords-tools.sh
# 비밀번호 변경 (wazuh / 123456)
./wazuh-passwords-tools.sh -u wazuh -p 123456
2.4 서비스 확인 및 재시작
# 서비스 상태 확인
systemctl status kibana
systemctl status elasticsearch
systemctl status filebeat
systemctl status wazuh-manager
# 서비스 재시작 (설정 변경 후 필수)
systemctl restart kibana
systemctl restart elasticsearch
systemctl restart filebeat
systemctl restart wazuh-manager
# 부팅 시 자동 시작
systemctl enable kibana elasticsearch filebeat wazuh-manager
2.5 웹 접속
https://192.168.2.10
- Username: wazuh
- Password: 123456
인증서 경고 시: 고급 → 안전하지 않음 진행
3. Agent 등록 - Windows (agent형태)
3.1 Windows IP 설정
ncpa.cpl → 이더넷 → 속성 → IPv4
- IP: 192.168.2.13
- 서브넷: 255.255.255.0
- 게이트웨이: 192.168.2.2
- DNS: 8.8.8.8
3.2 Agent 등록 (웹 UI)
- Wazuh 웹 → 메뉴 → Wazuh → Agents
- Deploy new agent 클릭
- Windows 선택
- Server address:
192.168.2.10 - 그룹: Default
- 생성된 명령어 복사
3.3 PowerShell에서 설치
# 관리자 권한으로 PowerShell 실행
# 웹에서 복사한 명령어 붙여넣기
Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.x.x-1.msi ...
3.4 수동 설치 (명령어 실패 시)
- C 드라이브에서
wazuh-agent검색 - MSI 파일 더블클릭
- 동의 → Install
3.5 Agent 확인
- Wazuh 웹 → Agents → 새로고침
- Windows Agent가 등록되어 있으면 성공
4. Agent 등록 - Ubuntu (agent형태)
4.1 Agent 등록 명령어
Wazuh 웹 → Deploy new agent → DEB amd64 선택 → 명령어 복사
# wazuh-agent1 (192.168.2.11)에서 실행
mkdir /wazuh && cd /wazuh
# 복사한 명령어 붙여넣기 (예시)
curl -so wazuh-agent.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.x.x-1_amd64.deb
dpkg -i wazuh-agent.deb
# 서비스 시작
systemctl daemon-reload
systemctl enable wazuh-agent
systemctl start wazuh-agent
systemctl status wazuh-agent
4.2 등록 확인
- Wazuh 웹 → Agents → 새로고침
- Ubuntu Agent가 “Active”로 표시되면 성공
5. Agentless 등록 - Ubuntu
5.1 Agentless란?
- 클라이언트에 아무것도 설치하지 않음
- 서버에서 SSH로 원격 접속하여 모니터링
- 대표적인 Agentless 도구: Ansible, Terraform
5.2 SSH 설정 (Agent 2)
# wazuh-agent2 (192.168.2.12)에서 실행
# SSH 서버 설치
apt install -y openssh-server
# 사용자 생성
adduser wazuh
# 비밀번호: 123456
# sudo 권한 부여
nano /etc/sudoers
# 추가: wazuh ALL=(ALL:ALL) ALL
# SSH 설정
nano /etc/ssh/sshd_config
sshd_config 수정 (샵 제거 및 수정):
Port 22
ListenAddress 0.0.0.0
PermitRootLogin yes
PasswordAuthentication yes
# SSH 재시작
systemctl restart sshd
systemctl enable sshd
systemctl status sshd
5.3 SSH 연결 테스트 (서버에서)
# wazuh-server에서 실행
ssh wazuh@192.168.2.12
# 비밀번호: 123456
# 연결 성공 시 exit으로 빠져나옴
SSH 연결이 되어야만 Agentless 등록 가능!
5.4 Agentless 호스트 등록
# wazuh-server에서 실행
cd /var/ossec/agentless
# 호스트 등록
./register_host.sh add wazuh@192.168.2.12 123456
# 등록 확인
./register_host.sh list
5.5 expect 패키지 설치
# 필수! 없으면 Agentless 동작 안 함
apt install -y expect
5.6 ossec.conf 설정
nano -l /var/ossec/etc/ossec.conf
맨 끝에 추가 (Alt + / 로 맨 끝 이동):
<agentless>
<type>ssh_generic_diff</type>
<frequency>10</frequency>
<host>wazuh@192.168.2.12</host>
<state>periodic_diff</state>
<arguments>ls -al /</arguments>
</agentless>
| 태그 | 설명 |
|---|---|
<type>ssh_generic_diff</type> |
SSH로 접속해서 명령 실행 후 이전 결과와 비교 |
<frequency>10</frequency> |
10초마다 실행 (테스트용, 실제는 더 길게) |
<host> |
SSH 접속 정보 |
<state>periodic_diff</state> |
변경분만 알림 |
<arguments> |
원격에서 실행할 명령 |
5.7 Wazuh 재시작 및 확인
# 재시작
cd /var/ossec/bin
./wazuh-control restart
# 로그 확인 (PASS 확인)
tail -f /var/ossec/logs/ossec.log
성공 시 출력:
ossec-agentlessd: Test passed for 'ssh_generic_diff' on 'wazuh@192.168.2.12'
5.8 테스트
# wazuh-agent1에서 agent2로 접속하여 파일 생성
ssh wazuh@192.168.2.12
sudo touch /webshell.txt
exit
로그 확인 (서버):
cat /var/ossec/logs/alerts/alerts.json | grep webshell
웹 UI 확인:
- Kibana → Discover → “webshell” 검색
- “Change detected” 메시지 확인
5.9 추가 모니터링 설정
<!-- /etc/passwd 변화 감지 -->
<agentless>
<type>ssh_generic_diff</type>
<frequency>10</frequency>
<host>wazuh@192.168.2.12</host>
<state>periodic_diff</state>
<arguments>tail -n 1 /etc/passwd</arguments>
</agentless>
<!-- /etc/shadow 변화 감지 -->
<agentless>
<type>ssh_generic_diff</type>
<frequency>10</frequency>
<host>wazuh@192.168.2.12</host>
<state>periodic_diff</state>
<arguments>tail -n 1 /etc/shadow</arguments>
</agentless>
6. Windows Sysmon 설치 및 연동
6.1 Sysmon이란?
- Microsoft 제공 무료 도구
- Windows 활동을 상세하게 로깅
- Wazuh와 연동 시 고급 위협 탐지 가능
Sysmon 주요 기능:
- 프로세스 생성/종료 로깅
- 네트워크 연결 로깅
- 파일 생성 시간 변경 로깅
- 드라이버/이미지 로딩 로깅
- Hash값 로깅 (악성파일 탐지)
- 프로세스 부모-자식 관계 표시
6.2 Sysmon 다운로드
- Google에서
sysmon microsoft검색 - https://learn.microsoft.com/ko-kr/sysinternals/downloads/sysmon
- Download Sysmon 클릭
- 압축 해제
6.3 Sysmon 설치
# CMD 관리자 권한으로 실행
cd C:\Users\[사용자]\Downloads\Sysmon
# 설치 (EULA 자동 동의)
Sysmon64.exe -accepteula -i
6.4 Sysmon Config 다운로드
GitHub에서 설정 파일 다운로드:
- https://github.com/sametsazak/sysmon
sysmon.xml다운로드 (클라이언트 측 설정)sysmon_rules.xml다운로드 (서버 측 룰)
6.5 Sysmon Config 수정
sysmon.xml을 메모장으로 열어 다음 내용 추가 (43-44번 줄 근처):
<ProcessCreate onmatch="include">
...
<CommandLine condition="contains">cmd.exe /c dir</CommandLine>
<CommandLine condition="contains">cmd.exe /c ping</CommandLine>
...
</ProcessCreate>
누가 dir, ping 명령을 실행하면 로깅됨
6.6 Sysmon Config 적용
# 수정한 config 적용
Sysmon64.exe -c sysmon.xml
6.7 이벤트 뷰어 확인
- 검색 → 이벤트 뷰어
- 응용 프로그램 및 서비스 로그 → Microsoft → Windows → Sysmon → Operational
- 로그 발생 확인
6.8 Wazuh Agent 설정 (Windows)
C:\Program Files (x86)\ossec-agent\ossec.conf 편집:
<localfile>
<location>Microsoft-Windows-Sysmon/Operational</location>
<log_format>eventchannel</log_format>
</localfile>
Sysmon 로그를 Wazuh로 전송하도록 설정
6.9 Wazuh Agent 재시작
# CMD 관리자 권한
"C:\Program Files (x86)\ossec-agent\win32ui.exe"
# Manage → Restart
또는:
net stop WazuhSvc
net start WazuhSvc
7. 부록: 명령어 및 설정 파일
7.1 Wazuh 서버 명령어
# 명령어 위치
/var/ossec/bin/
# 서비스 재시작
/var/ossec/bin/wazuh-control restart
# 서비스 상태
/var/ossec/bin/wazuh-control status
# 등록된 Agent 관리
/var/ossec/bin/manage_agents
# l: 리스트, a: 추가, r: 제거
# Agentless 호스트 관리
/var/ossec/agentless/register_host.sh add [user@host] [password]
/var/ossec/agentless/register_host.sh list
7.2 주요 설정 파일
| 파일 | 위치 | 용도 |
|---|---|---|
| ossec.conf | /var/ossec/etc/ossec.conf |
메인 설정 파일 |
| local_rules.xml | /var/ossec/etc/rules/local_rules.xml |
커스텀 룰 |
| 로그 | /var/ossec/logs/ossec.log |
서비스 로그 |
| 알람 | /var/ossec/logs/alerts/alerts.json |
알람 로그 |
7.3 포트
| 포트 | 용도 |
|---|---|
| 443 | Kibana 웹 UI (HTTPS) |
| 1514 | Wazuh Agent 통신 |
| 1515 | Agent 등록 |
| 9200 | Elasticsearch |
| 5601 | Kibana 내부 |
7.4 문제 해결
Agent 등록 안 될 때:
- 방화벽 확인:
ufw status - 포트 확인:
netstat -tlnp | grep 1514 - 서비스 상태:
systemctl status wazuh-manager
Agentless 동작 안 할 때:
- SSH 연결 테스트:
ssh wazuh@192.168.2.12 - expect 설치 확인:
apt install -y expect - 로그 확인:
tail -f /var/ossec/logs/ossec.log
Sysmon 로그 안 올라올 때:
- 이벤트 뷰어에서 Sysmon 로그 확인
- ossec.conf에 localfile 설정 확인
- Wazuh Agent 재시작
7.5 자주 쓰는 검색 (Kibana)
# 특정 Agent 로그
agent.name: "wazuh-agent1"
# 특정 룰 ID
rule.id: 100001
# 특정 키워드
full_log: *webshell*
# 레벨 기준
rule.level: >= 7
핵심 포인트 요약
- Wazuh = OSSEC 기반 HIDS + ELK 스택
- 호스트명 충돌 주의 - 서버와 Agent 이름 다르게!
- Agent 형태: 클라이언트에 프로그램 설치
- Agentless 형태: SSH로 원격 모니터링 (expect 필수!)
- Sysmon: Windows 상세 로깅, Wazuh와 연동 시 고급 위협 탐지
- 설정 변경 후: 반드시
wazuh-control restart
댓글 남기기