공동 책임 모델

  • 보안과 규정 준수는 AWS와 고객의 공동 책임입니다.
  • 이 공유 모델은 AWS가 호스트 운영 체제 및 가상화 계층에서 서비스가 운영되는 시설의 물리적 보안에 이르기까지 구성 요소를 운영, 관리 및 제어하므로 고객의 운영 부담을 경감할 수 있습니다.
  • 고객은 게스트 운영체제(업데이트 및 보안 패치 포함) 및 다른 관련 애플리케이션 소프트웨어를 관리하고 AWS에서 제공한 보안 그룹 방화벽을 구성할 책임이 있습니다.

AWS 책임 '클라우드의 보안'

  • AWS 클라우드에서 제공되는 모든 서비스를 실행하는 인프라를 보호할 책임
    • 인프라는 AWS 클라우드 서비스를 실행하는 하드웨어, 소프트웨어, 네트워킹 및 시설로 구성

고객 책임 '클라우드에서의 보안'

  • 고객이 선택하는 AWS 클라우드 서비스에 따라 달라짐
  • 보안 책임의 일부로 수행해야하는 구성 작업량에 따라 정해진다.
    • EC2와 같은 서비스는 Iaas 로 구분 되고 고객이 필요한 모든 보안 구성 및 관리 작업을 수행하도록 요구

AWS 클라우스 서비스 보안

AWS 계정보안의 이해

  • AWS 서비스에 대한 액세스를 제어하는 웹 서비스

  • IAM을 통해 사용자, 액세스 키와 같은 보안 자격 증명, 사용자와 애플리케이션이 어떤 AWS 리소스에 액세스할 수 있는지 제어하는 권한을 한 곳에서 관리가능 ⭕

IAM 사용자, 그룹, 다중인증 설정

  • 개별 IAM 사용자에 대해 권한을 정의하는 대신, 업무(관리자, 개발자, 회계 등)에 관련된 사용자 그룹을 만드는 것이 더 편리할 수 있습니다. 그런 다음 각 사용자 그룹별로 관련 권한을 정의가능
    • 사용자 그룹에 속한 모든 사용자에게 상속
    • 한번에 사용자 그룹 내 모든 사용자에 대해 변경 사항 적용 가능
      • 사내에서 직원의 부서가 변경되면 해당 IAM 사용자가 속한 IAM 사용자 그룹만 변경하면 된다.

IAM 키 유출 대책

방법 1: EBS 루트 볼륨 변경

  • 뭔가 변화가 발생하는 경우 잠시 인스턴스를 종료하고 수행하는 것 상황에 사용하는 것이 좋음.
    1. 키 페어 생성후 키를 분실한 인스턴스와 같은 AZ에 새로운 인스턴스 생성(생성한 키를 이용)
    2. 키를 잃어버린 인스턴스와 방금 생성한 인스턴스 사용 중지
    3. 각 인스턴스의 볼륨 분리
    4. 분리된 볼륨을 연결 - ❗ 기존 인스턴스+새로운 볼륨, 주의 디바이스 이름(/dev/sda1 안되면 /dev/xvda)

방법 2: 이미지로 만들어서 복제

  • 변화가 발생해도 상관 없는 경우 사용하는 것이 좋음.
    1. 인스턴스를 이미지로 생성 - 인스턴스 우클릭 - 이미지 및 템플릿 - 이미지 생성

    2. 이미지로 인스턴스를 생성하는 과정에서 키를 셋팅 - AMI 우클릭 - AMI로 인스턴스 시작 클릭

AWS CLI 설치 및 보안 자격 증명 설정

## 최신 버전의 AWS CLI를 내려받음.
$ sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
## AWS CLI 설치
$ sudo unzip awscliv2.zip
$ sudo ./aws/install


## 보안 자격 증명 설정
$ aws configure
$ aws s3 ls

ACM을 이용한 공인 인증서 발급 및 HTTPS 보안 연결

  • AWS Certificate Manager 는 AWS 서비스 및 연결된 내부 리소스에 사용할 공인 및 사설 SSL/TLS(Secure Sockets Layer/전송 계층 보안) 인증서를 손쉽게 프로비저닝, 관리 및 배포할 수 있도록 지원하는 서비스
  • SSL/TLS 인증서는 네트워크 통신을 보호하고 인터넷상에서 웹 사이트의 자격 증명과 프라이빗 네트워크상에서 리소스의 자격 증명을 설정하는 데 사용
  • AWS Certificate Manager는 SSL/TLS 인증서를 구매, 업로드 및 갱신하는데 드는 시간 소모적인 수동 프로세스를 대신 처리
  • 인증서 - 무료, 인증서를 이용하기 위한 서비스 유료
    • ELB, CloudFront

ELB에 인증서 연동

  • ALB 생성
  • 네트워크 매핑 - public 서브넷 설정
  • 보안 그룹 설정
  • 리스너 및 라우팅
    • 대상 그룹 생성 - 인스턴스 유형, 이름, 포트번호 설정(💦 지금은 80/ 필요에 따라 설정) 후 다음
    • 대상 그룹 지정
  • 보안 리스너 설정
    • 서울 (로드밸런서에서 인스턴스가 존재하는) 리전에서 인증서 생성

    • 검증이 필요하다면 인증서 세부정보 - Route 53에 레코드 추가하기
  • 로드 밸랜서 생성
  • 레코드 추가/편집 -
  • https로 접속확인

아마존 Inspector를 이용한 애플리케이션 보안 분석

  • Amazon Inspector
  • 규모에 맞는 지속적인 자동 취약성 관리서비스
  • Amazon Inspector 인스턴스의 네트워크 액세스 가능성 및 해당 인스턴스에서 실행되는 애플리케이션의 보안 상태를 테스트 합니다.
  • Amazon Inspector는 노출, 취약성 및 모범 사례와의 차이를 평가
  • 평가를 수행한 후 상세한 보안 평가 결과를 심각도 수준에 따라 구성된 목록으로 제공
  • 사전 정의된 소프트웨어도 제공
  • 에이전트는 평가하려는 EC2 인스턴스의 운영 체제에 선택적으로 설치 가능
  • 에이전트는 네트워크, 파일 시스템 및 프로세스 활동을 포함하는 EC2 인스턴스의 동작을 모니터링
  • 또한 광범위한 동작 및 구성 데이터를 수집
  • Amazon EC2 인스턴스, 컨테이너 및 Lambda 함수와 같은 워크로드를 자동으로 검색하고 소프트웨어 취약성과 의도하지 않은 네트워크 노출이 있는지 스캔
  • Amazon Inspector로 모니터링하려는 각 리전에서 구성이 필요 ❗

대시보드

  • 인스펙터

인스펙터 실습

인스턱터로 평가할 EC2 환경 구축

  • ec2 생성 후 dvwa 환경 구축 과 inspector agent 설치
## 웹서버가 존재한다면
$ sudo systemctl stop httpd

$ sudo yum install docker -y
$ sudo systemctl enable --now docker
$ sudo docker run -d -p 80:80 --name dvwa vulnerables/web-dvwa

$ wget https://inspector-agent.amazonaws.com/linux/latest/install
$ sudo bash install


$ wget https://inspector-agent.amazonaws.com/linux/latest/install
$ sudo bash install
  • ip 또는 도메인 /login.php Path로 접근
  • 초기 id, pw : admin, admin
  • DB 세팅 - 이후 비밀번호: admin -> password 변경됨.

인스펙터 생성

  • Advanced set up; 고급 설정

  • 평가 대상 정의

    • 인스턴스를 평가함.

  • 평가 템플릿 정의 - 15분으로 설정

  • 검토 후 생성 클릭

생성 결과

평가 실행

  • 평가 템플릿이 자동으로 시작안돼서 실행 클릭
  • 또는 평가 실행 탭에서 실행

평가 결과

  • 결과
  • all log 검색 후 상세 보기

환경 종료

$ ls -al /var/log
$ sudo docker container ls -a

$ sudo docker container stop dvwa
$ sudo docker container ls -a
$ sudo systemctl start httpd

CloudWatch 실습

CloudWatch 지표 확인

  • 모든 지표 -> EC2 -> 인스턴스별 지표

Amazon SNS

  • 주제 생성 클릭
  • 주제 세부 정보 입력
  • 구독 생성 클릭
  • 구독 세부 정보 입력
  • confirm subscription 체크

CloudWatch 규칙 생성

  • 규칙 생성 클릭

  • 규칙 정보 입력

  • EC2에서 실습

$ sudo yum install -y httpd
$ sudo systemctl enable --now httpd
$ sudo yum install -y awslogs
$ sudo vi /etc/awslogs/awslogs.conf

[/var/log/httpd/access_log]
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/access_log
buffer_duration = 5000
log_stream_name = {instance_id}
log_group_name = /var/log/httpd/access_log

[/var/log/httpd/error_log]
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/error_log
buffer_duration = 5000
log_stream_name = {instance_id}
log_group_name = /var/log/httpd/error_log

$ sudo systemctl enable --now awslogsd

$ sudo vi /etc/awslogs/awscli.conf

[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-2

IAM 정책 생성

  • 정책 생성 클릭
  • cloudwatch logs, 모든 리소스

  • 생성

IAM 역할 생성

  • 역할 생성
  • 권한 추가
  • 이름 지정후 역할 생성 클릭
  • 역할 생성 완료

EC2 인스턴스 IAM 역할 수정


  • 적용을 위해 인스턴스에서 awslogsd, httpd 재시작 수행
$ sudo systemctl restart awslogsd
$ sudo systemctl restart httpd
  • 로그 그룹 생성됨.

AWS 클라우드 네트워크 보안

AWS WAF 구축 및 DVWA 도커 컨테이너 취약점 진단

  • 웹 액세스 제어 목록 (웹 ACL) 및 보호할 AWS 리소스에 대한 높은 수준의 정보를 제공
  • 웹 ACL은 AWS 리소스로 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수있는 웹 애플리케이션 방화벽
  • Amazon CloudFront 배포, ALB, Amazon API Gateway API 및 AWS AppSync GraphQL API와 같은 AWS 리소스를 보호 가능

WAF 실습 환경 구축

  • EC2에서 DVWA 도커 컨테이너 환경 구축
  • DVWA 도커 컨테이너 EC2 대상 그룹으로 한 로드 밸런서 생성

EC2에 DVWA 도커 컨테이너 환경 구축

  • WAF 실습
--- 웹서버가 있다면 
$ sudo systemctl stop httpd

$ sudo yum install docker -y
$ sudo systemctl enable --now docker
$ sudo docker run -d -p 80:80 --name dvwa vulnerables/web-dvwa

로드 밸런서 생성

  • 로드밸랜서 생성 - ALB - my-alb - my-vpc - 퍼블릭 서브넷 a, c - 보안그룹 my-sg-alb - 리스너 프로토콜(HTTPS, 대상그룹: my-tg-waf, 프로토콜 HTTP) - 대상 그룹 선택 - 로드밸랜서 생성
  • ALB의 DNS 대신 인증서를 이용하기 위해서 HTTPS를 구현하기 위해서 Route 53에서 레코드 생성(인증서 규칙, *.\<domain>.shop) - waf.goorm.shop - 레코드 생성
    • ALB는 대상 그룹에 대상이 하나만 있는 경우 unhealthy 인 경우에는 포워드 해준다.
  • 웹사이트 접속 (admin, password)

WAF 생성

  • WAF
  • Web ACLs 클릭
  • 리전 선택 후 생성 클릭
  • 정보 입력
  • 리소스 선택

  • Add rules and rule groups
    • AWS managed rule groups - SQL database check - Add rules



  • Default web ACL action for requests that don't match any rules; 규칙과 매치가 안되는 트래픽은 어떻게 할것인가?
  • Set rule priority
  • Configure metrics; CloudWatch 에서 보는 부분
  • Review and create web ACL
  • 생성 결과; 가끔 오류 나는데 대시보드 가면 있다.
    • 오류가 났다면 다시 리소스 세팅; 될때 까지 다시 진행


  • WAF 적용 확인

  • WAF 대시보드 보기

SQL Injection 실습

  • SQL Injection 이해
    ' OR '1' = '1, ' OR '1' = '1'--
SELECT user FROM user_table WHERE id='admin' AND password=' ' OR '1' = '1';

"SELECT user FROM user_table WHERE id='admin' AND password=' '";

여기서 아이디는 'admin'으로 쓰였으며
비밀번호는 ' OR '1' = '1로 쓰였다.
비밀번호를 분해해보면 실제로 입력된 비밀번호는 ' '가 입력됐으며 그 뒤의 OR '1' = '1은 연산자로 쓰이게 된다.

첫번 째 비교인 아이디와 비밀번호를 확인해보자.
아이디 admin이 DB에 있으니 True값이 출력되고
비밀번호는 ' '로 DB에 없어 False가 출력되어 결과적으로 A와 B값 모두가 참이여야 True가 나와야하는 AND 논리연산자에 의해 결과값이 False가 나오게 된다.
이 결과값을 A라고 가정하자.

두번 째 비교인 OR '1' = '1을 확인해보자.
OR 연산자는 위에서 말했던 것 처럼 A또는 B값 중 하나라도 True값이면 True값이 나오게 된다.
'1'과 '1'은 서로 같기 때문에 값은 True가 나오게 된다. 이 결과값을 B라고 가정하자.

이후 AND연산을 먼저 하고 나온 A값(False)과 B(True)값을 OR연산으로 진행하게 되면

A값(False)과 B값(True)중 하나라도 참(True)이면 DB에서 정보를 가져온다. 라는 결과가 도출되게 된다.

아키텍처

NACL과 보안 그룹

  • 보안 그룹은 인스턴스에 대한 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할 수행
  • VPC 에서 인스턴스를 시작할 때 최대 5개의 보안 그룹에 인스턴스를 할당 가능
  • 보안 그룹은 서브넷 수준이 아니라 인스턴스 수준에서 작동하므로 VPC 에 있는 서브넷의 각 인스턴스를 서로 다른 보안 그룹 세트에 할당 가능
  • 네트워크 ACL(액세스 제어 목록)은 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 귀한 방화벽 역할을 하는 VPC를 위한 선택적 보안 계층
  • 보안 그룹과 비슷한 규칙으로 네트워크 ACL을 설정하여 VPC에 보안 계층을 더 추가 가능

리소스 제거

WAF 제거

  • Associated AWS resources 제거

  • Web ACLs 삭제

Inspector 제거

  • Inspector 평가 대상, 삭제 클릭

  • cloudwatch 이벤트 삭제, 규칙 삭제

cloudwatch 로그 그룹 삭제

  • 로그 그룹 삭제

  • SNS 구독 및 주제 삭제

      1. 구독 삭제, 2. 주제 삭제 순



  • IAM 역할 분리

  • IAM 역할 제거, IAM 정책 제거

profile
끄적끄적 쓰는곳

0개의 댓글