
자동 클라우드 보안 감사 도구로, 이상 탐지, 블랙리스트 규칙 및 기준 분석을 사용하여 Tencent Cloud 및 AWS의 클라우드 플랫폼 로그를 주기적으로 감사함으로써 AK/SK 자격 증명 오용을 탐지합니다.
cloud-audit(클라우드 보안 감사 도우미)는 퍼블릭 클라우드 제공업체의 AK/SK 유출 및 악용을 탐지하는 도구입니다. 정기적으로 클라우드 플랫폼 API를 호출하여 로그를 감사하고, 이상 행동/블랙 특성/베이스라인을 기반으로 의심스러운 침입 행위를 발견합니다.
현재는 Tencent Cloud와 AWS만 지원합니다.
1단계: 명령어를 실행하여 의존성 설치
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
2단계: .env 구성 파일 생성 및 수정
cp .env.example .env
자신의 실제 설정에 따라 .env 파일에 입력하세요.
# Tencent Cloud의 AK/SK 정보, 로그를 가져오기 위해 AK/SK로 API 호출 필요
TencentAccessKey="xxx"
TencentSecretKey="xxx"
# Tencent Cloud에서 모니터링할 AK/SK 목록
AccesskeyList="xxx,xxx,xxx"
# AWS의 AK/SK 정보
AWS_ACCESS_KEY_ID="xxx"
AWS_SECRET_ACCESS_KEY="xxx"
# Discord 알림 정보
discord_webhook_url=""
# WeChat Work 봇 알림
weixin_webhook_url=""
3단계: 프로그램 중요 설정
# 신뢰할 수 있는 네트워크 세그먼트, 신뢰할 수 없는 네트워크 세그먼트에서 민감한 작업 호출 시 즉시 경고.
while_cidr = ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]
# AWS에서 주목할 리전, 해당 리전이 아닌 이벤트는 조회하지 않음
aws_region = [
"us-east-1",
"us-east-2",
"ap-northeast-1",
"ap-southeast-1"
]
실행
python3 cloud-audit.py
프로그램은 15분마다 검색 결과를 실행합니다.
AWS 로그는 AWS CloudTrail 서비스를 사용하여 로그를 읽고 감사하므로, 계정의 IAM 권한에 AWSCloudTrail_ReadOnlyAccess가 있어야 이 제품을 사용할 수 있습니다. 그렇지 않으면 다음과 같은 오류 메시지가 표시됩니다.
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the LookupEvents operation: User: arn:aws:iam::xxxxx:user/test is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
AWS IAM 플랫폼에 접속하여 사용자 선택 --> 권한에서 권한을 추가하세요.
클라우드 플랫폼 악용 도구를 사용할 때, 이러한 도구의 일반적인 작업에는 모든 리전에서 RDS 인스턴스 존재 여부 스캔, 모든 리전에서 ECS 인스턴스 또는 컨테이너 존재 여부 스캔, 하위 계정 생성/삭제, 명령 실행 등이 포함됩니다. 이러한 작업 자체는 민감한 작업에 속하므로 각 클라우드 플랫폼의 로그 인터페이스를 통해 이러한 작업을 수집합니다.
또 다른 방법은 신뢰할 수 없는 네트워크 세그먼트에서의 민감한 작업을 기반으로 합니다. 일반적으로는 IDC 내부 네트워크 호출 또는 IDC 출구 IP 호출이지만, 기업 신뢰 네트워크 세그먼트가 아닌 곳에서 AK/SK 호출이 발생하고 고위험 작업인 경우 즉시 경고합니다.
일반적인 민감한 주요 작업 예시:
Tencent Cloud와 AWS API 호출의 가장 큰 차이점은, Tencent Cloud는 API 인터페이스를 통해 특정 AK ID의 상세 동작을 조회할 수 있지만, AWS는 플랫폼에서만 검색할 수 있고 AK/SK로 인터페이스를 호출하여 특정 AK ID의 최근 실행 정보를 조회할 수 없다는 점입니다.
따라서 Tencent Cloud AK/SK 악용을 탐지하려면 온라인 비즈니스에서 사용하는 AK ID 목록을 입력하고, 정기적으로 특정 AK ID가 수행한 작업을 확인해야 합니다.
AWS는 리전과 작업에 따라 로그를 가져올 수 있으며, AK/SK로 CloudTrail 인터페이스를 호출하여 특정 리전에서 특정 작업의 로그 존재 여부를 확인합니다.
따라서 AWS는 주로 베이스라인을 기준으로 판단합니다.
def DescribeInstances(CloudTrailEvent: dict):
"""
AK/SK를 사용하여 EC2 정보 나열 탐지
:param CloudTrailEvent:
:return: None
"""
accessKeyId = CloudTrailEvent.get('userIdentity').get('accessKeyId')
arn = CloudTrailEvent.get('userIdentity').get('arn')
eventTime = utc_to_china_tz(CloudTrailEvent.get('eventTime'))
eventName = CloudTrailEvent.get('eventName')
awsRegion = CloudTrailEvent.get('awsRegion')
sourceIPAddress = CloudTrailEvent.get('sourceIPAddress')
userAgent = CloudTrailEvent.get('userAgent')
sip_verify = False
for cidr in while_cidr:
if ipaddress.ip_address(sourceIPAddress) in ipaddress.ip_network(cidr):
sip_verify = True
if not sip_verify and 'aws-internal' not in userAgent:
message = f"{text_title}\n시간: {eventTime}\n계정 ID: {arn}\nRegion: {awsRegion}\nAccessKey ID:{accessKeyId}\n" \
f"실행 작업: {eventName}\nIP 주소: {sourceIPAddress}\nUser-Agent: {userAgent}\n\n" \
f"외부 IP가 인스턴스 정보를 요청하는 것으로 탐지되었습니다, 공격자에 의한 악용 여부를 주의하세요!"
send_message(message)
Discord 경고 스크린샷



현재는 행동 기반으로만 탐지하지만, 실제로는 베이스라인 기반으로도 탐지할 수 있습니다.