Created
Dec 22, 2023 4:02 PM
Tags
SecurityTerrapin
Editor
Tomoya Kabe
チーフエンジニアの加辺です。去る12月18日にTerrapinというSSHの脆弱性が報告されました。
各所で記事にされていてインフラ界隈では話題になっていますが、私も独自に公表論文を読んでみました。これはElastic Infraチーム内に共有した内容の概略(速報)です。
本記述は査読されていない論文を私が独自に読んでまとめたものであり、誤りを含む可能性があります。正確な情報はご自身で検証いただくようお願いいたします。
誤りのご指摘は以下へご連絡ください。
kabe@elastic-infra.com
なお、全てのご連絡にお返事を差し上げられるとは限らない点ご了承ください。
Terrapinとは
TCPレベルでパケットの削除・挿入・改竄を行うことでSSHに対して攻撃を行う手法(MitM)。2023年10月報告、同年12月発表
攻撃が成立する条件
攻撃者が攻撃対象のサーバとクライアントのTCP通信の間に入り、任意のTCPパケットの読取・削除・追加を行える状況
攻撃が成立するとされる暗号化モード
- ChaCha20-Poly1305
- CBC-EtM
ただしこれらの暗号化モード自体に問題があるのではなく、SSHの仕様(MAC計算の方法および、シーケンス番号をリセットしていない点)が不適切なのが原因である
例えばTLSでもChaCha20-Poly1305は利用されるが、こちらには問題はない
論文中ではAES-GCMやAES-CTRが利用可能なので、上記の暗号化モードは無効にすることを提案している。
攻撃の概略
- 先頭パケットの削除
- SSH接続の冒頭、暗号化通信開始前のTCPパケットの一部を削除する。
- 不要パケットの挿入
- SSH接続の途中、暗号化通信開始前に無害なTCPパケットを挿入する。
- 論文では
IGNORE
メッセージ(SSHプロトコル上いつでも無視されることになっている)が例示されているが、受け取った側が応答を返さないメッセージであれば何でもよい。 - SSH拡張ダウングレード攻撃
- 暗号モードによって手法が異なる。論文の第5章を参照。
- AsyncSSH Serverの不正セッション攻撃 (Python SSH実装)
- ダウングレードとの組み合わせによって攻撃者が真正クライアントに成り代わりshellを奪取する。論文中ではAsyncSSH serverのみを対象としており、OpenSSH serverに対しては成立しない?(明言がない)
付録A: 運用での影響
A-1. 概要
tl; dr ほとんどの環境で危険ではない
- 前提: VPC内通信については考慮しない
- rootをインフラ側で管理しており、敢えて変なproxyを通す設定など行わない限りSSH通信の間に入る余地はない
- SSH通信がインターネットを通らない環境の場合、基本的に影響がないといえる
- 例
- そもそもSSHしない環境
- SSHとしてでなく、SSM経由でログインしている環境
- SSHが露出せず、TLS(HTTPS)でwrapされているため
- SSHがインターネットを経由する場合、source IPアドレスが固定されている環境では攻撃される見込みは薄い
- 悪意を持ったネットワーク管理者がいない限りは基本的に問題ない
- シェアオフィスでのWifi共有環境が許可されている場合は以下を参照
- 公衆無線LAN等の環境(VPNなし)では攻撃される可能性がある
- 一般的な平文通信が盗聴される状況に近い
- 偽SSIDを掴まされた場合などは攻撃が可能となる
- VPNを張っている場合、IPsec/IKEは攻撃を受けないので安全
IPsec/IKE | TLS | SSH | |
過去メッセージの全体に対してMACを計算しているか | × | ○ | × |
暗号通信の開始直後にカウンタをリセットしているか | ○ | ○ | × |
A-2. 個別の脆弱性状況
- ほとんどのOpenSSH sshd: 脆弱
- ChaCha20-Poly1305およびCBC-EtMが有効で、鍵交換が弱い
- proftpd: 脆弱でない
- ChaCha20-Poly1305もCBC-EtMも無効
A-3. 確認方法
論文の著者がScannerを公開している
https://github.com/RUB-NDS/Terrapin-Scanner/releases/tag/v1.1.0