ヤマー それで、Log4jの脆弱性ですが騒動が大きくなったポイントはどこなんでしょうか?
キーチ プログラミングや開発に親しみがない人に先に説明しておかないといけないのは2点あって。
1点目は「Javaがエンタープライズの開発でメジャーな言語である」ということ。仮想マシン上で動作する特性から「30億のデバイスで走るJava」とか「Write once, run anywhere」(一度書けばOSに依存せずどこでも動く)という標語があるくらい、いろんな場所で使われることを想定した言語なんです。
まず広く使われているよってこと。
マツ 「30億のデバイスで走るJava」も、2005年時点での話ですよね。今はもっとIoT化が進んでいるから……。
キーチ 2点目は「プログラムはほとんどがログを内部で出力・保存する」ということ。プログラムがいつどんな動作をしたのかということを出力させて、一定期間は保存しておかないと、例えば不具合が出たときにどこを調べたらいいか分からないのです。それくらい「ログを取る」のはあらゆるプログラムにとって当たり前の話。
マツ むちゃくちゃ広く使われているデバイスに、普通に装備されている機能であると。
キーチ ですね。Log4jは外部ライブラリなので全てのJavaプログラムがこれを活用しているわけではないものの、金曜日時点でのSNSの反応や、ざっと調べた限りでは、サーバサイドでの採用例は多そうだ、と。
ヤマー そして、その脆弱性がこれまでに例がないほど大きな穴だったわけですよね。
キーチ はい、それがなぜ大きいかというと「ログに記録させるだけで任意のリモートコードを実行できてしまう」からなんですが。
マツ XSS(クロスサイトスクリプティング)どころの話ではない。
キーチ ログって普通は本当にただの文字列なんですよ。
ヤマー あくまでも結果を出力し続けるだけですもんね。
キーチ そこにたとえコンピュータウイルスのソースコードが書いてあろうが、コンパイルして実行可能になるわけがないし、何の問題もないのです。
だけど、Log4jはなぜか「ログに記録した文字列に特定の命令が書いてあったら外部からプログラムを読み込みます」という実装をしていた。
マツ ブートローダーのように。
キーチ ああ、ブートローダーっぽいですね(笑)。
マツ 確かにこれは万能すぎる。便利だよ、便利だけど超危険すぎる。
キーチ だから、オンラインゲームのサーバを標的にするならチャットに書き込むだけでもいいし、ユーザー名とかユーザー側でいじれる文字列を変えてみるでもいいし、とにかくその文字列をログに送れさえすれば攻撃が成立してしまう。
ヤマー Log4jは特定のサービスに依存しない全般的な脆弱性ですが、最初「Minecraft」のコミュニティーでも話題になっていたようですね。
キーチ どこから攻撃が始まったかは明らかでないですが、話題としての震源地はマイクラだったように見えましたね。
マツ MinecraftはJavaを使うんですね。
キーチ Java版「も」あるということです(正確には、Java版と統合版が存在する)。
じゃあこれで「どんな悪いことができるの?」って話なんですけど。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR