현재 대부분의 서비스들이 클라우드로 넘어가면서 도커를 이해하지 않고는 클라우드 환경을 이해 할 수 없게 되었기 때문에 모의 침투에서도 해당 서비스에 대한 이해가 필요하다.
0. 도커(Docker)
- 컨테이너 기술을 지원하는 프로젝트 (컨테이너 기술의 사실 상 표준)
- 다양한 운영체제에 사용 하지만 주로 리눅스에서 사용
- Docker Engine 위에 프로세스 단위로 배포된 이미지를 실행하는 가상화 환경
- 서비스 단위로 자원을 줄이거나 확장 시키는 스케일링이 가능
- 라이브러리 종속성을 고민하지 않고 설치 가능
1. 도커컨테이너 활용
- Registry : 컨테이너 이미지들을 데이터 베이스를 통해 제공
누구나 이미지를 만들어 올리는 PUSH
필요한 이미지를 가져가는 PULL이 가능하다.
- 회사나 개인이 고유의 Registry를 구축할 수 있으나 일반 사용자는 Docker Hub Registry를 사용
2. 도커컨테이너 환경 구축
Step 1. 칼리리눅스 터미널에서 도커 패키지 설치
sudo apt-get update
sudo apt install docker.io : 설치 완료
sudo docker : 기본 명령어 리스트
sudo docker version : 버전 확인
Version: 20.10.14+dfsg1
Go version: go1.18.1
sudo docker system info : 상세 정보 (설치/동작/멈춤 중인 컨테이너 / C groups)
sudo docker system df : 각 이미지들 용량 정보
Step 2. 필요한 이미지 레지스트리에서 PULL
sudo docker pull nginx : 웹서버 서비스
sudo docker images : 설치된 이미지들 목록 출력
3. 도커 컨테이너 기본 명령어
도커 이미지 검색
dockerhub에서 official 이미지를 검색하고 필요한 이미지를 설치한다.
도커 내에서 검색하는 방법은
sudo docker search [이미지명] official로 등록되어 있는 것을 사용하자
sudo docker search --filter=stars=1000 [이미지명] : filter 사용하여 검색
sudo docker search --limit=10 [이미지명] : 상위 10개만 검색
취약 서버 이미지도 많이 등록되어 있음
sudo docker container run --name [컨테이너 네임] -d[백그라운드 동작] -p[포트] [로컬 지정 포트 번호] : [서비스 포트 번호] [이미지명]
sudo docker container run --name nginx_web -d -p 80:80 nginx
sudo docker ps : 프로세스 확인
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
300c690fc187 nginx "/docker-entrypoint.…" 7 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp nginx_web
브라우저에서 localhost로 들어가면 웹서버 페이지 접속
sudo docker pull : 컨테이너 이미지를 로컬 캐시에 다운로드
sudo docker start : 더이상 실행 중 상태가 아닌 컨테이너 인스턴스를 시작
sudo docker stop : 실행중인 컨테이너 인스턴스를 중지
sudo docker restart : 실행중인 컨테이너 인스턴스를 다시시작
sudo docker inspect : 컨테이너 상태에 대한 자세한 정보를 표시
sudo docker attach : 사용자가 실행중인 Docker 컨테이너 인스턴스의 기본 프로세스에 대한 액세스 권한을 얻거나 연결
sudo docker exec : 실행중인 컨테이너 내에서 명령을 실행
sudo docker rm : 중지 된 컨테이너를 삭제
sudo docker rmi : 컨테이너 이미지를 삭제
sudo docker container ls : 실행중인 컨테이너 확인
sudo docker container ls -a : 실행/비실행 중인 컨테이너 확인
sudo docker container ls -a -q : 모든 컨테이너 아이디만 조회
sudo docker rm 'sudo docker container ls -a -q' : 모든 컨테이너 삭제
sudo docker container prune : 중지된 모든 컨테이너 제거
sudo docker image prune : 태그가 없는 모든 이미지 파기
sudo docker system prune : 사용라지 않는 모든 데이터 삭제
sudo docker container stats : 컨테이너 사용 현황 출력
sudo docker volume create [볼륨명] : 볼륨 생성
sudo docker volume ls : 생성된 볼륨 확인
sudo docker volume rm [볼륨명] : 볼륨 제거
sudo docker stop [볼륨명] : 볼륨 사용 정지
4. 도커 볼륨을 이용한 데이터베이스 운영 실습
Step 1. 데이터베이스를 할당할 볼륨 생성
┌──(kali㉿kali)-[~]
└─$ sudo docker volume create mysql-vol01
mysql-vol01
Step 2. mysql 컨테이너 생성하면서 루트 암호 및 데이터 베이스 생성
┌──(kali㉿kali)-[~]
└─$ sudo docker run -it --name=mysql01 \ : 컨테이너 이름
> -e MYSQL_ROOT_PASSWORD=test \ : mysql 루트 암호 설정
> -e MYSQL_DATABASE=test \ : mysql db 생성
> -v mysql-vol01:/var/lib/mysql -d \ : volume 할당
> mysql:5.7 : 사용할 이미지 없으면 자동으로 pulling해서 설치
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
Step 3. mysql 컨테이너 bash 쉘로 진입하여 mysql 명령 실행
┌──(kali㉿kali)-[~]
└─$ sudo docker exec -it mysql01 bash
bash-4.2# mysql -u root -p
Enter password:
mysql> show databases; : 생성했던 test db를 확인할 수 있다
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database projectluk; : 추가로 데이터 베이스 하나 더 생성
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| projectluk |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
Step4. log 파일 확인
┌──(kali㉿kali)-[~]
└─$ sudo su -
┌──(root㉿kali)-[~]
└─# cd /var/lib/docker/volumes
┌──(root㉿kali)-[/var/lib/docker/volumes]
└─# ls
backingFsBlockDev metadata.db mysql-vol01 my-volume01
┌──(root㉿kali)-[/var/lib/docker/volumes]
└─# cd mysql-vol01
┌──(root㉿kali)-[/var/lib/docker/volumes/mysql-vol01]
└─# ls
_data
┌──(root㉿kali)-[/var/lib/docker/volumes/mysql-vol01]
└─# cd _data
┌──(root㉿kali)-[/var/…/docker/volumes/mysql-vol01/_data]
└─# ls
auto.cnf client-cert.pem ibdata1 ibtmp1 performance_schema public_key.pem sys
ca-key.pem client-key.pem ib_logfile0 mysql private_key.pem server-cert.pem test
ca.pem ib_buffer_pool ib_logfile1 mysql.sock projectluk server-key.pem
5. 도커 파일 활용하기
도커파일에 스크립트로 저장된 내용대로 이미지 pulling 및 파일생성, 환경설정을 한번에 할 수 있음
Step 1. 폴더를 하나 만들고 Dockerfile이라는 이름으로 아래 구문 작성 후 저장
┌──(kali㉿kali)-[~]
└─$ mkdir docker
┌──(kali㉿kali)-[~]
└─$ cd docker
┌──(kali㉿kali)-[~/docker]
└─$ vim Dockerfile
┌──(kali㉿kali)-[~/docker]
└─$ cat Dockerfile
FROM ubuntu:latest : 반드시 들어가야하는 내용 컨테이너의
LABEL email=admin : 선택사항 주석 같은 느낌
CMD ["echo", "Hello Dokerfile"] : 실행 명령어
Step 2. 도커 파일을 이용한 이미지 빌드
┌──(kali㉿kali)-[~/docker]
└─$ sudo docker build -t ubuntu:v1.0 . : -t tag 명 마지막에 .은 작성한 Dockerfile을 쓴다는 의미
Step 3. 빌드한 이미지 run
┌──(kali㉿kali)-[~/docker]
└─$ sudo docker run ubuntu:v1.0 : 도커파일에 설정한대로 설치되고 명령어들이 실행됨
6. 불필요한 이미지 정리하기
Step 1. 현재 가지고 있는 이미지들 출력
┌──(kali㉿kali)-[~/docker]
└─$ sudo docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest b692a91e4e15 4 days ago 142MB
ubuntu latest df5de72bdb3b 5 days ago 77.8MB
mysql 5.7 3147495b3a5c 11 days ago 431MB
Step 2. root 권한으로 현재 사용하고 있지 않은 이미지들 삭제
┌──(kali㉿kali)-[~/docker]
└─$ sudo su -
┌──(root㉿kali)-[~]
└─# sudo docker rmi -f $(docker images -a -q)
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:34fea4f31bf187bc915536831fd0afc9d214755bf700b5cdb1336c82516d154e
Deleted: sha256:df5de72bdb3b711aba4eca685b1f42c722cc8a1837ed3fbd548a9282af2d836d
Error response from daemon: conflict: unable to delete b692a91e4e15 (cannot be forced) - image is being used by running container 300c690fc187
Error response from daemon: conflict: unable to delete 3147495b3a5c (cannot be forced) - image is being used by running container d74b2215ea21
'Security Project' 카테고리의 다른 글
7. shodan 검색 서비스 (0) | 2022.08.14 |
---|---|
6. 정보 수집 단계 (1 - DNS/Sub Domain) (0) | 2022.08.10 |
4. Kali Linux 기초 (0) | 2022.08.04 |
3. 모의해킹 실무환경 구축 (0) | 2022.08.03 |
2. 웹 취약점 체크리스트 / 최신 동향 수집 / 버그헌팅 (0) | 2022.08.02 |
댓글