Upload
doaki
View
2.810
Download
5
Embed Size (px)
DESCRIPTION
Citation preview
セキュアそうでセキュアじゃない少しセキュアな
気分になれるmysql_config_edito
r
2013/04/17 MySQL Casual Talks vol.4 do_aki
| 所属 | > 株式会社もしも (ドロップシッピング・アフィリエイト ASP )
| 仕事 | > インフラ(サーバ管理)兼 Web アプリケーション開発
| 出現 | > 渋谷・山手線沿線| 特性 | > PHPer
do_aki ( どぅーあき )
http://do-aki.net/
mysql_config_editor
使い方$ mysql_config_editor set --login-path=path1 \--host=127.0.0.1 --user=user1 --passwordEnter password: <- パスワード入力
$ mysql –login-path=path1mysql>
バイナリで保存されてる$ hexdump -C ~/.mylogin.cnf00000000 00 00 00 00 01 18 0d 0d 18 01 0b 0e 1a 15 0f 1b |................|00000010 12 12 00 02 12 1e 1f 03 10 00 00 00 4a c8 d0 d9 |............J...|00000020 f0 de 9a fa 7d f5 2f 0b 80 ef 20 58 10 00 00 00 |....}./... X....|00000030 7e 36 64 73 58 b7 d0 1f 78 93 43 0d c2 db d8 0c |~6dsX...x.C.....|00000040 20 00 00 00 4e a7 5d 18 3e 46 ba 33 8d fa 1f 57 | ...N.].>F.3...W|00000050 89 e1 db b2 4d 87 4f da 4f f3 48 86 b7 e6 00 79 |....M.O.O.H....y|00000060 8b 28 59 68 20 00 00 00 44 f2 5a 10 20 36 05 41 |.(Yh ...D.Z. 6.A|00000070 99 30 99 65 f1 b5 b3 e3 60 71 a4 e2 ac 17 6b f2 |.0.e....`q....k.|00000080 0d b2 e9 d1 60 74 7d 57 |....`t}W|00000088
明示的なパスワード指定無しで読める
$ mysql_config_editor print --alluser = user1password = *****host = 127.0.0.1
mysql_config_editor (MySQL 5.6 Reference Manual)
• The mysql_config_editor utility (available as of MySQL 5.6.6) enables you to store authentication credentials in an encrypted login file named .mylogin.cnf.
http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html より抜粋
パスワード無しに暗号化?
Code Reading!!
client/mysql_config_editor.cc
• ほとんどこのファイルのみで構成 ( 一部、 mysys_ssl/my_aes.cc )
• 暗号化処理は TaoCrypt (extra/yassl 以下 ) もしくは OpenSSL が担当
• AES ( 鍵長 128bit) ECB
check_and_create_login_file
login file を探す ●ファイルがある場合
ファイルパーミッションをチェック鍵の読み込み (read_login_key)
●ファイルがない場合 鍵の生成 (generate_login_key) -> 実体は乱数生成してるだけ 鍵を含むヘッダの書き込み (add_header)
鍵はファイルに埋め込まれてる
.mylogin.cnf のファイル構造
予約領域 (4byte)
00 00 00 00 01 18 0d 0d 18 01 0b 0e 1a 15 0f 1b12 12 00 02 12 1e 1f 03 10 00 00 00 4a c8 d0 d9f0 de 9a fa 7d f5 2f 0b 80 ef 20 58 10 00 00 007e 36 64 73 58 b7 d0 1f 78 93 43 0d c2 db d8 0c20 00 00 00 4e a7 5d 18 3e 46 ba 33 8d fa 1f 5789 e1 db b2 4d 87 4f da 4f f3 48 86 b7 e6 00 798b 28 59 68 20 00 00 00 44 f2 5a 10 20 36 05 4199 30 99 65 f1 b5 b3 e3 60 71 a4 e2 ac 17 6b f20d b2 e9 d1 60 74 7d 57
LOGIN_KEY (20byte)
00 00 00 00 01 18 0d 0d 18 01 0b 0e 1a 15 0f 1b12 12 00 02 12 1e 1f 03 10 00 00 00 4a c8 d0 d9f0 de 9a fa 7d f5 2f 0b 80 ef 20 58 10 00 00 007e 36 64 73 58 b7 d0 1f 78 93 43 0d c2 db d8 0c20 00 00 00 4e a7 5d 18 3e 46 ba 33 8d fa 1f 5789 e1 db b2 4d 87 4f da 4f f3 48 86 b7 e6 00 798b 28 59 68 20 00 00 00 44 f2 5a 10 20 36 05 4199 30 99 65 f1 b5 b3 e3 60 71 a4 e2 ac 17 6b f20d b2 e9 d1 60 74 7d 57
20byte から鍵 (16byte) を構築
block size (4byte)block data (16*n byte)
00 00 00 00 01 18 0d 0d 18 01 0b 0e 1a 15 0f 1b12 12 00 02 12 1e 1f 03 10 00 00 00 4a c8 d0 d9f0 de 9a fa 7d f5 2f 0b 80 ef 20 58 10 00 00 007e 36 64 73 58 b7 d0 1f 78 93 43 0d c2 db d8 0c20 00 00 00 4e a7 5d 18 3e 46 ba 33 8d fa 1f 5789 e1 db b2 4d 87 4f da 4f f3 48 86 b7 e6 00 798b 28 59 68 20 00 00 00 44 f2 5a 10 20 36 05 4199 30 99 65 f1 b5 b3 e3 60 71 a4 e2 ac 17 6b f20d b2 e9 d1 60 74 7d 57
AES が 16byte block なので
• パスワードも含め、全て表示する perl script 組んでみた
• https://gist.github.com/do-aki/5402830
実は既に言及されてる
http://mysqlblog.fivefarmers.com/2012/08/16/understanding-mysql_config_editors-security-aspects/
まとめ
• 暗号化と言うより難読化• 安全性は平文ファイルと同程度• 平文で書かれてるよりはまし?
• うっかり github 等に公開しないように注意
ありがとうございました