mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/euid-ruid-suid.md'
This commit is contained in:
parent
de839f09e4
commit
e9622567dd
@ -7,7 +7,7 @@
|
||||
|
||||
- **`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, SetUID ikili yürütmesi gibi durumlar dışında, burada `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 yeniden kazanır.
|
||||
- **`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.
|
||||
|
||||
#### Önemli Not
|
||||
|
||||
@ -15,12 +15,12 @@ Root altında çalışmayan bir süreç yalnızca `euid`'sini mevcut `ruid`, `eu
|
||||
|
||||
### set\*uid Fonksiyonlarını Anlamak
|
||||
|
||||
- **`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`'yi belirtilen kullanıcı ile, genellikle root ile eşleştirir ve bu ID'leri `suid`'nin geçersiz kılması nedeniyle sağlamlaştırır. Ayrıntılı bilgiler [setuid man sayfasında](https://man7.org/linux/man-pages/man2/setuid.2.html) 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](https://man7.org/linux/man-pages/man2/setresuid.2.html) ve [setreuid man sayfasında](https://man7.org/linux/man-pages/man2/setreuid.2.html) bulunabilir.
|
||||
- **`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`'yi belirtilen kullanıcı ile, genellikle root ile eşleştirir, bu da bu kimlikleri `suid`'nin geçersiz kılması nedeniyle sağlamlaştırır. Ayrıntılı bilgiler [setuid man sayfasında](https://man7.org/linux/man-pages/man2/setuid.2.html) 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şılık, root süreçleri veya `CAP_SETUID` yeteneğine sahip olanlar bu kimliklere keyfi değerler atayabilir. Daha fazla bilgi [setresuid man sayfasında](https://man7.org/linux/man-pages/man2/setresuid.2.html) ve [setreuid man sayfasında](https://man7.org/linux/man-pages/man2/setreuid.2.html) 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), bu fonksiyonlar arasındaki farkları ayırt etmek, farklı senaryolarda kullanıcı kimliği davranışlarını anlamak ve manipüle etmek için kritik öneme sahiptir.
|
||||
Özellikle, `setuid` root'a ayrıcalık yükseltmek için yaygın bir yöntem olabilir (çünkü tüm kimlikleri root ile eşleştirir), ancak bu fonksiyonlar arasındaki farkları ayırt etmek, farklı senaryolarda kullanıcı kimliği davranışlarını anlamak ve manipüle etmek için kritik öneme sahiptir.
|
||||
|
||||
### Linux'ta Program Yürütme Mekanizmaları
|
||||
|
||||
@ -36,7 +36,7 @@ Bu işlevler, bir güvenlik mekanizması olarak değil, bir programın etkili ku
|
||||
|
||||
#### **`system` Fonksiyonu**
|
||||
|
||||
- **Fonksiyon**: `execve`'nin aksine, `system` bir çocuk süreç oluşturur ve o çocuk süreç içinde bir komutu yürütür.
|
||||
- **Fonksiyon**: `execve`'nin aksine, `system` bir çocuk süreç oluşturur ve bu çocuk süreç içinde bir komutu `fork` kullanarak yürütür.
|
||||
- **Komut Yürütme**: Komutu `sh` aracılığıyla `execl("/bin/sh", "sh", "-c", command, (char *) NULL);` ile yürütür.
|
||||
- **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](https://man7.org/linux/man-pages/man3/system.3.html) bulunabilir.
|
||||
@ -47,21 +47,21 @@ Bu işlevler, bir güvenlik mekanizması olarak değil, bir programın etkili ku
|
||||
- `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 ayrıntı [`bash` man sayfasında](https://linux.die.net/man/1/bash) bulunabilir.
|
||||
- Daha fazla detay [`bash` man sayfasında](https://linux.die.net/man/1/bash) bulunabilir.
|
||||
- **`sh`**:
|
||||
- `bash`'deki `-p` seçeneğine benzer 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](https://man7.org/linux/man-pages/man1/sh.1p.html) bulunabilir.
|
||||
|
||||
Bu mekanizmalar, kullanıcı kimliklerinin nasıl yönetildiği ve korunduğu konusunda belirli nüanslarla programları yürütmek ve geçiş yapmak için çeşitli seçenekler sunar.
|
||||
Bu mekanizmalar, farklı işleyişleri ile programları yürütmek ve geçiş yapmak için çok çeşitli seçenekler sunar, kullanıcı kimliklerinin nasıl yönetildiği ve korunduğu konusunda belirli nüanslarla birlikte.
|
||||
|
||||
### Yürütmelerde Kullanıcı Kimliği Davranışlarını Test Etme
|
||||
|
||||
Ö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.
|
||||
|
||||
#### Durum 1: `system` ile `setuid` Kullanımı
|
||||
#### Durum 1: `setuid`'yi `system` ile Kullanma
|
||||
|
||||
**Amaç**: `setuid`'nin `system` ve `bash` ile `sh` kombinasyonundaki etkisini anlamak.
|
||||
**Amaç**: `setuid`'nin `system` ve `bash` ile `sh` olarak birleşimindeki etkisini anlamak.
|
||||
|
||||
**C Kodu**:
|
||||
```c
|
||||
@ -92,7 +92,7 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
|
||||
- `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.
|
||||
|
||||
#### Durum 2: setreuid ile system kullanma
|
||||
#### Durum 2: system ile setreuid kullanma
|
||||
|
||||
**C Kodu**:
|
||||
```c
|
||||
@ -141,7 +141,7 @@ uid=99(nobody) gid=99(nobody) euid=1000(frank) groups=99(nobody) context=system_
|
||||
```
|
||||
**Analiz:**
|
||||
|
||||
- `ruid` 99 olarak kalır, ancak euid 1000 olarak ayarlanır, setuid'nin etkisiyle uyumlu olarak.
|
||||
- `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ı):**
|
||||
```bash
|
||||
@ -163,9 +163,9 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
|
||||
```
|
||||
**Analiz:**
|
||||
|
||||
- `euid` `setuid` ile 1000 olarak ayarlanmış olmasına rağmen, `bash` `-p` eksikliği nedeniyle `euid`'yi `ruid`'ye (99) sıfırlar.
|
||||
- `euid` 1000 olarak `setuid` ile ayarlanmış olmasına rağmen, `bash` `-p` eksikliği nedeniyle `euid`'yi `ruid` (99) olarak sıfırlar.
|
||||
|
||||
**C Kod Örneği 3 (bash -p Kullanarak):**
|
||||
**C Kodu Örneği 3 (bash -p Kullanarak):**
|
||||
```bash
|
||||
#define _GNU_SOURCE
|
||||
#include <stdlib.h>
|
||||
|
Loading…
x
Reference in New Issue
Block a user