#20230502(inspector, WAF 실습

eeapbh·2023년 5월 2일
1

MZC

목록 보기
38/61

ACM

버지니아에서 만든이유는 cloudfront는 인증서를 버지니아에서 만들어야 하기때문이다

mobaXterm

sudo systemctl stop httpd
  • WAF 실습
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
  • 초기 id, pw : admin, admin

이거 누르면 pw -> password로 바뀜

AWS Inspector

  • 시작하기 ㄱ

  • Advanced set up

  • 다음

  • 기간 : 15분

  • 생성

  • 평가 템플릿 -> 자동으로 시작안돼서 실행 눌러줘야함
  • 평가 실행 -> 실행

  • 결과

  • all log 검색

mobaXterm

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

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

CloudWatch

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

Amazon SNS

  • 주제 생성
  • 주제 생성 ㄱ

  • 구독 생성 ㄱ

  • 구독 생성 ㄱ

메일가서 confirm subscription 클릭

CloudWatch

  • 규칙 생성

  • 규칙생성 다하고 다음 ㄱㄱ

mobaXterm

— CloudWatchLog 실습

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

  • 정책 생성

목록 - DescribeLogStreams 체크
쓰기 - PutLogEvents, CreateLogGroup, CreateLogStream 체크

  • 리소스 : 모든 리소스

  • 정책 생성 ㄱ

  • 역할

  • 방금만든 정책 클릭하고 다음 ㄱ
  • 이름 cloudWatchLogRole
    하고 역할생성 버튼 ㄱ

EC2 -> 인스턴스 -> IAM 역할 수정

이거하고 awslogsd, httpd 재시작 해준다.

sudo systemctl restart awslogsd
sudo systemctl restart httpd

CloudWatch -> 로그 그룹

Fire 검색 -> 안뜸..

SQL Injection 이해

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

여기서 아이디는 '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에서 정보를 가져온다. 라는 결과가 도출되게 된다.

  • 웹 방화벽을 통해 이런 이상 트래픽을 차단할수있다.

로드밸런서 -> ALB 생성 (waf와 연동하기 위해)

  • 다음 ㄱㄱ

  • 대상그룹 생성

  • 인증서도 설정하고 로드밸런서 생성 ㄱ

systemctl stop httpd
docker container ls -a
sudo docker container start
sudo docker container start dvwa
  • 레코드 생성

대상그룹

  • ELB의 숨겨진 기능 : 인스턴스가 하나만있으면 unhealthy여도 접속 시켜줌


-> admin / password쳐서 접속 ㄱ

' OR '1' = '1'-- 

입력(뒤에 공백까지포함해서)

WAF & Shield

  • Add managed rule groups


-> Add rules 버튼 클릭
그문장이 들어왔을때 차단할수 있는가

  • 그다음 다 next

-> Create web ACL

  • 에러 나서 로드밸런서 다시 설정..근데 안됨

외않돼지

mobaXterm

내부에서 이유를 찾아보자
dvwa라고 하는 container 안쪽의 모습..?

docker container exec -it dvwa /bin/bash

계속하니까 되네

  • 이제 sql 인젝션 공격 들어오면

  • 403뜸

작동중인 서버에 클라이언트의 요청이 도달했으나, 서버가 클라이언트의 접근을 거부할 때 반환하는 HTTP 응답 코드이자 오류 코드

RDS 시작

EC2 -> NAT Instance 생성

  • bastion host랑 다른 가용영역에 생성 ㄱ

  • mobaXterm으로 NAT Instance 접속

  • NAT 인스턴스 설정
sudo sysctl -w net.ipv4.ip_forward=1 # 리눅스를 router로 만드는 코드, 이걸로 할수도있고 vi로 파일 수정할수도있고..

ip를 eth0으로 바꿔주자

sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

# 인터넷을 쓰기위해서 ip공유기를 타고 나갔다가 들어온다 SNAT.. private안쪽에서 바깥으로 내보내주는 = source NAT SNAT (PostROUTING), 외부에서 출발에서 안으로 들어오는거를 DNAT(FREEROUTING)

sudo yum install -y iptables-services
sudo service iptables save 

템플릿으로 인스턴스 시작

my-temp-wp 템플릿으로
pvt 2a, 2c에 하나씩 만들어줌

로드밸런서 생성 -> ALB 생성

대상그룹생성

wp01, 02 대상그룹에 추가

Bastion host

wp01, wp02
bastion host로도 들어갈수 있고 NAT Instance로도 들어갈수 있다. 하나로 할수도 있지만 역할 나누기

hostname 바꾸기

hostnamectl set-hostname bastion
exit

sudo su - root

sudo timedatectl set-timezone Asia/Seoul

bastion host 니까 key 업로드 해줌

wp01 접속

ssh -i my-new-key.pem ec2-user@10.38.65.144
  • 아직 ping안나감

route53 레코드생성

  • 이상하게 뜨는이유 : https로 들어가는거는 최신버전의 php, plugin설치?해야함
    그럼 로드밸런서 리스너에 http로 들어가는 거도 추가해주자

로드밸런서 -> 리스너 추가

대상그룹 my-tg-wp 하고 추가 ㄱㄱ

이제 http로도 접속가능 안깨지고 잘나옴

VPC


이 라우팅때문에 public이랑 private현재 내부 통신 가능함

private 에서 외부로 나가는 라우팅 해줘야함

라우팅 편집 -> 라우팅 추가

내부ip를 제외한 모든 ip들을 NAT Instance(Next hop)로 보내면 igw를 통해서 밖으로 ㄱㄱ할수있다

EC2 -> NAT Instance

작업 -> 네트워킹 -> 소스/대상 확인 변경

라우터 역할을 할거면 중지를 눌러줘야한다..

그럼 핑나가야되는데 왜안되지

실습마무리

  • rds 중지

  • waf 삭제

  • disassociate 하고

  • delete

  • Amazon Inspector 평가대상 -> 삭제

  • Amazon Inspector
    지우고 대시보드 들어가면 이거뜨면 됨

  • 인스턴스 wp01, wp02 종료

  • NAT, Bastion은 중지

  • 로드밸런서 전부 삭제

  • 대상그룹 전부 삭제

  • cloudwatch 이벤트 -> 규칙 다 삭제

0개의 댓글