OSQuery는 오픈 소스의 운영 체제 쿼리 및 모니터링 프레임워크로, 다양한 운영 체제에서 작동하는 SQL 기반 도구입니다.
다음은 OSQuery에 대한 개요와 기본 개념을 제시한 것입니다.
- 목적 및 기능
- 운영 체제 계측(Metrics): OSQuery는 운영 체제의 다양한 측면을 모니터링하고 측정할 수 있는 쿼리 도구입니다. 이로써 시스템의 성능, 상태, 리소스 사용량 등을 실시간으로 확인할 수 있습니다.
- 보안 모니터링(Security Monitoring): OSQuery를 사용하여 시스템 로그, 보안 이벤트 및 보안 상태를 모니터링하고 조사할 수 있습니다.
- 애널리틱스(Analytics): OSQuery를 사용하여 데이터를 검색하고 분석할 수 있으므로, 보안 조사, 문제 해결 및 시스템 관리에 유용합니다.
- 지원하는 운영 체제
- OSQuery는 다양한 운영 체제에서 작동합니다. 이에는 Linux, macOS, Windows, 그리고 FreeBSD가 포함됩니다.
- 사용 방법
- OSQuery는 공식 웹사이트(https://osquery.io)에서 다운로드할 수 있습니다.
- 설치
- Ubuntu 18.04 TLS 서버 머신에 OSQuery를 설치하는 예제가 아래와 같이 주어집니다.
# OSQuery 레포지토리를 추가합니다. sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main' # 패키지 목록을 업데이트합니다. sudo apt-get update # OSQuery를 설치합니다. sudo apt-get install osquery
- 필요한 키를 가져오고 레포지토리를 추가합니다.
- 패키지 업데이트를 실행합니다.
- OSQuery를 설치합니다.
- Ubuntu 18.04 TLS 서버 머신에 OSQuery를 설치하는 예제가 아래와 같이 주어집니다.
- 실행 모드
- OSQuery는 두 가지 주요 실행 모드를 제공합니다.
- osqueryi: 인터랙티브 셸 모드로, SQL 쿼리를 직접 입력하고 실행할 수 있습니다.
- osqueryd: 데몬 모드로, 백그라운드에서 실행되며 예약된 작업 또는 주기적 쿼리 실행에 사용됩니다.
- OSQuery는 두 가지 주요 실행 모드를 제공합니다.
- 쿼리 실행
osqueryi
를 사용하여 다양한 명령 및 쿼리를 실행할 수 있습니다..help
를 입력하여 사용 가능한 명령을 확인하고.tables
를 사용하여 사용 가능한 테이블 유형을 확인할 수 있습니다.# osqueryi 실행 osqueryi # 사용 가능한 명령 확인 .help # 사용 가능한 테이블 유형 확인 .tables # 특정 테이블의 스키마 확인 .schema <TABLE_NAME>
- 예제 쿼리 실행
- 모든 사용자 가져오기:
SELECT * FROM users;
- 현재 로그인한 사용자 확인:
SELECT * FROM logged_in_users;
- 커널 정보 중 버전 확인:
SELECT version FROM kernel_info;
- 모든 사용자 가져오기:
- 자동화 및 스케줄링
- osqueryd 데몬 모드를 사용하여 쿼리를 자동화하고 스케줄링할 수 있습니다.
/etc/osquery/osquery.conf
파일을 편집하여 특정 쿼리를 주기적으로 실행하거나 필요한 규칙을 정의할 수 있습니다.
예를 들어, 다음과 같이 사용자 쿼리를 300초마다 실행하는 규칙을 추가할 수 있습니다."schedule": { "Users": { "query": "SELECT * FROM users;", "interval": 300 } }
- osqueryd 데몬 모드를 사용하여 쿼리를 자동화하고 스케줄링할 수 있습니다.
- 팩(Pack)
- 쿼리들의 컬렉션을 팩(Pack)이라고 부릅니다. OSQuery는 다양한 팩을 제공하며, 보안 평가와 조사를 지원하는 팩들을 활용할 수 있습니다. 팩 목록은 OSQuery GitHub 팩 레포지토리에서 확인할 수 있습니다.
OSQuery는 시스템 모니터링, 보안 관리, 운영 체제 분석, 그리고 보안 조사와 같은 다양한 용도로 활용됩니다. 또한 OSQuery를 대규모 환경에 배치하고 효과적으로 관리하기 위해서는 "콜라이드 플리트"와 같은 도구를 사용할 수 있습니다.
플릿(Fleet)은 오픈 소스 삼쿼리 매니저로, 주로 osquery와 함께 사용되어 대규모 환경에서의 프로그램 가능한 라이브 쿼리, 스트리밍 로그 수집, 그리고 효과적인 osquery 관리를 지원하는 도구입니다.
아래에서 플릿의 주요 특징과 기능을 설명하겠습니다.
- osquery 관리 및 배포: 플릿은 osquery 에이전트를 다수의 서버, 컨테이너, 및 랩톱 장치에 배포하고 관리하는 데 도움을 줍니다. 이를 통해 보안 및 운영 팀은 환경 내에서 일관된 보안 정책 및 구성을 쉽게 유지하고 관리할 수 있습니다.
- 프로그램 가능한 라이브 쿼리: osquery는 프로그램 가능한 SQL 쿼리 언어를 사용하여 운영 체제 및 애플리케이션 정보를 쿼리하는 도구입니다. 플릿을 통해 이러한 쿼리를 관리하고 실행할 수 있으며, 이를 통해 시스템 상태, 보안 문제, 네트워크 활동 등을 실시간으로 모니터링하고 조사할 수 있습니다.
- 스트리밍 로그 수집: 플릿은 osquery에서 생성된 로그 데이터를 수집하고 중앙 집중화된 위치에 저장합니다. 이를 통해 로그 데이터를 보다 효과적으로 분석하고, 보안 이벤트 또는 문제를 탐지하고 조치할 수 있습니다.
- 대규모 환경 관리: 플릿은 대규모 환경에서 수천 대 이상의 장치를 효과적으로 관리할 수 있는 기능을 제공합니다. 이는 대규모 서버 팜, 클라우드 인프라, 또는 엔터프라이즈 환경에서 특히 유용합니다.
- 대화형 대기 모드: 플릿은 여러 기기와 동시에 대화할 수 있는 대화형 대기 모드를 지원합니다. 이는 대규모 환경에서 대규모 osquery 에이전트를 다루거나 명령을 동시에 실행할 때 유용합니다.
- 오픈 소스: 플릿은 오픈 소스 프로젝트로서 커뮤니티에서 개발 및 유지보수되며, 사용자는 자유롭게 수정하고 커스터마이즈할 수 있습니다.
플릿은 보안 관리, 인시던트 대응, 컴플라이언스 모니터링 등 다양한 보안 및 운영 관련 시나리오에서 유용한 도구로 사용됩니다. 대규모 환경에서의 osquery 관리 및 모니터링을 효과적으로 수행하기 위한 강력한 오픈 소스 옵션 중 하나입니다.
콜라이드(Kolide) 플리트(OSQuery Management)는 osquery와 관련된 관리와 모니터링 작업을 수행하는 도구로 앞서 설명한 Fleet의 이전 이름입니다. 그러나 콜라이드는 더 이상 Fleet을 유지하고 지원하지 않으며, 새로운 이름으로 플리트(Fleet)을 사용하게 되었습니다. 이로 인해 다음과 같은 주요 사항이 발생했습니다.
- 이름 변경: Fleet는 콜라이드(Kolide) 플리트(Kolide Fleet)에서 간결한 이름인 플리트(Fleet)으로 변경되었습니다.
- 관리 및 유지: 콜라이드(Kolide)는 Fleet을 더 이상 관리하거나 유지하지 않습니다. 따라서 새로운 레포지토리 및 프로젝트를 통해 Fleet의 개발 및 업데이트가 이루어집니다.
- 새로운 레포지토리: Fleet 프로젝트의 새로운 레포지토리는 https://github.com/fleetdm/fleet에서 찾을 수 있습니다.
이로써 사용자는 콜라이드(Kolide) 플리트(Kolide Fleet)를 더 이상 사용하지 않고, 새로운 프로젝트인 플리트(Fleet)를 사용해야 합니다. 새로운 레포지토리에서 Fleet의 최신 버전과 업데이트를 찾을 수 있으며, 오픈 소스 커뮤니티와 함께 이 프로젝트를 계속 발전시킬 것으로 예상됩니다.
FleetDM을 서버 및 엔드포인트 관리를 위해 Docker 컨테이너를 사용하여 실행할 수 있습니다.
참고: FleetDM를 실행하기 전에 Docker 및 Docker Compose가 설치되어 있어야 합니다.
1. Docker Compose 파일 작성: FleetDM를 실행하기 위한 Docker Compose 파일을 작성합니다.
아래는 간단한 예제입니다. docker-compose.yml
파일을 만들고 내용을 복사합니다.
version: '3'
services:
fleet:
image: fleetdm/fleet:latest
container_name: fleet
ports:
- "8080:8080" # FleetDM 웹 인터페이스를 호스트의 8080 포트로 매핑
volumes:
- ./config:/etc/fleet # FleetDM 구성 파일을 호스트 디렉토리에 저장
environment:
- MYSQL_USERNAME=fleet
- MYSQL_PASSWORD=myfleetpassword
- MYSQL_DATABASE=fleet
- MYSQL_ADDRESS=db:3306
- FLEET_MYSQL_ADDRESS=db:3306
- FLEET_LOGGING_JSON=true
depends_on:
- db
db:
image: mysql:5.7
container_name: fleet-mysql
environment:
- MYSQL_ROOT_PASSWORD=myrootpassword
- MYSQL_DATABASE=fleet
- MYSQL_USER=fleet
- MYSQL_PASSWORD=myfleetpassword
volumes:
- ./mysql-data:/var/lib/mysql
이 파일에서 주요 포인트는 다음과 같습니다.
image
: FleetDM Docker 이미지의 이름을 지정합니다. 여기서는fleetdm/fleet:latest
이미지를 사용합니다. 원하는 버전을 지정할 수도 있습니다.ports
: FleetDM 웹 인터페이스를 호스트의 포트 8080에 매핑합니다.volumes
: FleetDM 구성 파일을 호스트 시스템에 저장하기 위한 디렉토리를 지정합니다.environment
: FleetDM 및 MySQL 컨테이너에 환경 변수를 설정합니다. MySQL 비밀번호 및 데이터베이스 이름을 변경할 수 있습니다.
2. FleetDM 구성 파일: FleetDM를 구성하기 위해 config
디렉토리를 생성하고 필요한 구성 파일을 추가합니다. 구체적인 구성은 FleetDM 공식 문서를 참조하세요.
3. Docker Compose 실행: 터미널에서 Docker Compose를 사용하여 FleetDM 컨테이너를 실행합니다.
docker-compose up -d
-d
플래그를 사용하면 컨테이너가 백그라운드에서 실행됩니다.
4. FleetDM 웹 인터페이스 액세스: FleetDM가 정상적으로 실행되면 웹 브라우저에서 다음 URL을 사용하여 FleetDM 웹 인터페이스에 액세스할 수 있습니다.
http://localhost:8080
FleetDM 웹 인터페이스에 로그인하려면 초기 관리자 계정 정보를 사용해야 할 수 있습니다. 이 정보는 FleetDM 구성 파일에 설정됩니다.
이제 FleetDM를 Docker 컨테이너로 실행했습니다. 필요에 따라 추가 구성 및 관리를 수행할 수 있습니다.
FleetDM의 공식 문서 및 GitHub 페이지에서 자세한 정보를 찾을 수 있습니다.
댓글