티스토리 뷰

반응형

 

배경 및 사전조사 필요 내용

먼저 배경과 배포 전 사전조사가 이루어져야 할 내용은,

아래 Linux 에이전트 설치 스크립트 배포 포스팅에서 설치 지원 OS 확인 외에는 동일하다.

 

[Wazuh] Linux 에이전트 설치 스크립트를 배포해보자

배경 GCP에 대형(?) Wazuh를 구축 및 기존에 사용하던 구 Wazuh 클러스터에서 이전해야 함에 따라서, 모든 사내 인스턴스들에 새로이 Wazuh agent가 설치되어야 했다. 그러려면 일일이 몇 천대의 서버에

likethefirst.tistory.com

📛 이 글에는 Windows 에이전트만 대상으로 고려되어 있다.

Wazuh 패키지 파일이 현재 최신 버전으로 작성되어 있으므로,

매니저 서버와의 호환성으로 버전 변경 필요 시 "4.7"을 해당 페이지 코드 내에서 검색하여 "4.x"로 변경한다.

(마스터/매니저 서버의 버전보다 에이전트 버전이 낮아야 함)

 

 

 

Wazuh 패키지 구조 이해

리눅스와는 다르게 윈도우 패키지 파일은 자체 msi 파일을 통해 GUI로 IP를 입력하고 설치하게 되어있다.

하지만 사내에서 배포하기에 설치 담당자에게 Manager의 IP를 일일이 입력하라고 하는 것은 비효율적이다.

이를 해결하기 위해 CLI로 설치할 수 있는 매커니즘이 있어 아래에 더 자세히 작성한다.

 

 

 

Usecase 및 배치 파일 flow

1. 에이전트 설치

Linux와는 다르게 매니저(worker) 서버 IP와 그룹을 한 줄에 지정해줄 수 있어 편리하다.

아래는 윈도우 패키지 파일이다.

https://documentation.wazuh.com/current/installation-guide/packages-list.html#windows

 

1-1. 수동 : 외부 인터넷망 통신이 가능할 때

powershell 유틸리티 중 일부인 Invoke-Webrequest를 통해 Wazuh 패키지 파일을 받아오는 방법이다.

# POWERSHELL
Invoke-Webrequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.7.0-1.msi -OutFile wazuh-agent.msi;

1-2. 수동 : 폐쇄망일 때

외부 인터넷망과 통신이 불가할 때 wazuh-agent-4.x.x.msi 파일을 서버에 배포해야 하는 방식이다.

/q는 그냥 경고없이 실행한다는 의미이므로 필수는 아니다.

# CMD
wazuh-agent-4.7.3-1.msi /q WAZUH_MANAGER="10.10.10.10"

# POWERSHELL
.\wazuh-agent-4.7.3-1.msi /q WAZUH_MANAGER="10.10.10.10"

1-3. 자동 : 모든 케이스

별도 배치 파일 내에 아래 명령어를 넣어 배포하고 실행시킨다. 

두번째 외부 통신 불가능 케이스의 경우 base 하위에 패키지 파일을 넣어둔 경우의 명령어이다.

# 외부 통신 가능
# POWERSHELL
powershell Invoke-Webrequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.7.0-1.msi -OutFile wazuh-agent.msi; WAZUH_MANAGER=10.10.10.10


# 외부 통신 불가능
powershell ./base/wazuh-agent.msi /q WAZUH_MANAGER=10.10.10.10

 

 

2. Administrator 권한 실행 여부 (Optional)

파일이 배포되었을 때 administrator 권한으로 해당 스크립트를 실행하는지 확인 후, 아니라면 요청한다.

관리자 권한으로 모두 파일 실행하게 했다면 불필요하다.

REM --cacls.exe 파일로 권한 체크
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
 
REM --errorlevel이 0이 아니면 관리자 권한이 없으므로 요청 (createVbs로)
if '%errorlevel%' NEQ '0' ( 
    echo Requesting administrative privileges... 
    goto createVbs 
) else ( goto gotAdmin ) 
 
:createVbs --관리자 권한 얻고 스크립트를 다시 실행
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
    set params = %*:"="" 
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" 
     
    "%temp%\getadmin.vbs" 
    del "%temp%\getadmin.vbs"
    exit /B 
     
:gotAdmin -- 스크립트 파일이 있는 곳으로 change directory
    pushd "%CD%" 
    CD /D "%~dp0"

 

 

3. 그 외 사용 가능한 파라미터

윈도우 패키지에선 설치 명령어에 매니저 서버 IP를 바로 파라미터로 넣어줄 수 있다고 했다.

그 뒤에 다른 다양한 인자를 넣어서 그룹 지정이나 프로토콜 지정을 별도로 해줄 수 있다.

아래 문서를 참고하면 된다.

 

Deployment variables for Windows - Deployment variables

User manual, installation and configuration guides. Learn how to get the most out of the Wazuh platform.

documentation.wazuh.com

powershell ./base/wazuh-agent.msi /q WAZUH_MANAGER=10.10.10.10 WAZUH_AGENT_GROUP=group_name

 

 

4. 서비스 시작

다른 케이스에서는 에이전트 등록이 자동으로 되는데,

CLI나 배치 스크립트를 활용하는 경우 당연히 서비스 시작도 추가해주어야 한다.

powershell NET START WazuhSvc

🔊 발생한 Issue (1)

본인의 경우는 서버 성능이 좋지 못한 경우 배치 파일을 통해 아래처럼 에이전트 설치 시,

hang이 걸리는 시간 때문에 설치나 서비스 시작이 완료되지 못한 경우가 있었다.

그래서 여러번 테스트 후 넉넉하게 5s의 timeout을 중간중간 넣어주었고,

배포 전에만 1515와 1514 포트를 체크하여 최종적으로 netstat 1514 라인에서 ESTABLISHED가 뜨는지 확인했다.

powershell ./base/wazuh-agent.msi /q WAZUH_MANAGER=10.10.10.10
timeout 5 > NUL
powershell NET START WazuhSvc
timeout 5 > NUL

REM --아래는 테스트시만 사용, 선택
netstat -ano | find "1515"
netstat -ano | find "1514"
pause

🔊 발생한 Issue (2)

배치 스크립트를 이용한 powershell 명령어에 WAZUH_MANAGER=10.10.10.10처럼 매니저 서버를 지정하는 부분에

WAZUH_MANAGER="10.10.10.10"처럼 쌍따옴표를 넣게되면 

파일을 직접 배포할 때는 무관한데 그룹 정책을 통해 일괄로 배포할 때

에이전트의 ossec.conf 파일 내 파라미터 value가 "10.10.10.10"으로 들어가버려 통신이 안되는 경우가 있다.

정확한 원인은 파악하기 어려웠지만 직접 환경변수를 설정하는 게 아닌

wazuh msi 파일을 통해 인자를 넣어주는 경우라 그런가 싶기도 하다.

그래서 WAZUH_MANAGER나 그룹지정 시 따옴표 없이 넣어주는 것이 이슈 발생 가능성이 가장 적다.

 

 

 

배포 방식

📑 윈도우 그룹 정책을 통해 배포 및 실행 (https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rpg2003a&logNo=221167785476)
📑 스크립트 직접 실행도 무관하다면 공유 폴더를 열어 배포

📑 별도 사내의 파일 배포 서버에 스크립트 배포 (망간파일전송솔루션 또는 NAC 등을 활용 가능)

 

 

 

✅ 완성 스크립트 (자동)

별도로 에이전트 등록하면서 추가로 해줘야할 액션이 있다면 가장 추천하는 방법이다.

@echo off
:--------------------------------------
REM --cacls.exe 파일로 권한 체크
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
 
REM --errorlevel이 0이 아니면 관리자 권한이 없으므로 요청 (createVbs로)
if '%errorlevel%' NEQ '0' ( 
    echo Requesting administrative privileges... 
    goto createVbs 
) else ( goto gotAdmin ) 
 
:createVbs --관리자 권한 얻고 스크립트를 다시 실행
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
    set params = %*:"="" 
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" 
     
    "%temp%\getadmin.vbs" 
    del "%temp%\getadmin.vbs"
    exit /B 
     
:gotAdmin -- 스크립트 파일이 있는 곳으로 change directory
    pushd "%CD%" 
    CD /D "%~dp0"
:--------------------------------------
 
powershell ./base/wazuh-agent.msi /q WAZUH_MANAGER=10.10.10.10
timeout 5 > NUL
powershell NET START WazuhSvc

참고로 python을 사용할 수 있고 사용자에게 설치를 맡기고.. 에이전트마다 다른 워커에 할당해야 하면 (조건이 참 많구만)

pyqt라는 프레임워크를 이용해 프로그래밍해서

GUI를 통해 버튼으로 설치하게 명령어와 이벤트 리스너를 연결해줄 수도 있다.

재밌게 만들긴 했지만 사실상 CLI보다 설치 효율이 떨어져 이 방식으로 설치하진 않았다.

 

커뮤니케이션을 좋아하므로 댓글 달아주시면 언제든 질답, 피드백, 여러 이야기들 모두 환영합니다. 📞 

반응형
댓글
반응형
Recent Post.
Recent Reply.
Thanks for comming.
오늘은
명이 방문했어요
어제는
명이 방문했어요