euid, ruid, suid
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Mobil Güvenlik alanındaki uzmanlığınızı 8kSec Akademisi ile derinleştirin. Kendi hızınıza göre iOS ve Android güvenliğini öğrenin ve sertifika kazanın:
ruid
: gerçek kullanıcı kimliği, süreci başlatan kullanıcıyı belirtir.
euid
: etkili kullanıcı kimliği olarak bilinir, sistemin süreç ayrıcalıklarını belirlemek için kullandığı kullanıcı kimliğini temsil eder. Genel olarak, euid
ruid
ile aynıdır, ancak SetUID ikili yürütmesi gibi durumlarda euid
, dosya sahibinin kimliğini alır ve böylece belirli operasyonel izinler verir.
suid
: Bu kaydedilmiş kullanıcı kimliği, yüksek ayrıcalıklı bir sürecin (genellikle root olarak çalışan) belirli görevleri yerine getirmek için geçici olarak ayrıcalıklarını bırakması gerektiğinde kritik öneme sahiptir, daha sonra başlangıçtaki yükseltilmiş durumunu geri alır.
Root altında çalışmayan bir süreç yalnızca euid
'sini mevcut ruid
, euid
veya suid
ile eşleştirebilir.
setuid
: İlk varsayımların aksine, setuid
esasen ruid
yerine euid
'yi değiştirir. Özellikle, ayrıcalıklı süreçler için ruid
, euid
ve suid
belirtilen kullanıcı ile, genellikle root ile eşleştirilir ve bu ID'ler suid
ile geçersiz kılındığı için sağlamlaştırılır. Ayrıntılı bilgiler setuid man sayfasında bulunabilir.
setreuid
ve setresuid
: Bu fonksiyonlar ruid
, euid
ve suid
'nin ince ayarını yapmaya olanak tanır. Ancak, yetenekleri sürecin ayrıcalık seviyesine bağlıdır. Root olmayan süreçler için değişiklikler mevcut ruid
, euid
ve suid
değerleri ile sınırlıdır. Buna karşın, root süreçleri veya CAP_SETUID
yeteneğine sahip olanlar bu ID'lere keyfi değerler atayabilir. Daha fazla bilgi setresuid man sayfasında ve setreuid man sayfasında bulunabilir.
Bu işlevler, bir güvenlik mekanizması olarak değil, bir programın etkili kullanıcı kimliğini değiştirerek başka bir kullanıcının kimliğini benimsemesi gibi istenen operasyonel akışı kolaylaştırmak için tasarlanmıştır.
Özellikle, setuid
root'a ayrıcalık yükseltmek için yaygın bir yöntem olabilir (çünkü tüm ID'leri root ile eşleştirir), ancak bu fonksiyonlar arasındaki farkları anlamak ve kullanıcı kimliği davranışlarını farklı senaryolar içinde manipüle etmek için önemlidir.
execve
Sistem ÇağrısıFonksiyon: execve
, ilk argümanla belirlenen bir programı başlatır. İki dizi argümanı alır, argv
argümanlar için ve envp
ortam için.
Davranış: Çağıranın bellek alanını korur ancak yığın, yığın ve veri segmentlerini yeniler. Programın kodu yeni programla değiştirilir.
Kullanıcı Kimliği Koruma:
ruid
, euid
ve ek grup kimlikleri değişmeden kalır.
Yeni program SetUID bitini ayarlamışsa euid
'de ince değişiklikler olabilir.
suid
, yürütme sonrası euid
'den güncellenir.
Dokümantasyon: Ayrıntılı bilgi execve
man sayfasında bulunabilir.
system
FonksiyonuFonksiyon: execve
'nin aksine, system
bir çocuk süreç oluşturur ve o çocuk süreç içinde bir komutu execl
kullanarak yürütür.
Komut Yürütme: Komutu sh
aracılığıyla yürütür: execl("/bin/sh", "sh", "-c", command, (char *) NULL);
.
Davranış: execl
, execve
'nin bir biçimi olduğundan benzer şekilde çalışır ancak yeni bir çocuk süreç bağlamında.
Dokümantasyon: Daha fazla bilgi system
man sayfasında bulunabilir.
bash
ve sh
Davranışıbash
:
euid
ve ruid
'nin nasıl ele alındığını etkileyen bir -p
seçeneğine sahiptir.
-p
olmadan, bash
euid
'yi ruid
ile eşleştirir eğer başlangıçta farklılarsa.
-p
ile, başlangıçtaki euid
korunur.
Daha fazla detay bash
man sayfasında bulunabilir.
sh
:
bash
'deki -p
benzeri bir mekanizmaya sahip değildir.
Kullanıcı kimlikleri ile ilgili davranış açıkça belirtilmemiştir, yalnızca -i
seçeneği altında euid
ve ruid
eşitliğinin korunmasına vurgu yapılmaktadır.
Ek bilgi sh
man sayfasında bulunabilir.
Bu mekanizmalar, işleyişlerinde farklılık göstererek programları yürütmek ve geçiş yapmak için çok çeşitli seçenekler sunar ve kullanıcı kimliklerinin nasıl yönetildiği ve korunduğu konusunda belirli nüanslar içerir.
Örnekler https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail adresinden alınmıştır, daha fazla bilgi için kontrol edin.
setuid
ile system
KullanımıAmaç: setuid
'nin system
ve bash
ile birlikte etkisini anlamak.
C Kodu:
Derleme ve İzinler:
Analiz:
ruid
ve euid
başlangıçta sırasıyla 99 (nobody) ve 1000 (frank) olarak ayarlanır.
setuid
her ikisini de 1000'e hizalar.
system
, sh'den bash'e olan symlink nedeniyle /bin/bash -c id
komutunu çalıştırır.
bash
, -p
olmadan, euid
'yi ruid
ile eşleştirir, bu da her ikisinin de 99 (nobody) olmasına neden olur.
C Kodu:
Derleme ve İzinler:
İcra ve Sonuç:
Analiz:
setreuid
, hem ruid hem de euid'yi 1000 olarak ayarlar.
system
, kullanıcı kimliklerinin eşitliği nedeniyle bash'i çağırır ve bu da frank olarak etkili bir şekilde çalışır.
Amaç: setuid ve execve arasındaki etkileşimi keşfetmek.
İcra ve Sonuç:
Analiz:
ruid
99 olarak kalır, ancak euid 1000 olarak ayarlanır, setuid'nin etkisiyle uyumlu olarak.
C Kod Örneği 2 (Bash Çağrısı):
İcra ve Sonuç:
Analiz:
euid
1000 olarak setuid
ile ayarlanmış olmasına rağmen, bash
-p
eksikliği nedeniyle euid
'yi ruid
(99) olarak sıfırlar.
C Kodu Örneği 3 (bash -p Kullanarak):
İcra ve Sonuç:
Mobil Güvenlik konusundaki uzmanlığınızı 8kSec Akademisi ile derinleştirin. Kendi hızınızda ilerleyerek iOS ve Android güvenliğini öğrenin ve sertifika kazanın:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)