WordPress 설치의 상위 5가지 보안 허점

워드프레스 설치는 보안 수준을 사용자가 직접 결정할 수 있습니다. 여기서는 보안을 위해 반드시 알아야 할 5가지 핵심 사항을 살펴보겠습니다.

워드프레스 보안에 대한 우려와 논쟁은 결코 새로운 것이 아닙니다.

만약 여러분이 콘텐츠 관리 시스템(CMS)이 필요해서 워드프레스를 사용하지 않는 서비스 제공업체에 문의했다면, “보안”은 가장 흔하게 듣게 되는 불만일 것입니다. 그렇다면 모든 사람이 워드프레스를 버리고 정적 사이트 생성기나 헤드리스 CMS로 옮겨야 할까요?

아닙니다. 세상의 모든 진리처럼, 이 문제에도 여러 측면이 존재하기 때문입니다.

워드프레스는 정말로 보안에 취약할까요?

워드프레스로 구축된 대규모 웹사이트들을 예시로 들어보겠습니다.

  • 테크크런치
  • 더 뉴요커
  • BBC 아메리카
  • 블룸버그
  • MTV 뉴스
  • 플레이스테이션 블로그

막대한 자금과 인력을 보유한 이 회사들이 왜 워드프레스를 포기하지 않는 것일까요? 만약 그 이유가 기존 코드 때문이라고 생각한다면 다시 생각해 보십시오. 이 정도 규모의 회사들에게는 데이터 보안과 브랜드 이미지가 20만 달러(추정치) 미만이 드는 간단한 마이그레이션보다 훨씬 더 중요합니다.

확실히 그들의 엔지니어들은 워드프레스에 근본적이거나 해결 불가능한 보안 문제가 없다는 것을 알고 있을 것입니다.

저 역시 한 달에 350만에서 400만 명이 방문하는 워드프레스 사이트를 운영하고 있습니다. 지난 8년 동안 발생한 보안 침해 사고는 단 한 건도 없었습니다!

그렇다면 워드프레스는 안전한가요?

제가 어리석은 질문을 하는 것처럼 보일 수도 있지만, 제 답변은 “경우에 따라 다르다”입니다.

그 이유는 세상의 모든 진리처럼 이 문제도 복잡하기 때문입니다. 올바른 답을 얻으려면 워드프레스(또는 다른 기성 CMS)가 단순히 어디에나 붙여놓고 끝낼 수 있는 찬장과 다르다는 것을 먼저 이해해야 합니다.

워드프레스는 수많은 종속성을 가진 복잡한 소프트웨어입니다.

  • PHP: 워드프레스 구축에 사용된 언어
  • 설치를 호스팅하는 공개 시스템
  • 방문자를 처리하는 데 사용되는 웹 서버(Apache, Nginx 등)
  • 사용되는 데이터베이스(MySQL/MariaDB)
  • 테마(PHP, CSS 및 JS 파일 묶음)
  • 플러그인(PHP, CSS 및 JS 파일 묶음)
  • 설치 목적에 따라 더 많은 구성 요소

즉, 이러한 연결 지점 중 하나에서 보안 문제가 발생하면 워드프레스 문제로 귀결됩니다.

서버의 루트 비밀번호가 ‘admin123’이고 해킹당했다면, 그것이 워드프레스 보안 결함일까요?

PHP 버전의 보안 취약점, 구매해서 설치한 플러그인의 보안 허점 등등, 요약하자면 하위 시스템의 실패가 워드프레스 보안 실패로 이어지는 것입니다.

오해하지 마십시오. 그렇다고 해서 PHP, MySQL, Apache가 안전하지 않다는 의미는 아닙니다. 모든 소프트웨어에는 취약점이 있으며, 오픈 소스의 경우에는 그 수가 매우 많습니다(누구나 보고 분석할 수 있으므로).

누군가 ‘보안’이라고 말했나요? 😛

이 모든 것을 통해 우리가 배울 수 있는 것은 다음과 같습니다.

그 자체로 안전하거나 안전하지 않은 것은 없습니다. 보안은 다양한 요소들이 연결되어 형성되는 사슬과 같습니다. 그리고 사슬은 가장 약한 고리만큼 강합니다. 역사적으로 워드프레스가 ‘안전하지 않다’는 평판을 얻은 것은 구형 PHP 버전, 공유 호스팅, 신뢰할 수 없는 플러그인/테마의 조합 때문이었습니다.

동시에, 흔한 실수들 때문에 워드프레스 사이트가 악의적인 공격에 취약해질 수 있습니다. 이것이 바로 이 글의 주제입니다. 더 이상 고민하지 않고 바로 시작하겠습니다.

해커들이 악용할 수 있는 주요 워드프레스 취약점

워드프레스 테이블 접두사

워드프레스의 유명한 5분 설치는 편리하지만, 모든 설치 마법사와 마찬가지로 우리를 게으르게 만들고 모든 설정을 기본값으로 유지하게 만듭니다.

기본적으로 워드프레스 테이블 접두사는 ‘wp_’이며, 이는 누구나 쉽게 추측할 수 있는 테이블 이름이 됩니다.

  • wp_users
  • wp_options
  • wp_posts

이제 악의적인 데이터베이스 쿼리가 워드프레스 내부에서 실행되는 SQL 인젝션 공격을 생각해 봅시다(참고: 이것은 워드프레스/PHP만의 공격이 아닙니다).

워드프레스에는 이러한 유형의 공격을 처리하는 메커니즘이 내장되어 있지만, 누구도 100% 안전하다고 보장할 수는 없습니다.

어떤 방식으로든 공격자가 ‘DROP TABLE wp_users;’ 또는 ‘DROP TABLE wp_posts;’와 같은 쿼리를 실행할 수 있다면 모든 계정, 프로필 및 게시물은 즉시 삭제됩니다(백업이 없는 경우, 최신 백업 이후 데이터는 영원히 사라집니다).

설치 시 접두사를 변경하는 것은 매우 간단합니다.

예를 들어 ‘sdg21g34_’와 같이 무작위로 생성된 접두사를 사용하는 것이 권장됩니다. 길면 길수록 좋습니다. 가장 좋은 점은 이 접두사를 기억할 필요가 없다는 것입니다. 워드프레스가 알아서 저장하기 때문입니다(기본 ‘wp_’ 접두사를 신경 쓰지 않는 것과 같습니다!).

기본 로그인 URL

웹사이트가 워드프레스로 운영되는지 어떻게 알 수 있을까요? 가장 대표적인 징후 중 하나는 웹사이트 주소에 ‘/wp-login.php’를 추가하면 워드프레스 로그인 페이지가 나타난다는 것입니다.

예를 들어 제 웹사이트(http://ankushthakur.com)를 봅시다. 워드프레스 사이트일까요? 직접 로그인 주소를 추가해 보세요. 귀찮다면 바로 보여드리겠습니다.

¯_(ツ)_/¯

네, 워드프레스 사이트입니다.

이렇게 널리 알려져 있다는 것은 공격자들에게는 매우 좋은 소식입니다. 그들은 이제 손을 비비며 다양한 공격을 시도할 수 있습니다.

해결책은 기본 로그인 URL을 변경하고 신뢰할 수 있는 사람에게만 공개하는 것입니다.

예를 들어, 이 웹사이트도 워드프레스로 운영되지만, http://koreantech.org.com/wp-login.php를 방문하면 실망만 할 것입니다. 로그인 URL은 숨겨져 있고, 관리자만 알고 있습니다.

로그인 URL을 변경하는 것은 어려운 일이 아닙니다. 이 플러그인을 사용하면 됩니다.

축하합니다! 무차별 대입 공격을 막는 또 다른 보안 장벽을 구축했습니다.

PHP 및 웹 서버 버전

우리는 이미 소프트웨어의 모든 부분이 악용되기를 기다리는 버그로 가득 차 있다는 것을 이야기했습니다.

PHP도 예외는 아닙니다.

최신 버전의 PHP를 사용하고 있더라도 어떤 취약점이 있는지 확신할 수 없으며, 밤사이에 새로운 취약점이 발견될 수도 있습니다. 해결책은 웹 서버가 브라우저에 보내는 특정 헤더, 즉 ‘x-powered-by’를 숨기는 것입니다(헤더에 대해 들어본 적이 없다면 이 글을 읽어보세요!).

즐겨 사용하는 브라우저의 개발자 도구를 확인하면 다음과 같은 정보를 볼 수 있습니다.

여기에서 이 웹사이트는 Apache 2.4에서 실행되고 있으며 PHP 버전 5.4.16을 사용하고 있다는 것을 알 수 있습니다.

우리는 이미 너무 많은 정보를 공격자에게 제공하여 그들이 공격 범위를 좁힐 수 있도록 돕고 있습니다.

이러한 (그리고 유사한) 헤더를 숨겨야 합니다.

다행히 간단하게 처리할 수 있습니다. 불행히도 시스템 내부를 수정해야 하므로 고급 기술 지식이 필요합니다. 따라서 웹사이트 호스팅 제공업체에 이 작업을 요청하는 것이 좋습니다. 컨설턴트가 이 작업을 할 수 있는지 여부는 웹사이트 호스트에 달려 있습니다.

만약 불가능하다면 호스팅 업체를 바꾸거나 VPS로 이전하고 보안 및 관리 전문가를 고용해야 할 수도 있습니다.

이 모든 것이 그만한 가치가 있을까요? 그것은 여러분이 결정해야 할 문제입니다. 🙂

아, 보안 헤더를 무시하고 싶다면 이 해결책이 있습니다!

로그인 시도 횟수

해커들이 가장 자주 사용하는 방법 중 하나는 사전 공격입니다.

이 공격은 가능한 수백만 개의 암호 조합을 시도해서 그중 하나가 성공할 때까지 계속하는 방식입니다. 컴퓨터는 매우 빠른 속도로 작업을 수행할 수 있으므로 이 방법이 짧은 시간에 결과를 가져올 수 있습니다.

일반적이고 매우 효과적인 방어 방법 중 하나는 오류를 표시하기 전에 약간의 지연 시간을 추가하는 것입니다. 이것은 공격을 느리게 만듭니다. 즉, 해커가 사용하는 스크립트의 경우 완료하는 데 너무 오랜 시간이 걸립니다. 이것이 바로 컴퓨터나 앱이 잠깐 멈췄다가 “잘못된 비밀번호입니다!”라고 말하는 이유입니다.

요점은 워드프레스 사이트의 로그인 시도 횟수를 제한해야 한다는 것입니다.

설정된 횟수(예: 5회)를 초과하면 계정이 잠기고 계정 소유자의 이메일을 통해서만 복구할 수 있어야 합니다.

다행히도 이 작업을 수행할 수 있는 훌륭한 플러그인이 있습니다.

HTTP 대 HTTPS

공급업체가 여러분을 괴롭히는 SSL 인증서는 생각보다 더 중요합니다.

브라우저에 ‘보안’이라고 표시되는 녹색 자물쇠 아이콘은 단순한 평판 도구가 아닙니다. SSL 인증서를 설치하고 모든 URL이 ‘https’에서 작동하도록 하는 것만으로도 웹사이트가 누구나 볼 수 있는 책에서 비밀 스크롤로 바뀔 수 있습니다.

이것이 어떻게 가능한지 이해가 안 된다면 중간자 공격에 대한 설명을 읽어보십시오.

컴퓨터에서 서버로 이동하는 트래픽을 가로채는 또 다른 방법은 패킷 스니핑입니다. 패킷 스니핑은 수동적인 데이터 수집 방식이며, 공격자는 굳이 중간에 끼어들려고 노력할 필요도 없습니다.

일반 ‘HTTP’를 통해 실행되는 사이트의 경우, 네트워크 트래픽을 가로채는 사람은 암호와 신용카드 번호가 일반 텍스트로 명확하게 표시된 것을 볼 수 있습니다.

출처: comparitech.com

끔찍하죠? 매우 끔찍합니다!

하지만 SSL 인증서를 설치하고 모든 URL을 ‘https’로 바꾸면 이러한 민감한 정보는 서버만 해독할 수 있는 난수 텍스트로 표시됩니다. 즉, 1년에 몇 달러를 아끼지 마세요! 🙂

결론

이 5가지 사항을 개선하면 웹사이트가 완전히 안전해질까요?

아닙니다. 여러 보안 관련 기사에서도 언급했듯이 100% 안전한 방법은 없습니다. 하지만 합리적인 노력을 기울이면 이러한 문제점을 상당 부분 제거할 수 있습니다. 더 나아가 사이트 전체를 보호하려면 SUCURI 클라우드 WAF를 고려해 보는 것도 좋습니다.