More Related Content
PPTX
明日からはじめられる Docker + さくらvpsを使った開発環境構築 PDF
PDF
PPTX
PPTX
Cloud Spanner をより便利にする運用支援ツールの紹介 PDF
PDF
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ What's hot
PDF
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game... PDF
PDF
PDF
PDF
SQLアンチパターン読書会 第10章 サーティワンフレーバー PDF
アーキテクチャから理解するPostgreSQLのレプリケーション PDF
PPTX
PDF
rsyncやシェルでバックアップするよりも簡単にOSSのBaculaでバックアップしてみよう PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開 PPT
PPTX
PDF
PDF
PDF
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料) PDF
Docker入門: コンテナ型仮想化技術の仕組みと使い方 ODP
PDF
Similar to sshdのお話
PDF
PDF
PPTX
PPTX
ODP
OpenSSH User EnumerationTime-Based Attack と Python-paramiko PDF
PDF
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File) PPTX
PDF
マルチプラットホームになった PowerShell 6 でクロスプラットホームする PDF
マルチプラットホームになった PowerShell 6 でクロスプラットホームする PPTX
PPTX
PPTX
PDF
PDF
振る舞いに基づくSSHブルートフォースアタック対策 PPTX
PPTX
PPT
PPTX
PDF
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack 基礎操作編 More from (^-^) togakushi
PPTX
PDF
PDF
PDF
PDF
ODP
ODP
tcpdumpとtcpreplayとtcprewriteと他。 PDF
PDF
PDF
PDF
PPT
sshdのお話
- 1.
- 2.
- 3.
はじめに
● 特に記述がない限り、全てプロトコル 2が対
象
– OpenSSH-5.4 からプロトコル 1 はデフォルトで無
効
● 動作確認は Linux のみ( OpenSSH の移植
版)
● 暗号化とか認証とか詳しくないので、間違っ
てたら教えて欲しい!!
3 / 69
- 4.
OpenSSH リリース状況
バージョン リリース日バージョン リリース日
OpenSSH-4.1p1 2005/05/26 OpenSSH-5.2p1 2009/02/02
OpenSSH-4.2p1 2005/09/01 OpenSSH-5.3p1 2009/10/01
OpenSSH-4.3p2 2006/02/11 OpenSSH-5.4p1 2010/03/08
OpenSSH-4.4p1 2006/09/27 OpenSSH-5.5p1 2010/04/16
OpenSSH-4.5p1 2006/11/07 OpenSSH-5.6p1 2010/08/23
OpenSSH-4.6p1 2007/03/08 OpenSSH-5.7p1 2011/01/24
OpenSSH-4.7p1 2007/09/05 OpenSSH-5.8p2 2011/05/03
OpenSSH-4.8p1 ない OpenSSH-5.9p1 2011/09/06
OpenSSH-4.9p1 2008/03/31 OpenSSH-6.0p1 2012/04/22
OpenSSH-5.0p1 2008/04/03 OpenSSH-6.1p1 2012/08/29
OpenSSH-5.1p1 2008/07/21 OpenSSH-6.2p1 2013/03/22
4 / 69
- 5.
前回までのあらすじ
● SSH クライアント
–http://www.slideshare.net/tohakushi/ssh-13118950
● 周辺ツール
– http://www.slideshare.net/tohakushi/ssh-15554045
● ~/.ssh/config
– https://docs.google.com/presentation/d/1TGaiAIKUAC2Y_hgN
● 多段
– https://docs.google.com/presentation/d/1Zdg6qe0eA_353zyLz
5 / 69
- 6.
- 7.
- 8.
- 9.
- 10.
パターン
● IP アドレスやドメインの一部を指定
–0 個以上の非空白文字: *
– 1 個の非空白文字: ?
– 除外: !
– カンマで連結可能
● 例
– 192.168.1.? → 192.168.1.1 〜 9
– *.co.jp → 任意の .co.jp ドメイン
10 / 69
- 11.
- 12.
- 13.
最小構成コンフィグ
● 動作に必要な要件を満たせば OK
–特権分離で使用するユーザ (sshd)
● このユーザは「 /var/empty 」に書き込みができる必要
がある
– サーバの秘密鍵 (1 種類以上、デフォルトは
/etc/ssh/ssh_host_{dsa,rsa,ecdsa}_key
と /etc/ssh/ssh_host_key)
# sshd_config
UsePrivilegeSeparation no
HostKey /path/to/key
13 / 69
- 14.
使いドコロ
● 動作確認など
– 役に立ちそうなsshd のコマンドラインオプショ
ン
オプション 説明
-d( 最大 3 つ ) デバッグモード
1 回の接続のみで終了する
-f 設定ファイルを指定
-t テストモード
設定の構文エラーのみチェックして終了する
-D デーモン化しない ( フォアグランドで動かす )
-e エラーを syslog ではなく、標準エラー出力に出す
-T 拡張テストモード
適応される全設定項目を表示して終了する
14 / 69
- 15.
- 16.
- 17.
Too many authenticationfailures の回避
● エラーになる原因がわかっていれば回避でき
るかも?
● クライアント側で使用する認証メソッド指定
して接続
– ssh -oPreferredAuthentications=password, ...
17 / 69
- 18.
- 19.
- 20.
- 21.
使いドコロ
● 公開鍵を LDAPや DB に探しに行く
– AuthorizedKeysCommand で見つからない場合は
AuthorizedKeysFile を探す
– ローカルファイルシステムの公開鍵を無視したい
場合は「 AuthorizedKeysFile none 」を指定
21 / 69
- 22.
- 23.
- 24.
- 25.
- 26.
使いドコロ
● 簡易 VPNを使うときに root でログインする必
要があるので、 PermitRootLogin や Match と
組み合わせてインターフェースの設定だけす
る
● Internal-sftp を指定して sftp しかできないよう
にする
– Match や ChrootDirectory と組み合わせると最強
26 / 69
- 27.
- 28.
- 29.
使いドコロ (2)
● sftpしかできないユーザを作る
– 「 sftponly 」グループに属するユーザは sftp 以外
のセッションが開始できない
Subsystem sftp internal-sftp
Match Group sftponly
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
29 / 69
- 30.
- 31.
- 32.
最低限必要なもの
● プログラムが使うライブラリは lddで調べる
– 認証は chroot 前に済まされる ( 使用するログイン
シェルは chroot 前に決定する )
# find /opt/chroot -printf '%M %u %g %pn'
drwxr-xr-x root root /opt/chroot/lib64
-rwxr-xr-x root root /opt/chroot/lib64/ld-linux-x86-64.so.2
-rwxr-xr-x root root /opt/chroot/lib64/libdl.so.2
-rwxr-xr-x root root /opt/chroot/lib64/libtinfo.so.5
-rwxr-xr-x root root /opt/chroot/lib64/libc.so.6
drwxr-xr-x root root /opt/chroot/bin
-rwxr-xr-x root root /opt/chroot/bin/bash
drwxr-xr-x root root /opt/chroot/dev
crw-rw-rw- root root /opt/chroot/dev/tty
crw-rw-rw- root root /opt/chroot/dev/null
cr--r--r-- root root /opt/chroot/dev/urandom
32 / 69
- 33.
使いドコロ (2)
● sftponlyユーザをさらに制限する
● chroot 環境にはユーザが使うディレクトリだ
け用意する
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /sftp-top
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
33 / 69
- 34.
- 35.
- 36.
PermitOpen
● TCP ポートフォワードで利用できるポートを
制限(OpenSSH-4.4 で追加 )
– any :すべてのポートで許可
– none :すべてのポートで拒否
– 複数指定するときは空白で区切る
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
36 / 69
- 37.
- 38.
Ciphers
● 使用する暗号化プロトコルの順序の指定
● デフォルト値
–aes128-ctr,aes192-ctr,aes256-
ctr,arcfour256,arcfour128,aes128-
gcm@openssh.com,aes256-
gcm@openssh.com,aes128-cbc,3des-
cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-
cbc,arcfour
38 / 69
- 39.
使いドコロ
● 脆弱性の見つかった暗号プロトコルを外す
● cbcplaintext disclosure
– 2 の -14 ~ -18 乗の確率で 14 ~ 32bit の平文を回
復できる可能性
– 「 CPNI-957037 」( SSH 通信において一部デー
タが漏洩する可能性)
● OpenSSH-5.2 から CBC の優先順位が下げら
れた
39 / 69
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
設定方法 (1/3)
● CA局で署名用の鍵を作成
– ssh-keygen -f ca-key
● サーバに CA 局の公開鍵を登録
– AuthorizedKeysFile で指定
– cert-authority オプションを追加
● ユーザの公開鍵を CA 局の秘密鍵で署名
– ssh-keygen -s ca-key -I keyid -V +30d id_rsa.pub
– 「 -V 」で有効期限を指定 ( 省略時無期限 )
48 / 69
- 49.
設定方法 (2/3)
● 署名された鍵をユーザへ
–id_rsa-cert.pub が生成される
● ユーザはペアの秘密鍵でアクセス
– ssh -i id_rsa remotehost
– 末尾に -cert.pub の付いている証明書が利用されるので
秘密鍵と同じディレクトリに配置
– OpenSSH-5.4 以降の ssh の動作
– ssh-agent で秘密鍵を登録する時に証明書も同時に登録
される
49 / 69
- 50.
設定方法 (3/3)
● 公開鍵の失効リスト
–廃止された公開鍵のリスト
– 登録された公開鍵を使用した認証は失敗する
– ssh-keygen -k filename < 鍵 >
– RevokedKeys で設定
– 一度登録したら取り消せない
– 公開鍵が手元になくてもフィンガープリントや証
明書のシリアルで登録可能
50 / 69
- 51.
証明書の中身
% ssh-keygen -L-f id_rsa-cert.pub
id_rsa-cert.pub:
Type: ssh-rsa-cert-v01@openssh.com user ...
Public key: RSA-CERT 13:33:cc:d8:31:83:...
Signing CA: RSA ac:a6:ba:61:5a:fc:ff:92:...
Key ID: "keyid"
Serial: 0
Valid: from 2013-04-22T00:44:00 to 2014-04-22T00:45:11
Principals: (none)
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
51 / 69
- 52.
MaxStartups
● 認証を受け付ける sshdの数を 3 つのパラメー
タで指定
– < 起動数 > : < 切断確率 > : < 最大起動数 >
– 起動数を超える接続は、 2 つ目のパラメータで指
定した確率で失敗し、最大で 3 つ目のパラメータ
まで増え、それ以降は必ず接続に失敗する。
– デフォルト値: 10:100:10 (OpenSSH-6.1 まで )
– : 10:30:100 (OpenSSH-6.2 から )
52 / 69
- 53.
- 54.
- 55.
- 56.
RHEL/CentOS リリース状況
(2013/04 現在)
OS 含まれているOpenSSH RHEL CentOS
リリース日 パッチ数 リリース日 パッチ数
5.0 openssh-4.3p2-16.el5.src.rpm 2007/03/14 34 2007/04/12 34
5.1 openssh-4.3p2-24.el5.src.rpm 2007/11/07 38 2007/12/02 38
5.2 openssh-4.3p2-26.el5.src.rpm 2008/05/21 39 2008/06/24 39
5.3 openssh-4.3p2-29.el5.src.rpm 2009/01/20 45 2009/03/31 45
5.4 openssh-4.3p2-36.el5.src.rpm 2009/09/02 49 2009/10/21 49
5.5 openssh-4.3p2-41.el5.src.rpm 2010/03/30 51 2010/05/14 51
5.6 openssh-4.3p2-72.el5.src.rpm 2011/01/12 56 2011/04/08 56
5.7 openssh-4.3p2-72.el5_6.3.src.rpm 2011/07/21 57 2011/09/13 57
5.8 openssh-4.3p2-82.el5.src.rpm 2012/02/21 63 2012/03/07 63
5.9 openssh-4.3p2-82.el5.src.rpm 2013/01/08 63 2013/01/16 63
6.0 openssh-5.3p1-20.el6.src.rpm 2010/11/10 31 2010/07/09 31
6.1 openssh-5.3p1-52.el6.src.rpm 2011/05/19 42 2011/12/09 42
6.2 openssh-5.3p1-70.el6.src.rpm 2011/12/06 45 2011/12/20 45
6.3 openssh-5.3p1-81.el6.src.rpm 2012/06/20 51 2012/07/09 51
6.4 openssh-5.3p1-84.1.el6.src.rpm 2013/02/21 53 2013/03/09 53
56 / 69
- 57.
- 58.
- 59.
Out Of Memorykiller
● 起動時に oom_adj を -17 にセット (OpenSSH-
5.4 以降 /* kernels <= 2.6.35 */)
● 起動時に oom_score_adj を -1000 にセット
(OpenSSH-5.7 以降 /* kernels >= 2.6.36 */)
openssh-server/src> grep -r oom_score_adj *
openssh-5.7p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
openssh-5.8p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
openssh-5.9p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
openssh-6.0p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
openssh-6.1p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
openssh-6.2p1/openbsd-compat/port-linux.c: {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
59 / 69
- 60.
RHEL/CentOS では
● RHEL6.3でバックポート
rpm/rhel/6.3/openssh-5.3p1-linux-oomkiller.patch:
+ {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
...
+ {"/proc/self/oom_adj", -17}, /* kernels <= 2.6.35 */
...
rpm/rhel/6.4/openssh-5.3p1-linux-oomkiller.patch:
+ {"/proc/self/oom_score_adj", -1000}, /* kernels >= 2.6.36 */
…
+ {"/proc/self/oom_adj", -17}, /* kernels <= 2.6.35 */
...
( openssh-5.3p1-81.el6.src.rpm 調べ)
60 / 69
- 61.
- 62.
ユーザ権限で sshd を動かす
●制約事項
– PAM が使えない
– 1024 より小さいポート番号が使えない
● 準備
– 鍵とコンフィグはユーザ権限で読める場所に
62 / 69
- 63.
楕円曲線暗号 (ECC)
● OpenSSH-5.7から楕円 DSA(ECDSA) をサポ
ート
– OpenSSL のライブラリに依存
– RHEL6/CentOS6 標準の OpenSSL は今のところ
非対応
● 短い鍵長で今までと同じ強度
– 負荷が下がる
– RSA:3072bit ECC:256bit≒
63 / 69
- 64.
mosh っぽい何か
● roaming.h(OpenSSH-6.2)
–OpenSSH-5.3 の頃からある
void request_roaming(void);
int get_snd_buf_size(void);
int get_recv_buf_size(void);
void add_recv_bytes(u_int64_t);
int wait_for_roaming_reconnect(void);
void roaming_reply(int, u_int32_t, void *);
void set_out_buffer_size(size_t);
ssize_t roaming_write(int, const void *, size_t, int *);
ssize_t roaming_read(int, void *, size_t, int *);
size_t roaming_atomicio(ssize_t (*)(int, void *, size_t), int, void *, size_t);
u_int64_t get_recv_bytes(void);
u_int64_t get_sent_bytes(void);
void roam_set_bytes(u_int64_t, u_int64_t);
void resend_bytes(int, u_int64_t *);
void calculate_new_key(u_int64_t *, u_int64_t, u_int64_t);
int resume_kex(void);
64 / 69
- 65.
- 66.
- 67.
- 68.
参考資料
● OpenSSH.org
– http://www.openssh.org/ja/
●OpenSSH 日本語マニュアルページ
– http://www.unixuser.org/~euske/doc/openssh/jman/
● OpenSSH 情報
– http://www.unixuser.org/~haruyama/security/openssh/
● 入門 OpenSSH
– http://www.unixuser.org/~euske/doc/openssh/book/index.html
68 / 69
- 69.