워드프레스 보안 강화하기

21

들어가며

워드프레스는 다양한 테마와 플러그인을 사용할 수 있다는 점은 워드프레스의 가장 큰 중점 중 하나입니다. 이렇듯 기능을 확장하고 레이아웃을 향상시키는 이러한 테마와 플러그인은 워드프레스의 보안을 약화시킬 수 있는 원인이 되기도 합니다.

그러므로 가급적 사용하는 플러그인의 개수를 줄이고 새로운 업데이트가 나오면 즉시 업데이트하여 최신 상태를 유지해야 보안 위협으로부터 보호할 수 있습니다.

근래 들어 특히 워드프레스가 멀웨어에 감염되거나 해킹으로 인해 피해를 입은 사례가 부쩍 눈에 띕니다. 얼마 전에 다른 블로그가 호스팅되고 있는 해외 웹호스팅 업체에서 "SiteLock"과 협력하여 보안을 강화했다는 메시지를 보내왔습니다. 그러면서 다음과 같은 사항이 언급되었습니다.

이러한 검사를 통해 알려진 멀웨어를 식별하여 악의적인 것이 감지되면 검색엔진에서 차단(blacklist)되기 전에 조치를 취할 수 있는 시간을 제공하기 위해 즉시 이메일 경고를 고객에게 보내는 단순한 "경보 시스템" 역할을 합니다.

많은 시간과 비용을 들여서 열심히 구축한 사이트가 검색엔진에서 검색이 되지 않게 된다면 정말로 큰 문제가 아닐 수 없습니다. 실제로 Google Blocks Thousands Of WordPress Sites Following Malware Attack(멀웨어 공격 후에 구글에서 수천 개의 워드프레스 사이트 차단)이라는 기사에서처럼 멀웨어 감염에 의해 검색엔진에서 퇴출된다면... 생각만해도 끔찍한 것 같습니다.

워드프레스를 안전하게 운영하기 위해 다음과 같은 몇 가지 사항만 고려해도 많은 도움이 될 것입니다. 참고로 아래 내용은 제가 이 블로그에 산발적으로 올렸던 내용을 종합하면서 몇 가지 사항을 추가했습니다.

워드프레스에서 보안 강화를 위한 몇 가지 조치

사용자 이름에 admin, administrator 사용 금지

스팸 차단 플러그인을 설치하여 확인해보면 스패머들은 admin, administrator 등의 아이디(사용자 이름)로 로그인을 시도합니다. (또, 특이한 것은 demo라는 사용자 이름으로도 자주 시도하더군요.)

오늘날 대부분의 공격은 wp-admin / wp-login에 접속하여 주로 admin이라는 사용자 이름으로 로그인을 시도하는 형태로 이루어진다고 합니다. 실제로 근래에 카페2*에서 호스팅하는 사이트가 멀웨어에 감염되어 며칠 전 데이터와 DB로 복원시키고 비밀번호까지 모두 바꾼 후에 제게 연락을 해와서 살펴보니 관리자 아이디로 admin이 사용되고 있었습니다.

관리자 사용자 이름이  admin인 경우 다음과 같이 관리자 사용자 이름을 바꾸도록 합니다.

  • 새로운 사용자를 추가합니다.
  • 역할을 "관리자"로 지정하고 저장합니다.
  • 로그아웃한 후에 새로 만든 관리자 계정으로 로그인합니다.
  • 이전 관리자 계정(admin)을 삭제합니다.

위의 작업이 번거로운 경우 Username Changer같은 플러그인을 사용하면 됩니다("워드프레스에서 사용자명(Username) 변경하기" 참고).

강력한 비밀번호 사용

강력한 비밀번호를 사용해야 한다는 점은 익히 알고 있기 때문에 별다른 설명이 필요하지 않을 것 같습니다. 복잡하고 길고 독특한(고유한) 비밀번호를 사용하도록 합니다. 남들이 쉽게 짐작할 수 있는 비밀번호를 사용하지 말고 숫자와 대소문자 및 특수기호를 조합하여 만들도록 합니다.

패스워드를 자주 잊어버리는 경우 "암호문을 활용하여 안전하고 기억하기 쉬운 비밀번호 만들기"를 참고해보세요.

xmlrpc.php를 통한 Brute Force 공격 차단하기

XML-RPC란 XML을 사용하여 호출과 HTTP를 전송 메커니즘으로 인코딩하는 원격 프로시저 호출이라고 합니다. 이 기능을 사용하지 않는다면 XML-RPC를 비활성화하는 것이 보안상 좋다고 합니다. 여기를 참고해보세요.

wp-login 페이지 경로 변경하기

wp-login의 경로를 변경하여 보안을 강화하는 방법이 있습니다. WPS Hide Login이라는 플러그인을 설치하면 Login URL을 변경할 수 있습니다. 자세한 내용은 이 글을 참고해보시기 바랍니다.

초기 보안 플러그인에는 워드프레스 로그인 페이지를 숨기는 기능이 탑재되었지만 ‘불분명함을 통한 보안(Security through Obscurity, 은둔 보안)’ 방식은 실질적인 도움이 되지 않고 오히려 시스템을 불안하게 하고 테마가 깨질 수 있다고 합니다.

로그인 시도 제한

무차별 대입 공격(Brute Force)과 같은 공격은 로그인 폼을 타겟으로 합니다. 그러므로 위에서 언급한 플러그인을 사용하여 로그인 페이지의 경로를 변경하면 이러한 공격을 피하는 데 도움이 됩니다. 또 다른 옵션으로 All In One WP Security & Firewall 플러그인이 있습니다. 이 플러그인은 자체로 매우 강력한 보안 플랫폼입니다. 다수의 바람직한 보안 관행을 실행하는 보안 플러그인을 사용하여 사이트에 추가적인 보안과 방화벽을 추가합니다. (이 플러그인은 바로 위에 설명된 플러그인(예: WPS Hide Login)의 기능을 포함하는 것 같으니 함께 사용하지 않도록 합니다.)

All In One WP Security & Firewall

또는, 이 페이지에서 검색되는 보안 관련 플러그인을 사용해볼 수 있습니다.

wp-config.php 및 .htaccess 숨기기

wp-config.php 파일과 .htaccess 파일에 접근하지 못하도록 .htaccess에 규칙을 추가할 수 있습니다.

.htaccess에 다음 코드를 추가하면 wp-config.php에 접근하지 못하게 됩니다.

<Files wp-config.php>
order allow,deny
deny from all
</Files>

그리고 .htaccess에 다음 코드를 추가하면 .htaccess에 접근하지 못하게 됩니다.

<Files .htaccess>
order allow,deny
deny from all
</Files>

이 작업을 수행하려면 FTP에 접속할 수 있어야 합니다. FTP 사용법은 이 글을 참고해보세요.

참고로 Stop Spammers Spam Prevention 플러그인을 설치하면 wp-config.php에 접근하지 못하도록 차단하는 기능이 포함되어 있습니다.

파일 편집 비활성화

해커가 침입하면 파일을 변경하는 가장 쉬운 방법은 워드프레스 대시보드에서 외모 > 테마 편집기로 이동하여 파일을 수정하는 것입니다. 그러므로 테마 편집기에서 파일을 편집할 수 없도록 설정하면 보안이 향상됩니다. 이를 위해 wp-config.php 파일에 다음 라인을 추가합니다.

define('DISALLOW_FILE_EDIT', true);

이제 FTP를 통해서만 파일을 수정할 수 있고 워드프레스 내에서 자체 파일을 수정할 수 없게 됩니다.

디렉터리 브라우징(Directory Browsing) 비활성화

해커들이 사이트의 디렉터리 내용을 볼 수 없도록 함으로써 디렉터리 브라우징을 비활성화하여 보안을 강화할 수 있습니다.

다음 라인을 .htaccess 파일에 추가하도록 합니다.

# Disable Directory Browsing
Options All -Indexes

참고로 디렉터리 브라우징을 비활성화해도 SEO에는 불이익이 없다고 합니다. 디렉터리 브라우징에 대한 자세한 내용은 이 글을 참고해보시기 바랍니다.

보안 플러그인 사용

Wordfence Security, Sucuri Security 등과 같은 종합적인 보안 기능을 제공하는 플러그인을 설치하여 사이트의 보안을 향상시킬 수 있습니다. 이러한 플러그인은 무거운 경향이 있지만 보안을 위해 반드시 필요한 것 같습니다. 자세한 내용은 "워드프레스 베스트 보안 플러그인"을 참고해보세요.

(참고로 멀웨어에 감염되었거나 기타 워드프레스 관련 문제로 어려움을 겪는 경우 여기에서 서비스(유료)를 의뢰하실 수 있습니다.)

데이터/DB 백업

간혹 해킹 등으로 인해 피해를 입었을 때 백업이 제대로 되어 있지 않아서 사이트 전체를 버리는 경우를 목격하기도 합니다. 업체에서 자동으로 백업해주는 경우에도 주기적으로 내 하드 디스크나  USB에 백업본을 저장하는 것이 좋을 듯 합니다. 드물지만 웹호스팅 업체 서버에 문제가 생겨서 자료를 모두 잃어버리는 경우도 있습니다. 이 경우 업체로부터 보상을 받기란 쉽지가 않을 것입니다. 보통 업체에서 '백업 책임은 고객에게 있습니다'라고 명시하고 있습니다. 따라서 소중한 자료는 내가 잘 보관하는 습관을 들여야 하겠습니다.

플러그인으로 인한 보안 취약

워드프레스에서 플러그인은 기능을 확장하고 추가하는 중요한 역할을 하며, 워드프레스의 가장 큰 장점 중 하나입니다. 하지만 그 반대급부로 보안에 안 좋은 영향을 미칠 수 있습니다. 가령 슬라이더 레볼루션(Slider Revolution)은 이름처럼 슬라이더의 혁명이라고 할 만큼 다이내믹한 슬라이더를 만들 수 있는 유용한 툴입니다.

하지만 이 플러그인에서 발견된 보안 취약점 때문에 100,000개의 사이트가 해킹에 영향을 받은 것으로 드러나 큰 문제가 된 적이 있습니다.

이외에도 많은 사용자가 사용하는 Contact Form 7 등에도 보안 문제가 있다고 하네요. (저는 Contact Form 7을 삭제하고 대신 Quform을 사용하고 있습니다.)

가급적 플러그인 사용 개수를 최소화하고 가능한 항상 최신 업데이트를 설치하는 것이 중요합니다. 어떤 플러그인에 보안 문제가 발생하면 즉시 삭제하고 비슷한 기능의 다른 플러그인을 설치하도록 합니다.

Duplicator로 워드프레스 사이트 이전 후 스크립트 파일 삭제하기

Duplicator로 사이트를 이전한 후에는 서버에서 반드시 스크립트 파일을 삭제하시기 바랍니다. "Duplicator 플러그인, 원격 코드 실행(RCE) 취약점 패치"를 참고해보세요.

마치며

앞에서 언급했듯이 항상 워드프레스, 테마, 플러그인을 최신 상태로 유지하는 것도 보안에 중요합니다. 그리고 사용자 로그인 기능이 없다면 특정 IP에서만 로그인이 가능하도록 설정하는 것도 가능합니다. 일반인들이 로그인 페이지에 접속하지 못하도록 wp-login.php 페이지 자체에 접근을 차단하려면 다음과 같은 코드를 .htaccess 파일에 추가하도록 합니다.

<Files wp-login.php>
Order Deny,Allow
Deny from All
Allow from xxx.xxx.xx.xxx
</Files>

여기서 xxx.xxx.xx.xxx 부분에 허용할 IP 주소를 입력하면 됩니다.

워드프레스 보안과 관련하여 염려가 많이 되는 경우 이 글에 소개된 Hide My WP 플러그인을 사용할 수 있습니다. 이 플러그인은 유료 플러그인임에도 불구하고 베스트 셀링 목록에 올라와 있어 사람들의 보안에 대한 관심을 엿볼 수 있는 것 같습니다.

Hide My WP - Amazing Security Plugin for WordPress

이외에도 웹호스팅을 선택할 때에도 무조건 저렴한 상품을 선택하기보다는 어떤 보안 조치가 적용되고 있는지를 따져보는 것도 바람직할 것입니다. 보안에 대해 보다 심화된 정보를 원하시면 이 글이 도움이 될 것입니다.

추가: 워드프레스에서 보안을 유지하기 위해 워드프레스, 테마와 플러그인을 항상 최신 버전으로 유지하고, 보안 플러그인을 설치하면 도움이 됩니다. 그리고 정기적으로 백업을 해주도록 합니다.

21 개 댓글

  1. 안녕하세요 워드님,

    보안에 대해 궁금한 점이 있어서 또 찾아왔습니다.
    워드프레스에서는 ip 기록을 따로 남기지 않나요?
    kboard에서는 ip 기록을 따로 남기지 않나요?
    웹호스팅 '사이트그라운드' 에서는 ip 기록을 따로 남기지 않나요?
    소규모 커뮤니티 홈페이지를 만들고 있는데요. 글쓴이의 아이피를 알 수 없도록 하고 싶습니다.
    홈페이지상에서 보이지 않는것이 아니라 아예 ip 기록자체를 남기지 않으려고 합니다.

    우선 워드프레스에 플러그인 WP_Statistics 에서 hash ip address 설정을 해놓긴 했는데요.
    이외에 웹호스팅 쪽이나 그 외에 제가 따로 조치해야 할 것이 있을까요?

    ps. 본 글과 큰 관련이 없는 질문이라 죄송합니다.

    • 안녕하세요?

      Kboard에 글을 남길 때 IP를 저장하는지 여부는 체크해보지 않았습니다. bbPress의 경우 살펴보니 IP가 남네요.

      사이트그라운드의 경우 cPanel에서 방문자 통계를 볼 수 있습니다.
      https://www.wordnpress.com/others/siteground-%EC%9B%B9%ED%98%B8%EC%8A%A4%ED%8C%85%EC%97%90%EC%84%9C-%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8-%ED%86%B5%EA%B3%84-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0/

      IP 정보를 확인할 수 있는지 여부는 확실히 모르겠습니다. 아마도 보안상
      사이트에 접속하는 방문자의 IP 접속 기록은 서버 어디엔가에 남지 않을까 생각되네요. 그 문제는 Siteground( https://www.thewordcracker.com/go/siteground )에 문의해보시면 제일 확실할 것입니다.

      워드프레스에서 IP 기록 자체를 남기지 않는 것에 대해 생각해본 적이 없어서 정확한 답변을 드릴 수가 없는 점 양해바랍니다.

      만약 염려가 된다면 DB에 남는 IP 정보를 정기적으로 삭제하는 것도 한 방법이 될 것입니다.

      삭제하는 방법은 https://www.thewordcracker.com/basic/ithemes-security-%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EB%B3%B4%EC%95%88-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8%EC%97%90%EC%84%9C-%EB%A1%9C%EA%B7%B8-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0/ 글에 제시된 방법을 응용하면 될 것입니다.

      그럼, 즐거운 하루 보내시기 바랍니다.

  2. 웹호스팅 업체에서 롤백(Roll-back) 기능을 제공하더라도 수동으로 정기적으로 하드 디스크 등에 백업을 받아놓는 것이 바람직한 것 같습니다.

    웹호스팅 업체 인터넷나야나의 서버가 랜섬웨어에 감염되어 백업을 받아놓지 않은 사이트는 복구가 거의 불가능하다고 하네요.

    http://www.thewordcracker.com/basic/%EC%9B%B9%ED%98%B8%EC%8A%A4%ED%8C%85-%EC%97%85%EC%B2%B4-%EB%9E%9C%EC%84%AC%EC%9B%A8%EC%96%B4-%EA%B0%90%EC%97%BC-%EC%A4%91%EC%86%8C-%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%A1%9C-%ED%94%BC%ED%95%B4/

  3. 보안과 관련하여 두 편의 글을 추가했습니다.

    다음 글도 참고해보세요:
    워드프레스 보안 강화를 위한 기본적인 세 가지 방법
    http://www.thewordcracker.com/basic/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EB%B3%B4%EC%95%88-%EA%B0%95%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%84%B8-%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95/

    워드프레스 베스트 보안 플러그인
    http://www.thewordcracker.com/basic/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EB%B2%A0%EC%8A%A4%ED%8A%B8-%EB%B3%B4%EC%95%88-%EA%B4%80%EB%A0%A8-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/

  4. 안녕하세요^^ 질문이 있는데요^^ 위에 언급하신 "파일수정 비활성화"에서 'wp-config.php'와 '.htaccess'에 말씀하신 구문을 추가하고 싶어도 어느줄에 추가해야 하는질 잘 모르겠는데 좀더 정확히 어느 부분이 위 구문을 추가하면 되는지 알 수 있을까요?

    • 안녕하세요? 블로그를 방문해주셔서 감사합니다.

      wp-config.php 파일의 경우 "/* That's all, stop editing! Happy blogging. */" 바로 위에 추가하면 무난할 것 같습니다.

      .htaccess 파일은 별도의 지침이 없으면 아무 곳에나 추가하면 되지 않을까 생각됩니다.

      • https://uploads.disquscdn.com/images/f33a16ffedf3c82834ce6d0507ecd5cdbecc6bf0d14e8c6c1860a73cdef8f1d1.png 안녕하세요^^ 답변 감사합니다^^ 저는 이상하리만치 wp-config.php나 .htaccess 파일을 수정하려 하면 사이트가 열리지 않는 문제가 발생을 하네요^^ 예전에 사이트 속도 향상을 위해 Word님의 글을 읽고 .htaccess 파일에 브라우져 캐시 저장 코드를 삽입해 보았지만 결국 사이트가 열리지 않아 포기를 했었습니다^^ 지금, 우선 알려주신데로 해 보았는데 또 사이트가 열리질 않네요^^ 우선 wp-config.php 파일에만 알려주신 코드를 삽입해 보았는데... 제가 첨부한 이미지를 살펴봐 주실수 있으시면 한번 부탁드립니다^^

      • 아... .htaccess에 삽입하는 구문이었군요^^ define('DISALLOW_FILE_EDIT', true);를 wp-config.php 삽입하는 것이군요^^ 다시금 수정해 보았습니다. 작동엔 전혀 문제가 없는 것으로 보아 잘 수정이 된것 같습니다. 좋은 정보 너무 감사해요^^

      • 잘 해결되어 다행입니다.

        (이전 댓글에 추가한 스샷을 보니 wp-config.php 파일에 .htaccess 파일에 입력해야 할 코드가 들어가 있네요.ㅎㅎ)

        즐거운 하루 되시기 바랍니다^^

  5. 엄..... 이 부분 말인데요...htaccess 파일을 못찾겠어서요 ^^; 이 파일 안에 들어가면 저렇게 까만 창이 뜨면서 그 안에 명령어를 입력할 수 있게 나오나요? 컴맹인 주제에 워드프레스 해서 죄송함다 ㅠㅜ ㅋ

    • 안녕하세요?

      댓글 남겨주셔서 감사합니다.
      처음부터 아는 사람은 아무도 없죠. 누구나 다 하나씩 배워가는 것이죠.

      FTP로 접속하여 워드프레스가 설치된 루트 폴더 내에 .htaccess 파일이 있는지 확인해보시기 바랍니다. FTP에 접속하여 수정하는 방법은 http://www.thewordcracker.com/basic/using-ftp-to-work-with-wordpress/ 글을 참고해보시기 바랍니다.

  6. 관리자 영역만 특정 IP 이외에는 접근하지 못하도록 차단하려면 다음 코드를 사용할 수 있습니다(.htaccess).

    AuthUserFile /dev/null
    AuthGroupFile /dev/null
    AuthName "WordPress Admin Access Control"
    AuthType Basic

    order deny,allow
    deny from all
    # whitelist Syed's IP address
    allow from xx.xx.xx.xxx
    # whitelist David's IP address
    allow from xx.xx.xx.xxx
    # whitelist Amanda's IP address
    allow from xx.xx.xx.xxx
    # whitelist Muhammad's IP address
    allow from xx.xx.xx.xxx
    # whitelist Work IP address
    allow from xx.xx.xx.xxx

    • 안녕하세요?
      Wordfence와 AIO WP Security가 비슷한 기능을 하는 플러그인인가요?
      비슷한 기능을 하는 플러그인의 경우 하나만 설치하는 것이 바람직합니다.
      (마치 PC에서 바이러스 백신 플러그인을 중복하여 설치하면 문제가 발생하는 것과 비슷하다고 생각하시면 되겠습니다.)
      만약 두 플러그인의 기능이 다른 경우에는 함께 사용해도 무방할 것입니다.

  7. 많은 글들을 보았지만, admin, administrator 사용 금지는 어디에서도 알 수 없는 내용이였습니다.

    리캡챠만 달아놓고 안심하고 있었는데,
    워드크래커님의 글을 읽고 보니 많이 배우기도 하지만 반성 또한 많이 하게 되네요.

    • 스팸 필터 플러그인을 설치해보면 어떤 플러그인에서는 불법으로 로그인을 시도한 것을 보여주기도 합니다.
      IP Blacklist Cloud라는 플러그인도 그 중 하나입니다.
      이 플러그인을 설치하여 모니터링해보면 Admin, admin, administrator 등으로 로그인을 시도하는 것을 확인해볼 수 있습니다. 간혹 demo1으로도 로그인을 시도하는데, 관리자 아이디로 demo1을 사람들이 많이 사용하는지는 모르겠습니다. ( http://www.thewordcracker.com/intermediate/change-wordpress-admin-url/ )

      그런데 이런 플러그인을 설치하면 한 번씩 관리자 자신도 스팸으로 인식되어 차단되어 관리자가 자신의 사이트에 접속하지 못해 고생하는 경우도 있습니다ㅎㅎ

    • 참고로 관리자 아이디로 admin을 사용해서는 안 된다는 것은 잘 알려진 사실입니다.
      (아마 한 두 번은 그런 말을 들어보았을 것입니다. 다만 눈여겨 보지 않아서 간과할 수도 있고요.)
      https://mrwweb.com/wordpress-tip-dont-use-admin-seriously/

댓글 남기기

댓글을 입력해주세요!
이름을 입력해주세요