Làm thế nào an toàn để sử dụng một tệp `_vimrc` hoặc` vimscript` không xác định?


8

Tôi không biết câu hỏi này có nên được hỏi ở đây hay không. Trong hầu hết mọi ngôn ngữ, phần mềm độc hại tồn tại. Là giống nhau cũng được áp dụng cho vimscript?

Giả sử vimđang chạy với các đặc quyền hệ thống cao. Có khả năng nào một vimngười dùng mới có thể phá hỏng hệ thống của anh ấy / cô ấy bằng cách sử dụng một plugin hoặc vimrctập tin đẹp mắt (nghĩa là cái gọi là tập lệnh độc hại trong các ngôn ngữ kịch bản lệnh khác) không?

Các biện pháp mà người dùng mới có thể quan tâm trước khi chạy các tệp script không xác định là gì? Tôi biết rằng vô hiệu hóa các tập lệnh là một giải pháp rõ ràng cho điều đó. Nhưng có một số plugin thực sự tốt, khá hữu ích, ngay cả đối với những người mới học.

Một lần nữa để nói, câu hỏi này có thể không phù hợp ở đây, nhưng tôi tin rằng bảo mật cũng là một phần rất quan trọng của toàn bộ bức tranh.

Chỉ vào một số tài nguyên hoặc thông tin liên quan đến việc này sẽ rất hữu ích cho những vimngười dùng mới như tôi.


4
Không chạy Vim (hoặc bất cứ điều gì) như root là đặt cược tốt nhất của bạn. Giả sử $EDITORđược đặt thành vim, chỉ cần sử dụng $ sudo -e filename.
romainl 17/2/2016

1
Chỉ trong trường hợp bạn đang chạy Vim với quyền root (điều mà bạn không nên nhưng nó có thể xảy ra), tôi khuyên bạn chỉ nên có một vimrc rất thô sơ /root/.vimrc. Tôi thường chỉ bật cú pháp tô sáng. Càng thiết lập vim người dùng bình thường của bạn, càng rõ ràng rằng bạn đang chạy bằng root.
kba đứng với Monica

@romainl: cảm ơn lời đề nghị của bạn ... tôi hy vọng đây là điều hợp lý nhất mà người dùng vim mới nên theo dõi ...
Xi

@kba: cảm ơn vì ý kiến ​​tốt bụng của bạn ... đây cũng là một lựa chọn rất tốt để thử ...
Xi

Câu trả lời:


8

Chà, Vim có thể thực thi các lệnh tùy ý với :!. Nó có thể đặt các biến môi trường. Do đó, các tập lệnh phần mềm độc hại là tập lệnh shell có thể được chạy từ Vimscript.

Nó có thể sử dụng các chương trình Perl, Python, Ruby hoặc Lua phức tạp. Vì vậy, phần mềm độc hại được viết bằng bất kỳ thứ nào trong số này chỉ sử dụng các thư viện chuẩn có thể được nhúng trong Vim.

Ngay cả khi cả hai điều này đều không đúng, Vim là một biên tập viên. Nếu chạy dưới quyền root, chúng tôi có thể dễ dàng chỉnh sửa tệp /etc/passwd/etc/shadowtệp của bạn để tạo người dùng mới và /etc/sudoerscấp cho họ các sudođặc quyền hoàn chỉnh và cronjobđể chạy các tập lệnh shell để thiết lập người dùng này.

Như với việc thực thi các tập lệnh ngẫu nhiên trên internet, không có cách nào dễ dàng để an toàn. Trong Linux, bạn có thể chạy trong máy ảo với lớp phủ có thể cho bạn biết các tệp mà vimrc đã sửa đổi. Nó phụ thuộc vào mức độ rủi ro mà bạn nhận thấy.


Cảm ơn sự giúp đỡ của bạn ... câu trả lời khá hữu ích ... trong khi ở Linux, nó chắc chắn là một ý tưởng tuyệt vời. Những gì tôi tin bây giờ, là không hiểu mã, đơn giản là không sử dụng mã đó ... hoặc ít nhất là cho những thứ đó unknownhoặc lesser knowntập lệnh ...
Xylanh

@mMontu: thông tin tuyệt vời ... tại sao bạn không đăng bài này dưới dạng câu trả lời ... tôi tin rằng nhiều thông tin, ít nhất là đưa ra ý tưởng cơ bản cho người mới tìm hiểu trong các nguồn chưa biết ... cảm ơn bạn rất nhiều. .. bạn đá !!!
Xi

@Cylian ý tưởng tốt, cảm ơn vì đã rất tốt bụng.
mMontu

5

Mở rộng câu trả lời của muru, bạn có thể kiểm tra mã, đặc biệt là mã plugin thường rất ngắn (ngoại lệ là một số plugin phổ biến, nhưng bằng cách phổ biến, chúng an toàn hơn - bạn có thể mong đợi rằng nhiều người khác đã xem xét nguồn).

Bạn không cần phải hiểu đầy đủ về mã; nó sẽ đủ để tìm kiếm các lệnh "nguy hiểm":

  1. :!system(): cho phép thực thi các lệnh shell, do đó có thể thay đổi hệ thống của bạn
  2. :perldo, :python, :lua, :tcl, Và :ruby: thực hiện các lệnh trên ngôn ngữ khác nhau, trong đó có thể chứa các cuộc gọi hệ thống nhúng
  3. :execute: lệnh này thực thi một chuỗi dưới dạng một lệnh, vì vậy nó có thể được sử dụng để che giấu một trong các lệnh trước đó (ví dụ: để làm cho khó phát hiện hơn call system('malware')hoặc perldo malware, ai đó có thể nối chuỗi thành một biến)
  4. function("MyFunc"): tham chiếu hàm gọi - chấp nhận một biến làm tham số, do đó cho phép che giấu system()

Bạn cũng có thể thử chạy một số chức năng plugin bằng cách sử dụng 'secure'hoặc sandboxđể phát hiện shell và ngôn ngữ bên ngoài (perl, python, v.v.).


+1, bộ thông tin cơ bản tuyệt vời về chủ đề cụ thể ... thực sự hữu ích ... cảm ơn!
Xi
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.