ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02-02. Client Side Attack 중급 - Content Security Policy(CSP) Bypass
    해킹/웹해킹 이론 2023. 11. 24. 01:18

    Content Security Policy(CSP)

    Content Security Policy(CSP, 컨텐츠 보안 정책)는 웹 페이지에 사용될 수 있는 자원의 위치, 출처 등에 제약을 걸어 공격자가 삽입하거나 요청을 보내지 못하도록 막을 수 있다.

    CSP는 HTTP의 헤더로 정의하거나 meta tag의 element로도 정의 할 수 있다.

    CSP의 기본정책

    • Inline Code 사용 금지
      • src 속성을 제외한 on* 이벤트 핸들러, javascript: URL 스킴 또한 허용하지 않는다.
    • Eval(new Function(), setTimeOut(), setInterval()
      • 문자열 텍스트를 코드 형태로 변환하는 함수를 허용하지 않음 / 인라인 함수 형태의 파라미터는 허용
      • setTimeout("alert(1)", ...)  - 불가
      • setTimeout(function(){alert(1)}, ...) - 허용 

    Policy Directive

    <directive(지시문)> <value(값)> 형태로 구성된다. directive는 어떤 리소스인지를 정의하고 value는 어떤 출처를 허용할지 정의한다.

    directive description
    default-src -src로 끝나는 모든 지시문의 기본 동작을 제어합니다. 만약 CSP 구문 내에서 지정하지 않은 지시문이 존재한다면 default-src의 정의를 따라갑니다.
    img-src 이미지를 로드할 수 있는 출처를 제어합니다.
    script-src 스크립트 태그 관련 권한과 출처를 제어합니다.
    style-src 스타일시트 관련 권한과 출처를 제어합니다.
    child-src 페이지 내에 삽입된 프레임 컨텐츠에 대한 출처를 제어합니다.
    base-uri 페이지의 <base> 태그에 나타날 수 있는 URL을 제어합니다.
    value description
    *://example.com 출처의 scheme은 와일드카드를 이용해 표현할 수 있습니다.
    https://*.example.com 출처의 호스트 서브도메인은 와일드카드를 이용해 표현할 수 있습니다. (단, 와일드카드는 호스트의 중간에 들어갈 수 없습니다. i.e) https://www.*.com, https://*.example.*
    또한 서브도메인을 와일드카드로 표현할 시, 서브도메인이 붙어있지 않는 도메인은 포함되지 않습니다. i.e) https://*.example.com으로 출처를 표기할 경우, https://example.com은 포함 안됨
    https://example.com:* 출처의 포트는 와일드카드를 이용해 표현할 수 있습니다.
    none 모든 출처를 허용하지 않습니다.
    self 페이지의 현재 출처 (Same Origin) 내에서 로드하는 리소스만 허용합니다.
    unsafe-inline 예외적으로 인라인 코드의 사용을 허용합니다.
    unsafe-eval 예외적으로 eval 과 같은 텍스트-자바스크립트 변환 메커니즘의 사용을 허용합니다.
    nonce-<base64-value> nonce 속성을 설정하여 예외적으로 인라인 코드를 사용합니다. <base64-value>는 반드시 요청마다 다른 난수 값으로 설정해야 합니다. 해당 출처를 설정하면 unsafe-inline 은 무시됩니다.
    <hash-algorithm>-<base64-value> script 혹은 style 태그 내 코드의 해시를 표현합니다. 해당 출처를 설정하면 unsafe-inline은 무시됩니다.

    CSP 우회

    • 신뢰하는 도메인에 업로드
      • self만 허용할 때 해당 출처가 파일 업로드 혹은 다운로드 기능을 제공한다면 script태그의 src로 자원을 포함시킬 수 있다.
    • JSONP API
      • CSP에서 허용한 출처가 JSONP API를 지원한다면, callback 파라미터에 원하는 스크립트를 삽입하여 공격이 가능합니다.
        • https://accounts.google.com/o/oauth2/revoke?callback=alert(1);
    • nonce 예측 가능
      • nonce가 난수가 아니거나 갱신하는 기준이 길다면 매번 같은 nonce가 발생해 취득해 스크립트를 삽입 할 수 있다.
    • base-uri 미지정(Nonce Retargeting)
      • HTML 하이퍼링크는 호스트 주소가 따로 지정되지 않으면 현재 문서를 기준으로 해석한다.
      • <base> 로 바꾼 뒤에 오는 하이퍼링크 태그들 (<a>, <form>)등은 uri를 기준으로 주솟값이 계산돼어 접속한다.

    댓글

Designed by Tistory.