Saldırganın bir sistemi tehlikeye atmak için mkdir'i kullanması mümkün mü?


22

ricardoSistemimde sıkıntılı bir kullanıcı olan kullanıcı için sınırlı bir kullanıcı hesabı oluşturuyorum . Ona sudobazen yapması gereken dizinleri kullanma hakkı vermek istiyorum . Dosyamda bu kuralı düşünüyorum /etc/sudoers:

ricardo   ALL=(root) NOPASSWD: /bin/mkdir

Sadece bu kuralı kullanarak, ricardo'nun kasıtlı olarak veya yanlışlıkla sistemi tehlikeye atabilecek bir yolu var mı?


2
Statik inode sayımı olan bir dosya sisteminiz varsa, bütün inode'larınızı kullanabilir.
Ürdün

2
@schaiba Sistemi kurcalamayı ve sistemi kullanıp kullanamayacağını görmeyi seviyor ve man sayfalarını her zaman gerektiği kadar okumuyor.
Ricardo Altamirano,

8
Şu anda sudo ile birleştirilmiş uygun bir kullanıcı eğitimi, benden yapılması önerilen şey olacaktır.
schaiba

2
@Schaiba'nın dediği gibi, bu kullanıcıları, onlara öğreterek ve sorumluluklarını vererek (yakın gözetim altında) kullanabilirsiniz. Birincisi sistemi çok fazla kilitlemeye çalıştığından, sysdaminler ve kullanıcılar arasındaki savaşları gördüm. Kullanıcılar, sysadmins'i 10'a 1 aştı ve hatta o zaman ( bugünün İnternet erişimi olmadan !) Sysdaminlerin yenilgisi aşağılayıcıydı. Asla böyle bir pozisyona girme!
vonbrand

2
Bu çok fazla sayıda ricardo vakası. Ya da en azından BOFH'yi ...
Geyik Avcısı

Yanıtlar:


21

Bunun gibi bir saldırının işe yarayacağından şüpheliyim, burada "bir şey" rootfs yüklendikten sonra yüklenmeye çalışacak bir çekirdek modülüdür:

$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko

Ayrıca, modülde belirtilen diğer isimlere bağlı olarak diğer isimleri de kullanabileceğinizi unutmayın. Depmod çalıştırılıncaya kadar yüklenmeyeceğini tahmin ediyorum, bu bir sonraki çekirdek güncellemesinde gerçekleşecek - bu yüzden mkdirson zamanlarda sudo günlüğünde bile gösterilmeyecek.

/ Etc içinde bir dizindeki tüm dosyaları bazen yinelemeli olarak okuyan pek çok şey vardır. Daha da kötüsü, bu dizinlerin bazıları varsayılan olarak mevcut değildir ve bunları bilmenin tek yolu, onları kullanan program için manpage, init betikleri vb. Okumaktır. Bazıları daha da kötüsü geriye dönük uyumluluktan mahrum kalıyor ve artık belgelenmiyor bile olabilir.

düzenleme: Birkaç dizin daha düşündüm, bunlar /usr/local:

  • /usr/local/lib/perl/5.14.2(Perl sürümüne bağlı olarak değişir, perl -Vbulmaya çalışın ). FileOrada bir alt dizin oluşturun ve içine bir koyun Find.pm. Şimdi ne zaman birileri kullanıyorsa File::Find, saldırganın sürümünü kullanacaklar. Benzer şekilde, aynı şeyi yapın Getopt::Long. Sistem yardımcı programları genellikle Perl'de yazılmıştır, bu nedenle bu muhtemelen kökü verir. (Dene ack-grep --color -a 'use.+::' /usr/sbin | less -R)
  • Ben Python, Ruby, vb benzer dizinleri var düşünüyorum. Sistem araçları Python'da da yazılmıştır.
  • Birinin alt dizinleriyle derlediği birçok şeyi altüst edin /usr/local/include.

Oh, ancak <kötü kullanıcı>, çekirdeğin bunları yükleyeceği modülleri kopyalayabilirse, oyun başlamadan önce sona erer.
vonbrand

1
@ vonbrand <evil user> normalde yapamaz, ancak yapabileceği sudo mkdiryeni bir dizin oluşturmak için onu kullandı.
derobert,

20

mkdirKök olarak çalıştırarak , kullanıcı daha önce aynı adlara (ve / veya yanlış haklara sahip) dizinler oluşturarak diğer işlemleri / kullanıcıları yeni dosyalar ve dizinler oluşturmasını engelleyebilir.

Bu, özellikle log ve kilit dosyalarında güvenlikle ilgili olabilir .

Olarak jordanm belirtildiği gibi, maksimum sayıda düğümler tarafından , tüm sistemi bloke hangi kadar kullanılabilir.

Kullanıcıyı belirli gruplara ekleyerek (veya ACL'leri kullanarak ), herhangi bir hak vermeden sorunları çözebilmelisiniz sudo.


Harika noktalar Muhtemelen mkdirricardo'nun kullanmasına izin verilen komut listesinden çıkacağım .
Ricardo Altamirano,

for((i = 0;; i++)); do touch $i; doneİnode'ları yormak için ise, basit bir işlem iyi yapacaktır (faşizm, özür dilerim; ama anladın).
vonbrand

@ vonbrand Kök olmadığı sürece, bir kota tarafından durdurulacaktır. Tabii ki, sudoOP'nin düşündüğü diğer komutlar da inode boğumlarına izin verebilir; OP, bu DoS vektörünün farkında olmalıdır.
derobert,

11

Onu küçük bir hapishaneye yönlendirmelisin. Ya da daha iyisi, küçük bir VM'de, saatte bir çarpabileceği. Tek yapmanız gereken yeni bir kopya sağlamak.


Bunu tavsiye ederim. Ona kendi VM'sinde root erişimi ver.
emory

a chroot ^ H ^ H ^ H ^ H ^ Hounty hapishanede ...
Deer Hunter

6

Yazma erişimine sahip dizinler oluşturabilmek için olasılıklar var. İle kullanıcı yeni dizine ne isterseniz yazabilirsiniz. Farklı bir kullanıcı olarak çalışan sistemde, config, scriptler veya modülleri yüklemek için bir dizin ağacını yineleyecek bir prosese ihtiyacınız olacak. O zaman kullanıcı yüklenecek ya da çalıştırılacak kendi nesnelerini ekleyebilir. Aklıma gelen ilk şey, php veya cgi çalıştırabilen bir web sunucusu çalıştırıyor olmanızdır. Daha sonra komut dosyalarını o kullanıcı olarak çalıştırabilirsiniz. Daha gerçek dünya örnekleriyle, özellikle de bunlarla gelmek için mücadele ediyorum ama eminim ki bunlar. mkdir -m 777 blahricardoroot

ssh, bu tür senaryoları yakalayan bir daemon örneğidir. Sahip .ssholmayan bir kullanıcı için bir dizin oluşturduysanız ve kendi authorized_hostsdosyanızı yerleştirin. sshddizin izinlerinin çok açık olduğunu ve ortak anahtarı yok saydığını fark eder.

Dosyaların açılmasının beklendiği (geçici tmp veya takas dosyaları gibi) hangi programların iyi işlemeyeceği konusunda kesinlikle bir sıkıntı yaratabilirsiniz.

Çok fazla grup oluşturabilirsin ama onlarla hiçbir şey yapmıyorsun. En azından dizlerine bir sistem getirebilirsin. OOM katilinin sshd'yi çıkarması için 256M'lık bir kutuda yaklaşık 10000 cgroup aldı .

Eğer kontrol ederse -mseçeneği mkdirve umask sudoçevre Ben sadece bir sıkıntı günlerine geri olduğunu düşünüyorum.

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.