Geeklogがなぜセキュアなのか

24
大大大大大大大大大大大 大大大大 CMS 大大大大大大大 CMS Geeklog Geeklog 大大大大大大大大大大 Geeklog Japan 大大 大大 geeklog.jp

description

Geeklog がなぜセキュアなのか、他のCMSと比べて開発当初から変わらぬ姿勢はセキュリティへの真摯な姿勢であり、それがわかりやすい構造であり、高速な処理であり、軽快な管理作業につながっています。

Transcript of Geeklogがなぜセキュアなのか

Page 1: Geeklogがなぜセキュアなのか

大量データも軽快に処理。セキュア CMS 。

オープンソース CMS GeeklogGeeklog がなぜセキュアなのか

Geeklog Japan 今駒 哲子

geeklog.jp

Page 2: Geeklogがなぜセキュアなのか

各種セキュリティチェック機関との連携

1• High-Tech Bridge Security Research

Lab などから Geeklog 本家、アドオン開発元へ連絡

2• 開発元で対応して対策版を公開

3• セキュリティー機関で脆弱性を公開

Page 3: Geeklogがなぜセキュアなのか

エクスプロイト (exploit)

エクスプロイト (exploit) とは、コンピュータ関連のソフトウェアやハードウェアの脆弱性を利用した悪意ある行為のために書かれた、スクリプトまたはプログラム

Wikipedia より

Page 4: Geeklogがなぜセキュアなのか

XSS 対策

クロスサイト攻撃 : クロスサイトスクリプティング (XSS) 2013/02/21

High-Tech Bridge Security Research Lab が クロスサイトスクリプティング(XSS) がカレンダープラグインの calendar_type parameter に存在することを報告しました ( 訳註 これに伴い、日本語版ではカレンダー jp プラグインも同様に対策しました。 )(HTB23143) 。

Trustwave Spiderlabs は、インストールプログラム、コンフィギュレーション、アンケートプラグインの管理画面、話題の管理画面に XSS が存在することを報告しました。 (TWSL2013-001).

日本人開発プラグインは、日本人開発者がすぐに対応。

Page 5: Geeklogがなぜセキュアなのか

CSRF 対策クロスサイト攻撃 : クロスサイトリクエストフォージェリ (CSRF)  

お問い合わせフォームに、無意味な書き込みや宣伝の書き込みが時折

発生する。

日本語サイトでは、入力制限に、全角などを追加することで海外から

の CSRF 攻撃を受けることはまずありませんでしたが、英語サイトで

活用する際には無防備でした。

そのため、お問い合わせフォームには CAPTCHA プラグインを活用し

て認証画像により機械による自動投稿を除外するしくみで対策してい

ましたが認証画像入力が面倒なため、日本語サイトでは入力文字に全

角指定を行い対策していましたが、十分ではありませんでした。

CMS運営上やっかい

Page 6: Geeklogがなぜセキュアなのか

CSRF 対策のための開発と公開セキュリティートークン ゲストユーザー対応

Geeklog 2.1 よりゲストユーザーも正常にセキュリティートークンが別個に用意されるようになりました。(よりセキュアに!)

お問い合わせフォームはセキュリティートークン ( アノニマスユーザー用のトークンも発行 ) を活用したCSRF対策により当該サイト以外のフォームから実行されると警告されてそのまま投稿できないように脆弱性を対策( formmail 2.1.8   2014/02/9 )

Page 7: Geeklogがなぜセキュアなのか

CSRF 対策として新 CAPTCHA プラグイン

旧 CAPTCHA プラグイン(画像認証)が破られ、新 CAPTCHA プラグインおよび reCAPTCHA プラグイン ( 新画像認証 ) 開発。

スワイプでカンタンセキュア!

Page 8: Geeklogがなぜセキュアなのか

新規登録に対する基本の SPAM 対策

新規ユーザー登録を停止するモード 登録ユーザーの制限処理

サイト運営者にとっては思ったより深刻な被害。無い Gmail アドレスで登録されるとそのアドレスに新規登録メールが送信。エラーメールを Google に多数送信することにつながり、サイトのメールアドレスが SPAM 判定される被害へ。

登録メールアドレスの制限

意外にやっかい

Page 9: Geeklogがなぜセキュアなのか

おもなセキュリティー対応Feb 19, 2013 (2.0.0rc2)   High-Tech Bridge Security Research Lab が XSS がカレンダープラグインの

calendar_type パラメーターに存在する Trustwave Spiderlabs は、インストールプログラム、コンフィギュレーション、アン

ケートプラグインの管理画面、話題の管理画面に XSS が存在Feb 19, 2013 (1.8.2sr1)   High-Tech Bridge Security Research Lab が XSS がカレンダープラグイン Trustwave Spiderlabs は、インストールプログラム、コンフィギュレーション、アン

ケートプラグインの管理画面、話題の管理画面に XSS

Jan 2, 2011 (1.7.1sr1)   YGN Ethical Hacker Group の Aung Khant 氏が管理者のコンフィギュレーションパネ

ルに XSS  および 自動ログインに辞書攻撃に対して脆弱性 YGN Ethical Hacker Group の Aung Khant 氏が管理者のコンフィギュレーションパネ

ルに XSS

Nov 1, 2009 (1.6.1b1)   FCKeditor

Page 10: Geeklogがなぜセキュアなのか

あまりにも危険! TimThumb (2011/12/31)

PHP スクリプト TimThumb には、脆弱性があります。結果として、遠隔の第三者が任意の PHP コードをサイトにアップロードする可能性があります。

対象となるバージョンは以下の通りです。( jQuery プラグイン等に含まれています。)

- TimThumb 2.0 より前のバージョン

public_html/images/cache/ に PHP コードがアップロードされていないか確認し、見つけ次第これらをすぐに削除してください。

WordPress は多数攻

撃。

放置サイトが狙わ

れる!

Page 11: Geeklogがなぜセキュアなのか

“クリックジャッキング”を防止する モード

フレーム内表示を許可しない。これがデフォルト!

フレームで表示されないなと思った

らこの設定を疑え!

他の CMS では制限をかけていな

い場合が多い。Geeklog ならで

はのセキュリティー

Page 12: Geeklogがなぜセキュアなのか

Geeklog のセキュアな開発体制http://wiki.geeklog.net/index.php/Programmers/Developers_Documentation

Coding Guidelines

例)  Control Structures

<?phpif ((condition1) || (condition2)) { action1;} elseif ((condition3) && (condition4)) { action2;} else { defaultaction;}?>

Page 13: Geeklogがなぜセキュアなのか

プラグイン API が充実 function plugin_getmenuitems_ プラグイン名 ()

function plugin_displaycomment_ プラグイン名 ()

function plugin_savecomment_ プラグイン名 ()

function plugin_deletecomment_ プラグイン名 ()

function plugin_showstats_ プラグイン名 ()

function plugin_statssummary_ プラグイン名 ()

function plugin_searchtypes_ プラグイン名 ()

function plugin_dopluginsearch_ プラグイン名 ()

function plugin_cclabel_ プラグイン名 ()

function plugin_getadminoption_ プラグイン名 ()

function plugin_centerblock_ プラグイン名 ()

function plugin_autotags_ プラグイン名 ()…………………………

Page 14: Geeklogがなぜセキュアなのか

ライブラリーの名前空間 COM_ 関数 : lib-common.php で定義 CUSTOM_ 関数 : lib-custom.php で定義 DB_ 関数 : lib-database.php で定義 MBYTE_ 関数 : lib-mbyte.php で定義 PLG_ 関数 : lib-plugin.php で定義 SEC_ 関数 : lib-security.php で定義 SESS_ 関数 : lib-sessions.php で定義 ADMIN_ 関数 : lib-admin.php で定義 CMT_ 関数 : lib-comment.php で定義 PNB_ 関数 : lib-pingback.php で定義 STORY_ 関数 : lib-story.php で定義 SYND_ 関数 : lib-syndication.php で定義 TRB_ 関数 : lib-trackback.php で定義 USER_ 関数 : lib-user.php で定義………………………… .

<?php if (COM_isAnonUser()){ echo CUSTOM_getStaticpage('_login' ); } else { echo CUSTOM_getStaticpage('_logout' ); }?>

Page 15: Geeklogがなぜセキュアなのか

本体ハック不要: CUSTOM 関数

lib-custom.php内でカスタム関数を定義。

404.php

<?phprequire_once 'lib-common.php';COM_handle404();?>

lib-common.php

<?phprequire_once( $_CONF['path_system'] . 'lib-****.php' );require_once( $_CONF['path_system'] . 'lib-custom.php' );

function COM_handle404($alternate_url = ''){ global $_CONF, $_USER, $LANG_404;

if (function_exists('CUSTOM_handle404')) { CUSTOM_handle404($alternate_url); exit; } ……..

Page 16: Geeklogがなぜセキュアなのか

本体ハック不要: CUSTOM 関数

lib-custom.php内でカスタム関数を定義。

404.php

<?phprequire_once 'lib-common.php';COM_handle404();?>

lib-common.php

<?phprequire_once( $_CONF['path_system'] . 'lib-****.php' );require_once( $_CONF['path_system'] . 'lib-custom.php' );

function COM_handle404($alternate_url = ''){ global $_CONF, $_USER, $LANG_404;

if (function_exists('CUSTOM_handle404')) { CUSTOM_handle404($alternate_url); exit; } ……..

lib-custom.php

<?php

if (strpos(strtolower($_SERVER['PHP_SELF']), 'custom_handle404.php') !== false) { die('This file can not be used on its own!');}

function CUSTOM_handle404($alternate_url = ''){ global $_CONF, $_USER, $LANG_404; ……..

Page 17: Geeklogがなぜセキュアなのか

本体パッケージ

Geeklog 本体

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

lib-custom.php

カスタム関数のサンプル

Page 18: Geeklogがなぜセキュアなのか

本体パッケージ 日本語版

Geeklog 本体

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

CORE

plugin

lib-custom.phpよくつかわれる

カスタム関数

カスタム関数のサンプル日本語化 plugi

n

日本語化 plugi

n

日本語化 plugi

n

Page 19: Geeklogがなぜセキュアなのか

Geeklog のわかりやすい coding

<?php

require_once( '../lib-common.php' );

$display = COM_siteHeader();

$display .= "Hello World";

$display .= COM_siteFooter();

COM_output($display);

?>

ページの出力の場合:

Page 20: Geeklogがなぜセキュアなのか

古いサイト、サーバーは乗り換えて

新バージョンで!

Page 21: Geeklogがなぜセキュアなのか

整理された関数体系がセキュアな環境を生む。

Page 22: Geeklogがなぜセキュアなのか

わかりやすいCMSでは、無駄な

コーディングが発生しないので、

セキュアの上、高速・軽快!大容量カスタムフィールド

データも安心!

Page 23: Geeklogがなぜセキュアなのか

Geeklog でセキュアなサイトを!

Page 24: Geeklogがなぜセキュアなのか

Geeklog

Geeklog Japanhttp://www.geeklog.jpDEMOhttp://demo.geeklog.jpFacebook Grouphttps://www.facebook.com/groups/geeklogjp/

Geeklog https://www.geeklog.netリポジトリ Bug trackerhttp://project.geeklog.net/

株式会社アイビー・ウィーhttp://www.ivywe.co.jp

geeklog.jp

Thanks!