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

Audit 시스템과 Osquery의 호환성 및 운영 방법

by 날으는물고기 2024. 8. 5.

Audit 시스템과 Osquery의 호환성 및 운영 방법

Auditing System Events in Linux - Selectel Blog

Linux 시스템에서 Audit 시스템은 단일 프로세스만이 Audit 서브시스템을 제어할 수 있습니다. 일반적으로 auditd가 이를 수행하지만, osquery도 이 기능을 사용할 수 있습니다. 만약 auditd가 이미 시스템에서 활성화되어 있다면, osquery는 Audit 서브시스템을 제어할 수 없습니다. 따라서 osquery를 사용하려면 auditd를 비활성화해야 합니다.

현재 Audit 시스템 확인 및 비활성화

  1. Audit 시스템 상태 확인
    auditctl -s
    • 이 명령어는 현재 Audit 서브시스템의 상태를 보여줍니다. 여기에서 pid 값을 확인할 수 있습니다.
  2. Auditd 프로세스 확인
    ps -aux | grep auditd
    • 현재 auditd 프로세스가 실행 중인지 확인합니다.
  3. Auditd 서비스 중지:
    systemctl stop auditd
    • auditd 서비스를 중지합니다.
  4. Auditd 서비스 비활성화
    systemctl disable auditd
    • auditd 서비스를 부팅 시 자동으로 시작되지 않도록 설정합니다.
  5. Audit 규칙 삭제
    auditctl -D
    • 모든 Audit 규칙을 삭제합니다.

osquery 설정 및 운영

  1. osquery 설치
    yum install osquery
    • osquery를 설치합니다.
  2. osquery 설정 파일 편집
    vi /etc/osquery/osquery.flags
    • osquery 설정 파일을 편집하여 Audit 서브시스템을 사용하도록 설정합니다.
      예를 들어, 다음과 같은 설정을 추가합니다.
      --disable_audit=false
      --audit_allow_config=true
  3. osqueryd 서비스 설정
    systemctl daemon-reload systemctl enable osqueryd systemctl start osqueryd
    • 시스템 데몬을 다시 로드하고, osqueryd 서비스를 부팅 시 자동으로 시작되도록 설정하며, osqueryd 서비스를 시작합니다.
  4. osquery 상태 확인
    systemctl status osqueryd
    • osqueryd 서비스가 정상적으로 실행되고 있는지 확인합니다.
  5. 로그 파일 확인
    grep osquery /var/log/messages
    • osquery 관련 로그 파일을 확인하여 에러가 없는지 확인합니다.

osquery 운영을 위한 추가 설정

  • 실시간 이벤트 로깅 설정
    osquery는 실시간으로 이벤트를 로깅할 수 있도록 구성할 수 있습니다. 이를 위해서는 osquery.conf 파일에 적절한 설정을 추가해야 합니다.
  • osquery.conf 설정 예시
    {
      "options": {
        "audit_allow_config": "true",
        "audit_allow_sockets": "true"
      },
      "schedule": {
        "example_schedule": {
          "query": "SELECT * FROM processes;",
          "interval": 60
        }
      },
      "decorators": {
        "load": [
          "SELECT uuid AS host_uuid FROM system_info;",
          "SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
        ]
      },
      "packs": {
        "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf"
      }
    }
    • options 섹션에서 Audit 관련 설정을 추가합니다.
    • schedule 섹션에서 주기적으로 실행할 쿼리를 설정합니다.
    • decorators 섹션에서 시스템 정보와 사용자 정보를 추가합니다.
  • osqueryd 재시작
    systemctl restart osqueryd
    • 설정 파일을 변경한 후 osqueryd 서비스를 재시작하여 변경사항을 적용합니다.

 

이렇게 하면 auditd 대신 osquery를 사용하여 시스템의 보안 이벤트를 모니터링할 수 있습니다. 필요한 경우, osquery의 다양한 기능을 활용하여 보다 세밀한 보안 모니터링을 수행할 수 있습니다.

System Auditing - Red Hat Product Documentation

EOS(End of Support) 버전의 Linux에 직접 osquery를 설치하는 데 어려움이 있는 경우, Docker를 이용해 osquery 컨테이너를 실행하는 방법을 고려할 수 있습니다. 이를 통해 호스트 노드의 audit와 연동하여 필요한 보안 로그를 수집할 수 있습니다. 아래는 이를 구현하기 위한 개요와 단계입니다.

Docker로 osquery 컨테이너 실행 및 호스트 노드와 연동

1. osquery Docker 이미지 실행

osquery의 Docker 이미지를 이용하여 컨테이너를 실행합니다. 공식 osquery Docker 이미지는 없지만, community에서 제공하는 이미지를 사용할 수 있습니다. 다음은 예시 명령어입니다.

docker run --name osquery \
  --privileged \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /etc:/etc \
  --volume /usr:/usr \
  --volume /var:/var \
  --volume /proc:/host/proc:ro \
  --volume /sys:/sys \
  --volume /tmp:/tmp \
  -d \
  <osquery-docker-image>

위 명령어는 호스트 파일 시스템의 여러 디렉토리를 컨테이너 내부에 마운트하여, 호스트의 데이터를 osquery가 접근할 수 있도록 합니다. <osquery-docker-image> 부분에는 사용할 Docker 이미지의 이름을 입력합니다.

 

2. osquery 설정

컨테이너 내부에서 osquery를 설정합니다. osquery 설정 파일 (osquery.conf)을 작성하고, 이를 사용하여 필요한 쿼리를 실행하도록 합니다. 예를 들어, 호스트의 audit 로그를 수집하는 설정은 다음과 같이 작성할 수 있습니다.

{
  "options": {
    "disable_audit": false,
    "audit_persist": true,
    "audit_allow_config": true
  },
  "schedule": {
    "audit_events": {
      "query": "SELECT * FROM audit_events",
      "interval": 60
    }
  }
}

3. osqueryd 실행

컨테이너 내부에서 osqueryd를 실행하여 설정된 쿼리를 주기적으로 실행합니다. 실행 명령어는 다음과 같습니다.

osqueryd --config_path=/path/to/osquery.conf --disable_database=false --logger_plugin=syslog --utc

위 명령어에서 /path/to/osquery.conf 부분에는 설정 파일의 경로를 입력합니다.

 

4. 호스트 노드와 연동

osquery 컨테이너가 호스트의 audit 로그를 읽고 쿼리하도록 설정되었는지 확인합니다. 이를 통해 호스트 노드에서 발생하는 audit 이벤트를 osquery가 수집하고 분석할 수 있습니다.

 

이 방법을 통해 EOS 버전의 Linux에서도 Docker를 이용하여 osquery를 효과적으로 실행하고, 호스트 노드의 audit와 연동할 수 있습니다. osquery 컨테이너에서 호스트 노드의 audit 로그와 커널 이벤트에 접근하려면, 적절한 볼륨 마운트와 컨테이너 설정이 필요합니다. 아래는 호스트 노드의 audit 로그와 커널 이벤트에 접근하기 위한 단계입니다.

 

5. Audit 로그와 커널 이벤트 접근을 위한 볼륨 마운트

호스트 노드의 audit 로그와 커널 이벤트를 osquery 컨테이너에서 접근하기 위해서는 다음과 같은 디렉토리를 컨테이너 내부에 마운트해야 합니다.

  • /var/log/audit: audit 로그 파일이 위치한 디렉토리
  • /proc: 커널 관련 정보를 담고 있는 가상 파일 시스템

다음은 Docker 실행 명령어 예시입니다.

docker run --name osquery \
  --privileged \
  --volume /var/log/audit:/var/log/audit:ro \
  --volume /proc:/host/proc:ro \
  --volume /etc:/etc \
  --volume /usr:/usr \
  --volume /var:/var \
  --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
  -d \
  <osquery-docker-image>

여기서 각 볼륨 마운트의 의미는 다음과 같습니다.

  • /var/log/audit:/var/log/audit:ro: 호스트의 audit 로그 파일을 읽기 전용으로 컨테이너에 마운트합니다.
  • /proc:/host/proc:ro: 호스트의 프로세스 정보와 시스템 정보를 컨테이너에서 읽기 전용으로 접근할 수 있도록 마운트합니다.
  • 기타 시스템 디렉토리(/etc, /usr, /var, /sys/fs/cgroup)를 마운트하여 필요한 시스템 파일에 접근할 수 있도록 합니다.

 

6. 컨테이너 설정 및 osquery 구성

osquery가 호스트의 audit 로그와 커널 이벤트를 읽을 수 있도록 설정 파일을 구성해야 합니다. 이를 위해 osquery 설정 파일 (osquery.conf)을 다음과 같이 작성할 수 있습니다.

{
  "options": {
    "disable_audit": false,
    "audit_persist": true,
    "audit_allow_config": true,
    "audit_allow_sockets": true,
    "audit_allow_fim": true
  },
  "schedule": {
    "audit_events": {
      "query": "SELECT * FROM audit_events",
      "interval": 60
    },
    "file_events": {
      "query": "SELECT * FROM file_events",
      "interval": 60
    }
  },
  "file_paths": {
    "audit": [
      "/var/log/audit/audit.log"
    ]
  }
}

주요 옵션 설명

  • disable_audit: osquery의 audit 기능을 활성화합니다.
  • audit_persist: auditd를 통해 수집된 로그를 지속적으로 유지합니다.
  • audit_allow_config, audit_allow_sockets, audit_allow_fim: audit 관련 다양한 설정을 허용합니다.

 

7. osqueryd 실행

컨테이너 내부에서 osqueryd를 실행하여 설정된 쿼리를 주기적으로 실행합니다.

osqueryd --config_path=/path/to/osquery.conf --disable_database=false --logger_plugin=syslog --utc
  • --privileged 옵션: 컨테이너가 호스트 시스템의 여러 자원에 접근할 수 있도록 권한을 부여합니다.
  • /sys/fs/cgroup:/sys/fs/cgroup:ro: cgroup 정보를 읽기 위해 마운트합니다.

 

위의 설정을 통해 osquery 컨테이너가 호스트 노드의 audit 로그와 커널 이벤트에 접근할 수 있습니다. 적절한 볼륨 마운트와 설정 파일을 사용하여 보안 로그를 수집하고 분석할 수 있습니다. 추가적인 보안 설정이나 최적화가 필요할 경우, 각 환경에 맞게 조정이 필요할 수 있습니다.

 

Linux의 auditd와 유사한 기능을 Windows 환경에서 구현하려면, Windows Auditing 기능을 활용할 수 있습니다. Windows Auditing은 시스템 이벤트 로그를 통해 다양한 보안 관련 활동을 모니터링하고 기록합니다. 이를 설정하고 활용하는 방법입니다.

Windows Auditing 설정 및 활용 방법

1. 로컬 보안 정책을 통한 감사 정책 설정

  1. 로컬 보안 정책 편집기 열기
    • Win + R 키를 눌러 Run 창을 열고 secpol.msc를 입력하여 로컬 보안 정책 편집기를 엽니다.
  2. 감사 정책 설정
    • 로컬 보안 정책 편집기에서 로컬 정책 > 감사 정책으로 이동합니다.
    • 다음과 같은 항목들을 설정할 수 있습니다.
      • 로그온 이벤트 감사: 사용자가 시스템에 로그온하거나 로그오프할 때 이벤트를 기록합니다.
      • 계정 로그온 이벤트 감사: 네트워크 상의 다른 시스템에서 발생하는 로그온 이벤트를 기록합니다.
      • 개체 접근 감사: 파일, 폴더, 레지스트리 키 등의 접근을 감사합니다.
      • 정책 변경 감사: 시스템 보안 설정의 변경을 감사합니다.
      • 권한 사용 감사: 사용자가 특권을 사용할 때 이벤트를 기록합니다.
  3. 감사 항목 선택
    • 설정할 항목을 더블 클릭하고, 성공 및 실패 이벤트를 감사하도록 선택합니다.

2. 특정 파일이나 폴더 감사 설정

  1. 파일 탐색기에서 감사 설정
    • 감사할 파일이나 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
    • 보안 탭에서 고급 버튼을 클릭합니다.
    • 감사 탭을 선택하고, 추가 버튼을 클릭합니다.
    • 감사할 주체(예: Everyone)를 선택하고, 감사할 권한을 설정합니다.

3. 이벤트 뷰어를 통한 감사 로그 확인

  1. 이벤트 뷰어 열기
    • Win + R 키를 눌러 Run 창을 열고 eventvwr.msc를 입력하여 이벤트 뷰어를 엽니다.
  2. 감사 로그 확인
    • Windows 로그 > 보안에서 설정된 감사 이벤트를 확인할 수 있습니다.

윈도우 이벤트 포워딩 및 중앙 관리

여러 대의 Windows 시스템에서 발생하는 이벤트를 중앙에서 관리하려면 Windows Event Forwarding(WEF) 기능을 사용할 수 있습니다. 이를 통해 모든 감사 로그를 중앙 서버에서 수집하고 분석할 수 있습니다.

1. Windows Event Forwarding 설정

  1. 구독 설정
    • 중앙 서버에서 이벤트 뷰어를 열고, 구독을 설정하여 클라이언트 시스템으로부터 이벤트를 수집합니다.
    • Forwarded Events 로그에서 수집된 이벤트를 확인할 수 있습니다.
  2. 그룹 정책을 통한 설정
    • 그룹 정책 관리 콘솔(GPMC)을 열어, 컴퓨터 구성 > 정책 > 관리 템플릿 > Windows 구성 요소 > Windows Event Collector에서 구독 관리자 자동 구독 설정을 구성합니다.

추가 도구

  • Sysmon: Microsoft의 Sysinternals 도구로, 시스템 활동을 상세히 모니터링하고 이벤트 로그에 기록합니다. Sysmon을 활용하면 프로세스 생성, 네트워크 연결, 파일 변경 등 다양한 보안 이벤트를 모니터링할 수 있습니다.
# Sysmon 설치 및 설정 예제
.\Sysmon.exe -accepteula -i sysmonconfig.xml
  • Splunk, ELK Stack: 이러한 로그 관리 도구를 사용하면 Windows 이벤트 로그를 분석하고 시각화할 수 있습니다.

 

Windows 환경에서 Linux의 auditd와 유사한 기능을 구현하려면 Windows Auditing 기능과 이벤트 포워딩 기능을 활용하면 됩니다. 추가로, Sysmon과 같은 도구를 사용하여 보다 상세한 이벤트 모니터링이 가능하며, Splunk나 ELK Stack과 같은 로그 분석 도구를 활용하여 중앙에서 로그를 관리하고 분석할 수 있습니다.

 

사용자 Windows PC에 Auditing 및 이벤트 로그 정책을 배포하고 적용하기 위해 배치 파일을 사용하는 방법은 매우 유용합니다. 이 방법을 통해 일관된 설정을 빠르게 적용할 수 있습니다. 아래에 배치 파일을 통해 Windows Auditing 설정을 자동화하는 방법입니다.

1. 감사 정책 설정을 위한 배치 파일

감사 정책 설정을 위한 배치 파일을 작성합니다. 이 예제에서는 auditpol 명령어를 사용하여 감사 정책을 설정합니다.

@echo off
REM 감사 정책 설정

REM 계정 로그온 이벤트 감사
auditpol /set /subcategory:"Logon" /success:enable /failure:enable

REM 개체 접근 감사
auditpol /set /subcategory:"File System" /success:enable /failure:enable
auditpol /set /subcategory:"Registry" /success:enable /failure:enable

REM 정책 변경 감사
auditpol /set /subcategory:"Audit Policy Change" /success:enable /failure:enable
auditpol /set /subcategory:"Authentication Policy Change" /success:enable /failure:enable

REM 권한 사용 감사
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable

echo 감사 정책 설정이 완료되었습니다.
pause

2. 특정 파일 및 폴더 감사 설정을 위한 PowerShell 스크립트

감사 정책을 더 세밀하게 설정하기 위해 PowerShell 스크립트를 함께 사용할 수 있습니다. 아래는 특정 파일이나 폴더에 대한 감사 설정을 적용하는 PowerShell 스크립트 예제입니다.

# Set-AuditPolicy.ps1
param (
    [string]$path = "C:\Path\To\Your\Folder",
    [string]$principal = "Everyone"
)

# Check if the path exists
if (-Not (Test-Path $path)) {
    Write-Host "The specified path does not exist."
    exit 1
}

# Get the security descriptor for the path
$acl = Get-Acl -Path $path

# Define the audit rule
$auditRule = New-Object System.Security.AccessControl.FileSystemAuditRule(
    $principal,
    "FullControl",
    [System.Security.AccessControl.InheritanceFlags]::ContainerInherit,
    [System.Security.AccessControl.PropagationFlags]::None,
    [System.Security.AccessControl.AuditFlags]::Success -bor [System.Security.AccessControl.AuditFlags]::Failure
)

# Add the audit rule to the security descriptor
$acl.AddAuditRule($auditRule)

# Set the updated security descriptor for the path
Set-Acl -Path $path -AclObject $acl

Write-Host "Audit policy has been set for $path."

3. 배치 파일에서 PowerShell 스크립트 호출

작성한 PowerShell 스크립트를 배치 파일에서 호출하여 함께 실행될 수 있도록 합니다.

@echo off
REM 감사 정책 설정

REM 계정 로그온 이벤트 감사
auditpol /set /subcategory:"Logon" /success:enable /failure:enable

REM 개체 접근 감사
auditpol /set /subcategory:"File System" /success:enable /failure:enable
auditpol /set /subcategory:"Registry" /success:enable /failure:enable

REM 정책 변경 감사
auditpol /set /subcategory:"Audit Policy Change" /success:enable /failure:enable
auditpol /set /subcategory:"Authentication Policy Change" /success:enable /failure:enable

REM 권한 사용 감사
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable

REM PowerShell 스크립트 호출
powershell -ExecutionPolicy Bypass -File Set-AuditPolicy.ps1 -path "C:\Path\To\Your\Folder" -principal "Everyone"

echo 감사 정책 설정이 완료되었습니다.
pause

4. 배포 및 실행

  1. 위 배치 파일과 PowerShell 스크립트를 적절한 경로에 저장합니다.
  2. 사용자에게 배치 파일을 제공하고 실행하도록 안내합니다. 배치 파일을 실행하면 감사 정책이 자동으로 설정되고, 지정된 파일이나 폴더에 대한 감사 설정도 적용됩니다.

이 방식은 간단하면서도 효율적으로 감사 정책을 일관되게 적용할 수 있는 방법입니다. 추가로, 배포 시 그룹 정책이나 SCCM 같은 중앙 관리 도구를 사용하면 더 효과적일 수 있지만, 배치 파일을 통한 방식은 별도의 도구 없이도 쉽게 적용할 수 있습니다.

 

스크립트를 사용하여 이벤트 로그를 주기적으로 수집하고 중앙 서버로 전송하는 방법도 가능합니다. 이 방법은 스케줄러를 통해 스크립트를 주기적으로 실행하여 새로운 이벤트 로그를 중앙 서버로 전송하는 방식입니다. 아래에 PowerShell 스크립트를 사용하여 이벤트 로그를 수집하고 중앙 서버로 전송하는 방법입니다.

1. 이벤트 로그를 수집하는 PowerShell 스크립트

이벤트 로그를 수집하고 파일로 저장한 후 이를 중앙 서버로 전송하는 PowerShell 스크립트를 작성합니다.

# Collect-EventLogs.ps1
param (
    [string]$LogName = "Security",
    [string]$DestinationPath = "\\CENTRAL_SERVER\SharedFolder\",
    [int]$DaysToCollect = 1
)

# Get the current date and time
$currentDate = Get-Date
$startDate = $currentDate.AddDays(-$DaysToCollect)

# Collect the event logs
$events = Get-WinEvent -LogName $LogName -FilterHashtable @{StartTime=$startDate}

# Save the event logs to a file
$eventFileName = "EventLog_" + $currentDate.ToString("yyyyMMdd_HHmmss") + ".evtx"
$eventFilePath = "$DestinationPath\$eventFileName"

# Create the destination folder if it does not exist
if (-not (Test-Path -Path $DestinationPath)) {
    New-Item -Path $DestinationPath -ItemType Directory
}

# Save the collected events
$events | Export-Clixml -Path $eventFilePath

Write-Host "Event logs have been collected and saved to $eventFilePath."

2. 스크립트를 스케줄러에 등록

PowerShell 스크립트를 Windows 작업 스케줄러에 등록하여 주기적으로 실행되도록 설정합니다.

  1. 작업 스케줄러 열기
    • 작업 스케줄러를 엽니다. (taskschd.msc)
  2. 작업 생성
    • 작업 만들기를 선택합니다.
    • 이름과 설명을 입력합니다.
  3. 트리거 설정
    • 트리거 탭에서 새로 만들기를 선택합니다.
    • 주기적으로 실행되도록 일정을 설정합니다. 예를 들어, 매일 특정 시간에 실행되도록 설정합니다.
  4. 동작 설정
    • 동작 탭에서 새로 만들기를 선택합니다.
    • 작업 시작 프로그램으로 powershell.exe를 선택합니다.
    • 인수 추가 부분에 다음을 입력합니다.
      -File "C:\Path\To\Your\Script\Collect-EventLogs.ps1"
  5. 조건 및 설정
    • 조건설정 탭에서 필요한 조건을 설정합니다. 예를 들어, AC 전원에 연결된 경우에만 실행하도록 설정할 수 있습니다.

3. 중앙 서버에서 이벤트 로그 관리

중앙 서버의 공유 폴더에 수집된 이벤트 로그 파일이 저장됩니다. 중앙 서버에서 이 파일들을 분석하고 관리할 수 있습니다. 예를 들어, 중앙 서버에서 수집된 이벤트 로그를 모니터링하는 추가 스크립트를 작성할 수 있습니다.

 

위 방법을 통해 Windows PC에서 생성된 이벤트 로그를 주기적으로 수집하고 중앙 서버로 전송할 수 있습니다. PowerShell 스크립트를 작성하여 이벤트 로그를 수집하고, Windows 작업 스케줄러에 등록하여 주기적으로 실행되도록 설정함으로써 별도의 도구 없이도 효과적으로 이벤트 로그를 중앙에서 관리할 수 있습니다.

728x90

댓글