#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> 에서 어떻게 작동하는 지 그 결과를 확인해볼 수 있다.
페이스북의 헤더를 살펴보자.
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 헤더 누락 ]
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으로 연락주시기 바랍니다.
|