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

macOS 환경 osqueryi 설치 및 호스트 모니터링 보안 분석

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

macOS 환경 osqueryi 설치 및 호스트 모니터링 보안 분석

FleetDM을 통해 osquery 패키지를 설치한 경우, 기본적으로 osqueryi 인터랙티브 쉘은 포함되지 않을 수 있습니다. 이를 해결하기 위해서는 osqueryi를 별도로 설치해야 합니다. 아래는 macOS에서 osqueryi를 설치하는 방법입니다.

1. Homebrew 설치

Homebrew가 설치되어 있지 않다면, 먼저 Homebrew를 설치해야 합니다. 터미널을 열고 다음 명령어를 입력합니다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. osquery 설치

Homebrew를 이용하여 osquery를 설치합니다. 이 과정에서 osqueryi도 함께 설치됩니다.

brew install osquery

3. osqueryi 실행

설치가 완료되면 osqueryi를 실행하여 쿼리를 수행할 수 있습니다.

osqueryi

이제 osqueryi 인터랙티브 쉘을 통해 직접 쿼리를 실행해보세요.

Homebrew를 사용하지 않고 직접 osquery 패키지를 다운로드하여 설치하고자 한다면, osquery 공식 GitHub 페이지에서 최신 릴리즈를 다운로드할 수 있습니다.

  1. osquery GitHub 릴리즈 페이지로 이동합니다.
  2. macOS용 패키지를 다운로드합니다.
  3. 다운로드한 패키지를 설치합니다.

Homebrew 사용하는 경우 자주 업데이트해 주는 것이 좋습니다. 이를 통해 최신 패키지와 보안 업데이트를 받을 수 있습니다. Homebrew 업데이트 방법은 간단합니다. 터미널에서 다음 명령어를 실행하면 됩니다.

1. Homebrew 업데이트

brew update

이 명령어는 Homebrew 자체를 업데이트합니다.

2. 설치된 패키지 업데이트

brew upgrade

이 명령어는 Homebrew를 통해 설치된 모든 패키지를 최신 버전으로 업그레이드합니다.

3. 불필요한 파일 정리

업데이트 후, 불필요한 파일을 정리하여 디스크 공간을 확보할 수 있습니다.

brew cleanup

이제 Homebrew와 설치된 패키지들이 최신 상태로 유지됩니다. Homebrew를 사용하여 설치된 패키지 목록을 확인하고, 버전 상태와 최신 여부를 검사하며 불필요한 패키지를 삭제하는 방법은 다음과 같습니다.

설치된 패키지 목록 확인

brew list

설치된 패키지의 버전 상태와 최신 여부 확인

brew outdated

이 명령어는 설치된 패키지 중 최신 버전이 아닌 것들을 표시합니다.

불필요한 패키지 삭제

불필요한 패키지를 삭제하기 위해서는 다음 명령어를 사용합니다.

brew uninstall <패키지명>

예를 들어, osquery 패키지를 삭제하려면 다음과 같이 입력합니다.

brew uninstall osquery

Homebrew의 유용한 명령어들

Homebrew를 통해 설치된 패키지를 확인하고, 오래된 패키지를 업그레이드하며, 불필요한 패키지를 삭제하는 전체 프로세스는 다음과 같습니다.

  1. Homebrew 업데이트: brew update
  2. 설치된 패키지 목록 확인: brew list
  3. 최신 버전이 아닌 패키지 확인: brew outdated
  4. 모든 패키지 업그레이드: brew upgrade
  5. 특정 패키지 정보 확인: brew info <패키지명>
  6. 불필요한 패키지 삭제: brew uninstall <패키지명>
  7. 불필요한 파일 정리: brew cleanup

이 과정을 통해 Homebrew와 패키지들을 효율적으로 관리할 수 있습니다.

 

이제 설치된 osqueryi를 실행할 때 경로를 지정하여 osquery.db 파일에 접근할 수 있습니다. osquery는 기본적으로 데이터베이스 파일을 사용하여 상태 및 이벤트를 저장하며, 이 경로를 명시적으로 지정할 수 있습니다.

osqueryi에서 데이터베이스 경로 지정 방법

osqueryi를 실행할 때 --database_path 플래그를 사용하여 osquery.db 파일의 경로를 지정할 수 있습니다. 예를 들어, osquery.db 파일이 /path/to/custom/db에 위치하고 있다면 다음과 같이 osqueryi를 실행할 수 있습니다.

osqueryi --database_path=/path/to/custom/db

이 명령어는 지정된 경로에 있는 데이터베이스 파일을 사용하여 osqueryi를 실행합니다.

FleetDM에 의해 설정된 osquery.db 경로 찾기

FleetDM에 의해 생성된 osquery.db 파일의 경로를 확인하려면 FleetDM 설정 파일이나 배포 스크립트를 확인해야 합니다. FleetDM은 일반적으로 osquery 설정 파일(osquery.flags 또는 osquery.conf)을 통해 데이터베이스 경로를 지정합니다. 예를 들어, osquery.flags 파일에서 데이터베이스 경로를 찾을 수 있습니다.

--database_path=/path/to/custom/db

이 경로를 확인한 후, osqueryi 실행 시 해당 경로를 지정해 주시면 됩니다.

  1. osquery.flags 파일에서 경로 확인: --database_path=/usr/local/var/osquery/osquery.db
  2. osqueryi 실행 시 경로 지정: osqueryi --database_path=/usr/local/var/osquery/osquery.db

osquery 설정 파일 예시

--config_path=/etc/osquery/osquery.conf
--database_path=/usr/local/var/osquery/osquery.db
--extensions_socket=/var/osquery/osquery.em
--extensions_autoload=/etc/osquery/extensions.load
--logger_path=/var/log/osquery
--disable_logging=false

이와 같이 설정된 경로를 사용하여 osqueryi를 실행하면 데이터베이스 파일에 접근할 수 있습니다.

 

osquery에는 다양한 테이블이 제공되는데 process_events 테이블과 같은 경우 osquery의 이벤트 기반 테이블 중 하나로, 시스템에서 발생하는 프로세스 이벤트를 기록합니다. 이 테이블을 활성화하려면 osquery의 이벤트 서브시스템을 활성화해야 합니다. osquery 설정 파일을 사용하여 이벤트 기반 테이블을 활성화할 수 있습니다. osquery 설정 파일(osquery.conf 또는 osquery.flags)을 수정하여 이벤트 서브시스템을 활성화하는 방법을 설명합니다.

1. osquery 설정 파일 찾기

osquery 설정 파일의 위치는 일반적으로 /etc/osquery/osquery.conf 또는 /usr/local/etc/osquery/osquery.conf입니다. 설정 파일이 없다면 직접 생성할 수도 있습니다.

2. 설정 파일 수정

osquery.conf 예시

설정 파일에 다음 설정을 추가하여 이벤트 기반 테이블을 활성화합니다.

{
  "options": {
    "disable_events": false,
    "disable_audit": false,
    "audit_allow_config": true,
    "audit_allow_sockets": true,
    "audit_persist": true,
    "enable_monitor": true,
    "event_pubsub_expiry": "3600"
  },
  "schedule": {
    "process_events": {
      "query": "SELECT * FROM process_events",
      "interval": 10
    }
  }
}

osquery.flags 예시

만약 설정 파일로 osquery.flags를 사용하고 있다면, 다음 플래그들을 추가합니다.

--disable_events=false
--disable_audit=false
--audit_allow_config=true
--audit_allow_sockets=true
--audit_persist=true
--enable_monitor=true
--event_pubsub_expiry=3600

3. osqueryd 재시작

설정 파일을 수정한 후 osqueryd 데몬을 재시작하여 변경사항을 적용합니다.

sudo launchctl unload /Library/LaunchDaemons/com.facebook.osqueryd.plist
sudo launchctl load /Library/LaunchDaemons/com.facebook.osqueryd.plist

또는 서비스 관리 도구(systemctl, service 등)를 사용하여 osqueryd를 재시작합니다.

sudo systemctl restart osqueryd
# 또는
sudo service osqueryd restart

osqueryi에서 직접 설정 적용

osqueryi에서 직접 설정을 적용할 수도 있습니다. 아래 명령어를 osqueryi 인터페이스에서 실행하여 이벤트 기반 테이블을 활성화합니다.

.osquery --disable_events=false
.osquery --disable_audit=false
.osquery --audit_allow_config=true
.osquery --audit_allow_sockets=true
.osquery --audit_persist=true
.osquery --enable_monitor=true
.osquery --event_pubsub_expiry=3600

설정이 적용된 후 osqueryi에서 process_events 테이블을 쿼리하여 이벤트가 활성화되었는지 확인합니다.

select * from process_events;

이제 이벤트 기반 테이블이 활성화되어 프로세스 이벤트를 기록할 수 있습니다.

Fleet을 사용하여 osquery를 배포할 때 "Orbit"를 사용하는 것은 매우 흔한 접근 방식입니다. Orbit는 osquery 엔드포인트에 대한 운영 및 관리를 용이하게 하는 osquery 런타임 및 자동 업데이트 관리자입니다. 이 도구는 Fleet과 함께 사용되어 osquery 인스턴스의 설치, 업데이트 및 관리를 간소화하고 자동화합니다.

Orbit의 주요 기능

  1. 자동화된 osquery 설치: Orbit는 새로운 시스템에 osquery를 자동으로 설치하고, 필요한 구성 파일을 제공하여 즉시 사용할 수 있도록 합니다.
  2. 업데이트 관리: osquery 버전이 업데이트될 때마다 Orbit는 이러한 업데이트를 자동으로 감지하고 적용하여 보안과 기능성을 최신 상태로 유지합니다.
  3. 설정 관리: Orbit는 Fleet 서버에서 제공하는 구성을 사용하여 osquery의 동작을 관리하고, 이를 통해 중앙에서 엔드포인트의 동작을 조정할 수 있습니다.
  4. 호환성: Orbit는 다양한 운영 체제에서 osquery와 함께 작동하도록 설계되어 있어, Windows, macOS, Linux 등에서 사용할 수 있습니다.
  5. 보안: Orbit는 보안에 중점을 두어 설계되었으며, TLS를 통한 암호화된 통신 및 안전한 업데이트 프로세스를 지원합니다.

Orbit를 사용하면 Fleet과 함께 osquery를 더욱 효율적이고 안전하게 배포하고 관리할 수 있습니다. 이는 특히 대규모 네트워크에서 여러 엔드포인트에 대한 관리를 간소화하는 데 유용합니다. Orbit는 osquery를 자동으로 설치해주는 기능을 제공합니다. 사용자가 별도로 osquery를 설치할 필요 없이 Orbit를 설치하면, Orbit가 자동으로 osquery를 다운로드하고 설치합니다. 이 과정은 엔드포인트에 osquery를 쉽고 일관되게 배포할 수 있게 해줍니다.

 

Orbit는 osquery의 관리와 유지 보수도 간소화하여, osquery 업데이트 및 설정 변경이 필요할 때 이를 자동으로 처리할 수 있도록 돕습니다. 따라서 관리자는 osquery 인스턴스를 수동으로 관리하는 데 드는 시간과 노력을 크게 줄일 수 있습니다. 이는 특히 규모가 크거나 다양한 운영 체제를 사용하는 환경에서 매우 유용합니다.

Orbit 설치 방법

Orbit의 설치 과정은 Fleet 서버에 연결되어 있어야 하며, Fleet 서버의 구성에 따라 설치 절차가 진행됩니다. 아래는 일반적인 Orbit 설치 명령어 예시입니다. 실제 명령어는 사용 중인 Fleet 서버의 설정과 환경에 따라 다를 수 있습니다.

Windows에서의 설치

PowerShell을 사용하여 Windows 시스템에 Orbit를 설치할 수 있습니다. 관리자 권한으로 PowerShell을 열고 다음 명령어를 실행합니다.

Invoke-WebRequest -Uri "https://fleet.example.com/setup/orbit" -OutFile "orbit-setup.ps1"
Set-ExecutionPolicy Unrestricted -Scope Process -Force
.\orbit-setup.ps1

이 스크립트는 Fleet 서버에서 제공하는 URL로부터 설치 스크립트를 다운로드하고, 실행하여 Orbit와 함께 osquery를 설치합니다.

macOS/Linux에서의 설치

터미널을 열고 아래의 명령어를 실행합니다.

curl -L "https://fleet.example.com/setup/orbit" | bash

이 명령어는 Fleet 서버에서 Orbit 설치 스크립트를 다운로드하고, 직접 실행하여 Orbit와 osquery를 설치합니다.

설치 결과 및 osquery 설치 과정

Orbit 설치가 완료되면, 자동으로 osquery도 설치되고, Fleet 서버에 등록됩니다. 설치 후, Orbit는 다음과 같은 작업을 수행합니다.

  1. osquery 설치: Orbit는 osquery의 최신 버전을 다운로드하고 시스템에 설치합니다.
  2. 구성 파일 적용: Fleet 서버로부터 받은 구성 파일을 osquery에 적용합니다. 이 구성 파일은 각 엔드포인트에서 어떤 쿼리를 실행할지, 얼마나 자주 실행할지 등을 지정합니다.
  3. 연결 및 등록: 설치가 완료되면, osquery는 Fleet 서버에 자동으로 연결되어 엔드포인트로 등록됩니다. 이 때부터 Fleet 서버는 해당 엔드포인트의 osquery 인스턴스를 원격으로 관리할 수 있습니다.

설치된 결과는 Fleet의 대시보드에서 확인할 수 있습니다. 엔드포인트가 성공적으로 등록되면, 대시보드에서는 각 엔드포인트의 상태, 실행 중인 쿼리, 수집된 로그 등을 볼 수 있습니다. 이 정보를 통해 네트워크의 보안 상태를 모니터링하고, 필요한 경우 조치를 취할 수 있습니다. Orbit는 osquery의 최신 버전이 나올 때 자동으로 업데이트를 수행할 수 있습니다. 이는 Orbit의 주요 기능 중 하나로, 안정성과 보안을 유지하는 데 중요한 역할을 합니다.

osquery 자동 업데이트 과정

  1. 업데이트 검사: Orbit는 정기적으로 osquery의 새 버전이 있는지를 확인합니다. 이는 Fleet 서버에서 설정된 업데이트 정책에 따라 자동으로 이루어집니다.
  2. 다운로드 및 설치: 새 버전이 발견되면, Orbit는 자동으로 새 버전을 다운로드하고 기존의 osquery 인스턴스를 업데이트합니다. 이 과정은 백그라운드에서 진행되며 사용자의 작업을 방해하지 않습니다.
  3. 재시작 및 적용: 업데이트된 osquery는 필요에 따라 자동으로 재시작될 수 있습니다. 이는 새 버전이 제대로 적용되었는지 확인하기 위함입니다.
  4. 상태 보고: 업데이트의 성공 여부와 새 버전의 상태는 Orbit를 통해 Fleet 서버로 보고됩니다. 관리자는 Fleet 대시보드를 통해 업데이트 상태를 모니터링할 수 있습니다.

명령어 및 상태 확인 예시

실질적인 명령어나 상태 확인은 주로 Fleet 대시보드를 통해 이루어집니다. 하지만, 명령줄 인터페이스(CLI)를 사용하여 로컬에서 osquery의 상태를 확인할 수도 있습니다.

  • osquery 버전 확인: osqueryi --version
    이 명령어는 설치된 osquery의 버전을 확인합니다.
  • osquery 상태 확인: osqueryctl status
    이는 osquery의 실행 상태를 확인하는 데 사용됩니다.
  • osquery 로그 확인: cat /var/log/osquery/osqueryd.results.log
    Fleet 대시보드에서 로그를 확인하거나, 로컬 파일 시스템에서 osquery 로그 파일을 직접 검토할 수 있습니다.

업데이트 관련 설정 변경

Fleet 대시보드를 통해 osquery 업데이트 정책을 구성할 수 있으며, 이 설정은 Orbit에 자동으로 적용됩니다. 예를 들어, 업데이트 주기를 조정하거나 특정 버전으로의 업데이트를 제한할 수 있습니다. Orbit와 osquery의 통합 관리 기능은 대규모 시스템에서 효율적인 업데이트 관리를 가능하게 하여, 시스템의 보안을 강화하고 관리 오버헤드를 최소화합니다.

 

fleetctl package 명령어를 사용하는 것은 Fleet에서 제공하는 fleetctl 도구를 통해 osquery와 Orbit의 설치 패키지를 생성하는 과정입니다. 이 명령어는 사용자의 요구 사항에 맞게 osquery 설치 패키지를 "빌드"하는 것이라고 볼 수 있습니다. 여기서 "빌드"는 소프트웨어 개발에서의 전통적인 의미와는 다소 차이가 있으며, 주로 설치를 위한 패키지를 구성하는 과정을 말합니다.

fleetctl package 명령어의 주요 옵션들

  • --type=deb: 이 옵션은 Debian 계열 Linux 시스템(예: Ubuntu)에서 사용할 수 있는 .deb 패키지 형식을 생성하라는 지시입니다.
  • --enable-scripts: 이 옵션은 설치 과정 중 스크립트 실행을 활성화하여 추가 설정이나 구성 단계를 자동으로 처리하게 합니다.
  • --fleet-desktop: 이 옵션은 Fleet Desktop 애플리케이션을 패키지에 포함시키는 것으로, 사용자가 GUI를 통해 osquery와의 상호작용을 용이하게 할 수 있습니다.
  • --fleet-url=https://fleet.example.com: 이는 Fleet 서버의 URL을 지정하는 것으로, 설치된 osquery 인스턴스가 연결할 Fleet 서버의 주소를 명시합니다.
  • --enroll-secret=3IJQooJx78QY7***************: 이는 osquery 인스턴스가 Fleet 서버에 등록할 때 사용할 "등록 비밀번호"를 지정합니다. 이 비밀번호는 osquery 인스턴스가 Fleet 서버에 안전하게 등록되도록 하는데 필수적입니다.

명령어 실행 결과

이 명령어를 실행하면, 지정된 옵션에 따라 구성된 osquery와 Orbit의 설치 패키지가 생성됩니다. 이 패키지는 다운로드 가능한 파일 형태로 제공되며, 해당 파일을 대상 시스템에 배포하고 설치할 수 있습니다. 설치 과정에서 패키지는 자동으로 osquery를 설치하고, 필요한 스크립트를 실행하여 Fleet 서버에 등록하고 초기 설정을 완료합니다. 이렇게 생성된 패키지는 특히 대규모 배포에 유용하며, 일관된 설치 및 구성을 보장하는 데 도움을 줍니다. 이 방법은 관리자가 수동으로 각 시스템에 osquery와 Orbit를 설치하고 구성하는 데 드는 시간과 노력을 크게 줄여줍니다.

 

Fleet 서버에서 https://fleet.example.com/setup/orbit와 같은 설치 스크립트를 제공하는 것은 일반적으로 Fleet 설치와 구성 과정에서 자동으로 생성되지 않습니다. 이런 종류의 자동 설치 스크립트를 제공하려면, Fleet 관리자가 직접 스크립트를 작성하고 해당 URL을 통해 접근 가능하도록 설정해야 합니다.

스크립트 작성 및 호스팅 과정

  1. 스크립트 작성: 관리자는 osquery와 Orbit를 설치하고 구성하는 bash 스크립트를 작성합니다. 이 스크립트에는 Fleet 서버의 URL, 등록 비밀번호 등 필요한 모든 정보를 포함해야 합니다.
  2. 서버에 스크립트 호스팅: 작성된 스크립트를 웹 서버에 업로드하고, 외부에서 접근 가능하도록 설정합니다. 이 웹 서버는 Fleet 서버와 동일한 서버일 수도 있고, 별도의 웹 호스팅 서비스를 사용할 수도 있습니다.
  3. URL 설정: 스크립트가 호스팅된 URL을 https://fleet.example.com/setup/orbit와 같이 설정하여, 사용자가 쉽게 접근하고 실행할 수 있도록 합니다.

Fleet 패키지 도구 사용

반면에, fleetctl package 명령어는 Fleet이 제공하는 도구로, 설치 패키지를 생성하고 이를 사용하여 osquery와 Orbit를 설치할 수 있게 돕습니다. 이 방법은 스크립트를 직접 작성할 필요 없이, 패키지를 빌드하고 배포하는 데 필요한 모든 구성 옵션을 명령어에 포함시켜 사용하는 것입니다.

 

따라서, 만약 https://fleet.example.com/setup/orbit와 같은 스크립트를 사용하고 싶다면, 이는 Fleet에서 기본적으로 제공하는 기능이 아니라, 관리자가 직접 작성하고 설정해야 하는 부분입니다. 이는 특히 대규모 배포에서 자동화와 편의성을 증대시킬 수 있는 좋은 방법이 될 수 있습니다. Fleet 서버에서 사용할 수 있는 자동 설치 스크립트를 작성하는 것은 관리자의 역할입니다. 이 스크립트는 osquery와 Orbit를 설치하고, 필요한 초기 설정을 자동으로 수행하며, Fleet 서버에 등록하는 과정을 포함해야 합니다. 다음은 기본적인 설치 스크립트를 작성하는 방법입니다.

스크립트 기본 구성

아래는 간단한 Bash 스크립트 예제로, Linux 시스템에서 osquery와 Orbit를 설치하고 Fleet 서버에 등록하는 과정을 담고 있습니다.

#!/bin/bash

# 설정 변수
FLEET_URL="https://fleet.example.com"
ENROLL_SECRET="your_enroll_secret"
INSTALL_PATH="/opt/osquery"

# osquery & Orbit 설치를 위한 필수 패키지 설치
sudo apt-get update
sudo apt-get install -y curl

# Orbit 설치 스크립트 다운로드 및 실행
curl -L "$FLEET_URL/setup/orbit" | bash

# Orbit 디렉터리 생성 (필요한 경우)
sudo mkdir -p ${INSTALL_PATH}
cd ${INSTALL_PATH}

# Fleet 서버로부터 최신 Orbit 실행 파일 다운로드
sudo curl -L "${FLEET_URL}/orbit/latest" -o orbit-osqueryd
sudo chmod +x orbit-osqueryd

# Orbit를 사용하여 osqueryd 실행 및 Fleet 서버 등록
sudo ./orbit-osqueryd \
  --enroll_secret=${ENROLL_SECRET} \
  --hostname=$(hostname) \
  --fleet_url=${FLEET_URL}

# 상태 확인
echo "Orbit와 osquery 설치 완료. Fleet 서버에 등록됨."
  1. 환경 설정: 스크립트 상단에는 Fleet 서버의 URL과 등록 비밀번호 같은 필요한 변수를 설정합니다.
  2. 필수 패키지 설치: osquery와 Orbit를 설치하기 전에 필요한 패키지를 설치합니다. 여기서는 curl을 예로 들었습니다.
  3. Orbit 설치: 해당 스크립트는 Fleet 서버로부터 Orbit 설치 스크립트를 다운로드하고 실행합니다. 이 부분은 예제이며, 실제 URL은 서버 설정에 따라 다를 수 있습니다.
  4. Orbit 실행: 설치된 Orbit를 사용하여 osqueryd를 실행하고 Fleet 서버에 등록합니다. 이 과정에서 필요한 옵션을 제공합니다.

스크립트 배포

  • 스크립트를 완성한 후, 웹 서버에 업로드하여 외부에서 접근 가능하도록 합니다.
  • HTTPS를 통해 스크립트를 제공하는 것이 중요합니다, 이는 데이터 전송 중 보안을 보장하기 위함입니다.

이제 이 스크립트를 각 엔드포인트에서 실행하여, 자동으로 osquery와 Orbit를 설치하고 Fleet 서버에 등록할 수 있습니다. 이 스크립트는 개별 환경에 따라 추가적인 수정이 필요할 수 있습니다.

728x90

댓글