0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS7 に yum で PHP5.6 を入れた話

Posted at

現在稼働しているサーバの PHP が 5.4 だったのだけど、どうしても password_hash, password_verify を使いたかったので、入れ替えた時のお話。
password_verifyタイミング攻撃に対応していてパスワードクラック対策になるので、ぜひ使って見たかった (同じく hash_equals もある)。

yum リポジトリを追加

epel (もしなければ)

yum install epel-release

rpm で remi を追加

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

古い php を削除

yum -y remove php-*

php5.6 をインストール

yum -y --enablerepo=remi,remi-php56 install php php-mysql php-mbstring php-gd php-pear php-mcrypt mod_ssl
プラグインはお好みで。
password_hash 以外での暗号化することも考えて、 mod_sslphp-mcrypt も入れておいた。

バージョンを確認

php --version を発行し、

PHP 5.6.30 (cli) (built: Jan 19 2017 07:57:06) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

こんな感じで帰って来れば OK.

apache 再起動

systemctl restart httpd
fast-cgi や Nginx はまた別の機会に。

phpinfo() を実行する

php56.png
こんな感じでヘッダに 5.6.xx となれば OK.
(黒塗りのところは host 名)

蛇足

本当は 7.0 とか使いたかったんだけど

大人の事情(笑)により頓挫。
宇宙船演算子とか使ってみたい。
Null 合体演算子は切実に使いたい。

タイミング攻撃とは

ザクっというとパスワードの検証にかかる時間を調べることにより、処理内容を推測してパスワードをクラックする(パスワード検証に限らないが)。
我々はコードを書くときに「ネストを深くしない」「可能な限り早く return する」ことを心がけるけれど、そうすると処理する時間に僅かだが差が出るので、それを何度もやりその有意差から、「ああ、この辺りで処理を抜けてるな」みたいなことがわかってしまう。
よく文字列比較で使う ===strcmp なども内部的には、文字数を比較していたり、効率化のために「可能な限り早く return し」ているので、自分で記述した処理以外の部分でも攻撃対象となってしまう。
password_verifyhash_equals はどんな値が入力されても同じ時間で答えを返すように設計されているので、こういった攻撃の対策に役立つ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?