워드프레스 보안 강화를 위해서 아래와 같이 로그인 페이지를 수정한다. 그리고 워드프레스 문구를 제거 하는 방법이다.

 

이 글은 CentOS 6.x OS 시스템을 기반으로 작성되었다.

 

1. 로그인과 워드프레스 문구 삭제

- 보안 강화와는 무관하나 그냥 팁이다.

* wordpress-4.0.1 버전에서 수정 함.

$ vim wp-includes/default-widgets.php --> 385 ~ 400 라인 쯤 아래와 같이 수정.

- wordpress-4.2.x 버전 이후 부터 wp-includes/widgets/class-wp-widget-meta.php 의 파일로 변경 됨. (2016.04 내용 추가)

  <?php wp_register(); ?>
<li><?php //wp_loginout(); ?></li>  ---> 사이드 바 '그 밖의 기능' 에서 로그인/로그아웃 삭제. (php 구문 앞에 // 로 주석처리)
<li><a href="<?php bloginfo('rss2_url'); ?>"><?php _e('Entries <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
<li><a href="<?php bloginfo('comments_rss2_url'); ?>"><?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
<?php
/**
* Filter the "Powered by WordPress" text in the Meta widget.
*
* @since 3.6.0
*
* @param string $title_text Default title text for the WordPress.org link.
*/
echo apply_filters( 'widget_meta_poweredby', sprintf( '<li><a href="%s" title="%s">%s</a></li>',
esc_url( __( 'https://wordpress.org/' ) ),
esc_attr__( 'Powered by WordPress, state-of-the-art semantic personal publishing platform.' ),
_x( ", 'meta widget link text' )   ---> 사이드 바 '그 밖의 기능' 에서 WordPress.org 문구 삭제 ('WordPress.org' --> " )
) );

 

2. 페이지 맨 아래의 'Theme: Firmasite' 문구 삭제

- 역시 보안 강화와는 무관

* firmasite 1.4.2.1 버전에서 적용

$ vim wp-content/themes/firmasite/templates/footer.php

55번째 라인을 아래와 같이 주석 처리

<!-- <small class="text-muted designer"><?php _e("Theme:",'firmasite'); ?> <a href="//firmasite.com/" class="text-muted" rel="designer">FirmaSite</a></small> -->

(html 구문 <!-- 으로 주석처리)

 

* spacious 테마에 적용

$ vim wp-content/themes/spacious/inc/functions.php

//$default_footer_value = sprintf( __( 'Copyright &copy; %1$s %2$s.', 'spacious' ), date( 'Y' ), $site_link ).' '.sprintf( __( 'Powered by %s.', 'spacious' ), $wp_link ).' '.sprintf( __( 'Theme: %1$s by %2$s.', 'spacious' ), 'Spacious', $tg_link );   ---> 이 라인을 주석 처리 후 아래(파란색)와 같이 적용.

$default_footer_value = sprintf( __( 'Copyright &copy; %1$s %2$s.', 'spacious' ), date( 'Y' ), $site_link );

(682 라인에 위치함, spacious version 1.6.9 기준)
(557 라인, spacious version 1.9.7 기준)

 

3. 관리자 페이지 접속 경로 변경

'Rename wp-login.php' 플러그인을 설치하여 관리자페이지 기본 http://mapoo.net/wp-admin 경로를 http://mapoo.net/xxxxxxxx 로 변경 함.

그리고 관리자 계정을 될 수 있으면 admin 으로 사용하지 말고, 비번은 사전에 없는 추측이 어려운 조합으로 설정.

 

4. 보안강화 플러그인 설치

Wordfence Security 와 같은 보안을 강화 시켜주는 플러그인을 설치 후 활성화 시켜준다.

 

5. 웹셀 해킹 방지

웹셀 침해 방지를 위한 wp-content, wp-include 폴더 내의 php 직접 호출 권한 제한 방법.

웹셀이란 해커가 악의적인 목적으로 웹서버에서 임의의 명령(리눅스에 쉘 명령)을 실행할 수 있도록 제작한 프로그램을 말한다.
이 프로그램은 주로 php, asp, jsp 파일 등으로 만들어지는데,
이렇게 만들어진 php 파일은 웹서버의 취약점을 통해 웹서버에 업로드되며, 이후에는 해커가 웹서버 환경에서 임의의 명령어를 실행할 수 있게 된다.
국내 해킹사례의 90% 이상이 이 웹셀로 인한 피해로 알려질 만큼 웹쉘로 인한 피해가 큰 것으로 알려져 있다.
최근 wordpress 슬라이더 레볼루션(RevSlider) 취약점이 공개됨에 따라 워드프레스에서도 웹셀 공격에 대한 예방이 필요 함.
따라서 플러그인이나 워드프레스 폴더에 있는 php 파일에 취약점이 있는 경우나 이미 해킹을 목적으로 한 php 파일이 업로드 되어있는 경우라도
wp-content, wp-include 폴더 하위에서는 php 파일을 직접 호출하여 실행하지 못 하도록 조정하는 것이 좋다.
폴더 하위에 있는 php 파일을 url로 호출하는 것을 직접 호출이라고 한다.
아래 방법으로 wp-content, wp-include 폴더 내의 php 직접 호출 권한을 제한하길 바란다.

# httpd.conf 혹은 <VirtualHost> 내부에서 선언 필요.(서버 root 권한 필요)

########################################################################
<LocationMatch "(wp-includes/wp-tinymce.php|wp-content/themes|wp-content/plugins)">
Allow from all
</LocationMatch>
########################################################################

# 자신의 워드프레스 내부 폴더 /wp-content/.htaccess , /wp-includes/.htaccess 파일에 추가 (없으면 파일을 새로 생성 후 아래 내용을 첨가)

##########################################################################
<FilesMatch "\.(htaccess|htpasswd|[Pp][Hh][Pp]|[Pp]?[Hh][Tt][Mm][Ll]?|[Ii][Nn][Cc]|[Cc][Gg][Ii]|[Pp][Ll])">
Deny from all
</FilesMatch>
##########################################################################

 

*웹셀 방지를 위한 설정을 하면 일부 플러그인이 동작 하지 않을 수 도 있으니 확인 바람.

본인의 경우 Image Captcha 의 이미지가 뜨지않는 문제가 발생.

 

6. xmlrpc.php 취약점을 이용한 DDOS 공격 대응

Disable XML-RPC 플러그인을 설치 후 활성화하면 된다.

 

7. php 함수 제한

# vim /etc/php.ini

disable_functions = system, exec, passthru, escapeshellcmd, pcntl_exec, shell_exec

* 위 함수들은 서버상에서 운영체제 명령어를 실행 시키는 명령들이다. 일단 웹쉘이 업로드 되면 위의 함수들로 서버상에서 작업을 할 수 있으므로 막는게 좋으나 실제 운영되고 있는 홈페이지에서도 사용 할 수 있으므로 잘 알아 보고 필요한 함수는 빼고 설정 하는 것이 좋다.

 

8. 권한 제한

1) 파일시스템 차원의 실행, suid 제한

[root@MapooBlog ~]# cat /etc/fstab | grep '/home'
UUID=67730ca3-cd26-40c9-8230-7307c905c2f6 /home ext4 defaults,noexec,nosuid 1 1

noexec,nosuid 설정을 하여 /home 디렉토리의 실행 파일들은 실행권한이 있어도 root도 실행할 수 없으며 suid 퍼미션의 파일을 실행할 수 없다.

간단하지만 효과가 크다. 하지만 블로그 데이터가 포함된 디렉토리가 / 파일 시스템에 속해 있다면 불가능한 설정이므로 별도의 파일시스템에  블로그 디렉토리를 위치시켜야 한다.

온라인 상태에서도 아래 명령을 통해 즉시 반영 가능하다.

[root@MapooBlog ~]# mount -o remount /home

2) 필수 유틸리티 권한 변경

아래의 파일을 다운받아 root로 쉘을 실행 시켜 해킹에 사용될 수 있는 유틸리티에 대해 other 에 대한 권한을 뺀다.
permit

* 주의 : 해당 파일을 실행하기 전 시스템에 영향을 끼칠 수 있는 것은  없는지 확인 후 실행 시킬 것.

 

9. 기타

- apache 데몬과 블로그 파일들의 권한을 apache, nobody 와 같은 알려진 계정으로 사용하지 않는다.

- DB 접근제한 설정.

- 웹쉘 탐지 유틸리티 가동.

 

## 참고로 1, 2, 4번 항목은 워드프레스 엔진과 firmasite 테마를 업데이트 하게 되면 적용이 해제될 수 있으므로 업데이트 후 재 적용 할 것.

WordPress 보안 강화

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다