Log4j là một thư viện logging (ghi nhật ký) được sử dụng phổ biến trong các ứng dụng Java. Thư viện này giúp các nhà phát triển ghi lại thông tin về các sự kiện xảy ra trong quá trình thực thi ứng dụng, từ các lỗi, cảnh báo, thông báo đến thông tin về các hoạt động của người dùng. Log4j cung cấp các tính năng như cấu hình linh hoạt, ghi log vào các đầu ra khác nhau (file, cơ sở dữ liệu, bảng điều khiển, vv.), và hỗ trợ các mức độ log như DEBUG, INFO, WARN, ERROR và FATAL.
Mặc dù Log4j là một công cụ rất hữu ích và mạnh mẽ trong việc theo dõi và chẩn đoán ứng dụng, nhưng vào cuối năm 2021, một lỗ hổng bảo mật nghiêm trọng đã được phát hiện trong thư viện Log4j, làm dấy lên nhiều lo ngại về bảo mật trên toàn cầu.
1. Log4j là gì?
Một phương pháp đáng tin cậy để gỡ lỗi phần mềm trong vòng đời phát triển của nó đòi hỏi phải chèn các câu lệnh nhật ký (log statement) vào mã. Log4j là một trong những thư viện ghi nhật ký như vậy dành cho Java.
Được phát triển và duy trì bởi Quỹ Phần mềm Apache mã nguồn mở, Log4j có thể chạy trên tất cả các nền tảng chính bao gồm Windows, Linux và macOS của Apple.
2. Lỗ hổng Log4j (CVE-2021-44228)
Lỗ hổng bảo mật Log4j, được gọi là Log4Shell, là một lỗ hổng RCE (Remote Code Execution – Thực thi mã từ xa) nghiêm trọng xuất hiện trong Log4j 2.x. Lỗ hổng này cho phép kẻ tấn công thực thi mã độc từ xa trên hệ thống của nạn nhân chỉ bằng cách gửi các yêu cầu đặc biệt có chứa chuỗi khai thác (exploit) vào ứng dụng sử dụng Log4j.
Lỗ hổng này xuất phát từ tính năng JNDI Lookup trong Log4j. Khi ứng dụng ghi lại thông tin log với một chuỗi chứa các yêu cầu JNDI, Log4j sẽ thực hiện kết nối đến một máy chủ ngoài (có thể được kiểm soát bởi kẻ tấn công) và tải về mã độc từ đó. Điều này có thể dẫn đến việc kẻ tấn công chiếm quyền điều khiển hệ thống, cài đặt phần mềm độc hại hoặc thực hiện các cuộc tấn công khác.
>>> Xem thêm: Thách thức lớn nhất cho ứng viên trong ngành Trí tuệ nhân tạo
3. Log4j được sử dụng như thế nào?
Logging (tạm dịch là ghi nhật ký) rất quan trọng trong phát triển phần mềm vì nó cho biết trạng thái của hệ thống khi chạy. Có sẵn nhật ký hoạt động của hệ thống tại bất kỳ thời điểm nào có thể rất hữu ích trong việc theo dõi các sự cố.
Các nhà phát triển sử dụng Log4j trong các giai đoạn phát triển khác nhau. Nó cũng được sử dụng trong các game trực tuyến, phần mềm doanh nghiệp và trung tâm dữ liệu đám mây.
Có ba thành phần cơ bản được gọi là logger (trình ghi nhật ký), appenders (trình bổ sung) và layout (bố cục) tạo nên Log4j; tất cả đều hoạt động cùng nhau để phục vụ logging một cách có hệ thống.
>>> Xem thêm: Kỹ sư Điện tử viễn thông chuyển hướng theo lĩnh vực Trí tuệ nhân tạo
4. Cách tự bảo vệ khỏi lỗ hổng Log4j
Để bảo vệ hệ thống của bạn khỏi lỗ hổng Log4j, bạn cần thực hiện một số biện pháp bảo mật ngay lập tức. Dưới đây là các cách bạn có thể áp dụng để bảo vệ hệ thống của mình:
4.1 Cập nhật Log4j lên phiên bản mới nhất
Để khắc phục lỗ hổng Log4j, giải pháp đầu tiên và quan trọng nhất là cập nhật Log4j lên phiên bản mới nhất mà Apache đã phát hành. Phiên bản Log4j 2.17.1 (và các phiên bản sau) đã được sửa lỗi lỗ hổng này. Hãy kiểm tra ứng dụng của bạn và đảm bảo rằng bạn đang sử dụng phiên bản Log4j đã được vá lỗi.
- Để cập nhật Log4j trong dự án Maven, bạn có thể sửa đổi file
pom.xml
và thay đổi phiên bản Log4j trong dependency:
- Nếu bạn sử dụng Gradle, bạn cũng có thể thay đổi phiên bản trong file
build.gradle
:
4.2 Vô hiệu hóa tính năng JNDI Lookup
Nếu không thể cập nhật Log4j ngay lập tức, bạn có thể vô hiệu hóa tính năng JNDI Lookup (là nguyên nhân chính gây ra lỗ hổng). Để làm điều này, bạn có thể thêm các cài đặt sau vào cấu hình hệ thống hoặc môi trường.
- Thêm biến môi trường
LOG4J_FORMAT_MSG_NO_LOOKUPS
với giá trị làtrue
:
- Hoặc bạn có thể thêm tham số Java khi khởi chạy ứng dụng của mình:
Biện pháp này sẽ vô hiệu hóa khả năng khai thác lỗ hổng bằng cách ngừng thực thi các yêu cầu JNDI trong chuỗi log.
4.3 Kiểm tra và khử bỏ các chuỗi JNDI trong log
Một cách bảo vệ khác là kiểm tra xem ứng dụng của bạn có đang ghi lại các chuỗi có thể bị khai thác bằng JNDI hay không. Nếu phát hiện bất kỳ chuỗi nào chứa cú pháp như ${jndi:ldap://...}
hoặc jndi:rmi://...
, hãy loại bỏ hoặc thay thế chúng. Điều này giúp tránh việc ứng dụng vô tình thực hiện các yêu cầu JNDI đến các máy chủ có thể chứa mã độc.
4.4 Đảm bảo hệ thống luôn được bảo mật
Một bước quan trọng trong việc bảo vệ hệ thống khỏi các lỗ hổng bảo mật là duy trì các cập nhật bảo mật cho tất cả phần mềm và thư viện mà bạn đang sử dụng. Điều này bao gồm không chỉ Log4j mà còn tất cả các phụ thuộc và hệ điều hành của bạn.
- Thực hiện các bản vá bảo mật kịp thời.
- Quản lý các phụ thuộc của bạn để luôn đảm bảo sử dụng các phiên bản được hỗ trợ và đã được kiểm tra bảo mật.
- Sử dụng các công cụ tự động quét lỗ hổng bảo mật để phát hiện và vá các lỗi nhanh chóng.
>>> Xem thêm: Những xu hướng nổi bật trong lĩnh vực trí tuệ nhân tạo
4.5 Giới hạn quyền truy cập và kiểm tra các kết nối mạng


Để giảm thiểu khả năng kẻ tấn công khai thác lỗ hổng Log4j, bạn có thể thực hiện một số biện pháp sau:
- Giới hạn quyền truy cập: Cung cấp quyền truy cập tối thiểu cho các tài nguyên hệ thống để ngăn chặn việc thực thi mã độc.
- Cấu hình tường lửa và IDS/IPS: Sử dụng các công cụ bảo mật mạng như tường lửa hoặc hệ thống phát hiện/xâm nhập (IDS/IPS) để giám sát và chặn các yêu cầu đáng ngờ hoặc mã độc.
- Phân tích lưu lượng mạng: Theo dõi các kết nối mạng và giao thức LDAP hoặc RMI để phát hiện bất kỳ hành vi lạ nào.
4.6 Kiểm tra và xác minh hệ thống
Sau khi áp dụng các biện pháp bảo vệ, bạn nên thực hiện kiểm tra và xác minh lại hệ thống để chắc chắn rằng các biện pháp bảo mật đã được triển khai đúng đắn. Một số công cụ bảo mật như Nessus, Qualys hay OpenVAS có thể giúp quét và phát hiện lỗ hổng trong hệ thống của bạn.
Kết luận
Lỗ hổng Log4j (CVE-2021-44228) là một trong những lỗ hổng bảo mật nghiêm trọng và dễ bị khai thác nhất trong năm 2021, và có thể ảnh hưởng đến hàng triệu ứng dụng và dịch vụ sử dụng Log4j. Để bảo vệ hệ thống của bạn khỏi nguy cơ bị tấn công, bạn cần cập nhật lên phiên bản Log4j mới nhất (2.17.1 hoặc cao hơn), vô hiệu hóa tính năng JNDI Lookup nếu không thể cập nhật ngay lập tức, và kiểm tra kỹ lưỡng các chuỗi log có thể bị khai thác.
Việc duy trì các thực hành bảo mật tốt, đảm bảo rằng tất cả các thành phần phần mềm được cập nhật kịp thời và thực hiện các biện pháp bảo vệ bổ sung là cách hiệu quả nhất để giảm thiểu nguy cơ từ lỗ hổng này.
Vân Nguyễn
Dịch từ: https://www.makeuseof.com/what-is-log4j-exploit/
Bình luận (0
)