https://aws.amazon.com/ko/guardduty/
✔ AWS 계정 및 워크로드에서 악의적 활동을 모니터링하고 상세한 보안 조사 결과를 제공하여 가시성 및 해결을 촉진하는 위협 탐지 서비스
✔ VPC Flow Logs, AWS CloudTrail 관리 이벤트 로그, AWS CloudTrail S3 데이터 이벤트 로그, DNS 쿼리 로그 및 Kubernetes(EKS) 감사 로그, Elastic Block Storage(EBS) 볼륨 데이터를 분석하여 악의적 활동을 탐지
✔ AWS 환경 내에서 예기치 않은, 잠재적으로 무단 및 악의적인 활동을 식별, 권한 상승, 노출된 자격 증명, 악의적인 IP 주소, 멀웨어, 비정상적인 로그인 이벤트 패턴 발견 등
https://aws.amazon.com/ko/sns/
✔ 게시자에서 구독자(생산자 및 소비자라고도 함)로 메시지를 전송하는 관리형 서비스
✔ 게시자는 지원되는 엔드포인트 유형을 사용하여 논리적 액세스 지점 및 커뮤니케이션 채널인 주제에 메시지를 전송하여 구독자와 비동기식으로 통신하여 게시된 메시지를 수신
✔ Amazon Kinesis Data Firehose, HTTPS, Amazon Lambda, AWS Simple Queue Service(SQS), SMS, Email, Mobile Push(모바일 푸시메시지)로 알림(메시지 전송)
나머지 설정을 그대로 유지하고, 설정 확인 후 규칙 생성
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)의 경우 유료이니 예상 금액 확인 필요
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 주소를 인식할 수 없음
80포트 접속을 허용하도록 인바운드 보안 그룹 규칙 추가
나머지 설정을 유지한 상태로 [인스턴스 시작] 버튼 클릭
ubuntu@ip-172-31-46-174:~$ sudo apt update
ubuntu@ip-172-31-46-174:~$ sudo apt install docker.io -y
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
Username: dvwa
Password: p@ssw0rd
Database 생성 후 다시 로그인
Username: admin
Password: password
a' or 'a' = 'a
abc <script> alert('xss')</script>
나머지 설정은 그대로 유지한 상태에서 [다음] 버튼 클릭
사용 가능한 인스턴스에서 인스턴스를 선택한 후 [아래에 보류 중인 것으로 포함] 버튼을 클릭해서 대상 보기에 추가한 후 [대상 그룹 생성] 버튼 클릭
다시 ELB 설정 화면으로 돌아와서 대상그룹 선택
나머지 설정을 그대로 유지한 상태로 [로드밸런스 생성] 버튼 클릭
로드밸런서 DNS 이름으로 요청했을 때 EC2 인스턴스에서 응답을 제공하는 것을 확인
설정된 내용 확인 후 [Create Web ACL] 버튼 클릭
규칙 그룹을 정책에서 연결 해제 후 Network Firewall 규칙 그룹 삭제 가능
방화벽 삭제 후 방화벽 정책 삭제 가능
IPtables
iptables는 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.
TCP Wrapper
TCP 래퍼는 호스트 기반 네트워킹 ACL 시스템으로서, 리눅스 또는 BSD 같은 운영 체제의 인터넷 프로토콜 서버에서 네트워크 접근을 필터링하기 위해 사용된다.
IPFilter
IPFilter는 네트워크 주소 변환(NAT) 또는 방화벽 서비스를 제공하기 위해 사용될 수 있는 소프트웨어 패키지입니다.
#!/bin/sh
#!/bin/bash
네트워크 타임 프로토콜(Network Time Protocol, NTP)
https://ko.wikipedia.org/wiki/BIND ⇒ BSD 기반의 유닉스 시스템을 위해 설계된 DNS
hooking
후킹은 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다.
/etc/hosts 파일에 적절한 권한은?
💡 /etc/hosts
파일 소유자는 읽고 쓸 수 있도록 하고, 나머지는 읽기 전용 권한을 부여
→ 644