Suche senden
Hochladen
sshdのお話
•
Als ODP, PDF herunterladen
•
44 gefällt mir
•
9,413 views
(^-^) togakushi
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 69
Jetzt herunterladen
Empfohlen
SSH力をつけよう
SSH力をつけよう
(^-^) togakushi
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
セキュリティを楽しむ(CTFとbugbountyの始め方)
セキュリティを楽しむ(CTFとbugbountyの始め方)
kazkiti
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
LINE Corporation
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
とある診断員とAWS
とある診断員とAWS
zaki4649
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
Empfohlen
SSH力をつけよう
SSH力をつけよう
(^-^) togakushi
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
セキュリティを楽しむ(CTFとbugbountyの始め方)
セキュリティを楽しむ(CTFとbugbountyの始め方)
kazkiti
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
LINE Corporation
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
とある診断員とAWS
とある診断員とAWS
zaki4649
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
Takatoshi Matsuo
Requirement diagram
Requirement diagram
Yohsuke Nambu
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
Nmapの真実
Nmapの真実
abend_cve_9999_0001
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
Kouji YAMADA
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Mikiya Okuno
Dockerを支える技術
Dockerを支える技術
Etsuji Nakai
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
イエラエセキュリティMeet up 20210820
イエラエセキュリティMeet up 20210820
GMOサイバーセキュリティ byイエラエ株式会社
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
ssh_configのススメ
ssh_configのススメ
Hisaharu Ishii
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
Takashi Takizawa
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
TripleO Deep Dive 1.1
TripleO Deep Dive 1.1
Takashi Kajinami
Nmapの真実(続)
Nmapの真実(続)
abend_cve_9999_0001
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
直久 住川
Janog33.5
Janog33.5
(^-^) togakushi
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
(^-^) togakushi
Weitere ähnliche Inhalte
Was ist angesagt?
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
Takatoshi Matsuo
Requirement diagram
Requirement diagram
Yohsuke Nambu
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
Nmapの真実
Nmapの真実
abend_cve_9999_0001
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
Kouji YAMADA
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Mikiya Okuno
Dockerを支える技術
Dockerを支える技術
Etsuji Nakai
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
イエラエセキュリティMeet up 20210820
イエラエセキュリティMeet up 20210820
GMOサイバーセキュリティ byイエラエ株式会社
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
ssh_configのススメ
ssh_configのススメ
Hisaharu Ishii
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
Takashi Takizawa
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
TripleO Deep Dive 1.1
TripleO Deep Dive 1.1
Takashi Kajinami
Nmapの真実(続)
Nmapの真実(続)
abend_cve_9999_0001
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
直久 住川
Was ist angesagt?
(20)
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
Requirement diagram
Requirement diagram
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
Nmapの真実
Nmapの真実
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Dockerを支える技術
Dockerを支える技術
自宅サーバ仮想化
自宅サーバ仮想化
イエラエセキュリティMeet up 20210820
イエラエセキュリティMeet up 20210820
JIT のコードを読んでみた
JIT のコードを読んでみた
ssh_configのススメ
ssh_configのススメ
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
DockerコンテナでGitを使う
DockerコンテナでGitを使う
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
TripleO Deep Dive 1.1
TripleO Deep Dive 1.1
Nmapの真実(続)
Nmapの真実(続)
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
Ähnlich wie sshdのお話
Janog33.5
Janog33.5
(^-^) togakushi
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
(^-^) togakushi
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
Syuichi Murashima
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
Syuichi Murashima
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvps
Atsuhiro Takiguchi
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
Yikei Lu
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
Oss dev-04
Oss dev-04
Kohei KaiGai
Osc10do linux nextstep
Osc10do linux nextstep
smokey monkey
STNSサーバーを書いてみた
STNSサーバーを書いてみた
Yoshinori Teraoka
SSH Tips & Tricks
SSH Tips & Tricks
Nobutoshi Ogata
qemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみた
Kazuhiro Nishiyama
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
yaegashi
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
Tetsuya Hasegawa
おしべめしべ
おしべめしべ
puriketu99 --
効率アップのためのコマンドとツール
効率アップのためのコマンドとツール
Yosuke INOUE
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Akira Yoshiyama
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
96smcln
Ähnlich wie sshdのお話
(20)
Janog33.5
Janog33.5
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvps
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Oss dev-04
Oss dev-04
Osc10do linux nextstep
Osc10do linux nextstep
STNSサーバーを書いてみた
STNSサーバーを書いてみた
SSH Tips & Tricks
SSH Tips & Tricks
qemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみた
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
おしべめしべ
おしべめしべ
効率アップのためのコマンドとツール
効率アップのためのコマンドとツール
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
Mehr von (^-^) togakushi
ささみ麻雀部の紹介
ささみ麻雀部の紹介
(^-^) togakushi
ファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみる
(^-^) togakushi
手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0
(^-^) togakushi
仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp
(^-^) togakushi
現場で役に立たないsudoの使い方
現場で役に立たないsudoの使い方
(^-^) togakushi
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
KVM+cgroup
KVM+cgroup
(^-^) togakushi
SSH力をつかおう
SSH力をつかおう
(^-^) togakushi
jenkinsで遊ぶ
jenkinsで遊ぶ
(^-^) togakushi
Pakena #9
Pakena #9
(^-^) togakushi
Sfstudy #2
Sfstudy #2
(^-^) togakushi
ひとりsphinx
ひとりsphinx
(^-^) togakushi
Mehr von (^-^) togakushi
(12)
ささみ麻雀部の紹介
ささみ麻雀部の紹介
ファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみる
手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0
仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp
現場で役に立たないsudoの使い方
現場で役に立たないsudoの使い方
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
KVM+cgroup
KVM+cgroup
SSH力をつかおう
SSH力をつかおう
jenkinsで遊ぶ
jenkinsで遊ぶ
Pakena #9
Pakena #9
Sfstudy #2
Sfstudy #2
ひとりsphinx
ひとりsphinx
sshdのお話
1.
2013/04/23 #ssmjp @togakushi 2013/06/02
MaxStartups 追記 (P.52) sshd のお話
2.
アジェンダ ● はじめに ● 前回までのあらすじ ●
設定ファイルの書式 ● 設定事例集 ● 小ネタ 2 / 69
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.
設定ファイルの書式 6 / 69
7.
サーバで編集する主なファイル ● /etc/ssh/sshd_config – sshd
が読み込む設定ファイル ● /etc/ssh/sshrc – ユーザがログインした時に最初に実行する内容 ● /etc/motd – 今日のお知らせ ● その他 – 認証用の設定ファイル ( 鍵とかいろいろ ) – ホームディレクトリのユーザ個別のファイル 7 / 69
8.
書式 ● 設定項目と設定値は空白で区切る ● 空白を含む設定値はダブルクォート囲むこと ができる ●
設定値を複数持つ場合は空白で区切る ● 「 # 」から始まる行と空行はコメント扱い ● 設定項目の大文字小文字の区別はない – 設定値は区別される 例:設定項目 設定値 TCPKeepAlive yes 8 / 69
9.
数字とか記号とか ● 数字は時間やポート番号などを指定 – 秒
(s 、単位なし )/ 分 (m)/ 時 (h)/ 日 (d)/ 週 (w) ● 「 % 英字」は特定の文字列に置き換わる – %u :認証しようとしているユーザ名 – %h :そのユーザのホームディレクトリ 9 / 69
10.
パターン ● IP アドレスやドメインの一部を指定 –
0 個以上の非空白文字: * – 1 個の非空白文字: ? – 除外: ! – カンマで連結可能 ● 例 – 192.168.1.? → 192.168.1.1 〜 9 – *.co.jp → 任意の .co.jp ドメイン 10 / 69
11.
ファイルのパス ● 絶対パスで指定 – AuthorizedKeysFile
と AuthorizedPrincipalsFile の み例外 – 絶対パス or 認証しようとしているユーザのホー ムディレクトリからの相対パス 11 / 69
12.
設定事例集 12 / 69
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.
UsePrivilegeSeparation ● 特権分離を使うか指定 – 認証済みの
sshd を root 以外のユーザ権限で動か す (OpenSSH-3.4 からデフォルト有効 ) – sandbox が指定されていると認証前の sshd も制 限する (OpenSSH-5.9 で追加 ) 15 / 69
16.
MaxAuthTries ● 1 回の接続で何回まで認証を試みれるか –
全ての認証メソッドを通してのトータル回数 – デフォルト 6 回 表示されるエラー 2: Too many authentication failures for <username> 16 / 69
17.
Too many authentication
failures の回避 ● エラーになる原因がわかっていれば回避でき るかも? ● クライアント側で使用する認証メソッド指定 して接続 – ssh -oPreferredAuthentications=password, ... 17 / 69
18.
ChallengeResponseAuthentication ● /etc/login.conf に記述されてる全ての認証形式 が使える(
BSD のはなし?) ● Linux では keyboard-interactive が有効になる – PAM を使ってパスワード認証する 18 / 69
19.
PubkeyAuthentication ● 公開鍵認証を有効にする 19 /
69
20.
AuthorizedKeysCommand ● ユーザの公開鍵を検索するプログラムを指定 する (OpenSSH-6.2
で追加 ) – プログラムを実行するユーザは AuthorizedKeysCommandUser で指定 ( 必須 ) ● 引数に認証しようとしているユーザ名が渡さ れる 20 / 69
21.
使いドコロ ● 公開鍵を LDAP
や DB に探しに行く – AuthorizedKeysCommand で見つからない場合は AuthorizedKeysFile を探す – ローカルファイルシステムの公開鍵を無視したい 場合は「 AuthorizedKeysFile none 」を指定 21 / 69
22.
AuthenticationMethods ● 指定した複数の認証メソッド全ての認証に成 功することを要求する (OpenSSH-6.2
で追加 ) – カンマで区切って並べたものが要求される認証メ ソッド – スペースで区切って複数パターンを指定できる ● プロトコル 1 では使えない ( エラーで起動し ない ) 22 / 69
23.
使いドコロ ● 公開鍵認証した後に、パスワード認証を要求 する – AuthenticationMethods
publickey,password publickey,keyboard-interactive – 公開鍵認証に成功しないとパスワードは要求され ない 23 / 69
24.
PermitRootLogin ● root ユーザが直接ログイン可能か指定 設定値
意味 yes 許可する no 許可しない without-password パスワード認証では許可しない forced-commands-only 強制コマンドが指定されている場合だけ許可 ( 公開鍵に command="..." が設定されてるときのみ ) 24 / 69
25.
ForceCommand ● クライアントが指定したコマンドを無視 (OpenSSH-4.4 で追加
) – 指定したコマンドを強制的に実行 – .ssh/rc( 存在すれば ) を実行 25 / 69
26.
使いドコロ ● 簡易 VPN
を使うときに root でログインする必 要があるので、 PermitRootLogin や Match と 組み合わせてインターフェースの設定だけす る ● Internal-sftp を指定して sftp しかできないよう にする – Match や ChrootDirectory と組み合わせると最強 26 / 69
27.
Match ● 指定した全ての条件を満たした時に、設定値を上書き する (OpenSSH-4.4
で追加 ) – ユーザ名 / グループ名 / ホスト名 / アドレス / ローカルアド レス / ローカルポート – 全ての項目は上書きできないので注意 ( マニュアル参照 ) – 上書きできる項目、条件 ( 書式 ) はバージョンによって増 えている ● 接続元やユーザ名によって異なる設定を使うことが可 能になる 27 / 69
28.
使いドコロ (1) ● 外からの接続は公開鍵、中からの接続はパス ワード認証も許可したい PubkeyAuthentication
yes PasswordAuthentication no Match Address 192.168.1.0/24 PasswordAuthentication yes 28 / 69
29.
使いドコロ (2) ● sftp
しかできないユーザを作る – 「 sftponly 」グループに属するユーザは sftp 以外 のセッションが開始できない Subsystem sftp internal-sftp Match Group sftponly X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 29 / 69
30.
ChrootDirectory ● 認証完了後、ユーザの環境を chroot
で閉じ込 める (OpenSSH-4.8 で追加 ) – ログインさせるならそれなりの準備を – 設定値に指定するディレクトリパスは上位層を含 め、所有者は root のみで他のユーザが書き込みで きてはイケナイ 30 / 69
31.
使いドコロ (1) ● ログインしたユーザを制限された環境に閉じ 込める ●
必要なもの – ログインシェル ( とそれが動く環境 ) – デバイス (null, zero,urandom, tty) – 動かしたいコマンド ( とそれが動く環境 ) 31 / 69
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.
AllowTcpForwarding ● TCP ポートフォワードの制限 –
「させる」か「させない」かの二択 ● OpenSSH-6.2 から「 remote 」と「 local 」が 追加 34 / 69
35.
使いドコロ ● 踏み台での TCP
ポートフォワードを制限した り 35 / 69
36.
PermitOpen ● TCP ポートフォワードで利用できるポートを 制限
(OpenSSH-4.4 で追加 ) – any :すべてのポートで許可 – none :すべてのポートで拒否 – 複数指定するときは空白で区切る PermitOpen host:port PermitOpen IPv4_addr:port PermitOpen [IPv6_addr]:port 36 / 69
37.
使いドコロ ● 目的のサーバの目的のポートのみへの転送だ けに絞る ● ぶっちゃけ、、、 –
ユーザがログインできるなら stone や nc などプロ グラムを動かして転送を重ねれば目的のポートに たどり着く ( 転送先のホストが制限されてなけれ ば ) – 本気で制限したいなら SELinux などで 37 / 69
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.
使いドコロ ● 脆弱性の見つかった暗号プロトコルを外す ● cbc
plaintext disclosure – 2 の -14 ~ -18 乗の確率で 14 ~ 32bit の平文を回 復できる可能性 – 「 CPNI-957037 」( SSH 通信において一部デー タが漏洩する可能性) ● OpenSSH-5.2 から CBC の優先順位が下げら れた 39 / 69
40.
Banner ● ユーザ認証する前に表示するテキスト ● scp
や sftp で接続したときでも表示される 40 / 69
41.
PrintLastLog ● ログインした時に最後にログインした日付 (lastlog) を表示する –
~/.hushlogin があると表示されない 41 / 69
42.
PrintMotd ● ログインした時に /etc/motd(
今日のお知らせ ) の内容を表示する – ~/.hushlogin があると表示しない 42 / 69
43.
使いドコロ ● 殺伐としたコンソールに突如黒魔道士が!! ● curl https://gist.github.com/shin1x1/5230392/raw/b27b4 >
/etc/motd 43 / 69
44.
UsePAM ● ChallengeResponseAuthentication で
PAM の 使用を許可する ● PasswordAuthentication で PAM を使う 44 / 69
45.
使いドコロ ● ワンタイムパスワード – pam_otpw
を入れて設定 – PAM →でワンタイムパスワードが有効になる ssh でも使う ● PAM でできることならなんでもできる 45 / 69
46.
certificate authentication ● 証明書認証
(OpenSSH-5.4 で追加 ) – ユーザ ( またはホスト ) の公開鍵を CA 局の秘密鍵 で署名 – 署名された公開鍵 ( 証明書 ) と秘密鍵をセットで 使う – 証明書には有効期限を設けれる 46 / 69
47.
簡略図 ユーザ 秘密鍵 ユーザ 公開鍵 CA 局 公開鍵 CA 局 公開鍵 CA
局 秘密鍵 CA 局の秘密鍵で署名された ユーザ公開鍵の証明書 ホスト秘密鍵/公開鍵 コピー 秘密鍵と証明書の セットで認証 クライアント サーバ 証明局 47 / 69
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.
CVE-2010-5107 ● MaxStartups のデフォルト値が適切ではない から認証
DoS ができますよって指摘 ● telnet や対話式になる認証 ( パスワードやパス フレーズの入力 ) を完了させずに連続で接続 すると簡単に引き起こせる ● LoginGraceTime が過ぎるまで新しい接続がで きない 53 / 69
54.
その他 ● アクセスコントロール – DenyUsers/AllowUsers/DenyGroups
/AllowGroups ● パーミッションのチェック ( 厳格なモード ) – StrictModes ● バージョン番号追加文字列 – VersionAddendum まだまだある 54 / 69
55.
小ネタ 55 / 69
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.
5 にバックポートされてるもの ● openssh-4.3p2-chroot.patch(5.4
〜 ) ● openssh-4.3p2-forced.patch(5.4 〜 ) ● openssh-4.3p2-biguid.patch(5.7 〜 ) とかいろいろ 57 / 69
58.
6 にバックポートされてるもの ● openssh-5.3p1-sftp_umask.patch(6.1
〜 ) ● openssh-5.3p1-biguid.patch(6.1 〜 ) ● openssh-5.3p1-linux-oomkiller.patch(6.3 〜 ) ● openssh-5.3p1-netcat-mode.patch(6.4 〜 ) とかいろいろ 58 / 69
59.
Out Of Memory
killer ● 起動時に 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.
RedHat の独自パッチ? ● openssh-5.3p1-ldap.patch(6.1
〜 ) – openssh-ldap.x86_64 : A LDAP support for open source SSH server daemon – 簡単なドキュメントと鍵検索用のプログラムとス キーマが付属 ● AuthorizedKeysCommand と AuthorizedKeysCommandRunAs で設定 61 / 69
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.
実装がなかった! ● roaming_serv.c(OpenSSH-6.2) 24 /* 25
* Wait for the roaming client to reconnect. Returns 0 if a connect ocurred. 26 */ 27 int 28 wait_for_roaming_reconnect(void) 29 { 30 return 1; 31 } 65 / 69
66.
実装がなかった! ● roaming_serv.c(OpenSSH-6.2) 24 /* 25
* Wait for the roaming client to reconnect. Returns 0 if a connect ocurred. 26 */ 27 int 28 wait_for_roaming_reconnect(void) 29 { 30 return 1; 31 } 66 / 69
67.
まとめ ● いろんな認証方式や暗号方式があるよ – ひとつに絞ると問題が見つかったときに全滅する ●
ユーザに便利に使ってもらう設定もあれば制 限する設定もあるよ ● 万能じゃないので過信するな 67 / 69
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.
Connection closed 69 /
69
Jetzt herunterladen