시큐리티 레이크 쿼리 AWS 소스 버전 1 (OCSF1.0.0-rc.2) - Amazon Security Lake

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시큐리티 레이크 쿼리 AWS 소스 버전 1 (OCSF1.0.0-rc.2)

다음 섹션에서는 Security Lake에서 데이터를 쿼리하는 방법에 대한 지침을 제공하고 기본적으로 지원되는 몇 가지 쿼리 예제를 제공합니다. AWS 소스. 이러한 쿼리는 특정 데이터를 검색하도록 설계되었습니다. AWS 리전. 이 예에서는 us-east-1 (미국 동부 (버지니아 북부)) 을 사용합니다. 또한 예제 쿼리는 최대 25개의 레코드를 반환하는 LIMIT 25 파라미터를 사용합니다. 이 파라미터를 생략하거나 원하는 대로 조정할 수 있습니다. 더 많은 예를 보려면 Amazon Security Lake OCSF 쿼리 GitHub 디렉터리를 참조하십시오.

로그 소스 테이블

Security Lake 데이터를 쿼리할 때는 데이터가 있는 Lake Formation 테이블의 이름을 포함해야 합니다.

SELECT * FROM amazon_security_lake_glue_db_DB_Region.amazon_security_lake_table_DB_Region_SECURITY_LAKE_TABLE WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

로그 소스 테이블의 일반적인 값은 다음과 같습니다.

  • cloud_trail_mgmt_1_0 – AWS CloudTrail 관리 이벤트

  • lambda_execution_1_0— Lambda용 CloudTrail 데이터 이벤트

  • s3_data_1_0— S3용 CloudTrail 데이터 이벤트

  • route53_1_0 – Amazon Route 53 Resolver 쿼리 로그

  • sh_findings_1_0 – AWS Security Hub 결과

  • vpc_flow_1_0— 아마존 가상 사설 클라우드 (아마존VPC) 플로우 로그

예: 미국 동부 1 리전의 표 sh_findings_1_0에 있는 모든 Security Hub 조사 결과

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

데이터베이스 리전

Security Lake 데이터를 쿼리할 때는 데이터를 쿼리하려는 데이터베이스 리전의 이름을 포함해야 합니다. 현재 Security Lake를 사용할 수 있는 데이터베이스 리전의 전체 목록은 Amazon Security Lake 엔드포인트를 참조하십시오.

예: 목록 AWS CloudTrail 소스 IP에서의 활동

다음 예는 소스 IP의 모든 CloudTrail 활동을 나열합니다.192.0.2.1 이후에 기록된 내용입니다.20230301 (2023년 3월 1일), 표 내용 cloud_trail_mgmt_1_0 에서 us-east-1 DB_Region.

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay > '20230301' AND src_endpoint.ip = '192.0.2.1' ORDER BY time desc LIMIT 25

파티션 날짜

데이터를 분할하면 각 쿼리가 스캔하는 데이터의 양을 제한하여 성능을 향상시키고 비용을 절감할 수 있습니다. Security Lake는 eventDay, regionaccountid 파라미터를 통해 파티셔닝을 구현합니다. eventDay 파티션은 형식 YYYYMMDD을 사용합니다.

다음은 eventDay 파티션을 사용한 예제 쿼리입니다.

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay > '20230301' AND src_endpoint.ip = '192.0.2.1' ORDER BY time desc

eventDay에 대한 공통값은 다음과 같습니다.

최근 1년 동안 발생한 이벤트

> cast(date_format(current_timestamp - INTERVAL '1' year, '%Y%m%d%H') as varchar)

지난 1개월 동안 발생한 이벤트

> cast(date_format(current_timestamp - INTERVAL '1' month, '%Y%m%d%H') as varchar)

지난 30일 동안 발생한 이벤트

> cast(date_format(current_timestamp - INTERVAL '30' day, '%Y%m%d%H') as varchar)

지난 12시간 동안 발생한 이벤트

> cast(date_format(current_timestamp - INTERVAL '12' hour, '%Y%m%d%H') as varchar)

지난 5분간 발생한 이벤트

> cast(date_format(current_timestamp - INTERVAL '5' minute, '%Y%m%d%H') as varchar)

7~14일 전에 발생한 이벤트

BETWEEN cast(date_format(current_timestamp - INTERVAL '14' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar)

특정 날짜 또는 이후에 발생하는 이벤트

>= '20230301'

예: 2023년 3월 192.0.2.1 1일 또는 이후 소스 IP의 모든 CloudTrail 활동 목록 (표 참조) cloud_trail_mgmt_1_0

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay >= '20230301' AND src_endpoint.ip = '192.0.2.1' ORDER BY time desc LIMIT 25

예: 테이블에 최근 30일간 소스 192.0.2.1 IP의 모든 CloudTrail 활동이 나열되어 있습니다. cloud_trail_mgmt_1_0

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay > cast(date_format(current_timestamp - INTERVAL '30' day, '%Y%m%d%H') as varchar) AND src_endpoint.ip = '192.0.2.1' ORDER BY time desc LIMIT 25

CloudTrail 데이터 쿼리 예시

AWS CloudTrail 사용자 활동 및 API 사용을 추적합니다. AWS 서비스. 구독자는 CloudTrail 데이터를 쿼리하여 다음 유형의 정보를 학습할 수 있습니다.

다음은 CloudTrail 데이터 쿼리의 몇 가지 예시입니다.

에 대한 무단 시도 AWS 서비스 지난 7일 동안

SELECT time, api.service.name, api.operation, api.response.error, api.response.message, unmapped['responseElements'], cloud.region, actor.user.uuid, src_endpoint.ip, http_request.user_agent FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND api.response.error in ( 'Client.UnauthorizedOperation', 'Client.InvalidPermission.NotFound', 'Client.OperationNotPermitted', 'AccessDenied') ORDER BY time desc LIMIT 25

지난 7일간 소스 192.0.2.1 IP의 모든 CloudTrail 활동 목록

SELECT api.request.uid, time, api.service.name, api.operation, cloud.region, actor.user.uuid, src_endpoint.ip, http_request.user_agent FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND src_endpoint.ip = '127.0.0.1.' ORDER BY time desc LIMIT 25

지난 7일간의 모든 IAM 활동 목록

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND api.service.name = 'iam.amazonaws.com' ORDER BY time desc LIMIT 25

지난 7일 동안 자격 증명 AIDACKCEVSQ6C2EXAMPLE이 사용된 인스턴스

SELECT actor.user.uid, actor.user.uuid, actor.user.account_uid, cloud.region FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND actor.user.credential_uid = 'AIDACKCEVSQ6C2EXAMPLE' LIMIT 25

지난 7일간 실패한 CloudTrail 레코드 목록

SELECT actor.user.uid, actor.user.uuid, actor.user.account_uid, cloud.region FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0 WHERE status='failed' and eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) ORDER BY time DESC LIMIT 25

Route 53 Resolver 쿼리 로그의 쿼리 예제

Amazon Route 53 리졸버 쿼리 로그는 아마존 내 리소스에서 수행한 DNS 쿼리를 추적합니다. VPC 구독자는 Route 53 Resolver 쿼리 로그를 쿼리하여 다음 유형의 정보를 학습할 수 있습니다.

Route 53 Resolver 쿼리 로그의 쿼리 예제는 다음과 같습니다.

지난 CloudTrail 7일간의 DNS 쿼리 목록

SELECT time, src_endpoint.instance_uid, src_endpoint.ip, src_endpoint.port, query.hostname, rcode FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_route53_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) ORDER BY time DESC LIMIT 25

s3.amazonaws.com지난 7일 동안 일치하는 DNS 쿼리 목록

SELECT time, src_endpoint.instance_uid, src_endpoint.ip, src_endpoint.port, query.hostname, rcode, answers FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_route53_1_0 WHERE query.hostname LIKE 's3.amazonaws.com.' and eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) ORDER BY time DESC LIMIT 25

지난 7일 동안 해결되지 않은 DNS 쿼리 목록

SELECT time, src_endpoint.instance_uid, src_endpoint.ip, src_endpoint.port, query.hostname, rcode, answers FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_route53_1_0 WHERE cardinality(answers) = 0 and eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

지난 7일 동안 192.0.2.1해결된 DNS 쿼리 목록

SELECT time, src_endpoint.instance_uid, src_endpoint.ip, src_endpoint.port, query.hostname, rcode, answer.rdata FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_route53_1_0 CROSS JOIN UNNEST(answers) as st(answer) WHERE answer.rdata='192.0.2.1' and eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

Security Hub 조사 결과 쿼리 예제

Security Hub는 다음과 같은 보안 상태를 포괄적으로 보여줍니다. AWS 또한 보안 업계 표준 및 모범 사례와 비교하여 환경을 점검하는 데 도움이 됩니다. Security Hub는 보안 검사 조사 결과를 생성하고 타사 서비스로부터 조사 결과를 수신합니다.

Security Hub 조사 결과에 대한 몇 가지 예제 쿼리는 다음과 같습니다.

지난 7일간의 심각도가 MEDIUM이상인 새로운 조사 결과

SELECT time, finding, severity FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0_findings WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND severity_id >= 3 AND state_id = 1 ORDER BY time DESC LIMIT 25

지난 7일간의 중복된 조사 결과

SELECT finding.uid, MAX(time) AS time, ARBITRARY(region) AS region, ARBITRARY(accountid) AS accountid, ARBITRARY(finding) AS finding, ARBITRARY(vulnerabilities) AS vulnerabilities FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) GROUP BY finding.uid LIMIT 25

지난 7일간의 모든 정보 외 조사 결과

SELECT time, finding.title, finding, severity FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE severity != 'Informational' and eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

리소스가 Amazon S3 버킷인 경우 조사 결과 (시간 제한 없음)

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE any_match(resources, element -> element.type = 'amzn-s3-demo-bucket') LIMIT 25

일반적인 취약성 점수 시스템 (CVSS) 점수가 (시간 제한 없음) 보다 1 높은 결과

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE any_match(vulnerabilities, element -> element.cve.cvss.base_score > 1.0) LIMIT 25

일반적인 취약성 및 노출과 일치하는 결과 (CVE) CVE-0000-0000 (시간 제한 없음)

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE any_match(vulnerabilities, element -> element.cve.uid = 'CVE-0000-0000') LIMIT 25

지난 7일 동안 Security Hub에서 조사 결과를 전송한 제품 수

SELECT metadata.product.feature.name, count(*) FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) GROUP BY metadata.product.feature.name ORDER BY metadata.product.feature.name DESC LIMIT 25

지난 7일간의 조사 결과에 포함된 리소스 유형 수

SELECT count(*), resource.type FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 CROSS JOIN UNNEST(resources) as st(resource) WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) GROUP BY resource.type LIMIT 25

지난 7일간의 조사 결과에서 나온 취약한 패키지

SELECT vulnerability FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0, UNNEST(vulnerabilities) as t(vulnerability) WHERE vulnerabilities is not null LIMIT 25

지난 7일 동안 변경된 조사 결과

SELECT finding.uid, finding.created_time, finding.first_seen_time, finding.last_seen_time, finding.modified_time, finding.title, state FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_sh_findings_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

Amazon VPC 플로우 로그에 대한 예제 쿼리

Amazon Virtual Private Cloud (AmazonVPC) 는 사용자의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 세부 정보를 제공합니다VPC.

Amazon VPC 플로우 로그의 몇 가지 예제 쿼리는 다음과 같습니다.

특정 트래픽은 다음과 같습니다. AWS 리전 지난 7일 동안

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND region in ('us-east-1','us-east-2','us-west-2') LIMIT 25

최근 7일간 소스 IP 192.0.2.1 및 소스 포트 22의 활동 목록

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND src_endpoint.ip = '192.0.2.1' AND src_endpoint.port = 22 LIMIT 25

지난 7일간의 고유 대상 IP 주소 수

SELECT COUNT(DISTINCT dst_endpoint.ip) FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) LIMIT 25

지난 7일 동안의 198.51.100.0/24에서 발생한 트래픽

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND split_part(src_endpoint.ip,'.', 1)='198'AND split_part(src_endpoint.ip,'.', 2)='51' LIMIT 25

지난 7일간의 모든 HTTPS 트래픽

SELECT dst_endpoint.ip as dst, src_endpoint.ip as src, traffic.packets FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND dst_endpoint.port = 443 GROUP BY dst_endpoint.ip, traffic.packets, src_endpoint.ip ORDER BY traffic.packets DESC LIMIT 25

지난 7일 동안 포트 443로 향하는 연결의 패킷 수를 기준으로 정렬합니다.

SELECT traffic.packets, dst_endpoint.ip FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND dst_endpoint.port = 443 GROUP BY traffic.packets, dst_endpoint.ip ORDER BY traffic.packets DESC LIMIT 25

지난 7일간의 IP 192.0.2.1192.0.2.2 간 모든 트래픽

SELECT start_time, end_time, src_endpoint.interface_uid, connection_info.direction, src_endpoint.ip, dst_endpoint.ip, src_endpoint.port, dst_endpoint.port, traffic.packets, traffic.bytes FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND( src_endpoint.ip = '192.0.2.1' AND dst_endpoint.ip = '192.0.2.2') OR ( src_endpoint.ip = '192.0.2.2' AND dst_endpoint.ip = '192.0.2.1') ORDER BY start_time ASC LIMIT 25

지난 7일간의 모든 인바운드 트래픽

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND connection_info.direction = 'ingress' LIMIT 25

지난 7일간의 모든 아웃바운드 트래픽

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND connection_info.direction = 'egress' LIMIT 25

지난 7일간 거부된 모든 트래픽

SELECT * FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_vpc_flow_1_0 WHERE eventDay BETWEEN cast(date_format(current_timestamp - INTERVAL '7' day, '%Y%m%d%H') as varchar) and cast(date_format(current_timestamp - INTERVAL '0' day, '%Y%m%d%H') as varchar) AND type_uid = 400105 LIMIT 25