セキュアそうでセキュア じゃない少しセキュアな     気分になれる mysql_config_editor2013/04/17   MySQL Casual Talks vol.4 do_aki
do_aki (どぅーあき)|所属| > 株式会社もしも      (ドロップシッピング・アフィリエイトASP)|仕事| > インフラ(サーバ管理)兼     Webアプリケーション開発|出現| > 渋谷・山手線沿線|特性| > PHPer  ...
mysql_config_editor
使い方$ mysql_config_editor set --login-path=path1 --host=127.0.0.1 --user=user1 --passwordEnter password: <- パスワード入力$ mysql ...
バイナリで保存されてる$ hexdump   -C   ~/.mylogin.cnf00000000    00   00 00 00 01 18   0d   0d   18   01   0b   0e   1a   15   0f   1...
明示的なパスワード指定無しで読める$ 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 yo...
パスワード無しに  暗号化?
Code Reading!!
client/mysql_config_editor.cc• ほとんどこのファイルのみで構成  (一部、 mysys_ssl/my_aes.cc )• 暗号化処理は TaoCrypt (extra/yassl 以下)  もしくは OpenSSL...
check_and_create_login_filelogin file を探す  ●ファイルがある場合      ファイルパーミッションをチェック      鍵の読み込み (read_login_key) ●ファイルがない場合  鍵の生成 ...
鍵はファイルに埋め込まれてる
.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 ...
LOGIN_KEY (20byte)                                         20byte から鍵 (16byte) を構築00   00   00   00   01   18   0d   0d   ...
block size (4byte)     block data (16*n byte)                                        AES が 16byte block なので00   00   00   ...
• パスワードも含め、全て表示する perl  script 組んでみた• https://gist.github.com/do-aki/5402830
実は既に言及されてるhttp://mysqlblog.fivefarmers.com/2012/08/16/understanding-           mysql_config_editors-security-aspects/
まとめ
• 暗号化と言うより難読化• 安全性は平文ファイルと同程度• 平文で書かれてるよりはまし?• うっかりgithub 等に公開しないように注意
ありがとうございました
Upcoming SlideShare
Loading in …5
×

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

4,021 views

Published on

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,021
On SlideShare
0
From Embeds
0
Number of Embeds
1,247
Actions
Shares
0
Downloads
4
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. セキュアそうでセキュア じゃない少しセキュアな 気分になれる mysql_config_editor2013/04/17 MySQL Casual Talks vol.4 do_aki
  2. 2. do_aki (どぅーあき)|所属| > 株式会社もしも (ドロップシッピング・アフィリエイトASP)|仕事| > インフラ(サーバ管理)兼 Webアプリケーション開発|出現| > 渋谷・山手線沿線|特性| > PHPer http://do-aki.net/
  3. 3. mysql_config_editor
  4. 4. 使い方$ mysql_config_editor set --login-path=path1 --host=127.0.0.1 --user=user1 --passwordEnter password: <- パスワード入力$ mysql –login-path=path1mysql>
  5. 5. バイナリで保存されてる$ 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
  6. 6. 明示的なパスワード指定無しで読める$ mysql_config_editor print --alluser = user1password = *****host = 127.0.0.1
  7. 7. 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 より抜粋
  8. 8. パスワード無しに 暗号化?
  9. 9. Code Reading!!
  10. 10. client/mysql_config_editor.cc• ほとんどこのファイルのみで構成 (一部、 mysys_ssl/my_aes.cc )• 暗号化処理は TaoCrypt (extra/yassl 以下) もしくは OpenSSL が担当• AES (鍵長 128bit) ECB
  11. 11. check_and_create_login_filelogin file を探す ●ファイルがある場合 ファイルパーミッションをチェック 鍵の読み込み (read_login_key) ●ファイルがない場合 鍵の生成 (generate_login_key) -> 実体は乱数生成してるだけ 鍵を含むヘッダの書き込み (add_header)
  12. 12. 鍵はファイルに埋め込まれてる
  13. 13. .mylogin.cnf のファイル構造
  14. 14. 予約領域 (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
  15. 15. LOGIN_KEY (20byte) 20byte から鍵 (16byte) を構築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
  16. 16. block size (4byte) block data (16*n byte) AES が 16byte block なので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
  17. 17. • パスワードも含め、全て表示する perl script 組んでみた• https://gist.github.com/do-aki/5402830
  18. 18. 実は既に言及されてるhttp://mysqlblog.fivefarmers.com/2012/08/16/understanding- mysql_config_editors-security-aspects/
  19. 19. まとめ
  20. 20. • 暗号化と言うより難読化• 安全性は平文ファイルと同程度• 平文で書かれてるよりはまし?• うっかりgithub 等に公開しないように注意
  21. 21. ありがとうございました

×