mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
70fae22572
commit
d1674fe732
1 changed files with 152 additions and 153 deletions
|
@ -1,16 +1,16 @@
|
|||
# macOS Aplikacije - Inspekcija, debugovanje i Faziranje
|
||||
# macOS Apps - Inspekcija, debagovanje i Fuzzing
|
||||
|
||||
{% hint style="success" %}
|
||||
Naučite i vežbajte AWS Hakovanje: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Crveni Tim Ekspert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Naučite i vežbajte GCP Hakovanje: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Crveni Tim Ekspert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Podržite HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -19,24 +19,24 @@ Naučite i vežbajte GCP Hakovanje: <img src="/.gitbook/assets/grte.png" alt=""
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) je pretraživač pokretan **dark-web**-om koji nudi **besplatne** funkcionalnosti za proveru da li je kompanija ili njeni korisnici **kompromitovani** od strane **malvera za krađu podataka**.
|
||||
[**WhiteIntel**](https://whiteintel.io) je **dark-web** pokretan pretraživač koji nudi **besplatne** funkcionalnosti za proveru da li je neka kompanija ili njeni klijenti **kompromitovani** od strane **stealer malvera**.
|
||||
|
||||
Njihov primarni cilj WhiteIntela je borba protiv preuzimanja naloga i napada ransomware-a koji proizilaze iz malvera za krađu informacija.
|
||||
Njihov primarni cilj je da se bore protiv preuzimanja naloga i ransomware napada koji proizilaze iz malvera koji krade informacije.
|
||||
|
||||
Možete posetiti njihovu veb stranicu i isprobati njihovu mašinu za **besplatno** na:
|
||||
Možete proveriti njihovu veb stranicu i isprobati njihov pretraživač **besplatno** na:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
***
|
||||
|
||||
## Statistička Analiza
|
||||
## Staticka analiza
|
||||
|
||||
### otool & objdump & nm
|
||||
```bash
|
||||
otool -L /bin/ls #List dynamically linked libraries
|
||||
otool -tv /bin/ps #Decompile application
|
||||
```
|
||||
{% код препун="wrap" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
|
||||
objdump -m -h /bin/ls # Get headers information
|
||||
|
@ -51,7 +51,7 @@ nm -m ./tccd # List of symbols
|
|||
```
|
||||
### jtool2 & Disarm
|
||||
|
||||
Možete [**preuzeti disarm odavde**](https://newosxbook.com/tools/disarm.html).
|
||||
Možete [**preuzeti disarm отсуда**](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
|
||||
|
@ -78,13 +78,13 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
|
|||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
**jtool je zastareo u korist disarm-a**
|
||||
**jtool je zastareo u korist disarm**
|
||||
{% endhint %}
|
||||
|
||||
### Codesign / ldid
|
||||
|
||||
{% hint style="success" %}
|
||||
**`Codesign`** se može pronaći u **macOS-u**, dok se **`ldid`** može pronaći u **iOS-u**
|
||||
**`Codesign`** se može naći u **macOS**, dok se **`ldid`** može naći u **iOS**
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Get signer
|
||||
|
@ -114,29 +114,29 @@ ldid -S/tmp/entl.xml <binary>
|
|||
```
|
||||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) je alat koristan za inspekciju **.pkg** fajlova (instalatera) i videti šta se nalazi unutra pre instaliranja.\
|
||||
Ovi instalateri imaju `preinstall` i `postinstall` bash skripte koje zlonamerni autori obično zloupotrebljavaju da bi **upornost** **zlonamernog softvera**.
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) је алат користан за инспекцију **.pkg** фајлова (инсталатера) и за преглед садржаја пре инсталирања.\
|
||||
Ови инсталатери имају `preinstall` и `postinstall` bash скрипте које аутори малвера обично злоупотребљавају да **одрже** **малвер**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
Ovaj alat omogućava da se **montiraju** Apple disk slike (**.dmg**) fajlovi radi inspekcije pre pokretanja bilo čega:
|
||||
Овај алат омогућава **монтирање** Apple слика дискова (**.dmg**) ради инспекције пре покретања било чега:
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
Biće montiran u `/Volumes`
|
||||
It will be mounted in `/Volumes`
|
||||
|
||||
### Pakovani binarni fajlovi
|
||||
### Packed binaries
|
||||
|
||||
* Provera visoke entropije
|
||||
* Provera stringova (da li postoji skoro nijedan razumljiv string, pakovan)
|
||||
* UPX paket za MacOS generiše sekciju nazvanu "\_\_XHDR"
|
||||
* Proverite visoku entropiju
|
||||
* Proverite stringove (ako gotovo da nema razumljivih stringova, pakovano)
|
||||
* UPX pakera za MacOS generiše sekciju pod nazivom "\_\_XHDR"
|
||||
|
||||
## Statička analiza Objective-C
|
||||
## Static Objective-C analysis
|
||||
|
||||
### Metapodaci
|
||||
### Metadata
|
||||
|
||||
{% hint style="danger" %}
|
||||
Imajte na umu da programi napisani u Objective-C **zadržavaju** svoje deklaracije klasa **kada** **se kompajliraju** u [Mach-O binarne fajlove](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takve deklaracije klasa **uključuju** ime i tip:
|
||||
Napomena da programi napisani u Objective-C **zadržavaju** svoje deklaracije klasa **kada** **se kompajluju** u [Mach-O binarne datoteke](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takve deklaracije klasa **uključuju** ime i tip:
|
||||
{% endhint %}
|
||||
|
||||
* Definisane interfejse
|
||||
|
@ -144,21 +144,21 @@ Imajte na umu da programi napisani u Objective-C **zadržavaju** svoje deklaraci
|
|||
* Instance varijable interfejsa
|
||||
* Definisane protokole
|
||||
|
||||
Imajte na umu da ova imena mogu biti zamućena kako bi se otežalo reverzno inženjerstvo binarnog fajla.
|
||||
Napomena da ova imena mogu biti obfuskovana kako bi se otežalo obrnuto inženjerstvo binarne datoteke.
|
||||
|
||||
### Pozivanje funkcija
|
||||
### Function calling
|
||||
|
||||
Kada se funkcija poziva u binarnom fajlu koji koristi Objective-C, kompajlirani kod umesto pozivanja te funkcije, pozvaće **`objc_msgSend`**. Što će pozvati konačnu funkciju:
|
||||
Kada se funkcija poziva u binarnoj datoteci koja koristi Objective-C, kompajlirani kod umesto pozivanja te funkcije, poziva **`objc_msgSend`**. Koji će pozvati konačnu funkciju:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Parametri koje ova funkcija očekuje su:
|
||||
|
||||
* Prvi parametar (**self**) je "pokazivač koji pokazuje na **instancu klase koja treba da primi poruku**". Jednostavnije rečeno, to je objekat na koji se poziva metoda. Ako je metoda klasna metoda, ovo će biti instanca objekta klase (u celini), dok će za instancu metodu, self će pokazivati na instanciranu instancu klase kao objekat.
|
||||
* Drugi parametar, (**op**), je "selektor metode koja obrađuje poruku". Ponovo, jednostavnije rečeno, ovo je samo **ime metode**.
|
||||
* Preostali parametri su bilo **vrednosti koje su potrebne metodi** (op).
|
||||
* Prvi parametar (**self**) je "pokazivač koji pokazuje na **instancu klase koja treba da primi poruku**". Ili jednostavnije rečeno, to je objekat na kojem se metoda poziva. Ako je metoda klasa metoda, ovo će biti instanca objekta klase (kao celina), dok će za instancu metodu, self pokazivati na instanciranu instancu klase kao objekat.
|
||||
* Drugi parametar, (**op**), je "selektor metode koja obrađuje poruku". Ponovo, jednostavnije rečeno, ovo je samo **ime metode.**
|
||||
* Preostali parametri su bilo koji **vrednosti koje su potrebne metodi** (op).
|
||||
|
||||
Pogledajte kako **lako dobiti ove informacije sa `lldb` u ARM64** na ovoj stranici:
|
||||
Pogledajte kako da **dobijete ove informacije lako sa `lldb` u ARM64** na ovoj stranici:
|
||||
|
||||
{% content-ref url="arm64-basic-assembly.md" %}
|
||||
[arm64-basic-assembly.md](arm64-basic-assembly.md)
|
||||
|
@ -166,25 +166,25 @@ Pogledajte kako **lako dobiti ove informacije sa `lldb` u ARM64** na ovoj strani
|
|||
|
||||
x64:
|
||||
|
||||
| **Argument** | **Registar** | **(za) objc\_msgSend** |
|
||||
| **Argument** | **Register** | **(za) objc\_msgSend** |
|
||||
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **1. argument** | **rdi** | **self: objekat na koji se poziva metoda** |
|
||||
| **2. argument** | **rsi** | **op: ime metode** |
|
||||
| **3. argument** | **rdx** | **1. argument metode** |
|
||||
| **4. argument** | **rcx** | **2. argument metode** |
|
||||
| **5. argument** | **r8** | **3. argument metode** |
|
||||
| **6. argument** | **r9** | **4. argument metode** |
|
||||
| **7. i više argumenata** | <p><strong>rsp+</strong><br><strong>(na steku)</strong></p> | **5. i više argumenata metode** |
|
||||
| **1st argument** | **rdi** | **self: objekat na kojem se metoda poziva** |
|
||||
| **2nd argument** | **rsi** | **op: ime metode** |
|
||||
| **3rd argument** | **rdx** | **1st argument to the method** |
|
||||
| **4th argument** | **rcx** | **2nd argument to the method** |
|
||||
| **5th argument** | **r8** | **3rd argument to the method** |
|
||||
| **6th argument** | **r9** | **4th argument to the method** |
|
||||
| **7th+ argument** | <p><strong>rsp+</strong><br><strong>(na steku)</strong></p> | **5th+ argument to the method** |
|
||||
|
||||
### Dumpovanje ObjectiveC metapodataka
|
||||
### Dump ObjectiveC metadata
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) je alat za klasno-dumpovanje Objective-C binarnih fajlova. GitHub specifikuje dylibs ali ovo takođe funkcioniše sa izvršnim fajlovima.
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) je alat za class-dump Objective-C binarnih datoteka. Github specificira dylibs, ali ovo takođe funkcioniše sa izvršnim datotekama.
|
||||
```bash
|
||||
./dynadump dump /path/to/bin
|
||||
```
|
||||
U trenutku pisanja, ovo je **trenutno ono što najbolje funkcioniše**.
|
||||
U vreme pisanja, ovo je **trenutno ono što najbolje funkcioniše**.
|
||||
|
||||
#### Redovni alati
|
||||
```bash
|
||||
|
@ -194,24 +194,24 @@ objdump --macho --objc-meta-data /path/to/bin
|
|||
```
|
||||
#### class-dump
|
||||
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) je originalni alat koji generiše deklaracije za klase, kategorije i protokole u formatiranom ObjectiveC kodu.
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) je originalni alat koji generiše deklaracije za klase, kategorije i protokole u ObjetiveC formatiranom kodu.
|
||||
|
||||
Star je i nije održavan, pa verovatno neće pravilno raditi.
|
||||
Stari je i neodržavan, tako da verovatno neće raditi ispravno.
|
||||
|
||||
#### ICDump
|
||||
|
||||
[**iCDump**](https://github.com/romainthomas/iCDump) je moderan i višepatformski Objective-C class dump. U poređenju sa postojećim alatima, iCDump može raditi nezavisno od Apple ekosistema i izlaže Python veze.
|
||||
[**iCDump**](https://github.com/romainthomas/iCDump) je moderan i multiplatformski Objective-C class dump. U poređenju sa postojećim alatima, iCDump može da radi nezavisno od Apple ekosistema i izlaže Python vezivanja.
|
||||
```python
|
||||
import icdump
|
||||
metadata = icdump.objc.parse("/path/to/bin")
|
||||
|
||||
print(metadata.to_decl())
|
||||
```
|
||||
## Statička analiza Swift-a
|
||||
## Staticka analiza Swifta
|
||||
|
||||
Sa Swift binarnim fajlovima, s obzirom da postoji kompatibilnost sa Objective-C-om, ponekad možete izvući deklaracije koristeći [class-dump](https://github.com/nygard/class-dump/), ali ne uvek.
|
||||
Sa Swift binarnim datotekama, pošto postoji kompatibilnost sa Objective-C, ponekad možete izvući deklaracije koristeći [class-dump](https://github.com/nygard/class-dump/) ali ne uvek.
|
||||
|
||||
Pomoću komandi **`jtool -l`** ili **`otool -l`** moguće je pronaći nekoliko sekcija koje počinju sa prefiksom **`__swift5`**:
|
||||
Sa **`jtool -l`** ili **`otool -l`** komandama moguće je pronaći nekoliko sekcija koje počinju sa **`__swift5`** prefiksom:
|
||||
```bash
|
||||
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
|
||||
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
|
||||
|
@ -223,9 +223,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
|
|||
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
||||
[...]
|
||||
```
|
||||
Možete pronaći dodatne informacije o [**informacijama koje su smeštene u ovim sekcijama u ovom blog postu**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
|
||||
Možete pronaći dodatne informacije o [**informacijama koje se čuvaju u ovoj sekciji u ovom blog postu**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
|
||||
|
||||
Štaviše, **Swift binarni fajlovi mogu imati simbole** (na primer, biblioteke moraju čuvati simbole kako bi se njenim funkcijama moglo pristupiti). **Simboli obično sadrže informacije o imenu funkcije** i atributima na neuredan način, pa su veoma korisni, i postoje "**demangleri"** koji mogu dobiti originalno ime:
|
||||
Pored toga, **Swift binarni fajlovi mogu imati simbole** (na primer, biblioteke treba da čuvaju simbole kako bi se njihove funkcije mogle pozivati). **Simboli obično imaju informacije o imenu funkcije** i atributima na ružan način, tako da su veoma korisni i postoje "**demangleri"** koji mogu dobiti originalno ime:
|
||||
```bash
|
||||
# Ghidra plugin
|
||||
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
||||
|
@ -233,80 +233,80 @@ https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
|||
# Swift cli
|
||||
swift demangle
|
||||
```
|
||||
## Dinamička analiza
|
||||
## Dinamička Analiza
|
||||
|
||||
{% hint style="warning" %}
|
||||
Imajte na umu da bi za debagovanje binarnih fajlova, **SIP treba da bude onemogućen** (`csrutil disable` ili `csrutil enable --without debug`) ili da kopirate binarne fajlove u privremenu fasciklu i **uklonite potpis** pomoću `codesign --remove-signature <putanja-do-binarnog-fajla>` ili dozvolite debagovanje binarnog fajla (možete koristiti [ovaj skript](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Napomena da je za debagovanje binarnih datoteka, **SIP potrebno onemogućiti** (`csrutil disable` ili `csrutil enable --without debug`) ili kopirati binarne datoteke u privremenu fasciklu i **ukloniti potpis** sa `codesign --remove-signature <binary-path>` ili omogućiti debagovanje binarne datoteke (možete koristiti [ovaj skript](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Imajte na umu da bi za **instrumentaciju sistemskih binarnih fajlova** (kao što je `cloudconfigurationd`) na macOS-u, **SIP mora biti onemogućen** (samo uklanjanje potpisa neće raditi).
|
||||
Napomena da je za **instrumentaciju sistemskih binarnih datoteka**, (kao što je `cloudconfigurationd`) na macOS-u, **SIP potrebno onemogućiti** (samo uklanjanje potpisa neće raditi).
|
||||
{% endhint %}
|
||||
|
||||
### API-ji
|
||||
|
||||
macOS izlaže neke zanimljive API-jeve koji pružaju informacije o procesima:
|
||||
macOS izlaže neke zanimljive API-je koji daju informacije o procesima:
|
||||
|
||||
* `proc_info`: Ovo je glavni API koji pruža mnogo informacija o svakom procesu. Potrebno je da budete root da biste dobili informacije o drugim procesima, ali vam nisu potrebna posebna ovlašćenja ili mach portovi.
|
||||
* `proc_info`: Ovo je glavni API koji daje mnogo informacija o svakom procesu. Potrebno je biti root da biste dobili informacije o drugim procesima, ali vam nisu potrebna posebna ovlašćenja ili mach portovi.
|
||||
* `libsysmon.dylib`: Omogućava dobijanje informacija o procesima putem XPC izloženih funkcija, međutim, potrebno je imati ovlašćenje `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
### Stackshot & mikrostackshotovi
|
||||
|
||||
**Stackshotting** je tehnika koja se koristi za snimanje stanja procesa, uključujući stek pozive svih pokrenutih niti. Ovo je posebno korisno za debagovanje, analizu performansi i razumevanje ponašanja sistema u određenom trenutku. Na iOS-u i macOS-u, stackshotting se može izvršiti korišćenjem nekoliko alata i metoda poput alata **`sample`** i **`spindump`**.
|
||||
**Stackshotting** je tehnika koja se koristi za hvatanje stanja procesa, uključujući pozivne stekove svih aktivnih niti. Ovo je posebno korisno za debagovanje, analizu performansi i razumevanje ponašanja sistema u određenom trenutku. Na iOS-u i macOS-u, stackshotting se može izvesti korišćenjem nekoliko alata i metoda kao što su alati **`sample`** i **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Ovaj alat (`/usr/bini/ysdiagnose`) uglavnom prikuplja mnogo informacija sa vašeg računara izvršavajući desetine različitih komandi poput `ps`, `zprint`...
|
||||
Ovaj alat (`/usr/bini/ysdiagnose`) u suštini prikuplja mnogo informacija sa vašeg računara izvršavajući desetine različitih komandi kao što su `ps`, `zprint`...
|
||||
|
||||
Mora se pokrenuti kao **root** i daemon `/usr/libexec/sysdiagnosed` ima veoma zanimljiva ovlašćenja poput `com.apple.system-task-ports` i `get-task-allow`.
|
||||
Mora se pokrenuti kao **root** i demon `/usr/libexec/sysdiagnosed` ima veoma zanimljiva ovlašćenja kao što su `com.apple.system-task-ports` i `get-task-allow`.
|
||||
|
||||
Njegov plist se nalazi u `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` koji deklariše 3 MachServices:
|
||||
Njegov plist se nalazi u `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` koji deklarira 3 MachServices:
|
||||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Briše stare arhive u /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Poseban port 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Korisnički interfejs putem `Libsysdiagnose` Obj-C klase. Mogu se proslediti tri argumenta u obliku rečnika (`compress`, `display`, `run`)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Interfejs korisničkog moda kroz `Libsysdiagnose` Obj-C klasu. Tri argumenta u rečniku mogu biti prosleđena (`compress`, `display`, `run`)
|
||||
|
||||
### Unified Logs
|
||||
|
||||
macOS generiše mnogo logova koji mogu biti veoma korisni prilikom pokretanja aplikacije pokušavajući da razumete **šta radi**.
|
||||
MacOS generiše mnogo logova koji mogu biti veoma korisni kada se pokreće aplikacija koja pokušava da razume **šta radi**.
|
||||
|
||||
Osim toga, postoje neki logovi koji će sadržati oznaku `<private>` da bi **sakrili** neke **identifikacione** informacije **korisnika** ili **računara**. Međutim, moguće je **instalirati sertifikat da biste otkrili ove informacije**. Pratite objašnjenja sa [**ovde**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
Štaviše, postoje neki logovi koji će sadržati oznaku `<private>` da **sakriju** neke **korisničke** ili **računarske** **identifikabilne** informacije. Međutim, moguće je **instalirati sertifikat da bi se otkrile ove informacije**. Pratite objašnjenja [**ovde**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
#### Leva tabla
|
||||
#### Levo dugme
|
||||
|
||||
Na levoj tabli hoppera mogu se videti simboli (**Oznake**) binarnog fajla, lista procedura i funkcija (**Proc**) i stringovi (**Str**). Ovo nisu svi stringovi već oni definisani u nekoliko delova Mac-O fajla (kao što su _cstring ili_ `objc_methname`).
|
||||
U levom panelu Hoper-a moguće je videti simbole (**Oznake**) binarne datoteke, listu procedura i funkcija (**Proc**) i stringove (**Str**). To nisu svi stringovi, već oni definisani u nekoliko delova Mac-O datoteke (kao što su _cstring ili_ `objc_methname`).
|
||||
|
||||
#### Srednja tabla
|
||||
#### Srednji panel
|
||||
|
||||
Na srednjoj tabli možete videti **disejblirani kod**. I možete ga videti kao **sirovi** disasembl, kao **graf**, kao **dekompilirani** i kao **binarni** klikom na odgovarajuću ikonu:
|
||||
U srednjem panelu možete videti **disasemblirani kod**. I možete ga videti kao **sirovi** disasembler, kao **graf**, kao **dekompajliran** i kao **binarni** klikom na odgovarajuću ikonu:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Desnim klikom na objekat koda možete videti **reference ka/od tog objekta** ili čak promeniti njegovo ime (ovo ne funkcioniše u dekompiliranom pseudokodu):
|
||||
Desnim klikom na objekat koda možete videti **reference na/iz tog objekta** ili čak promeniti njegovo ime (ovo ne funkcioniše u dekompajliranom pseudokodu):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Osim toga, u **sredini dole možete pisati Python komande**.
|
||||
Štaviše, u **donjem srednjem delu možete pisati python komande**.
|
||||
|
||||
#### Desna tabla
|
||||
#### Desni panel
|
||||
|
||||
Na desnoj tabli možete videti zanimljive informacije poput **istorije navigacije** (da znate kako ste stigli do trenutne situacije), **pozivnog grafa** gde možete videti sve **funkcije koje pozivaju ovu funkciju** i sve funkcije koje **ova funkcija poziva**, i informacije o **lokalnim varijablama**.
|
||||
U desnom panelu možete videti zanimljive informacije kao što su **istorija navigacije** (tako da znate kako ste došli do trenutne situacije), **call graf** gde možete videti sve **funkcije koje pozivaju ovu funkciju** i sve funkcije koje **ova funkcija poziva**, i informacije o **lokalnim varijablama**.
|
||||
|
||||
### dtrace
|
||||
|
||||
Omogućava korisnicima pristup aplikacijama na izuzetno **niskom nivou** i pruža način korisnicima da **prate** **programe** i čak promene njihov tok izvršavanja. Dtrace koristi **sonde** koje su **postavljene širom jezgra** i nalaze se na lokacijama poput početka i kraja sistemskih poziva.
|
||||
Omogućava korisnicima pristup aplikacijama na ekstremno **niskom nivou** i pruža način za korisnike da **prate** **programe** i čak promene njihov tok izvršenja. Dtrace koristi **probes** koje su **postavljene širom kernela** i nalaze se na mestima kao što su početak i kraj sistemskih poziva.
|
||||
|
||||
DTrace koristi funkciju **`dtrace_probe_create`** za kreiranje sonde za svaki sistemski poziv. Ove sonde mogu biti aktivirane na **ulaznoj i izlaznoj tački svakog sistemskog poziva**. Interakcija sa DTrace-om se vrši preko /dev/dtrace koji je dostupan samo root korisniku.
|
||||
DTrace koristi funkciju **`dtrace_probe_create`** za kreiranje probe za svaki sistemski poziv. Ove probe mogu biti aktivirane u **ulaznoj i izlaznoj tački svakog sistemskog poziva**. Interakcija sa DTrace se odvija kroz /dev/dtrace koji je dostupan samo za root korisnika.
|
||||
|
||||
{% hint style="success" %}
|
||||
Da biste omogućili Dtrace bez potpune onemogućenosti SIP zaštite, možete izvršiti u režimu oporavka: `csrutil enable --without dtrace`
|
||||
Da biste omogućili Dtrace bez potpunog onemogućavanja SIP zaštite, možete izvršiti u režimu oporavka: `csrutil enable --without dtrace`
|
||||
|
||||
Takođe možete **`dtrace`** ili **`dtruss`** binarne fajlove koje **ste kompajlirali**.
|
||||
Takođe možete **`dtrace`** ili **`dtruss`** binarne datoteke koje **ste sami kompajlirali**.
|
||||
{% endhint %}
|
||||
|
||||
Dostupne sonde dtrace-a mogu se dobiti sa:
|
||||
Dostupne probe dtrace mogu se dobiti sa:
|
||||
```bash
|
||||
dtrace -l | head
|
||||
ID PROVIDER MODULE FUNCTION NAME
|
||||
|
@ -316,22 +316,20 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
43 profile profile-97
|
||||
44 profile profile-199
|
||||
```
|
||||
Ime sonde se sastoji od četiri dela: provajdera, modula, funkcije i imena (`fbt:mach_kernel:ptrace:entry`). Ako ne navedete neki deo imena, Dtrace će taj deo primeniti kao zamenski znak.
|
||||
Ime probe se sastoji od četiri dela: provajder, modul, funkcija i ime (`fbt:mach_kernel:ptrace:entry`). Ako ne navedete neki deo imena, Dtrace će taj deo primeniti kao džoker.
|
||||
|
||||
Da biste konfigurisali DTrace da aktivira sonde i specificira koje akcije treba izvršiti kada se aktiviraju, moraćemo koristiti D jezik.
|
||||
Da bismo konfigurisali DTrace da aktivira probe i da odredimo koje akcije da izvrši kada se aktiviraju, moraćemo da koristimo D jezik.
|
||||
|
||||
Detaljnije objašnjenje i više primera možete pronaći na [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
|
||||
#### Primeri
|
||||
|
||||
Pokrenite `man -k dtrace` da biste videli **dostupne DTrace skripte**. Primer: `sudo dtruss -n binary`
|
||||
|
||||
* U liniji
|
||||
Pokrenite `man -k dtrace` da biste prikazali **dostupne DTrace skripte**. Primer: `sudo dtruss -n binary`
|
||||
```bash
|
||||
#Count the number of syscalls of each running process
|
||||
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
|
||||
```
|
||||
* skripta
|
||||
* скрипт
|
||||
```bash
|
||||
syscall:::entry
|
||||
/pid == $1/
|
||||
|
@ -376,110 +374,110 @@ dtruss -c -p 1000 #get syscalls of PID 1000
|
|||
```
|
||||
### kdebug
|
||||
|
||||
To je mogućnost praćenja jezgra. Dokumentovani kodovi mogu se pronaći u **`/usr/share/misc/trace.codes`**.
|
||||
To je funkcija za praćenje jezgra. Dokumentovani kodovi se mogu naći u **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Alati poput `latency`, `sc_usage`, `fs_usage` i `trace` ga koriste interno.
|
||||
Alati kao što su `latency`, `sc_usage`, `fs_usage` i `trace` koriste je interno.
|
||||
|
||||
Za interakciju sa `kdebug`-om se koristi `sysctl` preko `kern.kdebug` prostora imena, a MIB-ovi koji se koriste mogu se pronaći u `sys/sysctl.h` imajući funkcije implementirane u `bsd/kern/kdebug.c`.
|
||||
Za interakciju sa `kdebug` koristi se `sysctl` preko `kern.kdebug` imenskog prostora, a MIB-ovi koji se mogu koristiti nalaze se u `sys/sysctl.h` sa funkcijama implementiranim u `bsd/kern/kdebug.c`.
|
||||
|
||||
Da biste komunicirali sa kdebug-om pomoću prilagođenog klijenta, obično se koriste sledeći koraci:
|
||||
Da bi se interagovalo sa kdebug-om sa prilagođenim klijentom, obično su to koraci:
|
||||
|
||||
* Uklonite postojeće postavke sa KERN\_KDSETREMOVE
|
||||
* Postavite trag sa KERN\_KDSETBUF i KERN\_KDSETUP
|
||||
* Koristite KERN\_KDGETBUF da biste dobili broj unosa u baferu
|
||||
* Izvucite sopstvenog klijenta iz traga sa KERN\_KDPINDEX
|
||||
* Postavite praćenje sa KERN\_KDSETBUF i KERN\_KDSETUP
|
||||
* Koristite KERN\_KDGETBUF da dobijete broj unosa u baferu
|
||||
* Izvucite svog klijenta iz praćenja sa KERN\_KDPINDEX
|
||||
* Omogućite praćenje sa KERN\_KDENABLE
|
||||
* Pročitajte bafer pozivajući KERN\_KDREADTR
|
||||
* Da biste uparili svaku nit sa njenim procesom, pozovite KERN\_KDTHRMAP.
|
||||
* Da biste povezali svaku nit sa njenim procesom, pozovite KERN\_KDTHRMAP.
|
||||
|
||||
Da biste dobili ove informacije, moguće je koristiti Apple alat **`trace`** ili prilagođeni alat [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
|
||||
|
||||
**Imajte na umu da je Kdebug dostupan samo za 1 korisnika u isto vreme.** Tako da samo jedan alat sa k-debug mogućnostima može biti pokrenut u isto vreme.
|
||||
**Napomena: Kdebug je dostupan samo za 1 korisnika u isto vreme.** Dakle, samo jedan alat sa k-debug podrškom može se izvršavati u isto vreme.
|
||||
|
||||
### ktrace
|
||||
|
||||
API-ji `ktrace_*` dolaze iz `libktrace.dylib` koji obuhvataju one iz `Kdebug`. Zatim, klijent može jednostavno pozvati `ktrace_session_create` i `ktrace_events_[single/class]` da postavi povratne pozive na specifične kodove, a zatim ga pokrenuti sa `ktrace_start`.
|
||||
`ktrace_*` API-ji dolaze iz `libktrace.dylib` koji obavijaju one iz `Kdebug`. Tada klijent može jednostavno pozvati `ktrace_session_create` i `ktrace_events_[single/class]` da postavi povratne pozive na specifične kodove i zatim ga pokrenuti sa `ktrace_start`.
|
||||
|
||||
Možete koristiti ovaj čak i kada je **SIP aktiviran**
|
||||
Možete koristiti ovo čak i sa **SIP aktiviranim**
|
||||
|
||||
Možete koristiti kao klijente korisnu alatku `ktrace`:
|
||||
Možete koristiti kao klijente alat `ktrace`:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Ili `tailspin`.
|
||||
Or `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
Ovo se koristi za profilisanje na nivou jezgra i izgrađeno je koristeći `Kdebug` pozive.
|
||||
Ovo se koristi za profilisanje na nivou kernela i izgrađeno je koristeći `Kdebug` pozive.
|
||||
|
||||
U osnovi, globalna promenljiva `kernel_debug_active` se proverava i postavlja poziva `kperf_kdebug_handler` sa `Kdebug` kodom i adresom jezgra koji poziva. Ako se `Kdebug` kod poklapa sa odabranim, dobijaju se "akcije" konfigurisane kao bitmape (proverite `osfmk/kperf/action.h` za opcije).
|
||||
U suštini, globalna promenljiva `kernel_debug_active` se proverava i ako je postavljena, poziva `kperf_kdebug_handler` sa `Kdebug` kodom i adresom kernel okvira koji poziva. Ako se `Kdebug` kod poklapa sa jednim od odabranih, dobijaju se "akcije" konfigurirane kao bitmap (proverite `osfmk/kperf/action.h` za opcije).
|
||||
|
||||
Kperf takođe ima sysctl MIB tabelu: (kao root) `sysctl kperf`. Ovaj kod se može pronaći u `osfmk/kperf/kperfbsd.c`.
|
||||
Kperf takođe ima sysctl MIB tabelu: (kao root) `sysctl kperf`. Ovi kodovi se mogu naći u `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Osim toga, podskup funkcionalnosti Kperf-a se nalazi u `kpc`, koji pruža informacije o brojačima performansi mašine.
|
||||
Štaviše, podskup funkcionalnosti Kperfa se nalazi u `kpc`, koji pruža informacije o brojačima performansi mašine.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) je veoma koristan alat za proveru radnji povezanih sa procesima koje proces obavlja (na primer, praćenje novih procesa koje proces kreira).
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) je veoma koristan alat za proveru akcija vezanih za procese koje proces izvršava (na primer, praćenje koje nove procese proces kreira).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) je alat koji prikazuje odnose između procesa.\
|
||||
Potrebno je pratiti vaš Mac pomoću komande poput **`sudo eslogger fork exec rename create > cap.json`** (terminal koji pokreće ovo zahteva FDA). Zatim možete učitati json u ovaj alat da biste videli sve odnose:
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) je alat koji štampa odnose između procesa.\
|
||||
Morate pratiti svoj mac sa komandom kao **`sudo eslogger fork exec rename create > cap.json`** (terminal koji pokreće ovo zahteva FDA). A zatim možete učitati json u ovaj alat da biste videli sve odnose:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
### FileMonitor
|
||||
|
||||
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) omogućava praćenje događaja sa datotekama (kao što su kreiranje, izmene i brisanje) pružajući detaljne informacije o takvim događajima.
|
||||
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) omogućava praćenje događaja vezanih za fajlove (kao što su kreiranje, modifikacije i brisanja) pružajući detaljne informacije o takvim događajima.
|
||||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) je GUI alat sa izgledom koji korisnici Windows-a mogu prepoznati iz Microsoft Sysinternal’s _Procmon_. Ovaj alat omogućava pokretanje i zaustavljanje snimanja različitih tipova događaja, omogućava filtriranje ovih događaja po kategorijama kao što su datoteka, proces, mreža, itd., i pruža funkcionalnost za čuvanje snimljenih događaja u json formatu.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) je GUI alat sa izgledom i osećajem koji korisnici Windows-a možda poznaju iz Microsoft Sysinternal’s _Procmon_. Ovaj alat omogućava snimanje raznih tipova događaja koji se mogu započeti i zaustaviti, omogućava filtriranje ovih događaja po kategorijama kao što su fajl, proces, mreža, itd., i pruža funkcionalnost za čuvanje snimljenih događaja u json formatu.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) su deo Xcode-ovih Developer alata - koriste se za praćenje performansi aplikacija, identifikaciju curenja memorije i praćenje aktivnosti sistema datoteka.
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) su deo Xcode-ovih razvojnog alata – koriste se za praćenje performansi aplikacija, identifikovanje curenja memorije i praćenje aktivnosti na datotečnom sistemu.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1138).png>)
|
||||
|
||||
### fs\_usage
|
||||
|
||||
Omogućava praćenje radnji koje obavljaju procesi:
|
||||
Omogućava praćenje akcija koje izvode procesi:
|
||||
```bash
|
||||
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
|
||||
fs_usage -w -f network curl #This tracks network actions
|
||||
```
|
||||
### TaskExplorer
|
||||
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) je koristan alat za pregled **biblioteka** koje koristi binarni fajl, **datoteke** koje koristi i **mrežne** veze.\
|
||||
Takođe proverava binarne procese na **virustotalu** i prikazuje informacije o binarnom fajlu.
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) je koristan za pregled **biblioteka** koje koristi binarni fajl, **fajlova** koje koristi i **mrežnih** konekcija.\
|
||||
Takođe proverava binarne procese protiv **virustotal** i prikazuje informacije o binarnom fajlu.
|
||||
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
||||
U [**ovom blog postu**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) možete pronaći primer kako **debugovati pokrenuti daemon** koji koristi **`PT_DENY_ATTACH`** kako bi sprečio debugovanje čak i ako je SIP onemogućen.
|
||||
U [**ovom blog postu**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) možete pronaći primer o tome kako da **debug-ujete pokrenuti daemon** koji koristi **`PT_DENY_ATTACH`** da spreči debagovanje čak i ako je SIP bio onemogućen.
|
||||
|
||||
### lldb
|
||||
|
||||
**lldb** je glavni alat za **debugovanje** binarnih fajlova na **macOS**-u.
|
||||
**lldb** je de **facto alat** za **macOS** binarno **debugovanje**.
|
||||
```bash
|
||||
lldb ./malware.bin
|
||||
lldb -p 1122
|
||||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
Možete postaviti Intel ukus prilikom korišćenja lldb-a kreiranjem datoteke nazvane **`.lldbinit`** u vašem matičnom folderu sa sledećom linijom:
|
||||
Možete postaviti intel varijantu kada koristite lldb kreiranjem datoteke pod nazivom **`.lldbinit`** u vašem domaćem folderu sa sledećom linijom:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Unutar lldb-a, izvršite dump procesa sa `process save-core`
|
||||
Unutar lldb, dump-ujte proces sa `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komanda</strong></td><td><strong>Opis</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Pokretanje izvršenja, koje će se nastaviti dok se ne naiđe na prekidnu tačku ili dok se proces ne završi.</td></tr><tr><td><strong>continue (c)</strong></td><td>Nastavak izvršenja debugiranog procesa.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Izvršava sledeću instrukciju. Ova komanda će preskočiti pozive funkcija.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Izvršava sledeću instrukciju. Za razliku od nexti komande, ova komanda će ući u pozive funkcija.</td></tr><tr><td><strong>finish (f)</strong></td><td>Izvršava preostale instrukcije u trenutnoj funkciji ("frame") i zaustavlja se.</td></tr><tr><td><strong>control + c</strong></td><td>Pauzira izvršenje. Ako je proces pokrenut (r) ili nastavljen (c), ovo će uzrokovati zaustavljanje procesa ...gde god se trenutno izvršava.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Bilo koja funkcija nazvana main</p><p>b <ime_binarne_datoteke>`main #Glavna funkcija binarne datoteke</p><p>b set -n main --shlib <ime_biblioteke> #Glavna funkcija naznačene binarne datoteke</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista prekida</p><p>br e/dis <br> #Omogući/Onemogući prekid</p><p>breakpoint delete <br></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Dobijanje pomoći za komandu prekida</p><p>help memory write #Dobijanje pomoći za pisanje u memoriju</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/adresa_memorije></strong></td><td>Prikazuje memoriju kao string završen nulom.</td></tr><tr><td><strong>x/i <reg/adresa_memorije></strong></td><td>Prikazuje memoriju kao asemblersku instrukciju.</td></tr><tr><td><strong>x/b <reg/adresa_memorije></strong></td><td>Prikazuje memoriju kao bajt.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Ovo će ispisati objekat na koji se parametar odnosi</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>Imajte na umu da većina Apple-ovih Objective-C API-ja ili metoda vraća objekte, i stoga bi trebalo da se prikažu putem "print object" (po) komande. Ako po ne proizvodi smislene rezultate, koristite <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 #Upisuje AAAA na tu adresu<br>memory write -f s $rip+0x11f+7 "AAAA" #Upisuje AAAA na adresu</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disasembleruje trenutnu funkciju</p><p>dis -n <ime_funkcije> #Disasembleruje funkciju</p><p>dis -n <ime_funkcije> -b <ime_datoteke> #Disasembleruje funkciju<br>dis -c 6 #Disasembleruje 6 linija<br>dis -c 0x100003764 -e 0x100003768 # Od jedne adrese do druge<br>dis -p -c 4 # Počinje sa trenutnom adresom disasemblerovanja</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Proverava niz od 3 komponente u x1 registru</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komanda</strong></td><td><strong>Opis</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Pokreće izvršavanje, koje će se nastaviti bez prekida dok se ne dostigne tačka prekida ili proces ne završi.</td></tr><tr><td><strong>process launch --stop-at-entry</strong></td><td>Pokreće izvršavanje zaustavljajući se na ulaznoj tački</td></tr><tr><td><strong>continue (c)</strong></td><td>Nastavlja izvršavanje debagovanog procesa.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Izvršava sledeću instrukciju. Ova komanda će preskočiti pozive funkcija.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Izvršava sledeću instrukciju. Za razliku od nexti komande, ova komanda će ući u pozive funkcija.</td></tr><tr><td><strong>finish (f)</strong></td><td>Izvršava ostatak instrukcija u trenutnoj funkciji (“frame”) i vraća se i zaustavlja.</td></tr><tr><td><strong>control + c</strong></td><td>Pauzira izvršavanje. Ako je proces pokrenut (r) ili nastavljen (c), ovo će uzrokovati da proces stane ...gde god trenutno izvršava.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p><code>b main</code> #Bilo koja funkcija nazvana main</p><p><code>b <binname>`main</code> #Glavna funkcija binarnih datoteka</p><p><code>b set -n main --shlib <lib_name></code> #Glavna funkcija označenog binarnih datoteka</p><p><code>breakpoint set -r '\[NSFileManager .*\]$'</code> #Bilo koja NSFileManager metoda</p><p><code>breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'</code></p><p><code>break set -r . -s libobjc.A.dylib</code> # Prekini u svim funkcijama te biblioteke</p><p><code>b -a 0x0000000100004bd9</code></p><p><code>br l</code> #Lista tačaka prekida</p><p><code>br e/dis <num></code> #Omogući/Onemogući tačku prekida</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Dobijte pomoć za komandu tačke prekida</p><p>help memory write #Dobijte pomoć za pisanje u memoriju</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/adresa u memoriji></strong></td><td>Prikazuje memoriju kao string koji se završava nulom.</td></tr><tr><td><strong>x/i <reg/adresa u memoriji></strong></td><td>Prikazuje memoriju kao instrukciju asemblera.</td></tr><tr><td><strong>x/b <reg/adresa u memoriji></strong></td><td>Prikazuje memoriju kao bajt.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Ovo će odštampati objekat na koji se poziva parametar</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>Napomena da većina Apple-ovih Objective-C API-ja ili metoda vraća objekte, i stoga bi trebala biti prikazana putem komande “print object” (po). Ako po ne daje smislen izlaz, koristite <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 #Upiši AAAA na tu adresu<br>memory write -f s $rip+0x11f+7 "AAAA" #Upiši AAAA na adresu</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disas trenutnu funkciju</p><p>dis -n <funcname> #Disas funkciju</p><p>dis -n <funcname> -b <basename> #Disas funkciju<br>dis -c 6 #Disas 6 linija<br>dis -c 0x100003764 -e 0x100003768 # Od jedne adrese do druge<br>dis -p -c 4 # Počni u trenutnoj adresi disasemblerajući</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Proveri niz od 3 komponente u x1 registru</td></tr><tr><td><strong>image dump sections</strong></td><td>Štampa mapu trenutne memorije procesa</td></tr><tr><td><strong>image dump symtab <library></strong></td><td><code>image dump symtab CoreNLP</code> #Dobij adresu svih simbola iz CoreNLP</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Prilikom pozivanja funkcije **`objc_sendMsg`**, registar **rsi** sadrži **ime metode** kao string završen nulom ("C"). Da biste ispisali ime putem lldb-a, uradite sledeće:
|
||||
Kada pozivate funkciju **`objc_sendMsg`**, registar **rsi** sadrži **ime metode** kao string koji se završava nulom (“C”). Da biste odštampali ime putem lldb, uradite:
|
||||
|
||||
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
|
||||
|
@ -491,36 +489,37 @@ Prilikom pozivanja funkcije **`objc_sendMsg`**, registar **rsi** sadrži **ime m
|
|||
|
||||
### Anti-Dinamička Analiza
|
||||
|
||||
#### Detekcija virtuelne mašine
|
||||
#### VM detekcija
|
||||
|
||||
* Komanda **`sysctl hw.model`** vraća "Mac" kada je **host MacOS**, ali nešto drugo kada je VM.
|
||||
* Igrajući se sa vrednostima **`hw.logicalcpu`** i **`hw.physicalcpu`**, neki malveri pokušavaju da detektuju da li je u pitanju VM.
|
||||
* Neki malveri takođe mogu **detektovati** da li je mašina **VMware** na osnovu MAC adrese (00:50:56).
|
||||
* Takođe je moguće otkriti **da li se proces debaguje** jednostavnim kodom kao što je:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proces se debaguje }`
|
||||
* Takođe može pozvati **`ptrace`** sistemski poziv sa **`PT_DENY_ATTACH`** flagom. Ovo **sprečava** debag**u**ger da se priključi i prati.
|
||||
* Možete proveriti da li je funkcija **`sysctl`** ili **`ptrace`** **importovana** (ali malver bi mogao da je importuje dinamički)
|
||||
* Kao što je navedeno u ovom izveštaju, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Poruka Process # exited with **status = 45 (0x0000002d)** obično je znak da je cilj debagovanja u upotrebi **PT\_DENY\_ATTACH**_”
|
||||
|
||||
* Komanda **`sysctl hw.model`** vraća "Mac" kada je **domaćin MacOS**, ali nešto drugo kada je virtuelna mašina.
|
||||
* Igranje sa vrednostima **`hw.logicalcpu`** i **`hw.physicalcpu`** neki malveri pokušavaju da detektuju da li je u pitanju virtuelna mašina.
|
||||
* Neki malveri takođe mogu **detektovati** da li je mašina zasnovana na **VMware**-u na osnovu MAC adrese (00:50:56).
|
||||
* Moguće je otkriti da li se proces **debuguje** jednostavnim kodom poput:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proces se debuguje }`
|
||||
* Takođe se može pozvati sistemski poziv **`ptrace`** sa zastavicom **`PT_DENY_ATTACH`**. Ovo **sprečava** deb**a**ger da se poveže i prati.
|
||||
* Možete proveriti da li se funkcija **`sysctl`** ili **`ptrace`** **uvozi** (ali malver bi mogao da je dinamički uveze)
|
||||
* Kao što je navedeno u ovom tekstu, “[Pobeda nad tehnikama protiv-debugovanja: macOS ptrace varijante](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Poruka Proces # je izašao sa **statusom = 45 (0x0000002d)** obično je znak da je cilj debugovanja koristi **PT\_DENY\_ATTACH**_”
|
||||
## Core Dumps
|
||||
|
||||
Core dumps are created if:
|
||||
Core dumps se kreiraju ako:
|
||||
|
||||
* `kern.coredump` sysctl is set to 1 (podrazumevano)
|
||||
* If the process wasn't suid/sgid or `kern.sugid_coredump` is 1 (podrazumevano je 0)
|
||||
* The `AS_CORE` limit allows the operation. It's possible to suppress code dumps creation by calling `ulimit -c 0` and re-enable them with `ulimit -c unlimited`.
|
||||
* `kern.coredump` sysctl je postavljen na 1 (po defaultu)
|
||||
* Ako proces nije suid/sgid ili `kern.sugid_coredump` je 1 (po defaultu je 0)
|
||||
* `AS_CORE` limit dozvoljava operaciju. Moguće je suprimirati kreiranje core dumps pozivom `ulimit -c 0` i ponovo ih omogućiti sa `ulimit -c unlimited`.
|
||||
|
||||
In those cases the core dumps is generated according to `kern.corefile` sysctl and stored usually in `/cores/core/.%P`.
|
||||
U tim slučajevima, core dumps se generišu prema `kern.corefile` sysctl i obično se čuvaju u `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **analizira procese koji se ruše i čuva izveštaj o rušenju na disku**. Izveštaj o rušenju sadrži informacije koje mogu **pomoći programeru da dijagnostikuje** uzrok rušenja.\
|
||||
Za aplikacije i druge procese **koji se izvršavaju u kontekstu pokretanja po korisniku**, ReportCrash se izvršava kao LaunchAgent i čuva izveštaje o rušenju u `~/Library/Logs/DiagnosticReports/` korisnika\
|
||||
Za demone, druge procese **koji se izvršavaju u kontekstu pokretanja po sistemu** i druge privilegovane procese, ReportCrash se izvršava kao LaunchDaemon i čuva izveštaje o rušenju u `/Library/Logs/DiagnosticReports` sistema
|
||||
ReportCrash **analizira procese koji se ruše i čuva izveštaj o padu na disk**. Izveštaj o padu sadrži informacije koje mogu **pomoći programeru da dijagnostikuje** uzrok pada.\
|
||||
Za aplikacije i druge procese **koji se izvršavaju u kontekstu per-user launchd**, ReportCrash se pokreće kao LaunchAgent i čuva izveštaje o padu u korisnikovom `~/Library/Logs/DiagnosticReports/`\
|
||||
Za demone, druge procese **koji se izvršavaju u sistemskom launchd kontekstu** i druge privilegovane procese, ReportCrash se pokreće kao LaunchDaemon i čuva izveštaje o padu u sistemskom `/Library/Logs/DiagnosticReports`
|
||||
|
||||
Ako vas brine što se izveštaji o rušenju **šalju Apple-u**, možete ih onemogućiti. U suprotnom, izveštaji o rušenju mogu biti korisni za **određivanje načina na koji je server pao**.
|
||||
Ako ste zabrinuti zbog izveštaja o padu **koji se šalju Apple-u**, možete ih onemogućiti. Ako ne, izveštaji o padu mogu biti korisni za **utvrđivanje kako je server pao**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -530,17 +529,17 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
|
|||
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
|
||||
```
|
||||
### Spavanje
|
||||
### Sleep
|
||||
|
||||
Prilikom faziiranja u MacOS-u važno je sprečiti Mac da spava:
|
||||
Dok fuzzing-a na MacOS-u, važno je ne dozvoliti Mac-u da zaspi:
|
||||
|
||||
* systemsetup -setsleep Nikada
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, System Preferences
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
#### SSH Prekid
|
||||
#### SSH Disconnect
|
||||
|
||||
Ako faziirate putem SSH veze važno je osigurati da sesija neće isteći. Promenite sshd\_config datoteku sa:
|
||||
Ako fuzzing-ujete putem SSH veze, važno je osigurati da sesija ne isključi. Tako da promenite sshd\_config datoteku sa:
|
||||
|
||||
* TCPKeepAlive Yes
|
||||
* ClientAliveInterval 0
|
||||
|
@ -549,17 +548,17 @@ Ako faziirate putem SSH veze važno je osigurati da sesija neće isteći. Promen
|
|||
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
||||
```
|
||||
### Interni rukovaoci
|
||||
### Internal Handlers
|
||||
|
||||
**Proverite sledeću stranicu** da biste saznali kako možete pronaći koja aplikacija je odgovorna za **obradu određene šeme ili protokola:**
|
||||
**Pogledajte sledeću stranicu** da biste saznali kako možete pronaći koja aplikacija je odgovorna za **rukovanje određenim shemama ili protokolima:**
|
||||
|
||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Enumeracija mrežnih procesa
|
||||
### Enumerating Network Processes
|
||||
|
||||
Ovo je interesantno za pronalaženje procesa koji upravljaju mrežnim podacima:
|
||||
Ovo je zanimljivo za pronalaženje procesa koji upravljaju mrežnim podacima:
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -578,7 +577,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Fuzzeri
|
||||
### Fuzzers
|
||||
|
||||
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
|
@ -586,9 +585,9 @@ Radi za CLI alate
|
|||
|
||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||
|
||||
On "**samo radi"** sa macOS GUI alatima. Imajte na umu da neki macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena datoteka, ispravna ekstenzija, potreba za čitanjem datoteka iz peska (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
Prosto radi sa macOS GUI alatima. Imajte na umu da neki macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena datoteka, prava ekstenzija, potreba da se čitaju datoteke iz sandbox-a (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Primeri:
|
||||
Neki primeri:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -616,7 +615,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Više informacija o Fuzzing-u na MacOS-u
|
||||
### Više informacija o Fuzzingu za 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)
|
||||
|
@ -634,25 +633,25 @@ 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) je pretraživač pokrenut na **dark web-u** koji nudi **besplatne** funkcionalnosti za proveru da li je kompanija ili njeni korisnici **ugroženi** od **malvera koji kradu informacije**.
|
||||
[**WhiteIntel**](https://whiteintel.io) je **dark-web** pretraživač koji nudi **besplatne** funkcionalnosti za proveru da li je neka kompanija ili njeni klijenti bili **kompromitovani** od strane **stealer malwares**.
|
||||
|
||||
Primarni cilj WhiteIntela je borba protiv preuzimanja naloga i napada ransomvera koji proizilaze iz malvera koji kradu informacije.
|
||||
Njihov primarni cilj je da se bore protiv preuzimanja naloga i ransomware napada koji proizlaze iz malvera za krađu informacija.
|
||||
|
||||
Možete posetiti njihovu veb lokaciju i isprobati njihovu mašinu za **besplatno** na:
|
||||
Možete proveriti njihovu veb stranicu i isprobati njihov pretraživač **besplatno** na:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Naučite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Naučite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Podržite HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue