HopSkipJumpAttack: Tấn công decision-based mô hình học máy

Một số khái niệm cơ bản
Tấn công đối kháng (Adversarial attacks)
Khái niệm Adversarial attack hay tấn công đối kháng nhắm vào các mô hình học máy đã xuất hiện từ khá lâu về trước. Tuy nhiên với sự “trỗi dậy” của AI hiện nay, topic này lại được quan tâm trở lại, trở thành 1 phần trong “bức tranh” AI Security. Hiểu một cách đơn giản, tấn công đối kháng giống như kiểm thử ứng dụng web, chúng ta sẽ cố tìm kiếm các lỗ hổng và từ đó đưa ra cách khắc phục. Chỉ có điều mục tiêu của tấn công đối kháng là các mô hình học máy chứ không phải các ứng dụng web. Hiện nay có 4 kiểu tấn công đối kháng chính, lần lượt là:
Extraction attacks: Kẻ tấn công sẽ cố gắng sao chép lại mô hình mục tiêu.
Inversion attacks: Giống như việc reverse engineering mô hình mục tiêu.
Poisoning attacks: Kẻ tấn công sẽ cố gắng can thiệp vào dữ liệu sử dụng cho việc training mô hình nhằm giảm đi tính chính xác của kết quả đầu ra.
Evasion attacks: Hình thức tấn công này thường nhắm vào các mô hình phân loại (classification model), kẻ tấn công sẽ cố gắng tạo ra các ví dụ đối kháng (adversarial example) để đánh lừa mô hình, khiến cho mô hình nhận diện sai.
Bài viết này sẽ tập trung vào Evasion attacks với mục tiêu là mô hình nhận diện hình ảnh. Hình ảnh bên dưới là mô tả đơn giản về kiểu tấn công này. Với hình ảnh quả táo, mô hình sẽ gán nhãn đầu ra là “Apple” - là nhãn đúng. Tuy nhiên khi lật ngược lại ảnh quả táo, mô hình lúc này sẽ gán nhãn “Banana", mặc dù thực chất bước ảnh vẫn là quả táo nhưng lức này mô hình lại nhận diện sai thành quả chuối. Trong evasion attacks, kẻ tấn công sẽ tìm cách thay đổi đầu vào sao cho mô hình đưa ra các nhận định sai.

Evasion Attacks

Cụ thể hơn, có 2 điều kiện cần phải đảm bảo trong Evasion attacks:
Đầu tiên, ví dụ đối kháng (adversarial example) mà kẻ tấn công tạo ra phải khiến mô hình nhận diện sai.
Thứ hai, ví dụ đối kháng (adversarial example) này phải giữ được một số thuộc tính, hoặc nói đơn giản là không thay đổi quá nhiều so với dữ liệu gốc.
Hình ảnh phía trên là mô tả chi tiết cách evasion attacks nhắm vào mô hình nhận diện hình ảnh hoạt động. Với bức ảnh gốc là ảnh gấu trúc, mô hình đang nhận diện đúng với 57.7% tỉ lệ nhãn đầu ra là “panda”. Việc kẻ tấn công cần làm là tìm một lớp mặt nạ (mask) hay còn gọi là một lớp nhiễu, sau đó thêm lớp nhiễu này vào bức ảnh gốc và tạo thành adversarial example. Example này đảm bảo 2 điều kiện ở trên:
Mô hình đang nhận diện adversarial example thành con vượn và gán nhãn là “gibbon”.
Nhìn bằng mắt thường thì adversarial example không quá khác biệt so với hình ảnh gốc.
Access Type

Access Type là cách mà kẻ tấn công có thể truy cập mô hình học máy, giống như khái niệm Whitebox, Graybox và Blackbox trong kiểm thử ứng dụng web vậy.
Whitebox hay Gradient-based là khi kẻ tấn công có quyền truy cập hoàn toàn một mô hình, có thể thông qua việc clone, đánh cắp mô hình, hoặc đơn giản là hệ thống sử dụng một mô hình public, kẻ tấn công xác định được mô hình này là gì và có thể tải về. Ví dụ như kẻ tấn công xác định được hệ thống đang sử dụng mô hình MobileNetV2 để phân loại hình ảnh, hắn có thể pull mô hình này từ các public repo, sau đó tự deploy và từ đó có thể tính toán được các tham số, chỉ số mà hắn muốn để phục vụ quá trình tấn công.
Graybox hay Score-based là khi những gì kẻ tấn công thu được là output dưới dạng số ở layer cuối của mô hình. Ví dụ với đầu vào là 1 bức ảnh, kẻ tấn công sẽ thu được xác suất dự đoán ra
[“dog”, “cat”, “chicken”, “cow”]là[0.1, 0.1, 0.6, 0.2]Blackbox hay Decision-based là khi kẻ tấn công chỉ thu được kết quả dự đoán của mô hình, hoặc top 5 kết quả dự đoán. Ví dụ với đầu vào là 1 bức ảnh, kẻ tấn công sẽ chỉ thu được nhãn mà mô hình dự đoán, trong trường hợp này có thể là “cat”
Hình bên dưới sẽ thể hiện rõ hơn về 3 kiểu truy cập này.

Một cách dễ hiểu, Blackbox hay Decision-based là kiểu truy cập phổ biến nhất trong thực tế. Với tác vụ liên quan đến nhận diện ảnh, input là một bức ảnh và thông qua API của các bên thứ 3, chúng ta sẽ thu được output thường chỉ là nhãn mà mô hình dự đoán.
Biên quyết định (Decision boundary)
Hầu hết mọi thứ trong bối cảnh học máy đều được biểu diễn dưới dạng vector trong không gian nhiều chiều. Tuy nhiên để đơn giản hoá thì trong bài viết này mình sẽ chỉ lấy ví dụ trong không gian 2 chiều để dễ minh hoạ.

Biên quyết định chính là đường cong màu đỏ trong hình ở trên, chia đôi mặt phẳng thành 2 phần với nhãn là “Dog” và “Cat”. Nếu như output của mô hình là một điểm có toạ độ nằm ở nửa bên trên thì mô hình sẽ đưa ra nhãn dự đoán là “Dog” và ngược lại.
Khoảng cách l2 (l2 - distance)

Có thể hiểu đơn giản khoảng cách l2 là một con số biểu diễn sự tương đồng giữa 2 bức ảnh, khoảng cách l2 càng nhỏ thì 2 bức ảnh càng giống nhau và ngược lại, nếu khoảng cách l2 càng lớn thì 2 bức ảnh càng khác nhau.
Gradient
Gradient thể hiện một thay đổi nhỏ trong input sẽ ảnh hưởng như thế nào đến output của mô hình. Tưởng tượng nếu như bạn đang leo lên đỉnh một ngọn đồi trong điều kiện sương mù kín mít và bạn có một tấm bản đồ chỉ đường làm như nào để leo cao hơn. Gradient chính là tấm bản đồ đó.
HopSkipJumpAttack
Quay lại với 2 điều kiện cần phải đảm bảo trong Evasion attacks có đề cập ở trên:
Đầu tiên, ví dụ đối kháng (adversarial example) mà kẻ tấn công tạo ra phải khiến mô hình nhận diện sai.
Thứ hai, ví dụ đối kháng (adversarial example) này phải giữ được một số thuộc tính, hoặc nói đơn giản là không thay đổi quá nhiều so với dữ liệu gốc.
Với điều kiện đầu tiên, adversarial example phải khiến cho mô hình nhận diện sai, điều này có nghĩa là adversarial example phải nằm ở bên còn lại của biên quyết định.
Với điều kiện thứ hai, adversarial example phải giữ không thay đổi quá nhiều so với dữ liệu gốc, điều này có nghĩa là khoảng cách l2 giữa adversarial example và bức ảnh gốc phải nhỏ.

Okay, vậy là chúng ta đã biết ý tưởng của cuộc tấn công, tuy nhiên … với kiểu truy cập blackbox hay decision-based, chúng ta chỉ thu được nhãn mà mô hình dự đoán, … vậy thì biên quyết định nằm ở đâu? làm thế nào để tính được khoảng cách l2 nhỏ nhất?

Và đó chính là động lực để nhóm tác giả phát triển kĩ thuật tấn công HopSkipJumpAttack (HSJA). HSJA là một kĩ thuật tấn công Evasion Decision-based. Mục tiêu rất đơn giản, khiến cho mô hình nhận diện ảnh con chó thành con mèo hoặc bất cứ con vật nào khác, tất nhiên là trong trường hợp những gì mà kẻ tấn công có thể thu được chỉ là nhãn mà mô hình dự đoán mà thôi.
Các bạn có thể đọc bài báo gốc tại đây HopSkipJumpAttack: A Query-Efficient Decision-Based Attack.
Bài báo gốc sẽ ngập tràn những công thức toán học và … rất buồn ngủ :( Vì thế nên trong bài này mình sẽ chỉ tập trung vào giải thích thuật toán và ý tưởng đằng sau nó. Ngoài ra cũng có clip 17 phút giới thiệu về kĩ thuật tấn công này:
Mô tả thuật toán

Thuật toán gồm 4 bước chính:
Bước 1: Tạo một lớp nhiễu ngẫu nhiên và chèn lớp nhiễu đó vào bức ảnh gốc để tạo thành adversarial example sao cho mô hình nhận diện thành nhãn khác, hoặc đơn giản là chọn một bức ảnh khác.
Bước 2: Sử dụng Binary Search để tìm lớp nhiễu tối thiểu mà khiến mô hình nhận diện sai, hoặc hiểu đơn giản là tìm điểm gần với biên quyết định nhất.
Bước 3: Ước lượng Gradient và “nhảy” theo hướng gradient để tăng tỉ lệ mô hình nhận diện sang nhãn khác.
Bước 4: Lặp lại bước 2 và 3 cho đến khi có được một kết quả ổn định
Bước 1

Bức ảnh gốc đang được mô hình gán nhãn là “German shepherd”, tại bước này, chúng ta chỉ đơn giản là sinh một lớp nhiễu ngẫu nhiên, chèn vào bức ảnh gốc sao cho mô hình gán nhãn khác với “German shepherd” là được. Adversarial example tại bước này là điểm màu đỏ trong ảnh
Bước 2

Lúc này sử dụng thuật toán Binary Search để tìm kiếm điểm nằm giữa bức ảnh gốc và adversarial example. Điểm này phải nằm càng sát biên quyết định càng tốt, tuy nhiên phải nằm ở nửa còn lại của biên quyết định để khiến cho mô hình nhận diện thành con vật. Như trong ảnh thì điểm cần tìm là điểm màu đỏ, và mô hình đang gán nhãn “chow” với xác suất là 11%.
Adversarial example tại bước này đã đáp ứng được 2 điều kiện là khiến mô hình nhận diện sai và trông bằng mắt thường thì không khác quá nhiều so với ảnh gốc nên chúng ta hoàn toàn có thể dừng lại ngay tại bước này.
Tuy nhiên HSJA sử dụng thêm 1 kĩ thuật là ước lượng gradient và “nhảy” theo hướng gradient để tối ưu adversarial example. Kĩ thuật này được thể hiện ở bước tiếp theo
Bước 3

Hướng của Gradient sẽ được ước lượng sử dụng phương pháp Monte Carlo. Sau đó sẽ “nhảy” theo hướng này và được một adversarial example mới (là điểm màu đỏ trong ảnh). Các bạn có thể xem thêm cách ước lượng gradient hoạt động trong clip dài 17 phút mình đính kèm ở trên.
Bước 4

Lúc này, lặp lại bước 2 và 3 đến khi tìm được kết quả ổn định. Đầu tiên sẽ thực hiện binary search giữa bức ảnh gốc và điểm mà chúng ta “nhảy” đến sau bước 3 để tìm ra một điểm gần biên quyết định (điểm màu đỏ trên ảnh). Sau đó lại ước lượng gradient và nhảy tạo thành 1 điểm mới. Cứ thế tiếp tục, …

Kết quả
Adversarial example cuối cùng mà chúng ta thu được vẫn được mô hình gán nhãn là “chow”, tuy nhiên xác xuất từ 11% đã lên 18%

Biểu đồ dưới đây thể hiện khoảng cách giữa bức ảnh gốc và adversarial example sau 100 lần chạy, có thể thấy rõ ràng rằng khoảng cách giảm đáng kể giữa lần chạy đầu tiên và lần chạy thứ 100, đồng nghĩa với việc adversarial example không khác quá nhiều so với bức ảnh gốc.

Toàn bộ các ví dụ bên trên được thử nghiệm với mô hình public là MobileNetV2. Trong trường hợp tấn công lên Google Cloud Vision AI cũng cho kết quả tương tự:

Bức ảnh ngoài cùng bên phải là bức ảnh gốc và được dán nhãn là “Traffic Light”. Bốn bức ảnh bên trái lần lượt là kết quả sau 1, 10, 20 và 50 lần chạy HSJA. Có thể thấy rõ ràng rằng sau 50 lần chạy thì adversarial example trông gần như không khác gì bức ảnh gốc. Và cả 4 adversarial example được gán nhãn khác “Traffic Light”.





![[ZVE-2025-3566] Stored XSS to RCE in Manage Engine OpManager](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753930975579%2Fb835c2ae-2b5b-425e-9210-09bb506d46c1.png&w=3840&q=75)
