버지니아에서 만든이유는 cloudfront는 인증서를 버지니아에서 만들어야 하기때문이다
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
이거 누르면 pw -> password로 바뀜
시작하기 ㄱ
Advanced set up
다음
기간 : 15분
생성
평가 실행 -> 실행
결과
ls -al /var/log
sudo docker container ls -a
sudo docker container stop dvwa
sudo docker container ls -a
sudo systemctl start httpd
주제 생성 ㄱ
구독 생성 ㄱ
구독 생성 ㄱ
메일가서 confirm subscription 클릭
규칙 생성
규칙생성 다하고 다음 ㄱㄱ
— 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
목록 - DescribeLogStreams 체크
쓰기 - PutLogEvents, CreateLogGroup, CreateLogStream 체크
리소스 : 모든 리소스
정책 생성 ㄱ
역할
이거하고 awslogsd, httpd 재시작 해준다.
sudo systemctl restart awslogsd
sudo systemctl restart httpd
Fire 검색 -> 안뜸..
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에서 정보를 가져온다. 라는 결과가 도출되게 된다.
다음 ㄱㄱ
대상그룹 생성
인증서도 설정하고 로드밸런서 생성 ㄱ
systemctl stop httpd
docker container ls -a
sudo docker container start
sudo docker container start dvwa
-> admin / password쳐서 접속 ㄱ
' OR '1' = '1'--
입력(뒤에 공백까지포함해서)
-> Add rules 버튼 클릭
그문장이 들어왔을때 차단할수 있는가
-> Create web ACL
외않돼지
내부에서 이유를 찾아보자
dvwa라고 하는 container 안쪽의 모습..?
docker container exec -it dvwa /bin/bash
이제 sql 인젝션 공격 들어오면
403뜸
작동중인 서버에 클라이언트의 요청이 도달했으나, 서버가 클라이언트의 접근을 거부할 때 반환하는 HTTP 응답 코드이자 오류 코드
bastion host랑 다른 가용영역에 생성 ㄱ
mobaXterm으로 NAT Instance 접속
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에 하나씩 만들어줌
wp01, 02 대상그룹에 추가
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
대상그룹 my-tg-wp 하고 추가 ㄱㄱ
이제 http로도 접속가능 안깨지고 잘나옴
이 라우팅때문에 public이랑 private현재 내부 통신 가능함
private 에서 외부로 나가는 라우팅 해줘야함
내부ip를 제외한 모든 ip들을 NAT Instance(Next hop)로 보내면 igw를 통해서 밖으로 ㄱㄱ할수있다
작업 -> 네트워킹 -> 소스/대상 확인 변경
라우터 역할을 할거면 중지를 눌러줘야한다..
그럼 핑나가야되는데 왜안되지
rds 중지
waf 삭제
disassociate 하고
delete
Amazon Inspector 평가대상 -> 삭제
Amazon Inspector
지우고 대시보드 들어가면 이거뜨면 됨
인스턴스 wp01, wp02 종료
NAT, Bastion은 중지
로드밸런서 전부 삭제
대상그룹 전부 삭제
cloudwatch 이벤트 -> 규칙 다 삭제