워드프레스는 웹사이트를 쉽고 저렴하게 제작할 수 있다는 장점 때문에 십 년 넘게 전세계적으로 널리 사랑 받아오고 있습니다. 2022년도 기준으로  전세계 웹사이트의 43%가 워드프레스로 구축되었다고 하니 그 인기가 얼마나 대단한지 가늠할 수 있을 것입니다.

하지만 워드프레스로 구축된 사이트는 실로 다양한 해킹 위험에 노출되어 있습니다. 워드프레스를 기반으로 한 사이트의 수가 많은 반면, 사이트 소유자들이 보안에 대해 잘 알지 못하거나 아예 관심이 없는 경우도 허다하기 때문입니다. 이로 인해 워드프레스로 제작한 취약한 사이트는 이런 빈틈을 노리는 해커들의 주요 표적이 되고 있습니다. 취약점을 가진 사이트는 전문해커가 아니더라도 몇 가지 방법만 알면 간단하게 해킹 할 수 있습니다.

해킹을 방지하려면 아주 기본적이고 기초적인 것부터 신경 써야 합니다. 거창한 기술이 아니더라도 다음의 간단한 조치를 취함으로써 웹사이트를 보호할 수 있기 때문에 워드프레스 취약점 보안 TOP10을 선정해 보았습니다.

 

1.소프트웨어(테마,플러그인 등) 업데이트

워드프레스 공식 통계 조사 결과에 따르면 전세계 워드프레스 사용자의 42.6%는 여전히 다양한 이전버전의 워드프레스를 사용 하고 있습니다. 워드프레스는 WordPress Security Team의 전문가들이 취약점을 연속적으로 연구하고 패칭하기 때문에 상당히 안전하지만 대다수의 Plugin이나 Theme은 보안을 최우선으로 하지 않기 때문에 소프트웨어상의 취약점이 많을 수 밖에 없습니다.

[워드프레스 업데이트 관리 플러그인 – Easy Update Manger]

따라서 워드프레스 관리자라면 해야 될 첫번째는 워드프레스의 플러그인, 테마, 그리고 워드프레스를 최신 버전으로 업데이트 시키는 것 입니다. 워드프레스의 경우 새로운 버전을 공개할 때마다 기존 버전의 보안 문제들을 같이 공개하기 때문에 최신 이하의 버전을 사용하고 있다면 누구나 공개된 취약점을 검색해서 해킹할 수 있습니다.

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

다음 사이트에서는 알려진 워드프레스 및 워드프레스 플러그인/테마의 취약점을 검색해 볼 수 있습니다.

참고 :
https://www.exploit-db.com/
https://wpvulndb.com/
http://www.cvedetails.com/

 

2.보안 플러그인 설치

[워드프레스 보안 플러그인 – Wordfence Security]

Wordfence Security, ITHEMES SECURITY 등과 같은 종합적인 보안 기능을 제공하는 플러그인을 설치하여 사이트의 보안을 향상시킬 수 있습니다.

참고 : https://websetnet.net/ko/top-10-wordpress-security-plugins/

 

3.관리자 이름 변경

무차별 대입 공격을 시도하려면 우선 관리자 계정의 이름을 알아야 합니다. 워드프레스는 디폴트로 ‘admin’을 관리자 이름으로 정하기 때문에 대다수의 패스워드 해킹은 ‘admin’ 이라는 아이디에 공격을 시도합니다. 관리자 이름을 ‘admin’ 또는 ‘administrator’가 아닌 추측하기 어려운 이름으로 변경 해주시길 바랍니다. 변경하는 방법은 다음과 같습니다.

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

  • 위의 작업이 번거로운 경우 Username Changer같은 플러그인을 사용하면 됩니다.

 

4.패스워드 보안

타 사이트의 계정과 다른 패스워드를 사용하시길 바랍니다. 동일한 패스워드를 사용하는 사이트가 취약하다면 워드프레스 사이트도 위험해질 수 있습니다. 해커들은 입력 가능한 모든 문자열을 무차별적으로 대입하여 비밀번호를 알아 낼 뿐만 아니라 해커들이 사용하는 패스워드 사전에서 흔하게 쓰이는 비밀번호들 중 가능성이 높은 것들을 차례로 대입하여 쉽게 계정을 탈취하기도 합니다.

유명 소셜 네트워크 서비스 트위터가 해킹 당했던 사건이 있었습니다. 리크트소스가 집계한 유출된 트위터 비밀번호 중 가장 많이 사용된 비밀번호 순위를 공개했는데요,  1위가 123456 이었고 2위는 123456789, 3위는 qwerty 이었습니다.  생각보다 훨씬 많은 사람들이 비밀번호 보안에 무관심하다는 것을 알 수 있게 해준 큰 사건이었죠.

[유출된 트위터 비밀번호 중 가장 많이 사용된 비밀번호 순위]

만약 관리자 계정의 패스워드를 위와 같이 단순하게 만들어서 쓰고 계신다면 깊은 반성이 필요하겠습니다. 패스워드에 특수 문자, 대문자, 숫자를 모두 포함하면 만들 수 있는 8자리 패스워드의 수는 소문자로만 만들 수 있는 패스워드의 수의 30,000 배가 됩니다. 이렇게 만들어진 패스워드는 무차별 대입 공격으로 해킹하기 훨씬 어렵습니다. 또 개인정보나 흔한 단어는 패스워드에 포함하지 않아야 합니다.

 

5.IP 접속제한

검증되지 않은 IP가 어드민 계정으로 접속하는 것을 제한할 수 있습니다. 관리자 계정에 접속할만한 IP를 모두 알고 있다면 그 외의 IP에서 들어오는 wp-admin 페이지 요청을 차단하면 됩니다. 자신이 사용하고 있는 웹 서버 소프트웨어에 따라 다음과 같이 설정하시기 바랍니다.

 

Apache를 사용하는 경우

워드프레스 루트 폴더에 .htaccess 라는 파일을 만들고 다음을 추가:

# Block access to wp-admin.
order deny,allow
allow from x.x.x.x
deny from all

그런데 이렇게 설정할 경우 AJAX를 사용하는 Plugin이나 Theme의 기능이 방해될 수도 있기 때문에 추가로 다음과 같이 설정해 주어야 합니다.

.htaccess 파일에 다음을 추가:

# Allow access to wp-admin/admin-ajax.php
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

 

Nginx를 사용하는 경우

nginx.conf 파일에 다음을 추가:

location /wp-admin {
allow x.x.x.x;
deny all;
}

Nginx의경우에도 기존 Plugin/Theme 기능을 보호하기 위해서 다음을 추가 설정 합니다.

Nginx의 conf 파일에 다음을 추가:

location /wp-admin/admin-ajax.php {
allow all;
}

하나 이상의 IP를 허용하려면 다음과 같이 설정:

order deny,allow
allow from x.x.x.x
allow from y.y.y.y
allow from z.z.z.z
deny from all

(x.x.x.x, y.y.y.y, z.z.z.z는 검증된 IP)

 

XML-RPC를 사용하는 경우

XML-RPC를 비활성화하려면 다음 코드를 .htaccess 파일에 추가:

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php

특정 IP를 허용하려면 deny from all 아래에 다음 라인을 추가:

allow from z.z.z.z

(z.z.z.z는 검증된 IP)

  • 이 기능을 사용하지 않는다면 XML-RPC를 비활성화하는 것이 보안상 좋습니다.

 

 

6.로그인시도 제한

무차별 대입 공격(Brute Force)과 같은 공격은 로그인 폼을 타겟으로 합니다. 그러므로 위에서 언급한 플러그인을 사용하여 로그인 페이지의 경로를 변경하면 이러한 공격을 피하는 데 도움이 됩니다.

또 다른 옵션으로 All In One WP Security & Firewall 플러그인이 있습니다. 이 플러그인은 자체로 매우 강력한 보안 플랫폼입니다. 다수의 바람직한 보안 관행을 실행하는 보안 플러그인을 사용하여 사이트에 추가적인 보안과 방화벽을 추가합니다.

  • 이 플러그인은 바로 위에 설명된 플러그인(예: WPS Hide Login)의 기능을 포함하는 것으로 보이기에 함께 사용하지 않도록 합니다.

참고 : https://wordpress.org/plugins/tags/brute-force/

 

7.디렉터리 브라우징 비활성화

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

다음 라인을 .htaccess 파일에 추가:

# Disable Directory Browsing
Options All -Indexes

  • 디렉터리 브라우징을 비활성화해도 SEO에는 불이익이 없다고 합니다.
  • SEO(검색 엔진 최적화) : 웹사이트가 검색 결과에 더 잘 보이도록 최적화하는 과정

 

8.WP-CONFIG.PHP .HTACCESS 파일 접근 비활성화

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

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

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

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

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

이 작업을 수행하기 위해서는 FTP에 접속할 수 있어야 하며, Stop Spammers Spam Prevention 플러그인을 설치하면 wp-config.php에 접근하지 못하도록 차단하는 기능이 포함되어 있습니다.

 

9.파일수정 금지

관리자로 로그인하면 워드프레스 대시보드에서 plugin, theme 등의 PHP 파일을 수정할 수 있습니다. 로그인에 성공한 해커들은 이런 PHP 파일을 통해 악성 코드를 실행하려고 합니다. 모든 유저의 ‘edit_themes’, ‘edit_plugins’, ‘edit_files’ 권한을 제거 하려면 wp-config.php에 다음 코드를 추가하면 됩니다.

define(‘DISALLOW_FILE_EDIT’, true);

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

 

10.파일권한 설정

워드프레스의 내부 파일들을 외부 사용자가 마음대로 읽고 수정하여 해킹하는 것을 방지하기 위해 파일 권한 설정이 올바르게 되어있는지 확인하시길 바랍니다.

표준대로 설정된 서버를 사용할 경우 워드프레스 팀이 권장하는 파일 권한 scheme은 다음과 같습니다:

  • 모든 워드프레스 파일은 관리자 유저가 소유해야 한다.
  • 모든 워드프레스 파일은 644 권한 (관리자의 읽기/쓰기 권한, 소유하는 그룹의 읽기 권한, 모든 유저들의 읽기 권한)으로 설정해야 한다.
  • 모든 워드프레스 폴더는 755 권한 (관리자의 읽기/쓰기/실행 권한, 소유하는 그룹의 읽기/실행 권한, 모든 유저들의 읽기/실행 권한)으로 설정해야 한다.
  • 워드프레스 계정이 수정할 수 있어야 되는 파일들은 적어도 그 파일들을 소유하는 그룹 안에 워드프레스가 사용하는 계정이 포함되어 있어야 한다.
  • 워드프레스가 사용하는 계정이 관리자 계정과 다르다면 워드프레스가 수정해야 하는 파일들의 권한을 644에서 664로, 폴더들은 755에서 775로 바꿔야한다.
  • wp-config.php는 600 권한 (관리자의 읽기/쓰기 권한)으로 설정해야 한다.

 

공유 호스팅 서버(SuEXEC)를 사용할 경우:

  • 모든 워드프레스 파일은 관리자 유저가 소유해야 한다.
  • 모든 워드프레스 파일은 644 권한으로 설정한다.
  • 모든 워드프레스 폴더는 755 권한으로 설정한다.
  • wp-config.php는 600 권한으로 설정한다.

 

주의해야 할 것은 위과 같은 권한 scheme을 잘못 사용하게 되면 워드프레스나 설치된 플러그인들의 기능이 중지될 수도 있다는 점 입니다. 파일/폴더 권한과 소유권을 수정하기 전에 워드프레스나 플러그인/테마의 쓰기 권한이 필요한 파일과 폴더를 정확히 파악하는 것이 중요합니다.

참고 : https://codex.wordpress.org/Changing_File_Permissions#Permission_Scheme_for_WordPress

 

이 외에도 웹사이트라면 당연히 신경 써야 할 보안 문제들이 있습니다. 워드프레스 기반 사이트 역시 다음의 사항들에 주의를 기울여야 합니다.

호스팅 서버의 보안

사이트를 호스팅하는 서버가 해킹을 당하면 워드프레스 보안 설정과 규칙을 아무리 잘 따른다 해도 소용 없을 것입니다. OS, 브라우저 등 서버에 설치된 소프트웨어를 최신으로 업데이트하시길 바랍니다.

 

웹 서버 보안

Apache, Nginx, Tomcat, IIS 등 웹 서버 마다 취약점이 있습니다. 웹 서버도 최신 버전으로 업데이트하고, 같은 서버에서 워드프레스 외의 사이트가 호스팅 되고 있다면 그 사이트들의 보안에도 신경 써야 합니다.

 

네트워크 보안

사용자 측과 서버 측 모두 안전한 네트워크 환경이 있어야 보안을 유지할 수 있습니다.

사용자가 암호화 되지 않은 커넥션으로 워드프레스에 로그인하면 그 정보가 유출될 수 있어 위험하고, 서버가 설치되어 있는 네트워크 자체가 해킹 당하면 서버와 그 위에 호스팅 되고 있는 워드프레스도 취약하게 됩니다.

HTTPS SSL을 사용하면 브라우저와 서버 사이에 오가는 정보를 외부인들이 읽을 수 없도록 암호화여 로그인 정보가 유출되지 않습니다.

다음 링크를 통해 워드프레스를 통해 SSL을 설치하는 방법을 알 수 있습니다.

참고 : http://www.wpbeginner.com/wp-tutorials/how-to-add-ssl-and-https-in-wordpress/

 

데이터베이스 보안

데이터베이스를 나눠 쓰는 경우 해킹 경로는 그 데이터베이스를 사용하는 사이트의 수 만큼 늘어납니다. 워드프레스 블로그 별 데이터베이스를 두고, 한 블로그의 유저가 다른 블로그의 데이터베이스에 권한을 가질 수 없도록 설정하시길 바랍니다.

또 워드프레스가 해킹 당했을 경우를 대비해 데이터베이스에 적재된 데이터를 정기적으로 백업 시켜주는 것이 좋습니다.

백업된 데이터의 md5 해시를 현재 데이터의 해시와 비교하여 데이터 무결성을 확인할 수 있습니다.

 

로그 검사

웹서버는 로그인한 유저의 정보는 남기지 않지만 사이트에 접속한 IP와 시간 그리고 GET요청 등은 로깅됩니다. 따라서 Cross-Site Scripting(XSS), Remote File Inclusion(RFI), Local File Inclusion(LFI), SQL Injection, brute force 등의 공격을 탐지할 수 있습니다. 특히 무차별 대입 공격은 로그에 명확하게 뜨기 때문에 로그검사가 유용합니다.

해킹을 당하여 중요한 자산을 잃게 되어도 괜찮은 사람은 없을 것입니다. 또 웹 상에 사이트 또는 블로그를 구축하는 순간 이미 해킹으로부터 자유로울 수도 없습니다.

 

[WordPress Estatik 플러그인 취약점을 이용한 File upload 공격 시연 영상]

위 영상은 WordPress Estatik 플러그인의 업로드 함수에서 파일 확장자 체크를 하는 로직이 존재하지 않는 버전의 취약점과 워드프레스의 ajax(에이잭스) 기능의 잘못된 사용으로 인해 간단한 코드로 웹 쉘 파일을 업로드 하는 파일 업로드 공격을 시연하고 PLURA를 이용하여 파일업로드 취약점 공격을 방어하는 영상입니다. 이처럼 워드프레스의 기능들이 많아질수록 취약점 또한 많아지게 됩니다. 워드프레스의 기본적인 보안도 중요하지만 지속되는 취약점 공격들부터 최신화된 보안정보를 안내하여 PLURA로 인해 안전하게 지켜드리겠습니다.

저희 큐비트 시큐리티는 날로 진화하는 지능형 보안 위협에 철저히 대비할 수 있도록 언제나 좋은 정보, 좋은 서비스를 제공하도록 최선을 다 하겠습니다.

 

참고 :
http://makeawebsitehub.com/wordpress-security
http://codex.wordpress.org/Brute_Force_Attacks