네트워크 원격 분석은 데이터를 분석할 수 있도록 네트워크의 기기에서 네트워크 트래픽 데이터를 수집합니다. 네트워크 원격 분석은 보안 운영팀이 네트워크 기반 위협을 감지하고 자동 보안 운영을 위해 필수적인 고급 공격 기술들을 차단할 수 있게 해줍니다. 네트워크 원격 분석을 얻기 위해서는 네트워크 데이터를 캡처하고 저장해야 합니다. 이 청사진은 패킷 미러링 및 Zeek를 사용하여 Google Cloud에서 네트워크 데이터를 캡처하는 방법을 보여줍니다.
이 청사진은 네트워크 트래픽을 미러링하고, 이 데이터를 저장하고, 분석을 위해 전달하려는 보안 분석가 및 네트워크 관리자를 대상으로 합니다. 이 청사진에서는 사용자가 네트워킹 및 네트워크 모니터링에 대한 실무 지식이 있다고 가정합니다.
이 청사진은 다음으로 구성된 보안 청사진의 일부입니다.
- Terraform 구성 및 스크립트 집합이 포함된 GitHub 저장소
- 청사진(이 문서)으로 구현하는 아키텍처, 디자인, 보안 제어에 대한 가이드
이 청사진을 사용하여 패킷 미러링을 사용해서 네트워크 메타데이터를 포함하여 네트워크 패킷을 캡처하고, 네트워크 패킷을 Zeek 로그로 전환하고, 이를 Cloud Logging에 저장합니다. 이 청사진은 IP 주소, 포트, 프로토콜, 레이어 7 헤더 및 요청과 같은 메타데이터를 추출합니다. 네트워크 메타데이터를 Zeek 로그로 저장하면 원시 패킷 데이터를 저장할 때보다 데이터 볼륨이 적게 사용되므로, 더 비용 효율적입니다.
이 문서에서는 Google Cloud 엔터프라이즈 기반 가이드에 설명된 대로 일련의 기본적인 보안 제어가 이미 구성되었다고 가정합니다.
지원되는 사용 사례
이 청사진은 다음 사용 사례를 지원합니다.
- 보안 운영 센터(SOC)에서는 보안 사고를 조사할 수 있도록 중앙화된 위치에서 Google Cloud 네트워크 로드 데이터에 액세스할 수 있어야 합니다. 이 청사진은 분석 및 조사 도구로 전달할 수 있도록 네트워크 패킷 데이터를 로그로 변환합니다. 분석 및 조사 도구에는 BigQuery, Google Security Operations, Flowmon, ExtraHop 또는 보안 정보 및 이벤트 관리(SIEM)가 포함됩니다.
- 보안팀은 Google SecOps와 같은 도구를 사용하여 위협을 차단하기 위해 Google Cloud 네트워크에 대한 가시성이 필요합니다. 이 청사진을 사용하여 Google Cloud 네트워크 트래픽에 대한 파이프라인을 만들 수 있습니다.
- 조직에서 네트워크 감지 및 응답에 대한 규정 준수 요구사항을 충족하는 방법을 보여주려고 합니다. 예를 들어 조직은 미국 관리예산국(OMB)의 각서 M-21-31 규정 준수를 입증해야 합니다.
- 네트워크 보안 분석가는 장기적인 네트워크 로그 데이터가 필요합니다. 이 청사진은 장기 모니터링과 주문형 모니터링을 모두 지원합니다.
또한 패킷 캡처(pcap) 데이터가 필요하면 네트워크 프로토콜 분석기 도구(예: Wireshark 또는 tcpdump)를 사용해야 합니다. 네트워크 프로토콜 분석기 도구 사용은 이 청사진의 범위를 벗어납니다.
Cloud Intrusion Detection System으로는 이 청사진을 배포할 수 없습니다. 이 솔루션과 Cloud Intrusion Detection System 모두 패킷 미러링 정책을 사용하며 이 정책은 한 번에 하나의 서비스에서만 사용할 수 있습니다.
비용
이 청사진은 Cloud Logging에서 컴퓨팅 리소스를 추가하고 상당한 양의 데이터를 저장하기 때문에 비용에 영향을 줄 수 있습니다. 청사진을 배포할 때는 다음을 고려하세요.
- Compute Engine의 각 수집기 가상 머신(VM)은 e2-medium 인스턴스로 실행됩니다.
- 다음 방법에 따라 스토리지 비용을 관리할 수 있습니다.
- 패킷 미러링 필터를 사용합니다.
- 영역 간 이그레스 요금이 부과되지 않도록 영역 간에 미러링하지 않습니다.
- 조직에서 필요한 기간만큼만 데이터를 저장
가격 계산기를 사용하여 컴퓨팅, 로깅, 스토리지 비용을 예상할 수 있습니다.
아키텍처
다음 아키텍처 다이어그램은 이 청사진을 사용하여 구현하려는 인프라를 보여줍니다.
이전 이미지에 표시된 아키텍처에는 다음과 같은 Google Cloud 서비스 및 기능 조합이 사용됩니다.
2개의 Virtual Private Cloud(VPC) 네트워크:
- 미러링된 소스의 Virtual Private Cloud 네트워크
- 수집기 인스턴스의 VPC 네트워크
이러한 VPC 네트워크는 동일한 프로젝트에 있어야 합니다.
특정 리전 및 네트워크 패킷의 소스인 서브넷에 있는 Compute Engine 또는 Google Kubernetes Engine(GKE) 인스턴스(미러링된 소스라고도 부름). 다음 방법 중 하나를 사용하여 소스를 미러링할 인스턴스를 식별합니다.
- 네트워크 태그
- 컴퓨팅 인스턴스 이름
- 서브넷 이름
미러링된 소스와 동일한 리전에서 내부 패스 스루 네트워크 부하 분산기 뒤에서 수집기 인스턴스로 작동하는 Compute Engine 인스턴스. 이러한 인스턴스는 Zeek-Fluentd 골든 이미지 또는 커스텀 zeek-fluentd 이미지를 실행합니다. VM은 e2-medium이고 지원되는 처리량은 4Gbps입니다.
미러링된 소스에서 패킷을 수신하고 이를 처리하도록 수집기 인스턴스로 전달하는 내부 패스 스루 네트워크 부하 분산기. 부하 분산기의 다음 전달 규칙에는
--is-mirroring-collector
플래그가 사용됩니다.VPC 방화벽 규칙은 다음을 허용합니다.
- 미러링된 소스에서 내부 패스 스루 네트워크 부하 분산기로의 이그레스
- 수집기 인스턴스에서 미러링된 인스턴스로의 인그레스
리전, 서브넷, 미러링된 인스턴스, 프로토콜, 방향, 전달 규칙을 정의하는 패킷 미러링 정책. 리전마다 고유한 패킷 미러링 정책이 필요합니다.
여러 리전에서 가용성이 높은 Compute Engine VM 사이에 내부 IP 주소를 사용한 연결을 허용하는 VPC 네트워크 피어링. VPC 네트워크 피어링을 사용하면 미러링된 소스가 내부 패스 스루 네트워크 부하 분산기와 통신할 수 있습니다.
분석 및 조사 도구로 스토리지 및 검색을 위해 모든 패킷을 수집하는 Cloud Logging 인스턴스
필요한 보안 제어 이해
이 섹션에서는 네트워크 모니터링 아키텍처의 다양한 구성요소를 보호하는 데 사용할 수 있는 Google Cloud 내의 보안 제어에 대해 설명합니다.
VPC 네트워크 보안 제어
미러링된 소스 및 수집기에 대한 VPC 네트워크를 만듭니다. 수집기에 대해 VPC 네트워크를 만들 때는 시스템에서 생성된 기본 경로를 삭제합니다. 즉, 모든 기본 내부 게이트웨이 경로가 해제됩니다. 기본 인터넷 게이트웨이를 해제하면 외부 공격자가 공격할 수 있는 네트워크 표면이 줄어듭니다.
각 리전에 대해 VPC 네트워크에 서브넷을 만듭니다. 서브넷을 사용하면 Google Cloud에서 워크로드 사이와 외부 소스에서의 트래픽 흐름을 제어할 수 있습니다. 이 서브넷에는 비공개 Google 액세스가 사용 설정되어 있습니다. 비공개 Google 액세스는 또한 VM이 Google API 및 서비스와 통신하도록 허용하면서 네트워크 공격 표면을 줄이는 데 도움이 됩니다.
VPC 네트워크 사이의 통신을 허용하려면 VPC 네트워크 피어링을 사용 설정합니다. VPC 네트워크 피어링은 내부 IP 주소 연결을 위해 서브넷 경로를 사용합니다. 미러링된 소스와 수집기 사이의 직접 연결을 허용하도록 커스텀 경로를 가져오고 내보냅니다. 수집기의 내부 패스 스루 네트워크 부하 분산기는 전역 경로를 지원하지 않기 때문에 모든 통신을 리전별 경로로 제한해야 합니다.
방화벽 규칙
방화벽 규칙을 사용하여 미러링된 소스 및 수집기가 수행할 수 있는 연결을 정의합니다. 정기적인 업타임 상태 확인을 허용하는 인그레스 규칙, 미러링된 소스의 모든 프로토콜에 대한 이그레스 규칙, 수집기의 모든 프로토콜에 대한 인그레스 규칙을 설정합니다.
수집기 VM 보안 제어
수집기 VM은 패킷 데이터 수신을 담당합니다. 수집기 VM은 관리형 인스턴스 그룹(MIG)으로 작동하는 VM과 동일합니다. 응답하지 않는 VM이 자동으로 다시 생성되도록 허용하려면 상태 확인을 설정합니다. 또한 사용 요구사항에 따라 수집기 자동 확장을 허용합니다.
각 수집기 VM은 zeek-fluentd Packer 이미지를 실행합니다. 이 이미지는 로그를 생성하는 Zeek와 로그를 Cloud Logging으로 전달하는 Fluentd로 구성됩니다. Terraform 모듈을 배포한 후에는 VM OS 및 Zeek 패키지를 업데이트하고 조직에 필요한 보안 제어를 적용할 수 있습니다.
내부 부하 분산 보안 제어
내부 패스 스루 네트워크 부하 분산기는 처리를 위해 미러링된 소스에서 수집기 VM으로 네트워크 패킷 트래픽을 전달합니다. 모든 수집기 VM은 내부 패스 스루 네트워크 부하 분산기와 동일한 리전에서 실행되어야 합니다.
내부 패스 스루 네트워크 부하 분산기의 전달 규칙은 모든 포트에서 액세스가 가능하지만 전역 액세스가 허용되지 않도록 정의합니다. 또한 전달 규칙은 --is-mirroring-collector
플래그를 사용하여 이러한 부하 분산기를 미러링 수집기로 정의합니다
각 수집기 VM이 로그를 Cloud Logging에 직접 업로드하기 때문에 스토리지에 대해 부하 분산기를 설정할 필요가 없습니다.
패킷 미러링
패킷 미러링을 위해서는 미러링하려는 인스턴스를 식별해야 합니다. 네트워크 태그, 인스턴스 이름 또는 인스턴스가 있는 서브넷을 사용하여 미러링하려는 인스턴스를 식별할 수 있습니다. 또한 다음 중 하나 이상을 사용해서 트래픽을 추가로 필터링할 수 있습니다.
- 레이어 4 프로토콜(예: TCP, UDP, ICMP)
- IP 헤더의 IPv4 CIDR 범위(예: 10.0.0.0/8)
- 인그레스나 이그레스 또는 둘 다와 같이, 미러링하려는 트래픽의 방향
서비스 계정 및 액세스 제어
서비스 계정은 사용자 대신 API 요청을 실행하기 위해 Google Cloud에서 사용할 수 있는 ID입니다. 서비스 계정은 사용자 ID가 서비스에 직접 액세스하지 못하게 해줍니다.
Terraform 코드를 배포하려면 프로젝트에서 다음 역할이 있는 서비스 계정을 가장해야 합니다.
roles/compute.admin
roles/compute.networkAdmin
roles/compute.packetMirroringAdmin
roles/compute.packetMirroringUser
roles/iam.serviceAccountTokenCreator
roles/iam.serviceAccountUser
roles/logging.logWriter
roles/monitoring.metricWriter
roles/storage.admin
수집기 VM에는 Google Cloud 서비스에 인증하고, 네트워크 패킷을 가져오고, Cloud Logging으로 전달할 수 있도록 이 서비스 계정도 필요합니다.
데이터 보관 방법
로그 버킷에 대해 보관 규칙을 사용해서 Cloud Logging에서 네트워크 로그가 저장되는 기간을 지정할 수 있습니다. 데이터 저장 기간을 결정하려면 조직의 규제 요구사항을 검토하세요.
로깅 및 감사
Cloud Monitoring을 사용하여 수집기 VM의 성능을 분석하고 업타임 체크 및 성능 조건(예: CPU 부하)에 대해 알림을 설정할 수 있습니다.
Cloud 감사 로그를 사용해서 데이터 및 구성에 대한 관리자 액세스 또는 변경사항을 추적할 수 있습니다. 감사 로깅은 Compute Engine, Cloud Load Balancing, Cloud Logging에서 지원됩니다.
다음과 같이 모니터링 정보를 내보낼 수 있습니다.
추가 분석을 위해 Google SecOps에 내보냅니다. 자세한 내용은 Google SecOps에 Google Cloud 로그 수집을 참고하세요.
Pub/Sub 및 Dataflow를 사용하여 타사 SIEM으로 내보냅니다. 자세한 내용은 SIEM 시스템으로 Google Cloud 보안 데이터 내보내기를 참조하세요.
총정리
이 문서에 설명된 아키텍처를 구현하려면 다음을 수행합니다.
- Google Cloud 엔터프라이즈 기반 청사진에 설명된 대로 Google Cloud에 보안 기준을 배포합니다. 엔터프라이즈 기반 청사진을 배포하지 않기로 한 경우에는 해당 환경에 비슷한 보안 기준이 설정되어 있어야 합니다.
- 청사진의 Readme를 검토하고 모든 기본 요건을 충족해야 합니다.
테스트 환경에서 예시 Network Telemetry 구성 중 하나를 배포하여 청사진이 실제로 작동하는 것을 확인합니다. 테스트 프로세스 중 다음을 실행합니다.
- 패킷 미러링 정책 및 서브넷이 생성되었는지 확인합니다.
로그 뷰어(
roles/logging.viewer
) 역할이 있는지 확인하고 curl 명령어를 사용해서 로그 데이터를 확인합니다. 예를 들면 다음과 같습니다.curl http://example.com/
로그 데이터가 Cloud Logging에 저장되었는지 확인합니다.
Security Command Center를 사용해서 규정 준수 요구사항에 따라 새로 생성된 리소스를 스캔합니다.
시스템이 적절한 네트워크 패킷을 캡처하고 저장하는지 확인하고 필요에 따라 성능을 미세 조정합니다.
프로덕션 환경에 청사진을 배포합니다.
SOC 및 네트워크 보안 분석가가 새 원격 분석을 대시보드로 통합할 수 있도록 Cloud Logging을 SIEM 또는 Google SecOps에 연결합니다.
다음 단계
- 청사진을 통한 작업 수행
- 보안 위협 모니터링에서 5개 원격 분석 유형을 사용하는 시기 알아보기
- Google Cloud에서 Network Telemetry 활용에 대해 알아보기
- 자동 보안 운영을 사용한 SOC 변환 알아보기