정보보안 전문가를 꿈꾸며 작성하는 블로그입니다.

SK 쉴더스 루키즈

[SK 쉴더스] 클라우드 보안 3일차

minjoo 2022. 9. 28. 17:21

복습

* EC2

- 클라우드의 핵심 (서버를 아웃소싱, AWS가 가장 먼저 시작한 서비스)

- Ubuntu를 웹서버로 만드는 실습(Debian 계열 : apt, 예전에는 apt-get)

- Amazon Linux를 웹서버로 만든느 실습(Red hat 계열 : yum, 최근에는 dnf)

예정

- Windows Server 2016 → 실습 예정

- RDS(관계형 데이터베이스 서비스, Relational Database Service)


1. Windows Server 2016

1.1 인스턴스 시작

- 이름 : mj_Win2016

- 애플리케이션 및 OS 이미지 : Windows - MS Windows Server 2016 Base

* AMI(Amazon Machine Image)

- 아마존에서 미리 만들어놓은 가상머신 이미지

- 인스턴스 유형 : t2.micro    → 윈도우는 다른 OS보다 좀 더 비쌈

- 키 페어, vpc, 서브넷 : 이전에 생성한 키가 남아있으면 사용, 없으면 생성

- 보안그룹 설정

→ 인스턴스 시작

 

1.2 인스턴스 연결

- 생성한 인스턴스 선택 > 연결

1) RDP 클라이언트 > 암호 가져오기(맨 아래)

- 키페어 파일 Browse 후에 암호해독

2) 윈도우 원격 데스크탑 연결

 

암호 노출 절대 금지(해킹 위험), IP주소는 괜찮지만 노출하지 않는것이 좋음(공격 대상이 될 수 있음)

- 인스턴스의 퍼블릭 IP, 사용자이름 복사 

- 윈도우 원격 데스크탑 > 옵션표시 > 컴퓨터 : 복사한 퍼블릭 IP, 사용자이름 붙여넣기 > 연결

- 사용자 자격 증명 암호 : 인스턴스의 암호 입력 > 확인

3) 원격 데스크톱 설정

- 원격) 윈도우 > 서버 매니저 > Add Roles and Features

- Installation Type > Role-based~ 선택 > next

- Server Roles > Roles 에 Web Server(IIS) 체크 > next

- 이외에는 모두 next, 마지막에 install 클릭 > install succeeded가 뜨면 close

4) 생성한 인스턴스의 Public IP에 웹 브라우저로 접속 → http://IP주소 (https는 ssh/tls 설치 필요)

성공적으로 접속됨

1.3 원격 데스크톱 실습

* Windows Server의 Web Server Root Directory(IP주소나 도메인만 입력시 가장 먼저 접속되는 위치)

- 윈도우 웹 서버 루트 디렉토리 : C\inetpub\wwwroot

- iisstart.htm 파일의 확장자를 old로 변경 → iisstart.old

- 지난 실습의 index.html 코드에서 이미지 경로 수정 (파일이름만 작성)

- 수정한 코드 파일 및 이미지 파일(로컬 윈도우)을 원격 데스크톱(원격 윈도우)의 웹 서버 루트 디렉토리에 복사(마우스 우클릭 copy, paste - 끌어오기, 단축키 안됨)

- index.html 파일 이름 및 확장자 변경 → iisstart.htm

→ http://IP주소 에 다시 접속 시 생성한 issstart.htm 화면 출력

 

* 403 error가 뜨는 경우 :  인스턴스 설정 시 보안 그룹에서 http를 허용하지 않았기 때문

→ 생성한 인스턴스 선택 > 보안탭 > 보안그룹 선택 > 인바운드 규칙 편집으로 수정가능

* 접속이 안되는 경우 : 보안 그룹의 설정이 잘못된 경우 / 서비스가 실행되지 않은 경우(설정 후 아파치 재시작 필요)

* 저장한 파일이 페이지에 안보이는 경우 : 파일 또는 이미지 확장자가 잘못된 경우 / 이미지 업로드가 잘못된 경우

 

* Security Group(보안그룹)

- 인바운드 규칙 : 인터넷에서 AWS에 들어갈 때의 규칙(밖 → 안) → SSH, http, https, RDP 등 꼭 필요한 경우에만 허용

→ SSH, RDP는 반드시 IP주소를 엄격하게 제한(http, https는 제한 x)

- 아웃바운드 규칙 : AWS에서 인터넷으로 나갈 때의 규칙(안 → 밖) → 대부분 허용

 

* 웹 서버 루트 디렉토리 접속 화면 - 파일 우선순위 설정

- window2016(원격 데스크톱) > Server manager > IIS

- server 선택 > 우클릭 > Internet Information Services(IIS) Manager > Default Document

→ IP주소에 접속시 보여줄 파일 선택(파일이 여러개일 때 어떤 파일을 화면에 보여줄 지 우선순위 설정)

2. Database Server에 원격으로 접속

2.1 실습 준비 - VMware Ubuntu 22.04LTS

* Workbench : 클라이언트용 프로그램

- 구글에 workbench 검색 → MySQL workbench 8.0.30 다운로드

- MSI installer 다운 및 실행 - Client Only > next 또는 execute (error가 나올경우 try again)

 

1) 우분투에서 원격에서 사용할 계정 생성

$ sudo mysql -u root -p  // 비밀번호 x

mysql> create user blackpink@'%' identified by 'icecream';    // % : 어디서든지 접속이 가능한 계정

mysql> grant all privileges on *.* to blackpink;    // 모든 DB에 대해 모든 권한 부여

mysql> exit

2) Workbence
- +버튼 클릭

- 이름 : VMware Ubuntu MySQL

- Method : Standard(TCP/IP)

- Hostname : 우분투 서버 IP주소

- Username : blackpink

- Password > Store in Vault : icecream

→ OK 클릭

3) 외부에서 접속이 안되도록 설정되어 있음

* 우분투)

$ sudo ufw allow 3306    // 포트 허용(Ubuntu FireWall : 방화벽 규칙 업데이트 - 3306 포트에 외부접속 허용)

$ cd /etc/mysql/mysql.conf.d

$ sudo vi mysqld.cnf

: set nu  → 31번 라인 : 127.0.0.1을 0.0.0.0으로 변경

// 127.0.0.1이면 본인 컴퓨터에서만 접속 가능(외부 접속x)

// 0.0.0.0이면 전세계 어디든지 접속 가능(매우 위험)

:wq

$ sudo service mysql restart    // MySQL 재시작

 

* 참고) 회사 내부에서 접속하려면

ip 주소가 59.6.0.106 일 경우, 끝자리가 바뀔 수 있으므로 59.6.0.0으로 설정 → 회사 내에서는 IP가 바뀌어도 접속 가능

4) 생성한 workbench 접속

5) query1 에 명령어 입력 > 번개+커서 아이콘(커서가 있는 줄의 명령어 실행)

- create database awstest;

- use awstest;

명령어 실행결과

- show databases;

db 목록 출력

 

* Root 계정을 업무에 활용하면 안되는 이유

- Root 계정이 크래킹되면 제어할 방법이 없음

- 다른 계정을 만들어서 활용

- 특히 DB의 경우 database마다 따로 계정을 할당하는 것이 좋음

 

* blackpink는 '%'로 되어있어서 Workbench 또는 mysql command line으로 DB에 접속 가능

* board는 localhost로 되어있어서 Workbench 또는 mysql command line으로는 DB에 접속 불가 

→ SSH로 서버에 접속하고 board 계정으로 DB에 접속하면 가능

 

- use gnuboard;

- select * from g5_write_free;

 

2.2 goods.sql 파일 실습

- open a sql script~ 버튼 클릭 > goods.sql 파일 선택

- 전체선택(ctrl+a) 후 번개표시 버튼 클릭(goods.sql 파일 실행)

- 파일 맨 아랫줄에서 show databases; > 번개+커서

classicmodels db 확인

- use classicmodels

- show tables;

- desc orders;    // orders 테이블에 컬럼 확인

- select orderNumber, orderDate, shippedDate from orders;

- select orderNumber, orderDate, shippedDate from orders order by orderDate desc limit 10;

→ orderDate를 기준으로 내림차순 정렬해 상위 10개만 출력 (최근 주문한 10개 목록 출력)

 

3. RDS 생성

* RDS 사전 조건

  1) RDS는 가용영역 2개 필요 → Subnet 1개 추가해야 함

  2) VPC에서 DNS 경로를 사용해야 함(호스트 이름 편집 → 활성화)

  → 두 조건을 만족해야 접속할 수 있는 URL을 생성할 수 있음

1) 서브넷 생성

- 지금 존재하는 서브넷과 다른 가용영역, 다른 IP(첫번째 두번째는 같아야함)

- VPC 탭 > VPC 선택 > 작업 > DNS 호스트 이름 편집

- 활성화 체크 > 변경사항 저장

2) 데이터베이스 생성

- 생성방식 : 표준생성

- 엔진옵션 : MySQL - 버전 : 8번대 아무거나

- 템플릿 : 프리티어

- DB 인스턴스 식별자 : mjgoods

- 마스터사용자 : mj_goods / admin1234

- 인스턴스 구성 : 버스터블클래스 - db.t2.micro

* 연결

- EC2 컴퓨팅리소스에 연결 x

- 퍼블릭 액세스 : 예

- VPC 보안그룹 : 새로생성 - 새 VPC 보안그룹이름 : DB_server

- 데이터베이스 인증 : 암호 인증

 

* Cloud의 종류

1) IaaS(Infrastructure as a Service)

- 클라우드에서 인프라를 제공해주는 서비스

- 인프라는 가상머신(Ubuntu, Amazon Linux, Windows Server 등), 네트워크(VPC, Subnet), 스토리지(S3) 등을 의미

- AWS는 HW, Network, Security 등만 책임

- 나머지(OS, Application, Data, Platform 등)는 사용자의 책임

- 장점 : 대부분 통제가 가능하며, 가격 저렴함

- 단점 : 사용자가 확장, 관리(백업, 용량, 보안, 장애 등) 해야함

2) PaaS(Platform as a Service)

- 클라우드에서 플랫폼을 제공해주는 서비스

- 플랫폼은 개발자가 개발할 수 있는 환경까지 제공해줌(RDS)

- AWS는 HW, Network, Security + OS + Applicatoin 설치 및 관리

- 사용자는 Application 사용 및 Data만 책임

- 장점 : 관리를 해주는 부분은 신경쓰지 않아도 됨(백업, 용량, 보안, 장애 관리 등을 AWS에서 제공)

- 단점 : OS 및 Application에 대한 완전한 통제는 어려움(root 권한x, admin 등을 만들어서 사용))

- PaaS-ta : 정부에서 개발자들이 창업할 수 있도록 만든 환경

3) SaaS(Software as a Service)

- 클라우드에서 소프트웨어를 제공해주는 서비스

- 사용자는 ID/PW 등 인증만 하면 모든 서비스를 이용할 수 있음, Client 용 SW만 필요

- 장점 : IT인력이 많이 필요하지 않음

- 단점 : 의존성 문제(마이그레이션이 어려움), 비용이 많이 듦, 사용자가 customizing하기 어려움 

 

4. 실습 - Workbench를 이용해 goods.sql을 RDS에 업로드하고 명령실행

1) 새 workbench 생성

- 이름: AWS RDS

- hostname : 생성한 RDS의 엔드포인트

- username/password : RDS 생성시 작성한 마스터사용자 계정정보

→ 생성한 workbench 접속

2) Open a SQL script~ > goods.sql 오픈

- 전체선택(ctrl+a) > 번개표시(실행)

3) 명령어 실행

- show databases;

- use classicmodels

- show tables;

- desc products;

- select productName, productLine, productVendor, buyPrice from products;

5. 실습 - 3Tier로 구성하기(웹 서버와 DB 서버를 따로 사용)

- 이전 EC2 삭제 후 새로운 EC2를 생성한 다음, DB를 설치하지 않고 RDS에 데이터 저장하도록 해서 gnuboard 동작시키기

- OS : Ubuntu 22.04 LTS - MySQL을 제외하고 설치

- DB는 RDS 활용, 설정은 Workbench로 설정

- gnuboard 설치시 Host : 엔드포인트:3306 으로 작성

 

5.1 EC2 생성

5.2 gnuboard 설치

1) cmd에서 ssh 접속

$ sudo apt update

$ sudo apt install vim

$ sudo apt install apache2

2) RSD 설정 및 계정생성, 권한부여

- EC2 접속 허용으로 RSD 다시 생성(식별자 mj-goods), 퍼블릭 IP설정 불가 → EC2 통해서 접속

$ sudo apt install mysql-client

$ sudo mysql -h [엔드포인트] -u [계정명 : mj_goods] -p

- 접속 후 계정 생성 및 권한 부여

3) 웹 서버에서 사용할 언어 설치

$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git

4) 게시판 소스 다운로드

$ cd /var/www/html

$ sudo git clone https://github.com/gnuboard/gnuboard5    // github의 gnuboard를 통째로 복제

$ cd gnuboard5

$ sudo mkdir data

$ sudo chmod 707 data

6) 마무리

$ sudo apt install net-tools

$ sudo service apache2 restart

 

5.3 Gnuboard 접속

1) 인스턴스 IPv4 퍼블릭 IP주소 /gnuboard5/ 접속

2) gnuboard 설치하기

- host : RDS 엔드포인트:3306

- User/Password : RDS 생성 시 작성한 마스터사용자 계정정보

- DB명 gnuboard, 웹사이트 관리자 admin/admin1234

3) 관리자 로그인 후 이미지 업로드 → 정상 동작 확인

 

* RSD 연결 방법

1) Public IP 부여 : EC2와 연결 안됨

2) EC2와 연결 : 지정할 EC2가 필요하므로 EC2를 미리 생성하고 연결해야 함 → workbench 사용 불가

→ 실습 후에는 RDS와 EC2 모두 삭제(종료)