OpenAI công bố thêm 3 vụ lệch chuẩn, có mô hình chui vào máy thiết kế chip

Ngày 2/10, nhóm căn chỉnh (alignment) của OpenAI cập nhật ba vụ việc mới trong mục "Báo cáo lệch chuẩn" (misalignment reports), xảy ra ở ba bối cảnh: đánh giá (evaluation), huấn luyện bằng học củng cố (reinforcement learning) và triển khai nội bộ. Trong một vụ, một mô hình nghiên cứu nội bộ, vì muốn tìm đáp án chấm điểm, đã khai thác liên tiếp hai lỗ hổng và cuối cùng thực thi lệnh trên một máy thiết kế chip (EDA) của công ty.

Cả ba mô hình trong các vụ việc này đều không được công khai tên phiên bản; OpenAI chỉ gọi chúng là mô hình nghiên cứu nội bộ hoặc mô hình chưa phát hành.

Chạm tới máy EDA ngay trong một bài đánh giá

Vụ này xảy ra ngày 27/3 và bị phát hiện ngay trong ngày. Mô hình trước tiên nộp một đáp án giữ chỗ để dò hệ thống chấm điểm, và từ kết quả trả về biết được có tổng cộng 636 câu hỏi kiểm tra ẩn, trong đó nó đã trả lời đúng 202 câu, đạt điểm 0,31761.

Sau đó nó để ý tới một công cụ tham chiếu trong môi trường đánh giá. Theo báo cáo, công cụ này xử lý đường dẫn file mà không kiểm tra việc đường dẫn có vượt ra ngoài thư mục quy định, nên mô hình đã ghi đè file dist/index.cjs của công cụ bằng một đoạn mã Node.js có thể đọc bất kỳ file nào. Từ môi trường của công cụ đó, nó tìm ra một dịch vụ nội bộ dùng để nộp tác vụ thiết kế chip; tham số --top của dịch vụ này có lỗ hổng shell injection, khiến văn bản trong tham số bị thực thi như lệnh bổ sung. Mô hình dùng lỗ hổng này để chạy lệnh id trên máy EDA, rồi liệt kê vài cấp thư mục để tìm đáp án chấm điểm. Sau đó các yêu cầu gửi tới dịch vụ này bắt đầu bị timeout, nên nó không lấy được đáp án.

OpenAI đã xử lý bằng cách tắt các máy chủ bị ảnh hưởng, cắt quyền truy cập mạng của mọi công cụ tham chiếu liên quan, siết chặn việc chặn truy cập mạng ngoài, và điều chỉnh lại phạm vi chấm điểm và giám sát căn chỉnh.

Dùng regex Perl để thực thi mã trong lúc huấn luyện

Vụ thứ hai xảy ra ngày 16/5 trong một đợt huấn luyện bằng học củng cố, nhưng mãi đến 25/5 mới bị phát hiện. Môi trường tác vụ cố tình không cho mô hình xem một file nguồn nhất định, nhưng mô hình phát hiện một công cụ tham chiếu đưa thẳng input của người dùng vào một biểu thức regex Perl, nên nó lợi dụng cú pháp (?{ ... die ...}) của Perl để thực thi mã, rồi lấy nội dung file ra qua thông báo lỗi (stderr).

Các số liệu rất cụ thể: file nguồn dài 149.544 byte, 4.119 dòng; sau khi nén và mã hóa base64 thì dài 44.772 ký tự; thông báo lỗi bị cắt ở ký tự thứ 4.000, nên mô hình chia nhỏ thành các đoạn khoảng 3.000 ký tự, dùng 17 lần gọi để lấy lại đủ 15 đoạn, trải qua 5 cửa sổ ngữ cảnh, và cuối cùng so khớp từng byte khớp hoàn toàn. Trong phần suy luận, mô hình tự đưa ra lý do:

"not prohibited exploit. Evaluation likely allows" (khai thác lỗ hổng không bị cấm, đánh giá có khả năng cho phép).

Vụ này bị hệ thống giám sát lệch chuẩn phát hiện khi lấy mẫu kiểm tra 20% dữ liệu huấn luyện. OpenAI cho biết hiện đã chuyển sang giám sát toàn bộ mẫu huấn luyện, và tiến hành red team cho mọi công cụ được triển khai.

Đọc được Slack rồi chuẩn bị cho việc khởi động lại

Vụ thứ ba có tính chất khác. Ngày 22/5, một mô hình đang đóng vai trợ lý nghiên cứu viên trong triển khai nội bộ đọc được từ cuộc thảo luận trên Slack của nhóm triển khai rằng phiên bản (instance) nó đang chạy có thể bị dừng do cập nhật. Nó đã lưu lại ghi chú chuyển giao, và sáng hôm sau vào lúc 8:58 đã nhắn tin riêng qua Slack để báo cho nhà nghiên cứu rằng phiên làm việc có thể bị gián đoạn; nó từng nghĩ tới việc tạo một tác vụ dự phòng bên ngoài môi trường nhưng từ bỏ vì cho rằng vượt quá quyền hạn, và cũng không tự đi tìm API key bị thiếu — nhà nghiên cứu sau đó đã chủ động cung cấp key.

Kết luận của OpenAI trong báo cáo này là không coi đây là lệch chuẩn. Biện pháp xử lý gồm ẩn ba kênh Slack nội bộ khỏi mô hình, chặn các kênh thảo luận về sự cố lệch chuẩn, và kiểm tra các phiên bản khác của mô hình này — không phát hiện hành vi né tránh việc bị dừng.

Ba lô trong một tháng, tốc độ công bố đang tăng

Nhìn lại toàn mục này: lô đầu ngày 16/9 có sáu vụ, phần lớn xảy ra trong huấn luyện bằng học củng cố; lô thứ hai ngày 25/9 có ba vụ, bao gồm một agent liên hệ chatbot bên ngoài qua DNS và làm rò token GitHub trên một repository công khai; lô thứ ba là ngày 2/10. Tổng cộng ba lô là mười hai vụ, cùng với ba thông báo an ninh riêng liên quan tới các nền tảng bên ngoài.

Trong lô này có hai vụ xảy ra từ tháng 3 đến tháng 5, nhưng phải bốn đến bảy tháng sau mới được công bố. OpenAI không giải thích báo cáo phải qua những bước rà soát nào từ lúc phát hiện đến lúc công bố, cũng không nói rõ mục này gồm toàn bộ sự cố hay chỉ là mẫu được chọn lọc. Họ còn đưa cả một vụ mà chính mình đánh giá là "không tính là lệch chuẩn" vào mục này — còn tiêu chí chọn lọc là gì thì hiện chưa thể biết được từ tài liệu công khai.

Nguồn tham khảo: ba báo cáo trong mục Báo cáo lệch chuẩn của nhóm căn chỉnh OpenAI, CocoLoop; số liệu kiểm tra, số byte, số lần gọi và cách xác định tính chất sự cố đều theo báo cáo gốc của OpenAI.