
Ferramenta automatizada de auditoria de segurança em nuvem que detecta o uso indevido de credenciais AK/SK por meio de auditoria periódica de logs de plataforma de nuvem usando detecção de anomalias, regras de lista negra e análise de linha de base para Tencent Cloud e AWS.
cloud-audit (Assistente de Auditoria de Segurança na Nuvem) é uma ferramenta para detectar o vazamento e uso indevido de chaves AK/SK em provedores de nuvem pública. Ela audita logs chamando periodicamente as interfaces da plataforma de nuvem e descobre possíveis invasões com base em comportamentos anômalos, características negras e linhas de base.
Atualmente, suporta apenas Tencent Cloud e AWS.
Primeiro passo: execute o comando para instalar as dependências
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
Segundo passo: crie e modifique a configuração do .env
cp .env.example .env
Preencha o arquivo .env de acordo com sua configuração 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=""
Terceiro passo: configurações importantes do 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"
]
Execute
python3 cloud-audit.py
O programa executa a pesquisa de resultados a cada 15 minutos.
Como os logs da AWS são lidos e auditados usando o serviço AWS CloudTrail, certifique-se de que sua conta tenha a permissão IAM AWSCloudTrail_ReadOnlyAccess para usar este produto, caso contrário, ocorrerá o seguinte erro.
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
Acesse a plataforma IAM da AWS, selecione o usuário → seção de permissões para adicionar a permissão.
Ao usar algumas ferramentas de exploração direcionadas a plataformas de nuvem, as ações comuns dessas ferramentas incluem: escanear todas as regiões em busca de instâncias RDS, escanear todas as regiões em busca de instâncias ECS ou contêineres, criar/excluir subcontas, executar comandos, etc. Essas ações em si são operações relativamente sensíveis, portanto, são obtidas por meio das interfaces de log de cada plataforma de nuvem.
Outra situação é a detecção de operações sensíveis provenientes de redes não confiáveis. Normalmente, as chamadas são feitas a partir da intranet do IDC ou do IP de saída do IDC. Se uma chamada AK/SK aparecer de uma rede não confiável da empresa e for uma operação de alto risco, um alerta é gerado imediatamente.
Exemplos de operações críticas comuns e sensíveis:
A maior diferença entre as chamadas de API da Tencent Cloud e da AWS é que a Tencent Cloud permite consultar as ações detalhadas de um determinado AK id por meio de uma interface de API, enquanto a AWS só permite pesquisar na plataforma, mas não permite consultar as informações de execução recentes de um determinado AK id por meio de uma interface usando AK/SK.
Portanto, para detectar o uso indevido de AK/SK na Tencent Cloud, é necessário inserir a lista de AK ids usados nos serviços online e verificar periodicamente as ações executadas por um determinado AK id.
Na AWS, só é possível obter logs com base na região e na ação. Usando AK/SK, chame a interface CloudTrail para verificar se há logs de uma determinada ação em uma determinada região.
Portanto, a AWS determina mais com base em linhas de 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 tela de alerta do Discord



Atualmente, a detecção é baseada apenas em comportamento, mas também poderia ser baseada em linhas de base.