Skip to the content.

DAMN-TEAMSSN - Honeypot en AWS (documentacion completa)

Despliegue público: Abrir despliegue

Infraestructura reproducible en AWS para un honeypot con Cowrie, logs en S3, analisis con Lambda, alertas por SNS y alarmas CloudWatch. Este README unifica toda la documentacion del proyecto.

1) Objetivo y alcance

2) Arquitectura

flowchart LR
  Internet((Internet)) -->|SSH 22| EC2[EC2 Cowrie]
  EC2 -->|logs| S3[(S3 Logs)]
  S3 -->|ObjectCreated: cowrie/| Lambda[Lambda Analyzer]
  Lambda -->|alerts| SNS[SNS Email]
  Lambda --> CWLogs[CloudWatch Logs]
  EC2 --> CW[CloudWatch Metrics]
  CW -->|alarms| SNS

3) Decisiones tecnicas

4) Workflow de equipo

5) Estructura del repo

6) Requisitos

7) Credenciales AWS (no se versionan)

Plantilla: envs/aws_credentials.example.

Ubicaciones:

Crear perfil:

aws configure --profile <nombre>
aws sts get-caller-identity --profile <nombre>

Si no quieres escribir --profile en cada comando:

$env:AWS_PROFILE="<nombre>"

8) Configuracion por persona (tfvars)

1) Copia un ejemplo:

Copy-Item .\envs\alonso.tfvars.example .\envs\alonso.tfvars

2) Edita envs/alonso.tfvars:

9) Despliegue y destruccion

.\scripts\up.ps1 -Env alonso
.\scripts\down.ps1 -Env alonso

10) Outputs

.\scripts\show_outputs.ps1 -Env alonso

Guarda public_ip, instance_id, s3_bucket, sns_topic_arn, lambda_name. Nota: public_ip se mantiene por la EIP, pero instance_id cambia si reemplazas el EC2.

11) Verificacion tecnica (Cowrie y SSM)

aws ssm describe-instance-information --filters Key=InstanceIds,Values=<instance_id> --profile <aws_profile>
aws ssm send-command --instance-ids <instance_id> --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_check_ascii.json --profile <aws_profile>

Salida esperada:

12) Prueba final (pipeline completo)

1) Confirma la suscripcion SNS en el email del admin_email. 2) Intento SSH controlado:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=5 -p 22 fakeuser@<public_ip>

3) Forzar sync a S3:

aws ssm send-command --instance-ids <instance_id> --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile <aws_profile>

4) Ver objetos en S3:

aws s3 ls s3://<s3_bucket>/cowrie/<suffix>/

5) Ver logs de Lambda:

aws logs tail /aws/lambda/proy-damn-teamssn-analyzer-<suffix> --since 10m --profile <aws_profile>

6) Verificar emails:

Si no llega alerta, sube eventos hasta superar umbrales y vuelve a sincronizar:

1..10 | ForEach-Object { ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=3 -p 22 fakeuser@<public_ip> }
aws ssm send-command --instance-ids <instance_id> --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile <aws_profile>
aws logs tail /aws/lambda/proy-damn-teamssn-analyzer-<suffix> --since 10m --profile <aws_profile>

13) Runbook rapido (comandos en orden)

Parametrizado:

scripts\up.ps1 -Env <env>
scripts\show_outputs.ps1 -Env <env>
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=5 -p 22 fakeuser@<public_ip>
aws ssm send-command --instance-ids <instance_id> --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile <aws_profile>
aws s3 ls s3://<s3_bucket>/cowrie/<suffix>/
aws logs tail /aws/lambda/proy-damn-teamssn-analyzer-<suffix> --since 10m --profile <aws_profile>
scripts\down.ps1 -Env <env>

Ejemplo real:

scripts\up.ps1 -Env alonso
scripts\show_outputs.ps1 -Env alonso
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=5 -p 22 fakeuser@54.236.128.229
aws ssm send-command --instance-ids i-04b9ab0c57e0a2446 --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile alonso
aws s3 ls s3://proy-damn-teamssn-logs-amm2-851725275441/cowrie/amm2/
aws logs tail /aws/lambda/proy-damn-teamssn-analyzer-amm2 --since 10m --profile alonso
scripts\down.ps1 -Env alonso

14) Reemplazar solo el EC2 (user_data nuevo)

terraform -chdir=infra apply -var-file=.\envs\alonso.tfvars -replace=module.honeypot_ec2.aws_instance.honeypot -auto-approve

15) Troubleshooting rapido

16) Scripts utiles