「Log4jの脆弱性が脅威と聞いたけれど仕組みがよくわからない」
「Log4jの脆弱性のしくみを理解し、今後に備えておきたい」
Log4jは長年Javaのロギングツールとして使われています。しかし、2021年11月に重大な脆弱性が発見され、日本国内のみならず世界的に問題になりました。実際にサイバー攻撃を受けて、大事な情報資産を盗まれたり破壊されたりしては、企業の信頼失墜に繋がりかねません。
そこで、本記事では以下の内容について紹介します。
- Log4jの概要
- Log4jの脆弱性と仕組み
- 想定される被害
- Log4jの脆弱性への対応策
Log4jの脆弱性だけでなく対処法も理解できる内容となっておりますので、ぜひ参考にしてください。
プログラム言語にJavaを採用している企業の方、必見!
Log4jの脆弱性が脅威と聞いたけれど、何から取り組むべき?
Javaを最新バージョンへ適宜アップデートするなど、基本的な対策を実施することが必要不可欠です。また、実装したコードに潜む脆弱性を見落とさないためにも、Webシステム全体の脆弱性をチェックし、最適な対策を実施する工程を加えましょう。方法はこちらの資料をご覧ください。
Log4jとは?
Log4jとはJavaで長年利用されているロギングツールです。サーバー側がユーザーのリクエストに応じた処理を実行する際に、Log4jがエラーやデバッグデータのログを出力するので開発者などがよく利用します。以下に主な機能をリストアップしました。
- 出力先の指定:コンソール、ファイル、メールなど
- 出力情報のレベル設定:FATAL、ERROR、WARNなど計6段階
- 出力情報のレイアウト設定:ユーザー指定のフォーマット、HTMLなど
Log4jのメリットは出力スピードが速いことで、アプリのパフォーマンス低下を心配せずに利用できます。また、出力エラーの種類や出力先を自由に変えることも可能です。
このようにLog4jには高速性と柔軟性があるため、エラーの記録・出力で重宝されています。
Log4jの脆弱性とその仕組み
Log4jの脆弱性を攻撃された場合、ユーザーの意図しないプログラムが実行されるリスクがあります。具体的には、以下の流れで攻撃が行われる可能性があります。
簡単に任意のコードを実行できるため、データの破壊やマルウェアの拡散など、多様な攻撃が可能です。またリモートで実行できるため、スマートフォンやipadから攻撃できる容易さも、脅威の要因となります。
Log4jの脆弱性が発見された当時、CVSSと呼ばれるセキュリティリスクの国際評価基準では10.0と深刻度評価としては最も高いレベルに分類されました。
脆弱性への攻撃による被害
リモートで任意のプログラムを実行できるため、あらゆるリスクが考えられます。下記に想定される被害例を挙げました。
- 顧客情報を不正に取得される
- サイバー攻撃の踏み台にされる
- 自社サイトが意図しないUIに変えられる
クレジットカードや銀行口座など重要な個人情報が盗まれた場合、訴訟沙汰になる可能性があります。自社のパソコンが乗っ取られたら、他の企業へサイバー攻撃を行うための踏み台にされる可能性もあるでしょう。また、WebサイトにJavaを使用している場合、第三者が偽の情報を表示させて営業妨害することも可能です。
このようにLog4jの脆弱性を狙われると、あらゆるサイバー攻撃に晒されます。
影響を受けるサービスや製品
以下のリストは、開発元が影響を認めているサービスの例です。
影響を受けるサービスや製品の例
- Oracle:Apache Log4j, versions 2.0-2.15.0
- IBM:WebSphere Application Server8.5-9.0
- Intel:Intel® oneAPI DL Framework Developer Toolkit
- Minecraft:Minecraft Java Edition
すでに多くの企業が改良版をリリースしていますが、今後も新しい脆弱性が見つかる可能性は否めません。サービスの最新情報は常にチェックしましょう。
脆弱性が発見された背景
2021年11月に、中国のEC会社「アリババ」のセキュリティチームが脆弱性を発見し、ASF(米国のOSS組織)に報告して問題が発覚しました。ASFが改修を試みましたが、修正が終わる前に脆弱性の詳細が流布。その結果、Javaの関連製品で多数のサイバー攻撃が確認されました。
セキュリティパッチが公開された後も、新たな脆弱性が報告されています。1つ脆弱性が見つかると関連の脆弱性も検出されたため、世界中でLog4jの脅威が懸念されるようになったのです。
OSS活用における3つの注意点
Log4jも含めてOSS(オープンソースソフトウェア)のメリットは、誰もが編集・再配布できる点です。一から実装するよりも低コストかつ短納期で開発を進められるうえに、技術的な問題が発生しても高確率で解決策を見つけられます。
一方、OSSにはセキュリティの脆弱性が存在する場合があります。ここでは、OSSを活用する上で注意するべき3つの点についてご説明します。
1. OSSの利用で求められる脆弱性対応
OSSは作ったプログラムの公開が義務付けられているため、悪意ある第三者がプログラムを解析して脆弱性を狙うケースは少なくありません。ユーザーが修正版を配布して脆弱性を解消できるケースもありますが、近年はOSSの機能が多様化しており、脆弱性も見過ごされがちです。
OSSを利用する際は「誰かが脆弱性を解消してくれるはず」と期待することはお勧めしません。「今使っているOSSに脆弱性は残っていないか」という観点で確認することが重要です。
2. 脆弱性が発生しない保証はない
OSSは常に公開されているため、悪意ある第三者が新たな不正アクセスを試みようと模索しています。実際、2021年に中国でLog4jの脆弱性が報告された後も、2022年1月に新たな脆弱性が見つかりました。OSSは無償で使えることや開発工期を短縮できるなど便利ですが、脆弱性が残る可能性があることも念頭に置きましょう。
3. システムの管理と定期的な脆弱性チェックが有効
OSSは常に脆弱性に晒されているため、不正アクセスが無いか、データが改ざん・盗難されていないかこまめにチェックしましょう。おすすめの方法は以下の3つです。
- 脆弱性診断の実施
- 配布元の最新情報をチェック
- 脆弱性情報データベースをチェック
脆弱性診断とは、システムやネットワークを調査して欠陥や不具合、機器の設定ミスなどを洗い出すテストのことです。WAFのような不正アクセス防止ツールと併せて活用すると更に有効です。
また、OSS配布元の最新情報は常にチェックしておきましょう。脆弱性が発見された際にはプレスリリースが出され、対策方法が公開されます。ただし、CVEやNVDなどの脆弱性情報データベースから先に情報が出ることもあるので、そちらも確認することをおすすめします。
また、脆弱性診断を導入すると、さまざまな脆弱性を早期に発見できるようになります。「脆弱性診断(セキュリティ診断)とは|必要性からやり方まで、すべて解説」では、脆弱性診断とは何か、どのように有効なのか、実施方法などについて説明しています。参考にしていただき、セキュリティ強化のために脆弱性診断の導入をご検討いただくことをおすすめします。
Log4jの脆弱性に有効な対応と対策5選
前章までは脆弱性の仕組みと攻撃されたときのリスクを解説しましたが、実際に防ぐ手段を有して初めて脆弱性を解消できます。ここからは、Log4jの脆弱性の対応手順や対策方法を紹介します。
1. 自社システムにおける攻撃リスクを評価する
Log4jの脆弱性によって、自社システムがどのくらい被害を受けやすいかCVSSで評価しましょう。CVSSとは、ソフトウェアや情報システムで脆弱性が見つかった場合の深刻度を評価する手法で、指標は以下の3つです。
- 基本評価基準:脆弱性の特性を評価
- 現状評価基準:現在の脆弱性を評価
- 環境評価基準:最終的な脆弱性を評価
各評価は攻撃の区分や発動条件、権限の有無などから10段階で評価され、数字が大きいほど深刻度が高いとみなされます。
CVSSの詳細については、独立行政法人 情報処理推進機構(IPA)の「共通脆弱性評価システムCVSS概説」をご参照ください。
https://www.ipa.go.jp/security/vuln/scap/cvss.html
2. 影響を受ける範囲を確認する
Log4jはJavaのライブラリで幅広く使われているため、多くのJava製品が脆弱性の影響を受けます。ただし被害のレベルは製品によってさまざまで、セキュリティの強弱によって影響度も変わります。
自社サイトがどの程度の攻撃耐性があるのか事前に確認するには、ペネトレーションテストを受けてみましょう。ペネトレーションテストとは、疑似的に脆弱性を突いてシステムに侵入を試みるテストです。現在のセキュリティ対策でどの程度攻撃を防ぐことができるかを確認できるため、対策の有効性を検証できることがメリットといえます。
3. Javaを最新バージョンにアップデートする
Log4jの脆弱性が発表されて以来、下記のバージョンで修正版を利用できます。
Java 8およびそれ以降のユーザ向け修正版 | Log4j 2.17.1 |
Java 7のユーザ向け修正版 | Log4j 2.12.4 |
Java 6のユーザ向け修正版 | Log4j 2.3.2 |
上のバージョンより古いJavaを利用している場合は、最新版にアップデートしましょう。
未使用のJavaをアンインストールする
Javaの公式サイトでは、システムから古いバージョンのJavaをすべてアンインストールすることを強く薦めています。システム上に不必要なJavaを残しておくと、過去のLog4jのような深刻な脆弱性が発生することも否めません。
Javaの脆弱性について「Javaの脆弱性|攻撃による影響や被害事例を元に2つの有効な対策を紹介」にて解説しています。ご一読いただき、日常的に利用しているJavaのセキュリティ対策について、改めて見直してみてはいかがでしょうか。
4. Lookupを無効にする
システムの都合上バージョンアップが難しい場合は、Lookupを停止させましょう。そもそもLog4jの脆弱性は、Lookupでプログラムの処理内容を出力すだけでなく、LDAPに問い合わせた情報も反映している点にあります。第三者が用意したサーバーへアクセスしないよう、Lookupそのものを無効にしましょう。
5. WAFを導入する
WAFとはWebアプリケーションへの攻撃を防ぐファイアウォールで、ブラックリスト方式とホワイトリスト方式の2つのタイプがあります。
ブラックリスト方式
あらかじめ定義した不正な文字列等と通信を比較し、一致した際に通信を防ぐ方式です。Log4jは攻撃側が文字列を難読化させて攻撃を試みるケースもあったので、変化する攻撃にあわせてブラックリストが随時更新されるようなWAFを採用しましょう。
ホワイトリスト方式
通過させたい正規のアクセスのみ許可するタイプで、ブラックリストとは検知方法が真逆です。正規のアクセスとは何か、URLやパラメータだけでなくどのような遷移を辿るかなど細かく設定する必要があり、ホワイトリスト作成には時間がかかります。
きちんと設定ができていれば、不正なアクセスを防ぐ可能性が高いので「導入・運用負荷が大きくなっても良いから確実に不正アクセスを防ぎたい」という企業にホワイトリストはおすすめです。
まとめ|Log4jなどOSSの脆弱性には基本的な対策を確実に適用し続けることが重要
本記事では、Log4jの概要と脆弱性のメカニズム、対処法について紹介しました。
- 第三者がLog4jの脆弱性を突いて任意のコードを実行する
- 想定される被害はデータの破壊、マルウェアの感染、サイバー攻撃の踏み台などさまざま
- 定期的な脆弱性チェックが有効
Log4jの脆弱性は一旦落ち着いていますが、また新たに重大な脆弱性が見つかるかもしれません。対応が後手に回らないよう、本記事で紹介したツールなども活用してセキュリティチェックを怠らないようにしましょう。