[AWS-Security] 10.1. 보안 이벤트 추적
1. SIEM 및 형상 관리도구
Amazon Inspector (호스트 취약점), Amazon GuardDuty(네트워크/로그 위협), Prowler(인프라 구성 취약점) 등 다양한 도구에서 보안 경고가 발생한다.
[분산된 경고의 문제점]
- 이러한 보안 경고는 모두 분산되어 있다. (Inspector의 결과는 Inspector 콘솔에, GuardDuty의 결과는 GuardDuty 콘솔에, Prowler의 결과는 터미널의 JSON 파일에)
- 경고의 형식과 위치가 모두 다르면, 보안 팀은 여러 곳을 돌아다녀야 하며 어떤 문제가 해결되었고 어떤 문제가 미해결 상태인지 추적하기 어렵다.
[해결책: SIEM 및 형상 관리 도구] 프로세스를 단순화하기 위해 모든 경고를 한 곳으로 모으는 도구가 필요하다.
- SIEM (보안 정보 및 이벤트 관리) : Datadog, Splunk 등이 대표적이며, 로그 수집, 상관관계 분석, 패턴 시각화 등의 고급 기능을 제공한다.
- 형상 관리 도구 : AWS에서 가장 쉽게 접근할 수 있는 도구인 AWS Security Hub가 있다.
2. 경고 중앙 집중화 (AWS Security Hub)
AWS Security Hub는 규정 준수(CIS 벤치마크 등)를 평가할 때도 사용하지만, 다양한 소스의 보안 경고를 단일 대시보드에 모아주는 경고 통합 플랫폼 역할도 수행한다.
2.1. Security Hub 활성화 및 AWS 네이티브 서비스 통합
Security Hub를 사용하기 위해서는 리소스의 변경 사항을 기록하는 AWS Config가 활성화되어 있어야 한다.
- 자동 통합의 편리함 : Security Hub가 활성화되면, Amazon Inspector나 Amazon GuardDuty 같은 AWS 네이티브 보안 서비스들은 자신이 찾은 검사 결과(Findings)를 Security Hub로 자동으로 전달한다.
- 사용자가 별도로 연동 작업 없이, Security Hub 대시보드에서 GuardDuty의 경고 목록을 즉시 확인할 수 있다.
2.2. 타사 도구(Prowler)의 검사 결과 통합
AWS 기본 서비스가 아닌 Prowler 같은 오픈소스/타사 도구는 결과를 자동으로 보내주지 않는다.
공식적인 통합 기능을 통해 결과를 가져오도록 설정해야 한다.
2.2.1. 1단계: Security Hub에서 타사 제품 통합 활성화
AWS CLI를 통해 Security Hub가 Prowler의 데이터를 받을 수 있도록 권한(통합)을 열어준다.
1
2
3
4
5
# Prowler 검사 결과를 Security Hub로 가져오기 활성화
$ aws securityhub enable-import-findings-for-product \
--region us-west-2 \
--product-arn arn:aws:securityhub:us-west-2::product/prowler/prowler
--product-arn: Prowler라는 특정 제품을 위한 고유 식별자(ARN)를 지정한다. (자체 제품의 ARN)
2.2.2. 2단계: Prowler 스캔 실행 및 결과 전송
Prowler를 실행할 때, 결과를 화면에 출력하는 것이 아니라 Security Hub가 이해할 수 있는 표준 형식(ASFF:AWS Security Finding Format)으로 변환하여 전송하는 옵션을 추가한다.
1
2
3
# Prowler 스캔을 실행하고 검사 결과를 Security Hub로 전송
$ ./prowler -M json-asff -q -S -f us-west-2
-M json-asff: 출력 형식을 Security Hub 전용 포맷(JSON ASFF)으로 설정한다.-q: 실패한(문제 있는) 항목만 간략하게 표시한다.-S: 검사 결과를 Security Hub로 전송한다.
2.3. 상태 추적
경고 목록이 길어질 경우 새로운 사항, 작업 중인 사항, 이미 해결된 사항을 구분하기 위해 Security Hub에서는 ‘워크플로(Workflow) 상태’ 필드를 제공한다. 워크플로 상태는 아래 4가지로 나뉜다.
- 신규 (NEW) : 검사 결과에 대해 아직 조치를 취하지 않은 상태
- 통지됨 (NOTIFIED) : 검사 결과에 대해 적극적으로 조치 중인 상태
- 해결됨 (RESOLVED) : 추가 조치가 필요하지 않은 상태
- 억제됨 (SUPRESSED) : 이런 유형의 검사 결과에 대해 더 이상 경고하지 않도록 함
업데이트하려는 검사 결과의 ARN을 알고 있는 경우 AWS CLI를 사용해 검사 결과 상태를 업데이트할 수도 있다.
1
2
3
$ aws security-hub batch-update-findings \
--finding-identifiers Id=abc123,ProductArn=arn:aws:securityhub:us-west-2::product/prowler/prowler \
--workflow Status=RESOLVED
batch-update-findings:BatchUpdateFindings메소드는 하나의 검사 결과에 대해서도 워크플로 상태를 업데이트하는데 사용된다.--finding-identifiers...: 검사 결과는 ID와 제품 ARN의 고유한 조합으로 식별된다. 업데이트할 대상을 지정한다.--workflow Status=RESOLVED: 설정하려는 새로운 워크플로 상태로 교체한다. (여기서는 RESOLVED로 변경)
검색 필터 Security Hub의 검색 필터를 사용하면 특정 조건의 결과를 쉽게 가져올 수 있다.
2.3. 데이터 분석
검사 결과가 누적되어 많은 데이터가 쌓이면, 이를 분석하여 보안의 추세와 잠재적인 개선 영역을 파악할 수 있다.
예를 들어, 특정 리소스에 네트워크 공격 관련 GuardDuty 검사 결과가 집중된다면 네트워크 제어를 강화하거나 리소스를 격리할 수 있고, 호스트에서 패치 누락 경고가 자주 발생한다면 패치 관리 프로세스를 재평가할 수 있다.
2.3.1. 인사이트(Insights) 활용
Secucity Hub에서 데이터 분석을 수행하는 주요 방법 중 하나는 ‘인사이트’ 기능을 활용하는 것이다.
인사이트는 특정 기준에 따라 분류된 흥미로운 검사 결과들의 모음이다.
- Security Hub는 기본적으로 사전 정의된 관리형 인사이트(Managed Insights)를 제공한다. (ex. 가장 많은 검사 결과가 있는 상위 AMI 등)
- 사용자는 필요에 따라 고유한 사용자 지정 인사이트를 직접 만들 수 있다.
- 조건에 맞는 검사 결과들이 심각도, 계정 ID, 리소스 유형 별로 시각화되어 나타난다.
2.3.2. CLI를 이용한 사용자 지정 인사이트 생성
사용자 지정 인사이트는 콘솔 UI 뿐만 아니라 AWS CLI를 통해서도 생성할 수 있다. 아래 코드는 심각도가 ‘CRITICAL’인 IAM 역할 관련 검사 결과를 그룹화하는 인사이트를 생성하는 예시이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
$ aws securityhub create-insight \
--filters '{
"ResourceType": [{
"Comparison": "EQUALS",
"Value": "AwsIamRole"
}],
"SeverityLabel": [{
"Comparison": "EQUALS",
"Value": "CRITICAL"
}]
}' \
--group-by-attribute "ResourceId" \
--name "Roles with Critical Findings"
--filters: 해당 인사이트 규칙에 적용되는 검사 결과를 필터링 한다."ResourceType"항목 : 대상을 IAM 역할(AwsIamRole)에 적용되는 검사 결과로만 제한한다."SeverityLabel"항목 : 대상을 심각도가 ‘CRITICAL’인 검사 결과로만 제한한다.--group-by-attribute: GroupBy 속성을 지정하여 검사 결과에서 도출된 결과를 특정 속성 기준으로 그룹화한다.