본문 바로가기
모의해킹 (WAPT)

Snipe-IT, SecureCodeBox, Wazuh 통합하여 서버 및 웹 취약점 관리 방안

by 날으는물고기 2024. 11. 27.

Snipe-IT, SecureCodeBox, Wazuh 통합하여 서버 및 웹 취약점 관리 방안

Snipe-IT, SecureCodeBox, 그리고 Wazuh를 통합하여 서버와 웹사이트 단위의 취약점 점검, 결과 대시보드 구성, 그리고 자산 관리 방안을 구축하는 방법입니다. 이 통합 솔루션을 통해 조직의 보안 상태를 체계적으로 운영하고, 실시간 모니터링과 자동화된 취약점 관리를 구현할 수 있습니다.

  1. 환경 구축
  2. Snipe-IT 설정
  3. SecureCodeBox 설정 및 활용
  4. Wazuh 설정 및 통합
  5. 통합 관리 및 운영
  6. Wazuh에서 SecureCodeBox 스캔 결과 통합
  7. 보안 설정 준수 여부 체크 스크립트 통합
  8. 항목별 결과 식별 및 관리
  9. SCA 모듈을 통한 커스텀 스크립트 통합
  10. FIM(File Integrity Monitoring) 소개
  11. Wazuh를 통한 iptables 룰셋 수집
  12. Wazuh에서 Osquery 활용
  13. 리스닝 포트 및 데몬 정보 수집
  14. Kibana에 OWASP 관련 탭 추가
  15. 결론

1. 환경 구축

1.1 Snipe-IT

  • 역할: IT 자산 관리 솔루션
  • 기능: 서버, 네트워크 장비, 소프트웨어 등 자산 관리

1.2 SecureCodeBox

  • 역할: 취약점 스캐닝 도구
  • 기능: 여러 스캐너(Nmap, OWASP ZAP 등)를 통해 서버 및 웹사이트의 보안 취약점 자동 스캔

1.3 Wazuh

  • 역할: 오픈소스 보안 모니터링 및 로그 관리 플랫폼
  • 기능: 취약점 분석 결과 수집 및 대시보드 표시, 실시간 보안 모니터링

2. Snipe-IT 설정

2.1 Snipe-IT 설치

Docker를 이용하여 Snipe-IT를 설치합니다.

version: '3'
services:
  snipeit:
    image: snipe/snipe-it
    container_name: snipeit
    environment:
      - APP_ENV=production
      - APP_DEBUG=false
      - APP_KEY=base64:SomeBase64Key=
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_DATABASE=snipeit
      - DB_USERNAME=snipeit
      - DB_PASSWORD=password
      - MAIL_PORT=587
      - MAIL_HOST=smtp.mailtrap.io
      - MAIL_USERNAME=null
      - MAIL_PASSWORD=null
      - MAIL_ENCRYPTION=tls
    ports:
      - "80:80"
    volumes:
      - snipeit_uploads:/var/www/html/public/uploads
    depends_on:
      - db
  db:
    image: mysql:5.7
    container_name: snipeit_db
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=snipeit
      - MYSQL_USER=snipeit
      - MYSQL_PASSWORD=password
    volumes:
      - snipeit_db:/var/lib/mysql
volumes:
  snipeit_uploads:
  snipeit_db:

2.2 자산 등록

자산을 Snipe-IT에 등록합니다. 대량 등록 시 API를 활용할 수 있습니다.

curl -X POST https://your-snipeit-instance/api/v1/hardware \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "name": "Web Server 1",
  "asset_tag": "WEB001",
  "status_id": 2,
  "model_id": 1,
  "serial": "123456789",
  "company_id": 1
}'

3. SecureCodeBox 설정 및 활용

3.1 SecureCodeBox 설치

Kubernetes 클러스터에 SecureCodeBox를 설치합니다.

helm repo add secureCodeBox https://charts.securecodebox.io
helm repo update
helm install securecodebox secureCodeBox/securecodebox

3.2 취약점 스캐너 설정

웹 애플리케이션 스캔 (OWASP ZAP)

apiVersion: "execution.securecodebox.io/v1"
kind: "Scan"
metadata:
  name: "zap-scan"
spec:
  scanType: "zap"
  parameters:
    - "http://your-website.com"

서버 스캔 (Nmap)

apiVersion: "execution.securecodebox.io/v1"
kind: "Scan"
metadata:
  name: "nmap-scan"
spec:
  scanType: "nmap"
  parameters:
    - "-sS"
    - "192.168.0.0/24"

3.3 스캔 실행

kubectl apply -f zap-scan.yaml
kubectl apply -f nmap-scan.yaml

4. Wazuh 설정 및 통합

4.1 Wazuh 설치 및 설정

Docker Compose를 이용하여 Wazuh를 설치합니다.

version: '3.9'
services:
  wazuh:
    image: wazuh/wazuh:latest
    ports:
      - "1514:1514"
      - "1515:1515"
      - "55000:55000"
    volumes:
      - wazuh_data:/var/ossec/data
    environment:
      - "WAZUH_MANAGER=yes"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.7.0
    environment:
      - "discovery.type=single-node"

  kibana:
    image: docker.elastic.co/kibana/kibana:8.7.0
    ports:
      - "5601:5601"
    environment:
      - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"

4.2 SecureCodeBox와 Wazuh 통합

Webhook 설정

SecureCodeBox의 values.yaml 파일에서 Webhook을 설정합니다.

hooks:
  - type: http
    url: "http://your-wazuh-instance:55000"
    headers:
      - name: "Content-Type"
        value: "application/json"

Wazuh에서 결과 수집 설정

wazuh.yml 파일을 수정하여 SecureCodeBox의 스캔 결과를 수집하도록 설정합니다.

remote:
  elasticsearch:
    hosts:
      - "http://elasticsearch:9200"
    indices:
      - "securecodebox-results-*"

5. 통합 관리 및 운영

5.1 취약점 스캔 자동화 및 모니터링

  • 스케줄링: SecureCodeBox를 통해 정기적인 취약점 스캔 자동화
  • 실시간 모니터링: Wazuh를 통해 스캔 결과 실시간 모니터링
  • 알림 설정: 취약점 발견 시 즉시 알림 및 자동 조치 설정

5.2 자산 정보 연동

  • Snipe-IT와 연동: 자산 정보를 기반으로 스캔 정책 차등 적용
  • 중요 자산 우선 관리: 중요 서버에 대한 스캔 주기 조정 및 모니터링 강화

5.3 보고서 생성 및 공유

  • 보고서 생성: Wazuh에서 주기적인 보안 상태 보고서 생성
  • 자동 공유: 보고서를 관리 담당자에게 자동으로 공유하여 최신 보안 상태 유지

6. Wazuh에서 SecureCodeBox 스캔 결과 통합

6.1 SecureCodeBox 결과를 Elasticsearch에 저장

  • Elasticsearch 연동 활성화: SecureCodeBox의 values.yaml에서 설정
    hooks:
      active: true
      elasticsearch:
        enabled: true
        host: "http://elasticsearch:9200"
        index: "securecodebox-results"

6.2 Wazuh와 Elasticsearch 연동

  • Wazuh 설정 파일 수정: wazuh.yml
    remote:
      elasticsearch:
        hosts:
          - "http://elasticsearch:9200"
        indices:
          - "securecodebox-results-*"

6.3 대시보드 구성

  • Kibana 대시보드에서 시각화: SecureCodeBox 스캔 결과를 Wazuh 대시보드에 통합하여 시각화

7. 보안 설정 준수 여부 체크 스크립트 통합

7.1 스크립트 준비 및 설정

  • 스크립트 작성: 보안 설정 준수 여부를 체크하는 스크립트 작성
  • Wazuh 규칙 설정: /var/ossec/etc/ossec.conf 파일에서 스크립트 실행 설정
    <command>
      <name>check_security_compliance</name>
      <executable>/path/to/your/script.sh</executable>
      <expect>regex_pattern_to_match_output</expect>
      <timeout>60</timeout>
    </command>

7.2 규칙 파일 수정

  • 규칙 추가: /var/ossec/ruleset/rules/local_rules.xml
    <group name="syscheck,security_compliance">
      <rule id="100001" level="10">
        <decoded_as>command</decoded_as>
        <description>Security compliance check result</description>
        <group>syscheck,security_compliance</group>
        <options>no_full_log</options>
        <match>regex_pattern_to_match_output</match>
      </rule>
    </group>

8. 항목별 결과 식별 및 관리

8.1 스크립트 결과 포맷 설정

  • 유니크 ID 사용: 각 체크 항목에 유니크한 ID 부여
  • 결과 출력 형식: CHECK_유니크ID: true/false - 세부내용

8.2 Wazuh 규칙 파일에 반영

  • 규칙 정의: 각 항목별로 규칙을 설정하여 정상/비정상 식별
    <group name="syscheck,security_compliance">
      <rule id="100001" level="5">
        <decoded_as>command</decoded_as>
        <description>Security Compliance - CHECK_001</description>
        <group>syscheck,security_compliance</group>
        <options>no_full_log</options>
        <match>CHECK_001: false</match>
      </rule>
      <!-- 추가 항목 규칙 -->
    </group>

8.3 대시보드에서 결과 확인

  • 이벤트 모니터링: Wazuh 대시보드에서 각 항목별 이벤트 확인
  • 상세 내용 확인: 비정상 항목에 대한 세부 사항 파악

9. SCA 모듈을 통한 커스텀 스크립트 통합

9.1 SCA 정책 파일 생성

  • 정책 파일 작성: /var/ossec/ruleset/sca/custom_sca_policy.yml
    policy:
      - name: "Custom Security Compliance Checks"
        id: 1001
        description: "Checks the security compliance using custom scripts"
        condition: and
        rules:
          - id: 100101
            description: "Custom Check 1 - Example"
            command: "/path/to/your/script.sh"
            regexp: "^CHECK_001: true"
            output: "Passed"
            score: 100
            remediation: "Check the configuration for compliance with security policies."
        interval: 1h

9.2 정책 파일 적용

  • SCA 모듈 설정: /var/ossec/etc/ossec.conf
    <sca>
      <enabled>yes</enabled>
      <policy>custom_sca_policy.yml</policy>
    </sca>
  • 에이전트 재시작
sudo systemctl restart wazuh-agent

9.3 결과 확인 및 활용

  • SCA 결과 확인: Wazuh 대시보드에서 Passed, Failed 상태 확인
  • 점수화 및 조치: 각 항목별 점수화로 보안 상태 평가

10. FIM(File Integrity Monitoring) 소개

10.1 FIM의 역할

  • 파일 무결성 모니터링: 중요한 파일 및 디렉터리의 변경 사항 추적
  • 실시간 경고: 무결성 침해 시 즉시 알림
  • 변경 이력 기록: 변경 사항 로그 기록으로 감사 및 추적 가능

10.2 FIM 설정 방법

  • 설정 파일 편집: /var/ossec/etc/ossec.conf
    <syscheck>
      <frequency>3600</frequency>
      <directories check_all="yes">/etc,/usr/bin,/usr/sbin,/bin,/sbin</directories>
      <realtime>
        <directories>/etc,/usr/bin,/usr/sbin,/bin,/sbin</directories>
      </realtime>
      <report_changes diff="yes">/etc,/usr/bin,/usr/sbin,/bin,/sbin</report_changes>
    </syscheck>
  • 에이전트 재시작
sudo systemctl restart wazuh-agent

10.3 활용 사례

  • 랜섬웨어 탐지
  • 규정 준수
  • 보안 사고 조사

11. Wazuh를 통한 iptables 룰셋 수집

11.1 SCA 룰셋 설정 파일 작성

  • 파일 생성: /var/ossec/ruleset/sca/iptables_rules.yml
    ---
    id: 10001
    title: "iptables rules collection"
    description: "Collect and analyze iptables ruleset"
    check_type: "script"
    interval: "1h"
    condition: "any"
    
    rules:
      - id: 10001
        title: "Collect iptables rules"
        description: "Retrieve the current iptables ruleset"
        command: "iptables-save"
        field: "iptables.rules"
        type: "command"

11.2 에이전트 설정

  • SCA 모듈 설정: /var/ossec/etc/ossec.conf
    <sca>
      <enabled>yes</enabled>
      <scan_on_start>yes</scan_on_start>
      <interval>1h</interval>
      <directories>
        <directory>/var/ossec/ruleset/sca</directory>
      </directories>
    </sca>

12. Wazuh에서 Osquery 활용

12.1 Osquery 설치 및 설정

  • Osquery 설치
sudo apt-get install osquery
  • Osquery 설정 파일: /etc/osquery/osquery.conf
    {
      "options": {
        "config_plugin": "filesystem",
        "logger_plugin": "filesystem"
      },
      "schedule": {
        "system_info": {
          "query": "SELECT * FROM system_info;",
          "interval": 3600
        }
      }
    }

12.2 Wazuh에 Osquery 통합

  • Wazuh 설정: /var/ossec/etc/ossec.conf
    <osquery>
      <enabled>yes</enabled>
      <run_on_start>yes</run_on_start>
      <frequency>3600</frequency>
      <timeout>300</timeout>
      <queue_size>5000</queue_size>
      <osquery_db_path>/var/osquery/osquery.db</osquery_db_path>
      <log_path>/var/log/osquery/osqueryd.results.log</log_path>
    </osquery>

12.3 룰셋 배포를 통한 쿼리 관리

  • 룰셋 정의: /var/ossec/etc/rules/local_rules.xml
    <group name="osquery,">
      <rule id="100001" level="3">
        <decoded_as>osquery</decoded_as>
        <description>Osquery result collection</description>
        <group>osquery</group>
      </rule>
    </group>

13. 리스닝 포트 및 데몬 정보 수집

13.1 Osquery 쿼리 설정

  • 쿼리 정의: /etc/osquery/osquery.conf
    {
      "schedule": {
        "listening_ports": {
          "query": "SELECT DISTINCT port, protocol, address, pid FROM listening_ports;",
          "interval": 3600
        },
        "processes": {
          "query": "SELECT pid, name, path FROM processes;",
          "interval": 3600
        }
      }
    }

13.2 Wazuh 대시보드에서 가시화

  • 필드 추가: Kibana의 Index Pattern 업데이트
  • 데이터 시각화: Discover 또는 Visualize 메뉴 활용

14. Kibana에 OWASP 관련 탭 추가

14.1 개발 환경 설정

  • Node.js 설치
  • Kibana 소스 코드 다운로드 및 설정
    git clone https://github.com/elastic/kibana.git
    cd kibana
    yarn kbn bootstrap

14.2 플러그인 생성

yarn plugin-generator
  • 플러그인 이름: owasp_dashboard

14.3 플러그인 구조 및 코드 작성

  • 프론트엔드 구성: public/application.tsx
  • 백엔드 구성: server/routes.ts

14.4 플러그인 빌드 및 실행

yarn build
yarn start

Snipe-IT, SecureCodeBox, 그리고 Wazuh를 통합하여 서버 및 웹사이트의 취약점 관리와 자산 관리 방안을 구축하는 방법입니다. 이 통합 솔루션을 통해 조직의 보안 상태를 실시간으로 모니터링하고, 자동화된 취약점 관리를 구현하여 보안 수준을 향상시킬 수 있습니다.

728x90

댓글