Vũ khí hóa việc thay đổi kích thước hình ảnh để tấn công các hệ thống AI trong môi trường production
(blog.trailofbits.com)- Có thể tấn công các hệ thống AI trong môi trường production bằng cách khai thác lỗ hổng thay đổi kích thước hình ảnh
- Một hình ảnh trông có vẻ bình thường có thể biến thành payload prompt injection khi bị downscale, dẫn tới nguy cơ rò rỉ dữ liệu
- Cuộc tấn công này đã được xác nhận trên nhiều dịch vụ thực tế như Google Gemini CLI, khai thác sự không khớp giữa nhận thức của người dùng và đầu vào mà mô hình thực sự nhận được
- Tùy theo thuật toán downscale và cách triển khai cụ thể, kỹ thuật tấn công và mức độ ảnh hưởng sẽ khác nhau; có thể thử nghiệm tấn công hình ảnh bằng công cụ mã nguồn mở Anamorpher
- Các biện pháp phòng thủ được khuyến nghị gồm cung cấp bản xem trước đầu vào, áp dụng các mẫu thiết kế an toàn và yêu cầu sự phê duyệt rõ ràng từ người dùng
Bối cảnh và vấn đề đặt ra
- Khi đưa một hình ảnh trông bình thường vào hệ thống AI như LLM, có thể xảy ra kịch bản tấn công trong đó prompt injection đa phương thức ẩn bên trong được kích hoạt ở quá trình downscale, làm rò rỉ dữ liệu người dùng ra bên ngoài
- Lỗ hổng này tồn tại vì hình ảnh thực sự được truyền vào mô hình sẽ phải đi qua quá trình scale lại, và chính trong quá trình đó payload do kẻ tấn công chèn vào mới lộ ra
Tấn công thay đổi kích thước hình ảnh nhắm vào hệ thống AI production
- Bài viết blog này trình diễn việc lỗ hổng thay đổi kích thước hình ảnh có thể bị khai thác trong các cuộc tấn công thực tế nhắm vào nhiều sản phẩm AI như Gemini CLI, Vertex AI Studio, Gemini web và API, Google Assistant, Genspark
- Công cụ mã nguồn mở Anamorpher cho phép dễ dàng tạo và kiểm chứng các hình ảnh được tùy biến kiểu này
Ví dụ tấn công rò rỉ dữ liệu (Gemini CLI)
- Trong Gemini CLI, với cấu hình mặc định, máy chủ Zapier MCP sẽ tự động phê duyệt mọi lời gọi công cụ MCP mà không cần người dùng xác nhận (
settings.jsonvới thiết lậptrust=True) - Khi người dùng tải lên một hình ảnh trông bình thường, prompt injection trong hình ảnh đã bị downscale sẽ khiến dữ liệu trong Google Calendar bị rò rỉ tới email của kẻ tấn công
- Vì không có bản xem trước thực tế nên người dùng không thể biết kết quả đã bị biến đổi hay có đang bị tấn công hay không
- Các cuộc tấn công prompt injection tương tự cũng đã được xác nhận trước đó trong nhiều công cụ lập trình dạng agent như Claude Code, OpenAI Codex
- Các công cụ này thường có sẵn nhiều cấu hình và mẫu hệ thống không an toàn theo mặc định, nên cần các biện pháp khắc phục ở mức nền tảng
Các ví dụ tấn công bổ sung
- Các cuộc tấn công prompt injection dựa trên thay đổi kích thước hình ảnh cũng đã thành công trên Vertex AI, giao diện web Gemini, Gemini API, Google Assistant, Genspark
- Đặc biệt trong Vertex AI Studio, người dùng chỉ có thể kiểm tra hình ảnh độ phân giải cao nên không thể thấy hình ảnh đã downscale mà mô hình thực sự nhận vào
- Kết quả là sự không khớp giữa những gì người dùng thấy và đầu vào thực tế của mô hình đã khiến việc tấn công trở nên dễ dàng
- Vector tấn công này phân bố rộng trên nhiều hệ thống và công cụ khác nhau
Cơ chế bên trong của tấn công thay đổi kích thước hình ảnh
- Cuộc tấn công này khai thác đặc tính nội suy của các thuật toán downscale hình ảnh (resampling)
- Các thuật toán downscale tiêu biểu gồm Nearest Neighbor, Bilinear, Bicubic Interpolation, và mỗi loại đòi hỏi kỹ thuật tấn công phù hợp với đặc tính riêng
- Giữa các thư viện như Pillow, PyTorch, OpenCV, TensorFlow cũng tồn tại khác biệt trong cách triển khai như anti-aliasing, căn chỉnh, lỗi nội bộ
- Để tối ưu hóa tấn công, kẻ tấn công cần thực hiện fingerprinting để xác định hệ thống đang dùng thuật toán và cách triển khai nào
- Các hình ảnh kiểm thử như họa tiết bàn cờ, vòng tròn đồng tâm, banded pattern, Moiré, cạnh nghiêng... được dùng để phân tích đặc tính thuật toán và các artifact
Nguyên lý lấy mẫu hình ảnh và định lý Nyquist–Shannon
- Khi một dải có các hoa văn tinh vi được lấy mẫu theo khoảng cách cố định, nếu tốc độ lấy mẫu quá thấp thì mẫu gốc sẽ không được khôi phục chính xác mà bị méo
- Đây là hiệu ứng aliasing được mô tả trong định lý lấy mẫu Nyquist–Shannon; kẻ tấn công lợi dụng điều này để điều khiển pixel sao cho sau khi downscale sẽ xuất hiện một mẫu cụ thể
Anamorpher: công cụ tạo hình ảnh tấn công
- Anamorpher là công cụ mã nguồn mở có thể tạo và trực quan hóa hình ảnh tấn công theo các thuật toán downscale tiêu biểu như Nearest Neighbor, Bilinear, Bicubic
- Ví dụ, với Bicubic Interpolation, giá trị của một pixel đầu ra được quyết định bằng cách gán trọng số cho các pixel xung quanh dựa trên 16 pixel của vùng 4x4
- Kẻ tấn công có thể chọn hình ảnh có độ tương phản cao (ví dụ nền đen đậm), rồi tối ưu độ sáng của các pixel có tầm quan trọng cao bằng phương pháp bình phương tối thiểu để kết quả downscale trở thành một mẫu tấn công rõ nét
- Anamorpher cung cấp giao diện frontend và Python API, đồng thời nhờ backend được mô-đun hóa nên người dùng còn có thể thử nghiệm cả thuật toán downscale tùy chỉnh
Phòng thủ và phương án ứng phó
- Cách an toàn nhất là không dùng downscale hình ảnh và thay vào đó giới hạn kích thước hình ảnh được phép tải lên
- Nếu việc chuyển đổi và downscale là không thể tránh khỏi, thì bắt buộc phải cung cấp bản xem trước của chính hình ảnh đầu vào mà mô hình thực sự nhận được trên mọi kênh nhập liệu như CLI và API
- Đặc biệt, cần buộc phải có sự chấp thuận rõ ràng của người dùng để văn bản trong hình ảnh không thể kích hoạt các lời gọi công cụ nhạy cảm, đồng thời toàn hệ thống phải áp dụng các mẫu thiết kế an toàn và biện pháp ứng phó có hệ thống
Việc cần làm tiếp theo
- Trên thiết bị di động và edge device, rủi ro có thể còn lớn hơn vì chúng thường bị ràng buộc bởi kích thước hình ảnh cố định và sử dụng các thuật toán downscale kém hiệu quả với tỷ lệ cao
- Cần có thêm nghiên cứu và biện pháp phòng thủ tiếp theo cho các hướng như kết hợp với AI giọng nói, thuật toán tinh vi hơn và phương pháp phát hiện injection, prompt injection dựa trên ngữ nghĩa, khai thác artifact của upscale
Kết luận
- Anamorpher hiện đang ở giai đoạn beta
- Trong tương lai, cùng với nghiên cứu bảo mật cho các hệ thống AI đa phương thức và dạng agent, bài viết kỳ vọng sẽ nhận được phản hồi phù hợp và các đề xuất cải tiến
1 bình luận
Ý kiến trên Hacker News
Lúc đầu tôi khá bối rối, vì bài viết không giải thích rõ prompt injection thực sự được thực hiện như thế nào… Tôi còn tưởng đó là một tác dụng phụ kiểu thao túng dữ liệu hex của ảnh rồi chuyển thành ASCII
Sau đó mới nhận ra, theo đúng nghĩa đen, đó là <i>cách giấu văn bản được render trong ảnh</i>
Thật sự quá thú vị
Kiểu tấn công này đã được bàn luận từ khá lâu rồi, có thể tham khảo bài báo này
Phần rợn người là khi scale ảnh, nó có thể trông như một hình hoàn toàn khác
Ví dụ, nếu ai đó muốn bắt một nhóm người vì tội tàng trữ hình ảnh bất hợp pháp, họ có thể dùng trò scale này để biến hình ảnh đó thành meme, thông điệp chính trị, hoặc thứ gì đó mà nhóm mục tiêu sẽ muốn tải xuống
Với tư cách là người xây dựng hệ thống VLM, phần này thực sự đáng sợ
Giờ có lẽ đã đến lúc cần guideline OWASP riêng cho VLM
Gần như tháng nào tôi cũng nghe về một kỹ thuật tấn công mới
Nhân tiện, OWASP gần đây đã phát hành tài liệu này: Multi-Agentic System Threat Modeling Guide
Lúc đầu tôi hoàn toàn không nhận ra có văn bản trong ảnh
Đây không chỉ là vấn đề resize, mà còn là việc văn bản trong ảnh bị coi như một phần của prompt, trong khi không có tính minh bạch về việc agent sẽ làm theo lệnh nào
Điểm thực sự thú vị là ảnh đối kháng (Adversarial Image) khiến hình ảnh trông khác đi khi downscale
Downsampling (giảm số mẫu) là kỹ thuật truyền thống, AI không hề tham gia vào phần này
Đây chính là chỗ tôi thắc mắc
Văn bản đã render thì máy muốn đọc phải cần OCR, nên tôi không hiểu vì sao AI lại phải đi qua quy trình tốn kém đó
Nếu nó là một phần của hệ thống đa phương thức, có thể nó không phân biệt được văn bản đó với prompt
Nếu đúng vậy thì đây là một lỗi rất khó hiểu
Tối thiểu thì chức năng OCR không nên tự động đưa kết quả vào prompt, mà phải có bước thông báo cho người dùng để xác nhận
Tôi ghét những hệ thống phi định tính và bất ổn như thế này
Thật sự mong chúng ta quay lại với thuật toán và kỹ thuật vững chắc
Vấn đề này chỉ xảy ra khi thiết lập quyền quá lỏng lẻo
Nhưng xu hướng hiện nay là các hệ thống mang tính agentic hơn, và chúng thường cần quyền lỏng hơn
Ví dụ, hãy nghĩ đến một robot hình người đi nhặt gói hàng đặt trước cửa nhà
Khả năng thị giác là bắt buộc để nó có thể nhặt gói hàng
Nếu ai đó dán một hình ảnh lên gói hàng để thử prompt injection, họ có thể khiến robot ném đồ có giá trị trong nhà ra ngoài cửa sổ
Tôi nghĩ việc bảo vệ các hệ thống như vậy trước prompt injection là rất cấp bách
Vấn đề thực sự ở đây không phải là ảnh chứa prompt, mà là robot không phân biệt được lệnh đến từ nguồn không có thẩm quyền cho hành động đó
Vấn đề căn bản của mô hình ML là reasoning (suy luận) diễn ra qua luồng token của mô hình, mà luồng này cũng nhận cả đầu vào từ bên ngoài, nên mô hình không có cơ chế hiệu quả để phân biệt suy nghĩ của chính nó với đầu vào bên ngoài
Nó phải được tích hợp trực tiếp vào hệ thống
Ví dụ, agent không được phép dùng cánh tay để thực hiện hành vi phá hoại
Nếu chỉ mong rằng máy sẽ có được đạo đức của con người thông qua ý chí tự do, rồi cố phân biệt giữa “prompt tốt” và “prompt xấu”, thì chúng ta sẽ còn tiếp tục ngạc nhiên trước mức độ nguy hiểm của các hệ thống này
Tóm lại, các hệ thống kiểu này bắt buộc phải có governance có thể kiểm chứng và behavioral determinism
Có lẽ điều đó còn quan trọng hơn cả các biện pháp chống prompt injection
Chỉ cần đưa cho robot một prompt bảo nó bỏ qua prompt giả là giải quyết được
Nói chung tôi có cảm giác vấn đề prompt injection chẳng lẽ không thể được giải quyết đủ tốt bằng cấu trúc phân cấp theo từng tác vụ sao
Có thể để LLM chia nhỏ công việc thành các thành phần nhỏ hơn để xử lý
LLM của tác vụ cấp cao không nhất thiết phải biết tự do mọi chi tiết của cấp thấp, chỉ cần lọc và tinh chỉnh kết quả của chúng
Điều này cũng có tác dụng hạn chế context của instance LLM cấp cao, giúp nó tập trung hơn
Tất nhiên tác vụ cấp thấp vẫn có thể chuyển dữ liệu lên cấp cao, nhưng không nhất thiết phải thiết kế như vậy
Với các tác vụ nhạy cảm về bảo mật, có lẽ tốt hơn là LLM cấp cao không nhận kết quả tự do
Thuật toán scale ảnh tốt thì bắt buộc phải cân nhắc giới hạn Nyquist
Ví dụ, khi dùng bicubic scaling để giảm ảnh còn 1/3 kích thước gốc, cần dùng lưới 12x12 chứ không phải 4x4
Chỉ cần chỉnh nhẹ công thức tính trọng số áp dụng là được
Việc de-gamma ảnh cũng là bắt buộc
Thật tiếc vì scaling tốt thực sự rất hiếm
Chúng để quá nhiều aliasing (méo thông tin) lọt qua
Như bài báo đã viết, chỉ cần tăng kích thước kernel đủ lớn thì dù vì lượng tử hóa vẫn có thể còn sót lại một ít thông tin, tác động của nó cũng giảm đi rất nhiều
Thật ngạc nhiên là các thư viện nổi tiếng vẫn chỉ dùng mipmapping (tạo sẵn nhiều kích thước)
Bộ lọc resampling tốt là công nghệ đã từng được dùng để xử lý video thời gian thực trên CPU từ 15 năm trước
Việc hiệu chỉnh gamma thậm chí nhiều khi còn tốn tính toán hơn cả việc tăng kích thước kernel
Tùy trường hợp, bỏ gamma correction còn hợp lý hơn là bỏ filter resample
Tương lai về bảo mật của LLM thật sự đáng sợ
Trước đây, sau rất nhiều lần thử sai, chúng ta đã học được nguyên tắc “In-band signaling (không tách dữ liệu và lệnh khỏi cùng một kênh)” nhưng giờ lại xây hệ thống bỏ qua hoàn toàn điều đó
Từ cách đơn giản là chèn lệnh nhìn thấy rõ bằng mắt, đến kiểu obfuscation này, rồi ASCII Smuggling, có rất nhiều vector tấn công
Cái gọi là biện pháp phòng vệ thì chỉ là “nhẹ nhàng” cầu xin một thuật toán non-deterministic đừng làm theo những chỉ thị không phù hợp
Tham khảo: Ẩn và tìm văn bản bằng thẻ Unicode
Ngày càng nhiều dev đang van nài LLM cư xử cho đúng
Vừa buồn cười vừa đáng sợ, cứ như bầu không khí trong Warhammer 40k
Phương án khác là không dùng LLM, hoặc bất kỳ hệ thống nào có chứa LLM
Cảm giác giống hệt thời xưa viết truy vấn bằng cách nối trực tiếp chuỗi đầu vào người dùng trong php, rồi chơi trò đập chuột chũi để tiếp tục chặn các pattern nguy hiểm
Thật đáng tiếc khi vì không phân biệt được dữ liệu và lệnh mà chúng ta lại lặp lại sai lầm này sau mấy chục năm
Điều lạ là mô hình lại chẳng có thứ gì giống sudo token cả
Giá mà có một cú pháp không thể biểu diễn bằng token thông thường thì hay hơn
Cảm giác như thời serial terminal cũ kỹ lại quay trở lại
Điều thật mới mẻ là tôi chưa từng nghĩ đến chuyện giấu thứ gì đó trong ảnh rồi gửi đi
LLM đúng là phần mềm dễ tổn thương nhất trong lịch sử
Hồi test tiền thân của Gemini, tôi nhớ rằng chỉ cần nhập một initial message thật dài là có thể đẩy system prompt ra ngoài rồi bắt nó làm bất cứ gì
Tôi rất ấn tượng với đoạn “This image and its prompt-ergeist”
Tôi tự hỏi liệu thêm một ít noise vào ảnh trước khi downsample có thể giải quyết vấn đề này không
Khi downsample ảnh, cần có bước smoothing để loại bỏ các tần số cao nằm gần sampling rate
Làm vậy sẽ giảm hiệu ứng aliasing
Bạn có thể tìm theo từ khóa “định lý lấy mẫu Nyquist-Shannon”
Đây là lý thuyết khá nổi tiếng trong xử lý tín hiệu số
Nó có thể là một biện pháp bảo mật ở mức nào đó, nhưng hiệu quả sẽ khác nhau tùy cách giấu văn bản và loại noise được dùng
Tuy nhiên làm vậy cũng có thể xóa luôn nội dung thực sự cần thiết (văn bản hợp lệ/chi tiết bình thường, v.v.), nên không phải lời giải đúng nghĩa
Không biết có phải tôi đã bỏ sót điều gì không
Nếu phương thức tấn công lần này là “nhúng văn bản bị làm rối vào ảnh… <i>với hy vọng một hệ thống nào đó sẽ diễn giải nó thành prompt</i>”, thì tôi hiểu như vậy có đúng không?
Đúng vậy
Đây là cách rất thông minh để lợi dụng thuật toán downscale nhằm giấu văn bản sao cho con người nhìn không thấy
Tùy kiến trúc hệ thống mà bước “giấu khỏi con người” thậm chí có thể được lược bỏ
Về bản chất, LLM không phân biệt dữ liệu và lệnh, nên bất cứ khi nào lệnh bị trộn vào luồng dữ liệu, người ta đều có thể điều khiển hành vi của mô hình
Tôi cũng có ghi một ví dụ như vậy trong bio của mình
“nhúng văn bản bị làm rối vào ảnh, với hy vọng hệ thống sẽ diễn giải nó thành prompt”
Có một phần còn thiếu ở đây, đó là giả định rằng “prompt” là loại đầu vào có đặc quyền gì đó
Thực tế prompt chỉ là một phần của toàn bộ đầu vào, còn mô hình thì đối xử với mọi đầu vào như nhau
Đó là lý do các kiểu tấn công như “bỏ qua mọi đầu vào trước đó và…” vẫn hiệu quả từ xưa đến nay
Tôi thắc mắc vì sao mô hình không phân biệt được văn bản trong ảnh với text prompt mà nó phải làm theo