본문 바로가기
AWS

OWASP/HoneyTrap 오픈소스 -> 클라우드 인프라에 허니팟 구축

by Ate1es 2022. 8. 27.

클라우드 책에서 배운 지식들도 써먹을 겸, OWASP 에서 진행한 오픈소스 허니팟을 AWS를 사용해서 배포하였다.

 

프로젝트는 아래 링크에 있다.

https://github.com/OWASP/Honeypot-Project

 

 

 

동작 구성

출처 프로젝트 github

1. Modsecurity 라는 WAF의 룰셋을 사용해 공격 로그 수집.

2. 로그들의 분석과 시각적 표현을 위해서 ELK Stack 으로 로그 정보 전송

3. ELK Stack 에서 로그데이터를 꺼내 분석할 수 도 있음.

4. 모든 로그는 최종적으로 MISP 로 전송되어 공유됨.

 

구상 인프라

aws 아키텍처

- 가용성을 고려해야할 서비스는 아니기 때문에 다중 az나 autoscailing을 사용하지는 않았다.

- Modsecurity 및 Apache 웹서버는 오픈소스에 ECS용 작업 정의 json 파일이 존재하여 ECS에 배포하였다.

- 해당 ECS에 Cloudwatch logs 연결하여 로그를 따로 수집하였다.

 

추후 인프라 수정 및 추가 사항

- DDos 공격 및 리소스에 대한 공격에 대비하여 CloudWatch 경보를 통해 일정 CPU 사용량을 Watch 하여 

ECS 작업이나 해당 클러스터를 Terminate 할 수 있는 인프라 구성

- 쌓여가는 로그들을 주기적으로 s3 로 전송하는 Batch 작업 구성

 

AWS CLI 를 통해 ECS 클러스터 작업 생성 및 해당 작업에 자격 증명이 있는 IAM 역할 생성 과정

우선적으로 ECS 작업 생성 전에 해당 작업을 Execute 할 권한이 있는 IAM 역할을 생성해준다.(최소권한)

 

AWS 페이지 -> [IAM] 콘솔창에서 [액세스 키 관리] 클릭

IAM 역할 생성 - 1

액세스 키 만들기 클릭하여 Excel 파일 열어서 Key값 확인

새 액세스 키 만들기 클릭

해당 자격 증명으로 aws configure 명령 실행시켜서 인증

ubuntu@ubuntu:~$ aws configure
AWS Access Key ID [] :
AWS Secret Access Key [] :
리전 선택 : 
Output format 선택 : none

IAM Policy File을 아래와 같이 생성 후 저장 (확장자 json)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ECS Execution 권한이 있는 IAM Policy File 을 사용해 CLI 명령으로 IAM 역할 생성

위의 Policy file 이용하여 ecsTaskExecutionRole 이라는 이름의 IAM 역할 생성

aws iam create-role \
      --role-name ecsTaskExecutionRole \
      --assume-role-policy-document file://{{위에서 만든 Policy File}}.json

AWS 관리형 AmazonECSTaskExecutionRolePolicy 정책을 내가 만든 ecsTaskExecutionRole 역할에 연결

aws iam attach-role-policy \
      --role-name ecsTaskExecutionRole \
      --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

 

 

 

 

 

연결 후에 IAM 콘솔에 접속하면 생성된 역할의 ARN 확인이 가능합니다.

 

해당 ARN을 복사하여 OWASP 프로젝트의 aws-ecs-container-definition.json 파일에서

executionRoleArn 의 Value 부분에 붙혀넣기 해주면, 내가 위에서 만든 IAM 역할로 실행하는 ECS 작업을 생성하는

json 파일이 완성됩니다.

ECS 작업 정의 파일

 

작업 및 로그그룹 만들기 명령어를 통해 작업과 로그 그룹을 만들어 준다.

aws ecs register-task-definition --cli-input-json "$(cat aws-ecs-container-definition.json | tr '\n' ' ')"

aws logs create-log-group --log-group-name "/ecs/honeytrap-modsec"

 

이 밑의 README 부분은 aws cli 로 ecs 클러스터를 설정해주는 부분인데, 그냥 콘솔로 하는게 빠르다.

 

ECS 콘솔 접속해서, [클러스터 생성] 과정을 통해 클러스터 생성 후 작업을 연결해주기만 하면 완성!

 

 

 

 

작업이 정상적으로 연결되면, 아래와 같이 Running 상태가 된다.

 

 

Running 중인 웹 서버에 접속하고,

Kibana 서버에서 로그를 확인해보면  아래와 같이 정상적으로 접속 로그와 Payload 가 찍힌다.