AlonsoMarcosM/DAMN-TEAMSSN

GitHub: AlonsoMarcosM/DAMN-TEAMSSN

基于 Terraform 在 AWS 上一键部署 Cowrie SSH 蜜罐,并结合 S3、Lambda 与 SNS 实现日志分析与告警的开源安全监控项目。

Stars: 0 | Forks: 0

# DAMN-TEAMSSN - AWS 上的 Honeypot(完整文档) 在 AWS 上可复现的基础设施,包含基于 Cowrie 的 Honeypot、S3 日志存储、Lambda 分析、SNS 告警以及 CloudWatch 报警。本 README 汇总了项目的所有文档。 ## 1) 目标和范围 - 在 EC2 上部署 SSH Honeypot (Cowrie)。 - 将证据保存到 S3 中。 - 使用 Lambda 分析日志并通过 SNS 发送告警。 - 使用 CloudWatch 监控实例的基本状态。 - 提供基于 Terraform 的可复现 IaC 以及 PowerShell 脚本。 ## 2) 架构 ``` 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) 技术决策 - 暴露 SSH 22 端口用于 Honeypot。 - 为简单起见禁用 Telnet。 - 通过 SSM 进行实际管理 (`enable_ssm=true`);如果禁用,则使用受限 CIDR 通过 22222 端口进行 SSH。 - 通过 EIP 保持稳定的公网 IP。 - 通过 cron 每 5 分钟将日志同步到 S3。 - S3 Bucket 启用 SSE-S3 加密并阻止公开访问。 - 在实验室环境中对 Bucket 设置 `force_destroy=true`。 ## 4) 团队工作流 - 每人一个分支(例如:`feature/alonso-hito1`)。 - 必须向 `main` 提交 PR,并由另一名成员审查。 - 每人使用唯一的后缀:`amm`、`nlr`、`mpg`、`dtm`。 - 资源前缀:`proy-damn-teamssn`。 - 标签:`Project=DAMN-TEAMSSN`、`Owner=`、`Env=dev`。 ## 5) 仓库结构 - `infra/`:Terraform 主模块和子模块。 - `src/lambda/analyzer/`:Lambda 代码。 - `scripts/`:PowerShell 自动化脚本。 - `envs/`:tfvars 和模板。 - `docs/`:附加文档。 ## 6) 前置要求 - Terraform >= 1.5 - AWS CLI - PowerShell (Windows) - AWS 实验室账户(区域 us-east-1) ## 7) AWS 凭证(不纳入版本控制) 模板:`envs/aws_credentials.example`。 存放位置: - Windows:`C:\Users\\.aws\credentials` - Linux/Mac:`~/.aws/credentials` 创建 profile: ``` aws configure --profile aws sts get-caller-identity --profile ``` 如果你不想在每个命令中输入 `--profile`: ``` $env:AWS_PROFILE="" ``` ## 8) 个人配置 (tfvars) 1. 复制示例: ``` Copy-Item .\envs\alonso.tfvars.example .\envs\alonso.tfvars ``` 2. 编辑 `envs/alonso.tfvars`: - `resource_suffix`(唯一)。 - `admin_email` (SNS)。 - `aws_profile`, `aws_region`。 - `allowed_admin_cidr`(仅在禁用 SSM 时使用)。 - 如果你没有 IAM 权限,请配置 `existing_instance_profile_name` / `existing_lambda_role_arn`。 ## 9) 部署和销毁 ``` .\scripts\up.ps1 -Env alonso ``` ``` .\scripts\down.ps1 -Env alonso ``` ## 10) 输出 ``` .\scripts\show_outputs.ps1 -Env alonso ``` 保存 `public_ip`、`instance_id`、`s3_bucket`、`sns_topic_arn`、`lambda_name`。 注意:由于使用了 EIP,`public_ip` 将保持不变,但如果你替换了 EC2,`instance_id` 会发生改变。 ## 11) 技术验证(Cowrie 和 SSM) ``` aws ssm describe-instance-information --filters Key=InstanceIds,Values= --profile ``` ``` aws ssm send-command --instance-ids --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_check_ascii.json --profile ``` 预期输出: - `systemctl is-active cowrie` = `active` - `twistd` 正在监听 `:22` ## 12) 最终测试(完整 pipeline) 1. 在 `admin_email` 的邮箱中确认 SNS 订阅。 2. 受控的 SSH 尝试: ``` ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=5 -p 22 fakeuser@ ``` 3. 强制同步到 S3: ``` aws ssm send-command --instance-ids --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile ``` 4. 查看 S3 中的对象: ``` aws s3 ls s3:///cowrie// ``` 5. 查看 Lambda 日志: ``` aws logs tail /aws/lambda/proy-damn-teamssn-analyzer- --since 10m --profile ``` 6. 检查电子邮件: - 来自 Honeypot 的 SNS 告警。 - CloudWatch 的 OK/ALARM(如果状态发生变化)。 如果没有收到告警,请增加事件直至超过阈值并再次同步: ``` 1..10 | ForEach-Object { ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=3 -p 22 fakeuser@ } aws ssm send-command --instance-ids --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile aws logs tail /aws/lambda/proy-damn-teamssn-analyzer- --since 10m --profile ``` ## 13) 快速操作手册(按顺序执行的命令) 参数化形式: ``` scripts\up.ps1 -Env scripts\show_outputs.ps1 -Env ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o ConnectTimeout=5 -p 22 fakeuser@ aws ssm send-command --instance-ids --document-name "AWS-RunShellScript" --parameters file://scripts/ssm_cowrie_sync.json --profile aws s3 ls s3:///cowrie// aws logs tail /aws/lambda/proy-damn-teamssn-analyzer- --since 10m --profile scripts\down.ps1 -Env ``` 实际示例: ``` 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) 仅替换 EC2(新的 user_data) ``` terraform -chdir=infra apply -var-file=.\envs\alonso.tfvars -replace=module.honeypot_ec2.aws_instance.honeypot -auto-approve ``` ## 15) 快速故障排除 - BucketAlreadyExists: - 更改 `resource_suffix`。 - 未收到 SNS: - 使用 `aws sns list-subscriptions-by-topic` 检查 `PendingConfirmation`。 - 接受邮件确认。 - Lambda 没有 log group: - 尚未被调用;需先将日志上传至 S3。 - SSH "connection refused": - Cowrie 未处于活跃状态;使用 SSM 进行检查。 - Python 版本不兼容错误: - 在 Amazon Linux 2023 上,Cowrie 需要 Python 3.11。 - 重复的 `listen_endpoints`: - 如果有过手动修改,请检查 `cowrie.cfg`。 ## 16) 实用脚本 - `scripts\up.ps1` / `scripts\down.ps1` - `scripts\show_outputs.ps1` - `scripts\ssm_cowrie_check_ascii.json` - `scripts\ssm_cowrie_sync.json`
标签:AI合规, AWS, DPI, ECS, PB级数据处理, Terraform, 威胁监控, 安全运维, 无服务器, 蜜罐, 证书利用