Nó có ảnh hưởng lớn như vậy vì một điểm yếu đã được biết đến từ lâu trong API Win32.
Các chương trình được sinh ra trong Win32 thông qua CreateProcess()
cuộc gọi hệ thống. Nó có thể được sử dụng theo nhiều cách. Những người đến từ nền tảng Unix, Linux hoặc OS / 2 thường sẽ nghĩ về việc lấy hai đối số riêng biệt cho chương trình (tệp hình ảnh) để sinh ra và đuôi lệnh để chuyển sang quy trình mới, vì tên tệp và vectơ đối số / đuôi lệnh là hai điều riêng biệt trong API của các hệ điều hành đó. Nhưng trên thực tế, cuộc gọi hệ thống có thể được gọi trong một hình thức thay thế với tên chương trình và các đối số được trộn với nhau trong một chuỗi lớn. CreateProcess()
sẽ cố tách tên tệp chương trình khỏi đuôi lệnh.
Vấn đề là nó thực hiện điều này bằng cách chia dần chuỗi thành hai phần tại mỗi ký tự khoảng trắng liên tiếp, cho đến khi phần bên trái khớp với tệp hoặc thư mục. Nhiều chương trình Win32 sẽ cố gắng chuyển các chuỗi như C:\Program Files\Contoso\TakeOver.exe StackExchange.com
cho cuộc gọi hệ thống. Điều này sẽ chạy đúng chương trình - C:\Program Files\Contoso\TakeOver.exe
- với đuôi lệnh đúng - StackExchange.com
- cho đến khi một người rõ ràng nguy hiểm xuất hiện và tạo một C:\Program
tệp giống như bạn đã làm.
Tại thời điểm đó, cuộc gọi hệ thống kết thúc khi cố chạy tệp hình ảnh chương trình C:\Program
bằng đuôi lệnh Files\Contoso\TakeOver.exe StackExchange.com
. Trời giúp bạn nếu C:\Program
trên thực tế là một hình ảnh chương trình thực thi.
Đây là một điểm yếu chung và nó áp dụng cho bất kỳ tên tệp chương trình nào chứa khoảng trắng kết hợp với bất kỳ chương trình nào sử dụng One Big String để sinh ra các chương trình khác. Nhưng trường hợp phổ biến nhất bị ảnh hưởng bởi điều này là tất cả các chương trình sống C:\Program Files\
và một số lượng lớn các chương trình Win32 sử dụng phương pháp Một chuỗi lớn.
Đã quá muộn để thay đổi API Win32. Nó đã quá muộn một thập kỷ trước. Và Microsoft không thể thay đổi tất cả các chương trình được viết bởi những người khác vượt qua một chuỗi lớn thay vì hai thành CreateProcess()
. Vì vậy, Microsoft thực hiện kiểm tra Windows, khi đăng nhập người dùng, cho sự tồn tại C:\Program
và hiển thị cảnh báo mà bạn nhìn thấy.
Và, như bạn có thể thấy, có một cảnh báo "Bảo mật" lớn trong tài liệu Win32 của Microsoft nói với các nhà phát triển không viết chương trình bằng cách sử dụng phương pháp One Big String, đã có từ vài năm nay.
đọc thêm