Blueborne - Bluetooth サブシステムにおける Linux カーネルのリモート DoS (サービス拒否) 攻撃 - CVE-2017-1000251
この情報は役に立ちましたか?
背景情報
L2CAP (Logical Link Control and Adaptation Layer Protocol) は BlueBluetooth スタックのデータリンク層で動作し、接続の多重化、セグメント化、および Bluetooth などの上位層プロトコルのパケット再構築などのサービスを提供します。これにより、高レベルプロトコルによるクライアントへの L2CAP データパケットの送受信が行われます。
Linux カーネルの Bluetooth サブシステムがクライアントから受信した保留中の設定パケットを処理する方法で、スタックバッファーオーバーフローの問題が発見されました。その結果、クライアントはスタックバッファーオブジェクトに格納された任意の L2CAP 設定パラメーターを送信できます。これらのパラメーターは、バッファー長を超えて、隣接したカーネルスタックの内容を上書きすることができます。これは、認証前の Bluetooth 接続の確立時に発生します。カーネルスタック保護機能 (CONFIG_CC_STACKPROTECTOR=y) が無効になっている場合、Bluetooth でシステムに接続できる非認証ユーザーはこの不具合を悪用してシステムをクラッシュしたり、システムで任意のコードを実行することが可能です。
謝辞
影響を受ける製品
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise MRG 2
影響を受けない製品
- RHEL Atomic Host には脆弱性が存在する Bluetooth モジュールが同梱されますが、bluetoothd サービスは同梱されないため影響を受けません。
- s390x 上の Red Hat Enterprise Linux 7 は脆弱性が存在する Bluetooth モジュールを構築しないため、影響を受けません。
- Red Hat Enterprise Linux 5 は、不具合が存在しないカーネル内で古いバージョンの Bluetooth サブシステムを使用するため、影響を受けません。
攻撃の詳細と影響
脆弱性の診断
Bluetooth ハードウェアがシステムに存在し、Bluetooth サービスが有効で使用できる状態である場合、この脆弱性の影響を受けます。具体的に説明すると、bluetooth.ko カーネルモジュールコード内にこの不具合が存在するため、このモジュールがロードされた場合にシステムの脆弱性が発生します。
対処方法
影響を受ける製品の更新
Red Hat Enterprise Linux 7.2 以降を実行しているお客様は、kpatch を利用できます。kpatch を利用する場合は、サポートケースを作成してください。
kpatch の詳細については、 RHEL 7 はライブカーネルパッチ (kpatch) をサポートしていますか? を参照してください。
製品 | パッケージ | アドバイザリー |
---|---|---|
Red Hat Enterprise Linux 7 | kernel | RHSA-2017:2679 |
Red Hat Enterprise Linux 7 | kernel-rt | 保留 |
Red Hat Enterprise Linux 7.3 Extended Update Support (EUS)* | kernel | RHSA-2017:2680 |
Red Hat Enterprise Linux 7.2 Extended Update Support (EUS)* | kernel | 保留 |
Red Hat Enterprise Linux 6 | kernel | RHSA-2017:2681 |
Red Hat Enterprise Linux 6.7 Extended Update Support (EUS)* | kernel | RHSA-2017:2682 |
Red Hat Enterprise Linux 6.6 Advanced Update Support (AUS)** | kernel | 保留 |
Red Hat Enterprise Linux 6.5 Advanced Update Support (AUS)** | kernel | 保留 |
Red Hat Enterprise Linux 6.4 Advanced Update Support (AUS)** | kernel | RHSA-2017:2683 |
Red Hat Enterprise Linux 6.2 Advanced Update Support (AUS)** | kernel | 保留 |
Red Hat Enterprise MRG 2 | kernel-rt | 保留 |
**RHEL AUS のパッチを入手するには、有効な AUS サブスクリプションが必要です。
軽減策
一般的に、カーネルスタックメモリーの破損を悪用すると、kernel ring 0 (root など) 権限を使用して簡単にシステム上で任意のコードを実行できます。RHEL カーネルは、このようなメモリーの破損から保護する gcc コンパイルタイムオプションで強化されています。gcc -fstack-protector オプションは、カナリア値を関数の最初と関数の戻りアドレスの前に追加します。-fstack-protector-strong はカナリアの保護を、タイプや長さのアレイを含むローカルのスタック変数の周辺に拡張します。データをこれらのスタック変数にコピーする間、カーネルはカナリア値を検証してメモリーの破損を検出し、カーネルパニックによる攻撃を阻止します。
# echo "install bnep /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
# echo "install bluetooth /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
# echo "install btusb /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
RHEL 6 では、以下のコマンドを root として実行します。
# rmmod bnep
# rmmod bluetooth
# rmmod btusb
Ansible Playbook
Comments