보안 위협 탐지 이벤트 Logstash Filter 적용 예제 – 2편

엘라스틱서치를 이용하여 전사 보안 장비들의 모든 로그를 수집중에 있습니다. 이기종 다양한 벤더들의 로그를 엘라스틱 스택에 저장하기 위해서는 로그 수집 전처리 과정에서 filter를 통해 중요한 필드들이 누락되지 않도록 커스터마이징을 해야합니다.

 

상단 보안 장비중 APT, WAF, IPS등 다양한 보안 장비를 운영중입니다.  다양한 이기종 벤더 보안 장비를 통해 발생하는 로그는 하루에도 수천~수만 건 발생합니다. 정말 중요한 보안 위협 이벤트에 대해 Logstash Filter를 통해 현재 제가 근무하는 회사에서는 다음과 같이 적용하고 있습니다. 각 항목별 어떤 의미인지 주석으로 설명을 추가하였습니다.

 

아래 내용은 logstash 환경 설정 파일의 일부입니다. filter 부분만 정리한 내용입니다.

 

filter {
  date {
    match => [ “deviceReceiptTime”, “MMM dd yyyy HH:mm:ss”, “MMM  d yyyy HH:mm:ss”, “UNIX_MS” ]
  }
  # 방화벽 필드중 Attack_Group나 BL로 시작하는 필드는 모두 drop 폐기 (운영 이슈상 굳이 엘라스틱에 저장할 필요가 없음)
  if [deviceCustomString1] =~ /^Attacker_Group+/ or [deviceCustomString1] =~ /^BL+/ {
     drop {}
  }
  # 방화벽 명칭이 TS로 시작하는 모든 디바이스에 대하여 각 필드별 이름을 식별이 쉽게 바꿔주는 부분입니다.
   if [deviceHostName] =~ /^TS-FW+/ {
mutate {
         rename => { “deviceCustomString1” => “policyName” }
         rename => { “name” => “csname” }
         rename => { “severity” => “csseverity” }
         rename => { “applicationProtocol” => “csapplicationProtocol” }
    }
   }
# IPS 보안 장비에서 특정 필드를 -> 각 구간별 식별할수 있게 필드명을 rename
   if [deviceHostName] =~ /^IPS+/ {
    mutate {
        rename => { “deviceCustomString1” => “ZONE” }
   }
  }
 # WAF 웹방화벽의 특정 필드명을 엘라스틱에 저장시 운영자가 필드 식별이 가능하게 아래와 같이 모든 필드명을 변경해줍니다.
   if [deviceHostName] =~ /^TARWAF+/ {
    mutate {
        rename => { “deviceCustomNumber2” => “statusCode” }
        rename => { “deviceCustomString3” => “hostName” }
        rename => { “deviceCustomString5” => “requestHeader” }
        rename => { “deviceCustomString6” => “responseHeader” }
        rename => { “severity” => “hostSeverity” }
         }
  }

# 특정 벤더 Fireeye 보안장비에서 유입되는 로그의 특정 필드명을 다음과 같이 식별이 용이 하도록 변경해줍니다.

if [deviceHostName] =~ “Fireeye” {
mutate {
rename => { “deviceCustomString1” => “title” }
rename => { “deviceCustomString2” => “detectName” }
rename => { “deviceCustomString3” => “domainName” }
rename => { “deviceCustomString6” => “threatAction” }
rename => { “deviceEventCategory” => “threatType” }
rename => { “severity” => “hostSeverity” }
}
}

# 다음 항목은 prune 필터를 이용하여 로그 필드명에 다음과 같은 문자열이 있으면 모두 제거하는 설정입니다.

prune {
blacklist_names => [ “^*[\\]+”, “^*[/]+”, “^*[..]+”, “^ad.+”, “^A.+”, “^B.+”, “^AK1+”, “^SH2+”, “^AK+”, “^agent+”, “^deviceEvent+”, “^file+”, “^cfg+”, “^category+” ]
}

}

 

상기 내용외에도 수많은 설정이 있습니다. 이유는 앞서 언급했듯이 각종 이기종 벤더의 로그 타입은 모두 다르기 때문에 Elasticsearch 단일 스택으로 수집하려면 logstash 와 같은 전처리 로그 유입 부분에서 다양한 필터를 적용하여 파싱 작업을 해야합니다.

추가적으로, 현재 근무중인 회사에서는 logstash input type은 CEF 포맷을 원칙으로 적용하여 운영하고있습니다. CEF 포맷의 경우 logstash 버전이 올라가면서 Legacy 타입의 로그들은 일부 파싱이 제대로 되지 않는 현상이 있습니다. 이와 같은 부분은 고려해서 logstash 버전을 업그레이드 하시는것이 바람직합니다.

 


게시됨

카테고리

작성자

댓글

답글 남기기