Your SlideShare is downloading. ×
  • Like
振る舞いに基づくSSHブルートフォースアタック対策
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

振る舞いに基づくSSHブルートフォースアタック対策

  • 1,107 views
Published

PacSec 2008講演資料 …

PacSec 2008講演資料

関連動画
http://www.youtube.com/watch?v=jYaPascaUZw
http://www.youtube.com/watch?v=iSHg9Sec_QE
http://www.youtube.com/watch?v=-2AQSqNa58c

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,107
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
7

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PacSec2008 at 青山ダイヤモンドホール 振る舞いに基づく SSHブルートフォース対策 平成20年11月13日 TOMOYO Linux Project 半田 哲夫 TOMOYO is a registered trademark of NTT DATA CORPORATION in Japan. Linux is a trademark of Linus Torvalds. Other names and trademarks are the property of their respective owners.
  • 2. はじめに • 遠隔管理などで利用されるSSHサービスへ の不正なログインを許してしまうと、情報漏え いだけでなく、踏み台やトロイの木馬の設置 のような被害が生じます。 – 近年の攻撃手法は高度化・洗練化されてきており、 従来の防御手法だけでは対処しきれない可能性 が増えてきています。 • 「アクセス制御機能を強化したOS」を用いて、 全く新しい防御手法を紹介します。 – 例として TOMOYO Linux を利用します。 2008.11.13 1
  • 3. 準備:フローチャート • この図の見方はご存じですよね? 1 2 No Yes 3 4 2008.11.13 2
  • 4. 準備:状態遷移図 • この図の見方はご存じですよね? B C B A A C B C D D E E A 2008.11.13 3
  • 5. 準備:Linux における状態遷移図の例 • /sbin/initを起点にツリー状に広がります。 /sbin/init /sbin/mingetty /sbin/mingetty /etc/rc.d/rc.sysinit /bin/login /etc/rc.d/rc.sysinit /bin/login /sbin/start_udev /sbin/start_udev /bin/unicode_start /bin/unicode_start /bin/kbd_mode /bin/kbd_mode /bin/setfont /bin/setfont 2008.11.13 4
  • 6. 準備:TOMOYO Linuxとは • 状態遷移をデザインし強制するツール – プログラムの中で発生するプログラムの実行要求 を監視し、その可否を制限する。 – プログラムの実行により状態遷移を行う。 • リクエストを観測し制限するツール – プログラムの中で発生するファイルの読み書き要 求を監視し、その可否を制限する。 – プログラムの実行要求やファイルのオープン要求 によりプロセスの内部状態を更新する。 2008.11.13 5
  • 7. 準備:SSHセッションの種類 • 対話型シェルセッション – シェルが提供され、自由にコマンドを入力できる • 自由に資源にアクセスできる • 非対話型シェルセッション – シェル起動時に -c で指定されたコマンドが実行 される • scp や sftp など /usr/sbin/sshd /bin/bash • 非シェルセッション /bin/bash – シェルが提供されない ??? ??? • ポートフォワーディングなど 2008.11.13 6
  • 8. 従来の対策 • 知識に基づく認証 – ブルートフォース攻撃の対象になります。 • ログイン認証を突破されないことを前提とした 対策 – 突破される確率を減らす • ファイアウォールと連動して認証に失敗したクライアント を一定期間再接続禁止にする • 公開鍵認証を用いる – 攻撃の分散化やパスワード・秘密鍵の漏洩が始 まっています。 2008.11.13 7
  • 9. 提案する対策 • 振る舞いに基づく認証 – 状態遷移を活用します。 • 従来のログイン認証を突破されることを前提と した対策 – 従来のログイン認証から先を制限します。 – とりあえずログインシェルを与えてみて、期待通り の振る舞いをするかどうかを観察します。 • 労働契約における試用期間をイメージしてください。 2008.11.13 8
  • 10. 従来の対策のフロー • ログイン認証までをカスタマイズする SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 失敗 成功 作業を行う SSHサーバとの接続を切断する 2008.11.13 9
  • 11. 提案する対策のフロー • ログイン認証から先をカスタマイズする SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 失敗 成功 振る舞いを検査 不審 正常 作業を行う SSHサーバとの接続を切断する 2008.11.13 10
  • 12. 扉をあけて • 常識は捨ててください。 – 「なんでもあり」の世界です。 – あなた自身のアイデアを実装してください。 • 新しい世界の始まりです。 – セキュアな世界へようこそ! 2008.11.13 11
  • 13. ケース1:対話型シェルセッション • 打鍵タイミングを利用します。 – 利用するもの • 自作プログラム /bin/timeauth /usr/sbin/sshd /bin/bash /bin/bash /bin/timeauth ??? /bin/timeauth ??? /bin/bash /bin/bash ??? ??? 2008.11.13 12
  • 14. ケース1:対話型シェルセッション Authenticate me! 2008.11.13 13
  • 15. ケース1:対話型シェルセッション Authenticate me! Enter password. 2008.11.13 14
  • 16. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 15
  • 17. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 16
  • 18. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 17
  • 19. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. 2008.11.13 18
  • 20. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 19
  • 21. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 20
  • 22. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is PacSec 2008.11.13 21
  • 23. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is PacSec NG. Go away! 2008.11.13 22
  • 24. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 23
  • 25. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 24
  • 26. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 25
  • 27. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is P 2008.11.13 26
  • 28. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa 2008.11.13 27
  • 29. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c 2008.11.13 28
  • 30. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S 2008.11.13 29
  • 31. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e 2008.11.13 30
  • 32. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e c 2008.11.13 31
  • 33. ケース1:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is Pa c S e c OK. Go ahead. 2008.11.13 32
  • 34. ケース1:対話型シェルセッション • 利点 – 使える要素が制限されない • RFCなどの標準に従う必要がない • どんな要素を使っているかを秘匿できる – 想定外の認証方式 • 侵入者が思いも付かない方法を使える • パスワード文字数が少なくても、タイミング情報と組み 合わせることでブルートフォースを無意味に 2008.11.13 33
  • 35. ケース1:対話型シェルセッション • 難点 – 「アクセス制御機能を強化したOS」が必要 • ログインシェルから実行できるコマンドを制限するため • MAC(強制アクセス制御)と呼ばれる機能を利用 – Round Trip Timeが大きいと使いにくい • 外国からのアクセスを防ぐのには好都合? 2008.11.13 34
  • 36. ケース2:対話型シェルセッション • ワンタイムパスワードとメールを利用します。 – 利用するもの • SMTPサーバ • 自作プログラム /bin/mailauth /usr/sbin/sshd /bin/bash /bin/bash /bin/mailauth ??? /bin/mailauth ??? /bin/bash /bin/bash ??? ??? 2008.11.13 35
  • 37. ケース2:対話型シェルセッション Authenticate me! 2008.11.13 36
  • 38. ケース2:対話型シェルセッション Authenticate me! Enter password. 2008.11.13 37
  • 39. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 38
  • 40. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 39
  • 41. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 40
  • 42. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. 2008.11.13 41
  • 43. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 42
  • 44. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 43
  • 45. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 44
  • 46. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 45
  • 47. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 46
  • 48. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 47
  • 49. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 48
  • 50. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 49
  • 51. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 50
  • 52. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 51
  • 53. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 52
  • 54. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 53
  • 55. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 54
  • 56. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 55
  • 57. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 56
  • 58. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 57
  • 59. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is OK. Go ahead. 2008.11.13 58
  • 60. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 59
  • 61. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 60
  • 62. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 61
  • 63. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 62
  • 64. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 63
  • 65. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 64
  • 66. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 65
  • 67. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 66
  • 68. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 67
  • 69. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 68
  • 70. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 69
  • 71. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 70
  • 72. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 71
  • 73. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 72
  • 74. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 73
  • 75. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 74
  • 76. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is OK. Go ahead. 2008.11.13 75
  • 77. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 76
  • 78. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 77
  • 79. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 78
  • 80. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 79
  • 81. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! 2008.11.13 80
  • 82. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 81
  • 83. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 82
  • 84. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 83
  • 85. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 84
  • 86. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. 2008.11.13 85
  • 87. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 86
  • 88. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 87
  • 89. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 88
  • 90. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is 2008.11.13 89
  • 91. ケース2:対話型シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. OK. Go ahead. Authenticate me! Enter password. Password is NG. Go away! 2008.11.13 90
  • 92. ケース2:対話型シェルセッション • 利点 – ワンタイムパスワードを生成したプロセス自身が検 証も行う • 時刻やカウンタなどの同期機構が不要 • プロセスの消滅と同時にワンタイムパスワードも失効 – ワンタイムパスワードが侵入者以外に漏洩しても 問題にならない • プロセスを生成したユーザ以外には何の価値もない 2008.11.13 91
  • 93. ケース2:対話型シェルセッション • 難点 – メールを受信できる必要がある • 携帯電話のようなメール受信端末を所持していること – メールを送信できる必要がある • SMTPサーバやWebサーバのメール送信CGIなどが 利用可能なこと 2008.11.13 92
  • 94. ケース3:非対話的シェルセッション • 環境変数の有無やその内容を利用します。 – 利用するもの • SSH サーバの AcceptEnv ディレクティブ • SSH クライアントの SendEnv ディレクティブ • 自作プログラム /bin/env_check • TOMOYO Linux の execute_handler ディレクティブ /usr/sbin/sshd /bin/env_chk /bin/env_chk /bin/bash /bin/bash 2008.11.13 93
  • 95. ケース3:非対話的シェルセッション SSHサーバがクライアントからの接続を受け付ける ログイン認証を行う 失敗 成功 SSHサーバが環境変数を設定する 認証成功 SSHサーバが execute_handler を起動する 失敗 環境変数の検査を行う 成功 ログインシェルを起動する 要求されたコマンドを実行する SSHサーバとの接続を切断する 2008.11.13 94
  • 96. ケース3:非対話的シェルセッション Authenticate me! 2008.11.13 95
  • 97. ケース3:非対話的シェルセッション Authenticate me! Enter password. 2008.11.13 96
  • 98. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** 2008.11.13 97
  • 99. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. 2008.11.13 98
  • 100. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. 2008.11.13 99
  • 101. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Let me access shell. NG. Go away! 2008.11.13 100
  • 102. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. 2008.11.13 101
  • 103. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. 2008.11.13 102
  • 104. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. Let me access shell. 2008.11.13 103
  • 105. ケース3:非対話的シェルセッション Authenticate me! Enter password. Password is ****** OK. Authenticated. Use this environ. OK. Ready. Let me access shell. OK. Go ahead. 2008.11.13 104
  • 106. ケース3:非対話的シェルセッション • 利点 – クライアントからは透過に見える • コマンドラインでの操作が不要 • 標準入出力の扱いが不変 – 環境変数をパスワードの代わりに使える • 環境変数名を秘密にできる • 環境変数の内容に応じて権限を分割することも可能 – 対話的シェルセッションを開始する前に適用する ことも可能 2008.11.13 105
  • 107. ケース3:非対話的シェルセッション • 難点 – TOMOYO Linux 専用 • execute_handler を備えているのは TOMOYO Linux だけ – SSHクライアントが環境変数を送信する機能 (SendEnv)をサポートしていない可能性 2008.11.13 106
  • 108. ケース3:非対話的シェルセッション • 応用例:環境変数による権限分割 /usr/sbin/sshd 玄関 ログインシェル /bin/bash /usr/libexec/openssh/sftp-server 読み書きモード 2008.11.13 107
  • 109. ケース3:非対話的シェルセッション 再検査 ダミー /usr/sbin/sshd /bin/env_chk /bin/rw-sftp 読み書きモード /bin/bash ダミー /usr/libexec/openssh/sftp-server /bin/ro-sftp /bin/bash 読み込み専用モード /usr/libexec/openssh/sftp-server 2008.11.13 108
  • 110. ケース4:非対話的シェルセッション • 独自のレイヤーを構築します。 – 利用するもの • scp や sftp コマンドの -S オプション • 振る舞いを監視するためのサーバ側プログラム • 振る舞いを指定するためのクライアント側プログラム • TOMOYO Linux の execute_handler ディレクティブ 2008.11.13 109
  • 111. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 振る舞い指示機能 振る舞い監視機能 (独自プログラム) (独自プログラム) /usr/bin/ssh /usr/sbin/sshd 2008.11.13 110
  • 112. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2 振る舞い指示機能 振る舞い監視機能 (独自プログラム) (独自プログラム) /usr/bin/ssh /usr/sbin/sshd 2008.11.13 111
  • 113. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2 振る舞い指示機能 3 振る舞い監視機能 (独自プログラム) (独自プログラム) /usr/bin/ssh /usr/sbin/sshd 2008.11.13 112
  • 114. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2 振る舞い指示機能 3 振る舞い監視機能 (独自プログラム) 4 (独自プログラム) /usr/bin/ssh /usr/sbin/sshd 2008.11.13 113
  • 115. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2 振る舞い指示機能 3 振る舞い監視機能 (独自プログラム) 4 (独自プログラム) 5 /usr/bin/ssh /usr/sbin/sshd 2008.11.13 114
  • 116. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 1 2 振る舞い指示機能 3 振る舞い監視機能 (独自プログラム) 4 (独自プログラム) 5 Go! /usr/bin/ssh /usr/sbin/sshd 2008.11.13 115
  • 117. ケース4:非対話的シェルセッション アプリケーション層 アプリケーション層 /usr/bin/ssh /usr/sbin/sshd 2008.11.13 116
  • 118. ケース4:非対話的シェルセッション • 利点 – 標準の機能で利用できない要素(標準入出力や コマンドラインパラメータなど)を使える – 環境変数と組み合わせて利用できる • 独自認証対応の可否に応じた権限分割ができる 2008.11.13 117
  • 119. ケース4:非対話的シェルセッション • 難点 – クライアント側にもプログラムを用意する必要があ る。 2008.11.13 118
  • 120. PAMではできないの? • 自由度・難易度が違います。 – 標準入出力やパラメータなどを独占できるので、 他のPAMモジュールとの干渉が起こりません。 • 誰にでも作ることができます。 – RFCなどの標準に縛られません。 2008.11.13 119
  • 121. PAMではできないの? • クライアント側の対応が不要です。 – PAMの場合はクライアントが対応していないと使 えません。 – PAMを通過後に実行される処理(シェルなど)に 対応していないクライアントはありえません。 2008.11.13 120
  • 122. PAMではできないの? • 強制することができます。 – 他のPAMモジュールの設定や実行結果により省 略される心配がありません。 – 生じうる状態遷移がMACにより規定されているの で、想定外の抜け道(バッファオーバーフローや コマンドインジェクション)の心配がありません。 – 外部プログラムの助けを借りるのが容易です。 2008.11.13 121
  • 123. まとめ • ホスト内での認証なので独自プロトコルを利用 可能です。 – アイデアの勝負です。 • 利用可能な要素は無限にあります。 – 正しい振る舞い(状態遷移)を知られない限りブ ルートフォースは不可能です。 • 安価に構築でき、負担の少ない方法を選べま す。 2008.11.13 122
  • 124. ケース5:非シェルセッション • クライアントプログラムをカスタマイズします。 – 利用する機能 • 独自のSSHクライアントプログラム(例えば JSCH) • TOMOYO Linux の task.state キーワード アプリケーション層 /usr/sbin/sshd 要求順序監視機能 (TOMOYO Linux) 2008.11.13 123
  • 125. ケース5:非シェルセッション • 利点 – プログラムの実行を伴わずに権限を切り替えでき る • アクセス要求の順序をパスワードの代わりに使用 – 対話的・非対話的シェルセッションを開始する前 に適用することも可能 2008.11.13 124
  • 126. ケース5:非シェルセッション • 難点 – 使える要素が少ない • プログラムの実行を伴わないで実現する必要がある – おそらく TOMOYO Linux 専用 • SSHサーバプログラム(/usr/sbin/sshd)を改造すること なくプロセスの状態変数(task.state)を操作しているた め – クライアントを自作する必要性 2008.11.13 125
  • 127. ケース6:即席ハニーポットの構築 • 侵入者をハニーポットへリダイレクトできます。 – もちろん、強制ログアウトもできます。 /usr/sbin/sshd /bin/bash /bin/bash /bin/timeauth ??? /bin/timeauth /bin/force-logout /bin/bash /bin/bash ??? ??? 2008.11.13 126
  • 128. 論文はこちらです。 • セキュリティ強化OSによるログイン認証の強化 手法 – http://sourceforge.jp/projects/tomoyo/docs/win f2005.pdf – http://sourceforge.jp/projects/tomoyo/docs/win f05-slides.pdf – 3年前に書かれた内容ですので内容が古いです。 – しかし、考え方は現在でも役に立ちますし、実際 に適用することができます。 2008.11.13 127