- Directory traversal
- HackTheBox APKey
- UnCrackable level 1
- JSP
- NoSQL
- blind sql injection
- xss
- mongoDB
- Frida
- Android Backup
- CVE-2014-0094
- HackTheBox
- nginx
- Android 6.0
- HacktheBox Mobile
- CVE-2022-22965
- MariaDB
- XALZ 압축해제
- UnCrackable
- CVE-2010-1622
- PortSwigger
- Hackthebox cat
- DOM
- login form
- Xamarin 분석
- JAVA ClassLoader 취약점
- mstg
- File Upload
- SeeTheSharpFlag
- getCachedIntrospectionResults
- Today
- Total
끄적끄적
[취약점 진단] HTTPS 사용 본문
개요
전자금융취약점 및 정보통신기반시설 취약점 진단 가이드에서는 공통적으로 존재하는 "통신구간 암호화"에 대한 항목에 대해서 포스팅하고자 한다.
평가항목
평가기준은 서버와 클라이언트간 통신(데이터 전송 포함)시, 암호화 전송 여부를 점검하는 것이다.
서버와 클라이언트간 암호화 통신이란 SSL/TLS를 사용하는지 즉, HTTPS를 사용하여 통신하는지 여부를 확인한다.
점검 기준
중요 정보(거래, 인증, 개인정보)를 송수신하는 과정에서 암호화 통신이 적용되어 있는지 확인한다.
중요 정보를 송수신하는 페이지가 아니더라도 웹 서버에 SSL/TLS 설정 시, 해당 호스트에서는 HTTPS 통신을 수행하게 된다.
주로 사용하는 브라우저(Chrome, Edge)는 호스트 접근 시, URI Scheme를 https로 처리하고 https 통신이 불가능한 경우 http 통신으로 수행하는 것으로 보여진다.
조치방법
조치 방법은 웹서버의 종류에 따라 조금씩 차이가 있다. 필자는 웹 서버에 대한 조치 이후 "Strict-Transport-Security" 헤더를 추가하는 것을 권장한다.
웹 서버
웹 서버의 설정 파일(*.conf)을 변경하여 사용하는 방법으로, HTTP Scheme를 통해 호스트에 접근 시 301, 302를 통해 HTTPS Scheme Host로 Redirection 한다.
Apache
httpd.conf 파일 수정
1. Apache 서버가 설치된 경로로 이동
2. conf 폴더로 이동하여 httpd.conf 파일을 백업
3. 에디터(vi 등)를 사용하여 http.conf 파일 열기
4. mod_rewrite.so 모듈이 로드되었는지 확인(해당 모듈 주석 제거)
LoadModule rewrite_module modules/mod_rewrite.so
5. 파일 끝에 아래 내용을 추가
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
6. Apache 웹 서버 다시 시작 후 테스트(https로 Redirection 및 접근이 가능해야 함)
Nginx
nginx.conf 또는 default.conf 수정
1. Nginx 서버가 설치된 경로로 이동
2. nginx.conf 또는 default.conf 파일 백업
3. 아래 내용 추가
return 301 https://$server_name$requset_uri;
4. 파일 저장 후 Nginx 웹 서버 다시 시작
Cloud Flare
페이지 규칙 추가
1. 페이지 규칙 이동
2. "Create Page Rule" 클릭
3. URL을 입력(별표* 입력 시 모든 URI에 대하여 Redirection 발생)
4. "Add a Setting" 클릭 후 "Always Use HTTPS" 선택
5. "Save and Deploy" 클릭
콘텐츠에 대한 URI 접근 정책 및 설정으로 인해 문제 발생시 아래 가이드 참고
HSTS
HSTS(HTTP Strict Transport Security, RFC 6797)는 웹 사이트 접속 시, 서버가 클라이언트에게 HTTPS를 강제하도록 하는 기술이다. HSTS가 적용된 웹 사이트의 웹 서버는 클라이언트에게 HTTPS만을 사용할 수 있음을 알리고 HSTS를 지원하는 브라우저는 이를 해석하고 적용한다.
HSTS 적용
HSTS가 적용된 도메인은 사용자가 웹 서버에 최초 접속할 때 응답 헤더에 "Strict-Transport-Security"라는 헤더를 응답하고 HSTS를 지원하는 브라우저는 추후 접속부터는 HTTPS로만 접속한다.
서버측의 적용 조건은 아래와 같다.
- 유효한 인증서 제공
- 80 포트로 접근 시 HTTP에서 HTTPS로 Redirection
- 하위 도메인에 대하여 DNS 레코드가 있는 경우, 하위 도메인도 HTTPS를 지원할 것
- 기본 도메인에서 HSTS 헤더 제공
Strict-Transport-Security
브라우저가 HTTPS를 통해서만 해당 사이트에 접근해야 하는 시간을 기록
Strict-Transport-Security: max-age=<expire-time>
HSTS 규칙을 모든 하위 도메인에 적용
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Preload List 적용
Strict-Transport-Security: max-age=<expire-time>; preload
HSTS Preload List
HSTS가 적용된 웹 사이트의 명단을 모아둔 리스트로, Preload List에 포함된 사이트들은 해당 사이트에 처음 접속하는 브라우저라도, HTTPS로만 접속한다.
브라우저간 Preload List를 공유하며 Reference [2] 사이트를 통해 해당 사이트를 확인할 수 있다.
HSTS Preload List는 Reference [2]의 "Submission Requirements"를 만족하면 자동으로 등록된다.
HSTS 적용 확인
Chrome 브라우저에서는 방법을 통해 HSTS 적용 및 확인이 가능하다.
1. "http://facebook.com"에 접속
2. chrome://net-internals/#hsts 접속
3. "Query HSTS/PKP domain"에 facebook.com 입력 후 쿼리
웹 서버에 HSTS 적용하기
Nginx
1. nginx.conf 파일 백업
2. 에디터로 nginx.conf 열기
3. 아래 내용 추가
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
4. nignx 재시작
Apache
httpd.conf 파일 수정
1. Apache 서버가 설치된 경로로 이동
2. conf 폴더로 이동하여 httpd.conf 파일을 백업
3. 에디터(vi 등)를 사용하여 http.conf 파일 열기
4. mod_rewrite.so 모듈이 로드되었는지 확인(해당 모듈 주석 제거)
LoadModule headers_module modules/mod_headers.so
5. 파일 끝에 아래 내용을 추가
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;"
6. Apache 웹 서버 다시 시작 후 테스트(https로 Redirection 및 접근이 가능해야 함)
Reference
[1] https://geekflare.com/http-to-https-redirection/
[2] https://hstspreload.org/?domain=
[3] https://brunch.co.kr/@sangjinkang/40
[4] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
[5] https://datatracker.ietf.org/doc/html/rfc6797
[7] https://www.chromium.org/hsts/
'Security > Web' 카테고리의 다른 글
[Spring4Shell] CVE-2022-22965 (0) | 2022.05.02 |
---|---|
[vulnerability] File Upload (0) | 2022.04.25 |
[Exploit] 예제 코드 (0) | 2022.03.03 |
[Secure Coding] Prepared Statement 훑어보기 (1) | 2022.01.17 |
[vulnerability] Nginx alias traversal (0) | 2021.10.07 |