SlideShare a Scribd company logo
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

PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
PDF
WordPressでサイト作成するときに知っておくといいことあれこれ
PDF
WordCamp KOBE 「初めてのWordPress!オリジナルのテーマでブログを作る方法」Parkn'Park
PDF
レスポンシブ+フラットデザイン+WordPress
PPTX
千葉コワーキングスペース201の紹介
PDF
20160430co-edo
PDF
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
PDF
Think user first #2 フリルの機能改善における仮説と検証
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
WordPressでサイト作成するときに知っておくといいことあれこれ
WordCamp KOBE 「初めてのWordPress!オリジナルのテーマでブログを作る方法」Parkn'Park
レスポンシブ+フラットデザイン+WordPress
千葉コワーキングスペース201の紹介
20160430co-edo
CSSだけでもけっこうイケルTwenty Tenのカスタマイズとそこから踏み出す第一歩
Think user first #2 フリルの機能改善における仮説と検証

Viewers also liked (19)

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

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

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

More from hiro345 (11)

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

WordPress安全運用の基礎