본문 바로가기
운영체제 (LNX,WIN)

CentOS 4 에이전트 설치 없이 보안 모니터링, Wazuh Agentless(SSH)

by 날으는물고기 2025. 10. 15.

CentOS 4 에이전트 설치 없이 보안 모니터링, Wazuh Agentless(SSH)

728x90

CentOS 4 이하에는 Wazuh Agent를 직접 설치하는 것이 사실상 불가능합니다.

불가능한 이유

  1. 패키지 호환성 문제
    • Wazuh는 최소 glibc 2.12 이상(CentOS 6 이상) 을 요구합니다.
      하지만 CentOS 4의 glibc 버전은 2.3.x~2.4 수준이라,
      최신 Wazuh Agent 바이너리(rpm)가 실행조차 되지 않습니다.
  2. 의존성 라이브러리 부재
    • libpcre, libssl, libcrypto, systemd 등 기본 빌드 종속성이 모두 너무 오래되어
      설치 시 symbol lookup error 혹은 version GLIBC_2.x not found 등의 오류가 발생합니다.
  3. Python/Perl 런타임도 호환 안 됨
    • CentOS 4의 내장 Python은 2.3 수준이며, Wazuh Agent 빌드는 Python 2.7+ 이상을 필요로 합니다.
구분 가능 여부 대안
Wazuh Agent 직접 설치 ❌ 불가능 (glibc 불일치) -
syslog 전송 ✅ 가능 로그 포워딩 방식
agentless 모드 ✅ 가능 SSH 기반 점검
proxy 중계 ⚠️ 가능 (비추천) 중계 서버 통해 전달

A. 원격 로그 수집 방식으로 대체

Wazuh Agent를 설치하지 않고, syslog/rsyslog forward 방식으로 서버 로그를 중앙으로 보낼 수 있습니다.

예시 설정

CentOS 4에서 /etc/syslog.conf 또는 /etc/rsyslog.conf 에 다음을 추가

*.info @wazuh-manager-ip:514

Wazuh Manager에서는 /var/ossec/etc/ossec.conf 에 아래를 추가

<remote>
  <connection>syslog</connection>
  <port>514</port>
</remote>

이렇게 하면 agent 없이도 Wazuh가 로그를 수신하여 분석할 수 있습니다.

💡 이 방식은 “Passive Agentless Monitoring”으로 불리며, SSH 접근이나 syslog 입력을 통해 데이터를 수집합니다.

B. Agentless 기능 활용 (SSH 기반)

Wazuh는 Agentless 모드를 제공하며, SSH 접속을 통해 원격 명령을 실행하여 점검합니다.

설정 예시 (/var/ossec/etc/ossec.conf)

<agentless>
  <type>ssh_integrity_check_linux</type>
  <frequency>3600</frequency>
  <host>192.168.1.100</host>
  <state>periodic</state>
  <user>root</user>
  <password>your_ssh_password</password>
</agentless>

🔒 SSH 키 인증으로 변경하는 것이 보안상 권장됩니다.

300x250

이를 통해 Wazuh는 agent 없이도 다음과 같은 점검을 수행할 수 있습니다.

  • 파일 무결성(FIM)
  • Rootkit 검사
  • 기본 보안 설정 점검(SCA)

C. Proxy 방식으로 간접 설치 (비추천)

이론적으로는 별도 CentOS 6 이상 중계 서버에 Wazuh Agent를 설치하고, 해당 서버가 CentOS 4의 로그를 수집 후 전달하도록 구성할 수 있습니다.

예시 흐름

[CentOS 4 host] → rsyslog → [CentOS 7 중계 서버 (Wazuh Agent)] → Wazuh Manager

이 방법은 관리 오버헤드가 크지만, 레거시 시스템을 완전히 교체하기 어려운 경우 임시방편으로 유용합니다.

점검 항목 설명 대체 방법
무결성 점검 파일 변조 탐지 agentless SSH 또는 Tripwire 대체
로그 수집 OS, 서비스 로그 syslog forwarding
정책 점검 보안 구성 agentless SCA 모듈 또는 스크립트 기반 점검
경고 전송 Wazuh 이벤트 알림 Manager 측에서 중앙 분석 처리

Agentless(SSH 기반) 방식으로 CentOS 4 호스트를 Wazuh로 모니터링하는 방법입니다.

⚠️ CentOS 4는 너무 오래된 OS라 최신 SSH/암호화 스택과의 호환 이슈가 잦습니다.

아래 호환성 옵션보안 가이드를 꼭 함께 적용하세요.

  • 설치 위치: Agentless는 Wazuh Manager 쪽만 설정합니다. (대상 호스트에는 Agent 설치 없이 SSH로 접속)
  • 동작 원리: Manager가 ssh로 대상 서버에 접속 → 지정 명령을 실행 → 결과를 수집·정규화 → 규칙 매칭 후 경고(Alert) 생성
  • 주요 활용
    • 파일/권한 무결성 스팟 체크(간이 FIM)
    • 루트킷/취약 설정 패턴 점검
    • 패키지/커널/서비스 상태 진단
    • 보안 설정(SCA 유사) 스크립트 실행 결과 수집

사전 준비

1. Wazuh Manager (Linux)

# 필수 패키지 (배포판에 맞게 패키지명 조정)
sudo apt-get install -y openssh-client sshpass expect || true
sudo yum install -y openssh-clients sshpass expect || true

# Wazuh 실행 계정으로 키 보관 디렉터리
sudo install -d -m 700 -o ossec -g ossec /var/ossec/.ssh

expect는 과거 Agentless 플러그인이 비대화형 SSH 자동화를 위해 이용하는 경우가 있어 함께 설치를 권장합니다.

2. 대상(CentOS 4) – 최소 요건

  • sshd 동작 중이어야 함(기본 포트 22).
  • (권장) 전용 계정 wzagent 생성 + 키 기반 접속 허용.
  • (권장) sudo NOPASSWD로 필요한 명령만 허용(최소 권한).

 

계정/키/권한 설정 예시 (CentOS 4)

# root@centos4
useradd -m -s /bin/bash wzagent
passwd wzagent   # 임시 비밀번호(추후 키 기반으로 전환)

# sudoers 최소 권한(예: 파일 조사/패키지 상태 확인 정도)
echo 'wzagent ALL=(root) NOPASSWD:/bin/ls,/bin/cat,/bin/grep,/usr/bin/find,/bin/rpm,/bin/mount,/bin/df,/sbin/service' >/etc/sudoers.d/wzagent
chmod 440 /etc/sudoers.d/wzagent

# SSH 공개키 등록 (아래 1-3에서 만든 공개키를 붙여넣기)
install -d -m 700 ~wzagent/.ssh && chown -R wzagent:wzagent ~wzagent/.ssh
printf '%s\n' 'ssh-rsa AAAA... your-public-key ...' >> ~wzagent/.ssh/authorized_keys
chmod 600 ~wzagent/.ssh/authorized_keys && chown wzagent:wzagent ~wzagent/.ssh/authorized_keys

주의: /etc/sudoers 또는 sudoers.d/*에 requiretty가 켜져 있으면 비대화형 명령이 실패합니다.
Defaults: wvagent !requiretty 또는 전역 !requiretty 설정을 고려하세요. (배포 규정에 맞게)

3. 키 생성 & 배포 (Manager 측)

# ossec 유저로 수행 (또는 root로 생성 후 소유권 변경)
sudo -u ossec ssh-keygen -t rsa -b 2048 -N '' -f /var/ossec/.ssh/cent4_id_rsa

# 공개키를 대상에 배포(초기엔 비번입력, 이후 키 사용)
ssh-copy-id -i /var/ossec/.ssh/cent4_id_rsa.pub wzagent@CENT4_HOST
# 혹은 수동으로 authorized_keys에 추가(1-2 예시 참조)

(중요) 구식 SSH 호환성 옵션

CentOS 4는 구형 OpenSSH/암호 스택일 가능성이 매우 높습니다. Manager에서 호스트별 SSH 설정을 잡아 충돌을 최소화하세요. /var/ossec/.ssh/config (권장: ossec 소유, 600)

Host cent4-web01
  HostName 192.168.10.15
  User wzagent
  IdentityFile /var/ossec/.ssh/cent4_id_rsa
  PubkeyAcceptedKeyTypes +ssh-rsa
  HostkeyAlgorithms +ssh-rsa
  KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
  Ciphers +aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes128-cbc
  MACs +hmac-sha1,hmac-md5
  StrictHostKeyChecking no
  UserKnownHostsFile=/var/ossec/.ssh/known_hosts

연결 테스트

sudo -u ossec ssh cent4-web01 'echo OK && uname -a'

성공하면 Agentless 구성을 진행합니다.

Agentless 설정 (ossec.conf)

Wazuh Manager의 설정 파일: /var/ossec/etc/ossec.conf
아래는 세 가지 블록 예시입니다.

1. (간이 FIM) ssh_integrity_check_linux

지정 디렉터리/파일의 목록·해시·권한 등을 수집해 변화 감지(주기적 스냅샷 비교).

<!-- /var/ossec/etc/ossec.conf -->
<ossec_config>
  <!-- ... 다른 설정 ... -->

  <agentless>
    <type>ssh_integrity_check_linux</type>
    <frequency>3600</frequency>            <!-- 1시간마다 -->
    <host>cent4-web01</host>               <!-- SSH config의 Host 별칭/또는 IP -->
    <state>periodic</state>

    <!-- 인증(키 기반 권장) -->
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>

    <!-- (선택) 검사 경로/제외 패턴: 일부 구현은 기본 경로를 스크립트 내에 가짐 -->
    <scan_paths>/etc,/var/log,/usr/bin</scan_paths>
    <ignore>/proc,/sys,/dev,/tmp</ignore>
  </agentless>

구현체에 따라 <scan_paths>/<ignore>가 스크립트 파라미터로 전달됩니다. 경로가 너무 넓으면 비용이 큽니다. 처음엔 좁게 → 점진 확장을 권장합니다.

2. (보안 점검) ssh_generic – 커맨드 실행

보안/운영 점검 명령을 주기적으로 실행하고 결과를 수집합니다.

  <agentless>
    <type>ssh_generic</type>
    <frequency>900</frequency>             <!-- 15분 -->
    <host>cent4-web01</host>
    <state>periodic</state>
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>

    <!-- 예시: 핵심 보안/운영 체크 -->
    <cmd>uname -a</cmd>
    <cmd>sudo /bin/rpm -qa --last | head -20</cmd>
    <cmd>sudo /bin/df -P -h</cmd>
    <cmd>sudo /bin/grep -E "^(PermitRootLogin|Protocol|X11Forwarding|UsePAM|Ciphers|HostKey)" /etc/ssh/sshd_config</cmd>
    <cmd>sudo /bin/grep -R --include='*.conf' -E '(Allow from|AllowOverride|Options\s+Indexes)' /etc/httpd 2>/dev/null | head -50</cmd>
    <cmd>sudo /bin/grep -E '(^[^:]+:[^:]*:0:0:)' /etc/passwd</cmd>  <!-- UID 0 점검 -->
    <cmd>sudo /usr/bin/find / -xdev -type f -perm -4000 2>/dev/null | head -100</cmd>  <!-- SUID -->
  </agentless>

출력은 Wazuh 규칙에 매칭됩니다. 특정 문자열(예: “UID 0 계정 검출”)을 트리거하도록 로컬 규칙을 추가하면 탐지력을 높일 수 있습니다.

3. (루트킷 탐지) ssh_rootkit_scan (선택)

  <agentless>
    <type>ssh_rootkit_scan</type>
    <frequency>14400</frequency>           <!-- 4시간 -->
    <host>cent4-web01</host>
    <state>periodic</state>
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>
  </agentless>

</ossec_config>

적용 & 확인

sudo /var/ossec/bin/wazuh-control restart
# 또는
sudo systemctl restart wazuh-manager

# 로그 확인
sudo tail -f /var/ossec/logs/ossec.log

커스텀 스크립트 연동

정교한 보안 점검을 위해 대상 서버에 스크립트(쉘/Perl/Python 2.3 호환)를 배치하고 ssh_generic으로 호출하세요.

예: /opt/security/check_centos4_baseline.sh (대상 서버)

#!/bin/sh
echo "[BASELINE] START"
# 패스워드 정책
grep -E '^(PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE)' /etc/login.defs

# 불필요 서비스
/sbin/chkconfig --list | grep -E 'telnet|rsh|rexec'

# 취약 권한 파일
find /etc -type f -perm -o+w -maxdepth 1

echo "[BASELINE] END"

권한

chmod 700 /opt/security/check_centos4_baseline.sh

Manager ossec.conf

<agentless>
  <type>ssh_generic</type>
  <frequency>1800</frequency>
  <host>cent4-web01</host>
  <state>periodic</state>
  <user>wzagent</user>
  <pem>/var/ossec/.ssh/cent4_id_rsa</pem>
  <cmd>sudo /opt/security/check_centos4_baseline.sh</cmd>
</agentless>

로컬 규칙으로 “신호 대 잡음” 개선

/var/ossec/etc/rules/local_rules.xml 예시

<group name="agentless,syslog,">
  <!-- UID 0 계정 탐지 -->
  <rule id="190001" level="10">
    <if_sid>530</if_sid>  <!-- agentless generic 출력 기본 SID에 체인 -->
    <match>UID 0</match>
    <description>CentOS4: Non-root UID0 account detected</description>
    <mitre>
      <id>T1078</id>
    </mitre>
    <options>no_full_log</options>
    <group>audit,identity,</group>
  </rule>

  <!-- SUID 파일 과다 -->
  <rule id="190002" level="8">
    <if_sid>530</if_sid>
    <match>/ -xdev -type f -perm -4000</match>
    <description>CentOS4: SUID files enumerated</description>
    <group>host,privilege,</group>
  </rule>
</group>

적용

sudo /var/ossec/bin/wazuh-control restart

운영·보안 가이드(체크리스트)

운영

  1. 최초 연결은 sudo -u ossec ssh cent4-web01 'echo OK'로 검증
  2. 주기(frequency)는 짧게 시작(15~30분) → 안정화 후 늘리기
  3. 명령 출력은 짧고 구조적(grep/awk로 필터) → 규칙 매칭 용이
  4. Job 실패 시 ossec.log 에러를 보고 SSH 옵션/암호화 스위트를 재조정

보안

  1. 전용 계정 + 최소 권한 sudo(허용 명령 화이트리스트)
  2. 키 기반 인증 사용, 키 권한 600
  3. Manager ↔ 대상 간 방화벽(22/TCP 최소개방, 관리망 분리)
  4. sudoers!authenticate 대신 NOPASSWD명령 단위 제한
  5. (가능하면) PermitRootLogin no, Protocol 2, AllowUsers wzagent
  6. 로그에 개인정보/비밀키가 찍히지 않도록 커맨드 설계 시 주의

트러블슈팅

증상 원인 해결
Permission denied (publickey) 키 미배포/권한 문제 authorized_keys 권한(600), 소유자 점검
no matching key exchange method 구형 SSH KEX 불일치 /var/ossec/.ssh/configKexAlgorithms 추가
sudo: no tty present requiretty 설정 sudoers에서 !requiretty 적용
에이전트리스 결과가 안 보임 규칙 매칭 실패 또는 출력 과다 출력 줄이기, local_rules.xml 추가
시간 지연/타임아웃 느린 find/hash 점검 경로 축소/캐시용 스냅샷 방식 고려
Host key verification failed 호스트키 미등록 StrictHostKeyChecking no 또는 known_hosts 등록

권장 시작 템플릿

/var/ossec/.ssh/config

Host cent4-web01
  HostName 192.168.10.15
  User wzagent
  IdentityFile /var/ossec/.ssh/cent4_id_rsa
  PubkeyAcceptedKeyTypes +ssh-rsa
  HostkeyAlgorithms +ssh-rsa
  KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
  Ciphers +aes256-ctr,aes128-ctr,aes256-cbc,aes128-cbc
  MACs +hmac-sha1,hmac-md5
  StrictHostKeyChecking no
  UserKnownHostsFile=/var/ossec/.ssh/known_hosts

/var/ossec/etc/ossec.conf (핵심 세트)

<ossec_config>
  <agentless>
    <type>ssh_integrity_check_linux</type>
    <frequency>3600</frequency>
    <host>cent4-web01</host>
    <state>periodic</state>
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>
    <scan_paths>/etc,/var/log,/usr/bin</scan_paths>
    <ignore>/proc,/sys,/dev,/tmp</ignore>
  </agentless>

  <agentless>
    <type>ssh_generic</type>
    <frequency>900</frequency>
    <host>cent4-web01</host>
    <state>periodic</state>
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>
    <cmd>uname -a</cmd>
    <cmd>sudo /bin/df -P -h</cmd>
    <cmd>sudo /bin/rpm -qa --last | head -20</cmd>
    <cmd>sudo /bin/grep -E "^(PermitRootLogin|Protocol|X11Forwarding|UsePAM|Ciphers|HostKey)" /etc/ssh/sshd_config</cmd>
    <cmd>sudo /usr/bin/find / -xdev -type f -perm -4000 2>/dev/null | head -100</cmd>
  </agentless>

  <agentless>
    <type>ssh_rootkit_scan</type>
    <frequency>14400</frequency>
    <host>cent4-web01</host>
    <state>periodic</state>
    <user>wzagent</user>
    <pem>/var/ossec/.ssh/cent4_id_rsa</pem>
  </agentless>
</ossec_config>

/var/ossec/etc/rules/local_rules.xml

<group name="agentless,custom,">
  <rule id="190001" level="10">
    <if_sid>530</if_sid>
    <match>UID 0</match>
    <description>CentOS4: Non-root UID0 account detected</description>
    <group>audit,identity,</group>
  </rule>
  <rule id="190002" level="8">
    <if_sid>530</if_sid>
    <match>-perm -4000</match>
    <description>CentOS4: SUID files enumerated</description>
    <group>host,privilege,</group>
  </rule>
</group>

적용

sudo systemctl restart wazuh-manager
sudo tail -f /var/ossec/logs/ossec.log

확장 활용 시나리오

  • 정책 준수(SCA 유사): 사내 보안점검 스크립트 표준화 → ssh_generic로 실행 → 규칙/대시보드로 합격/불합격 집계
  • 취약 서비스 잔존 탐지: chkconfig/netstat -lnpt/ss -lntp(가능 시) 결과 파싱 룰 추가
  • 패치 거버넌스: rpm -q --changelog/last -x 등으로 패치/재부팅 추적
  • 티켓 연동: 특정 규칙 레벨 이상 발생 시 TheHive/Jira·Slack 자동 통보(알림·오토티켓팅)
728x90
그리드형(광고전용)

댓글