[SK shieldus Rookies 19기] 클라우드 기반 취약점 진단 및 대응 실무 4일차

기록하는짱구·2024년 4월 30일
0

SK Shieldus Rookies 19기

목록 보기
37/43
post-thumbnail

📌 Amazon GuardDuty

https://aws.amazon.com/ko/guardduty/

✔ AWS 계정 및 워크로드에서 악의적 활동을 모니터링하고 상세한 보안 조사 결과를 제공하여 가시성 및 해결을 촉진하는 위협 탐지 서비스

✔ VPC Flow Logs, AWS CloudTrail 관리 이벤트 로그, AWS CloudTrail S3 데이터 이벤트 로그, DNS 쿼리 로그 및 Kubernetes(EKS) 감사 로그, Elastic Block Storage(EBS) 볼륨 데이터를 분석하여 악의적 활동을 탐지

✔ AWS 환경 내에서 예기치 않은, 잠재적으로 무단 및 악의적인 활동을 식별, 권한 상승, 노출된 자격 증명, 악의적인 IP 주소, 멀웨어, 비정상적인 로그인 이벤트 패턴 발견 등

📌 Amazon SNS(Simple Notification Service)

https://aws.amazon.com/ko/sns/

✔ 게시자에서 구독자(생산자 및 소비자라고도 함)로 메시지를 전송하는 관리형 서비스

✔ 게시자는 지원되는 엔드포인트 유형을 사용하여 논리적 액세스 지점 및 커뮤니케이션 채널인 주제에 메시지를 전송하여 구독자와 비동기식으로 통신하여 게시된 메시지를 수신

✔ Amazon Kinesis Data Firehose, HTTPS, Amazon Lambda, AWS Simple Queue Service(SQS), SMS, Email, Mobile Push(모바일 푸시메시지)로 알림(메시지 전송)

📌 실습 - 클라우드 서비스 내 악성 행위를 탐지해서 알림

GuardDuty 활성화

SNS 주제 및 구독 생성

주제 생성

구독 생성

이메일 구독 승인

EventBridge 규칙 생성

나머지 설정을 그대로 유지하고, 설정 확인 후 규칙 생성

GuardDuty 동작 확인

샘플 결과 작성

결과 확인

이메일 수신 확인

📌 리소스 정리

GuardDuty 비활성화

EventBridge 규칙 삭제

SNS 구독 삭제 후 주제 삭제

📌 AWS WAF(Web Application Firewall)

https://aws.amazon.com/ko/waf/

✔ 웹 어플리케이션 리소스로 전달되는 HTTP(S) 요청을 모니터링할 수 있는 웹 어플리케이션 방화벽 서비스

✔ Amazon CloudFront distribution, Amazon API Gateway Rest API, Application Load Balance, AWS AppSync GraphQL API, Amazon Cognito User pool의 리소스 유형을 보호

✔ WAF를 사용하면 콘텐츠에 대한 액세스를 제어 가능

✔ 요청이 시작된 IP 주소 또는 쿼리 문자열 값과 같이 지정한 기준에 따라 보호 리소스와 연결된 서비스는 요청된 콘텐츠 또는 HTTP 403 Status Code(Forbidden)과 같은 지정된 응답을 제공

✔ 웹 액세스 제어 목록(ACL)을 생성하고 규칙을 추가하여 보호 전략을 정의하고 규칙은 웹 요청을 검사하기 위한 기준을 정의하고 해당 기준과 일치하는 요청에 대해 수행할 작업을 지정

✔ 웹 ACL의 규칙의 총 용량은 1500이며 더 필요하다면 AWS 지원센터를 통해 신청 가능

✔ 규칙 유형에 따라 용량을 다르게 계산하므로 용량을 확인 필요

✔ Managed Rule 규칙 그룹은 대부분 무료이나 Bot Control, Fraud Control account takeover prevention(APT)의 경우 유료이니 예상 금액 확인 필요

📌 AWS Network Firewall

https://aws.amazon.com/ko/network-firewall/

✔ 생성한 VPC를 위한 상태 저장 관리형(Stateful) 네트워크 방화벽 및 침입 탐지 및 방지 서비스

✔ 인터넷 게이트웨이, NAT 게이트웨이, VPN, AWS Direct Connect를 통해 들어오고 나가는 트래픽을 포함한 트래픽을 VPC 경계에서 필터링

✔ 5-tuple(source ip, destination ip, source port, destination port, protocol), Domain, Suricata IPS를 사용하여 규칙을 생성 가능

✔ Firewall endpoint가 위치할 서브넷을 생성하고 해당 서브넷을 통해 트래픽이 전달되므로 라우팅 테이블을 새로 생성하여 라우팅을 설정하고 유입되는 트래픽을 Firewall endpoint로 보내기 위해 Internet Gateway의 라우팅을 수정

✔ Managed rule group의 경우 무료로 제공되며 자동으로 업데이트

✔ Network Firewall은 TLS 복호화를 지원하지 않아 어플리케이션 층에서 암호화된 트래픽에 대한 검사는 수행 불가

✔ WAF의 경우 TLS를 지원하고 있으니 웹 서비스를 보호하는 경우에는 같이 사용할 것을 추천

✔ IGW와 ELB(혹은 IGW와 연결된 서브넷) 사이에 방화벽을 배치하면 실제 클라이언트의 IP 주소를 인식 가능하며, 내부에도(WEB-WAS 혹은 WAS-DB 사이에) 배치할 수 있으나, 내부에 구성될 경우 실제 클라이언트의 IP 주소를 인식할 수 없음

📌 실습 - 웹 서비스 환경에 WAF, Network firewall 배치

웹 서비스 환경 구성

기본 VPC 생성

EC2 인스턴스 생성

80포트 접속을 허용하도록 인바운드 보안 그룹 규칙 추가

나머지 설정을 유지한 상태로 [인스턴스 시작] 버튼 클릭

EC2 인스턴스의 퍼블릭 주소 확인

EC2 인스턴스의 퍼블릭 주소로 SSH 접속 후 docker 설치

ubuntu@ip-172-31-46-174:~$ sudo apt update
ubuntu@ip-172-31-46-174:~$ sudo apt install docker.io -y

도커를 이용해 dvwa(Damn Vulnerable Web Application) 실행

ubuntu@ip-172-31-46-174:~$ sudo docker run -d --rm -it -p 80:80 --name dvwa vulnerables/web-dvwa
                               ~~~~~~~~~~ ~~ ~~~~ ~~~ ~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
                              |          |  |    |   |        |           |
                              |          |  |    |   |        |           +-- 컨테이너 생성에 사용하는 이미지 이름
                              |          |  |    |   |        |               레지스트리/레파지토리/이름:태그 
                              |          |  |    |   |        |               docker.io/library/이름:latest 
                              |          |  |    |   |        +-- 컨테이너 이름 
                              |          |  |    |   |            컨테이너의 식별자로 사용 = 호스트에서 유일해야 함
                              |          |  |    |   +-- 호스트의 80 포트와 컨테이너의 80 포트를 맵핑 
                              |          |  |    +-- 호스트의 입력과 출력을 컨테이너와 공유
                              |          |  +-- 컨테이너가 중지(stop)되면 컨테이너를 자동으로 삭제(rm) 
                              |          +-- detach 모드로 컨테이너를 실행  
                              +-- docker container run 명령어와 동일
                                  docker image를 가져와서(pull)와서 컨테이너를 생성(create)하고 실행(start)                                       
Unable to find image 'vulnerables/web-dvwa:latest' locally	--+
latest: Pulling from vulnerables/web-dvwa				      | 컨테이너 실행을 위해서는 로컬 레파지토리에 이미지가 존재해야
3e17c6eae66c: Pull complete						       	      | 하며, 없는 경우 지정된 레지스트리에서 먼저 가져와야 함	
0c57df616dbf: Pull complete						  		 	  | 
eb05d18be401: Pull complete						 			  | 
e9968e5981d2: Pull complete						 			  | 
2cd72dba8257: Pull complete						 			  | 
6cff5f35147f: Pull complete						 			  | 
098cffd43466: Pull complete						 			  | 
b3d64a33242d: Pull complete							  	 	--+ 
Digest: sha256:dae203fe11646a86937bf04db0079adef295f426da68a92b40e3b181f337daa7
Status: Downloaded newer image for vulnerables/web-dvwa:latest
5893f97cd90a11ed09c96b677fbb6def607fa8a5ee193cceb7e30315c2f52841  # 생성한 컨테이너의 ID

ubuntu@ip-172-31-46-174:~$ sudo docker image ls  # 로컬 레포지터리에 이미지를 조회
REPOSITORY             TAG       IMAGE ID       CREATED       SIZE
vulnerables/web-dvwa   latest    ab0d83586b6e   5 years ago   712MB

ubuntu@ip-172-31-46-174:~$ sudo docker container ls  # 실행 상태의 컨테이너를 조회
CONTAINER ID   IMAGE                  COMMAND      CREATED          STATUS          PORTS                               NAMES
5893f97cd90a   vulnerables/web-dvwa   "/main.sh"   24 seconds ago   Up 22 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   dvwa

EC2 인스턴스의 퍼블릭 주소로 80포트로 접속해서 DVWA 동작을 확인

Username: dvwa
Password: p@ssw0rd

Database 생성 후 다시 로그인

Username: admin
Password: password

SQL Injection 취약점 확인

a' or 'a' = 'a

XSS 취약점 확인

abc <script> alert('xss')</script>

ELB 추가

나머지 설정은 그대로 유지한 상태에서 [다음] 버튼 클릭

사용 가능한 인스턴스에서 인스턴스를 선택한 후 [아래에 보류 중인 것으로 포함] 버튼을 클릭해서 대상 보기에 추가한 후 [대상 그룹 생성] 버튼 클릭

다시 ELB 설정 화면으로 돌아와서 대상그룹 선택

나머지 설정을 그대로 유지한 상태로 [로드밸런스 생성] 버튼 클릭

로드밸런서 DNS 이름으로 요청했을 때 EC2 인스턴스에서 응답을 제공하는 것을 확인

WAF 설정

설정된 내용 확인 후 [Create Web ACL] 버튼 클릭

SQL 인젝션 공격이 가능한지 확인

XSS 공격이 가능한지 확인

대시보드를 통해 공격 확인

📌리소스 정리

로드밸런서 삭제

대상 그룹 삭제

EC2 인스턴스 종료

라우팅 테이블에 엣지 연결을 해제(편집에서 언체크 후 저장)한 후 라우팅 테이블 삭제

방화벽 삭제 (VPC가 삭제되면 함께 내려감)

방화벽 정책 및 Network Firewall 규칙 그룹 삭제

규칙 그룹을 정책에서 연결 해제 후 Network Firewall 규칙 그룹 삭제 가능

방화벽 삭제 후 방화벽 정책 삭제 가능

VPC 삭제

WAF & Shield의 Web ACLs 삭제

IPtables
iptables는 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.

TCP Wrapper
TCP 래퍼는 호스트 기반 네트워킹 ACL 시스템으로서, 리눅스 또는 BSD 같은 운영 체제의 인터넷 프로토콜 서버에서 네트워크 접근을 필터링하기 위해 사용된다.

IPFilter
IPFilter는 네트워크 주소 변환(NAT) 또는 방화벽 서비스를 제공하기 위해 사용될 수 있는 소프트웨어 패키지입니다.

#!/bin/sh
#!/bin/bash

https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-%EC%9E%91%EC%97%85-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC-%EB%AA%85%EB%A0%B9%EC%96%B4-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-at-crontab#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%98%88%EC%95%BD_%EC%8B%A4%ED%96%89_%EC%9D%BC%ED%9A%8C%EC%84%B1

네트워크 타임 프로토콜(Network Time Protocol, NTP)

https://ko.wikipedia.org/wiki/BIND ⇒ BSD 기반의 유닉스 시스템을 위해 설계된 DNS

hooking
후킹은 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다.

/etc/hosts 파일에 적절한 권한은?

💡 /etc/hosts
파일 소유자는 읽고 쓸 수 있도록 하고, 나머지는 읽기 전용 권한을 부여
→ 644

0개의 댓글