파일 모니터링 · 5 min read · Nov 03, 2025

Linux에서 osquery를 사용하여 파일 무결성 모니터링(FIM) 설정하는 방법

Osquery는 오픈 소스 운영 체제 계측, 모니터링 및 분석 도구입니다. Facebook에서 개발하였으며, 운영 체제를 SQL 기반 쿼리를 사용하여 쿼리할 수 있는 고성능 관계형 데이터베이스로 노출합니다.

Osquery는 다중 플랫폼 소프트웨어로, Linux, Windows, MacOS 및 FreeBSD에 설치할 수 있습니다. SQL 기반 쿼리를 사용하여 이러한 운영 체제의 프로필, 성능, 보안 점검 등을 탐색할 수 있습니다.

이 튜토리얼에서는 osquery를 사용하여 파일 무결성 모니터링(FIM)을 설정하는 방법을 보여줍니다. Linux 운영 체제인 Ubuntu 18.04와 CentOS 7을 사용할 것입니다.

필수 조건

  • Linux (Ubuntu 또는 CentOS)
  • 루트 권한
  • 첫 번째 osquery 가이드를 완료했음

우리가 할 일

  1. Linux 서버에 osquery 설치
  2. osquery에 대한 Syslog 소비 활성화
  3. 기본 osquery 구성
  4. osquery를 사용하여 파일 무결성 모니터링 구성
  5. 테스트

1단계 - Linux 서버에 osquery 설치

Osquery는 모든 플랫폼 설치를 위한 자체 저장소를 제공하며, 우리가 할 첫 번째 단계는 공식 osquery 저장소에서 osquery 패키지를 설치하는 것입니다.

Ubuntu에서

osquery 키를 시스템에 추가합니다.

export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B  
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY

osquery 저장소를 추가하고 패키지를 설치합니다.

sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'  
sudo apt install osquery -y

CentOS에서

osquery 키를 시스템에 추가합니다.

curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery

osquery 저장소를 추가하고 활성화한 후 패키지를 설치합니다.

sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo  
sudo yum-config-manager --enable osquery-s3-rpm  
sudo yum install osquery -y

모든 패키지가 설치될 때까지 기다립니다.

Install osquery

참고:

yum-config-manager 명령에 대한 오류가 발생하면.

sudo: yum-config-manager: command not found

‘yum-utils’ 패키지를 설치합니다.

yum -y install yum-utils

2단계 - osquery에서 Syslog 소비 활성화

Osquery는 Apple MacOS에서 Apple System Log(ASL)를 사용하여 시스템 로그를 읽거나 소비하는 기능을 제공하며, Linux에서는 syslog를 사용합니다.

이 단계에서는 rsyslog를 통해 osquery의 syslog 소비를 활성화합니다.

Ubuntu에서

아래의 apt 명령을 사용하여 rsyslog 패키지를 설치합니다.

sudo apt install rsyslog -y

CentOS에서

아래의 yum 명령을 사용하여 rsyslog 패키지를 설치합니다.

sudo yum install rsyslog -y

설치가 완료되면 ‘/etc/rsyslog.d’ 디렉토리로 이동하여 새로운 구성 파일 osquery.conf를 생성합니다.

cd /etc/rsyslog.d/  
vim osquery.conf

다음 구성을 붙여넣습니다.

template(
  name="OsqueryCsvFormat"
  type="string"
  string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n"
)
*.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")

저장하고 종료합니다.

Configure osquery to read the syslog

3단계 - 기본 osquery 구성

osquery의 기본 구성은 ‘osquery.conf’이며, 일반적으로 ‘/etc/osquery’ 디렉토리에 위치합니다. osquery 구성 샘플은 ‘/usr/share/osquery/osquery.conf’에 있으며, osquery 팩 구성 샘플도 있습니다.

이 단계에서는 osquery 구성 요소에 대해 배우고, 사용자 지정 osquery 구성을 생성한 후 osqueryd를 서비스로 배포합니다.

osquery 구성은 JSON 파일 형식으로 되어 있으며, 아래에 설명된 osquery 구성 사양을 포함합니다.

  • 옵션: osqueryd CLI 명령의 일부로 앱 시작 및 초기화를 결정합니다.
  • 스케줄: 예약된 쿼리 이름의 흐름을 쿼리 세부정보로 정의합니다.
  • 장식자: 결과 및 스냅샷 로그에 추가 “장식”을 추가하는 데 사용됩니다.
  • 팩: 예약된 쿼리 그룹입니다.
  • 기타: 파일 경로, YARA, Prometheus, 뷰, EC2, Chef 구성.

‘/etc/osquery’ 디렉토리로 이동하여 새로운 사용자 지정 구성 ‘osquery.conf’를 생성합니다.

cd /etc/osquery/  
vim osquery.conf

다음 구성을 붙여넣습니다.

{
    "options": {
        "config_plugin": "filesystem",
        "logger_plugin": "filesystem",
        "logger_path": "/var/log/osquery",
        "disable_logging": "false",
        "log_result_events": "true",
        "schedule_splay_percent": "10",
        "pidfile": "/var/osquery/osquery.pidfile",
        "events_expiry": "3600",
        "database_path": "/var/osquery/osquery.db",
        "verbose": "false",
        "worker_threads": "2",
        "enable_monitor": "true",
        "disable_events": "false",
        "disable_audit": "false",
        "audit_allow_config": "true",
        "host_identifier": "hakase-labs",
        "enable_syslog": "true",
        "syslog_pipe_path": "/var/osquery/syslog_pipe",
        "force": "true",
        "audit_allow_sockets": "true",
        "schedule_default_interval": "3600"
    },

    "schedule": {
        "crontab": {
            "query": "SELECT * FROM crontab;",
            "interval": 300
        },
        "system_info": {
            "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
            "interval": 3600
        },
        "ssh_login": {
            "query": "SELECT username, time, host FROM last WHERE type=7",
            "interval": 360
        }
    },

    "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"
    }
}

저장하고 종료합니다.

참고:

  • ‘filesystem’을 구성 및 로거 플러그인으로 사용하고 있습니다.
  • 로거 경로를 ‘/var/log/osquery’ 디렉토리로 정의합니다.
  • syslog 파이프를 ‘/var/syslog/syslog_pipe’ 파일로 활성화합니다.
  • 스케줄러에서 crontab, 시스템 정보 및 ssh 로그인을 확인하기 위해 세 가지 쿼리를 정의합니다.
  • ‘osquery-monitoring’이라는 osquery 팩을 활성화하고, 팩 파일은 ‘/usr/share/osquery/packs’ 디렉토리에 위치합니다.

이제 osqueryd 데몬 서비스를 시작하고 시스템 부팅 시마다 실행되도록 활성화합니다.

systemctl start osqueryd  
systemctl enable osqueryd

그리고 rsyslog 서비스를 재시작합니다.

systemctl restart rsyslog

기본 osquery 구성이 완료되었습니다.

4단계 - osquery를 사용하여 파일 무결성 모니터링(FIM) 구성

Osquery는 inotify 및 FSEvents를 사용하여 Linux 및 MacOS Darwin에서 파일 무결성 모니터링을 제공합니다. 간단히 말해, ‘file_path’를 사용하여 정의된 디렉토리의 파일 변경 사항을 모니터링하고 감지한 후 모든 활동을 file_events 테이블에 저장합니다.

이 단계에서는 osquery를 구성하여 홈, ssh 디렉토리, tmp 및 www 웹 루트 디렉토리와 같은 중요한 디렉토리를 모니터링합니다. 사용자 지정 FIM 팩을 사용합니다.

‘/usr/share/osquery/packs’ 디렉토리로 이동하여 새로운 팩 구성 파일 ‘fim.conf’를 생성합니다.

cd /usr/share/osquery/packs  
vim fim.conf

아래 구성을 붙여넣습니다.

{
  "queries": {
    "file_events": {
      "query": "SELECT * FROM file_events;",
      "removed": false,
      "interval": 300
    }
  },
  "file_paths": {
    "homes": [
      "/root/.ssh/%%",
      "/home/%/.ssh/%%"
    ],
      "etc": [
      "/etc/%%"
    ],
      "home": [
      "/home/%%"
    ],
      "tmp": [
      "/tmp/%%"
    ],
      "www": [
      "/var/www/%%"
      ]
  }
}

저장하고 종료합니다.

이제 ‘/etc/osquery’ 구성 디렉토리로 돌아가서 osquery.conf 파일을 편집합니다.

cd /etc/osquery/  
vim osquery.conf

‘packs’ 섹션 안에 파일 무결성 모니터링 팩 구성을 추가합니다.

    "packs": {
        "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
        "fim": "/usr/share/osquery/packs/fim.conf"
    }

osquery file monitoring

저장하고 종료한 후 osqueryd 서비스를 재시작합니다.

systemctl restart osqueryd

Restart osqueryd

참고:

JSON linter ‘ http://jsonlint.com/ ‘를 사용하여 JSON 구성 파일을 계속 확인하고 오류가 없는지 확인합니다.

5단계 - 테스트

정의된 디렉토리 ‘home’ 및 ‘www’에 새 파일을 생성하여 파일 무결성 모니터링 팩을 테스트합니다.

‘/var/www/‘ 디렉토리로 이동하여 ‘howtoforge.md’라는 새 파일을 생성합니다.

cd /var/www/  
touch howtoforge.md

‘/home/youruser/‘ 디렉토리로 이동하여 ‘hakase-labs.md’라는 새 파일을 생성합니다.

cd /home/vagrant/  
touch hakase-labs.md

이제 실시간 대화형 모드 osqueryi를 사용하여 모든 로그 모니터링과 osquery 결과 로그를 확인합니다.

Testing osquery setup

osqueryi

아래의 osqueryi 명령을 실행합니다.

osqueryi --config-path /etc/osquery/osquery.conf

이제 ‘file_events’ 테이블에서 파일 변경에 대한 모든 로그를 확인합니다.

전역 변경 사항에 대해.

select * from file_events;

‘home’ 디렉토리에 대해.

select target_path, category, action, atime, ctime, mtime from file_events WHERE category="home";

‘www’ 웹 루트 디렉토리에 대해.

select target_path, category, action, atime, ctime, mtime from file_events WHERE category="www";

Using osqueryi

osqueryd 결과 로그

‘/var/log/osquery’ 디렉토리로 이동하면 ‘osqueryd.results.log’ 파일을 확인할 수 있습니다.

cd /var/log/osquery/  
ls -lah osqueryd.results.log

‘grep’ 명령을 사용하여 osquery 로그를 필터링합니다.

grep -rin howtoforge.md osqueryd.results.log  
grep -rin hakase-labs.md osqueryd.results.log

해당 파일이 생성되었다는 정보를 확인할 수 있습니다.

osqueryd results log

Linux 서버 Ubuntu 및 CentOS에서 osquery를 사용하여 파일 무결성 모니터링(FIM)의 설치 및 구성이 성공적으로 완료되었습니다.

참고

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.