
Herramienta automatizada de auditoría de seguridad en la nube que detecta el uso indebido de credenciales AK/SK auditando periódicamente los registros de la plataforma en la nube mediante detección de anomalías, reglas de listas negras y análisis de línea base para Tencent Cloud y AWS.
cloud-audit (asistente de auditoría de seguridad en la nube) es una herramienta para detectar fugas de AK/SK de proveedores de nube pública que han sido explotadas, llamando periódicamente a las interfaces de la plataforma en la nube para auditar registros, basándose en comportamientos anómalos/características negativas/líneas base para descubrir posibles intrusiones.
Actualmente solo es compatible con Tencent Cloud y AWS
Primer paso: ejecutar el comando para instalar dependencias
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
Segundo paso: crear y modificar la configuración .env
cp .env.example .env
Complete el archivo .env según su configuración real
# 腾讯云的AK/SK信息,需要使用AK/SK来调用API接口获取日志
TencentAccessKey="xxx"
TencentSecretKey="xxx"
# 腾讯云要监控的AK/SK列表
AccesskeyList="xxx,xxx,xxx"
# AWS的AK/SK信息
AWS_ACCESS_KEY_ID="xxx"
AWS_SECRET_ACCESS_KEY="xxx"
# Discord 通知信息
discord_webhook_url=""
# 企业微信机器人通知
weixin_webhook_url=""
Tercer paso: configuración importante del programa
# 可信的网段,非可信网段调用敏感操作直接告警。
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"
]
Ejecutar
python3 cloud-audit.py
El programa ejecuta la búsqueda cada 15 minutos
Dado que los registros de AWS se leen y auditan mediante el servicio AWS CloudTrail, asegúrese de que su cuenta tenga el permiso AWSCloudTrail_ReadOnlyAccess en IAM para usar este producto, de lo contrario aparecerá el siguiente error.
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
Ingrese a la plataforma AWS IAM, seleccione el usuario -> permisos para agregar el permiso.
Al utilizar algunas herramientas orientadas a plataformas en la nube, sus acciones típicas incluyen escanear todas las regiones en busca de instancias RDS, instancias ECS o contenedores, crear/eliminar subcuentas, ejecutar comandos, etc. Estas acciones son inherentemente operaciones sensibles, por lo que se obtienen a través de las interfaces de registro de cada plataforma en la nube.
Otra es basarse en operaciones sensibles desde segmentos de red no confiables. Normalmente, las llamadas se realizan desde la red interna del IDC o IP de salida del IDC. Si se produce una llamada AK/SK desde un segmento de red no confiable de la empresa y es una operación de alto riesgo, se alerta directamente.
Ejemplos de operaciones clave sensibles comunes:
La mayor diferencia entre las llamadas API de Tencent Cloud y AWS es que Tencent Cloud puede consultar las acciones detalladas de un ID de AK a través de la API, mientras que AWS solo puede buscar en la plataforma y no puede consultar la información de ejecución reciente de un ID de AK mediante la interfaz AK/SK.
Por lo tanto, para detectar el uso de AK/SK en Tencent Cloud, es necesario ingresar la lista de IDs de AK que se utilizan en los servicios en línea que se desean monitorear, y verificar periódicamente las acciones ejecutadas por un ID de AK.
AWS solo puede obtener registros según la región y la acción, llamando a la interfaz de CloudTrail con AK/SK para ver si hay registros de una acción en una región determinada.
Por lo tanto, AWS juzga más basándose en líneas base.
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)
Captura de pantalla de alerta en Discord



Actualmente solo se detecta según el comportamiento, pero también se podría detectar según líneas base.