mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-17 06:28:27 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
cbb73722b6
commit
3cd37ee850
1 changed files with 129 additions and 92 deletions
|
@ -9,7 +9,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||
|
||||
</details>
|
||||
|
@ -18,7 +18,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące dane**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje do sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
|
@ -30,13 +30,11 @@ Możesz sprawdzić ich stronę internetową i wypróbować ich silnik **za darmo
|
|||
|
||||
## Analiza Statyczna
|
||||
|
||||
### otool
|
||||
### otool & objdump & nm
|
||||
```bash
|
||||
otool -L /bin/ls #List dynamically linked libraries
|
||||
otool -tv /bin/ps #Decompile application
|
||||
```
|
||||
### objdump
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
|
||||
|
@ -47,10 +45,21 @@ objdump -d /bin/ls # Dissasemble the binary
|
|||
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
|
||||
```
|
||||
{% endcode %}
|
||||
```bash
|
||||
nm -m ./tccd # List of symbols
|
||||
```
|
||||
### jtool2 & Disarm
|
||||
|
||||
### jtool2
|
||||
|
||||
To narzędzie może być używane jako **zamiennik** dla **codesign**, **otool** i **objdump**, oraz oferuje kilka dodatkowych funkcji. [**Pobierz je tutaj**](http://www.newosxbook.com/tools/jtool.html) lub zainstaluj za pomocą `brew`.
|
||||
Możesz [**pobrać disarm stąd**](https://newosxbook.com/tools/disarm.html).
|
||||
```bash
|
||||
ARCH=arm64e disarm -c -i -I --signature /path/bin # Get bin info and signature
|
||||
ARCH=arm64e disarm -c -l /path/bin # Get binary sections
|
||||
ARCH=arm64e disarm -c -L /path/bin # Get binary commands (dependencies included)
|
||||
ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...)
|
||||
ARCH=arm64e disarm -c -d /path/bin # Get disasembled
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info
|
||||
```
|
||||
Możesz [**pobrać jtool2 tutaj**](http://www.newosxbook.com/tools/jtool.html) lub zainstalować za pomocą `brew`.
|
||||
```bash
|
||||
# Install
|
||||
brew install --cask jtool2
|
||||
|
@ -67,10 +76,14 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
|
|||
# Get MIG information
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
**jtool jest przestarzały na rzecz disarm**
|
||||
{% endhint %}
|
||||
|
||||
### Codesign / ldid
|
||||
|
||||
{% hint style="danger" %}
|
||||
**`Codesign`** można znaleźć w systemie **macOS**, podczas gdy **`ldid`** można znaleźć w systemie **iOS**
|
||||
{% hint style="success" %}
|
||||
**`Codesign`** można znaleźć w **macOS**, podczas gdy **`ldid`** można znaleźć w **iOS**
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Get signer
|
||||
|
@ -100,43 +113,48 @@ ldid -S/tmp/entl.xml <binary>
|
|||
```
|
||||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) to narzędzie przydatne do inspekcji plików **.pkg** (instalatory) i zobaczenia, co znajduje się w środku przed ich zainstalowaniem.\
|
||||
Te instalatory mają skrypty bash `preinstall` i `postinstall`, których złośliwi autorzy zwykle nadużywają do **utrwalania** **złośliwego oprogramowania**.
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) to narzędzie przydatne do inspekcji plików **.pkg** (instalatorów) i zobaczenia, co znajduje się w środku przed ich zainstalowaniem.\
|
||||
Te instalatory mają skrypty bash `preinstall` i `postinstall`, których autorzy złośliwego oprogramowania zazwyczaj nadużywają do **utrwalania** **złośliwego** **oprogramowania**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
To narzędzie pozwala na **zamontowanie** obrazów dysków Apple (**.dmg**) do inspekcji przed uruchomieniem cokolwiek:
|
||||
To narzędzie pozwala na **montowanie** obrazów dysków Apple (**.dmg**) do inspekcji przed uruchomieniem cokolwiek:
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
Zostanie zamontowany w `/Volumes`
|
||||
|
||||
### Objective-C
|
||||
### Spakowane binaria
|
||||
|
||||
#### Metadane
|
||||
* Sprawdź wysoką entropię
|
||||
* Sprawdź ciągi znaków (jeśli nie ma praktycznie żadnych zrozumiałych ciągów, spakowane)
|
||||
* Packer UPX dla systemu MacOS generuje sekcję o nazwie "\_\_XHDR"
|
||||
|
||||
## Statyczna analiza Objective-C
|
||||
|
||||
### Metadane
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że programy napisane w Objective-C **zachowują** swoje deklaracje klas **podczas** **kompilacji** do [binarnych plików Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takie deklaracje klas **obejmują** nazwę i typ:
|
||||
Zauważ, że programy napisane w Objective-C **zachowują** swoje deklaracje klas **po** **skompilowaniu** do [binariów Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takie deklaracje klas **obejmują** nazwę i typ:
|
||||
{% endhint %}
|
||||
|
||||
* Klasę
|
||||
* Metody klasy
|
||||
* Zmienne instancji klasy
|
||||
* Zdefiniowane interfejsy
|
||||
* Metody interfejsu
|
||||
* Zmienne instancji interfejsu
|
||||
* Zdefiniowane protokoły
|
||||
|
||||
Możesz uzyskać te informacje za pomocą [**class-dump**](https://github.com/nygard/class-dump):
|
||||
```bash
|
||||
class-dump Kindle.app
|
||||
```
|
||||
#### Wywoływanie funkcji
|
||||
Zauważ, że te nazwy mogą być zaciemnione, aby utrudnić odwracanie binariów.
|
||||
|
||||
Kiedy funkcja jest wywoływana w binarnym pliku używającym Objective-C, skompilowany kod zamiast wywoływać tę funkcję, będzie wywoływał **`objc_msgSend`**. Która z kolei wywołuje ostateczną funkcję:
|
||||
### Wywołanie funkcji
|
||||
|
||||
Gdy funkcja jest wywoływana w binariach używających Objective-C, skompilowany kod zamiast wywoływać tę funkcję, będzie wywoływał **`objc_msgSend`**. Która wywoła ostateczną funkcję:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Parametry, których ta funkcja oczekuje, to:
|
||||
|
||||
* Pierwszy parametr (**self**) to "wskaźnik wskazujący na **instancję klasy, która ma otrzymać wiadomość**". Innymi słowy, jest to obiekt, na którym wywoływana jest metoda. Jeśli metoda jest metodą klasy, będzie to instancja obiektu klasy (całość), podczas gdy dla metody instancji self wskaże zainicjowaną instancję klasy jako obiekt.
|
||||
* Drugi parametr, (**op**), to "selektor metody obsługującej wiadomość". Prościej mówiąc, jest to **nazwa metody**.
|
||||
* Pierwszy parametr (**self**) to "wskaźnik wskazujący na **instancję klasy, która ma otrzymać wiadomość**". Innymi słowy, jest to obiekt, na którym wywoływana jest metoda. Jeśli metoda jest metodą klasy, będzie to instancja obiektu klasy (całość), podczas gdy dla metody instancji self wskaże zainstalowaną instancję klasy jako obiekt.
|
||||
* Drugi parametr, (**op**), to "selektor metody obsługującej wiadomość". Ponownie, w prostych słowach, jest to po prostu **nazwa metody**.
|
||||
* Pozostałe parametry to wszelkie **wartości wymagane przez metodę** (op).
|
||||
|
||||
Zobacz, jak **łatwo uzyskać te informacje za pomocą `lldb` w ARM64** na tej stronie:
|
||||
|
@ -148,24 +166,51 @@ Zobacz, jak **łatwo uzyskać te informacje za pomocą `lldb` w ARM64** na tej s
|
|||
x64:
|
||||
|
||||
| **Argument** | **Rejestr** | **(dla) objc\_msgSend** |
|
||||
| ----------------- | -------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **1. argument** | **rdi** | **self: obiekt, na którym wywoływana jest metoda** |
|
||||
| **2. argument** | **rsi** | **op: nazwa metody** |
|
||||
| **3. argument** | **rdx** | **1. argument metody** |
|
||||
| **4. argument** | **rcx** | **2. argument metody** |
|
||||
| **5. argument** | **r8** | **3. argument metody** |
|
||||
| **6. argument** | **r9** | **4. argument metody** |
|
||||
| **7. i kolejne** | <p><strong>rsp+</strong><br><strong>(na stosie)</strong></p> | **5. i kolejne argumenty metody** |
|
||||
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **1. argument** | **rdi** | **self: obiekt, na którym wywoływana jest metoda** |
|
||||
| **2. argument** | **rsi** | **op: nazwa metody** |
|
||||
| **3. argument** | **rdx** | **1. argument metody** |
|
||||
| **4. argument** | **rcx** | **2. argument metody** |
|
||||
| **5. argument** | **r8** | **3. argument metody** |
|
||||
| **6. argument** | **r9** | **4. argument metody** |
|
||||
| **7. i więcej argument** | <p><strong>rsp+</strong><br><strong>(na stosie)</strong></p> | **5. i więcej argument metody** |
|
||||
|
||||
### Zrzut metadanych ObjectiveC
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) to narzędzie do uzyskiwania klas Objc z dylibów.
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) to narzędzie do wydobywania klas z binariów Objective-C. Repozytorium na githubie określa dyliby, ale działa również z plikami wykonywalnymi.
|
||||
```bash
|
||||
./dynadump dump /path/to/bin
|
||||
```
|
||||
W chwili pisania, to **obecnie działa najlepiej**.
|
||||
|
||||
### Swift
|
||||
#### Regularne narzędzia
|
||||
```bash
|
||||
nm --dyldinfo-only /path/to/bin
|
||||
otool -ov /path/to/bin
|
||||
objdump --macho --objc-meta-data /path/to/bin
|
||||
```
|
||||
#### class-dump
|
||||
|
||||
W przypadku binarnych plików Swift, ze względu na kompatybilność z Objective-C, czasami można wyodrębnić deklaracje za pomocą [class-dump](https://github.com/nygard/class-dump/), ale nie zawsze.
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) to oryginalne narzędzie generujące deklaracje klas, kategorii i protokołów w kodzie sformatowanym w ObjetiveC.
|
||||
|
||||
Z poleceniami **`jtool -l`** lub **`otool -l`** można znaleźć kilka sekcji z prefiksem **`__swift5`**:
|
||||
Jest to stare i nieaktualizowane, więc prawdopodobnie nie będzie działać poprawnie.
|
||||
|
||||
#### ICDump
|
||||
|
||||
[**iCDump**](https://github.com/romainthomas/iCDump) to nowoczesne i wieloplatformowe narzędzie do wydobywania klas Objective-C. W porównaniu do istniejących narzędzi, iCDump może działać niezależnie od ekosystemu Apple i udostępnia wiązania Pythona.
|
||||
```python
|
||||
import icdump
|
||||
metadata = icdump.objc.parse("/path/to/bin")
|
||||
|
||||
print(metadata.to_decl())
|
||||
```
|
||||
## Statyczna analiza Swift
|
||||
|
||||
W przypadku binarnych plików Swift, ponieważ istnieje kompatybilność z Objective-C, czasami można wyodrębnić deklaracje za pomocą [class-dump](https://github.com/nygard/class-dump/), ale nie zawsze.
|
||||
|
||||
Za pomocą poleceń **`jtool -l`** lub **`otool -l`** można znaleźć kilka sekcji z prefiksem **`__swift5`**:
|
||||
```bash
|
||||
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
|
||||
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
|
||||
|
@ -179,7 +224,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
|||
```
|
||||
Możesz znaleźć dalsze informacje na temat [**informacji przechowywanych w tych sekcjach w tym wpisie na blogu**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
|
||||
|
||||
Co więcej, **binaria Swift mogą mieć symbole** (na przykład biblioteki muszą przechowywać symbole, aby ich funkcje mogły być wywoływane). **Symbole zwykle zawierają informacje o nazwie funkcji** i atrybutach w niezgrabny sposób, dlatego są bardzo przydatne, a istnieją **"demanglery"**, które mogą odzyskać oryginalną nazwę:
|
||||
Ponadto, **binaria Swifta mogą mieć symbole** (na przykład biblioteki muszą przechowywać symbole, aby można było wywołać ich funkcje). **Symbole zazwyczaj zawierają informacje o nazwie funkcji** i atrybutach w nieczytelny sposób, dlatego są bardzo przydatne, a istnieją **"demanglery"**, które mogą odzyskać oryginalną nazwę:
|
||||
```bash
|
||||
# Ghidra plugin
|
||||
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
||||
|
@ -187,30 +232,24 @@ https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
|||
# Swift cli
|
||||
swift demangle
|
||||
```
|
||||
### Pliki spakowane
|
||||
|
||||
* Sprawdź wysoką entropię
|
||||
* Sprawdź ciągi znaków (jeśli nie ma praktycznie żadnych zrozumiałych ciągów, to znaczy, że jest spakowany)
|
||||
* Packer UPX dla systemu MacOS generuje sekcję o nazwie "\_\_XHDR"
|
||||
|
||||
## Analiza dynamiczna
|
||||
|
||||
{% hint style="warning" %}
|
||||
Zauważ, że aby debugować pliki binarne, **SIP musi być wyłączone** (`csrutil disable` lub `csrutil enable --without debug`) lub skopiować pliki binarne do tymczasowego folderu i **usunąć podpis** za pomocą `codesign --remove-signature <ścieżka-do-binarnego>` lub zezwolić na debugowanie binarnego (możesz użyć [tego skryptu](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Zauważ, że aby debugować binaria, **SIP musi być wyłączone** (`csrutil disable` lub `csrutil enable --without debug`) lub skopiować binaria do tymczasowego folderu i **usunąć podpis** za pomocą `codesign --remove-signature <ścieżka-do-binaria>` lub zezwolić na debugowanie binariów (możesz skorzystać z [tego skryptu](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Zauważ, że aby **instrumentować binarne systemowe** (takie jak `cloudconfigurationd`) w macOS, **SIP musi być wyłączone** (tylko usunięcie podpisu nie zadziała).
|
||||
Zauważ, że aby **instrumentować binaria systemowe** (takie jak `cloudconfigurationd`) w macOS, **SIP musi być wyłączone** (tylko usunięcie podpisu nie zadziała).
|
||||
{% endhint %}
|
||||
|
||||
### API
|
||||
### Interfejsy programistyczne aplikacji (API)
|
||||
|
||||
macOS udostępnia kilka interesujących interfejsów API, które dostarczają informacje o procesach:
|
||||
macOS udostępnia kilka interesujących interfejsów programistycznych aplikacji, które dostarczają informacji na temat procesów:
|
||||
|
||||
* `proc_info`: To główne źródło informacji o każdym procesie. Aby uzyskać informacje o innych procesach, musisz być rootem, ale nie potrzebujesz specjalnych uprawnień ani portów mach.
|
||||
* `proc_info`: Jest to główny interfejs dostarczający wiele informacji o każdym procesie. Aby uzyskać informacje o innych procesach, musisz być rootem, ale nie potrzebujesz specjalnych uprawnień ani portów mach.
|
||||
* `libsysmon.dylib`: Pozwala uzyskać informacje o procesach za pomocą funkcji XPC, jednak konieczne jest posiadanie uprawnienia `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
### Stackshot i microstackshots
|
||||
|
||||
**Stackshotting** to technika używana do przechwytywania stanu procesów, w tym stosów wywołań wszystkich działających wątków. Jest to szczególnie przydatne do debugowania, analizy wydajności i zrozumienia zachowania systemu w określonym punkcie czasowym. W systemach iOS i macOS stackshotting można wykonać za pomocą kilku narzędzi i metod, takich jak narzędzia **`sample`** i **`spindump`**.
|
||||
|
||||
|
@ -226,17 +265,17 @@ Jego plist znajduje się w `/System/Library/LaunchDaemons/com.apple.sysdiagnose.
|
|||
* `com.apple.sysdiagnose.kernel.ipc`: Specjalny port 23 (jądro)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Interfejs trybu użytkownika za pomocą klasy `Libsysdiagnose` Obj-C. Można przekazać trzy argumenty w postaci słownika (`compress`, `display`, `run`)
|
||||
|
||||
### Unified Logs
|
||||
### Zjednoczone dzienniki
|
||||
|
||||
MacOS generuje wiele logów, które mogą być bardzo przydatne podczas uruchamiania aplikacji, próbując zrozumieć **co robi**.
|
||||
macOS generuje wiele dzienników, które mogą być bardzo przydatne podczas uruchamiania aplikacji, próbując zrozumieć **co robi**.
|
||||
|
||||
Co więcej, istnieją pewne logi, które będą zawierać tag `<private>`, aby **ukryć** pewne **identyfikujące użytkownika** lub **komputera** **informacje**. Jednak można **zainstalować certyfikat, aby ujawnić te informacje**. Postępuj zgodnie z wyjaśnieniami z [**tutaj**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
Co więcej, istnieją dzienniki, które będą zawierać tag `<private>` w celu **ukrycia** niektórych **identyfikowalnych** informacji **użytkownika** lub **komputera**. Jednak można **zainstalować certyfikat, aby ujawnić te informacje**. Postępuj zgodnie z wyjaśnieniami z [**tutaj**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
#### Lewy panel
|
||||
|
||||
W lewym panelu hoppera można zobaczyć symbole (**Etykiety**) binarnego, listę procedur i funkcji (**Proc**) oraz ciągi znaków (**Str**). Nie są to wszystkie ciągi, ale te zdefiniowane w kilku częściach pliku Mac-O (takich jak _cstring lub_ `objc_methname`).
|
||||
W lewym panelu hoppera można zobaczyć symbole (**Etykiety**) binariów, listę procedur i funkcji (**Proc**) oraz ciągi znaków (**Str**). Nie są to wszystkie ciągi znaków, ale te zdefiniowane w kilku częściach pliku Mac-O (takich jak _cstring lub_ `objc_methname`).
|
||||
|
||||
#### Środkowy panel
|
||||
|
||||
|
@ -256,14 +295,14 @@ W prawym panelu można zobaczyć interesujące informacje, takie jak **historia
|
|||
|
||||
### dtrace
|
||||
|
||||
Pozwala użytkownikom uzyskać dostęp do aplikacji na niezwykle **niskim poziomie** i zapewnia sposób śledzenia **programów** oraz nawet zmiany ich przepływu wykonania. Dtrace używa **sond**, które są **umieszczone w całym jądrze** i znajdują się na miejscach takich jak początek i koniec wywołań systemowych.
|
||||
Pozwala użytkownikom uzyskać dostęp do aplikacji na **bardzo niskim poziomie** i zapewnia sposób śledzenia **programów** oraz nawet zmiany ich przepływu wykonania. Dtrace używa **sond**, które są **umieszczone w całym jądrze** i znajdują się na miejscach takich jak początek i koniec wywołań systemowych.
|
||||
|
||||
DTrace używa funkcji **`dtrace_probe_create`** do utworzenia sondy dla każdego wywołania systemowego. Sondy te mogą być wyzwalane w **punkcie wejścia i wyjścia każdego wywołania systemowego**. Interakcja z DTrace odbywa się poprzez /dev/dtrace, który jest dostępny tylko dla użytkownika roota.
|
||||
|
||||
{% hint style="success" %}
|
||||
Aby włączyć Dtrace bez pełnego wyłączenia ochrony SIP, możesz wykonać w trybie odzyskiwania: `csrutil enable --without dtrace`
|
||||
Aby włączyć Dtrace bez pełnego wyłączania ochrony SIP, możesz wykonać w trybie odzyskiwania: `csrutil enable --without dtrace`
|
||||
|
||||
Możesz również **`dtrace`** lub **`dtruss`** binarne, **które skompilowałeś**.
|
||||
Możesz również **`dtrace`** lub **`dtruss`** binaria, **które skompilowałeś**.
|
||||
{% endhint %}
|
||||
|
||||
Dostępne sondy dtrace można uzyskać za pomocą:
|
||||
|
@ -276,7 +315,7 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
43 profile profile-97
|
||||
44 profile profile-199
|
||||
```
|
||||
Nazwa sondy składa się z czterech części: dostawcy, modułu, funkcji i nazwy (`fbt:mach_kernel:ptrace:entry`). Jeśli nie określisz jakiejś części nazwy, DTrace potraktuje ją jako symbol wieloznaczny.
|
||||
Nazwa sondy składa się z czterech części: dostawcy, modułu, funkcji i nazwy (`fbt:mach_kernel:ptrace:entry`). Jeśli nie określisz części nazwy, Dtrace potraktuje tę część jako symbol wieloznaczny.
|
||||
|
||||
Aby skonfigurować DTrace do aktywowania sond i określenia działań do wykonania po ich wyzwoleniu, będziemy musieli użyć języka D.
|
||||
|
||||
|
@ -336,11 +375,11 @@ dtruss -c -p 1000 #get syscalls of PID 1000
|
|||
```
|
||||
### kdebug
|
||||
|
||||
Jest to narzędzie śledzenia jądra. Udokumentowane kody można znaleźć w **`/usr/share/misc/trace.codes`**.
|
||||
Jest to narzędzie do śledzenia jądra. Udokumentowane kody można znaleźć w **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Narzędzia takie jak `latency`, `sc_usage`, `fs_usage` i `trace` używają go wewnętrznie.
|
||||
|
||||
Do interakcji z `kdebug` używane jest `sysctl` w przestrzeni nazw `kern.kdebug`, a MIBs do użycia można znaleźć w `sys/sysctl.h`, gdzie funkcje są zaimplementowane w `bsd/kern/kdebug.c`.
|
||||
Do interakcji z `kdebug` używa się `sysctl` w przestrzeni nazw `kern.kdebug`, a MIBs do użycia można znaleźć w `sys/sysctl.h`, gdzie funkcje są zaimplementowane w `bsd/kern/kdebug.c`.
|
||||
|
||||
Aby komunikować się z kdebug za pomocą niestandardowego klienta, zazwyczaj wykonuje się następujące kroki:
|
||||
|
||||
|
@ -362,21 +401,19 @@ API `ktrace_*` pochodzi z `libktrace.dylib`, które owijają te z `Kdebug`. Nast
|
|||
|
||||
Można go używać nawet z **SIP aktywowanym**.
|
||||
|
||||
Można użyć jako klientów narzędzie `ktrace`:
|
||||
Można użyć jako klientów narzędzia `ktrace`:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Or `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
To jest używane do profilowania na poziomie jądra i jest zbudowane przy użyciu wywołań `Kdebug`.
|
||||
|
||||
W zasadzie, globalna zmienna `kernel_debug_active` jest sprawdzana i jeśli jest ustawiona, wywołuje `kperf_kdebug_handler` z kodem `Kdebug` i adresem ramki jądra wywołującej. Jeśli kod `Kdebug` pasuje do wybranego, uzyskuje "akcje" skonfigurowane jako mapa bitowa (sprawdź `osfmk/kperf/action.h` w opcjach).
|
||||
W zasadzie, sprawdzana jest globalna zmienna `kernel_debug_active` i jeśli jest ustawiona, wywoływana jest funkcja `kperf_kdebug_handler` z kodem `Kdebug` i adresem ramki jądra wywołującej. Jeśli kod `Kdebug` pasuje do wybranego, pobierane są "akcje" skonfigurowane jako mapa bitowa (sprawdź `osfmk/kperf/action.h` w celu uzyskania opcji).
|
||||
|
||||
Kperf ma również tabelę MIB sysctl: (jako root) `sysctl kperf`. Ten kod można znaleźć w `osfmk/kperf/kperfbsd.c`.
|
||||
Kperf ma również tabelę MIB sysctl: (jako root) `sysctl kperf`. Kod ten można znaleźć w `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Co więcej, podzbiór funkcji Kperf znajduje się w `kpc`, który dostarcza informacje o licznikach wydajności maszyny.
|
||||
Co więcej, podzbiór funkcjonalności Kperf znajduje się w `kpc`, który dostarcza informacje o licznikach wydajności maszyny.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
|
@ -395,7 +432,7 @@ Musisz monitorować swój Mac za pomocą polecenia takiego jak **`sudo eslogger
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) to narzędzie GUI z wyglądem, który użytkownicy Windows mogą znać z _Procmon_ firmy Microsoft Sysinternal. Narzędzie to pozwala rozpocząć i zatrzymać nagrywanie różnych typów zdarzeń, umożliwia filtrowanie tych zdarzeń według kategorii, takich jak plik, proces, sieć, itp., oraz zapewnia funkcjonalność zapisywania zarejestrowanych zdarzeń w formacie json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) to narzędzie GUI z wyglądem i funkcjonalnością, które użytkownicy Windows mogą znać z _Procmon_ firmy Microsoft Sysinternal. Narzędzie to pozwala na rozpoczęcie i zatrzymanie nagrywania różnych typów zdarzeń, umożliwia filtrowanie tych zdarzeń według kategorii, takich jak plik, proces, sieć, itp., oraz zapewnia funkcjonalność zapisywania zarejestrowanych zdarzeń w formacie json.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
|
@ -412,12 +449,12 @@ fs_usage -w -f network curl #This tracks network actions
|
|||
```
|
||||
### TaskExplorer
|
||||
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) jest przydatny do zobaczenia **bibliotek** używanych przez plik binarny, **plików**, z którymi się komunikuje oraz **połączeń sieciowych**.\
|
||||
Sprawdza również procesy binarne pod kątem **virustotal** i wyświetla informacje o pliku binarnym.
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) jest przydatny do sprawdzania **bibliotek** używanych przez plik binarny, **plików**, z którymi się komunikuje oraz połączeń **sieciowych**.\
|
||||
Sprawdza również procesy binarne w stosunku do **virustotal** i wyświetla informacje o pliku binarnym.
|
||||
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
||||
W [**tym wpisie na blogu**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) znajdziesz przykład **debugowania działającego demona**, który używa **`PT_DENY_ATTACH`** do uniemożliwienia debugowania, nawet jeśli SIP jest wyłączone.
|
||||
W [**tym wpisie na blogu**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) znajdziesz przykład, jak **debugować działające demony**, które używają **`PT_DENY_ATTACH`** do uniemożliwienia debugowania, nawet jeśli SIP jest wyłączone.
|
||||
|
||||
### lldb
|
||||
|
||||
|
@ -428,7 +465,7 @@ lldb -p 1122
|
|||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
Możesz ustawić wersję intel podczas korzystania z lldb, tworząc plik o nazwie **`.lldbinit`** w swoim folderze domowym z następującą linijką:
|
||||
Możesz ustawić wersję intel podczas korzystania z lldb, tworząc plik o nazwie **`.lldbinit`** w swoim folderze domowym i dodając następującą linijkę:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
|
@ -436,7 +473,7 @@ settings set target.x86-disassembly-flavor intel
|
|||
Wewnątrz lldb, zrzuć proces za pomocą `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Polecenie</strong></td><td><strong>Opis</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Rozpoczęcie wykonania, które będzie kontynuowane do momentu trafienia w punkt przerwania lub zakończenia procesu.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kontynuacja wykonania procesu w trybie debugowania.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Wykonaj następną instrukcję. To polecenie pomija wywołania funkcji.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Wykonaj następną instrukcję. W przeciwieństwie do polecenia nexti, to polecenie wchodzi w wywołania funkcji.</td></tr><tr><td><strong>finish (f)</strong></td><td>Wykonaj resztę instrukcji w bieżącej funkcji ("ramce") i zatrzymaj.</td></tr><tr><td><strong>control + c</strong></td><td>Wstrzymaj wykonanie. Jeśli proces został uruchomiony (r) lub kontynuowany (c), spowoduje to zatrzymanie procesu ...gdziekolwiek jest obecnie wykonywany.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Dowolna funkcja o nazwie main</p><p>b <binname>`main #Główna funkcja pliku binarnego</p><p>b set -n main --shlib <lib_name> #Główna funkcja wskazanego pliku binarnego</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista punktów przerwań</p><p>br e/dis <num> #Włącz/Wyłącz punkt przerwania</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Uzyskaj pomoc dotyczącą polecenia punktu przerwania</p><p>help memory write #Uzyskaj pomoc dotyczącą zapisu do pamięci</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address</strong></td><td>Wyświetl pamięć jako łańcuch zakończony znakiem null.</td></tr><tr><td><strong>x/i <reg/memory address</strong></td><td>Wyświetl pamięć jako instrukcję asemblerową.</td></tr><tr><td><strong>x/b <reg/memory address</strong></td><td>Wyświetl pamięć jako bajt.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>To polecenie wyświetli obiekt wskazywany przez parametr</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Zauważ, że większość interfejsów API Objective-C firmy Apple zwraca obiekty i powinny być wyświetlane za pomocą polecenia "print object" (po). Jeśli po nie daje sensownego wyniku, użyj <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Zapisz AAAA pod tym adresem<br>memory write -f s $rip+0x11f+7 "AAAA" #Zapisz AAAA pod adresem</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Rozkład bieżącej funkcji</p><p>dis -n <funcname> #Rozkład funkcji</p><p>dis -n <funcname> -b <basename> #Rozkład funkcji<br>dis -c 6 #Rozkład 6 linii<br>dis -c 0x100003764 -e 0x100003768 # Od jednego adresu do drugiego<br>dis -p -c 4 # Rozpocznij rozkładanie w bieżącym adresie</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Sprawdź tablicę 3 komponentów w rejestrze x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Polecenie</strong></td><td><strong>Opis</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Rozpoczęcie wykonania, które będzie kontynuowane do momentu trafienia w punkt przerwania lub zakończenia procesu.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kontynuacja wykonania procesu w trybie debugowania.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Wykonaj następną instrukcję. To polecenie pomija wywołania funkcji.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Wykonaj następną instrukcję. W przeciwieństwie do polecenia nexti, to polecenie wchodzi w wywołania funkcji.</td></tr><tr><td><strong>finish (f)</strong></td><td>Wykonaj resztę instrukcji w bieżącej funkcji ("ramce") i zatrzymaj.</td></tr><tr><td><strong>control + c</strong></td><td>Wstrzymaj wykonanie. Jeśli proces został uruchomiony (r) lub kontynuowany (c), spowoduje to zatrzymanie procesu ...gdziekolwiek jest obecnie wykonywany.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Dowolna funkcja o nazwie main</p><p>b <binname>`main #Główna funkcja pliku binarnego</p><p>b set -n main --shlib <lib_name> #Główna funkcja wskazanego pliku binarnego</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista punktów przerwania</p><p>br e/dis <num> #Włącz/Wyłącz punkt przerwania</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Uzyskaj pomoc dotyczącą polecenia punktu przerwania</p><p>help memory write #Uzyskaj pomoc dotyczącą zapisu do pamięci</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address</strong></td><td>Wyświetl pamięć jako łańcuch zakończony znakiem null.</td></tr><tr><td><strong>x/i <reg/memory address</strong></td><td>Wyświetl pamięć jako instrukcję asemblerową.</td></tr><tr><td><strong>x/b <reg/memory address</strong></td><td>Wyświetl pamięć jako bajt.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>To polecenie wyświetli obiekt wskazywany przez parametr</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Zauważ, że większość interfejsów API Objective-C firmy Apple zwraca obiekty i powinny być wyświetlane za pomocą polecenia "print object" (po). Jeśli po nie generuje sensownego wyniku, użyj <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Zapisz AAAA pod tym adresem<br>memory write -f s $rip+0x11f+7 "AAAA" #Zapisz AAAA pod adresem</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Rozkład bieżącej funkcji</p><p>dis -n <funcname> #Rozkład funkcji</p><p>dis -n <funcname> -b <basename> #Rozkład funkcji<br>dis -c 6 #Rozkład 6 linii<br>dis -c 0x100003764 -e 0x100003768 # Od jednego adresu do drugiego<br>dis -p -c 4 # Rozpocznij rozkładanie w bieżącym adresie</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Sprawdź tablicę 3 komponentów w rejestrze x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Podczas wywoływania funkcji **`objc_sendMsg`**, rejestr **rsi** przechowuje **nazwę metody** jako łańcuch zakończony znakiem null ("C"). Aby wyświetlić nazwę za pomocą lldb, wykonaj:
|
||||
|
@ -455,20 +492,20 @@ Podczas wywoływania funkcji **`objc_sendMsg`**, rejestr **rsi** przechowuje **n
|
|||
|
||||
* Polecenie **`sysctl hw.model`** zwraca "Mac", gdy **hostem jest MacOS**, ale coś innego, gdy jest to maszyna wirtualna.
|
||||
* Grając z wartościami **`hw.logicalcpu`** i **`hw.physicalcpu`**, niektóre złośliwe oprogramowanie próbuje wykryć, czy jest to maszyna wirtualna.
|
||||
* Niektóre złośliwe oprogramowanie może również **wykryć**, czy maszyna jest oparta na **VMware**, na podstawie adresu MAC (00:50:56).
|
||||
* Niektóre złośliwe oprogramowanie może również **wykryć**, czy maszyna jest oparta na **VMware** na podstawie adresu MAC (00:50:56).
|
||||
* Można również sprawdzić, czy proces jest debugowany za pomocą prostego kodu takiego jak:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proces jest debugowany }`
|
||||
* Można również wywołać wywołanie systemowe **`ptrace`** z flagą **`PT_DENY_ATTACH`**. To **uniemożliwia** dołączenie i śledzenie przez debugera.
|
||||
* Można również wywołać wywołanie systemowe **`ptrace`** z flagą **`PT_DENY_ATTACH`**. Opcja ta **uniemożliwia** dołączenie i śledzenie przez debugera.
|
||||
* Można sprawdzić, czy funkcja **`sysctl`** lub **`ptrace`** jest **importowana** (ale złośliwe oprogramowanie mogłoby importować je dynamicznie)
|
||||
* Jak zauważono w tym artykule, „[Pokonanie Technik Anty-Debugowania: macOS warianty ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
„_Wiadomość Proces # zakończony ze **statusem = 45 (0x0000002d)** jest zazwyczaj wyraźnym sygnałem, że cel debugowania używa **PT\_DENY\_ATTACH**_”
|
||||
„_Wiadomość Proces # zakończony z **status = 45 (0x0000002d)** jest zwykle wyraźnym sygnałem, że docelowy obiekt debugowany używa **PT\_DENY\_ATTACH**_”
|
||||
## Zrzuty pamięci
|
||||
|
||||
Zrzuty pamięci są tworzone, jeśli:
|
||||
|
||||
- sysctl `kern.coredump` jest ustawiony na 1 (domyślnie)
|
||||
- Jeśli proces nie był suid/sgid lub `kern.sugid_coredump` jest ustawione na 1 (domyślnie jest 0)
|
||||
- Limit `AS_CORE` pozwala na operację. Można zablokować tworzenie zrzutów pamięci, wykonując polecenie `ulimit -c 0`, a następnie ponownie włączyć je za pomocą `ulimit -c unlimited`.
|
||||
- Limit `AS_CORE` pozwala na operację. Można zablokować tworzenie zrzutów pamięci, wykonując `ulimit -c 0`, a następnie ponownie włączyć je za pomocą `ulimit -c unlimited`.
|
||||
|
||||
W tych przypadkach zrzuty pamięci są generowane zgodnie z sysctl `kern.corefile` i zazwyczaj przechowywane są w `/cores/core/.%P`.
|
||||
|
||||
|
@ -477,8 +514,8 @@ W tych przypadkach zrzuty pamięci są generowane zgodnie z sysctl `kern.corefil
|
|||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **analizuje procesy, które uległy awarii i zapisuje raport o awarii na dysku**. Raport o awarii zawiera informacje, które mogą **pomóc programiście zdiagnozować** przyczynę awarii.\
|
||||
Dla aplikacji i innych procesów **uruchamianych w kontekście uruchamiania per użytkownika**, ReportCrash działa jako LaunchAgent i zapisuje raporty o awariach w `~/Library/Logs/DiagnosticReports/` użytkownika.\
|
||||
Dla demonów, innych procesów **uruchamianych w kontekście uruchamiania systemowego** oraz innych procesów uprzywilejowanych, ReportCrash działa jako LaunchDaemon i zapisuje raporty o awariach w `/Library/Logs/DiagnosticReports` systemu.
|
||||
Dla aplikacji i innych procesów **działających w kontekście uruchamiania per użytkownika**, ReportCrash działa jako LaunchAgent i zapisuje raporty o awariach w `~/Library/Logs/DiagnosticReports/` użytkownika.\
|
||||
Dla demonów, innych procesów **działających w kontekście uruchamiania systemowego** oraz innych uprzywilejowanych procesów, ReportCrash działa jako LaunchDaemon i zapisuje raporty o awariach w `/Library/Logs/DiagnosticReports` systemu.
|
||||
|
||||
Jeśli martwisz się o to, że raporty o awariach **są wysyłane do Apple**, możesz je wyłączyć. W przeciwnym razie raporty o awariach mogą być przydatne do **zrozumienia, jak doszło do awarii serwera**.
|
||||
```bash
|
||||
|
@ -492,15 +529,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
|
|||
```
|
||||
### Sen
|
||||
|
||||
Podczas fuzzowania w systemie MacOS ważne jest, aby nie pozwalać Macowi zasypiać:
|
||||
Podczas przeprowadzania fuzzingu w systemie MacOS ważne jest, aby nie pozwalać Macowi zasypiać:
|
||||
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, System Preferences
|
||||
* pmset, Preferencje systemowe
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
#### Rozłączenie SSH
|
||||
|
||||
Jeśli fuzzujesz poprzez połączenie SSH, ważne jest, aby upewnić się, że sesja nie wygaśnie. Zmodyfikuj plik sshd\_config:
|
||||
Jeśli przeprowadzasz fuzzing za pośrednictwem połączenia SSH, ważne jest, aby upewnić się, że sesja nie zostanie przerwana. Zmodyfikuj plik sshd\_config:
|
||||
|
||||
* TCPKeepAlive Yes
|
||||
* ClientAliveInterval 0
|
||||
|
@ -509,7 +546,7 @@ Jeśli fuzzujesz poprzez połączenie SSH, ważne jest, aby upewnić się, że s
|
|||
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
||||
```
|
||||
### Wewnętrzni Obsługujący
|
||||
### Wewnętrzne obsługiwane
|
||||
|
||||
**Sprawdź następującą stronę**, aby dowiedzieć się, jak można znaleźć, która aplikacja jest odpowiedzialna za **obsługę określonego schematu lub protokołu:**
|
||||
|
||||
|
@ -517,7 +554,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Wyliczanie Procesów Sieciowych
|
||||
### Wyliczanie procesów sieciowych
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -540,11 +577,11 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
|
|||
|
||||
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
Działa dla narzędzi CLI.
|
||||
Działa dla narzędzi CLI
|
||||
|
||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||
|
||||
To po prostu działa z narzędziami GUI macOS. Zauważ, że niektóre aplikacje macOS mają specyficzne wymagania, takie jak unikalne nazwy plików, odpowiednie rozszerzenie, konieczność odczytu plików z piaskownicy (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
To "**po prostu działa"** z narzędziami GUI macOS. Zauważ, że niektóre aplikacje macOS mają określone wymagania, takie jak unikalne nazwy plików, odpowiednie rozszerzenie, konieczność odczytu plików z piaskownicy (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Przykłady:
|
||||
```bash
|
||||
|
@ -572,7 +609,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Więcej informacji na temat Fuzzing MacOS
|
||||
### Więcej informacji o Fuzzing MacOS
|
||||
|
||||
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
||||
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
|
||||
|
@ -590,9 +627,9 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana **dark-webem**, która oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
[**WhiteIntel**](https://whiteintel.io) to wyszukiwarka zasilana przez **dark web**, która oferuje **darmowe** funkcje sprawdzania, czy firma lub jej klienci zostali **skompromitowani** przez **złośliwe oprogramowanie kradnące informacje**.
|
||||
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z oprogramowania kradnącego informacje.
|
||||
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
|
||||
|
||||
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik **za darmo** pod adresem:
|
||||
|
||||
|
@ -605,9 +642,9 @@ Możesz odwiedzić ich stronę internetową i wypróbować ich silnik **za darmo
|
|||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Add table
Reference in a new issue