Network/DVWA

Exercise 11. CSP Bypass

DominicS 2019. 8. 9. 01:14
Content-Security-Policy
  • 브라우저에 XSS와 관련된 공격을 막아주는 헤더이다. 
  • 기본적으로 브라우저는 요청하는 모든 코드를 실행하는데 CSP를 설정함으로써 제한적으로 실행시킬수 있다.
  • 다음 4개의 키워드를 선택 적용할 수 있다.
  1. 'none' 어떤 것도 허용 X
  2. 'self' 현재 출처에서는 허용 O , 하위 도메인에서는 허용 X
  3. 'unsafe-inline' 인라인 자바스크립트 <script> ...  </script>, 인라인 스타일 <style> ... </style> 허용
  4. 'unsafe-eval' eval과 같은 텍스트 - 자바 스크립트 메커니즘을 허용
  • 장단점이 있다. 보안에 강력하게 대응할 수 있지만 설정을 잘못하면 css, script 가 처리안되어 골치 아파진다..!

    • 모질라 개발자 사이트에 예시를 보면 다음과 같다.
    Content-Security-Policy: default-src 'self'
    하위 도메인의 리소스만 사용할 수 있게 한다.

    Content-Security-Policy: default-src 'self' *.mydomain.com
    특정 도메인만 신뢰한다.

    Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *
    특정 태그 계열만 허용한다.

    Content-Security-Policy: default-src https://onlinebanking.jumbobank.com
    특정 도메인만 무조건 SSL 통신하도록 한다.

    • CSP 헤더 내용으로 해당 웹사이트에서 사용 가능한 CSP 정책에 대해 브라우저에게 전달해주고, 브라우저는 이를 기반으로 웹 페이지 랜더링/처리를 수행하게 된다.
    • 헤더에서 사용되는 속성과 값에 대해 좀 더 정리하면 다음과 같다.
      • default-src : 모든 리소스에 대한 정책(아래 것들 다 포함)
      • script-src : Javascript 등 웹에서 실행 가능한 스크립트에 대한 정책
      • object-src : 플러그인, 오브젝트에 대한 정책
      • style-src : style, 즉 css에 대한 정책
      • img-src : 이미지
      • media-src : video, audio
      • frame-src : iframe, X-Frame 헤더랑은 비슷한 역할을 하지만, 약간 다르죠.
      • font-src : font
      • connect-src : script src로 불러올 수 있는 url에 대한 정책
      • form-action : form 태그 내 action 부분에 대한 정책
      • sandbox : HTML 샌드박스
      • script-nonce : 위에 script-src + 아래쪽에 none 이 포함되는 정책, 약간 강한..
      • plugin-types : 로드할 수 있는 플러그인 타입, 위에 object-src와 접점
      • reflected-xss : X-XSS-Protection header와 동일한 효과
      • * report-uri : 정책 위반 케이스가 나타났을 때 내용을 전달할 URL
    (출처 : HAHWUL님 블로그)


    DVWA 실습

    (Low)


    자 그럼 새로운 지식을 가지고 실습을 해보기로 했다.


    URL을 인클루드를 하라는 문제이다. 소스코드를 봐보자.


    이렇게 나와있다. CSP부분을 해석해 보자면 대충 이렇다.
    https://pastebin.com  example.com code.jquery.com https://ssl.google-analytics.com 이러한 URL에 대해 script 를 허용한다. 


    첫번째 https://pastebin.com 에 접속해보았다.  먼가 느낌이 오지 않는가? 



    음 그래도 처음 다뤄보니 좀 삽질좀 하다가 보니 이러한 결론을 내리게 되었다. 그리고 해당 소스코드를 순수하게 불러오기 위해 raw
    그리고 해당 URL을 include를 시켜줘 보았다. 


    결과는 성공!