자동화된 파일 추출 및 보안 대응을 위한 Osquery 시스템 구축
Osquery는 Facebook에서 개발한 오픈 소스 도구로, SQL 기반의 쿼리를 통해 시스템의 상태와 활동을 모니터링할 수 있습니다. 시스템 관리 및 보안 분야에서 널리 사용되며, 크로스 플랫폼을 지원하여 다양한 운영 체제에서 활용할 수 있습니다. Osquery File Carve Server 프로젝트는 Osquery의 파일 카빙(carving) 기능을 활용하여 원격 시스템에서 파일을 추출하고, 이를 중앙 서버로 전송하여 저장 및 관리하는 시스템입니다. 이 프로젝트는 Golang, Docker, MongoDB, NGINX 등의 기술 스택을 사용하여 구축되며, 조직 내 보안 및 관리 업무를 효율화하는 데 기여합니다.
주요 기술
- Golang: 서버 애플리케이션 개발 언어
- Docker & Docker Compose: 애플리케이션 컨테이너화 및 서비스 오케스트레이션
- MongoDB (GridFS 사용): 대용량 파일 저장을 위한 데이터베이스
- NGINX: 역방향 프록시 및 TLS/SSL 지원
- Osquery: 클라이언트 측 파일 추출 및 전송 도구
- Kolide Fleet: Osquery 관리 플랫폼
프로젝트 빌드
프로젝트를 빌드하려면 다음 명령을 실행합니다.
https://github.com/CptOfEvilMinions/osquerey-file-carve-server
cd osquery-file-carve-server/
go mod init github.com/CptOfEvilMinions/osquery-file-carve-server
go build
- 모든 데이터 블록은 순서대로 도착합니다.
- NGINX, Osquery 및 MongoDB의 데이터 블록 크기 설정이 적절하게 구성되어 있습니다.
- 기본 데이터 블록 크기는 10MB (10,000,000 바이트)로 설정됩니다.
- Osquery의
carver_block_size
도 10MB로 설정됩니다.
Docker Compose 빌드
docker-compose build
Kolide Fleet 데이터베이스 준비
docker-compose run --rm kolide fleet prepare db --config /etc/kolide/kolide.yml
스택 실행
docker-compose up -d
Kolide 서버 초기 설정
https://<Kolide FQDN>:8443/setup
로 접속- 사용자 설정
admin
을 사용자 이름으로 입력- 관리자 비밀번호 입력
- 관리자의 이메일 입력
- Submit 선택
- 조직 설정
- 조직 이름을 입력
- 조직의 URL을 입력
- Submit 선택
- Kolide URL 설정
- 기본 Kolide URL을 수락하고 Submit 선택
- 설정 완료
- Finish 선택
Osquery 설치 및 설정
- 키 등록
export OSQUERY_KEY=27ED126D796F823B0C271EF369A67BD32B53994E sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $OSQUERY_KEY
- Osquery 저장소 추가
sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
- 패키지 업데이트 및 설치
sudo apt-get update sudo apt-get install osquery -y
- osquery.flags 파일 설정
- Kolide 서버에서
osquery.flags
파일을 다운로드합니다.wget https://raw.githubusercontent.com/CptOfEvilMinions/osquerey-file-carve-server/master/conf/osquery/osquery.flags -O /etc/osquery/osquery.flags
osquery.flags
파일에서kolide.hackinglab.local:8443
부분을 Kolide 서버의 FQDN 또는 IP 주소로 교체합니다.sed -i 's/kolide.hackinglab.local:8443/<FQDN or IP addr of Kolide>:<port> /g' /etc/osquery/osquery.flags
- Kolide 서버에서
- Kolide 서버 인증서 추가
- Kolide 서버의 인증서를 가져와 Ubuntu의 Osquery 설정 디렉토리에 복사합니다.
scp <server cert> <user>@<ubuntu IP addr>:/etc/osquery/snakeoil.crt
- Kolide 서버의 인증서를 가져와 Ubuntu의 Osquery 설정 디렉토리에 복사합니다.
Kolide에서 Osquery 클라이언트 등록
Kolide에 Osquery 호스트를 추가하여 중앙에서 관리할 수 있습니다.
- 새 호스트 추가
- 오른쪽 상단의 Add New Host를 선택합니다.
- 등록 비밀키 확인
- 비밀 텍스트 상자 위의 Show를 선택하여
Osquery Enroll Secret
을 확인합니다. - 이 비밀키는 Osquery 클라이언트를 Kolide에 등록하는 데 필요합니다.
- 비밀 텍스트 상자 위의 Show를 선택하여
- 비밀키 추가
- 등록할 Osquery가 설치된 VM에 SSH로 접속합니다.
- Osquery의
enroll_secret
파일에 등록 비밀키를 입력합니다.echo '<osquery enroll secret>' > /etc/osquery/osquery.key
- Osquery 데몬을 재시작하여 설정을 반영합니다.
systemctl restart osqueryd
Kolide에서 호스트 관리 및 쿼리 실행
Kolide에서 Osquery 호스트의 상태를 확인하고 직접 쿼리를 실행할 수 있습니다.
- 호스트 관리 페이지 접속
- 브라우저에서
https://<Kolide FQDN>:8443/hosts/manage
에 접속합니다.
- 브라우저에서
- 호스트 선택 및 테스트 쿼리 실행
- Kolide 웹 GUI에서 새로 등록한 호스트를 선택합니다.
- 쿼리 영역에서 다음 쿼리를 입력합니다.
SELECT * FROM osquery_info;
- RUN을 선택하여 쿼리를 실행합니다.
- 몇 초 후 하단의 결과 창에서 쿼리 결과가 표시됩니다.
Kolide와 Osquery 통한 활용 사례
- 시스템 정보 모니터링: Kolide와 Osquery를 통해 시스템의 다양한 정보(예: 운영체제 버전, 네트워크 상태, 파일 무결성 등)를 실시간으로 수집하고 모니터링할 수 있습니다.
- 보안 정책 준수 확인: Kolide는 Osquery를 통해 중앙에서 여러 호스트에 대해 보안 정책을 설정하고, 정책 준수 여부를 검사할 수 있는 기능을 제공합니다.
- 원격 쿼리 실행: Osquery로부터 수집한 데이터를 기반으로, 특정 조건에 따라 필요한 정보를 즉시 조회할 수 있습니다. 예를 들어,
SELECT * FROM processes WHERE name='malware';
와 같은 쿼리로 악성 코드 탐지가 가능합니다. - 자동화된 보안 응답: Kolide와 Osquery는 이벤트 기반 설정을 통해 이상 발생 시 자동으로 필요한 정보를 수집하거나 특정 조치를 취할 수 있도록 설정할 수 있습니다.
서버 및 네트워크 설정
NGINX 역방향 프록시 설정
NGINX를 사용하여 클라이언트의 요청을 Golang 서버로 전달합니다. 이를 통해 로드 밸런싱과 SSL 종료를 관리할 수 있습니다.
TLS/SSL 설정
안전한 통신을 위해 SSL 인증서를 설정합니다. 루트 CA를 통해 생성한 인증서를 NGINX에 적용합니다.
데이터베이스 관리
MongoDB와 GridFS 활용
MongoDB의 GridFS 기능을 사용하여 대용량 파일을 효율적으로 저장합니다. 이는 파일을 작은 청크로 분할하여 저장하므로 대용량 파일 처리에 적합합니다.
데이터 블록 크기 및 구조 설정
Osquery와 서버에서 사용하는 데이터 블록 크기를 일치시켜 데이터 전송의 효율성을 높입니다.
파일 업로드 및 관리
Osquery에서 파일 추출 및 전송
Osquery의 파일 카빙 기능을 사용하여 필요한 파일을 추출합니다.
SELECT * FROM carves WHERE path = '/path/to/target/file';
Golang 서버에서 파일 수신 및 저장
Golang으로 작성된 서버는 Osquery로부터 전송된 파일을 수신하고, MongoDB에 저장합니다.
파일 추출 및 분석
보안팀은 Osquery를 사용하여 원격 시스템에서 의심스러운 파일을 추출합니다. 추출된 파일은 중앙의 Osquery File Carve Server로 전송되어 저장되고, 팀은 이를 분석하여 잠재적 위협을 식별합니다.
자동화된 보안 이벤트 대응
Osquery의 이벤트 기반 파일 추출 기능을 활용하여 특정 이벤트(예: 악성 활동 탐지) 발생 시 자동으로 관련 파일을 수집하고 분석합니다. 이를 통해 보안 사고에 신속하게 대응할 수 있습니다.
시스템 구성 관리
시스템 관리자는 Osquery File Carve Server를 통해 여러 서버의 구성 파일을 중앙에서 관리하고 변경 사항을 추적합니다.
위의 단계를 통해 Osquery File Carve Server 프로젝트를 구성하고 운영할 수 있습니다. 각 단계에서 필요한 설정과 구성 요소를 잘 확인하고 적용하면 원활한 파일 추출 및 관리 시스템을 구축할 수 있습니다. 이를 통해 조직의 보안 강화, 효율적인 시스템 관리, 신속한 보안 사고 대응 등 다양한 이점을 얻을 수 있습니다. 아래는 활용 범위를 확장할 수 있는 내용입니다.
Osquery와 Kolide Fleet의 역할 및 기능 확장
Osquery는 시스템의 상태를 모니터링할 수 있는 SQL 기반의 쿼리 언어를 제공하며, 보안 및 관리 목적으로 활용되는 인기 있는 도구입니다. 이를 Kolide Fleet과 연동하여 중앙 관리 서버에서 여러 대의 시스템을 모니터링하고 구성할 수 있습니다. Osquery와 Kolide Fleet의 주요 기능은 다음과 같습니다.
- 실시간 시스템 모니터링: 프로세스, 네트워크 연결, 파일 변경 사항 등을 실시간으로 확인할 수 있습니다.
- 파일 카빙(File Carving): Osquery의
carve
기능을 사용하여 파일을 추출하고 분석하는 데 활용됩니다. 이를 통해 의심스러운 파일을 탐지하고 분석하여 보안 위협을 예방할 수 있습니다. - 정책 및 규정 준수 관리: 조직 내 컴플라이언스 요구 사항을 충족하기 위해 다양한 보안 정책을 설정하고, 이를 Kolide Fleet에서 관리할 수 있습니다.
이러한 기능을 통해 Osquery File Carve Server는 보안 팀에서 필요한 파일을 원격에서 안전하게 수집하고 관리하는 데 큰 도움이 됩니다.
Osquery File Carve Server의 확장 가능한 활용 사례
Osquery File Carve Server는 단순한 파일 추출 이상의 다양한 활용 사례가 있습니다. 다음은 보안 및 시스템 관리에서의 실제 적용 예시입니다.
- 파일 무결성 검증: 시스템 내 중요한 파일의 무결성을 검사하기 위해 Osquery를 통해 정기적으로 파일을 추출하고, 이전 데이터와 비교하여 변경 사항이 있는지 확인할 수 있습니다. 이를 통해 비인가된 파일 수정이나 무단 변경을 감지할 수 있습니다.
- 포렌식 및 침해사고 대응: 침해사고 발생 시 Osquery를 통해 필요한 파일을 빠르게 추출하여 증거로 확보하고, File Carve Server에 저장하여 침해사고 분석에 활용할 수 있습니다. 특히, GridFS와 MongoDB의 효율적인 데이터 저장 방식을 통해 대규모 데이터를 효율적으로 관리할 수 있습니다.
- 자동화된 악성 파일 탐지: Osquery와 Kolide Fleet의 이벤트 기반 파일 추출 기능을 통해 특정 이상 징후가 발생하면 해당 시스템의 파일을 자동으로 수집하고 중앙 서버에 저장하여 보안팀이 분석할 수 있도록 지원합니다.
보안 강화를 위한 NGINX의 활용과 SSL/TLS 설정
NGINX는 보안 통신을 위한 역방향 프록시 서버 역할을 하며, TLS/SSL 설정을 통해 통신 보안을 강화합니다. NGINX를 활용하여 클라이언트와 서버 간 통신이 안전하게 이루어질 수 있도록 구성하는 것이 중요합니다. 이를 위한 기본적인 설정 예시는 다음과 같습니다.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
이 설정은 Osquery 클라이언트에서 서버로 전송되는 데이터가 암호화된 채로 송수신되도록 하여, 네트워크 상에서 발생할 수 있는 스니핑 공격에 대한 방어를 제공합니다.
파일 저장 및 관리에 MongoDB와 GridFS를 사용하는 이유
MongoDB의 GridFS는 대용량 파일을 작은 청크로 분할하여 효율적으로 저장할 수 있는 시스템으로, Osquery File Carve Server에 적합합니다. GridFS를 사용하면 다음과 같은 장점이 있습니다.
- 효율적인 대용량 파일 처리: 일반적인 파일 시스템에서 다루기 어려운 대용량 파일을 작은 청크로 분할하여 저장하므로 안정적이고 성능이 높습니다.
- 확장성: MongoDB는 분산형 데이터베이스로 확장성이 뛰어나 대규모 데이터를 처리할 때 유리합니다.
- 데이터 무결성: 각 파일 청크가 개별적으로 저장되므로 손상된 청크를 복구하기 쉽고, 백업 및 복구 작업도 간편합니다.
GridFS는 파일을 관리하고 안전하게 보관하기 위한 이상적인 선택지로, 보안과 성능을 동시에 고려할 수 있는 환경을 제공합니다.
보안 정책 준수를 위한 자동화된 파일 검토 및 보고서 생성
Osquery와 Kolide Fleet을 연동하여 자동으로 정책을 적용하고, 각 시스템의 상태를 주기적으로 점검하여 규정 준수를 확인할 수 있습니다. 이 기능을 활용하면 조직 내 컴플라이언스를 유지하는 데 매우 유용합니다.
- 자동화된 보고서 생성: Osquery를 통해 수집된 데이터를 기반으로 정기적인 보고서를 생성하여 파일 상태 및 변경 사항을 모니터링하고, 정책에 따라 적합/부적합을 판별할 수 있습니다.
- 정책 위반 탐지: 예기치 않은 파일 변경이나 접근이 발생한 경우 이를 감지하여 보안 위반 가능성을 조기에 차단할 수 있습니다.
보고서 자동화는 보안 팀이 전체 시스템 상태를 한눈에 파악하고 신속하게 대응할 수 있도록 돕습니다.
Osquery File Carve Server의 성능 최적화와 장애 대응
프로젝트 운영 시 Osquery File Carve Server의 성능 최적화와 장애 대응을 위한 다양한 고려사항이 필요합니다.
- 블록 크기 최적화: 데이터 전송 시 블록 크기를 Osquery와 MongoDB의 설정에 맞춰 최적화하면 파일 전송 속도와 서버 부하를 조정할 수 있습니다.
- 오류 로그 모니터링: Golang 서버와 NGINX에서 발생하는 오류 로그를 정기적으로 검토하여 시스템 장애를 예방하고, 장애 발생 시 신속히 복구할 수 있는 조치를 마련합니다.
- 업로드 실패 클린업: 업로드 중 오류가 발생하면 해당 데이터를 자동으로 정리하여 저장소를 효율적으로 관리할 수 있습니다.
이러한 최적화 작업은 Osquery File Carve Server의 안정적인 운영을 위한 필수적인 요소로, 성능과 안정성을 유지하는 데 중요한 역할을 합니다.
Osquery File Carve Server는 보안 및 관리 요구사항을 충족시키기 위한 다양한 기능과 확장성을 제공합니다. 이를 통해 보안팀은 파일 추출 및 분석을 자동화하고, 체계적인 파일 관리와 실시간 모니터링을 통해 신속한 보안 대응이 가능해집니다. 이와 같은 구성과 활용 사례를 통해 조직 내 보안 강화 및 효율적인 시스템 관리를 실현할 수 있습니다.