Trong bài viết này, chúng tôi giới thiệu một hệ thống dễ bị tấn công và chứng minh cách có thể lấy được một trình bao từ xa bằng cách sử dụng khai thác mã nguồn mở Log4j có sẵn cho bất kỳ ai.
Lỗ hổng nghiêm trọng này, có nhãn CVE-2021-44228, ảnh hưởng đến một số lượng lớn khách hàng, vì thành phần Apache Log4j được sử dụng rộng rãi trong cả phần mềm thương mại và phần mềm nguồn mở. Ngoài ra, những kẻ tấn công ransomware đang vũ khí hóa việc khai thác Log4j để tăng khả năng tiếp cận với nhiều nạn nhân hơn trên toàn cầu.
Phần trình diễn của chúng tôi được cung cấp cho mục đích giáo dục cho nhiều đối tượng kỹ thuật hơn với mục tiêu cung cấp thêm nhận thức về cách hoạt động của cách khai thác này.
Raxis tin rằng hiểu rõ hơn về thành phần của các hoạt động khai thác là cách tốt nhất để người dùng học cách chống lại các mối đe dọa ngày càng tăng trên internet.
Lỗ hổng Apache Log4j, CVE-2021-44228 ( https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ), ảnh hưởng đến một số lượng lớn hệ thống và những kẻ tấn công hiện đang khai thác lỗ hổng này cho kết nối internet hệ thống trên toàn thế giới.
Để chứng minh cấu trúc của một cuộc tấn công như vậy, Raxis cung cấp một minh chứng từng bước về việc khai thác đang hoạt động. Trong phần trình diễn của mình, chúng tôi đưa ra các giả định về môi trường mạng được sử dụng cho máy chủ nạn nhân có thể cho phép cuộc tấn công này diễn ra.
Chắc chắn có nhiều cách để ngăn chặn cuộc tấn công này thành công, chẳng hạn như sử dụng cấu hình tường lửa an toàn hơn hoặc các thiết bị bảo mật mạng nâng cao khác, tuy nhiên, chúng tôi đã chọn một cấu hình bảo mật “mặc định” chung cho mục đích trình diễn cuộc tấn công này.
Đầu tiên, máy chủ nạn nhân của chúng tôi là máy chủ web Tomcat 8 sử dụng phiên bản Apache Log4j dễ bị tấn công và được định cấu hình và cài đặt trong vùng chứa docker.
Bộ chứa docker cho phép chúng tôi chứng minh một môi trường riêng biệt cho máy chủ nạn nhân được cách ly với môi trường thử nghiệm của chúng tôi. Máy chủ Tomcat của chúng tôi đang lưu trữ một trang web mẫu có thể truy cập được từ https://github.com/cyberxml/log4j-poc và được định cấu hình để hiển thị cổng 8080 cho máy chủ web dễ bị tấn công.
Không có cổng đến nào khác cho vùng chứa docker này được hiển thị ngoài 8080. Vùng chứa docker không cho phép lưu lượng ra ngoài, tương tự như cấu hình mặc định của nhiều mạng máy chủ.
Lưu ý, kho lưu trữ GitHub cụ thể này cũng có phiên bản tích hợp của mã tấn công Log4j và tải trọng, tuy nhiên, chúng tôi đã vô hiệu hóa nó cho ví dụ của chúng tôi để cung cấp chế độ xem màn hình mà kẻ tấn công nhìn thấy. Chúng tôi chỉ đang sử dụng các phần máy chủ web Tomcat 8, như được hiển thị trong ảnh chụp màn hình bên dưới.
Hình 1: Máy chủ web Demo của nạn nhân Tomcat 8 đang chạy mã dễ bị khai thác Log4j
Tiếp theo, chúng ta cần thiết lập máy trạm của kẻ tấn công. Sử dụng mã khai thác từ https://github.com/kozmer/log4j-shell-poc, Raxis định cấu hình ba phiên đầu cuối, được gọi là Netcat Listener, Python Web Server và Exploit, như được hiển thị bên dưới.
Phiên Netcat Listener, được chỉ ra trong Hình 2, là một trình lắng nghe Netcat đang chạy trên cổng 9001. Phiên này là để bắt trình bao sẽ được chuyển cho chúng ta từ máy chủ nạn nhân thông qua khai thác.
Hình 2: Trình nghe Netcat của kẻ tấn công trên Cổng 9001
Phiên Python Web Server trong Hình 3 là một máy chủ web Python chạy trên cổng 80 để phân phối tải trọng cho máy chủ nạn nhân.
Hình 3: Máy chủ web Python của kẻ tấn công để phân phối tải trọng
Phiên Khai thác, được hiển thị trong Hình 4, là mã khai thác Log4j bằng chứng khái niệm hoạt động trên cổng 1389, tạo ra một máy chủ LDAP được vũ khí hóa.
Mã này sẽ chuyển hướng máy chủ nạn nhân để tải xuống và thực thi một lớp Java được lấy từ Máy chủ Web Python của chúng tôi đang chạy trên cổng 80 ở trên.
Lớp Java được cấu hình để sinh ra một trình bao tới cổng 9001, là trình nghe Netcat của chúng ta trong Hình 2.
Hình 4: Mã khai thác Log4J của kẻ tấn công
Bây giờ mã đã được dàn dựng, đã đến lúc thực hiện cuộc tấn công của chúng tôi. Chúng tôi sẽ kết nối với máy chủ web của nạn nhân bằng trình duyệt web Chrome.
Chuỗi tấn công của chúng tôi, được hiển thị trong Hình 5, khai thác JNDI để thực hiện truy vấn LDAP tới phiên Khai thác của Kẻ tấn công đang chạy trên cổng 1389.
Hình 5: Trang web của nạn nhân và chuỗi tấn công
Chuỗi tấn công khai thác lỗ hổng trong Log4j và yêu cầu thực hiện tra cứu đối với máy chủ LDAP được vũ khí hóa của kẻ tấn công.
Để thực hiện việc này, một yêu cầu gửi đi được thực hiện từ máy chủ nạn nhân đến hệ thống của kẻ tấn công trên cổng 1389. Phiên Khai thác trong Hình 6 cho biết việc nhận kết nối LDAP đến và chuyển hướng được thực hiện đến Máy chủ Web Python của Kẻ tấn công của chúng tôi.
Hình 6: Phiên khai thác của kẻ tấn công chỉ ra kết nối đến và chuyển hướng
Phiên Khai thác đã gửi một chuyển hướng đến Máy chủ Web Python của chúng tôi, máy chủ này đang cung cấp một lớp Java được vũ khí hóa có chứa mã để mở một trình bao.
Lớp Java này thực sự đã được định cấu hình từ phiên Khai thác của chúng tôi và chỉ được Máy chủ Web Python phục vụ trên cổng 80. Nhật ký kết nối được hiển thị trong Hình 7 bên dưới.
Hình 7: Máy chủ web Python của kẻ tấn công gửi Java Shell
Bước cuối cùng trong cuộc tấn công của chúng tôi là Raxis lấy được shell với quyền kiểm soát máy chủ của nạn nhân. Lớp Java được gửi đến nạn nhân của chúng tôi chứa mã mở một trình bao từ xa cho phiên netcat của kẻ tấn công của chúng tôi, như thể hiện trong Hình 8.
Kẻ tấn công hiện có toàn quyền kiểm soát máy chủ Tomcat 8, mặc dù bị giới hạn ở phiên docker mà chúng tôi đã định cấu hình trong kịch bản thử nghiệm này.
Hình 8: Quyền truy cập của kẻ tấn công vào máy chủ của nạn nhân kiểm soát Shell
Như chúng tôi đã chứng minh, lỗ hổng Log4j là một quy trình gồm nhiều bước có thể được thực thi khi bạn có đúng vị trí. Raxis đang thấy mã này được triển khai vào các chương trình tấn công ransomware đang tìm kiếm hệ thống trên internet để khai thác.
Đây chắc chắn là một vấn đề quan trọng cần được giải quyết càng sớm càng tốt, vì việc kẻ tấn công tiếp cận hệ thống bị lộ chỉ là vấn đề thời gian.
Cũng được xuất bản tại đây