Securing SSH Services - Go Blue Team!! (SANS)

元記事URL: https://isc.sans.edu/forums/diary/Securing+SSH+Services+Go+Blue+Team/22992/

 

SANSのフォーラムでの投稿を意訳。

 

 

世界では攻撃者、攻撃手法は進化しているけど、そういえばSSHの推奨事項に関しては目立った変化がないのっておかしくね?ということで調べてみた。

 

まずNISTにSSH関連の推奨事項ガイドラインがあるけど、出版されたのは2015年だから2年遅れなんだ。

NISTIR7966 Security of Interactive and Automated Access Management Using Secure Shell (SSH)

http://nvlpubs.nist.gov/nistpubs/ir/2015/NIST.IR.7966.pdf

 

※SSHのしくみやSSHベースのアクセスにおける脆弱性、管理面における推奨事項など、45ページにわたって記載されているので「あらためてちゃんと勉強しよう」という時にとても良い文書かもしれない。今度読んでみよう。

 

mozilla.orgでもOPENSSHに関するgreatな推奨事項文書がある。

mozilla wiki - Security/Guidelines/OpenSSH

https://wiki.mozilla.org/Security/Guidelines/OpenSSH

 

でも、多くの機器においてOpenSSH設定ファイルにアクセスできるわけじゃない。そんなときはBettercrypto.org が公開しているこの文書が役に立ちそうだ。

https://bettercrypto.org/static/applied-crypto-hardening.pdf

 

例えばCisco IOSルータでは、設定がとてもシンプルだからなのか、セキュリティの観点ではとてもばかげた「ミス」を見かけることがある。多くのガイダンスではSSHv2の強制、access-listでアクセスを制御すること、ここまでしかない。設定は例えばこんなふうになるだろう。

crypto key gen rsa gen mod 2048        ! generate the SSH key
login on-failure log                   ! log failed login attempts
login on-success log                   ! log successful login attempts
 
ip ssh version 2                       ! force SSHv2 (SSHv1.x is easily decrypted)
ip access-list standard ACL-MGT        ! Create an ACL to limit access
  permit ip x.x.x.0 255.255.255.0      ! permit access from management VLAN
  permit ip host x.x.x.y               ! or permit access from specific management hosts
deny ip any log                        ! log all other accesses  (you can log the successful ones too of course)
 
line vty 0 15                          ! note that some newer platforms have more than 15 VTY lines !!
transport input ssh                    ! restrict to SSH only (no telnet)
access-class ACL-MGT                   !  apply the ACL

しかし、上記の文書のアドバイスをふまえると、鍵に名前をつけること、鍵のサイズを大きくすること、クライアントの最小値(DH)をセットすることなどが適用できる。すると以下のようになる。

crypto key generate rsa modulus 4096 label SSH-KEYS     ! 鍵に名前を付ける。これによりローテーション時の保護の空白期間がなくなる。
ip ssh rsa keypair-name SSH-KEYS
ip ssh version 2
ip ssh dh min size 2048                      ! ダウングレード攻撃を防ぐためDH鍵交換の最小モジュラスサイズを2048bitにする
ip access-list standard ACL-MGT
 permit ip x.x.x.0 255.255.255.0             ! permit access from management VLAN
 permit ip host x.x.x.y                      ! or permit access from specific management hosts
deny ip any log                              ! log all other accesses  (you can log the successful ones too of course)
 
line vty 0 15                                ! note that some newer platforms have more than 15 VTY lines !!
transport input ssh                          ! restrict to SSH only (no telnet)
access-class ACL-MGT                         ! apply the ACL

Cisco ASAの場合はさらに制御できることがあって、鍵交換グループをセットしたりもできる。

crypto key generate rsa modulus 4096
ssh version 2
ssh key-exchange group dh-group14-sha1  ! 鍵交換グループの設定
 
ssh x.x.x.y m.m.m.m inside            ! SSHアクセスを特定のホストまたはサブネットからのみ許可する

(SSHはパブリックなインタフェースで有効にしないように。VPNを使いましょう。できれば2要素認証もね。そして内部のインタフェースで接続するべきだ。)

 

ASA上ではtelnetを「無効化する」ではなく、「許可しない」ようにすればよい。このような行が設定に含まれていないように確認しよう。

telnet x.x.x.y m.m.m.m <interface name>

 

IOS、ASAともに、鍵を使った認証もサポートしている。鍵ベースの認証に対してはブルートフォース攻撃で容易には突破できないというとても良いメリットがあるけど、逆に管理者の端末が侵害されて攻撃者が「すべてのカギは手に入れた」状態になってしまう危険性があるし、もし鍵をファームフェアのイメージにハードコードしてしまっていたらまずいよね。

 

基本的なSSH設定について書いたけど、あとはこの設定をどうチェックするかだね。(乞うご期待!)

 

ここまで。

 

Ciscoはベストプラクティス文書出してないのかなあ。NISTやMozillaがこういうのを出しているのも初めて知りました。

 

結論:そこまで興味深い内容ではなかった・・・