WordPress 시스템이 XSS 공격으로부터 보호되는지 확인하는 방법

게시 됨: 2016-07-09

전 세계적으로 모든 웹 사이트의 거의 48%가 XSS(교차 사이트 스크립팅)에 취약합니다. 전 세계적으로 모든 웹사이트의 거의 정확히 25%가 WordPress 플랫폼을 사용합니다.

따라서 XSS에 취약한 웹 사이트와 WordPress 플랫폼을 실행하는 웹 사이트의 벤 다이어그램에서 중첩이 상당히 커야 합니다.

이것은 플랫폼 자체에 대한 노크가 아닙니다. WordPress 팀은 보안을 사명 선언문의 필수적인 부분으로 만들고 취약점이 알려질 때마다 공격적으로 패치합니다. 그러나 이것이 사람들이 안전하지 않은 테마를 코딩하거나 안전하지 않은 플러그인을 설치하는 것을 막지는 못합니다. 이러한 문제는 WordPress 사이트에 대한 XSS 공격의 두 가지 주요 진입로이며 이 기사에서는 이를 차단하는 방법에 대해 설명합니다.

사이트 간 스크립팅 소개

먼저 XSS 공격이 수행되는 방식에 대해 설명합니다. XSS 공격에는 두 가지 유형 이상이 있으므로 단순화된 정의부터 시작하겠습니다. 일반적으로 XSS 공격은 댓글 양식, 댓글 상자, 검색 창 등과 같은 정제되지 않은 입력으로 시작됩니다. 이러한 공격은 정교함에 따라 매우 다양합니다. 사실, XSS 공격의 가장 단순한 형태는 WordPress 사용자가 매일 볼 수 있는 스팸 댓글입니다. 제가 무슨 말을 하는지 아실 겁니다. “ 훌륭한 기사 감사합니다. 그건 그렇고, 여기 내가 집에서 일하면서 일주일에 5,000달러를 버는 사이트가 있습니다: www.only-an-idiot-would-click-this-link.co.uk. "

어떤 면에서 스팸 댓글은 XSS 공격의 완벽한 예입니다. 악의적인 엔티티는 사이트의 인프라(댓글 상자)를 파괴하여 해당 콘텐츠(악성 링크)를 사이트에 배치합니다. 이것은 좋은 예시이지만, 보다 현실적인 XSS 공격은 훨씬 더 미묘할 것입니다. 스팸 댓글은 작성하는 데 약 5초가 걸립니다. XSS 공격은 적절한 해커가 좀 더 많은 시간을 할애하는 것입니다.

spam as visitor comments

진정한 검은 모자는 기본적으로 미니어처 텍스트 편집기로 사용하여 서버에 데이터를 제출하는 사이트의 모든 측면을 활용하려고 합니다. 입력이 보호되지 않는 경우 입력이 말 그대로 코드를 가져와 애플리케이션이 이를 실행하고 사용자의 브라우저에서 렌더링하도록 할 수 있음을 의미합니다(여기에는 브라우저가 포함될 수 있음). 스팸 댓글과 달리 사이트의 수정된 코드를 자세히 조사하거나 웹사이트 상호 작용을 통해 검색하면 위반 사항이 드러날 수 있습니다. 상상할 수 있듯이 그러한 위반으로 인해 발생할 수 있는 불미스러운 일의 수는 끝이 없습니다.

단순 기물 파손은 XSS 공격의 비교적 일반적인 결과로, 콘텐츠 대신 기괴한 이미지나 정치적 선전이 사용자에게 표시됩니다. 장기 계획이나 윤리적 문제가 거의 없는 마케팅 담당자는 이를 사용하여 사람들에게 자신의 의지에 반하는 광고를 할 것입니다. 보다 미묘하고 교묘한 공격은 사용자의 로그인 자격 증명을 도용할 수 있습니다. 그들 중 하나에 관리자 권한이 있는 경우 사이트에 저장한 모든 개인 정보가 공개될 수 있습니다. 또는 초기 XSS 공격을 레버로 사용하여 사이트를 열어 더 고급 맬웨어를 설치할 수 있습니다.

공격 중지

코드에 정통하고 비교적 소규모 WordPress 사이트의 단독 소유자인 경우 보안 코딩 방식이 사이트 간 스크립팅 공격으로부터 사이트를 잠그는 가장 좋은 방법이 될 것입니다. 더 복잡한 응용 프로그램을 실행하는 대규모 조직의 일부인 경우 악의적인 공격자가 코드를 삽입할 수 있는 모든 영역을 찾는 것이 인간적으로 불가능할 수 있기 때문에 이 경고를 포함합니다. 최신 웹 사이트는 규모가 클 수 있으므로 노련한 전문가를 고용하고 독자에게 더 나은 웹 사이트를 만들기 위해 다른 일에 시간을 할애해야 할 수도 있습니다.

또 다른 경고는 귀하가 특별히 코드에 정통하지 않고 다른 사람이 귀하를 대신하여 귀하의 사이트를 구축하도록 하는 경우 그들이 보안 코딩 관행을 사용했다고 가정하지 말라는 것입니다. 가장 숙련된 개발자라도 다른 사람이 작업을 확인하지 않고 보안을 방치하거나 사소한 오류를 범하는 것으로 알려져 있습니다. 그들 자신을 위한 시간(전문성이 부족함에도 불구하고). 요약하면, 웹사이트를 개발하고 보호하는 데 있어 한 치의 망설임도 없는 저명한 전문가를 고용해야 합니다.

이러한 우려가 표명되는 가운데 사이트 간 스크립팅을 방지하기 위해 가장 먼저 할 수 있는 일 중 하나는 사용자 데이터의 유효성을 검사하는 것입니다.

사이트에 가입 양식이 있고 해당 양식에서 사용자에게 이름을 입력하도록 요청한다고 가정해 보겠습니다. 악의적인 사용자는 대신 다음과 같이 입력할 수 있습니다.

[xhtml]
<script>CoughUpYourPreciousData();</script>
[/xhtml]

예를 들어, 이로 인해 해당 페이지를 방문하는 다음 사람이 자신의 쿠키 복사본을 공격자에게 보낼 수 있습니다.

이 예에서 위의 코드 문자열은 누군가의 이름처럼 보이지 않습니다. 서버는 이것을 알지 못하지만 몇 가지 설정 매개변수를 사용하여 가르칠 수 있습니다. 예를 들어, <>, () 및 ;과 같은 특수 문자를 거부하도록 해당 필드에 지시할 수 있습니다. (주석 섹션에서는 특별히 필요하지 않습니다). 그 필드에 사람의 이름에 숫자가 없을 수도 있음을 알 수 있습니다. 좀 더 엄격하게 처리하려면 해당 필드에 15자 이상의 입력을 거부하도록 지시할 수 있습니다(또는 원하는 대로 값을 변경할 수 있음). 이러한 조치를 취하면 공격자가 특정 필드에서 할 수 있는 피해량이 크게 제한됩니다.

Stopping Attacks

데이터 유효성 검사를 사용하더라도 연락처 양식이나 의견 필드와 같이 사용 중인 문자 유형을 현실적으로 제한할 수 없는 양식이나 필드가 있을 수 있습니다. 당신이 할 수 있는 일은 데이터를 삭제하는 것입니다. 이 프로세스는 HTML이 주어진 필드에서 실행되는 것을 불가능하게 하여 실행 가능한 코드의 일부로 인식될 수 있는 모든 것을 비코딩 문자로 변환합니다. 예를 들어 하이퍼링크가 있을 수 있는 곳에는 하이퍼링크가 표시되지 않습니다.

마지막으로 사이트에 사용자에게 안전하지 않은 데이터가 표시되는 경우가 있습니다. 누군가 귀하의 페이지 중 하나에 악의적인 댓글을 작성했다고 가정해 보겠습니다. 사용자 중 한 명이 검색을 수행할 때마다 해당 브라우저가 검색 결과를 로드할 때 해당 악성 코드가 실행됩니다. 이는 데이터를 이스케이프 처리하여 방지하므로 사이트에서 사용자에게 데이터를 전달할 때 실행하려는 코드만 실행되도록 합니다.

데이터 유효성 검사, 데이터 삭제 및 데이터 이스케이프에 대한 자세한 내용은 WordPress Codex에 훌륭한 리소스가 있습니다. 위의 개념을 자세히 설명하고 보편적으로 적용할 수 있는 더 많은 예를 제공합니다.

기타 방법

대기업에는 더 큰 웹사이트가 있습니다. 이것은 사실이다. 아마도 수천 명의 사람들이 하루에 귀하의 사이트를 사용합니다. 표준 양식과 필드 대신에 애니메이션, 다양한 포털, Java로 작성된 부분 등이 있을 수도 있습니다. 이 모든 것을 추적하더라도 애플리케이션 중 하나에 제로 데이가 있고 자신을 방어할 방법이 없을 수 있습니다.

이와 같은 상황에서 그렇게 할 영향력과 예산이 있다면 WAF(웹 응용 프로그램 방화벽)에 투자하는 것이 좋습니다. 좋은 WAF에는 코드 삽입 공격과 가장 일반적으로 관련된 HTML 문자열을 자동으로 식별하고 차단하는 상관 관계 규칙이 있습니다. 또한 애플리케이션에서 데이터 유출이 예상되지 않거나 비정상적인 양으로 유출되기 시작할 때 이를 알려 제로 데이 공격 및 기타 지능형 위협으로부터 방어하는 데 도움이 됩니다. WAF는 만병통치약은 아니지만 복잡한 애플리케이션을 보호하고자 하는 보안 전문가와 웹사이트 소유자에게 매우 유용한 도구입니다.

XSS 공격을 방어하기 위한 플러그인도 많이 있습니다. 저는 사실 이것들을 추천하지 않습니다. 이러한 플러그인 중 상당수는 위험을 줄이는 대신 해커가 악용할 수 있는 또 다른 공격 표면일 뿐입니다. 가장 잘 알려지고 널리 사용되는 보안 플러그인 중 하나인 Akismet도 작년에 XSS 공격에 취약한 것으로 밝혀졌습니다. XSS 공격을 방어할 때 반쪽 측정에 의존하지 마십시오. 웹사이트를 안전하게 유지하기 위해 필요한 기술을 개발하고 적절한 도구 세트를 사용하십시오.

기타 실제 적용

이 정보는 초심자에게는 다소 복잡할 수 있지만 사람들이 이 정보의 잠재적 복잡성으로 인해 낙담하는 것을 싫어합니다. XSS 공격이 발생하면 이러한 이벤트의 여파로 정리하는 것이 웹 사이트에서 변경하는 것보다 훨씬 더 복잡할 것입니다. 귀하의 웹사이트에 대한 평판 비용을 정리하는 것(일반 독자는 귀하의 웹사이트를 아주 쉽게 떠날 것입니다)은 걱정할 필요가 없는 추가적인 문제가 될 것입니다.

다른 사람이 웹사이트 개발 및 보안을 처리하도록 하는 경우에도 최소한 비상 상황에 대응하고 약점이 어디에 있는지 알 수 있도록 최선을 다하십시오. 시스템을 확인하는 방법을 아는 것은 장기적으로 중요한 기술이 될 것이며 다른 보안 주제 및 웹 사이트 개발 프로젝트의 기초가 될 것입니다. 모든 것이 온라인으로 상호 연결되어 있으며 XSS 공격은 지난 몇 년 동안의 일일 수 있지만(그러나 그럴 가능성은 거의 없음) 웹 사이트의 안팎이 구식이 아니라는 사실을 알고 있습니다.

마지막 생각들

인터넷 보안 환경은 끊임없이 변화합니다. XSS 공격이 어떻게 나타날지 또는 어떻게 그것이 당신에게 불리하게 활용될지 완전히 확신할 수는 없지만, 당신은 당신 자신과 독자들에게 당신이 그들을 막기 위해 당신이 할 수 있는 모든 일을 하고 있는지 확인해야 합니다. 이 위협에 대해 계속 알리고 사이버 보안 세계의 관련 개발 사항을 정기적으로 확인하십시오(최소한 매월 권장).

이것은 또한 다른 위협을 무시할 수 있다는 것을 의미하지 않습니다. 공용 네트워크 액세스는 여전히 안전한 VPN 사용이 필요합니다. 웹사이트에 액세스하는 데 사용하는 컴퓨터의 보안을 무시할 수 없습니다. 로그인 정보는 여전히 자주 변경해야 하며 무차별 대입 공격으로부터 안전합니다. XSS 공격은 잔인하지만 조심해야 할 유일한 위협은 아닙니다.

또한 이러한 유형의 공격에 대한 저항을 확산하기 위해 이 정보(또는 이 기사)를 동료 및 이해 관계자와 공유해야 할 수도 있습니다. 혼자서는 너무 많은 일을 할 수 없을 수도 있지만 충분한 사람들이 스스로를 적절하게 보호하고 있다면 해커가 가난한 인터넷 사용자로부터 이익을 얻을 다른 방법을 알아내려고 시도함에 따라 이러한 유형의 공격이 전반적으로 감소하는 것을 볼 수 있습니다.

XSS 공격을 확인하고 향후 XSS 공격으로부터 자신을 방어하는 방법에 대해 스스로 생각하고 있습니까? 이 위협에 맞서기 위해 사용하는 다른 탐지 및 제거 전략이 있습니까? 동료 독자들에게 추천하고 싶은 도구가 있습니까? 그렇다면 아래에 의견을 남기고 동료 독자들과 이 중요한 대화를 계속하십시오.