이번 시간에는 실제 제가 우리회사에서 사용중인 Logstash 사용법과 실제 실무에서 활용 사례를 토대로 효율적으로 이용하는 방법에 대하여 팁을 알려드리도록 하겠습니다. 현재 저희 팀에서는 Logstash를 활용해 보안 로그 데이터를 전처리하며 Elastic Stack과 연동하여 사용하고 있습니다. 방화벽(Firewall), 침입방지시스템(IPS), 웹 애플리케이션 방화벽(WAF) 등 모든 서비스의 보안 이벤트 로그를 Logstash로 전처리한 후, 이를 Elastic Stack에 저장하는 구조로 운영 중입니다.
Logstash 사용 현황
일평균 처리량은 Elastic 인덱스를 기준으로 평일 기준 약 7억~ 8억 건에서(Document Count 기준)을 처리하며, Logstash 필터 플러그인을 활용해 꼭 필요한 데이터만 선별적으로 저장하고 있습니다. 그 결과, 실제 일평균 저장되는 스토리지 용량은 약 90GB에서 110GB 정도 수준을 유지하고 있습니다. 서비스가 점점 늘어나고 이와 동시에 보안 관련 인프라도 증가하여 보안 로그는 점점 증가 추세에 있습니다.
Logstash의 필터 구성 요소를 활용하여 실제 운영 환경에서 보안 로그를 처리하는 사례를 살펴보겠습니다. 이 사례는 특히 불필요한 데이터를 걸러내어 효율적이고 의미 있는 데이터만 시스템에 남기기 위한 것입니다. 여기에서는 Logstash의 drop 플러그인을 중심으로 필터 부분을 상세히 설명합니다.
Drop Filter Plugin
1. 특정 키워드를 포함한 보안 이벤트 로그 폐기 조건
보안 이벤트 로그에서 `deviceCustomString1` 필드의 값이 특정 키워드로 시작한다면 해당 데이터를 폐기하도록 설정합니다. 이를 통해 특정 이벤트 유형에 맞는 로그만 수집하고, 나머지는 모두 제거할 수 있습니다.
- 예: `deviceCustomString1` 필드 값이 `ATTACK` 또는 `BLACKIP`로 시작하는 경우, 해당 로그는 수집 대상에서 제외됩니다.
ruby
if [deviceCustomString1] =~ /^ATTACK|^BLACKIP/ {
drop { }
}
2. 지정된 IP 주소 기반 로그 폐기 조건
특정 목적지 IP(`destinationAddress`)가 자주 발생하여 분석 가치가 낮거나 불필요하다고 판단되는 경우, 해당 조건에 부합하는 데이터를 걸러냅니다. 예를 들어, IP가 `18.xx.xx.10`로 시작하거나 지정된 여러 IP 범위 내에 포함된다면 로그를 폐기하도록 설정합니다.
ruby
if [destinationAddress] in ["18.xx.xx.10", "192.168.1.20", "10.0.0.15"] {
drop { }
}
3. 응용 프로토콜(applicationProtocol)에 기반한 필터링
로그의 응용 프로토콜(`applicationProtocol`)이 네트워크 분석에서 불필요하거나 잡음(Noise)가 될 가능성이 큰 경우 이를 제거합니다. 예를 들어, ICMP(Echo Request) 및 NTP(Network Time Protocol) 프로토콜 관련 로그는 애플리케이션 수준에서는 분석 가치가 낮을 수 있으므로 drop 처리합니다.
ruby
if [applicationProtocol] in ["icmp", "ntp"] {
drop { }
}
4. 서비스(service) 유형별 필터링
서비스 값이 `PING`으로 나오는 로그는 일반적인 네트워크 연결 확인 용도이며, 대량 발생으로 인해 저장 공간을 차지하거나 분석의 정확도를 떨어뜨릴 위험이 있습니다. 이러한 PING 서비스 관련 데이터 역시 불필요한 노이즈로 간주하여 폐기 대상에 포함할 수 있습니다.
ruby
if [service] == "PING" {
drop { }
}
활용 시 유의점
- 로그 손실 우려: Drop 플러그인은 설정된 조건에 해당하는 모든 데이터를 삭제하므로, 반드시 폐기 기준을 신중하게 정의해야 합니다. 잘못된 조건 설정은 유용한 데이터를 잃게 할 수도 있습니다.
- 조건 정교화: 다중 IF 문 또는 필드 비교를 조합하여 보다 구체적이고 상황에 맞는 로그 제거 기준을 설정하는 것이 중요합니다.
- 시스템 성능 최적화: 이러한 필터링 방식은 로그량을 줄이고, 저장 비용을 절감하며, 최종 분석 시스템의 효율성을 높일수 있습니다.
위와 같은 Logstash 필터 구성 적용은 실시간으로 증가하는 데이터 환경에서 중요하지 않은 로그를 걸러내고, 분석에 집중할 수 있는 체계를 만드는 데 효과적으로 활용될 수 있습니다.
mutate filter plugin rename option
POD01-FW로 시작하는 보안 이벤트 로그에서, 특정 필드 키워드를 변경해야 합니다.
필드 이름 변경 사항은 다음과 같습니다.
- name은 csname으로 변경
- severity는 csseverity로 변경
- deviceCustomString6은 threatAction으로 변경
쉽게 말해, POD01-FW 방화벽 로그에서 필요에 의해 특정 필드명, 예를 들어 severity, 를 변경하는 것이며, elastic stack에 저장될 때는 필드명이 자동으로 csseverity로 바뀌어 저장됩니다.
mutate filter plugin replace option
Mutate 필터 플러그인의 Replace 옵션을 활용하여 로그 파일의 특정 필드 값을 원하는 문자열로 변경할 수 있습니다. 예를 들어, 로그 데이터에서 'hostSeverity' 필드 값을 분석하고, 이 값이 2 또는 3일 경우 이를 특정 문자열로 대체하고 싶다고 가정하면, 아래와 같은 규칙을 설정하면 됩니다.
hostSeverity 필드의 값이 2 또는 3으로 설정된 경우, 이를 "Low-Minor"로 변환하여 출력이 가능하도록 구성 과정이 이루어집니다. 이 작업을 통해 데이터 해석 및 분류가 보다 명확해지고 효율적인 로그 관리와 처리 흐름을 제공할 수 있습니다.
mutate 필터 플러그인의 remove_field 공통 옵션 사용
특정 필드를 삭제하는 기능 입니다.
예시: PanOSPacketsReceived, PanOSDGl2, PanOSDstUUID, PanOSDGl4 등과 같은 필드 삭제
Prune Filter Plugin
prune 필터 플러그인은 특정 필드를 제거하거나 유지하기 위해 설계된 기능으로, 필드 이름이나 해당 값에 대해 화이트리스트 또는 블랙리스트 규칙을 기반으로 동작합니다. 이러한 규칙에는 정규표현식을 활용할 수 있어 더욱 세부적인 조건 설정이 가능합니다.
보안 장비에서 로그를 수집하는 과정에서, 때때로 불필요하거나 비정상적인 필드가 포함되는 경우를 경험할 수 있습니다. 이러한 필드들은 분석 과정에서 혼란을 초래하거나 예상치 못한 오류를 발생시킬 수 있으므로, prune 필터를 사용해 이를 정리하고 필요하지 않은 데이터를 제거하는 것이 중요합니다. 결과적으로, 로그 데이터의 품질과 유용성을 크게 향상시킬 수 있습니다.
보안 장비에서 생성되는 수많은 로그 중, 종종 처음 보는 이상한 필드명이 포함된 로그가 들어오는 경우가 있었습니다. 이 문제로 인해 한동안 고생 아닌 고생을 하게 되었는데요. 다음과 같이 처리하여 문제를 해결할수 있었네요.
위와 같이 AK1, AK12, ad.**, ad.bb, ad.Xz와 같은 무작위로 생성된 필드명을 강제로 제거하고자 한다면, 정규 표현식을 적절히 작성하여 prune filter를 활용하면 해결할 수 있습니다.
필자 생각 정리
사실 로그 데이터 전처리를 위해 꼭 Logstash를 사용할 필요는 없습니다. Elasticsearch의 버전이 개선되면서, 이제는 Logstash 대신 Elastic Ingest Node를 구성하여 활용하는 것도 충분히 가능합니다. Logstash와 Elastic Ingest Node의 성능 차이에 대해서는 "logstash vs ingest node"로 구글에서 검색하면 다양한 비교 자료를 쉽게 확인할 수 있습니다. 이 글은 방대한 보안 로그 이벤트 처리를 다룬 Logstash 활용 사례에 대해 간단히 정리한 내용입니다. 부족한 점이 많겠지만, 이 내용이 누군가에게 작은 도움이 되기를 바랍니다.
'AI, IT 이야기' 카테고리의 다른 글
대용량 SIEM Elasticsearch로 해결하세요 (0) | 2025.06.01 |
---|---|
Arcsight & Elastic Stack 통합 SIEM 구축 사례 (0) | 2025.05.30 |
보안운영의 미래 SECOPS 도입 사례 (0) | 2025.05.21 |
생성형 AI(인공지능) 이란? 어떻게 동작할까? (0) | 2025.04.23 |
구글 젬마3 AI 모델 정말 혁신 적일까? (2) | 2025.04.23 |