Có cách nào để ngăn người dùng tạo các tệp thực thi và chạy chúng không?


31

Các cuộc tấn công của Ransomware có thể sử dụng các khai thác 0 ngày, nhưng thường thì kẻ tấn công sẽ đánh lừa người dùng cả tin để chạy một tệp thực thi bằng cách tải xuống và nhấp vào.

Giả sử chúng ta có một người dùng ngây thơ và muốn hạn chế họ theo đường dẫn thông thường. Có cách nào để hạn chế họ tạo một tệp với đặc quyền thực thi không?

Hoặc, nói chung, có cách nào để xây dựng danh sách kiểm soát truy cập và xác định rằng người dùng này chỉ có thể thực thi các tệp trong danh sách này?


7
Để vô hiệu hóa thực thi theo cách này sẽ cấm người dùng có thể làm bất cứ điều gì trên hệ thống. Không có cơ chế nào cho hệ thống được tích hợp sẵn này hoặc thậm chí với phần mềm của bên thứ ba mà tôi biết để thực hiện loại khóa bảo mật này
Thomas Ward

3
không trả lời nhưng gợi ý những gì bạn có thể làm: thêm noexec vào các kết nối có thể ghi của người dùng. sẽ không ngăn chặn các tập lệnh nhưng thực thi nhị phân.
Sampo Sarrala

3
@ThomasWard, đó không chính xác là vỏ bị hạn chế là gì?
Robert Riedl

7
@ThomasWard có một khái niệm chung về 'các tệp thực thi được liệt kê trong danh sách' trong đó một danh sách thực thi (thường được ký) nhất định được cho phép và không có gì khác có thể được chạy nếu không có các đặc quyền nâng cao; và cả Windows và OS X đều có giải pháp hợp lý để thực hiện điều này. Tuy nhiên, tôi không biết liệu có một giải pháp Ubuntu (hoặc Linux khác) tốt cho danh sách trắng ứng dụng hay không.
Peteris

2
@Peteris, có nhiều giải pháp như vậy. Yêu thích của tôi là có một hệ thống tệp chỉ đọc, có chữ ký với các tệp thực thi của bạn và gắn kết tất cả các hệ thống khác noexec, dọc theo cách ChromeOS sử dụng dm_verityđể đảm bảo tính toàn vẹn của hệ thống tệp gốc. Đối với những người không hoàn toàn khó tính, người ta có thể sử dụng các mô-đun EVM; xem wiki.gentoo.org/wiki/Extends_Verifying_Module để biết tài liệu của Gentoo.
Charles Duffy

Câu trả lời:


50

Cuộc tấn công cụ thể mà bạn bày tỏ mối quan tâm là:

thường thì kẻ tấn công sẽ đánh lừa người dùng cả tin để chạy một tệp thực thi bằng cách tải xuống và nhấp vào.

Ít nhất là trong trường hợp phổ biến khi tệp được tải xuống trong trình duyệt web, điều này đã được ngăn chặn trong Ubuntu bởi sự tuân thủ của chính sách đối với chính sách Yêu cầu Bit cho phép thực thi . Các phần có liên quan trực tiếp nhất của chính sách đó là:

  • Các ứng dụng, bao gồm cả máy tính để bàn và trình bao, không được chạy mã thực thi từ các tệp khi cả hai:

    • thiếu bit thực thi
    • nằm trong thư mục nhà của người dùng hoặc thư mục tạm thời.
  • Các tệp được tải xuống từ trình duyệt web, ứng dụng thư khách, v.v. không bao giờ được lưu dưới dạng thực thi.

Vì vậy, nếu người dùng được yêu cầu tải xuống một chương trình trong trình duyệt web, thì làm như vậy và cố gắng chạy tệp bằng cách nhấp đúp vào nó, nó sẽ không chạy. Điều này áp dụng ngay cả khi tệp được tải xuống là tập lệnh shell hoặc thậm chí là tệp .desktop. (Nếu bạn đã từng thắc mắc tại sao các tệp .desktop trong thư mục chính của bạn phải được đánh dấu có thể thực thi được mặc dù chúng không thực sự là chương trình, thì đó là lý do.)

Người dùng có thể thay đổi hành vi này thông qua thay đổi cấu hình. Hầu hết sẽ không, và trong khi những người có lẽ không nên, đó không thực sự là điều bạn phải lo lắng. Mối quan tâm lớn hơn là cuộc tấn công phức tạp hơn mà tôi nghĩ rằng bạn đã lo lắng, trong đó một kẻ độc hại (hoặc bot) hướng dẫn người dùng tải xuống một tệp cụ thể, đánh dấu nó có thể thực thi được (thông qua trình duyệt tệp của họ hoặc với chmod) và sau đó chạy nó

Thật không may, việc hạn chế khả năng của người dùng để thiết lập bit thực thi trên một tệp hoặc thực thi các tệp khác ngoài các tệp trong danh sách trắng sẽ không làm giảm đáng kể vấn đề. Một số cuộc tấn công sẽ hoạt động và những cuộc tấn công không thể được sửa đổi một cách tầm thường để chúng thực hiện. Vấn đề cơ bản là hiệu quả của việc chạy tệp có thể đạt được ngay cả khi tệp không có quyền thực thi .

Điều này được minh họa tốt nhất bằng ví dụ. Giả sử evillà một tệp trong thư mục hiện tại, nếu được cấp quyền thực thi ( chmod +x evil) và run ( ./evil), sẽ làm điều gì đó xấu xa. Tùy thuộc vào loại chương trình, hiệu ứng tương tự có thể đạt được bằng một trong những điều sau đây:

Không ai trong số đó, thậm chí là cái cuối cùng, yêu cầu tệp có quyền thực thi hoặc thậm chí người dùng có thể cấp quyền cho tệp thực thi.

Nhưng các hướng dẫn độc hại thậm chí không cần phải phức tạp. Hãy xem xét lệnh không độc hại này , đây là một trong những cách được đề xuất chính thức để cài đặt hoặc cập nhật NVM :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Lý do không độc hại là NVM không phải là phần mềm độc hại, nhưng nếu URL thay vào đó là tập lệnh của ai đó gây ác khi chạy, lệnh đó sẽ tải xuống và chạy tập lệnh. Tại bất kỳ thời điểm nào, bất kỳ tập tin sẽ cần phải được cấp quyền thực thi. Tải xuống và chạy mã chứa trong một tệp độc hại với một lệnh như thế này, tôi tin rằng, một hành động khá phổ biến mà kẻ tấn công lừa người dùng thực hiện.

Bạn có thể nghĩ đến việc cố gắng hạn chế những thông dịch viên nào có sẵn để người dùng chạy. Nhưng thực sự không có cách nào để làm điều này mà không ảnh hưởng đáng kể đến các tác vụ thông thường mà bạn có lẽ muốn người dùng có thể thực hiện. Nếu bạn đang thiết lập một môi trường cực kỳ hạn chế, gần như mọi thứ mà người dùng sẽ nghĩ làm trên máy tính đều không được phép, giống như một ki-ốt chỉ chạy một vài chương trình, thì điều này có thể cung cấp một số biện pháp bảo vệ có ý nghĩa. Nhưng nó không giống như trường hợp sử dụng của bạn.

Vì vậy, câu trả lời gần đúng cho câu hỏi của bạn là "Không." Câu trả lời đầy đủ hơn là bạn có thể quản lý để ngăn người dùng thực thi bất kỳ tệp nào ngoại trừ những tệp bạn cung cấp trên danh sách trắng. Nhưng đó là theo nghĩa kỹ thuật "thực thi" nghiêm ngặt, không cần thiết để đạt được hiệu quả đầy đủ của việc chạy hầu hết các chương trình hoặc tập lệnh. Để ngăn chặn điều đó , bạn có thể cố gắng làm cho danh sách trắng trở nên rất nhỏ, vì vậy nó không liệt kê bất kỳ thông dịch viên nào ngoại trừ những thông dịch viên có thể bị hạn chế cao. Nhưng ngay cả khi bạn quản lý được điều đó, người dùng không thể làm gì nhiều và nếu bạn làm cho nó nhỏ đến mức họ không thể tự làm tổn thương mình, họ có thể không thể làm gì được. (Xem bình luận của Thomas Ward .)

Nếu người dùng của bạn có thể tự làm tổn thương mình, họ có thể bị lừa làm tổn thương chính họ.

Bạn có thể hạn chế các chương trình cụ thể được sử dụng hoặc hành xử theo cách có khả năng gây hại và nếu bạn đang xem các mẫu cụ thể ransomware có xu hướng tuân theo, bạn có thể ngăn chặn một số trường hợp phổ biến cụ thể. (Xem AppArmor .) Điều đó có thể cung cấp một số giá trị. Nhưng nó sẽ không cung cấp cho bạn bất cứ điều gì gần với giải pháp toàn diện mà bạn hy vọng.

Bất cứ biện pháp kỹ thuật nào (nếu có) cuối cùng bạn thực hiện, cách tốt nhất của bạn là giáo dục người dùng. Điều này bao gồm yêu cầu họ không chạy các lệnh mà họ không hiểu và không sử dụng các tệp đã tải xuống trong các tình huống mà họ không thể giải thích lý do tại sao nó an toàn một cách hợp lý để làm như vậy. Nhưng nó cũng bao gồm những thứ như tạo bản sao lưu, để nếu có sự cố xảy ra (do phần mềm độc hại hoặc cách khác), tác hại được thực hiện sẽ càng ít càng tốt.


6
Có lẽ các biện pháp phi kỹ thuật cần bao gồm có thông tin liên hệ cho ai đó có thể kiểm tra một cái gì đó mà họ muốn làm. Bất cứ lúc nào họ không chắc chắn, hãy gọi hoặc nhắn tin và hỏi. Điều đó có thể loại bỏ sự cám dỗ để đoán.
Peter Cordes

1
Đây là một bản tóm tắt tuyệt vời về các vấn đề và nỗi sợ hãi đằng sau câu hỏi của OP
Robert Riedl

Nit nhỏ: " . ./evilhoặc source ./evilchạy các lệnh trong evil.sh" - Các sourcelệnh đó sẽ chạy các lệnh eviltrừ khi chúng chỉ định phần mở rộng, chẳng hạn. ./evil.sh
Tạm dừng cho đến khi có thông báo mới.

@DennisWilliamson Cảm ơn - đã sửa! Điều đó còn sót lại từ một bản thảo thô (không được gửi) cũ của câu trả lời mà tôi đã sử dụng các tên tập lệnh khác nhau. Tôi nhanh chóng nhận ra điều đó thật ngớ ngẩn, nhưng dường như không thể thay đổi tất cả các lần xuất hiện.
Eliah Kagan

1
Mỗi lần tôi thấy một cách để cài đặt hoặc cập nhật một phần mềm liên quan đến việc "chỉ cần quên đoạn script này và chạy nó", móng chân của tôi cong lên một chút. Không có gì ngăn cản ai đó tạo tài khoản GitHub / repo bởi một ký tự hoặc sử dụng 0 thay vì O hoặc sử dụng các ký tự UTF-8 để che khuất và dán tập lệnh độc hại của riêng họ vào đó ... tất cả những gì bạn cần là một typo trong lệnh wget của bạn và bam.
Ian Kemp

11

*


Nó được gọi là vỏ hạn chế.

Bạn có thể sử dụng /bin/rbash, đã có sẵn trong Ubuntu và kết hợp nó với biến PATH bị hạn chế . Di rbashchúc cấm thực hiện bất cứ điều gì không có trong $PATH.

Thêm người dùng bị hạn chế:

sudo adduser --shell /bin/rbash res-user

Tạo một thư mục mới, nơi chúng tôi có thể liên kết các tệp nhị phân trong đó, người dùng sẽ bị giới hạn ở:

sudo mkdir /home/res-user/bin

Sửa đổi .profiletệp:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

Làm cho .profile, bashrc.bash_profilebất biến:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

Bây giờ chúng tôi cung cấp cho người dùng điều duy nhất anh ta sẽ được phép làm, tức là mở Firefox:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

Bây giờ, nếu chúng ta đăng nhập vì res-userchúng ta chỉ có thể mở Firefox:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

Chúng ta không thể dễ dàng thoát khỏi vỏ bị hạn chế của mình:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

Người dùng bị hạn chế không thể tạo các tệp thực thi hoặc khởi động chúng:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

Người dùng bị hạn chế không thể thực thi các tập lệnh xấu từ internet, vì người dùng không thể thực thi các lệnh cần thiết:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* Có nhiều cách để thoát ra khỏi vỏ bị hạn chế , nhưng nếu người dùng của bạn có khả năng đó, thì họ có thể không dễ tin như bạn nghĩ.


2
Điều này cố gắng đạt được "một môi trường cực kỳ hạn chế mà gần như mọi thứ mà người dùng sẽ nghĩ phải làm trên máy tính đều không được phép" (như tôi đã đặt nó trong câu trả lời của mình). res-userkhông thể đăng nhập bằng đồ họa. Điều hữu ích duy nhất họ có thể làm là ssh -Xvào và chạy firefox. Bạn có thể cho phép nhiều lệnh hơn để người dùng có thể thực hiện công việc của họ. Sau đó thoát ra dễ dàng hơn. Một số phương thức được liên kết có thể được tạo thành một lớp (mà kẻ tấn công có thể cung cấp). Nếu người dùng thấy hạn chế ngột ngạt, họ sẽ trở thành chuyên gia phá vỡ chúng, trong khi vẫn hiểu biết hoặc cả tin như trước đây.
Eliah Kagan

1
@EliahKagan đúng, đúng. Bạn sẽ phải liên kết mọi thứ mà người dùng cần. Nhưng điều này rất gần với [...] có cách nào để xây dựng danh sách kiểm soát truy cập và xác định rằng người dùng này chỉ có thể thực thi các tệp trong danh sách này [...] . Vì vậy, nó có thể giúp OP. Thoát khỏi những vỏ ốc này không phải là không thể, nhưng khá khó khăn. Chúng tôi đã có các thiết lập tương tự để truy cập bên ngoài vào các tài nguyên cụ thể hoặc máy chủ nhảy. Tôi nghi ngờ có những cuộc tấn công rộng rãi ngoài kia, chống lại các thiết lập vỏ bị hạn chế .... và nếu bạn đang đối phó với một cuộc tấn công có chủ đích , nơi kẻ tấn công biết môi trường .. tất cả các cược đều bị tắt.
Robert Riedl

4
Tôi sẽ nâng chú thích lên dòng đầu tiên của câu trả lời của bạn.
Tạm dừng cho đến khi có thông báo mới.

Có lẽ tốt hơn để họ sử dụng chrome trong chế độ kiosk hoặc một trình duyệt cứng khác. Sẽ khá dễ dàng để có được một plugin firefox hoặc phần mở rộng được cài đặt với sự cho phép rất cao và thực thi lệnh hệ thống. Trong firefox, đảm bảo bạn sử dụng phiên bản cuối cùng và không cho phép các tiện ích mở rộng.
Benjamin Gruenbaum

Để bảo vệ hơn nữa, người dùng chỉ ghi quyền truy cập vào các hệ thống tệp được gắn với tùy chọn noexec.
Dan D.
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.