本日は、Red Hat Enterprise Linux 6.5環境上のHinemosに関して、重大な注意喚起がございます。
チケット情報
#2477 【管理チケット】jdk.xml.entityExpansionLimit対応 ★★★
#2478 jdk.xml.entityExpansionLimit対応(Hinemos ver 4.0.3用) ★★★
#2479 jdk.xml.entityExpansionLimit対応(Hinemos ver 4.1.1用) ★★★
事象
Hinemosマネージャ及びHinemosエージェントが、特定のOpenJDK上で一定期間動作すると、
Hinemosコンポーネント間の通信が行えなくなる。
発生バージョン
ver4.0.0~ver4.0.3
ver4.1.0~ver4.1.1
対象機能
Hinemosエージェントを利用する全機能
ver4.0
ジョブ管理、ログファイル監視、カスタム監視
ver4.1
ジョブ管理、ログファイル監視、カスタム監視、Windowsイベント監視
発生条件
発生環境
Hinemosマネージャ、エージェントが以下のRed Hat Enterprise Linux(RHEL)及び
OpenJDKのバージョンを利用していること
RHEL 6.5(32bit/64bit)
以下のメディア付属の OpenJDKと、それより後の アップデート rpmパッケージで発生。
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6
RHEL 6.4
以下のもの以後の アップデート rpmパッケージで発生します。
java-1.7.0-openjdk-1.7.0.45-2.4.3.2.el6_4
java-1.6.0-openjdk-1.6.0.0-1.65.1.11.14.el6_4
発生環境外
以下の アップデート rpmパッケージ以前では発生しません。
RHEL 5.10以前
RHEL 5.10以前に対して提供されているOpenJDKについては、本事象は発生いたしません。
RHEL 5.10以前に対してOpenJDKのUpdateを行っている場合は、本事象が発生する可能性があります。
RHEL 6.3以前
RHEL 6.3以前に対して提供されているOpenJDKについては、本事象は発生いたしません。
RHEL 6.3以前に対してOpenJDKのUpdateを行っている場合は、本事象が発生する可能性があります。
RHEL 6.4
RHEL 6.4に対して提供されているOpenJDKについては、本事象は発生いたしません。
java-1.7.0-openjdk-1.7.0.25-2.3.10.4.el6_4
java-1.6.0-openjdk-1.6.0.0-1.65.1.11.13.el6_4
RHEL以外の環境について
Windows
HinemosのWindows用インストールパッケージにはOracle Javaを同梱しています。
Hinemosが同梱するOracle Javaについては、本事象は発生いたしません。
CentOS
OSのパッケージ構成はRHELと同様です。
RHELの発生環境、発生環境外の情報をご参照ください(例. CentOS 6.3⇒RHEL 6.3の情報を参照)。
Oracle Linux
OSのパッケージ構成はRHELと同様です。
RHELの発生環境、発生環境外の情報をご参照ください(例. Oracle Linux 6.3⇒RHEL 6.3の情報を参照)。
注意事項
Hinemosマネージャ及び、Hinemosエージェントにて、本事象が発生します。
Hinemosマネージャ及び、Hinemosエージェントにおいて、起動直後は本事象は発生しません。
Hinemosマネージャ及び、Hinemosエージェントの起動後に、ある程度日数が経過すると発生します。
Hinemosのオプションによっては、オプション非適用環境より早く事象が発生する可能性があります。
Hinemosマネージャが上記発生環境で動作する場合、Hinemosマネージャが全Hinemosエージェント、
Hinemosクライアントに対して通信が行えなくなる
(Hinemosマネージャが外部とSOAP通信が行えなくなります。)
Hinemosエージェントが上記発生環境で動作する場合、該当エージェントのみで通信が行えなくなる
(Hinemosエージェントが外部とSOAP通信が行えなくなります。)
本事象を回避するには、上記環境に該当する全てのHinemosマネージャ及び、Hinemosエージェントにて
パッチ適用が必要です。
事象詳細
本事象が発生すると次の状況となる。
1.Hinemosエージェントの全機能が動作しない
- ジョブ管理機能が動作しない(ver4.0/4.1)
- ログファイル監視の結果が通知されない(ver4.0/4.1)
- カスタム監視の結果が通知されない(ver4.0/4.1)
- Windowsイベント監視の結果が通知されない(4.1)
2.HinemosクライアントがHinemosマネージャに接続できなくなる
本事象の発生原因はOpenJDK6,7の特定バージョン以降より追加された機能による。
OpenJDKのXML解析に関するDoSの脆弱性情報に関して、以下のCVEデータベースに対する影響である。
(entityExpansionLimitを含むXML解析処理に対する制約が追加)
CVE-2013-4002
https://access.redhat.com/security/cve/CVE-2013-4002
CVE-2013-5825
https://access.redhat.com/security/cve/CVE-2013-5825
具体的には以下の通り。
Hinemosマネージャ、エージェント、クライアント間の通信は基本的にJAX-WSによるSOAP通信を行う。
Hinemosエージェントからは定期的に設定変更の有無等の確認通信が行うが、設定変更が無ければ
同一のSOAPメッセージを繰り返し通信することになる。
同一のJAX-WSアプリの同一スレッドで64,001通のSOAPメッセージを受信し、処理しようとすると
エラー(JAXP00010001)が発生する。
OpenJDKの特定バージョン以降よりDoS攻撃に対応するため、entityExpansionLimitパラメタ導入され、
このデフォルト設定値が64,000である。
そして、64,001通のSOAPメッセージの処理(正確にはXML解析処理)を行うと、DoS攻撃の可能性として
以降のSOAPメッセージの処理が行われなくなる。
Hinemosの監視やジョブの設定変更有無にも影響するが、Hinemosクライアントから何も設定を
行っていない状況の場合、約1か月の連続運転で本事象が発生する。
特徴的なものとして、Hinemosのジョブが「Agent Timeout Error」になり、Hinemosエージェント側の
ログ(agent.log)に以下のようなメッセージが表示される。
[agent.log]
-----------------
WebServiceException Couldn't create SOAP message due to exception: Unable to create StAX reader or writer
-----------------
復旧方法としては、Hinemosマネージャ及び、Hinemosエージェントの再起動が必要となる。
運用対処としては、Hinemosマネージャ、エージェントのJavaプロセスの起動時オプションに
「-Djdk.xml.entityExpansionLimit=0」を追加することで、この制限を無視して既存のOpenJDKと同様の動作に変更できる。
修正に伴う動作変更
Hinemosの連続運転に伴う上記「事象」を回避できる。
[補足]
★★★:通常の使用状態でもクリティカルになる可能性・範囲の大きい内容
★★ :条件によってはクリティカルになる可能性・範囲が生じうる内容
★ :クリティカルになる可能性・範囲が低い内容
対処方法
本事象については、Hinemosマネージャ及び、Hinemosエージェントへのパッチ適用が必要です。
Hinemosエージェントについては、パッチを使用すると「エージェントアップデート」機能により、全エージェントに
一括配布が可能です。
Hinemosのパッチ入手については、Hinemosパートナー各企業までお問い合わせください。
Hinemosの保守サポートやオプション製品など、既存のご契約先がある場合は、同Hinemosパートナー企業までご相談ください。
以下では、パッチを使用せずに手動で「-Djdk.xml.entityExpansionLimit=0」の設定を追加して対処を行う方法を記載します。
パッチを適用しない場合の対処方法
Hinemosマネージャ
Hinemosマネージャの起動オプションを指定する設定ファイルへ追記します。
本設定の反映には、Hinemosマネージャの再起動が必要です。
〇Hinemos ver4.0用
/opt/hinemos/etc/jboss/run.confに以下を追加
#### Hinemos : for entityExpansionLimit
JAVA_OPTS="${JAVA_OPTS} -Djdk.xml.entityExpansionLimit=0"
〇Hinemos ver4.1用
/opt/hinemos/hinemos.cfgの以下の行を修正
### JVM
JAVA_OPTS=""
↓(修正)
### JVM
JAVA_OPTS="-Djdk.xml.entityExpansionLimit=0"
Hinemosエージェント for Linux
Hinemosエージェント for Linuxの起動オプションを指定する起動スクリプトへ追記します。
本設定の反映には、Hinemosエージェントの再起動が必要です。
〇Hinemos ver4.0用
/opt/hinemos_agent/bin/agent_start.shに以下を追加。
## for entityExpansionLimit
JAVA_OPTS="${JAVA_OPTS} -Djdk.xml.entityExpansionLimit=0"
〇Hinemos ver4.1用
/opt/hinemos_agent/bin/agent_start.shに以下を追加。
## for entityExpansionLimit
JAVA_OPTS="${JAVA_OPTS} -Djdk.xml.entityExpansionLimit=0"
Hinemosエージェント for Windows
Hinemosプロジェクトのサイトで公開しているHinemosエージェント for Windowsに同梱されるJREについては
本事象は発生しません。
そのため、特に対処は不要です。
Hinemosプロジェクト(SourceForge.JP)
http://sourceforge.jp/projects/hinemos/