홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






>> 목록보이기
#X-Frame-Options #HTTP 헤더 #클릭재킹 #Clickjacking #조치방안 #HTML 삽입 방어

X-Frame-Options 헤더 설정방법

웹 어플리케이션에 HTML 삽입 취약점이 존재하면 공격자는 다른 서버에 위치한 페이지를 <frame>, <iframe>, <object> 등으로 삽입하여 다양한 공격에 사용할 수 있다. 피해자의 입장에서는 링크를 눌렀을 때 의도했던 것과는 다른 동작을 하게 한다하여 이를 클릭재킹(Clickjacking)이라 부른다. 웹 페이지를 공격에 필요한 형태로 조작하기 때문에 "사용자 인터페이스 덧씌우기"(User Interface redress) 공격이라고도 부른다.

이런 공격을 다른 웹 브라우저가 일부 해결해줄 수 있는 방안이 "X-Frame-Options:" 헤더이다. 2009년에 MS가 IE8에 도입한 이후로 대부분의 웹 브라우저가 채택하고 있다. 이 헤더의 값은 "DENY", "SAMEORGIN", "ALLOW-FROM origin"을 가질 수 있다.

  • DENY: "이 홈페이지는 다른 홈페이지에서 표시할 수 않음"
  • SAMEORIGIN: "이 홈페이지는 동일한 도메인의 페이지 내에서만 표시할 수 있음"
  • ALLOW-FROM origin: "이 홈페이지는 origin 도메인의 페이지에서 표함하는 것을 허용함"

<iframe>내에 표시되는 것을 허용하지 않을 경우에는 "DENY", 같은 누리집 내부에서만 허용할 경우에는 "SAMEORGIN", 일부 다른 사이트의 페이지내에서 표시되는 것을 허용해야 한다면 "ALLOW-FROM origin"을 사용할 수 있다. 다만 "ALLOW-FROM origin"의 경우에는 웹 브라우저에 따라서는 지원하지 않는 경우도 있다고 하니 주의하자.

X-Frame-Options 헤더는 나의 홈페이지가 다른 누리집의 <iframe>, <frame>, <object> 등에 숨겨져서 공격받을 가능성을 미연에 차단하기 위한 장치이다.

웹핵 누리집을 대상으로 X-Frame-Options에 선언에 따라 <iframe>에서 어떻게 작동하는 지 그 결과를 확인해볼 수 있다.

페이스북의 헤더를 살펴보자.

root@kali:~# curl -I https://www.facebook.com
HTTP/2 200 
p3p: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
strict-transport-security: max-age=15552000; preload
cache-control: private, no-cache, no-store, must-revalidate
expires: Sat, 01 Jan 2000 00:00:00 GMT
pragma: no-cache
public-key-pins-report-only: max-age=500; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E="; pin-sha256="q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ="; report-uri="http://reports.fb.com/hpkp/"
x-content-type-options: nosniff
x-xss-protection: 0
x-frame-options: DENY
set-cookie: fr=06lpEvSryMiOIOQc5..BYLb9D.yt.AAA.0.0.BYLb9D.AWUmvkmz; expires=Wed, 15-Feb-2017 14:31:31 GMT; Max-Age=7776000; path=/; domain=.facebook.com; httponly
vary: Accept-Encoding
content-type: text/html
x-fb-debug: Ol7ILtyq9sc3Yluqol3RzLvP22X4R1VdimEKVn++wdUlAPlXJ/dvJKPly3X26PprguY3uuNc6qlWTLherOfoKw==
date: Thu, 17 Nov 2016 14:31:31 GMT

root@kali:~#

페이스북은 "x-frame-options: DENY" 헤더를 설정하여 전송하는 것을 볼 수 있다. 페이스북은 <iframe>내에 출력되는 것을 허용하지 않는다.

웹취약점탐색기의 탐지 사례

nikto의 취약점탐지 결과

+ The anti-clickjacking X-Frame-Options header is not present.

owasp-zap의 취약점탐지 결과

OWASP-ZAP, X-Frame-Options  취약점 탐지
[ OWASP-ZAP에서 지적하는 X-Frame-Options 헤더 누락 ]

X-Frame-Options 설정 방법

해당하는 웹서버의 설정파일의 마지막에 다음과 같이 추가하고 웹서버를 다시 시작한다.

[Apache]

Header always append X-Frame-Options DENY

[Nginx]

add_header X-Frame-Options DENY;

[Java 어플리케이션]

response.addHeader("X-Frame-Options", "SAMEORIGIN");

[IIS - web.config]

<system.webServer>
  ...
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="DENY" />
    </customHeaders>
  </httpProtocol>
  ...
</system.webServer>

참고할만한 바깥고리

[처음 작성한 날: 2016.11.17]    [마지막으로 고친 날: 2016.11.21] 


< 이전 글 : 방화벽을 노리는 블랙너스(Black Nurse) DoS 공격 (2016.11.18)

> 다음 글 : X-Frame-Options헤더 시험 페이지 (2016.11.18)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문