HTTP 보안 취약점 확인
웹서버의 게시판에 로그인하는 과정을 Wireshark로 캡쳐하였습니다.
이후 게시판에 로그인한 패킷(POST /board/login_chk.php)을
HTTP를 오른쪽 클릭 -> Follow -> HTTP Stream을 선택합니다.
확인결과 서버와 클라이언트가 주고받은 패킷을 제한없이 볼 수 있으며
암호화나 보안이 되어있지 않고 평문으로 전송됨을 알 수 있습니다.
이런 HTTP의 취약점을 보완하기 위해 도입된 것이
SSL/TLS를 사용한 HTTPS 프로토콜입니다.
HTTPS 보안 서버 구축
사용자 로그인 및 중요한 데이터를 처리하기 위하여
SSL/TLS를 적용하여 통신되는 패킷을 안전하게 암호화 처리할 수 있습니다.
▶ 공인인증서 : 공식기관에서 제공 --> 공식 도메인
▶ 사설인증서 : 개인이 만들어 내부용으로 사용 가능
◈ 웹 방화벽
▶ IPSec : 3계층에서 동작하는 보안
▶ SSL : 응용계층에서 동작하는 보안
(1) 사설 SSL 인증서 설치 및 설정
# openssl 설치
apt install -y openssl
# Redhat 계열 리눅스의 경우 mod_ssl 을 추가 설치
# 웹서버 홈 디렉터리로 이동
cd /etc/apache2
# Redhat 계열의 경우 /etc/httpd
# 인증서용 디렉터리 생성
mkdir ssl
cd ssl
# 개인 키 생성
openssl genrsa -des3 -out server.key 2048
# 암호 두번 입력
키 생성이 완료되면 server.key 파일이 생성됩니다.
(2) 발급된 인증서 사인 요청
openssl req -new -key server.key -out server.csr
인증 사인 요청을 하면 인증을 위한 정보를 입력해야 합니다.
# server.key 백업
cp server.key server.key.origin
openssl rsa -in server.key.origin -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
(3) SSL 모듈 활성화 및 웹서버에 인증서 등록
# SSL 모듈 활성화
a2enmod ssl
# ssl 환경설정 수정
gedit /etc/apache2/sites-available/default-ssl.conf
# Redhat 계열의 경우 /etc/httpd/conf.d/ssl.conf
25라인 구문확인
SSLEngine on
32-33라인 구문 수정
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
# SSLCertificateFile /etc/httpd/ssl/server.crt
# SSLCertificateKeyFile /etc/httpd/ssl/server.key
(4) 사이트 활성화
# ssl 모듈 활성화
a2enmod ssl
a2ensite default-ssl
# Redhat 계열의 경우 모듈 활성화는 생략
systemctl reload apache2
(5) 방화벽 설정
# 방화벽 설정
ufw allow 443/tcp
# 방화벽 재시작
ufw reload
(6) HTTPs 확인
이제 HTTPS 설정이 완료되었습니다.
https:// 를 이용해 웹 서버에 https로 접속할 수 있습니다.
하지만 공인인증을 받지 못한 사설인증 SSL이므로
웹 브라우저에서 경고를 표시합니다.
고급 -> 안전하지 않음으로 이동을 클릭하여 경고를 무시하고 접속할 수 있습니다.
HTTPS로 암호화된 패킷 확인
이제 다시 Wireshark로 전송되는 패킷을 확인하면
이전과 다른 프로토콜로 데이터가 전송이 되는것을 확인할 수 있습니다.
그리고 Stream을 캡쳐해 내용을 확인하면 암호화되어
내용을 알 수 없는 것을 확인할 수 있습니다.