Elastalert 활용, 보안 위협 이벤트 탐지 방법 소개
정보 보안 현업에서는 매일 지속적으로 발생하는 보안 위협 이벤트에 대해 정.오탐을 분류하는 업무는 매우 힘들고 지치는 일입니다. 이와 같은 이유로 대부분 위협이라고 판단할만한 이벤트에 대해서는 알람을 걸어 모니터링을 진행하고 있는데요. 이번 시간에는 Elasticsearch에 저장되는 보안 이벤트를 실시간으로 감시하여 정해진 Rule에 매칭되면 알람 통해 알려주는 오픈소스 Elastalert에 대해 살펴보고 실제 저희 회사에서 정해놓은 몇가지 Rule을 소개해드리도록 하겠습니다.
Elastalert 오픈 소스 소개
ElastAlert는 Elasticsearch 데이터에서 이상 징후, 급격한 변화 또는 주목할 만한 패턴을 감지하고 알림을 제공하는 간단한 프레임워크입니다.
Yelp는 데이터와 로그의 양이 지속적으로 증가함에 따라 Elasticsearch, Logstash, Kibana를 도입했습니다. Kibana는 데이터 시각화와 쿼리에 매우 유용하지만, 데이터 불일치에 대한 실시간 알림 기능이 필요하다는 것을 빠르게 인식하게 되었습니다. 이러한 요구에 부응하여 ElastAlert가 탄생했습니다.
Elasticsearch에 거의 실시간으로 데이터가 입력될 때, 특정 패턴과 일치하는 데이터를 모니터링하고 알림을 받고 싶다면 ElastAlert 오픈소스를 이용하면 해결책이 될수 있습니다.
이렇게 Elastalert을 활용하고 있어요
제가 근무중이 회사에서는 Elastalert를 이용하여 ELK STACK에 저장되는 서비스 전체 보안 로그를 실시간으로 모니터링하여 정해진 규칙에 일치하게되면 slack, e-mail 두가지로 동시에 알람을 통보하게 되어 있습니다. elastalert에서 제공하는 알람 통보 방법은 매우 다양한데요. 원하는 방식으로 선택하여 .yaml 파일에서 환경 설정을 적절하게 적용해 주시면 됩니다.
Elasticsearch 쿼리 규칙을 통해 보안 위협을 탐지하고 이를 Slack 알림으로 받아볼 수 있는 내용에 대해 말씀드리겠습니다. 이러한 탐지 알림은 내부적으로 일부 이메일을 통해서도 전달되고 있습니다.
저희 회사는 현재 T사의 APT 보안 솔루션을 주로 사용하며, 이를 Elasticsearch와 연동하여 활용하고 있습니다. 즉, 특정 벤더사 APT 장비의 모든 보안 이벤트 로그를 -> Elastic STACK로 저장하고 있습니다. 여기에 저장되는 로그를 실시간 감시하고 있는데요. Elastalert의 빈도(frequency), 우선순위(priority) 같은 다양한 변수들을 조합하여 규칙(Rule)을 작성하여 보안 위협 이벤트를 탐지하고 있습니다.
특히, 대표적인 악성 행위에 대한 탐지 규칙을 설정하여 이를 대응하기 위한 사례로 들 수 있습니다. 이러한 시스템은 보안 위협에 신속하게 대응하는 데 큰 도움을 주고 있습니다.
Web shell 탐지 예시
deviceHostName:D-APT AND name:(*CHOPPER* OR *WEBSHELL* OR *ANTSWORD*) AND NOT requestUrl:(*.php* OR *asp.jpg* OR *md5.aspx* OR *poc.jsp* OR "*wp-admin*" OR "*wp-content*" OR "*wp-json*")
Rule 설명 : name 필드에서 위에서 나열한 문자열이 포함되고, 요청 URL이 asp.jpg등 위에서 나열된 문자열이 포함되지 않을 경우 알람 통보.
Virus Pattern 스캔성 공격 시도 탐지 예시
deviceHostName:D-APT AND applicationProtocol:"Network Virus Pattern in TCP" AND NOT destinationAddress:x.x.x.100
Rule 설명 : 보안 이벤트 로그 applicationProtocol 필드가 Newrok Virus Pattern in TCP 일 경우 알람 통보. 단, 목적지 IP가 x.x.x.100이 아닐경우만.
악성코드 설치에 대한 탐지 예시
deviceHostName:D-APT AND name:("ELF File requested from root directory - HTTP (Response)" OR "Executable file download from root directory - HTTP (Response)" OR "Executable Image Download - HTTP (Response)" OR "Powershell script requested from root directory - HTTP (Request)" OR "BADPOTATO - HTTP (Response)" OR "XMRIG - HTTP (Response)" OR "ZEGOST - HTTP (Response)" OR "TOOLPOW - HTTP (Response)" OR "TROJ_GEN.R002C0PAF21 - HTTP (Response)" OR "MALXMR - HTTP (Response)" OR *COBALT*)
Rule 설명 : ELF(리눅스 실행파일), 이나 Windows OS 기반에서 exe등 실행파일 등이 서버나 호스트에서 실행될때 탐지하는 규칙입니다. 또한, 잘 알려진 Trojan이나 대표적인 악성코드명 등이 매칭 될때 알람을 발생 시킵니다.
SQL Injection & XSS 탐지 예시
deviceHostName:D-APT AND name:(SQL* OR *WebScript*) AND NOT requestUrl:(*index.php* OR *cgi* OR *switchnets* OR *scan.* OR *dawso* OR *arm*)
Rule 설명 : name 필드에 SQL 문자열이나 XSS 관련 문자열이 매칭 될때 알람을 발생시키며, 요청 url이 *cgi*등 나열된 문자열리 아닐 경우에만 알람이 발생됩니다.
Metasploit 공격 의심 로그 탐지 예시
deviceHostName:D-APT AND name:(*Metasploit* OR *METASPLOIT*) AND NOT name:"METASPLOIT - Malicious Certificate - HTTPS"
Rule 설명 : 잘 알려진 Metasploit 공격 형태에 대해 탐지하는 Rule 입니다. 제외 조건은 "METASPLOIT - Malicious Certificate - HTTPS" 입니다.
Directory Traversal 스캔성 로그 탐지 예시
deviceHostName:D-APT AND name:*Directory* AND NOT name:*GZ* AND NOT source.country_code2:KR
Rule 설명 : 한국이 아닌 해외에서 Directory Traversal 관련 공격으로 탐지 할때 알람 통보. 단, name 필드에 GZ 문자열이 없을 경우만 통보.
Elastalert 환경설정 파일 .yaml 예시
알람 설정시 가장 중요한 부분이 각 Rule에 따른 .yaml 환경 설정 파일입니다. 하기 파일은 "Directory Traversal" 탐지 규칙에 대한 환경 설정 파일 예시이니 참고하시면 도움이 될것입니다.
name: "보안 위협 탐지 Directory Traversal"
type: frequency
use_local_time: false
use_strftime_index: true
index: arcsight-%Y.%m.%d
num_events: 20
timeframe:
minutes: 5
filter:
- query:
query_string:
query: deviceHostName:D-APT AND name:*Directory* AND NOT name:*GZ* AND NOT source.country_code2:KR
alert_text: "Match Count: {0} \n{1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}"
alert_text_type: "alert_text_only"
alert_text_args: ["num_matches", "@timestamp", "deviceHostName", "source.country_code2", "sourceAddress", "sourcePort", "destination.country_code2", "destinationAddress", "destinationPort", "applicationProtocol", "name", "requestUrl"]
alert:
- slack
- email
slack:
slack_webhook_url: "https://hooks.slack.com/services/T9YJYxxxxxxxxxxxxxxxxxxx"
slack_proxy: "10.100.112.29:8000"
email:
- "user001@mycompany.net"
- "user002@mycompany.net"
- "user003@mycompany.net"
"Directory Traversal" 공격 실제 알람 발생 화면 예시
이 외에도 사실 수많은 Elastalert 탐지 규칙을 적용하여 보안 위협 이벤트에 대한 알람을 통보 받고 있습니다. 대표적인 몇가지 사례만 소개해 드렸는데요. 추가적으로 IPS, WAF 같은 보안 장비 로그를 기반으로 Elastalert를 이용하여 위협적인 로그에 대해 탐지 규칙을 적용하여 실시간으로 알람을 받아 볼수 있으니 적극적으로 활용해 보시기 바랍니다.
댓글