3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

regreSSHion(CVE-2024-6387)バグ緩和策の問題を回避するシェルスクリプトをのぞいてみる

Last updated at Posted at 2024-07-17

概要

  • regreSSHion(CVE-2024-6387)の脆弱性そのものについての記事ではありません
  • regreSSHionバグに対する緩和策(LoginGraceTimeの無効化)ではDoSを回避できないので、redhatがそれを回避するためのシェルスクリプトを配布(GPLv3)している。この記事はそのシェルスクリプトを覗いてみようという趣旨

regreSSHion(CVE-2024-6387)バグについて

このバグは、過去に修正済みだった脆弱性がデグレによって復活したというものです
細かいことは下記URLを参照してください

緩和策について

対策として、原則的にこの脆弱性を修正するパッチを適用することです
各ディストリビューションごとに修正版が配布されているはず

修正版への置き換えが難しいときは、下記の緩和策を行います

  1. sshd_configに対して、LoginGraceTime 0という設定変更を行う
  2. sshdを再起動する

LoginGraceTimeの説明についてはマニュアルを参照してください

緩和策の問題

前項の緩和策を適用すると、ログインしないままのセッションがいつまでも残り続けることになります
残り続けると、リソースを食い潰してしまうためDos攻撃を受ける脆弱性があるということになります

redhatでは、その問題を回避するためのシェルスクリプトを下記URLにて配布(GPLv3)しています

シェルスクリプトの内容をのぞいてみる

redhatが配布しているこのシェルスクリプトの要件は
「sshサーバーと接続しておきながら、ログイン認証に成功も失敗もせずに120秒以上経過したsshセッションを検出して、それを強制切断させる」というものです
どうやってシェルスクリプトで実現すれば良いか想像できそうですか?

では当該シェルスクリプトのソースを読みながら処理をみてみましょう

このシェルスクリプトはそれほど難しくないです
全体で47行、そのうち20行ほどはコメント行です

1つめの処理は、処理対象となるプロセスの絞り込みを行っています

  1. pgrep -x sshdでsshdプロセスを抽出します
  2. 抽出したプロセスごとに、readlink -f /proc/${pid}/exe/usr/sbin/sshdかどうかをチェックします。/proc/${pid}/exeは、そのプロセスの実行ファイルへのシンボリックリンクですので、readlink -fで追跡しているということです
  3. その次は、/proc/${pid}/cmdlineの内容を調べます。ここを見ることでログインしているかどうかを見ているということになります
  4. 上記2つのチェックで、実行ファイルが/usr/sbin/sshdでかつ、まだログインしていないプロセスが見つかった場合は、それらのプロセスは次の処理へ送られます

2つめの処理は、処理対象のプロセスが、起動してから120秒経過している場合は強制終了させるというものです

  1. 処理時から120秒前のUNIX時間を算出して変数に代入しています
  2. 処理対象のプロセスごとに、/proc/${pid}に対してstat -c %Yコマンドを実行して、このプロセスが作られたUNIX時間を算出して変数に代入しています
  3. 上記2つの変数を比較すると、プロセスが始まってから120秒以上経過しているかどうかがわかります
  4. 120秒以上経過していたら、そのプロセスをkillコマンドで強制終了させます

どうでしたか?想像どおりの内容だったでしょうか?

終わり

このスクリプトをcronなどで定期的に実行することで、緩和策によりセッションが無限に残り続けるという問題を回避できます
/procをシェルスクリプトへ活用する参考例のようなシェルスクリプトでした

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?