티스토리 뷰

Web/Concept

[Concept] CSP (feat. dreamhack)

ch4njun 2020. 9. 17. 19:04
반응형
CSP?
Content-Security-Policy의 약자로,
XSS 공격이 발생했을 때 그 피해를 줄이고 공격시도를 보고받을 수 있다.
공격자가 Web 사이트에 허용되지 않은 Script를 삽입하거나 공격자의 외부 페이지(Server)에
HTTP Request를 보내는 것을 막을 수 있도록 Response Header에 추가하는 정책이다.

 

만약 페이지가 PHP나 Python, CGI 등 동적 기능을 사용하지 않는 정적인 웹 페이지라면 CSP 정책을 HTML <meta> 태그로도 지정할 수 있습니다. 이는 바뀌지 않는 자원들을 별도의 HTTP 서버 설정 없이 HTML 페이지 내에서 지정할 수 있도록 합니다. 

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; base-uri 'none'">

 

<host-source> 호스트와 포트번호로 허용여부를 결정한다. (ex: *.dreamhack.io:443)
<scheme-source> URL scheme로 허용여부를 결정한다. (ex: http:, data: ...)
'self' 같은 Origin에 있는 자원만 허용한다.
'unsafe-eval' eval() 등의 안전하지 않은 함수를 허용한다.
'unsafe-inline' 유효한 nonce나 Hash가 정해지지 않은 <script>, javascript:, URL 등을 허용한다.
'none' 어떤 Origin도 허용하지 않는다.
nonce-________________ 문자열로 지정된 nonce가 지정된 것만 허용한다. (자료에선 Base64라는데 그냥 문자열도되는듯)
<hashalg>-<base64> Base64로 지정된 해쉬값을 사용해서 추후 로드되는 자원에 해쉬와 비교해 동일하면 허용한다.
(개발자도구 Console의 Log로 확인이 가능하다. - 막혔을 경우 해쉬값이 뜬다.)

nonce가 있어도 이 부분을 CSP로 정책으로 추가하면 허용이 가능하다.

 

위와 같은 출처들을 아래 디렉티브에 적용해 CSP 정책을 완성 시키게 된다. 다양한 종류의 디렉티브가 존재하지만 대표적인 것만 살펴보면 아래와 같다. 여러 디렉티브에 대한 정책을 설정하기 위해서는 세미콜론(;)로 구분해 설정하면 된다.

 

default-src 다른 디렉티브가 없을 때 사용되는 디렉티브이다. 추가적으로 다른 디렉티브에 대한 정책이 설정되면 동작하지 않는다.
script-src Javascript에 대한 검증된 출처를 지정하기 위해 사용된다.
base-uri 문서의 요소에서 사용할 수 있는 URL을 정의한다. 해당 값이 정의되지 않으면 모든 URI를 사용할 수 있다.
img-src 유효한 image와 favicons를 검증하기 위해 사용된다.

 

더 다양한 디렉티브 등 CSP에 대한 정보는 아래 사이트에서 확인할 수 있다.

developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/base-uri

 

CSP: base-uri

The HTTP Content-Security-Policy base-uri directive restricts the URLs which can be used in a document's base element. If this value is absent, then any URI is allowed. If this directive is absent, the user agent will use the value in the base element.

developer.mozilla.org

 

 

nonce값은 공격자가 예측할 수 없도록 페이지 접근시마다 재생성 해야 한다.

nonce값을 예측할 수 있다면 공격자가 원하는 Script를 추가해 동작할 수 있기 때문이다. HTTP Header 또는 <meta> 태그에 nonce값이 Cashing 될 경우 공격자가 이를 파악해 공격에 사용할 수 있다.

또한 base-uri를 미지정하는 것은 위험하다. 이유는................................................................................
반드시 base-uri none; 을 추가해주도록 하자! 

 

 


 

CSP 정책에 의해서 사용할 수 없는 Script가 있다면 위와같이 개발자도구 Console에 에러가 나오게되고 보는바와 같이 해쉬값이 뿌려지게 된다. 이걸 임의로 CSP에 넣을 수 있다면...? 공격가능!

반응형

'Web > Concept' 카테고리의 다른 글

[Concept] SQL Injection (feat. dreamhack)  (0) 2020.09.21
[Concept] CSRF (feat. dreamhack)  (0) 2020.09.17
[Concept] XSS (feat. dreamhack)  (0) 2020.09.17
[Concept] Tunneling  (0) 2019.09.16
[Concept] Port Forwarding  (0) 2019.09.16
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함