Tấn công mạng bằng AI: Cách phát hiện, ngăn chặn và phòng thủ trước các mối đe dọa thông minh

Đọc ngay
Chúng tôi sử dụng trí tuệ nhân tạo để dịch trang web và trong khi chúng tôi cố gắng đạt được độ chính xác, chúng có thể không phải lúc nào cũng chính xác 100%. Sự hiểu biết của bạn được đánh giá cao.

SVG được tiết lộ: Hiểu lỗ hổng XXE và bảo vệ cơ sở mã của bạn

bằng cách Luân Phạm, Cộng tác viên kiểm thử xâm nhập
Chia sẻ bài viết này

Các tệp hình ảnh thường được coi là tệp an toàn và thường được xử lý mà không nhận thức được các vấn đề bảo mật tiềm ẩn. Các tệp hình ảnh này, đặc biệt là tệp SVG, là các vectơ tấn công phổ biến để khởi động các cuộc tấn công nguy hiểm như Cross-Site Scripting (XSS) hoặc XML External Entity (XXE) injection. Trái ngược với các cuộc tấn công XSS, các cuộc tấn công XXE injection không ảnh hưởng đến phía máy khách, nhưng chúng có thể ảnh hưởng đáng kể đến phía máy chủ, dẫn đến một số tác động nghiêm trọng.  Trong bài đăng trên blog này, chúng ta sẽ khám phá bản chất của các cuộc tấn công XXE cụ thể thông qua vectơ tấn công Scalable Vector Graphics (SVG), thảo luận về một ví dụ thực tế và cung cấp các chiến lược giảm thiểu với OPSWAT Sản phẩm. 

Thông tin cơ bản

Trước khi đi sâu vào lỗ hổng, trước tiên chúng ta sẽ kiểm tra định dạng tệp XML, SVG và nguyên nhân gốc rễ đằng sau kỹ thuật tiêm XXE. 

Định dạng tệp XML

XML (eXtensible Markup Language) là một định dạng tệp độc lập với nền tảng để lưu trữ và trao đổi dữ liệu có cấu trúc. XML hỗ trợ cấu trúc phân cấp, làm cho nó lý tưởng để biểu diễn các mối quan hệ dữ liệu phức tạp. Dữ liệu ở định dạng XML được tổ chức thành các thẻ, thuộc tính và nội dung, giống như HTML. Tuy nhiên, XML có khả năng tùy biến và mở rộng cao, cho phép người dùng xác định các thẻ và thuộc tính của họ cho phù hợp với yêu cầu của họ. Hình dưới đây cho thấy dữ liệu của IT bộ phận ở định dạng XML. 

Đoạn mã XML hiển thị chi tiết nhân viên trong một IT Cơ cấu bộ phận

Thực thể XML

Trong XML, các thực thể là chỗ dành sẵn cho dữ liệu cho phép bạn nhúng văn bản hoặc toàn bộ tài liệu vào tài liệu hiện tại. Về mặt cú pháp, một thực thể trong XML được bao quanh bởi dấu và (&) và dấu chấm phẩy (;). Trong ví dụ dưới đây, hai thực thể được xác định trong Định nghĩa Loại Tài liệu và tham chiếu đến nội dung của tệp XML. Sự khác biệt giữa hai thực thể là thực thể nội bộ được xác định và tham chiếu trong tài liệu hiện tại, trong khi nội dung của thực thể bên ngoài là từ một tài liệu bên ngoài. Sau khi phân tích cú pháp và phân giải các thực thể, các thực thể được thay thế bằng dữ liệu tương ứng. 

Ví dụ về mã của tài liệu XML với các thực thể bên trong và bên ngoài bao gồm lời chào
Ví dụ mã XML đơn giản hóa làm nổi bật cấu trúc và việc sử dụng các thực thể và nội dung

Định dạng tệp SVG

SVG (Scalable Vector Graphics), là một định dạng tệp linh hoạt được sử dụng rộng rãi trong phát triển web, thiết kế đồ họa và trực quan hóa dữ liệu. Không giống như các định dạng hình ảnh truyền thống như JPEG hoặc PNG, SVG sử dụng định dạng XML để mô tả đồ họa vector hai chiều. Cụ thể, hình ảnh SVG bao gồm các hình dạng hình học như đường thẳng, đường cong và đa giác, được xác định bởi các phương trình toán học thay vì các pixel riêng lẻ. Do đó, đồ họa SVG có thể được thu nhỏ vô hạn mà không làm giảm chất lượng, khiến chúng trở nên lý tưởng cho thiết kế web đáp ứng và màn hình độ phân giải cao. Do tính chất XML của định dạng SVG, nó cũng cung cấp các vectơ tấn công tiềm năng cho các khai thác liên quan đến XML. 

Hình ảnh mẫu hiển thị cấu trúc tệp SVG cơ bản với nội dung văn bản

Kỹ thuật tiêm XXE và tác động

Kỹ thuật tiêm XXE lạm dụng cơ chế giải quyết thực thể bên ngoài. Cụ thể, khi trình phân tích cú pháp gặp một thực thể bên ngoài, nó sẽ tìm nạp nội dung tương ứng dựa trên loại tệp tài nguyên.  

Nếu tệp tài nguyên là cục bộ, trình phân tích cú pháp sẽ truy xuất nội dung của tệp và thay thế thực thể bằng dữ liệu tương ứng. Điều này sẽ cho phép kẻ tấn công hiển thị dữ liệu nhạy cảm như cấu hình máy chủ, thông tin đăng nhập, v.v. Để khai thác thành công lỗ hổng, kẻ tấn công khai báo một thực thể bên ngoài đề cập đến nội dung của các tệp nhạy cảm, /etc./password chẳng hạn. 

Tuy nhiên, nếu tài nguyên là từ xa hoặc dịch vụ nội bộ, trình phân tích cú pháp sẽ cố gắng tìm nạp dữ liệu bằng cách yêu cầu URL đã xác định. Điều này có thể được khai thác để thực hiện giả mạo yêu cầu phía máy chủ (SSRF). Trong trường hợp này, thay vì tham chiếu đến một tệp cục bộ, kẻ tấn công sẽ thay đổi payload thành URL của dịch vụ dễ bị tấn công để yêu cầu thay mặt máy chủ. 

Tấn công XXE thông qua xử lý sai tệp SVG: Một nghiên cứu điển hình 

Chúng tôi sẽ điều tra XXE cho một trường hợp trong thế giới thực, thư viện SVGLIB lên đến phiên bản 0.9.3. Lỗ hổng được phát hiện vào năm 2020 và được gán CVE-2020-10799. Trước tiên, chúng tôi sẽ kiểm tra luồng của thư viện, phân tích đoạn mã dễ bị tổn thương và cuối cùng chứng minh việc khai thác thông qua dịch vụ chuyển đổi SVG sang PNG. Mục tiêu là các ứng dụng web tự thực hiện bằng cách sử dụng các phiên bản SVGLIB dễ bị tấn công để chuyển đổi. 

Gói svglib

svglib là một thư viện Python thuần túy được thiết kế để chuyển đổi định dạng SVG sang các định dạng khác như PNG, JPG, PDF, v.v. bằng bộ công cụ Mã nguồn mở Report Lab. Vì các tệp SVG sử dụng định dạng XML, phân tích cú pháp và xử lý XML cũng là một phần có liên quan của luồng chính của thư viện. 3 bước chính trong thư viện như sau: 

Sơ đồ quy trình minh họa các bước từ phân tích cú pháp tệp SVG sang định dạng khác

Khai thác 

Lỗ hổng nằm ở quá trình phân tích cú pháp tệp SVG, nếu cấu hình sai, sẽ làm rò rỉ dữ liệu nhạy cảm trên máy chủ và có khả năng gây ra lỗ hổng SSRF. Kiểm tra thêm mã nguồn của gói svglib, lỗ hổng XXE là do sử dụng cấu hình mặc định để phân tích cú pháp và xử lý định dạng XML khi tải tệp SVG. Gói sử dụng gói lxml , trong đó giá trị mặc định cho các thuộc tính thực thể resolve_ cho lớp XMLParserTrue.  

Sự khác biệt về mã hiển thị các thay đổi trong hàm Python để tải tệp SVG với các tùy chọn độ phân giải thực thể
Sơ đồ dòng chảy của quá trình tấn công XXE bằng cách sử dụng tệp SVG trong ngữ cảnh bảo mật

Khắc phục

Nguyên nhân gốc rễ của vấn đề là phân tích cú pháp XML không an toàn, được thực hiện không chính xác trong thư viện svglib và một phần của phụ thuộc lxml. Do đó, việc sử dụng phiên bản dễ bị tấn công của thư viện này có thể dẫn đến tiết lộ thông tin nhạy cảm, giả mạo yêu cầu phía máy chủ hoặc thậm chí thực thi mã từ xa tiềm ẩn, tùy thuộc vào môi trường được triển khai và chức năng của ứng dụng. Lỗ hổng được giới thiệu từ các thư viện của bên thứ ba là một vấn đề nghiêm trọng đối với tính bảo mật của các ứng dụng lớn vì sự phụ thuộc của chúng có thể phức tạp và không minh bạch.  

MetaDefender Software Supply Chain

Software OPSWAT MetaDefender Supply Chain cung cấp khả năng hiển thị mở rộng và khả năng phòng thủ mạnh mẽ chống lại rủi ro trong chuỗi cung ứng thông qua sự kết hợp của nhiều công nghệ. OPSWAT Software Bill of Materials (SBOM) giúp tăng khả năng hiển thị các gói phần mềm của bên thứ ba nguồn mở và xác định các phần mềm phụ thuộc, lỗ hổng hoặc các rủi ro tiềm ẩn khác tồn tại dưới mọi lớp của hình ảnh container. Với sự tích hợp của hơn 30 công cụ diệt vi-rút kết hợp, tỷ lệ phát hiện phần mềm độc hại của công nghệ Công nghệ nâng cao nhận dạng mã độc với đa ứng dụng xử lý đạt hơn 99,99%. Hơn nữa, công nghệ Công nghệ ngăn ngừa thất thoát dữ liệu chủ động xác định thông tin xác thực như mật khẩu, bí mật, mã thông báo, giao diện lập trình ứng dụng khóa hoặc thông tin nhạy cảm khác còn sót lại trong mã nguồn. Với công nghệ phát hiện và ngăn chặn mối đe dọa zero-trust của chúng tôi, vòng đời phát triển phần mềm (SDLC) của bạn được bảo vệ khỏi phần mềm độc hại và lỗ hổng, tăng cường bảo mật ứng dụng và tuân thủ.  

OPSWAT MetaDefender Software Supply Chain bảng điều khiển hiển thị kết quả quét kho lưu trữ để tìm lỗ hổng và mối đe dọa
OPSWAT MetaDefender Software Supply Chain báo cáo bảo mật cho tệp requirements.txt không hiển thị mối đe dọa hoặc bí mật nào được phát hiện

MDSSC phát hiện CVE được tìm thấy trong svglib. Nó cũng gắn cờ mức độ nghiêm trọng CVE trong báo cáo SBOM và xác định phiên bản phần mềm dễ bị tấn công.

MetaDefender Core - Deep CDR

Một lý do khác khiến việc khai thác có thể xảy ra là ứng dụng xử lý tệp SVG được tiêm một tải trọng độc hại. Do đó, nếu tệp hình ảnh được Làm sạch trước khi đưa vào dịch vụ chuyển đổi, tải trọng sẽ bị loại bỏ, do đó ngăn chặn cuộc tấn công xảy ra. Công nghệ Deep Content Disarm and Reconstruction (CDR) trong MetaDefender Core bảo vệ khỏi các mối đe dọa đã biết và chưa biết qua tệp bằng cách vệ sinh và tái tạo tệp. Với sự hỗ trợ cho hơn 160 loại tệp phổ biến và hàng trăm tùy chọn tái tạo tệp, OPSWAT 'S Deep CDR vô hiệu hóa mọi mối đe dọa tiềm ẩn, đảm bảo tệp đã được Làm sạch vẫn có thể sử dụng đầy đủ với nội dung an toàn. 

Mã XML có thể chỉnh sửa ở định dạng SVG với lỗ hổng XXE được nêu trong phần tử DOCTYPE
Tệp SVG độc hại
Phiên bản sạch của mã XML ở định dạng SVG mà không có lỗ hổng XXE
Tệp SVG sau khi được Làm sạch bằng MetaDefender Core – Deep CDR 
Báo cáo bảo mật hiển thị tệp SVG được đánh dấu là được phép và được Làm sạch sau khi đánh giá lỗ hổng
MetaDefender Core – Deep CDR kết quả đã được Làm sạch

Tác giả Bio

Luân Phạm tham gia OPSWAT's cơ sở hạ tầng trọng yếu Chương trình học bổng sau đại học về an ninh mạng và anh ấy hiện là Người kiểm tra thâm nhập liên kết tại OPSWAT. Anh ấy đam mê bảo vệ OPSWATsản phẩm chống lại các mối đe dọa tiềm ẩn và chia sẻ kiến thức của mình. 

Luận Phạm
Associate Penetration Tester

Luôn cập nhật với OPSWAT!

Đăng ký ngay hôm nay để nhận thông tin cập nhật mới nhất về công ty, câu chuyện, thông tin sự kiện và nhiều thông tin khác.