SlideShare a Scribd company logo
1 of 19
Download to read offline
WordPress安全運用の基礎
NSEG 小山博史
自己紹介
● hiro345
twitter: @hiro345
● blog: http://www.sssg.org/blogs/hiro345/
●
執筆
 @IT ... Java, Eclipse, Android, C
日経Linux ... Raspberry Pi, Java, Dart
日経ソフトウェア ... Java
Java World, WEB+DB Press など
WordPressとは
●
覚え書きや論評などを記事として公開する
ウェブサイトであるブログを構築するための
ソフトウェア
● コンテンツマネージメントシステム(CMS)
として利用される事も多い
● オープンソースソフトウェア(OSS)
● ライセンスはGNU General Public
License(GPL)
WordPressセキュリティ対策の基本
●
最新版にしておくこと
●
必要な機能だけを有効にすること
●
暗号化通信路を利用すること
●
ログを保存しておくこと
●
バックアップをとっておくこと
セキュリティ対策はなぜ必要か
●
無防備だと困ったことが起きる
– サイトの改竄
– ユーザ情報や顧客情報の漏洩
●
インターネットのどこからでも攻撃される
– 防御は必須
– 攻撃されたことを素早く検知して対策
●
実際の被害について把握と対策が必要
– アクセスログの記録をしていれば把握できる
– 被害があったら復旧が必要
事例
● 第三者によるユーザーサイトの改ざん被害に関するご報告 -
2013年08月29日 10時57分 / 新着情報 / お知らせ -
レンタルサーバーならロリポップ!
http://lolipop.jp/info/news/4149/
– 被害
● サイトタイトルに「Hacked by Krad Xin」が含まれるものに変更された
● サイトのキャッチコピーが「BD GREY HAT HACKERS」と変更された
● サイトの表示が文字化けして読めなくなった
● サービスに登録されている個人情報にアクセスされた形跡はなく情報の流出はない
– 原因
● サーバー側のディレクトリパーミッションが不適切だった
● FollowSymLinks の設定を有効にできる状態であった
● 同一サーバー上のユーザー領域を辿り、他のユーザーの wp-config.php の内容を
参照できた
● 他のユーザが使っているデータベースの更新を実行できた
WordPressのシステム構成
管理者 訪問者サーバ
WordPressの動作に必要な環境
●
サーバ(サービス提供側)
– OS: Linux
– Web Server: Apache HTTP Server
– Runtime: PHP
– DB Server: MySQL
●
クライアント(サービス利用側)
– Web Brower: Internet Explorer, Firefox, Chrome, Safari
– セキュリティの観点からは利用する JavaScript Engine も
チェックが必要
WordPressの運用に必要な環境
●
クライアントマシン
– Web Brower: Internet Explorer, Firefox,
Chrome, Safari
– リモートシェル: SSH
– ファイル転送: SCP, SFTP, WebDAV
置き場所や通信路等もチェック
●
サーバマシンは安全な場所にあるか
●
クライアントマシンのロックはできるか
●
スマートフォン紛失時にロックはできるか
● Wifiのフリースポットを使う事があるか
●
ホテルのインターネット設備を使う事がある
か
● etc...
最新版にしておくこと
● WordPressの更新機能は4つの種類
– コアファイル更新
– プラグイン更新
– テーマ更新
– 翻訳ファイル更新
●
自動アップグレード
– WordPress3.7から有効
– デフォルトで有効なもの
●
コアファイルのマイナーアップグレード
●
翻訳ファイルアップグレード
自動アップグレードの設定
●
自動バックグラウンド更新の設定
WordPress Codex 日本語版
http://goo.gl/CwCUhC
● wp-config.php へ定数を指定
●
フィルタを追加して指定
(wp-config.php か functions.php で指定)
設定例
■コアの自動更新を指定(定数で指定)
define( 'WP_AUTO_UPDATE_CORE', true );
備考)
・true – 開発版、マイナー、メジャーアップグレードをすべて有効化
・false – 開発版、マイナー、メジャーアップグレードをすべて無効化
・minor – マイナーアップグレードのみ有効化(開発版・メジャーアップグレードを無効化)
■コアの自動更新の明示的な指定(フィルタで指定)
add_filter( 'allow_dev_auto_core_updates', '__return_true' );
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );
■コア、プラグイン、テーマ、翻訳の自動更新無効の明示的な指定(フィルタで指定)
add_filter( 'auto_update_core', '__return_false' );
add_filter( 'auto_update_plugin', '__return_false' );
add_filter( 'auto_update_theme', '__return_false' );
add_filter( 'auto_update_translation', '__return_false' );
■自動更新の無効化(定数で指定)
define( 'AUTOMATIC_UPDATER_DISABLED', true );
■自動更新の無効化(フィルタで指定)
add_filter( 'automatic_updater_disabled', '__return_true' );
必要な機能だけ有効化
●
アカウントの整理
●
プラグインの整理
●
管理用画面はアクセス制限
●
サーバのリモートアクセスは制限
ユーザ名とパスワード
●
単純なユーザ名とパスワードの組み合わせは推
測されやすい
– 推測されやすい例
● 管理者アカウント:admin
● パスワード: Password1!
● パスワードは、英数字で8文字以上、ただし、大
文字1文字以上、数字1文字以上、記号1文字以上
を推奨
●
パスワードジェネレータを使う
パスワードジェネレータ
<?php
class GenPassword {
public $signs = [
'!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.',
'/', ':', ';', '<', '=', '>', '?', '@', '[', '', ']', '^', '_', '`',
'{', '|', '}', '~', ];
public function getPass($n) {
if ($n < 8) {
$n = 8;
}
return $this->getPassword(1, 1, 3, $n - 5);
}
public function getPassword($s, $n, $A, $a) {
if ($s < 0) $s = 0;
if ($n < 0) $n = 0;
if ($A < 0) $A = 0;
if ($a < 0) $a = 0;
$length = $s + $n + $A + $a;
if ($length < 8) {
$s = 1;
$n = 1;
$A = 3;
$a = 3;
}
$ar = array();
$p = 0;
for ($i = 0; $i < $s; $i++) {
$ar[$p] = $this->getSign();
$p++;
}
public function getSign() {
$index = $this->randomNumber(count($this->signs));
$salt_value = $this->signs[$index];
return $salt_value;
}
public function randomNumber($max = 0x7FFFFFFF) {
if (0x7FFFFFFF < $max) {
$max = 0x7FFFFFFF;
}
$bytes = openssl_random_pseudo_bytes(4);
if ($bytes === false || strlen($bytes) !== 4) {
throw new RuntimeException('randomNumber error');
}
$val = unpack('Nint', $bytes)['int'] & 0x7FFFFFFF;
$fp = (float) $val / 0x7FFFFFFF;
return (int) round($max * $fp);
}
}
$app = new GenPassword();
$s = $app->getPass(8);
for ($i = 0 ; $i<count($s) ; $i++) {
echo $s[$i];
}
echo "n";
for ($i = 0; $i < $n; $i++) {
$ar[$p] = $this->getChar(ord('0'), 9);
$p++;
}
for ($i = 0; $i < $A; $i++) {
$ar[$p] = $this->getChar(ord('A'), 25);
$p++;
}
for ($i = 0; $i < $a; $i++) {
$ar[$p] = $this->getChar(ord('a'), 25);
$p++;
}
shuffle($ar);
return $ar;
}
public function getChar($base, $length) {
$index = $this->randomNumber($length);
$value = $base + $index;
return chr($value);
}
管理画面へのアクセス制限
● HTTPSによる暗号化通信路を使う
● BASIC認証などによる保護を追加する
● 接続できるIPを制限する
● クライアント証明書により接続できるWebブラ
ウザを制限する
● SSHポートフォワードを使って接続するように
する
● 管理画面のURLを変更する
プラグイン
● WordPressにはいくつかのセキュリティ向け
プラグインが公開されています。
●
例:
WP Security Scanプラグイン
データベーステーブル接頭辞変更
wp-config.phpの保護
●
書き換えがされないようにする
●
コードが閲覧されないようにする
●
配置を工夫する
– Wordpressのwp-config.phpファイルの場所をドキュメント
ルート以外のディレクトリへ変更する - Surflog 2.0
http://d.hatena.ne.jp/stylist/20120609/1339207873
– wp-load.php を確認してみると、どんな処理をしているか
わかる
● 認証用ユニークキーの生成用URL
– https://api.wordpress.org/secret-key/1.1/salt/

More Related Content

Viewers also liked

الإرشاد التربوي والنفسي في المؤسسات التعليمية
الإرشاد التربوي والنفسي في المؤسسات التعليميةالإرشاد التربوي والنفسي في المؤسسات التعليمية
الإرشاد التربوي والنفسي في المؤسسات التعليمية
khalid mechkouri
 
00025233
0002523300025233
00025233
fpem
 
Program rada i financijski plan 2015.
Program rada i financijski plan 2015.Program rada i financijski plan 2015.
Program rada i financijski plan 2015.
stipepetrina
 
Holy Work of Raising Soil, Sample Chapters2016
Holy Work of Raising Soil, Sample Chapters2016Holy Work of Raising Soil, Sample Chapters2016
Holy Work of Raising Soil, Sample Chapters2016
Anita Amstutz
 

Viewers also liked (19)

ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
 
かんたん!わかりやすいWafのおはなし
かんたん!わかりやすいWafのおはなしかんたん!わかりやすいWafのおはなし
かんたん!わかりやすいWafのおはなし
 
スタートアップの 3 分ピッチテンプレート
スタートアップの 3 分ピッチテンプレートスタートアップの 3 分ピッチテンプレート
スタートアップの 3 分ピッチテンプレート
 
من اجلك
من اجلكمن اجلك
من اجلك
 
Funcionario, ¿qué le pides tú a la administración electrónica?
Funcionario, ¿qué le pides tú a la administración electrónica?Funcionario, ¿qué le pides tú a la administración electrónica?
Funcionario, ¿qué le pides tú a la administración electrónica?
 
MvSM: 7) Co tam dávat - tvorba obsahu pro sociální média
MvSM: 7) Co tam dávat - tvorba obsahu pro sociální médiaMvSM: 7) Co tam dávat - tvorba obsahu pro sociální média
MvSM: 7) Co tam dávat - tvorba obsahu pro sociální média
 
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēmaValsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
 
Tudatos márkaépítés
Tudatos márkaépítésTudatos márkaépítés
Tudatos márkaépítés
 
Virtualni svet Second Life
Virtualni svet Second LifeVirtualni svet Second Life
Virtualni svet Second Life
 
Estrategias de comunicación para el ciberactivismo
Estrategias de comunicación para el ciberactivismoEstrategias de comunicación para el ciberactivismo
Estrategias de comunicación para el ciberactivismo
 
Bolsas de Estudo para Australia
Bolsas de Estudo para AustraliaBolsas de Estudo para Australia
Bolsas de Estudo para Australia
 
Business Analytics with R
Business Analytics with RBusiness Analytics with R
Business Analytics with R
 
الإرشاد التربوي والنفسي في المؤسسات التعليمية
الإرشاد التربوي والنفسي في المؤسسات التعليميةالإرشاد التربوي والنفسي في المؤسسات التعليمية
الإرشاد التربوي والنفسي في المؤسسات التعليمية
 
00025233
0002523300025233
00025233
 
Clase+de+tarnsporte
Clase+de+tarnsporteClase+de+tarnsporte
Clase+de+tarnsporte
 
ספר וטהר לבנו השלם.
ספר וטהר לבנו השלם.ספר וטהר לבנו השלם.
ספר וטהר לבנו השלם.
 
Program rada i financijski plan 2015.
Program rada i financijski plan 2015.Program rada i financijski plan 2015.
Program rada i financijski plan 2015.
 
Design persuasivo: alcuni esempi
Design persuasivo: alcuni esempiDesign persuasivo: alcuni esempi
Design persuasivo: alcuni esempi
 
Holy Work of Raising Soil, Sample Chapters2016
Holy Work of Raising Soil, Sample Chapters2016Holy Work of Raising Soil, Sample Chapters2016
Holy Work of Raising Soil, Sample Chapters2016
 

Similar to WordPress安全運用の基礎

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
正規表現勉強会入門
正規表現勉強会入門正規表現勉強会入門
正規表現勉強会入門
Shugo Numano
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
Hiroaki Murayama
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 

Similar to WordPress安全運用の基礎 (20)

小さな開発会社でもできた、WordPress 新ビジネスの可能性 -WordCamp Kansai 2024-
小さな開発会社でもできた、WordPress 新ビジネスの可能性  -WordCamp Kansai 2024-小さな開発会社でもできた、WordPress 新ビジネスの可能性  -WordCamp Kansai 2024-
小さな開発会社でもできた、WordPress 新ビジネスの可能性 -WordCamp Kansai 2024-
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
正規表現勉強会入門
正規表現勉強会入門正規表現勉強会入門
正規表現勉強会入門
 
ブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用についてブログメディアにおけるData APIの活用について
ブログメディアにおけるData APIの活用について
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
Silex入門
Silex入門Silex入門
Silex入門
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
TerraformでECS+ECRする話
TerraformでECS+ECRする話TerraformでECS+ECRする話
TerraformでECS+ECRする話
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 

More from hiro345

Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
hiro345
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 

More from hiro345 (11)

手軽に使ってみようIoTデバイス
手軽に使ってみようIoTデバイス手軽に使ってみようIoTデバイス
手軽に使ってみようIoTデバイス
 
Raspberry Pi を楽しもう
Raspberry Pi を楽しもうRaspberry Pi を楽しもう
Raspberry Pi を楽しもう
 
リーダブルパスワード - SQLアンチパターンより抜粋 -
リーダブルパスワード - SQLアンチパターンより抜粋 -リーダブルパスワード - SQLアンチパターンより抜粋 -
リーダブルパスワード - SQLアンチパターンより抜粋 -
 
Raspberry Pi and WebIOPi
Raspberry Pi and WebIOPiRaspberry Pi and WebIOPi
Raspberry Pi and WebIOPi
 
Frontend framework and Template
Frontend framework and TemplateFrontend framework and Template
Frontend framework and Template
 
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
 
5分でわかる! SqljockyでDart+MySQL
5分でわかる! SqljockyでDart+MySQL5分でわかる! SqljockyでDart+MySQL
5分でわかる! SqljockyでDart+MySQL
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 

WordPress安全運用の基礎