워드프레스 보안 강화를 위해서 아래와 같이 로그인 페이지를 수정한다. 그리고 워드프레스 문구를 제거 하는 방법이다.
이 글은 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 © %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 © %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 테마를 업데이트 하게 되면 적용이 해제될 수 있으므로 업데이트 후 재 적용 할 것.