Neden root yazma dosyaları root'a ait olmayan bir dizine sahip olmak kötü?


28

Bu, başka bir soruya yorumda geldi ve eğer biri bana bunun nedenlerini açıklayabilirse çok isterdim.

Apache'nin belirli bir VHost için hataları kullanıcının giriş dizinine kaydetmesini önerdim. Bu vuruldu çünkü güvensizdi. Niye ya?

Bir cevap yorumunda açıklama istedim, ancak elimdeki tek şey root'un sahip olmadığı bir klasörde root yazmasının olması güvensizdi. Yine, birileri açıklayabilir mi?

Teşekkürler,

Bart.


4
Apache'nin root olarak çalıştırılması - en az ayrıcalık ilkesi buna karşı çıkıyor!
Jonathan Leffler

1
Apache www olarak çalışıyor, ancak root olarak başlatılıyor, böylece norm olduğu gibi port 80'e bağlanabilir. Görünüşe göre, aynı zamanda root olarak da giriş yapıyor.
Bart B

Yanıtlar:


31

Çünkü bir kötülük kullanıcı kötü niyetli olarak dosya işaret deneyebilirsiniz rootfarklı bir konuma yazıyor . Bu o kadar basit değil, ama gerçekten mümkün.

Örnek olarak, bir kullanıcı , sözde Apache günlüğünden, örneğin, / etc / shadow dizinine bir bağlantı yapmanın yolunu bulursa , aniden kullanılamaz bir sisteme sahip olursunuz. Apache ( ), sistemi hatalı kılan kullanıcı bilgilerinizin üzerine yazar.root

ln -s /etc/shadow /home/eviluser/access.log

Eğer access.log dosya kullanıcı tarafından yazılabilir değil onu kaçırmak zor olabilir, ama ihtimal de bertaraf iyidir yapabilir!

İşi yapmak için logrotate kullanmak , mevcut olmayan bir dosyaya bağlantı oluşturmak için bir olasılık olabilir , ancak bu logrotate , günlükler büyüdükçe üzerine yazacaktır:

ln -s /etc/shadow /home/eviluser/access.log.1

Not :

Sembolik bağ yöntemi sadece kavramının bir kanıtı olarak verilen muhtemel saldırılara biridir.

Güvenlik, bir sorun olarak bildiğimiz şeyi kara listeye almaktan ziyade, Beyaz Liste akla yapılmalıdır.


Bunun için izinleri ayarlamanın bir yolu var, böylece yalnızca dosyayı okuyabilir ve başka bir şey (chown, chmod, vb. Gibi) silemez, düzenleyemez veya yapamazlar?
Joshua

Bu işlemi mümkün olan her hedef dosyada yapmalısınız! bu yazılabilir dosya, saldırganın yarattığı gibi kendisine ait olan bağlantının kendisi değildir.
drAlberT

2
@Joshua: chown sadece root tarafından yapılabilir. chmod, dosyaya sahip olan kişi tarafından yapılabilir. IIRC, dizine sahip olan kişi tarafından yeniden adlandırma yapılabilir. AlberT'ın dediği gibi, kök oluşturmadan önce bir bağlantı oluşturmak dosyayı dizine yazabilen herkes tarafından yapılabilir.
atk

2
@atk: Ayrıca, dizine sahip olan kişi, dosyaları kendisinden silebilir (yapışkan +tbit ayarlanmadıkça), dosyaların kendilerine yazma izni olmasa bile (unlink () dizine bir yazma işlemi yapar) dosya). Kök, dosyayı önceden oluşturmuş olsa bile, dizin sahibi yine de onu silebilir ve başka bir şeye bir bağlantı ile değiştirebilir.
James Sneeringer

1
Eğer eviluser / home / eviluser yazabiliyorsa (ya da dizindeki izinleri değiştirebiliyorsa - IOW a sahiplerse), o zaman access.log'daki izinlerin ne olduğu önemli değil; eviluser dosyayı (yeniden) hareket ettirebilir ve sembolik bağlarını yerine yerleştirebilir. Diğer bir soru, yazılımın ne açtığına dikkat edip etmediğidir.
Jonathan Leffler

1

Süreçlerin sahip olmadıkları veya güvenmedikleri bir dizine yazmamasının genel prensibi iyi bir şeydir. Ancak, bu özel durumda, Apache kodunun günlüğü O_NOFOLLOWvb . İle açtığına inanmak mantıklıdır : Bir kullanıcının giriş dizinine giriş yapmak yaygın bir kurulumdur.

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.