SK shieldus Rookies 16기 (클라우드기반 시스템 운영/구축 실무 #04)

만두다섯개·2024년 1월 5일
0

SK 루키즈 16기

목록 보기
43/52

주요 정보

  • 교육 과정명 : 클라우드기반 스마트융합보안 과정 16기
  • 교육 회차 정보 : '24. 01. 08. 모의해킹 실무 #04

학습 요약

실습 네트워크 환경 제시

네트워크 환경은 아래와 같다. SlpunkServer에 NTP 서버, 클라이언트 NTP : ZeekIDS, WebServer, Sysmon.

암호화의 기초

대칭키, 비대칭키는 CentOS7 터미널에서 진행했다.

대칭키 암호화 방식
  1. P1.txt 텍스트 파일을 DES3, Salt로 암호화시켜 암호화문 P2.bin 생성

openssl enc -e -des3 -salt -in P1.txt -out P2.bin

이때, 사용자에게 비밀번호를 요구한다. 1234 입력해 암호화를 진행시켜준다.

  1. P2.bin 텍스트 파일을 DES3, Salt로 복호화시켜 암호화문 P1.bin 생성

사용자에게 비밀번호를 요구한다. 이전 암호문 생성에서 사용한 비밀번호를 입력해 복호화 진행시킨 후 확인하면 복호화된 PlainText 확인 가능.

비대칭키 암호화 방식
  1. 개인키 생성
openssl genrsa -out private.pem 2048  // 2048은 키 길이

  1. 공개키 생성
    앞서 생성한 개인키에 대한 공개키를 생성한다.
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

  1. 평문을 비대칭키 암호화 방식을 사용해 암호화
openssl rsautl -encrypt -inkey public.pem -pubin -in P1.txt -out P4.ssl

비대칭 암호화방식에서 공개키는 인증서에 담겨 전송된다.

암호화의 역할

암호화는 기밀성, 신뢰성(인증), 무결성의 역할을 요구하고, 이를 보통 Key를 이용한 암호화 기술로 해결한다.

  1. 대칭키 암호화 : 동일한 암호화 키를 사용해 암/복호화를 진행한다. (DES) 기밀성을 가진다.

  1. 비대칭키 암호화 : 암/복화 시 사용하는 키는 서로 다른 키를 사용한다. (RSA) 신뢰성을 가진다.

해시 알고리즘

해시 : 하나의 문자열을 짧은 길이의 값 또는 키로 변환하는 과정

MD 알고리즘

MD2, MD4, MD5(MD4 확장판, 속도가 MD4에 비해 빠르진 않지만 보안성에 더 중점)

SHA 알고리즘

160비트의 값을 생성하는 해시 함수, MD4발전형
MD5보다 느리지만 더 안전하다.

전자서명

  1. Alice는 원본 데이터에 해시 후 Digest 생성한다. 그리고 전자서명한다.

    • 전자서명 : 원본 해시값(Digest) + 개인키 암호
  2. Alice는 원본 데이터, 전자서명을 전송한다.

  3. Bob은 전자서명을 Alice 공개키를 사용해 Digest 획득

  4. Bob은 원본 데이터를 해시해 Digest를 생성한다.

  5. 3,4에서 획득한 Digest를 비교해 무결성을 확인한다.

SSL/TLS

인증서 ==> 공개키 배포, 해시알고리즘(전자서명)으로 생성한다.
SSL/TSL : 웹 브라우저 탑재된 응용계층 보호 목적 프로토콜
TLS 프로토콜은 SSL 프로토콜 사용할 수 있도록 구성한다.
SSL(Secure Socket Layer) : 응용계층을 보호하는 프로토콜
TLS(Transport Layer Secure) : 전송 상위계층에서 동작해 응용계층 암호화. HTTP 패킷 보호 목적으로 사용.


OSI 7계층 중, 7계층인 애플리케이션 계층, 그리고 4계층에서 해당 프로토콜과 연관. (4계층에서 동작, 7게층에서 상호작용 존재)

HTTP와 HTTPS차이

HTTPS 연결 과정

  1. 클라이언트가 브라우저를 이용해 https://www.naver.com 에 접속한다.
  2. 웹 서버는 클라이언트에게 인증서를 발급해준다. 클라이언트는 발급된 인증서를 신뢰해(인증서 유효성 검사) 사용자에게 웹 서버를 보여준다.


만약 2번에서 인증서에 문제가 있다면, (인증서 유효성 검사 결과 부적절 -> 인증서 기간 만료, 유효하지 않음)
또는, 자체 발급 인증서는 인증서를 검증할 수 없어 해당 페이지가 나올 수 있다.

자체발급 인증서

ROOT CA기관은 자체 발급한 인증서를 사용 가능하다.
(크롬 브라우저 - 설정 - 인증서 관리 - 인증서 - 신뢰할 수 있는 루트 인증 기관 - COMODO 인증서 확인)

ROOT CA기관에서 발급한 인증서들을 웹브라우저 회사에 전달한다. 이후 사용자가 특정 웹브라우저를 다운로드 받으면, 해당 인증서도 함께 전달받는다.

아래 사진과 같이, 2,3번 사이에 사용자가 접속하려는 웹 서버는 CA에게 인증서를 발급해 심사받는다. 이후 심사가 통과된 인증서를 클라이언트가 웹 서버에 접속 시, 인증서를 발급해 클라이언트가 유효성을 확인하게 한다.

따라서 인증서는 웹 서버와 클라이언트의 안전한 연결을 위한 용도이다.

인증서 유효성과 데이터 암호화 전송의 관계

인증서가 유효하지 않더라도, 데이터 암호화는 별개로 진행되어 전송된다.

SSL/TSL 과정

  1. 클라이언트는 웹 서버로 인증서 관련 요청을 한다.
  2. 웹 서버는 인증서의 공개키를 전송한다. (인증서에 공개키를 담아 전송)

  1. 클라이언트는 공개키로 세션키(대칭키)를 생성 및 웹 서버로 전송한다. 이로써 웹 서버와 클라이언트가 대칭키를 보유하게 된다.(세션키로써)


4. 이후 클라이언트가 전송하는 데이터(비밀번호, 계좌정보 등..)는 대칭키로 암호화 해 전송하고, 이를 웹 서버가 대칭키를 사용해 검증하고 상용한다.

SSL 사용 키

  1. 대칭키 : 데이터 암호화
  2. 비대칭키 : 공개키 (대칭키 암호화 목적)

HTTPS 실습 구축

1. HTTP Server

CentOS7에서 HTTP Server로 사용한다.

1. Apache 패키지 설치

패키지 설치

# yum install –y httpd
# rpm –qa | grep httpd 

패키지 버전 확인

# httpd –v

2. OpenSSL와 mod_ssl 설치

openssl 패키지 설치

# yum –y install openssl-*
# rpm –qa |grep openssl

mod_ssl 모듈 확인

httpd -l 결과 mod_ssl.so 파일이 존재하지 않는다. 아래 사진처럼 조회되지 않는다고 가정할때, 아래와 같이 진행해준다.

# rpm –qa |grep mod_ssl
#yum –y install mod_ssl*
#ls /etc/httdp/modules/mod_ssl.so

이후 아래와 같은 파일이 존재하면 된다.

3. httpd.conf 파일 확인 후 index.html 파일 만들기

# vi /etc/httpd/conf/httpd.conf

httpd.conf 파일 119번째 줄을 확인 후, index.html 파일을 생성하자.

# vi /var/www/html/index.html

4. http 프로토콜 방화벽 설정 및 확인

iptables 를 설치한다.

yum install iptables-services


iptables에 규칙을 추가하고, iptables 저장 및 재기동

#iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 80 -j ACCEPT
#service iptables save
#service iptables start
#service httpd start 

클라이언트에서 추가한 HTML 파일을 확인해 보자.
Winodws10에서 아래 경로를 추가해주자.

C:\>windows>system32>drivers>etc>hosts


인터넷 브라우저에서 웹 서버에 접속하면 아래와 같이 접속된다.

이는 HTTP 접속이다. HTTPS 접속으로 변경해보자.

2. HTTP Server

CentOS7에서 HTTPS Server를 구성해보자.

1. 개인키 생성

#cd /etc/pki/tls/certs
#openssl genrsa –out www.open.net.key 2048

2. CSR 생성

3. 개인키와 CSR을 이용해 인증서 생성

#openssl x509 –in www.open.net.csr –out www.open.net.crt –req –signkey www.open.net.key –days 365 
#ls –l www.open.net.*  # 설치 파일 확인

4. httpd-ssl.conf 파일에 인증서 경로 설정

# vi /etc/httpd/conf.d/ssl.conf

아래 사진과 같이 수정한다.

5. 방화벽 설정 및 서비스 활성화

iptables -I INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 443 -j ACCEPT
iptables -L # HTTPS 확인
service iptables save
service iptables restart

HTTPS에 추가되으므로 방화벽을 설정하고, 서비스를 활성화시키자.

#service httpd restart

3. HTTPS Client 접속

MicroEdge 브라우저로 https://www.open.net 으로 접속해보자.
안전하지 않음으로 접속 후, (안전하지 않음)을 클릭하고, 인증서 모양 아이콘을 눌러 세부정보에 들어가 인증서를 내보내자.

바탕화면으로 인증서를 내보내고, 인증서 아이콘을 눌러 인증서를 설치

신뢰할 수 있는 루트 인증기관으로 인증서를 설치한다.

Microsoft Edge 브라우저에서 설정 - IE 검색 후 아래로 스크롤
아래 사진과 같이 설정을 변경해주고, Internet Exploerer 모드에서 다시 로드하기 버튼을 누르면 새로 Microsoft Edge 브라우저가 생성되고, 해당 브라우저의 URL 입력창에서 https:www.open.net을 열면 안전하지 않음이 사라진다.

왜 IE를 사용해야 할까?
나는 이게 직접 생성한 인증서(루트기관이 아니지만 루트기관인증서라고 설치)가 브라우저마다 추가적인 검증 로직이 있어 비교적 구형 브라우저인 IE에서는 열린다고 생각했다.
#참고
HTTPS 구성
1. HTTP 설치 ==> http://www.open.net
1) rpm -qa | grep httpd
2) cd /var/www/httpd
nano index.html
3) 방화벽 설정 (80 개방) 후 활성화
iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 80 -j ACCEPT
service iptables save
service iptables start
4) 웹서비스 활성화 service httpd start
5) http://www.open.net
[W10] /windows/system32/driver/etc/hosts
192.168.10.30 www.open.net
2. 인증서 생성
인증서 생성 위치
cd /etc/pki/tls/certs
키생성 : openssl genrsa –out www.open.net.key 2048
인증요청서 : openssl req –new –key www.open.net.key -out www.open.net.csr
인증서생성 : openssl x509 –in www.open.net.csr –out www.open.net.crt –req –signkey www.open.net.key –days 365
3. ssl.conf에 인증서와 키를 매핑
/etc/httpd/conf.d/ssl.conf
- SSLCertificateFile /etc/pki/tls/certs/www.open.net.crt
- SSLCertificateKeyFile /etc/pki/tls/certs/www.open.net.key
4. https 방화벽 활성화
iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 443 -j ACCEPT
service iptables save
service iptables restart
5. 서비스 개시
service httpd restart
6. https://www.open.net
==> 자체 발급 인증서를 생성, 인증서 유효성 검사에서 문제 발생
==> 자체 발급 인증서를 '신뢰할수 있는 루트인증기관'에 import

profile
磨斧爲針

0개의 댓글