보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

Secure Header를 이용한 브라우저 보안

2020.10.06

8,875


 

 

 

 

1. 개요

 

1990년 발명된 웹 브라우저(Web Browser)는 웹서버에서 이동하며(Navigate) 양방향으로 통신하고 HTML문서나 파일을 출력하는 그래픽 사용자 인터페이스를 기반으로 데스크톱, 모바일 등 다양한 HTTP 사용자 에이전트를 제공하는 환경을 의미한다. 

 

글로벌 시장조사업체 스탯카운터(StatCounter)의 ‘2020년 3월 전세계 브라우저 시장 점유율’에 따르면 65.99%가 크롬(Chrome)을 사용하여 대표 브라우저로 자리를 잡았고, 뒤를 이어 사파리(Safari), 파이어폭스(Firefox), 삼성 인터넷(Samsung Internet), 엣지(Edge), 오페라(Opera) 순으로 집계되고 있다. 이러한 통계를 보면, 전 세계적으로 상당수의 사용자가 데스크톱 환경에서는 크롬브라우저를 사용하고 있으며, 그 외 맥(Mac)사용자 위주의 사파리가 높은 수준의 점유율을 보이고 있음을 알 수 있다.

 

다른 관점인 플랫폼별 웹 사이트 이용 현황을 보면 전세계적으로 모바일에서 브라우저 이용율이 51.9%로 데스크톱에서 이용율인 45.4%를 넘어서고 있다. 모바일에서의 브라우저 점유율 또한 61.5%로 크롬이 가장 높았고 그 뒤를 사파리, 삼성 인터넷 순으로 이어가고 있으나, 국내에서는 크롬을 제외한 삼성 갤럭시 스마트폰의 이용자 영향으로 인해 삼성 갤럭시 스마트폰의 기본 브라우저인 삼성 인터넷이 26.8%로 2위로 차지하고 있었다. 

 

이처럼 브라우저의 종류와 접근환경에 따른 점유율로 공격위협의 상관관계가 형성됨에 따라 브라우저 기반의 사이버 공격도 함께 증가하고 있다. 또한 요즘 웹 사이트를 구축할 때에 서로 다른 개발사가 만든 웹 페이지와 스크립트로 구성하고, 제 3자의 소스코드를 조합하여 만든다는 특징 때문에 빠르고 편리하게 웹 서비스 구축이 가능하지만 보안관리에는 취약할 수밖에 없다.

이러한 이유들 때문에 다수의 브라우저 제조사에서는 HTTP 보안헤더(Security Header)를 통해서 웹 취약점의 보안을 강화하는 대응방안을 함께 제공하고 있다.

 

HTTP 헤더는 HTTP 프로토콜을 이용하여 요청/응답할 때 요청/응답 시간, 사용된 브라우저 등의 부가적인 정보가 담겨져 있고 인증, 캐싱, 제어, 쿠키, Connect, Secure 등 카테고리를 나눌 수 있는데 그 중 Secure의 헤더 일부를 [표 1]에 정리하였다. 이번 호에서는 암호화의 HSTS (HTTP Strict Transport Security)와 입력값 검증의 X-XSS-Protection, CSP의 상세 내용과 적용방식에 대해 알아보자.

 


[표 1] Secure Header 일부

 

02. HSTS(HTTP Strict Transport Security) 상세분석 

 

HTTPS는 암호화 통신을 지원하는 프로토콜 HTTPS(Hypertext Transfer Protocol Secure)로 데이터를 평문으로 전송하여 타 사용자에게 중요정보가 노출될 수 있는 HTTP 프로토콜의 단점을 보완한 암호화 전송 방식이다. 

암호화 통신 사용여부를 쉽게 구분하기 위해서 금융사이트에 접속하게 되면 자물쇠모양이 있는 것을 볼 수 있다. 금융사이트의 경우 주민등록번호와 같은 개인정보 또는 개인신용정보와 같은 사용자의 중요정보가 전송되기 때문에 암호화 통신을 사용하고 일반적인 페이퍼 사이트, 즉, 중요정보 데이터 전송이 이루어지지 않는 사이트의 경우 암호화 통신을 사용하지 않고 HTTP를 사용하여 단순하게 데이터를 전송한다.

 

그렇다면 데이터 전송 시 암호화 통신이 어떻게 이루어질까

암호화 통신에 대해 이야기를 나눌 때, SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 를 통해 암호화 통신을 한다 라는 이야기를 들어본 적이 있을 것이다.

SSL은 서버와 클라이언트 간의 연결에 보안을 제공하는 데 사용되고 아래 3가지 서비스를 제공한다는 특징이 있다. 

 

· 기밀성 – 데이터 전송 중 타 사용자가 정보를 가로챌 수 없거나, 알아볼 수 없도록 방지

· 무결성 - 데이터 전송 중 비의도적으로 수정 및 손상 방지

· 인증 - 중간자 공격으로부터 보호

 

TLS는 같은 서비스를 제공하고 SSL에서 발생하는 취약점을 보완한 후속 버전으로 출시된 것으로 현재는 SSL에 많은 버그가 존재하기 때문에 최신 TLS 버전 사용을 권고하고 있다.

 


[표 2] 암호화 통신

 

암호화 통신을 위해서는 SSL/TLS 인증서를 인증기관으로부터 발급받아 웹서버에 적용해야 한다. 암호화 통신 방식을 [그림 1]로 표현해보았다. 사이트는 사이트 정보와 공개키를 인증기관에 제공하여 인증기관에서 암호화된 인증서를 발급받아 적용하고, 웹 브라우저는 인증기관에게 인증기관 리스트와 각각의 공개키를 제공받는다. 

이로써, 웹 브라우저는 인증기관 리스트와 각각 공개키를 가지고 있고, 사이트에서는 비공개된 개인키를 가지고 있게 된다. 

사용자가 웹 브라우저를 통해 사이트에 접속하면 해당 사이트에서 인증서를 웹 브라우저에 전송하고 웹 브라우저는 가지고 있는 인증기관의 공개키로 인증서를 해독하여 신뢰된 사이트 인지 확인한 후 사이트 정보와 공개키를 알아낸다. 이렇게 얻어낸 사이트 공개키로 대칭키를 암호화해서 다시 사이트로 전송하고 사이트는 개인키로 해독하여 암호화된 데이터를 주고받을 수 있게 된다.

 

 

[그림 1] 암호화 통신 방식

 

하지만 이처럼 암호화 통신을 적용해도, 악의적인 사용자는 정보탈취 시도를 쉽게 포기하지는 않는다. 그 중에 한 예로, 암호화 통신을 사용함에도 불구하고 주소창에 있는 https:// 를 http:// 로 강제 적용하여 요청할 경우 http로 요청되어 데이터가 평문으로 전송되고 정보 탈취가 가능해진다.

 

일반적으로 HTTPS를 강제로 적용하게 될 때 서버측에서 HTTPS로 전환시켜 줄 수 있지만 이의 경우 클라이언트의 HTTP 요청이 그대로 받아들여져 공격벡터로 쓰일 수 있다는 단점이 있다.

  

[그림 2] 일반적인 https 강제적용 방식

 

이를 방지하기 위해 생겨난 보안헤더가 클라이언트에게 HTTPS를 강제로 사용하도록 설정해주는 HSTS(HTTP Strict Transport Security)이다. HSTS는 클라이언트에서 HTTP로 요청하더라도 서버에 전송되는 요청은 HTTPS로 전환되는 방법이다. 이는 서버로 가기 전, 클라이언트에서 시행되기 때문에 HTTP 연결 자체가 시도되지 않는다.

 


[그림 3] HSTS 동작 방식

 

HSTS는 [표3]에 정리된 바와 같이 지시자의 내용에 따라 값을 다르게 적용할 수 있고 [표4]처럼 서버, 웹서버, PHP 등에서 적용이 가능하다. 또한 hstspreload.org 라는 사이트에 접속하게 되면 내가 접속하고자 하는 사이트가 HSTS를 사용하는지 여부를 확인할 수 있다. 

 


[표 3] HSTS 지시자

 


[표 4] HSTS 적용 예시

 

아래 [그림 4]에서 실제 HSTS가 적용된 사이트를 살펴보면, 해당 사이트의 경우 HSTS의 특성처럼 HTTP로 강제접속을 시도할 경우 HTTPS로 리다이렉트 되게 하고, HSTS가 브라우저에 63072000초 동안 쓰이며, subdomain까지 확장시켜 사용하고 있는 것을 확인할 수 있다.

 



[그림 4] HSTS 적용 사이트

 

03. X-XSS-Protection  상세분석 

 

웹 해킹을 시작할 때 많이 접하게 되는 공격 중 하나로 XSS(Cross-Site Scripting)를 꼽을 수 있다. 웹 취약점 중 기초적인 취약점으로 XSS공격 종류 중 Reflected XSS 공격은 악의적인 사용자가 악성 스크립트가 포함된 URL을 사용자에게 전송하여 사용자의 접근으로 웹서버에 전달되고, 웹서버의 응답 페이지에 악성 스크립트가 삽입되어 사용자 정보를 탈취하거나, 웹 사이트가 비정상적인 동작을 할 수 있도록 한다.

 



[그림 5] Reflected XSS 공격 방식

 

일반적으로 XSS공격을 예방하기 위해서 많이 알려진 공격구문이나, 스크립트 언어로 쓰이는 <, >, “, 등 특수문자 필터링을 통해 방지하고 있다. 이번에 다뤄볼 내용은 브라우저 내에서 Reflected XSS 필터를 활성화 시킬 수 있는 X-XSS-Protection와 CSP(Content-Security-Policy) 이다.

 

X-XSS-Protection은 익스플로러, 사파리, 크롬 브라우저 등에서 해당 헤더를 지원한다. 아래 [표 5]와 같이 4개의 지시자가 존재하고 이를 이용하여 HTML을 통해 URL의 스크립트 태그와 일치하는 태그가 존재할 경우 페이지가 로드되지 않는 등 Reflected XSS 공격을 감지하거나, 페이지 로드를 중지시키는 기능을 제공한다. 

 


[표 5] X-XSS-Protection 지시자

 

해당 기능이 지원되는 브라우저에서 사용자가 직접 설정할 수도 있고, 웹 페이지 구축 시 PHP, 웹서버, 서버 등에서 적용이 가능하다. 아래 [표 6]은 각각의 대표적인 사례이다.

 


[표 6] X-XSS-Protection 적용 예시

 

[그림 6]에서 실제 적용된 사이트를 살펴보면, 해당 사이트의 경우 XSS 필터가 활성화 되어있고, 공격이 감지되었을 때 페이지 로드를 제한하게 설정되어 있는 것을 볼 수 있다.

 


[그림 6] X-XSS-Protection 적용사례

 

04. CSP(Contents-Security-Policy) 상세분석

 

CSP(content-security-policy)는 앞서 살펴본 XSS 필터인 X-XSS-Protection의 기능을 포함하여 다양한 웹 보안 정책을 가지고 있다. 주로 XSS와 Data injection, Click Jacking 등 웹 페이지에 악성 스크립트를 삽입하는 공격기법을 막기 위해 사용되고, 신뢰할 수 있는 콘텐츠 허용 목록을 지정하여 허용된 소스만 실행하거나 로드될 수 있도록 보호하는 기능이다.

 

[표 7]와, [표 8]에서 CSP의 많은 기능 중 많이 사용되는 일부 기능에 대한 지시자와 속성값을 볼 수 있는데 지시자로 어떤 부분에 정책을 설정할지 결정하고, 속성값에 따라 차단 범위를 지정할 수 있다.

 


[표 7] CSP 지시자 일부

 

 

[표 8] CSP 지시자 속성값

 

앞서 소개한 기능과 CSP의 차이점은 지시자 하나만 갖는 것이 아니라 지시자의 속성값에 따라 제한하는 범위가 달라진다. CSP는 서버, 웹서버, PHP 등에서 적용이 가능하고 아래는 각각의 대표적인 적용 방법을 나타낸다. HSTS와 마찬가지로, csp-evaluator.withgoogle.com 사이트에서 CSP가 적용되어 있는 사이트인지 확인할 수 있다.

 


[표 9] CSP 적용 예시

 

[그림 7]에서 실제 적용된 사이트를 살펴보면, 모든 컨텐츠의 소스는 자신의 도메인에서 가지고 오지만 이미지 태그와 같은 곳에 삽입되는 리소스는 허용하지만 스크립트가 삽입될 수 있는 script 태그는 허용된 도메인에서만 입력이 가능하도록 설정되어 있는 것을 확인할 수 있다.

 


[그림 7] CSP 적용사례

 

05. 마무리

 

접근성이 좋은 웹 브라우저의 특징으로 인해 오래 전부터 공격자들의 놀이터로 사용되어 온 웹은, 오픈소스, 상용소스, 라이브러리 등을 조합하여 웹 사이트를 구축하는 사례가 증가하면서 새로운 위협이 끊임없이 발생되고 있다. 이러한 새로운 위협이 발견되기 전에 기존의 위협에 대해 예방 및 대응방안이 여러방면으로 존재함에도 불구하고 웹 사이트를 운영하는 기업에서 비용 또는 서비스 특성문제로 인해 이를 접목시키지 않는 경우가 있다. 

 

하지만 앞서 소개된 내용은 지원되는 브라우저에서 보안헤더로 보호한다는 특징이 있다. 웹 사이트를 운영하고 있는 기업들에서 이를 이용한다면 완벽한 보안이 이루어진다 말할 수 없지만 고민을 조금이나마 덜어낼 수 있을 것이라 생각된다.

또한, 이번 코로나19로 인하여 원격교육, 근무, 이커머스 등 비대면 서비스 이용이 확산됨에 따라 웹 사이트를 구축하여 사용하고 있는 기업들은 사용자들이 어떤 브라우저를 많이 사용하는지, 브라우저 보안 방안은 어떠한 것들이 존재하는지 관심을 가지고 지켜봐야 할 것이다. 

추가로 브라우저 제조사에서는 X-XSS-Protection과 CSP와 같이 비슷한 공격 방지를 위해 여러가지 방법을 강구하고, 파이어폭스 제조사인 모질라(Mozila)에서 보안 방안에 대해 끊임없이 안내하듯이 새로운 보안 방안에 대해 지속적으로 모색해나가야 한다.

 

06. 참고자료

 

[1] 웹 브라우저 시장 점유율 현황

https://presscat.co.kr/blog/browser-market-share-mar2020/

[2] HTTP headers

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

[3] HSTS(HTTP Strict Transport Security) 개념과 설정

https://rsec.kr/?p=315

[4] HTTP와 HTTPS의 차이점 그리고 동작 방식

https://devdy.tistory.com/14

[5] X-XSS-Protection

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-XSS-Protection

[6] 콘텐츠 보안 정책(CSP)

https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP