21
セセセセセセセセセセセセセセセセセセ セセセセセセセセセセ mysql_config_edito r 2013/04/17 MySQL Casual Talks vol.4 do_aki

セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

  • Upload
    doaki

  • View
    2.810

  • Download
    5

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

セキュアそうでセキュアじゃない少しセキュアな

気分になれるmysql_config_edito

r

2013/04/17   MySQL Casual Talks vol.4   do_aki

Page 2: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

| 所属 | > 株式会社もしも    (ドロップシッピング・アフィリエイト ASP )

| 仕事 | > インフラ(サーバ管理)兼  Web アプリケーション開発

| 出現 | > 渋谷・山手線沿線| 特性 | > PHPer

do_aki ( どぅーあき )

http://do-aki.net/

Page 3: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

mysql_config_editor

Page 4: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

使い方$ mysql_config_editor set --login-path=path1 \--host=127.0.0.1 --user=user1 --passwordEnter password: <- パスワード入力

$ mysql –login-path=path1mysql>

Page 5: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

バイナリで保存されてる$ 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

Page 6: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

明示的なパスワード指定無しで読める

$ mysql_config_editor print --alluser = user1password = *****host = 127.0.0.1

Page 7: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

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 より抜粋

Page 8: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

パスワード無しに暗号化?

Page 9: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

Code Reading!!

Page 10: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

client/mysql_config_editor.cc

• ほとんどこのファイルのみで構成 ( 一部、 mysys_ssl/my_aes.cc )

• 暗号化処理は  TaoCrypt (extra/yassl 以下 ) もしくは OpenSSL が担当

• AES ( 鍵長 128bit) ECB

Page 11: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

check_and_create_login_file

login file を探す ●ファイルがある場合

ファイルパーミッションをチェック鍵の読み込み  (read_login_key)

 ●ファイルがない場合 鍵の生成 (generate_login_key)   -> 実体は乱数生成してるだけ 鍵を含むヘッダの書き込み (add_header)

Page 12: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

鍵はファイルに埋め込まれてる

Page 13: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

.mylogin.cnf のファイル構造

Page 14: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

予約領域 (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

Page 15: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

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) を構築

Page 16: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

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 なので

Page 17: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

• パスワードも含め、全て表示する perl script 組んでみた

• https://gist.github.com/do-aki/5402830

Page 18: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

実は既に言及されてる

http://mysqlblog.fivefarmers.com/2012/08/16/understanding-mysql_config_editors-security-aspects/

Page 19: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

まとめ

Page 20: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

• 暗号化と言うより難読化• 安全性は平文ファイルと同程度• 平文で書かれてるよりはまし?

• うっかり github 等に公開しないように注意

Page 21: セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor

ありがとうございました