
Strumento automatizzato di audit della sicurezza cloud che rileva l'uso improprio delle credenziali AK/SK mediante audit periodico dei log delle piattaforme cloud utilizzando rilevamento delle anomalie, regole blacklist e analisi baseline per Tencent Cloud e AWS.
cloud-audit (Assistente per la sicurezza cloud) è uno strumento per rilevare l'abuso di credenziali AK/SK di provider cloud pubblici. Attraverso la chiamata periodica alle API della piattaforma cloud per controllare i log, rileva possibili intrusioni basate su comportamenti anomali, caratteristiche nere e baseline.
Attualmente supporta solo Tencent Cloud e AWS.
Passo 1: Eseguire il comando per installare le dipendenze
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
Passo 2: Creare e modificare il file .env
cp .env.example .env
Inserire le proprie configurazioni nel file .env
# Informazioni AK/SK per Tencent Cloud, necessarie per chiamare le API e ottenere i log
TencentAccessKey="xxx"
TencentSecretKey="xxx"
# Elenco di AK/SK da monitorare su Tencent Cloud
AccesskeyList="xxx,xxx,xxx"
# Informazioni AK/SK per AWS
AWS_ACCESS_KEY_ID="xxx"
AWS_SECRET_ACCESS_KEY="xxx"
# Informazioni per le notifiche Discord
discord_webhook_url=""
# Notifiche bot WeChat Work
weixin_webhook_url=""
Passo 3: Configurazioni importanti del programma
# CIDR attendibili; chiamate a operazioni sensibili da CIDR non attendibili generano un allarme immediato.
while_cidr = ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]
# Regioni AWS da monitorare; eventi al di fuori di queste regioni non verranno interrogati
aws_region = [
"us-east-1",
"us-east-2",
"ap-northeast-1",
"ap-southeast-1"
]
Esecuzione
python3 cloud-audit.py
Il programma esegue la ricerca ogni 15 minuti
Poiché per i log AWS si utilizza il servizio AWS CloudTrail per leggere e controllare i log, assicurati che le autorizzazioni IAM del tuo account includano AWSCloudTrail_ReadOnlyAccess per poter utilizzare questo prodotto, altrimenti verrà visualizzato il seguente errore.
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
Accedi alla piattaforma AWS IAM, seleziona l'utente e aggiungi le autorizzazioni nella sezione Permessi
Quando si utilizzano alcuni strumenti mirati ad abusare delle piattaforme cloud, le azioni tipiche di questi strumenti includono la scansione di tutte le regioni per verificare l'esistenza di istanze RDS, istanze ECS o container, la creazione/eliminazione di sottaccount, l'esecuzione di comandi, ecc. Queste azioni sono di per sé operazioni piuttosto sensibili, quindi vengono acquisite tramite le interfacce di log delle varie piattaforme cloud.
Un'altra modalità si basa sulle operazioni sensibili provenienti da CIDR non attendibili; normalmente le chiamate provengono dalla rete interna IDC o dagli IP di uscita IDC. Se viene rilevata una chiamata AK/SK da un CIDR aziendale non attendibile e l'operazione è ad alto rischio, viene generato un allarme immediato.
Esempi di operazioni chiave particolarmente sensibili:
La differenza principale tra Tencent Cloud e AWS nelle chiamate API è che Tencent Cloud consente di interrogare attraverso le API le azioni dettagliate di un determinato AK ID, mentre AWS permette solo di cercare sulla piattaforma, ma non di interrogare tramite chiamate AK/SK le informazioni recenti di un determinato AK ID.
Pertanto, per rilevare l'abuso di AK/SK su Tencent Cloud, è necessario inserire l'elenco degli AK ID utilizzati nei servizi live da monitorare e controllare periodicamente le azioni eseguite da un determinato AK ID.
AWS, invece, può recuperare i log solo in base a regione e azione, chiamando l'interfaccia CloudTrail tramite AK/SK per verificare se un'azione specifica ha log in una determinata regione.
Quindi AWS giudica principalmente in base alla baseline.
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)
Schermata di avviso Discord



Attualmente rileva solo in base al comportamento, ma in realtà si potrebbe anche rilevare in base alla baseline.