Okuma izinleri olmadan yürütülebilir dosyaları izleme


17

Üzerinde straceokuma izni olmayan bir yürütülebilir dosya kullanırken Ubuntu 14.04 üzerinde bazı şaşırtıcı davranış buldum . Bunun bir hata olup olmadığını veya bazı standartların bu belirsiz davranışı zorunlu kıldığını merak ediyorum.

İlk olarak, arka planda sıradan bir yürütülebilir dosya başlattığımda ve ona eklediğimde ne olacağını görelim. Beklendiği gibi bu işe yarıyor:

$ /bin/sleep 100 &
[2] 8078
$ strace -p 8078
Process 8078 attached
restart_syscall(<... resuming interrupted call ...>

Sonra ben üzerinde hiçbir okuma izinleri olan bir çalıştırılabilir ile deneyin:

---x--x--x 1 root root 26280 Sep  3 09:37 sleep*

Bu çalışan işleme eklenmesine izin verilmiyor:

$ ./sleep 100 &
[1] 8089
$ strace -p 8089
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

Bu da beklediğim şey. İşleme bir hata ayıklayıcı ekleyebilir ve etkin bir şekilde yürütülebilir dosya üzerinde bu şekilde okuma izinleri varsa, okuma izni olmadan yürütme izni vermek çok iyi olmaz.

Ancak, yürütülebilir dosyayı zaten izlenen bir işlem altında başlatırsam, bunu yapmama izin verilir:

$ strace ./sleep 100
execve("./sleep", ["./sleep", "100"], [/* 69 vars */]) = 0
brk(0)                                  = 0x9b7a000

Bu benim için beklenmedik bir şey. Bu bir güvenlik hatası mı yoksa standart tarafından zorunlu kılan bir özellik mi?


3
StéphaneChazelas @: Konu, adam olmasıdır edebilirsiniz basitçe strace için argüman olarak kullanarak, bunu ptrace. Temel neden, execveçağrılarda, işlem zaten izlenmişse, yürütülen dosyanın okuma izinlerinin tekrar denetlenmediği görülmektedir. Onun sorusu, bunun bir güvenlik hatası mı yoksa zorunlu bir özellik mi olduğu (ikincisi, hala bir güvenlik hatası olarak düşünürüm, sadece spesifikasyonun bir güvenlik hatası).
celtschk

@celtschk, üzgünüm, soruyu çok hızlı okudum.
Stéphane Chazelas

1
EPERMDen gelmek gibi get_dumpable()çağrılabilir (böylece "dumpable" çekirdek izin damping olmadığını kontrol etmek için de kullanılabilir) __ptrace_may_access()çağrılabilir ptrace_attach()ile kernel/ptrace.c.
ninjalj

Bir program çalışırken, kodunu içeren çalıştırılabilir bir yürütülebilir dosya oluşturmak için hata ayıklayıcı için yeterli bilgi mevcut olacak mı veya program yükleyicisi, bir programın gerçekten çalışması için gereken yer değiştirme düzeltmeleri gibi şeyleri atacak mı?
supercat

@supercat Bildiğim kadarıyla, hata ayıklayıcı, yer değiştirme kodu da dahil olmak üzere yürütülen tüm kullanıcı modu kodu aracılığıyla tek bir adıma erişebilir. Bu erişim düzeyi ile çalışan bir yürütülebilir dosyayı çoğaltmak çok zor olmamalıdır.
kasperd

Yanıtlar:


7

Bu bir cevap değil, bir başkasının da okumak istediği durumlarda bağlantılar ve düşünceler topluluğudur. Çünkü bu oldukça ilginç bir şey.

Unix ve Linux'ta bununla ilgili cevap, sadece ikili dosyaları bu şekilde dökmek mümkün (veya şu anda vanilya çekirdeği ile test edilemiyor).

Grsecurity bu yapılandırma seçeneğini ve yamanın kendisini düzeltmeye çalışıyordu (o zamandan beri değişmiş olsa da)

Bu taahhüt , çekirdek geliştiricilerinin sadece sadece suid ikili dosyalarını boşaltmayı önemsediğini gösteriyor.

Ama aslında bu hattan çekirdeğin SUID durumu ile ilgili okunamayan ikili dosyaların boşaltılmasını önlemek istediğini tahmin ediyorum. Bu satır , dökülemeyen ikili dosyaların izlenebilir olmaması gerektiğini göstermektedir.

Yani ilk bakışta çekirdeğin güvenlikle ilgili sonuçları olan bir hata buldunuz. Ama ben çekirdek geliştiricisi değilim, bu yüzden kesin olarak söyleyemem. Ben LKML sormak istiyorum.

Düzenleme: hata ayıklama ile ilgili olarak, bir başka bulgu, yorumlarda orijinal yazıya bahsedilen - hızlı izlemeden (tekrar) bana göre, gdb izlenen ikili dosyaları kullanır ve /proc/<pid>/mem. Çalışan ikili dosya okunamıyorsa cat /proc/<pid>/memgeri döner EPERM. İkili okunabilirse, geri döner EIO. (Bunu birkaç güvenlik yaması çalıştıran Ubuntu 14.10'da test ettik, bu yüzden vanilya çekirdeğinden farklı olabilir. Yine kullanışlı bir yerde çalışan vanilya çekirdeğim yok :()

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.