Bir kullanıcının yürütülebilir dosyaları oluşturmasını ve çalıştırmasını engellemenin bir yolu var mı?


31

Fidye yazılım saldırıları sıfır günlük yararlanmalar kullanabilir, ancak çoğu zaman saldırgan basit bir kullanıcıyı indirerek ve tıklatarak yürütülebilir bir çalıştırmaya kandırabilir.

Saf bir kullanıcımız olduğunu ve onları normal yolla sınırlandırmak istediğimizi varsayalım. Yürütülebilir ayrıcalıklı bir dosya oluşturmalarını engellemenin herhangi bir yolu var mı?

Ya da, daha genel olarak, bir erişim kontrol listesi oluşturmanın ve bu kullanıcının yalnızca bu listedeki dosyaları çalıştırabileceğini tanımlamanın bir yolu var mı?


7
Yürütmeyi bu şekilde devre dışı bırakmak, kullanıcıların sistemde her şeyi yapabilmelerini yasaklar . Bu sisteme yerleşik bir mekanizma ve hatta bu tür bir güvenlik kilitlemesi yapabileceğimin farkında olduğum üçüncü taraf bir yazılım bile yok
Thomas Ward

3
cevaplamıyor ama yapabileceklerinize ipucu verin: kullanıcı tarafından yazılabilir mountlara noexec ekleyin. komut dosyalarını engellemeyecek ancak gerçek ikili yürütmeyi engelleyeceksiniz.
Sampo Sarrala

3
@ThomasWard, kısıtlı bir kabuk tam olarak bu değil mi?
Robert Riedl

7
@ThomasWard, belirli bir (genellikle imzalı) çalıştırılabilirler listesine izin verilen ve yükseltilmiş ayrıcalıklar olmadan başka hiçbir şeyin çalıştırılamadığı bir “beyaz listeye yerleştirilebilir çalıştırılabilirler” kavramı vardır; ve hem Windows hem de OS X'in bunu yapan makul çözümleri var. Yine de, uygulama beyaz listesi için iyi bir Ubuntu (veya diğer Linux) çözümü olup olmadığını bilmiyorum.
Peteris

2
@Peteris, bu tür çok sayıda çözüm var. En sevdiğim, çalıştırılabilir dosyalarınızla imzalanmış, salt okunur bir dosya sistemine sahip olmak ve noexecChromeOS'un dm_veritykök dosya sistemi bütünlüğünü sağlamak için nasıl kullandığı doğrultusunda tüm diğerlerini bir araya getirmek. Bu kadar sert olmayan insanlara EVM modülleri kullanılabilir; bkz wiki.gentoo.org/wiki/Extended_Verification_Module aynı üzerine Gentoo'nun dokümantasyon.
Charles Duffy

Yanıtlar:


50

Endişesini dile getirdiğin özel saldırı:

Genellikle bir saldırgan, saf bir kullanıcıyı sadece indirerek ve tıklatarak çalıştırılabilir bir çalıştırmaya zorlar.

En azından, dosyanın bir web tarayıcısında indirildiği ortak durumda, bu durum zaten tarayıcının Yürütme-İzinli Bit Gerekli İlkesi'ne uyması nedeniyle Ubuntu'da önlenmelidir . Bu politikanın en doğrudan ilgili kısımları:

  • Masaüstleri ve mermiler dahil uygulamalar, her ikisinde de dosyalardan çalıştırılabilir kod çalıştırmamalıdır:

    • çalıştırılabilir bit yok
    • Bir kullanıcının giriş dizininde veya geçici bir dizinde bulunur.
  • Bir web tarayıcısından, posta istemcisinden vb. İndirilen dosyalar hiçbir zaman çalıştırılabilir olarak kaydedilmemelidir.

Yani, bir kullanıcıya bir web tarayıcısından bir program indirmesi söylenirse, bunu yapar ve dosyayı çift tıklatarak çalıştırmayı denerse, çalışmaz. Bu, indirilen dosya bir kabuk betiği veya bir .desktop dosyası olsa bile geçerlidir. ( Ana dizininizdeki .desktop dosyalarının , gerçekte program olmasalar bile, yürütülebilir olarak işaretlenmeleri gerektiğini hiç merak ettiyseniz , bu yüzden.)

Kullanıcıların bu davranışı yapılandırma değişiklikleri yoluyla değiştirmesi mümkündür. Çoğu olmaz ve muhtemelen bunu yapmamalı olanlar olsa da, gerçekten endişelenmen gereken şey bu değil. En büyük endişe, kötü niyetli bir kişinin (veya botun) kullanıcıya belirli bir dosyayı indirmesi talimatını verdiği endişe duyduğum daha karmaşık bir saldırı. çalıştırılabilirlerini kendileri işaretleyebileceği (dosya tarayıcıları aracılığıyla veya ile chmod) ve ve sonra koş.

Ne yazık ki, bir kullanıcının yürütme bitini bir dosyaya ayarlama veya bazı beyaz listedekilerden başka dosyaları yürütme yeteneğini kısıtlamak sorunu belirgin şekilde azaltmaz. Bazı saldırılar zaten işe yarayacak ve önemsizce değiştirilemeyecek hale getirildi. Temel sorun, bir dosyayı çalıştırma etkisinin , dosyanın çalıştırılabilir izinleri olmasa bile elde edilebileceğidir .

Bu en iyi örnek ile gösterilmiştir. evilGeçerli dizinde, yürütülebilir izinler ( chmod +x evil) ve run ( ./evil) verilirse kötü şeyler yapabileceğini varsayalım . Ne tür bir program olduğuna bağlı olarak, aynı etki aşağıdakilerden biriyle sağlanabilir:

Bunların hiçbiri değil, hatta sonuncusu, dosya çalıştırılabilir izinlere sahip olduğunu veya kullanıcı olması bile gerektirir mümkün dosyayı çalıştırılabilir izinleri vermek.

Ancak kötü niyetli talimatların o kadar da karmaşık olması gerekmiyor. NVM'yi kurmak veya güncellemek için resmi olarak önerilen yollardan biri olan bu kötü amaçlı olmayan komutu düşünün :

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

Kötü niyetli olmama nedeni, NVM'nin kötü amaçlı yazılım olmamasıdır; ancak URL, çalıştırıldığında kötülük yapan birinin komut dosyasının yerine olsaydı, bu komut komut dosyasını indirir ve çalıştırırdı. Hiçbir noktada, herhangi bir dosyaya çalıştırılabilir izinler verilmesi gerekmez. Kötü niyetli bir dosyada bulunan kodu, bunun gibi tek bir komutla indirmek ve çalıştırmak, saldırganların kullanıcıları aldatmasını sağlayan oldukça yaygın bir işlem olduğuna inanıyorum.

Hangi tercümanların kullanıcıların çalıştırması için uygun olduğunu kısıtlamayı denemeyi düşünebilirsiniz. Ancak bunu yapmanın, muhtemelen kullanıcıların yapmasını istediğiniz sıradan görevleri önemli ölçüde etkilemeyecek bir yolu yoktur. Ayarlıyorsanız son derece sadece birkaç programlarını çalışır bir kiosk gibi izin verilmeyen bir kullanıcı bir bilgisayarda yapmak düşünürdüm neredeyse her şeyin üzerinde kısıtlı bir ortam, o zaman bu anlamlı düzeyde koruma sağlayabilir. Ama bu senin kullanım durumun gibi gelmiyor.

Yani sorunuza yaklaşık cevap "Hayır" dır. Tam cevap, muhtemelen kullanıcıların bir beyaz listeye verdiğiniz dosyalar dışında herhangi bir dosyayı çalıştırmalarını engelleyebilmeniz olabilir . Ancak bu, çoğu programın veya komut dosyasının çalıştırılmasının tam etkisini elde etmek için gerekli olmayan katı, teknik "yürütme" anlamındadır. Önlemek için bu , vermen gereken deneyebilirsiniz çok küçük, bu yüzden son derece kısıtlı olabilir olanların dışında tüm tercümanlar yazmıyorsa beyaz listesi. Fakat bunu başarsanız bile, kullanıcılar çok şey yapamazlardı ve çok küçük yaparsanız kendilerine zarar veremezlerdi, muhtemelen hiçbir şey yapamazlardı. (Bkz. Thomas Ward'ın yorumu .)

Eğer kullanıcılarınız kendilerine zarar verebilirse, kendilerini incitmek için kandırılabilirler.

Belirli programların kullanılmasını ya da zararlı olma ihtimali olan şekillerde davranmalarını kısıtlayabilirsiniz ve fidye yazılımının takip etme eğiliminde olduğu belirli kalıplara bakıyorsanız, bazı genel durumları önleyebilirsiniz. (Bkz. AppArmor .) Bu bir değer sağlayabilir. Ancak, umduğunuz kapsamlı çözüme yakın bir şey vermeyecektir.

Hangi önlemleri alırsanız (varsa), en iyisi, kullanıcıları eğitmektir. Bu, anlamadıkları komutları çalıştırmamalarını ve indirilmekte olan dosyaları neden kullanmanın neden güvenli olduğunu açıklayamadıkları durumlarda kullanmamalarını söylemeyi içerir. Ancak, yedekleme yapmak gibi şeyleri de içerir, böylece bir şeyler ters giderse (kötü amaçlı yazılım nedeniyle veya başka türlü), yapılan zarar mümkün olduğu kadar az olacaktır.


6
Belki teknik olmayan önlemlerin yapmak istedikleri bir şeyi kontrol edebilecek birisinin iletişim bilgilerine sahip olması gerekir . Ne zaman emin değillerse, arayıp mesajla ve sor. Bu tahmin etme cezasını kaldırabilir.
Peter Cordes

1
OP'ler sorusunun ardındaki sorunlar ve korkular hakkında bu harika bir özet
Robert Riedl

Minör nit: " . ./evilveya " source ./eviliçindeki komutları çalıştırır evil.sh- - Bu sourcekomutlar evil, uzantı belirtilmediği sürece komutları çalıştırır, örneğin. ./evil.sh
sonraki bildirime kadar duraklatıldı.

@DennisWilliamson Teşekkürler - düzeltildi! Bu, farklı senaryo isimleri kullandığım cevabın daha eski (gönderilmiş değil) kaba taslaklarından kaldı. Bunun aptalca olduğunu hemen fark ettim, ancak görünüşe göre tüm olayları değiştiremedi.
Eliah Kagan

1
“Bu betiği yaz ve çalıştır” içeren bir yazılımın kurulumunu veya güncellemesini her gördüğümde, ayak tırnaklarım biraz kıvrılıyor. Hiçbirinin birisinin tek bir karakter tarafından bırakılmış bir GitHub hesabı / repo oluşturmasını engellemek ya da O yerine 0 kullanması ya da belirsizlik ve kendi kötü niyetli komut dosyasını yapıştırmak için UTF-8 karakterleri kullanması ... o zaman tek ihtiyacınız olan tek şey değildir wget komutunuzdaki yazım hatası ve bam.
Ian Kemp

11

EVET *


Buna sınırlı bir kabuk denir.

/bin/rbashUbuntu'da zaten mevcut olanı kullanabilir ve bunu sınırlı bir PATH değişkeni ile birleştirebilirsiniz . Bu rbashirade, bulunmayan herhangi bir şeyin yürütülmesini yasaklar $PATH.

Sınırlı bir kullanıcı ekleyin:

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

İkiliklerle bağlantı kurabileceğimiz, kullanıcının sınırlı olacağı yeni bir dizin oluşturun:

sudo mkdir /home/res-user/bin

.profileDosyayı değiştirin :

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

Make .profile, bashrcve .bash_profiledeğişmez:

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

Şimdi, kullanıcıya yapmasına izin verdiği tek şeyi veriyoruz, yani Firefox'u açın:

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

Şimdi, eğer res-usersadece Firefox’u açabildiğimiz için giriş yaparsak:

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

Sınırlı kabuğumuzdan kolayca kaçamayız:

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

Sınırlı kullanıcı dosyaları çalıştırılabilir yapamaz veya başlatamaz:

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

Kısıtlı kullanıcı, kötü komutları internetten çalıştıramaz çünkü kullanıcı gerekli komutları çalıştıramaz:

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

* Kısıtlı mermilerden kurtulmanın yolları vardır , ancak kullanıcı bunu yapabiliyorsa, düşündüğün kadar saf olmayabilir.


2
Bu, "bir kullanıcının bilgisayarda yapmayı düşündüğü neredeyse her şeyin yasaklanacağı oldukça kısıtlı bir ortam " elde etmeye çalışıyor (cevabımı yazdığım gibi). res-usergrafiksel olarak giriş yapamıyorum. Yapabilecekleri tek yararlı şey içeri ssh -Xgirip koşmak firefox. Daha fazla komuta izin verebilirsiniz, böylece kullanıcı işini yapabilir. Sonra patlamak kolaylaşır. Bağlantılı yöntemlerin birçoğu (bir saldırganın sağlayabileceği) tek gömleklerde yapılabilir. Kullanıcılar kısıtlamaları boğucu buluyorsa, daha önce olduğu gibi anlayışlı veya saf kalabilmeleri için onları doyurma konusunda uzman olacaklar.
Eliah Kagan

1
@EliahKagan evet, doğru. Kullanıcının ihtiyaç duyduğu her şeyi birbirine bağlamanız gerekir. Ancak bu [...] 'ya çok yakın bir erişim kontrol listesi oluşturmak ve bu kullanıcının sadece bu listedeki dosyaları çalıştırabileceğini tanımlamak için herhangi bir yol var [...] . Bu yüzden OP yardımcı olabilir. Bu kabukları kırmak imkansız değil, ama oldukça zor. Belirli kaynaklara veya atlama sunucularına harici erişim için benzer kurulumlar yaptık. Dışarıda, sınırlı kabuklu kurulumlara karşı geniş çaplı saldırılar olduğundan şüpheliyim .... ve eğer saldırganın çevreyi bildiği hedefli bir saldırı ile uğraşıyorsanız .. tüm bahisler yine de kapalı.
Robert Riedl,

4
Dipnotu cevabınızın ilk satırına yükseltirdim.
sonraki duyuruya kadar duraklatıldı.

Kiosk modunda veya başka bir sertleştirilmiş tarayıcıda krom kullanmaları muhtemelen daha iyi. Çok yükseltilmiş izin ve sistem komutu yürütme ile yüklenen bir firefox eklentisi veya eklentisi edinmek oldukça kolay olmalı. Firefox'ta en son sürümü kullandığınızdan ve uzantılara izin vermediğinizden emin olun.
Benjamin Gruenbaum,

Daha fazla koruma için, kullanıcıya sadece noexec seçeneğiyle monte edilmiş dosya sistemlerine yazma izni verin.
Dan D.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.