CentOS サーバーにおける OpenSSL の手動ビルドと CVE-2022-0778 セキュリティ対策の完全ガイド

環境構築の前提条件

CVE-2022-0778 を含む既知の脆弱性を回避するため、標準パッケージではなく最新かつ安定したバージョンを手動でコンパイルインストールする必要があります。以下の手順では、依存関係を含む必要な準備から、実際のビルド、およびシステムへの統合までを順に説明します。

1. ソースコードの準備と依存ライブラリ

まず、作業ディレクトリへ移動し、最新の OpenSSL tarball を入手してください。
以下は例示としてディレクトリ構成を変更しています。

mkdir -p /opt/openssl-build
cd /opt/openssl-build
wget https://www.openssl.org/source/openssl-3.0.9.tar.gz
tar -xzf openssl-3.0.9.tar.gz
cd openssl-3.0.9

ビルドプロセスを実行する前に、コンパイラおよび関連ライブラリが利用可能であることを確認します。欠落しているライブラリがある場合、ビルドは失敗します。依存関係の確認およびインストールコマンドは以下の通りです。

  • コンパイルツールチェーン: C/C++ コンパイラが必要となります。
    yum install -y gcc gcc-c++ make
  • Zlib: データ圧縮機能に必要なモジュール。
    yum install -y zlib zlib-devel
  • Perl 関連: スクリプト実行時にエラー(IPC/Cmd.pm など)が発生しないよう補完します。
    yum install -y perl-IPC-Cmd perl-Time-HiRes

2. ビルド設定とコンパイル

標準のルートディレクトリ以外にインストール先を指定することで、既存の OpenSSL との競合を防ぎます。ここではデフォルトプレフィックスをカスタマイズします。

# カスタムインクルードパスでの設定
./Configure --prefix=/opt/ssl-root --openssldir=/opt/ssl-root shared zlib threads

# コンパイル開始(複数コア利用の場合は -j オプション推奨)
make -j$(nproc)

# 公式インストール処理
make install

これにより、バイナリとライブラリは指定された/opt/ssl-rootディレクトリ下に配置されます。

3. ライブラリの読み込み経路追加

新規インストールされた動的ライブラリをシステムが検出できるように、共有ライブラリ設定ファイルにパスを追加し、キャッシュを更新します。

# 検索対象リストへの追加
echo "/opt/ssl-root/lib64" > /etc/ld.so.conf.d/ssl-custom.conf

# LD の再読み込み(オプション -v は詳細表示)
ldconfig -v

さらに、実行時に直接使用される .so ファイルに対してシンボリックリンクを作成します。既に存在する場合は上書きフラグ (-sf) を使用して更新してください。

ln -sf /opt/ssl-root/lib64/libssl.so.3 /usr/lib64/
ln -sf /opt/ssl-root/lib64/libcrypto.so.3 /usr/lib64/

4. 環境変数の定義と有効化

シェルセッションで OpenSSL コマンドを利用可能にするため、PATH に新しいバイナリディレクトリを追記します。旧バージョンとの衝突を避けるため、元のバイナリファイルを保存・退避させてから設定を行います。

# 現行バージョンのバックアップ作成
mv /usr/bin/openssl /usr/bin/openssl.orig.bak

# 環境スクリプトの作成
cat > /etc/profile.d/openssl-env.sh << EOF
export SSL_PREFIX="/opt/ssl-root"
export SSL_BIN="${SSL_PREFIX}/bin"
export PATH="\$PATH:\$SSL_BIN"
EOF

# 権限付与と即時反映
chmod +x /etc/profile.d/openssl-env.sh
source /etc/profile.d/openssl-env.sh

# 設定確認
which openssl
openssl version -a

5. CVE-2022-0778 脆弱性の対策

CVE-2022-0778 は、BN_mod_sqrt() 関数におけるバグにより、証明書解析処理中に無限ループが発生しサービス拒否を引き起こす問題です。特定の楕円曲線パラメータを持つ悪意のあるデータがトリガーとなります。この攻撃を防ぐには、該当箇所が修正されたバージョンへの更新が必須です。

影響範囲と対応方針:

  • リスクバージョン: 1.0.2 および 1.1.1 の一部リリース、および初期の 3.0 ベースライン。
  • 推奨対応: パッチ済みバージョン(例:3.0.9 以上)への置き換え。

アップグレード手順の要点:

  1. 上記の手順において、ダウンロード元バージョン番号をパッチ済み版(例:3.0.9)に変更すること。
  2. インストール先パス(/opt/ssl-root など)をそのまま維持しつつ、ビルド产物を上書きする。
  3. Nginx や Apache などの Web サーバーを使用している場合、 OpenSSL の新バージョン認識のために再度コンパイルし直さない限り参照されないことがあります。Nginx を利用する場合は、その際にも新しい OpenSSL ライブラリへのリンクパスを確認し、必要に応じて再ビルドを実施してください。

タグ: OpenSSL CVE-2022-0778 CentOS LinuxSecurity SourceCompile

5月20日 12:11 投稿