ssh力をつけよう

62
1 1 1 1 1 1 / 62 / 62 / 62 / 62 / 62 / 62 / 62 / 62 SSH SSH 力を を付 付けよう けよう けよう けよう 力を を付 付けよう けよう けよう けよう HardeningZero HardeningZero からの反省 からの反省 2012/05/29 #ssmjp @togakushi

Upload: -togakushi

Post on 07-Nov-2014

67.169 views

Category:

Technology


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: SSH力をつけよう

11111111 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

SSHSSH力力力力をををを付付付付けようけようけようけよう力力力力をををを付付付付けようけようけようけよう

HardeningZeroHardeningZeroからの反省からの反省

2012/05/29 #ssmjp @togakushi

Page 2: SSH力をつけよう

2222 / 62/ 62/ 62/ 62

もくじもくじ

►► おさらいおさらい

►► クライアントクライアント((ssh/scpssh/scp))の話の話

�� ポート転送の話ポート転送の話

�� 多段多段sshssh

�� その他の転送の話・他のオプションその他の転送の話・他のオプション

►► サーバサーバ((sshdsshd))の話の話

►► ちょっとした疑問ちょっとした疑問

►► セキュリティの話セキュリティの話

►► まとめまとめ

Page 3: SSH力をつけよう

3333 / 62/ 62/ 62/ 62

前提知識前提知識

►►TCP/IPTCP/IPの基礎の基礎

►►SSHSSHでサーバにログインできるでサーバにログインできる

Page 4: SSH力をつけよう

44444444 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

おさらいおさらい

Page 5: SSH力をつけよう

5555 / 62/ 62/ 62/ 62

RFCRFC

Using DNS to Securely Publish Secure Shell (Using DNS to Securely Publish Secure Shell (SSHSSH) Key ) Key

FingerprintsFingerprintsRFCRFC 42554255

The Secure Shell (The Secure Shell (SSHSSH) Transport Layer Protocol) Transport Layer ProtocolRFCRFC 42534253

The Secure Shell (The Secure Shell (SSHSSH) Connection Protocol) Connection ProtocolRFCRFC 42544254

Generic Message Exchange Authentication for the Secure Generic Message Exchange Authentication for the Secure

Shell Protocol (Shell Protocol (SSHSSH))RFCRFC 42564256

The Secure Shell (The Secure Shell (SSHSSH) Authentication Protocol) Authentication ProtocolRFCRFC 42524252

The Secure Shell (The Secure Shell (SSHSSH) Protocol Architecture) Protocol ArchitectureRFCRFC 42514251

The Secure Shell (The Secure Shell (SSHSSH) Protocol Assigned Numbers) Protocol Assigned NumbersRFCRFC 42504250

RFC1928 : SOCKS Protocol Version 5

Page 6: SSH力をつけよう

6666 / 62/ 62/ 62/ 62

RFCRFC(続き)(続き)

Generic Security Service Application Program Interface Generic Security Service Application Program Interface

((GSSGSS--API)API) Authentication and Key Exchange for the Secure Authentication and Key Exchange for the Secure

Shell (Shell (SSHSSH) Protocol) Protocol

RFCRFC 44446262

RSARSA Key Exchange for the Secure Shell (Key Exchange for the Secure Shell (SSHSSH)) Transport Transport

Layer ProtocolLayer ProtocolRFCRFC 44443232

Elliptic Curve Algorithm Integration in the Secure Shell Elliptic Curve Algorithm Integration in the Secure Shell

Transport LayerTransport LayerRFCRFC 56565656

DiffieDiffie--Hellman Group Exchange for the Secure Shell (Hellman Group Exchange for the Secure Shell (SSHSSH) )

Transport Layer ProtocolTransport Layer ProtocolRFCRFC 44194419

The Secure Shell (The Secure Shell (SSHSSH) Public Key File Format) Public Key File FormatRFCRFC 47164716

Improved Improved ArcfourArcfour Modes for the Secure Shell (Modes for the Secure Shell (SSHSSH) )

Transport Layer ProtocolTransport Layer ProtocolRFCRFC 43454345

The Secure Shell (The Secure Shell (SSHSSH) Transport Layer Encryption Modes) Transport Layer Encryption ModesRFCRFC 43444344

The Secure Shell (The Secure Shell (SSHSSH) Session Channel Break Extension) Session Channel Break ExtensionRFCRFC 43354335

Page 7: SSH力をつけよう

7777 / 62/ 62/ 62/ 62

認証方式認証方式

►►公開鍵認証公開鍵認証

►►パスワード認証パスワード認証

►►ホストベース認証ホストベース認証

►►などなどなどなど

他にもたくさん!

% % % % sshsshsshssh ––––v v v v hogehogehogehoge::::

debug1debug1debug1debug1: Authentications that can continue: : Authentications that can continue: : Authentications that can continue: : Authentications that can continue: publickey,passwordpublickey,passwordpublickey,passwordpublickey,passworddebug1debug1debug1debug1: Next authentication method: : Next authentication method: : Next authentication method: : Next authentication method: publickeypublickeypublickeypublickey

::::

Page 8: SSH力をつけよう

8888 / 62/ 62/ 62/ 62

関連ファイル関連ファイル((クライアントクライアント))

►►設定ファイル設定ファイル

�� ~/.~/.ssh/configssh/config

�� /etc//etc/ssh/ssh_configssh/ssh_config

►►ホスト公開鍵の保存ファイルホスト公開鍵の保存ファイル

�� ~/.~/.ssh/known_hostsssh/known_hosts

�� /etc//etc/ssh/ssh_known_hostsssh/ssh_known_hosts

►►ログイン後に実行するファイルログイン後に実行するファイル

�� ~/.~/.ssh/rcssh/rc

�� /etc//etc/ssh/sshrcssh/sshrc

他にもたくさん!

Page 9: SSH力をつけよう

9999 / 62/ 62/ 62/ 62

関連ファイル関連ファイル((サーバサーバ))

►►設定ファイル設定ファイル

�� /etc//etc/ssh/sshd_configssh/sshd_config

►►ログインユーザの公開鍵ログインユーザの公開鍵

�� ~/.~/.ssh/authorized_keysssh/authorized_keys

►►お知らせお知らせ

�� /etc//etc/motdmotd

►►メンテナンス用メンテナンス用

�� /etc//etc/nologinnologin (root(root以外のログインを拒否以外のログインを拒否))

他にもたくさん!

Page 10: SSH力をつけよう

10101010 / 62/ 62/ 62/ 62

鍵の特徴鍵の特徴

►►秘密鍵と公開鍵は秘密鍵と公開鍵は11対対11のペアからなるのペアからなる

►►秘密鍵からは公開鍵が生成できる秘密鍵からは公開鍵が生成できる

►►公開鍵から秘密鍵は生成公開鍵から秘密鍵は生成((予測予測))できないできない

►►秘密鍵で暗号化したものは公開鍵でのみ復号秘密鍵で暗号化したものは公開鍵でのみ復号

できるできる

►►公開鍵で暗号化したものは秘密鍵でのみ復号公開鍵で暗号化したものは秘密鍵でのみ復号

できるできる

►►フォーマットがフォーマットが33つあるつある((RFC4716/PKCS8/PEMRFC4716/PKCS8/PEM))

Page 11: SSH力をつけよう

11111111 / 62/ 62/ 62/ 62

公開鍵で制限出来ること公開鍵で制限出来ること

►►実行するコマンドを強制実行するコマンドを強制((実行が終わったら即実行が終わったら即

ログアウトログアウト))

►►各種オプションの強制上書き各種オプションの強制上書き

�� sssshh--keygenkeygen ––OOで指定できるのでマニュアル参照で指定できるのでマニュアル参照

�� sshdsshdのマニュアルの”のマニュアルの”AUTHORIZED_KEYSAUTHORIZED_KEYS ファイファイ

ルの形式”を参照ルの形式”を参照

Page 12: SSH力をつけよう

1212121212121212 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

sshssh

Page 13: SSH力をつけよう

13131313 / 62/ 62/ 62/ 62

ポートフォワーディングの種類ポートフォワーディングの種類

►►ローカルローカル

►►リモートリモート

►►ダイナミックダイナミック

Page 14: SSH力をつけよう

14141414 / 62/ 62/ 62/ 62

ローカルポートフォワードローカルポートフォワード

►►クライアントからサーバに対してのトンネルクライアントからサーバに対してのトンネル

�� --L L [bind_address:]port[bind_address:]port::host:hostporthost:hostport

作業端末 サーバ

ssh sshdport

アプリ

別のホスト

port

port

別のホスト

アプリ

Page 15: SSH力をつけよう

15151515 / 62/ 62/ 62/ 62

利用シーン利用シーン

►►リモートデスクトップしたい!!リモートデスクトップしたい!!

�� sshssh ––L L 3389:windows:33893389:windows:3389 sshssh--gatewaygateway

�� rdesktoprdesktop localhostlocalhost

踏み台

SSH-GATEWAY

インター

ネット

Windowsサーバ作業端末

ssh sshdリモートデスクトップ

(TCP/3389)TCP/3389tsclient

Page 16: SSH力をつけよう

16161616 / 62/ 62/ 62/ 62

クライアント サーバ

リモートポートフォワードリモートポートフォワード

►►サーバからクライアントに対してのトンネルサーバからクライアントに対してのトンネル

�� --RR [bind_address:]port[bind_address:]port::host:hostporthost:hostport

ssh sshd

port

別のホスト

port

アプリ

アプリ

別のホスト

port

Page 17: SSH力をつけよう

17171717 / 62/ 62/ 62/ 62

利用シーン利用シーン

►►無理やりログを転送したい!無理やりログを転送したい!

�� ssshsh ––g g ––R R 15121512::syslogsyslog--serverserver::512512 sshssh--gatewaygateway

踏み台

SSH-GATEWAY

作業端末

TCP/1512

サーバ

syslogd

サーバ

syslogd

サーバ

syslogd

sshd

ssh

Page 18: SSH力をつけよう

18181818 / 62/ 62/ 62/ 62

ゲートウェイポートゲートウェイポート

►►フォワーディングの機能を使ってオープンしたフォワーディングの機能を使ってオープンした

ポートに対しては「別のホスト」から接続できなポートに対しては「別のホスト」から接続できな

いい((デフォルトの動作デフォルトの動作))

►►--g g を付けるとを付けると0.0.0.00.0.0.0でバインドして接続可能にでバインドして接続可能に

なるなる

�� リモートポートフォワードはサーバで許可する必要リモートポートフォワードはサーバで許可する必要

ありあり

►►GatewayPortsGatewayPorts=yes/=yes/clientspecifiedclientspecified

Page 19: SSH力をつけよう

19191919 / 62/ 62/ 62/ 62

ダイナミックフォワードダイナミックフォワード

►►サーバをサーバをsockssocksのプロキシにするのプロキシにする

�� --DD [[bind_address:]porbind_address:]portt

クライアント サーバ

Client sshdport

別のホスト

httpd

別のホスト

httpdブラウザ

別のホスト

ブラウザ

ブラウザが指定したホスト

Page 20: SSH力をつけよう

20202020 / 62/ 62/ 62/ 62

エスケープキャラクタエスケープキャラクタ

►► エンター直後の「~」エンター直後の「~」

~~~~~~

ヘルプヘルプ~?~?

コマンドラインを開くコマンドラインを開く~C~C

ポートフォワードの情報を表示ポートフォワードの情報を表示~#~#

バックグランドにするバックグランドにする

((通信がなくなるとログアウト通信がなくなるとログアウト))

~&~&

バックグランドにするバックグランドにする~^Z~^Z

切断切断~.~.

Page 21: SSH力をつけよう

21212121 / 62/ 62/ 62/ 62

~C~C

►►ログインしたままポートフォワードの追加ができログインしたままポートフォワードの追加ができ

るる

�� ローカルローカル//リモートリモート//ダイナミックダイナミック

�� ゲートウェイポートは指定できないゲートウェイポートは指定できない((設定値に従う設定値に従う))

►►リモートポートフォワードをキャンセルできるリモートポートフォワードをキャンセルできる

�� OpenSSHOpenSSH--6.06.0ですべてキャンセル可能になったですべてキャンセル可能になった

►►クライアントでコマンドが実行できるクライアントでコマンドが実行できる

►►「「helphelp」って打ったらヘルプが出る」って打ったらヘルプが出る

Page 22: SSH力をつけよう

22222222 / 62/ 62/ 62/ 62

TCP over TCPTCP over TCP

►►遅い回線で使うと死ぬ遅い回線で使うと死ぬ

�� TCPTCPは再接続を行うは再接続を行う

�� タイムアウトが発生すると残念な結果に!タイムアウトが発生すると残念な結果に!

Page 23: SSH力をつけよう

23232323 / 62/ 62/ 62/ 62

NetCatNetCatと絡めると絡める

►►標準入力を加工せずにそのままネットワークに標準入力を加工せずにそのままネットワークに

流すプログラム流すプログラム

►►telnettelnetと違うの?と違うの?

�� サーバにもなれますサーバにもなれます

�� 右から左に受け流せます右から左に受け流せます

►►GNUGNUととBSDBSDでオプションが違うのでハマルでオプションが違うのでハマル

Page 24: SSH力をつけよう

24242424 / 62/ 62/ 62/ 62

多段多段sshssh

►►ダイナミックポートフォワード経由ダイナミックポートフォワード経由

�� ncncでプロキシを指定してトンネルでプロキシを指定してトンネル

�� クライアントにクライアントにncncが必要が必要

sshssh ––D 1080 <D 1080 <sshssh--gateway>gateway>

sshssh ––oProxyCommandoProxyCommand==‘‘ncnc ––x x localhost:1080localhost:1080’’ <target<target--host>host>

►►踏み台から踏み台からncncを実行して繋ぐを実行して繋ぐ

�� 踏み台に踏み台にncncが必要が必要

sshssh ––oProxyCommandoProxyCommand==‘‘sshssh <<sshssh--gateway> gateway> ncnc %h %p%h %p’’ <target<target--

host>host>

Page 25: SSH力をつけよう

25252525 / 62/ 62/ 62/ 62

netcatnetcat modemode

►►OpenSSHOpenSSH--5.45.4で実装で実装((--WWオプションオプション))

�� CentOS6CentOS6はは5.35.3ベースベース

�� --W <W <転送先ホスト転送先ホスト>:<>:<転送先ポート転送先ポート>> 経由ホスト経由ホスト

sshssh ––oProxyCommandoProxyCommand==‘‘sshssh ––W %W %h:%ph:%p <<sshssh--gateway>gateway>’’ <target<target--

host>host>

�� 踏み台が踏み台がnetcatnetcat modemodeをサポートしてる必要なしをサポートしてる必要なし

�� 踏み台にログインできる必要なし踏み台にログインできる必要なし((認証のみ必要認証のみ必要))

Page 26: SSH力をつけよう

26262626 / 62/ 62/ 62/ 62

超多段超多段

クライアント HOST-A

HOST-A HOST-B

HOST-B HOST-C

HOST-C HOST-D

ユーザ名:login-aポート:12345公開鍵:KeyA

ユーザ名:login-bポート:10022公開鍵:KeyB

ユーザ名:login-cポート:22公開鍵:KeyC

ユーザ名:login-dポート:60022公開鍵:KeyD

秘密鍵は

全部ココ!

Page 27: SSH力をつけよう

27272727 / 62/ 62/ 62/ 62

どうする?がんばる?どうする?がんばる?

sshsshsshsshsshsshsshssh ––––––––oProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommand========’’’’’’’’sshsshsshsshsshsshsshssh ––––––––oProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommand========¥¥¥¥¥¥¥¥’’’’’’’’sshsshsshsshsshsshsshssh ––––––––oProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommandoProxyCommand========¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥’………’………’………’………’………’………’………’………¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥’’’’’’’’ ………………………………………………………………––––––––W %W %W %W %W %W %W %W %h:%ph:%ph:%ph:%ph:%ph:%ph:%ph:%p ––––––––i i i i i i i i KeyAKeyAKeyAKeyAKeyAKeyAKeyAKeyA loginloginloginloginloginloginloginlogin--------a@a@a@a@a@a@a@a@HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------AAAAAAAA’’’’’’’’--------i i i i i i i i KeyDKeyDKeyDKeyDKeyDKeyDKeyDKeyD loginloginloginloginloginloginloginlogin--------d@d@d@d@d@d@d@d@HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------DDDDDDDD

►►四段四段四段四段四段四段四段四段ProxyCommandProxyCommandProxyCommandProxyCommandProxyCommandProxyCommandProxyCommandProxyCommandをををを重重重重ねればねればねればねればをををを重重重重ねればねればねればねればOKOKOKOKOKOKOKOK

►►ポートポートポートポートややややログインログインログインログイン名名名名、、、、鍵鍵鍵鍵のののの指定指定指定指定をををを忘忘忘忘れずにれずにれずにれずにポートポートポートポートややややログインログインログインログイン名名名名、、、、鍵鍵鍵鍵のののの指定指定指定指定をををを忘忘忘忘れずにれずにれずにれずに

►►クォートのエスケープが必要クォートのエスケープが必要

Page 28: SSH力をつけよう

28282828 / 62/ 62/ 62/ 62

~/.~/.ssh/configssh/config

Host Host HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------AAAAAAAA

User loginUser login--aa

Port 12345Port 12345

IdentityFileIdentityFile KeyAKeyA

Host Host HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------BBBBBBBB

User loginUser login--bb

Port 10022Port 10022

IdentityFileIdentityFile KeyBKeyB

ProxyCommandProxyCommand sshssh ––

W %W %h:%ph:%p HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------AAAAAAAA

Host Host HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------CCCCCCCC

User loginUser login--cc

IdentityFileIdentityFile KeyCKeyC

ProxyCommandProxyCommand sshssh ––

W %W %h:%ph:%p HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------BBBBBBBB

Host Host HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------DDDDDDDD

User loginUser login--dd

Port 60022Port 60022

IdentityFileIdentityFile KeyDKeyD

ProxyCommandProxyCommand sshssh ––

W %W %h:%ph:%p HOSTHOSTHOSTHOSTHOSTHOSTHOSTHOST--------CCCCCCCC

Page 29: SSH力をつけよう

29292929 / 62/ 62/ 62/ 62

内容内容

クライアント HOST-A

HOST-A HOST-B

HOST-B HOST-C

HOST-C HOST-D

「Host HOST-A」で定義

「Host HOST-B」で定義

「Host HOST-C」で定義

「Host HOST-D」で定義

Page 30: SSH力をつけよう

30303030 / 62/ 62/ 62/ 62

一撃!!一撃!!

クライアント HOST-A

HOST-A HOST-B

HOST-B HOST-C

HOST-C HOST-D

ユーザ名:login-aポート:12345公開鍵:KeyA

ユーザ名:login-bポート:10022公開鍵:KeyB

ユーザ名:login-cポート:22公開鍵:KeyC

ユーザ名:login-dポート:60022公開鍵:KeyD

秘密鍵は

全部ココ!

sshsshsshssh HOSTHOSTHOSTHOST----DDDD

Page 31: SSH力をつけよう

31313131 / 62/ 62/ 62/ 62

scpscpも!!も!!

クライアント HOST-A

HOST-A HOST-B

HOST-B HOST-C

HOST-C HOST-D

ユーザ名:login-aポート:12345公開鍵:KeyA

ユーザ名:login-bポート:10022公開鍵:KeyB

ユーザ名:login-cポート:22公開鍵:KeyC

ユーザ名:login-dポート:60022公開鍵:KeyD

秘密鍵は

全部ココ!

scpscpscpscp HOSTHOSTHOSTHOST----D:file

D:fileD:fileD:file ....

Page 32: SSH力をつけよう

32323232 / 62/ 62/ 62/ 62

~/.~/.ssh/configssh/configの活用の活用

►►長くなりがちのコマンドラインを簡潔に長くなりがちのコマンドラインを簡潔に

►►多段をすっきりかける多段をすっきりかける

►►デフォルトのオプションを好みに設定デフォルトのオプションを好みに設定

►►ssh/scpssh/scpで利用で利用

Page 33: SSH力をつけよう

33333333 / 62/ 62/ 62/ 62

sshssh--agentagent

►► 秘密鍵を一時的に覚えさせることができる秘密鍵を一時的に覚えさせることができる

►► 複数の鍵の登録が可能複数の鍵の登録が可能

►► パスフレーズはパスフレーズはagentagentに登録するときだけ尋ねられるに登録するときだけ尋ねられる

►► 接続時に適切な鍵を自動的に選択接続時に適切な鍵を自動的に選択

►► エージェントを使わせたいプロセスをエージェント配下エージェントを使わせたいプロセスをエージェント配下

に置く形で起動に置く形で起動

% % % % % % % % sshsshsshsshsshsshsshssh--------agent bashagent bashagent bashagent bashagent bashagent bashagent bashagent bash

% % % % % % % % sshsshsshsshsshsshsshssh--------add .add .add .add .add .add .add .add .ssh/id_rsassh/id_rsassh/id_rsassh/id_rsassh/id_rsassh/id_rsassh/id_rsassh/id_rsa

注意:引数なしで注意:引数なしでsshssh--agentagentを立ち上げるとバックグラウンドで実行されるだけを立ち上げるとバックグラウンドで実行されるだけ

で何も起こらないで何も起こらない((プロセスはプロセスはkillkillしないと残り続けるしないと残り続ける))

Page 34: SSH力をつけよう

34343434 / 62/ 62/ 62/ 62

エージェント転送(鍵の転送)エージェント転送(鍵の転送)

►►秘密鍵は接続元の端末にないとダメ秘密鍵は接続元の端末にないとダメ

►►ssnssn--agentagentに鍵を登録した状態でに鍵を登録した状態で--AAを指定してを指定して

ログインし、ログイン先のログインし、ログイン先の//tmptmpから秘密鍵を読から秘密鍵を読

めるようにするめるようにする

�� UNIX domain socketsUNIX domain socketsを利用を利用((ファイルサイズゼロファイルサイズゼロ))

►►このファイルが読み込めると悪用できるこのファイルが読み込めると悪用できる

Page 35: SSH力をつけよう

35353535 / 62/ 62/ 62/ 62

XX転送転送

►►リモートのリモートのGUIGUIアプリケーションをクライアントでアプリケーションをクライアントで

表示表示

�� クライアントがクライアントがUnix/LinuxUnix/Linuxならなら--X(X(--YY))を付けて実行を付けて実行

�� WindowsWindowsの場合はの場合はXmingXmingを併用を併用

►►ログイン後にリモートでアプリを起動させるだけログイン後にリモートでアプリを起動させるだけ

Page 36: SSH力をつけよう

36363636 / 62/ 62/ 62/ 62

簡易簡易VPNVPN

►►--wwででtuntun/tap/tapををsshsshでトンネルできるでトンネルできる

�� OpenSSHOpenSSH--4.34.3で実装で実装

�� クライアントのクライアントのrootrootユーザがサーバに対してユーザがサーバに対してrootrootとと

してログインできることが条件してログインできることが条件

�� サーバ側で設定サーバ側で設定((許可許可))が必要が必要

►►PermitTunnelPermitTunnel=yes/point=yes/point--toto--point/point/ethernetethernet

Page 37: SSH力をつけよう

37373737 / 62/ 62/ 62/ 62

利用シーン利用シーン

►►インターネットに繋がってない環境のホストをインターネットに繋がってない環境のホストを

アップデートするアップデートする

作業端末 踏み台 HOST-A

インター

ネット

# # # # sshsshsshssh ––––w0:0 w0:0 w0:0 w0:0 ––––oTunneloTunneloTunneloTunnel====ethernetethernetethernetethernet sshsshsshssh----gatewaygatewaygatewaygateway# # # # ifconfigifconfigifconfigifconfig tap0tap0tap0tap0 192.168.254.1192.168.254.1192.168.254.1192.168.254.1# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/ipv4/ip_forwardipv4/ip_forwardipv4/ip_forwardipv4/ip_forward

# # # # ifconfigifconfigifconfigifconfig tap0tap0tap0tap0 192.168.254.2192.168.254.2192.168.254.2192.168.254.2# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/# echo 1 > /proc/sys/net/ipv4/ip_forwardipv4/ip_forwardipv4/ip_forwardipv4/ip_forward# # # # iptablesiptablesiptablesiptables ––––t t t t natnatnatnat ----A A A A POSTROUTINGPOSTROUTINGPOSTROUTINGPOSTROUTING ––––o o o o tap0tap0tap0tap0 ––––j MASQUERADEj MASQUERADEj MASQUERADEj MASQUERADEDefaultGWDefaultGWDefaultGWDefaultGW=192.168.254.1=192.168.254.1=192.168.254.1=192.168.254.1

DefaultGWDefaultGWDefaultGWDefaultGW====踏踏踏踏みみみみ台台台台ののののeth0eth0eth0eth0NameserverNameserverNameserverNameserver====作業端末作業端末作業端末作業端末からからからから見見見見

えるえるえるえるDNSDNSDNSDNS

yum update したいしたいしたいしたい!!!!

Page 38: SSH力をつけよう

3838383838383838 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

scpscp

Page 39: SSH力をつけよう

39393939 / 62/ 62/ 62/ 62

--33

►►OpenSSHOpenSSH--5.75.7で実装で実装

% scp HOST-A:file HOST-B:

HOST-AからHOST-Bに接続する

鍵交換はしてくれないので事前に済ませておく

HOST-A

作業端末

file

HOST-B

file

HOST-A

作業端末

file

HOST-B

file

% scp -3 HOST-A:file HOST-B:

Page 40: SSH力をつけよう

4040404040404040 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

sshdsshd

Page 41: SSH力をつけよう

41414141 / 62/ 62/ 62/ 62

chrootchroot

►►OpenSSHOpenSSH--4.84.8で正式サポートで正式サポート

►►認証完了後に指定ディレクトリに認証完了後に指定ディレクトリにchroot(8chroot(8))するする

►►サブシステムにサブシステムにinternalinternal--sftpsftpが追加が追加

�� chrootchroot後の環境に簡単に後の環境に簡単にsftpsftpを提供を提供

Page 42: SSH力をつけよう

42424242 / 62/ 62/ 62/ 62

ssftpftponlyonly

►►シェルログインさせたくないなーシェルログインさせたくないなー

►►sshd_configsshd_configにこんな感じのものを追加してあにこんな感じのものを追加してあ

げるげる

Match group Match group Match group Match group sftponlysftponlysftponlysftponlyChrootDirectoryChrootDirectoryChrootDirectoryChrootDirectory /home/%u/home/%u/home/%u/home/%uX11ForwardingX11ForwardingX11ForwardingX11Forwarding nonononoAllowTcpForwardingAllowTcpForwardingAllowTcpForwardingAllowTcpForwarding nonononoForceCommandForceCommandForceCommandForceCommand internalinternalinternalinternal----sftpsftpsftpsftp

Page 43: SSH力をつけよう

4343434343434343 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

ちょっとした疑問集ちょっとした疑問集

Page 44: SSH力をつけよう

44444444 / 62/ 62/ 62/ 62

sshsshの接続が遅いの接続が遅い

►►認証が始まるまでが遅い→名前解決できてま認証が始まるまでが遅い→名前解決できてま

すか?すか?

�� /etc/hosts/etc/hostsをちゃんと設定するをちゃんと設定する

�� UseDNSUseDNSををnonoにしてみるにしてみる

►►ログインが遅い→認証メソッドの見直しをログインが遅い→認証メソッドの見直しを

�� GSSAPIAuthenticationGSSAPIAuthenticationを無効にしてみるを無効にしてみる

�� クライアント側で認証メソッドの順番、選択が出来るクライアント側で認証メソッドの順番、選択が出来る

►►--oPreferredAuthenticationsoPreferredAuthentications==publickeypublickey,,passwordpassword

►►--oGSSAPIAuthenticationoGSSAPIAuthentication=no=no

Page 45: SSH力をつけよう

45454545 / 62/ 62/ 62/ 62

うまく繋がらないうまく繋がらない

►►保存してるホストの公開鍵が一致しない保存してるホストの公開鍵が一致しない

�� 意図的に再生成した意図的に再生成した((再インストール再インストール)/IP)/IPアドレスがアドレスが

変わった変わった//乗っ取られた乗っ取られた

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.

Please contact your system administrator.

Add correct host key in /home/username/.ssh/known_hosts to get rid of this message.

Offending RSA key in /home/username/.ssh/known_hosts:20

remove with: ssh-keygen -f "/home/username/.ssh/known_hosts" -R XXXXXXXX

Page 46: SSH力をつけよう

46464646 / 62/ 62/ 62/ 62

sshsshはちゃんと繋がるのにはちゃんと繋がるのに

scpscpだけが失敗するだけが失敗する

►►シェルの初期化ファイルシェルの初期化ファイル(.profile, .*(.profile, .*rcrcとかとか))がが

何か出力してると失敗する何か出力してると失敗する

�� scpscpはファイルの受け渡しに標準入出力を利用してはファイルの受け渡しに標準入出力を利用して

いるいる

►►接続先にも接続先にもscpscpが必要が必要(PATH(PATH通ってますか?通ってますか?))

►►どどーしてもーしても何か設定したい人何か設定したい人

�� scpscpのセッションはのセッションはTERMTERMががdumbdumbなのでなんとかしなのでなんとかし

てて

Page 47: SSH力をつけよう

47474747 / 62/ 62/ 62/ 62

XX転送がうまくいかない転送がうまくいかない

►►ただしく環境変数ただしく環境変数DISPLAYDISPLAYがセットされてますがセットされてます

か?か?

►►xorgxorg--x11x11--xauthxauthがインストールされてますか?がインストールされてますか?

Page 48: SSH力をつけよう

48484848 / 62/ 62/ 62/ 62

sshdsshdを再起動したらを再起動したら

セッション切れますか?セッション切れますか?

►►切れません切れません

pstreepstreepstreepstree((((抜粋抜粋抜粋抜粋))))

├─├─├─├─sshd,682sshd,682sshd,682sshd,682

││││ └─└─└─└─sshd,2728sshd,2728sshd,2728sshd,2728

││││ └─└─└─└─sshd,2869sshd,2869sshd,2869sshd,2869

││││ └─└─└─└─zsh,2870zsh,2870zsh,2870zsh,2870

最初に起動するデーモン(再起動対象)

※落ちても通信中のセッションは切れない

セッション管理用(落ちると切れる)

通信してるプロセス(特権分離によりユーザ権限で実行)

Page 49: SSH力をつけよう

49494949 / 62/ 62/ 62/ 62

sshd_configsshd_configを編集したんだけど、を編集したんだけど、

内容が正しいか検証したい内容が正しいか検証したい

►►ポートを変えて新しく作った設定ファイルを指定ポートを変えて新しく作った設定ファイルを指定

して新しくデーモンを起動させてテストするして新しくデーモンを起動させてテストする

# # # # ////usr/sbin/sshdusr/sbin/sshdusr/sbin/sshdusr/sbin/sshd ----f f f f new_new_new_new_sshd_configsshd_configsshd_configsshd_config ----p 10022 p 10022 p 10022 p 10022 ––––DDDD

•コマンドラインコマンドラインコマンドラインコマンドラインののののオプションオプションオプションオプションはははは設定設定設定設定ファイルファイルファイルファイルよりよりよりより優先優先優先優先されるされるされるされる

•----DDDDででででデーモンデーモンデーモンデーモンとしてとしてとしてとして起動起動起動起動させないさせないさせないさせない((((Ctrl+CCtrl+CCtrl+CCtrl+Cでででで止止止止めれるめれるめれるめれる))))

•必要必要必要必要にににに応応応応じてじてじてじてデバッグオプションデバッグオプションデバッグオプションデバッグオプション((((----dddd~~~~----dddddddddddd))))をををを付付付付けるけるけるける

•秘密鍵秘密鍵秘密鍵秘密鍵はははは読読読読めるめるめるめる場所場所場所場所にににに準備準備準備準備するするするする

Page 50: SSH力をつけよう

50505050 / 62/ 62/ 62/ 62

接続元別に認証方式を変えたい接続元別に認証方式を変えたい

►►ローカルから繋いだときはパスワード認証で、ローカルから繋いだときはパスワード認証で、

インターネット経由のときは公開鍵認証にしたインターネット経由のときは公開鍵認証にした

いい

�� MacthMacthディレクティブで接続条件に応じて設定を上ディレクティブで接続条件に応じて設定を上

書きできる書きできる((OpenSSHOpenSSH--4.44.4で実装で実装))

►►MacthMacthが使えない環境が使えない環境((CentOS5CentOS5とかとか))はポートを変えてはポートを変えて

sshdsshdをを22つあげるつあげる

PasswordAuthenticationPasswordAuthenticationPasswordAuthenticationPasswordAuthentication nononono::::

MatchMatchMatchMatch 192.168.1.*192.168.1.*192.168.1.*192.168.1.*PasswordAuthenticationPasswordAuthenticationPasswordAuthenticationPasswordAuthentication yesyesyesyes

Page 51: SSH力をつけよう

5151515151515151 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

セキュリティの話セキュリティの話

Page 52: SSH力をつけよう

52525252 / 62/ 62/ 62/ 62

sshsshにまつわる脆弱性にまつわる脆弱性

►►どんなにがんばってもどんなにがんばっても6553665536種類の鍵しか生成種類の鍵しか生成

されない!!されない!!

�� Debian3.2Debian3.2~~3.93.9までに適応されていたまでに適応されていたOpenSSLOpenSSLのの

パッチのバグパッチのバグ(2008.05)(2008.05)

�� 英数字英数字((大小大小))3文字のパスワードのパターンより少3文字のパスワードのパターンより少

ないない

►►6553665536種類種類((××暗号化の種類・強度暗号化の種類・強度))の鍵はブの鍵はブ

ラックリストとして登録ラックリストとして登録

�� 基本的に接続拒否基本的に接続拒否

Page 53: SSH力をつけよう

53535353 / 62/ 62/ 62/ 62

sshsshにまつわる攻撃にまつわる攻撃

►►MITMMITM攻撃攻撃

�� 鍵のフィンガープリント見てますか?鍵のフィンガープリント見てますか?

�� あなたがログインしようとしているホストは本物ですあなたがログインしようとしているホストは本物です

か?か?

►►パスワード認証に対しての総当り攻撃パスワード認証に対しての総当り攻撃

Client Server

ドメインの詐称やarp poisoningなどによるなりすまし

第三者

Page 54: SSH力をつけよう

54545454 / 62/ 62/ 62/ 62

SSH_AUTH_SOCKSSH_AUTH_SOCKの横取りの横取り

►►「「sshssh ––AAは危ないから気を付けな」って先輩には危ないから気を付けな」って先輩に

習いましたよね?習いましたよね?

►►信用できないホストを踏み台にてエージェント信用できないホストを踏み台にてエージェント

転送してたらどうなるか転送してたらどうなるか

Page 55: SSH力をつけよう

55555555 / 62/ 62/ 62/ 62

known_hostsknown_hostsのハッシュ化のハッシュ化

►►接続済みサーバの公開鍵を保存するファイル接続済みサーバの公開鍵を保存するファイル

�� ホスト名、ホスト名、IPIPアドレスが書いてあるアドレスが書いてある

�� このホストから次に接続したホストの一覧このホストから次に接続したホストの一覧

►► sshsshsshsshsshsshsshssh--------keygenkeygenkeygenkeygenkeygenkeygenkeygenkeygen ––––––––H H H H H H H H ––––––––f ~/.f ~/.f ~/.f ~/.f ~/.f ~/.f ~/.f ~/.ssh/known_hostsssh/known_hostsssh/known_hostsssh/known_hostsssh/known_hostsssh/known_hostsssh/known_hostsssh/known_hosts

�� OpenSSHOpenSSHOpenSSHOpenSSHOpenSSHOpenSSHOpenSSHOpenSSH--------4.04.04.04.04.04.04.04.0でででで実装実装実装実装でででで実装実装実装実装

�� HashKnownHostsHashKnownHostsHashKnownHostsHashKnownHostsHashKnownHostsHashKnownHostsHashKnownHostsHashKnownHosts=yes=yes=yes=yes=yes=yes=yes=yesででででハッシュハッシュハッシュハッシュ化化化化してからしてからしてからしてから追加追加追加追加ででででハッシュハッシュハッシュハッシュ化化化化してからしてからしてからしてから追加追加追加追加

�� ホストホストホストホストをををを探探探探すときはすときはすときはすときは「「「「ホストホストホストホストをををを探探探探すときはすときはすときはすときは「「「「--------F F F F F F F F ホストホストホストホスト名名名名ホストホストホストホスト名名名名[[[[[[[[::::::::ポートポートポートポートポートポートポートポート]]]]]]]]」」」」」」」」

�� 削除削除削除削除するときはするときはするときはするときは「「「「削除削除削除削除するときはするときはするときはするときは「「「「--------R R R R R R R R ホストホストホストホスト名名名名ホストホストホストホスト名名名名[[[[[[[[::::::::ポートポートポートポートポートポートポートポート]]]]]]]] 」」」」」」」」

Page 56: SSH力をつけよう

5656565656565656 / 62/ 62/ 62/ 62/ 62/ 62/ 62/ 62

まとめまとめ

Page 57: SSH力をつけよう

57575757 / 62/ 62/ 62/ 62

バージョンに注意バージョンに注意

►►よく新しい機能よく新しい機能((FeaturesFeatures))が追加されるのでリが追加されるのでリ

リースノートは読むべしリースノートは読むべし

►►使う環境によって使えないオプションがある使う環境によって使えないオプションがある

�� CentOS5CentOS5 →→ OpenSSHOpenSSH--4.34.3

�� CentOS6CentOS6 →→ OpenSSHOpenSSH--5.35.3

�� Fedora16Fedora16 →→ OpenSSHOpenSSH--5.85.8

�� MacOSMacOS →→ OpenSSHOpenSSH--5.65.6

�� Ubuntu12.04Ubuntu12.04 →→ OpenSSHOpenSSH--5.95.9

►►sshssh ––VVで確認で確認

Page 58: SSH力をつけよう

58585858 / 62/ 62/ 62/ 62

自前でコンパイルするなら自前でコンパイルするなら

►►コンパイルオプションに注意コンパイルオプションに注意

�� ○○をサポートする○○をサポートする//しないが大量に選べるしないが大量に選べる

OpenSSHOpenSSHOpenSSHOpenSSH has been configured with the following options:has been configured with the following options:has been configured with the following options:has been configured with the following options:

PAM support: noPAM support: noPAM support: noPAM support: no

OSFOSFOSFOSF SIASIASIASIA support: nosupport: nosupport: nosupport: no

KerberosVKerberosVKerberosVKerberosV support: nosupport: nosupport: nosupport: no

SELinuxSELinuxSELinuxSELinux support: nosupport: nosupport: nosupport: no

Smartcard support: Smartcard support: Smartcard support: Smartcard support:

S/KEY support: noS/KEY support: noS/KEY support: noS/KEY support: no

TCP Wrappers support: noTCP Wrappers support: noTCP Wrappers support: noTCP Wrappers support: no

MD5MD5MD5MD5 password support: nopassword support: nopassword support: nopassword support: no

libeditlibeditlibeditlibedit support: nosupport: nosupport: nosupport: no

Solaris process contract support: noSolaris process contract support: noSolaris process contract support: noSolaris process contract support: no

Solaris project support: noSolaris project support: noSolaris project support: noSolaris project support: no

BSD Auth support: noBSD Auth support: noBSD Auth support: noBSD Auth support: no

Page 59: SSH力をつけよう

59595959 / 62/ 62/ 62/ 62

運用方法の再考運用方法の再考

►►sshsshが保護してくれるのは通信経路だけ!が保護してくれるのは通信経路だけ!

�� アカウントアカウント//パスワードパスワード//鍵の運用方法を間違うとす鍵の運用方法を間違うとす

べてが台無しにべてが台無しに

►►FWFWの意味がなくなる!の意味がなくなる!

�� TCP/TCP/22(ssh22(ssh))以外拒否してるから安心なの?以外拒否してるから安心なの?

�� ネットワークの利用規約はよく読んでネットワークの利用規約はよく読んで

►►踏み台を運用している人は設定の見直しを!踏み台を運用している人は設定の見直しを!

�� その設定は本当に必要ですか?その設定は本当に必要ですか?

�� デフォルト値は把握しておくべきデフォルト値は把握しておくべき

Page 60: SSH力をつけよう

60606060 / 62/ 62/ 62/ 62

ユーザの声ユーザの声

Page 61: SSH力をつけよう

61616161 / 62/ 62/ 62/ 62

参考資料参考資料

►►man man sshssh

►►man man ssh_configssh_config

►►man man sshssh--keygenkeygen

►►http://http://www.openssh.orgwww.openssh.org/ /

Page 62: SSH力をつけよう

62626262 / 62/ 62/ 62/ 62

exit