본문 바로가기

Elastalert를 이용한 보안 위협 탐지 방법 소개

알찬IT 2025. 4. 7.
반응형

제가 근무중인 회사에서는 평일 기준 평균적으로 엘라스틱서치 클러스터에 축적되는 전체 서비스 보안 이벤트 로그의 상황은 다음과 같은데요. 일별로 기록되는 문서(Document) 수는 약 4억 ~5억건 건 수준이며, 해외의 불특정 다수 IP로부터 스캔성 공격 시도가 지속적으로 발생할 경우 보안 이벤트 로그가 좀더 증가하는 경우도 있습니다.

 

이와같이 방대한 보안 이벤트 로그를 사람이 개별적으로 일일이 분석하고 검토하는 것은 실질적으로 바닷가 모래사장에서 바늘 찾기에 비유할 수 있을 정도로 비효율적입니다. 보안 위협 로그를 보다 효율적으로 식별할 수 있는 방법은 무엇일까요? 실제 어떻게 보안 위협 이벤트를 식별하고 탐지하는지 사례를 통해 설명드리도록 하겠습니다.

 

현재 저희 회사 보안 환경은 IDC 전체 트래픽 구간에 걸친 서비스별 각 벤터별 보안장비 -> Arcsight -> ELK 스택(Elasticsearch)으로 구성되어 있으며, 결과적으로 모든 보안 이벤트 로그는 엘라스틱서치에 의해 저장되고 있습니다. 또한, kibana 화면을 통해 로그 분석을 진행하고 있습니다.

 

만약 회사측에 예산의 여유가 있다면 X-Pack을 유료로 구매해 Watcher를 활용하여 알림 통보 기능을 사용할 수 있다. 그렇지 않거나 보다 경제적인 대안을 원한다면, 오픈 소스인 ElastAlert를 이용해 보안 위협 상황을 자동 감지하고 알림을 제공하는 방식도 유효하다. 본 글은 ElastAlert를 활용한 Elasticsearch 자동화 사례에 대해 다룬다.

 

ElastAlert 이란?

 

ElastAlert는 Elasticsearch 데이터를 활용해 실시간으로 경고(alert)를 생성할 수 있도록 설계된 오픈소스 알림 도구로, 시스템 모니터링과 이벤트 관리에 탁월한 기능을 제공합니다. 주로 로그 데이터를 수집하고 시각화하는 ELK 스택(Elasticsearch, Logstash, Kibana)과 함께 사용되며, 이 조합을 통해 시스템 이벤트를 효과적으로 추적 및 분석할 수 있습니다. 이 도구는 원래 Yelp에서 개발되어 현재는 오픈소스로 제공되고 있어 많은 기업들과 개발자들이 유연하게 활용 중입니다.

 

ElastAlert의 가장 큰 강점은 사용자가 원하는 다양한 규칙(rule)을 정의하여 경고 조건을 설정할 수 있다는 점입니다. 예를 들어, 특정 유형의 로그가 5분 이내에 10건 이상 발생할 경우 이를 감지해 즉시 알림을 보내는 방식으로 작동할 수 있습니다. 이러한 규칙 설계는 시스템이나 애플리케이션의 이상 상황을 신속히 인지하고 대응할 수 있는 기반을 제공합니다.

 

또한, ElastAlert는 알림 전송 방식에서도 매우 유연합니다. Slack과 같은 협업 도구를 통해 팀원들에게 메시지를 전달하거나, 이메일을 통해 관리 담당자에게 중요한 정보를 공유하며, 기본적인 webhook 기능을 활용해 다른 애플리케이션으로 데이터를 연동하는 등 다양한 채널을 지원합니다.

 

이 외에도 정기적으로 Elasticsearch를 쿼리(query)하여 지정된 조건을 주기적으로 확인하고, 조건 충족 시 즉각적으로 알림을 트리거(trigger)하는 자동화 기능이 내장되어 있습니다. 이를 통해 시스템 운영자는 끊임없는 모니터링 부담을 줄이고, 사전에 정의한 중요 이벤트에만 집중적으로 대응할 수 있게 됩니다.

 

Elastalert 알람 실제 탐지 사례 규칙 보기

 

알려진 C2 서버 통신 탐지

 

- Type: Blacklist

- C&C 서버 통신 여부를 사전에 정의된 blacklist 파일과 매칭해 알림을 전송.

- c2-server-list.txt`는 탐지해야 할 IP 리스트.

 

name: "C2 서버 통신 탐지"

type: blacklist

use_local_time: false

use_strftime_index: true

index: xxxx-%Y.%m.%d



blacklist:

- "!file /data/elastalert/file/c2-server-list.txt"

filter:

- query:

query_string:

query: "NOT sourceAddress:(x.x.x.x OR 88.x.x.x OR 192.17.x.x) AND NOT destinationPort:(80 OR 443 OR 25)"

alert_text: "Match Count: {0} \n{1} {2} {3} {4} {5} {6} {7} {8} {9}"

alert_text_type: "alert_text_only"

alert_text_args: ["num_matches", "@timestamp", "deviceHostName", "deviceAction", "source.country_code2", "sourceAddress", "sourcePort", "destination.country_code2", "destinationAddress", "destinationPort"]



alert:

- slack

- email



slack:

slack_webhook_url: "https://hooks.slack.com/services/XYSKLJLF/KBVDLHUCVXLK99/..."



email:

- "id001@xxxxxxxx.com"

- "id002@xxxxxxxx.com"

 

 

무작위 스캔 공격에 대한 탐지

 

- Type: Frequency

- 해외 IP 중 1분 내 1000건 이상의 접근을 기록한 소스 IP를 탐지 후 알림 발송.

 

 

name: "1분간 1000회 이상 Hit 의심 출발지 IP"

type: frequency

num_events: 1000

timeframe: 1

minutes: 1

use_strftime_index: true

index: xxxx-%Y.%m.%d



filter:

- query:

query_string:

query: "NOT source.country_code2:KR AND NOT deviceAction:(deny OR drop OR Block) AND _exists_:source.country_code2"



query_key: "sourceAddress"

alert_text: "Match Count: {0} \n{1} {2} {3} {4} {5} {6} {7} {8} {9}"

alert_text_type: "alert_text_only"

alert_text_args: ["num_matches", "@timestamp", "deviceHostName", "deviceAction", "source.country_code2", "sourceAddress", "sourcePort", "destination.country_code2", "destinationAddress", "destinationPort"]



alert:

- slack

- email



slack:

slack_webhook_url: "https://hooks.slack.com/services/..."



email:

- "dummytest01@mail.com"

- "dummytest02@mail.com"

 

보안 장비의 장애 알람 설정과 활용 방안에 대한 내용을 요약 및 정리한 문서입니다. 이 설정은 특정 이벤트 발생 시 자동으로 알람을 통보함으로써 보안 위협에 대한 실시간 대응을 가능하게 합니다.

 

장애 알람 설정

 

- 알람 조건: 특정 필드에 `critical`이라는 값이 매칭될 경우.

- 알람 타입: `frequency`를 기본으로 사용하며, 다른 타입도 설정 가능.

- 필터링: 문자열 `(level:critical OR pri:critical) AND NOT deviceAction:update` 조건에 매칭하여 필터링.

- 알림 방식: Slack 및 이메일로 알람 통보. Slack 웹훅 URL과 이메일 주소를 설정하여 자동 알림 전달.

 

Elastalert으로 탐지된 보안 위협 이벤트에 대해 Slack 알람 발생 예시 스크린샷입니다.

 

Elastalert-slack-알람-예시
elastalert slack 알람 예시

 

Elastalert 활용 시작 스크립트 예시

 

Elastalert는 OS별 서비스로 등록해 실행하거나, 각 룰별로 백그라운드에서 실행할 수 있습니다. 백그라운드 실행의 장점으로 인해 보안 위협 탐지 스크립트에 적용하면 더욱 효율적입니다.

 

  • 기본 설정 파일 및 로그 파일 경로 지정.
  • 스크립트를 통해 `nohup` 명령으로 Elastalert 실행.
  • 디버깅이나 확인을 위해 프로세스 상태를 출력.

 

보안 장비 및 기술 활용의 한계와 장점

 

보안 이벤트 로그는 방대하고 다양하며, 벤더별로 특성이 다르기 때문에 AI와 머신러닝을 통한 완벽한 위협 탐지에는 한계가 있습니다. 비록 100% 완벽한 해결책은 아니지만, 적절히 선택하고 활용하면 업무 효율성을 높이고 보안 관리자의 부담을 줄이는 데 도움이 됩니다.

 

결론 및 필자 생각

 

  • elastalert 장점: 실시간 알람 자동화를 통해 신속한 대응이 가능하며, 이를 통해 적절한 위치에서 활용하면 보안 업무가 더욱 효율적이 됩니다.
  • 사람의 역할: 궁극적으로 위협 판단과 결정은 사람이 해야 하며, 오탐과 정탐에 대한 최종 확인도 사람의 책임입니다.
  • 거시적 관점 필요: 보안 관리자들은 장비에만 의존하지 말고 넓은 시야로 분석하고 대응 능력을 키워야 합니다.

 

Elastalert 같은 오픈소스나 IT 기술 발전이 보안 관리자를 지원하고 업무의 효율성을 많이 개선해준다고 해서 보안 사고에 대한 모든 부분을 해결해 주지는 않습니다. 가장 중요한 점은 적재적소에 기술을 통합함과 동시에 사람의 판단 능력을 지속적으로 강화하는 것이 침해사고 피해를 최소화하고 성공적인 보안 대응을 위한 필수 요소라고 생각합니다.

 

반응형

댓글