HTTPS(Hypertext Transfer Protocol Secure)는 HTTP의 보안 버전으로, SSL/TLS 프로토콜을 사용하여 데이터를 암호화 후 전송하는 방식을 사용한다. 이를 통해 제3자가 패킷을 감청하더라도 데이터를 확인하기 어렵게 하여 안전한 통신 채널을 설정할 수 있다.

HTTPS의 테스트를 위해서는 SSL 인증서를 발급받아야 한다. 인증서를 발급받기 위해서는 사전에 도메인 발급이 필요하며 발급된 도메인이 있을 경우 곧바로 SSL 인증서 발급 절차를 거치면 된다. 테스트를 위해 사용하는 임시 인증서 발급을 목적으로 하기 때문에 무료로 인증서 발급이 가능한 ‘Let’s Encrypt(LE)’라는 인증기관의 인증서를 사용하였다.

다음은 인증서 발급에 사용된 command line 명령어이다. 이 과정에서 추가로 ‘openssl’과 ‘certbot라이브러리가 사용되었다. 서버 구성 시 사용한 운영체제는 ‘Ubuntu 20.04’ 버전이다.

$ openssl genrsa -des3 -out server.key 2048
$ openssl rsa -in server.key -out server.key.insecure
$ openssl rsq -new -key server.key -out server.csr
$ mv server.key server.key.secure
$ mv server.key.insecure server.key
$ sudo git clone https://github.com/certbot/certbot /opt/cerbot && cd /opt/cerbot
$ sudo snap install certbot --classic
$ sudo certbot certonly -d <domain>

인증서 발급 후 이를 테스트하고자 하는 웹서버에 적용하면 된다. 여기서는 ‘Apache’ 웹서버를 사용하였으며 Apache 웹서버에 SSL 인증서를 등록하는 과정은 [참고 문헌 1]을 참고하여 진행할 수 있다.

테스트 시 클라이언트 프로그램으로는 ‘curl’ 명령어를 사용하였다. 이 때 -k 옵션을 사용할 경우 https 프로토콜을 이용하여 연결을 맺을 수 있다.

$ curl -k https://yutaa.kr

서버에 https가 서비스되고 있을 경우 응답 값으로는 해당 url에서 서비스되고 있는 웹페이지를 받을 수 있다. [그림 1] 그러나 만약 서비스되고 있지 않을 경우에는 [그림 2]와 같은 응답을 확인할 수 있다.

그림 1
그림 2

이러한 과정을 네트워크 패킷 레벨에서 확인하면 다음과 같다.

서버에서 https가 서비스되고 있을 때에는 TCP 3-way handshake 후 암호화된 패킷 형태로 데이터를 교환하는 것을 확인할 수 있다. [그림 3] 그러나 https가 서비스되고 있지 않을 때에는 TCP SYN 패킷이 전송된 이후 TCP RST 응답이 오는 것을 확인할 수 있다. [그림 4]

그림 3
그림 4

 

'Penetration testing' 카테고리의 다른 글

서비스 식별: PostgreSQL (5432)  (0) 2023.09.01
서비스 식별: Submissions (587)  (0) 2023.09.01
서비스 식별: SMTPS (465)  (0) 2023.09.01
서비스 식별: LDAP (389)  (0) 2023.09.01

+ Recent posts