SSH力をつけよう

Preview:

DESCRIPTION

 

Citation preview

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

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

HardeningZeroHardeningZeroからの反省からの反省

2012/05/29 #ssmjp @togakushi

2222 / 62/ 62/ 62/ 62

もくじもくじ

►► おさらいおさらい

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

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

�� 多段多段sshssh

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

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

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

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

►► まとめまとめ

3333 / 62/ 62/ 62/ 62

前提知識前提知識

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

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

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

おさらいおさらい

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

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

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

::::

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

他にもたくさん!

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以外のログインを拒否以外のログインを拒否))

他にもたくさん!

10101010 / 62/ 62/ 62/ 62

鍵の特徴鍵の特徴

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

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

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

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

できるできる

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

できるできる

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

11111111 / 62/ 62/ 62/ 62

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

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

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

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

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

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

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

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

sshssh

13131313 / 62/ 62/ 62/ 62

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

►►ローカルローカル

►►リモートリモート

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

14141414 / 62/ 62/ 62/ 62

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

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

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

作業端末 サーバ

ssh sshdport

アプリ

別のホスト

port

port

別のホスト

アプリ

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

16161616 / 62/ 62/ 62/ 62

クライアント サーバ

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

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

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

ssh sshd

port

別のホスト

port

アプリ

アプリ

別のホスト

port

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

18181818 / 62/ 62/ 62/ 62

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

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

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

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

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

なるなる

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

ありあり

►►GatewayPortsGatewayPorts=yes/=yes/clientspecifiedclientspecified

19191919 / 62/ 62/ 62/ 62

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

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

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

クライアント サーバ

Client sshdport

別のホスト

httpd

別のホスト

httpdブラウザ

別のホスト

ブラウザ

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

20202020 / 62/ 62/ 62/ 62

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

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

~~~~~~

ヘルプヘルプ~?~?

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

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

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

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

~&~&

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

切断切断~.~.

21212121 / 62/ 62/ 62/ 62

~C~C

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

るる

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

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

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

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

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

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

22222222 / 62/ 62/ 62/ 62

TCP over TCPTCP over TCP

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

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

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

23232323 / 62/ 62/ 62/ 62

NetCatNetCatと絡めると絡める

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

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

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

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

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

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

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>

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をサポートしてる必要なしをサポートしてる必要なし

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

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

秘密鍵は

全部ココ!

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

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

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

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

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」で定義

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

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 ....

32323232 / 62/ 62/ 62/ 62

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

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

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

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

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

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しないと残り続けるしないと残り続ける))

34343434 / 62/ 62/ 62/ 62

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

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

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

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

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

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

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

35353535 / 62/ 62/ 62/ 62

XX転送転送

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

表示表示

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

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

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

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

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 したいしたいしたいしたい!!!!

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

scpscp

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:

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

sshdsshd

41414141 / 62/ 62/ 62/ 62

chrootchroot

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

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

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

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

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

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

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

44444444 / 62/ 62/ 62/ 62

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

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

すか?すか?

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

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

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

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

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

►►--oPreferredAuthenticationsoPreferredAuthentications==publickeypublickey,,passwordpassword

►►--oGSSAPIAuthenticationoGSSAPIAuthentication=no=no

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

46464646 / 62/ 62/ 62/ 62

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

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

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

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

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

いるいる

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

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

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

てて

47474747 / 62/ 62/ 62/ 62

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

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

か?か?

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

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

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

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

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

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

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))))をををを付付付付けるけるけるける

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

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

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

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

52525252 / 62/ 62/ 62/ 62

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

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

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

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

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

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

ないない

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

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

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

53535353 / 62/ 62/ 62/ 62

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

►►MITMMITM攻撃攻撃

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

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

か?か?

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

Client Server

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

第三者

54545454 / 62/ 62/ 62/ 62

SSH_AUTH_SOCKSSH_AUTH_SOCKの横取りの横取り

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

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

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

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

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 ホストホストホストホスト名名名名ホストホストホストホスト名名名名[[[[[[[[::::::::ポートポートポートポートポートポートポートポート]]]]]]]] 」」」」」」」」

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

まとめまとめ

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で確認で確認

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

59595959 / 62/ 62/ 62/ 62

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

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

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

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

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

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

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

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

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

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

60606060 / 62/ 62/ 62/ 62

ユーザの声ユーザの声

61616161 / 62/ 62/ 62/ 62

参考資料参考資料

►►man man sshssh

►►man man ssh_configssh_config

►►man man sshssh--keygenkeygen

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

62626262 / 62/ 62/ 62/ 62

exit

Recommended