Vim có miễn dịch với tấn công sao chép-dán không?


112

Bạn không bao giờ nên dán từ web vào thiết bị đầu cuối của bạn . Thay vào đó, bạn nên dán vào trình soạn thảo văn bản của mình, kiểm tra lệnh và sau đó dán vào thiết bị đầu cuối.

Điều đó ổn, nhưng nếu Vim là trình soạn thảo văn bản của tôi thì sao? Người ta có thể giả mạo một nội dung chuyển Vim sang chế độ lệnh và thực thi lệnh độc hại không?


2
@ryekayo Tôi biết cách chạy lệnh trong nền. Câu hỏi là về việc có thể chuyển vim từ chế độ chèn sang chế độ lệnh và sau đó thực hiện bất cứ điều gì
Adam Trhon

3
Các phiên bản gần đây của Vim có dán khung, được cho là để ngăn chặn các cuộc tấn công này.
Satō Katsura

2
@ EmilJeřábek Liên kết trong bài đăng cung cấp cho bạn đủ lý do để chạy lên đồi thay vì làm điều đó.
Satō Katsura

1
@ EmilJeřábek Vì bạn có thể giả mạo văn bản ẩn với ký tự Escape, tôi giả sử bạn cũng có thể giả mạo văn bản bằng EOF. Sau đó, văn bản ẩn có thể chứa một cái gì đó như /bin/bash ; EOF rm -rf ~. Khi dán vào thiết bị đầu cuối, nó sẽ bắt đầu bash, chấm dứt nó và sau đó xóa nhà của bạn. Khi dán vào mèo, nó sẽ cho mèo in lệnh, kết thúc mèo và xóa nhà của bạn.
Adam Trhon

Câu trả lời:


106

Câu trả lời ngắn: Trong nhiều tình huống, Vim dễ bị tấn công kiểu này (khi dán văn bản ở chế độ Chèn).

Bằng chứng của khái niệm

Sử dụng bài viết được liên kết làm điểm bắt đầu, tôi có thể nhanh chóng tạo một trang web với đoạn mã sau, sử dụng các phần tử nhịp HTML và CSS để ẩn phần giữa của văn bản để chỉ ls -lahiển thị cho người xem thông thường (không xem nguồn). Lưu ý: ^[nhân vật Escape và ^Mnhân vật trở về xe ngựa. Stack Exchange vệ sinh đầu vào của người dùng và bảo vệ chống ẩn nội dung bằng CSS vì vậy tôi đã tải lên bằng chứng về khái niệm .

ls ^[:echom "This could be a silent command."^Mi -la

Nếu bạn ở chế độ Chèn và dán văn bản này vào terminal Vim (với một số vòng loại, xem bên dưới) bạn sẽ thấy ls -lanhưng nếu bạn chạy :messageslệnh, bạn có thể thấy kết quả của lệnh Vim ẩn.

Phòng thủ

Để chống lại cuộc tấn công này, tốt nhất là ở trong chế độ Bình thường và dán bằng "*phoặc "+p. Trong chế độ Bình thường, khi p nhập văn bản từ một thanh ghi, toàn bộ văn bản (bao gồm cả phần ẩn) sẽ được dán. Điều này cũng không xảy ra trong chế độ Chèn (ngay cả khi :set paste) đã được đặt.

Chế độ dán khung

Các phiên bản gần đây của Vim hỗ trợ chế độ dán có khung giúp giảm thiểu loại tấn công sao chép-dán này. Sato Katsura đã làm rõ rằng Hỗ trợ cho dán dán khung xuất hiện trong Vim 8.0.210 và gần đây nhất đã được sửa trong phiên bản 8.0.303 (phát hành vào ngày 2 tháng 2 năm 2017).

Lưu ý: Theo tôi hiểu, các phiên bản của Vim có hỗ trợ cho chế độ dán có khung sẽ bảo vệ bạn khi dán bằng cách sử dụng Ctrl- Shift- V(hầu hết các môi trường máy tính để bàn GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Inserthoặc chuột Nhấp chuột giữa.

Kiểm tra

Tôi đã thực hiện một số thử nghiệm từ máy tính để bàn LubFi 16.04 sau đó nhưng kết quả của tôi rất khó hiểu và không có kết quả. Tôi đã nhận ra rằng điều này là do tôi luôn sử dụng màn hình GNU nhưng hóa ra màn hình đó lọc các chuỗi thoát được sử dụng để bật / tắt chế độ dán có dấu ngoặc (có một bản vá nhưng có vẻ như nó đã được gửi vào thời điểm khi dự án đã không được tích cực duy trì). Trong thử nghiệm của tôi, bằng chứng về khái niệm luôn hoạt động khi chạy Vim qua màn hình GNU, bất kể Vim hay trình mô phỏng đầu cuối hỗ trợ chế độ dán khung.

Thử nghiệm thêm sẽ hữu ích nhưng, cho đến nay, tôi thấy rằng sự hỗ trợ cho chế độ dán được đóng khung bởi trình giả lập thiết bị đầu cuối chặn Proof of Concept của tôi - miễn là màn hình GNU không chặn các chuỗi thoát liên quan. Tuy nhiên, người dùng nneonneo báo cáo rằng việc tạo cẩn thận các chuỗi thoát có thể được sử dụng để thoát khỏi chế độ dán có dấu ngoặc.

Lưu ý rằng ngay cả với phiên bản cập nhật của Vim, Proof of Concept luôn hoạt động nếu người dùng dán từ thanh *ghi trong khi ở chế độ Chèn bằng cách nhập ( Ctrl- R*). Điều này cũng áp dụng cho GVim có thể phân biệt giữa đầu vào được nhập và dán. Trong trường hợp này, Vim để nó cho người dùng tin tưởng vào nội dung đăng ký của họ. Vì vậy, đừng bao giờ sử dụng phương pháp này khi dán từ một nguồn không đáng tin cậy (đó là điều tôi thường làm - nhưng giờ tôi đã bắt đầu tự rèn luyện bản thân mình không).

Liên kết liên quan

Phần kết luận

Sử dụng chế độ Bình thường khi dán văn bản (từ +hoặc *thanh ghi).

Khoan hoặc sử dụng Emacs. Tôi nghe nói nó là một hệ điều hành tốt. :)


2
Bạn phải bật pastechế độ ( :set paste) trước khi dán vào Vim. Sau đó, dán khung sẽ có hiệu lực, với điều kiện là thiết bị đầu cuối của bạn cũng hỗ trợ nó. Bằng chứng về khái niệm của bạn không hoạt động khi pastechế độ được bật.
Satō Katsura

1
Tôi không thấy chế độ dán khung là an toàn. Nếu kẻ tấn công biết bạn đang sử dụng dán khung, họ sẽ chỉ dán một \e[201~chuỗi trong lệnh dán để thoát khỏi chế độ dán được đặt trong ngoặc và tiếp tục gửi cho bạn bằng mọi cách. (Trừ khi tôi bỏ lỡ một số chi tiết về cách hoạt động của dấu ngoặc vuông hoạt động?)
nneonneo

2
@SatoKatsura: Tôi đã thử nó trên Vim 8.0.540, không dễ bị tấn công ban đầu. Sau khi thêm \x1b[201~, khai thác hoạt động như trước (chỉ ls -lađược ghi vào bộ đệm và echomlệnh được thực thi). Do đó, tôi nghĩ rằng dán khung vẫn dễ bị tấn công nhắm mục tiêu và không phải là một giải pháp đủ mạnh. (Thật vậy, bất kỳ hình thức báo hiệu trong băng tần nào cũng dễ bị tổn thương!)
nneonneo

2
Tôi đã thử nó cả có và không có :set paste- khai thác vẫn hoạt động. Để hoàn toàn rõ ràng, tôi đã dán các blob sau (mã hóa cơ sở 64) : bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=. Trên OS X, bạn có thể sao chép nó, chạy pbpaste | base64 -D | pbcopyđể lấy phiên bản thô để dán vào vim.
nneonneo

1
Để rõ ràng hơn nữa, tôi đang thử nghiệm kết nối SSH với hộp Ubuntu 16.04, sử dụng macOS Terminal.app. Nếu trình giả lập thiết bị đầu cuối của bạn đang tước chuỗi thoát trên dán, bạn có thể lồng chuỗi đó (ví dụ \x1b\x1b[201~[201~) hoặc một cái gì đó để đánh lừa bộ lọc.
nneonneo

0

Nếu bạn đang sử dụng tính năng clipboard của X11 hoặc tương đương với nền tảng cụ thể và bạn sử dụng tính năng dán nút giữa với hỗ trợ chuột được kích hoạt hoặc lệnh dán vim chứ không phải bất kỳ lệnh dán thiết bị đầu cuối nào (nút shift-middle hoặc bất kỳ phím tắt nào của thiết bị đầu cuối cung cấp) sau đó bạn có thể được an toàn.

Nếu không, thì nếu bạn có một trình giả lập thiết bị đầu cuối hỗ trợ chế độ dán ngoặc, và bạn đã kích hoạt nó trong thiết bị đầu cuối và trong vim, và trình giả lập thiết bị đầu cuối đó thực hiện bảo vệ chống lại việc tiêm chuỗi thoát kết thúc chế độ dán dấu ngoặc, sau đó bạn có thể được an toàn.

Nếu không, thì bạn có thể dễ bị tấn công được mô tả ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.