Zip bomb có thể nén 4.5 triệu GB dữ liệu vào một file 46MB

Sử dụng tệp ZIP là một phương thức tiện dụng để nén thông tin, qua đó giúp đơn giản hóa hoạt động lưu trữ, di chuyển, cũng như sao chép dữ liệu trên quy mô lớn. Phương pháp này không phải là mới và đã được sử dụng trong hàng thập kỷ quả, tuy nhiên các vấn đề thực tế về tuổi thọ của đĩa mềm 5.25 inch và 3.5 inch khiến việc lưu trữ file zip bằng đĩa mềm trở thành một canh bạc khi nói đến các quy trình bảo quản dữ liệu dài hạn.

File nén

Trong nhiều năm, người ta đã tạo ra cái gọi là “zip bomb” - một thuật ngữ liên quan đến các file nén lồng nhau tầng tầng lớp lớp mà khi giải nén đến lớp cuối cùng, kích thước của tập dữ liệu sẽ lớn hơn nhiều. Đồng thời sau khi giải nén thành các tệp lớn, zip bomb có thể khiến máy tính không thể xử lý được lượng dữ liệu lớn đột ngột xuất hiện trong bộ nhớ, hoặc dữ liệu sẽ không thể lưu trữ được trên ổ cứng, thậm chí khiến máy tính dừng hoạt động. Một tập tin không rõ nguồn gốc, có tên 42.zip, đã xuất hiện và lưu truyền trôi nổi trên mạng trong nhiều năm, có thể “đóng gói” đến 4.5PB (tương đương với 4.5 triệu GB hay 45.000TB) dữ liệu trong diện mạo của một tệp nén có kích thước chỉ khoảng 42KB bằng phương pháp zip bomb này. Các phần mềm chống virus cũng như ứng dụng giải nén hiện nay thường ngăn chặn hoạt động của zip bomb bằng cách “từ chối” bị dụ vào lớp giải nén sau lớp dữ liệu đệ quy.

Chuyên gia nghiên cứu khoa học máy tính David Fifield đã phát triển một loại zip bomb của riêng mình nhằm cải thiện hơn nữa khả năng nén dữ liệu vốn đã rất “bá đạo” của chúng. Kích thước tệp của David Fifield lớn hơn nhiều, yêu cầu một tệp cơ sở nặng khoảng 46MB để mở rộng thành kho lưu trữ 4.5PB - nhưng ưu điểm chính nằm ở chỗ nó không dựa vào đệ quy để đạt được mức độ nén của mình.

Lý do zip bomb sử dụng đệ quy không gì khác ngoài việc thuật toán DEFLATE được sử dụng trong trình phân tích cú pháp ZIP có thể đạt được tỷ lệ nén cao hơn 1032:1. Nếu bạn muốn nén nhiều hơn thế, đương nhiên bạn phải lặp lại quy trình nén. David Fifield đã phát hiện ra một phương thức có thể vượt qua giới hạn này, và mô ta trên blog cá nhân của mình như sau:

“Bài viết này cho thấy cách xây dựng một zip bomb không đệ quy có tỷ lệ nén vượt quá giới hạn DEFLATE là 1032. Về cơ bản nó hoạt động dựa trên nguyên lý xếp chồng các tệp bên trong zip container, nhằm tham chiếu một “kernel” có dữ liệu được nén cao trong nhiều tệp mà không cần thực hiện nhiều bản sao của nó. Kích thước đầu ra của zip bomb sẽ tăng với hệ số bậc hai theo kích thước dữ liệu đầu vào, tức là, tỷ lệ nén sẽ càng trở nên tốt hơn khi “quả bom” này có kích thước lớn hơn. Cấu trúc này phụ thuộc nhiều vào các tính năng của cả zip và DEFLATE, nó không thể được di chuyển trực tiếp sang các định dạng tệp tin hoặc thuật toán nén khác. Ngoài ra, nó cũng có thể tương thích với hầu hết các trình phân tích cú pháp zip, một số trường hợp ngoại lệ là các trình phân tích cú pháp có thể phân tích trong một lượt mà không cần tham chiếu trước đến thư mục trung tâm của tệp zip”.

Zip bomb

Để có thể áp dụng phương pháp trên vào thực tế, nhà nghiên cứu này đã phải xem xét lại cách thức dữ liệu được lưu trữ trong các tệp zip và chọn cách triển khai Deflate sao cho phù hợp nhất.

Fifield đã sử dụng bulk_deflate, một chương trình nén tùy chỉnh, chuyên dùng để nén một chuỗi byte lặp lại, vì nó có thể đóng gói lượng dữ liệu “đặc” hơn so với zlib, info_ZIP hay Zopfli. Tuy vậy, ông cũng khuyến cáo rằng bulk_deflate có thể cho hiệu quả không được như mong muốn ở một vài trường hợp sử dụng nhất định. Bên cạnh bulk_deflate, Fifield cũng đã phải sử dụng đến một tiện ích mở rộng của tiêu chuẩn zip được gọi là ZIP64 để tạo ra một tệp có hơn 281TB dữ liệu đầu ra. Với ZIP64, bạn có thể chế tạo một “quả bom zip” có kích thước lớn và vô cùng hiệu quả.

Ngoài ra còn rất nhiều thông tin thú vị khác đã được nhà nghiên cứu này chia sẻ trên blog cá nhân, có thể kể đến như hướng dẫn cách tạo zip bomb, phương thức sửa đổi chính xác cho tiêu chuẩn cơ bản và đánh giá việc sử dụng các thuật toán nén khác ngoài Deflate để giải quyết cùng một ý tưởng. Ví dụ như Bzip2 cũng có thể được sử dụng để tạo zip bomb, mặc dù không hiệu quả cho lắm.

Một số ứng dụng antivirus hiện nay có thể phát hiện zip bomb đệ quy và đồng thời cũng có thể phát hiện ra cả phương pháp mà Fifield đã sử dụng. Nhưng ông cho rằng việc bảo vệ zip bomb cũng không có gì là quá phức tạp. Một “quả bom zip” có thể được coi tương đương với một cuộc tấn công DoS nhắm vào một mục tiêu duy nhất. Đây là phương thức tấn công đã có từ những buổi sơ khai của Internet (quả bom zip đầu tiên được tải lên internet vào năm 1996). Nghiên cứu trong tương lai về chủ đề này là một câu chuyện kỹ thuật thú vị, ngay cả khi khả năng xảy ra một cuộc tấn công lớn bằng zip bomb ở thời điểm hiện tại là khá thấp.

Thứ Bảy, 13/07/2019 08:08
53 👨 1.940