mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
4d4ee97369
commit
abb1ae9146
1 changed files with 129 additions and 92 deletions
|
@ -1,4 +1,4 @@
|
|||
# macOS Apps - Ukaguzi, kurekebisha na Fuzzing
|
||||
# Programu za macOS - Kuchunguza, kudebugi na Fuzzing
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -28,15 +28,13 @@ Unaweza kutembelea tovuti yao na kujaribu injini yao **bure** kwa:
|
|||
|
||||
***
|
||||
|
||||
## Uchambuzi Stahiki
|
||||
## Uchambuzi Stati
|
||||
|
||||
### 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
|
||||
|
||||
Zana hii inaweza kutumika kama **mbadala** wa **codesign**, **otool**, na **objdump**, na hutoa baadhi ya vipengele vingine vya ziada. [**Pakua hapa**](http://www.newosxbook.com/tools/jtool.html) au isakinishe kwa kutumia `brew`.
|
||||
Unaweza [**kupakua disarm kutoka hapa**](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
|
||||
```
|
||||
Unaweza [**kupakua jtool2 hapa**](http://www.newosxbook.com/tools/jtool.html) au kusakinisha kwa kutumia `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 imepitwa na wakati kwa faida ya disarm**
|
||||
{% endhint %}
|
||||
|
||||
### Codesign / ldid
|
||||
|
||||
{% hint style="danger" %}
|
||||
**`Codesign`** inaweza kupatikana kwenye **macOS** wakati **`ldid`** inaweza kupatikana kwenye **iOS**
|
||||
{% hint style="success" %}
|
||||
**`Codesign`** inaweza kupatikana katika **macOS** wakati **`ldid`** inaweza kupatikana katika **iOS**
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Get signer
|
||||
|
@ -100,8 +113,8 @@ ldid -S/tmp/entl.xml <binary>
|
|||
```
|
||||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) ni chombo kinachofaa kuchunguza faili za **.pkg** (wakufunzi) na kuona kilichomo ndani kabla ya kuiweka.\
|
||||
Wakufunzi hawa wana skripti za bash za `preinstall` na `postinstall` ambazo waundaji wa programu hasidi kawaida hutumia kuendelea kuwepo kwa **programu hasidi**.
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) ni chombo kinachofaa kuchunguza faili za **.pkg** (wakala) na kuona kilichomo ndani kabla ya kuiweka.\
|
||||
Wakala hawa wana skripti za bash za `preinstall` na `postinstall` ambazo waundaji wa programu hasidi kawaida hutumia vibaya kudumisha **programu hasidi**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
|
@ -111,32 +124,37 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
|||
```
|
||||
Itakuwa imemountiwa katika `/Volumes`
|
||||
|
||||
### Objective-C
|
||||
### Binari zilizopakwa
|
||||
|
||||
#### Metadata
|
||||
* Angalia kwa entropy kubwa
|
||||
* Angalia strings (kama hakuna string inayoeleweka, imepakwa)
|
||||
* Packer wa UPX kwa MacOS huzalisha sehemu inayoitwa "\_\_XHDR"
|
||||
|
||||
## Uchambuzi wa Static Objective-C
|
||||
|
||||
### Metadata
|
||||
|
||||
{% hint style="danger" %}
|
||||
Tafadhali kumbuka kuwa programu zilizoandikwa kwa Objective-C **huhifadhi** matangazo yao ya darasa **wakati** **inapohaririwa** kuwa [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Matangazo hayo ya darasa **ni pamoja na** jina na aina ya:
|
||||
Tafadhali kumbuka kuwa programu zilizoandikwa kwa Objective-C **huhifadhi** matangazo yao ya darasa **wakati** **zina** **kuchakatwa** kuwa [binari za Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Matangazo hayo ya darasa **ni pamoja na** jina na aina ya:
|
||||
{% endhint %}
|
||||
|
||||
* Darasa
|
||||
* Njia za darasa
|
||||
* Vipengele vya kielezo cha darasa
|
||||
* Violezo vilivyofafanuliwa
|
||||
* Njia za violezo
|
||||
* Vipengele vya kiolezo
|
||||
* Itifaki zilizofafanuliwa
|
||||
|
||||
Unaweza kupata habari hii ukitumia [**class-dump**](https://github.com/nygard/class-dump):
|
||||
```bash
|
||||
class-dump Kindle.app
|
||||
```
|
||||
#### Kuita Kazi
|
||||
Kumbuka kuwa majina haya yanaweza kufichwa ili kufanya kugeuza nyuma ya binari kuwa ngumu zaidi.
|
||||
|
||||
Wakati kazi inaitwa katika binary inayotumia objective-C, msimbo uliokompiliwa badala ya kuita kazi hiyo, itaita **`objc_msgSend`**. Ambayo itaita kazi ya mwisho:
|
||||
### Kuita kazi
|
||||
|
||||
Wakati kazi inaitwa katika binari inayotumia Objective-C, badala ya kuita kazi hiyo, msimbo uliochakatwa utaita **`objc_msgSend`**. Ambayo itaita kazi ya mwisho:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Parameta ambazo kazi hii inatarajia ni:
|
||||
|
||||
* Parameta ya kwanza (**self**) ni "kiashiria kinachoelekeza kwa **kifungu cha darasa ambacho kinapaswa kupokea ujumbe**". Au kwa maneno rahisi, ni kitu ambacho mbinu inaitwa juu yake. Ikiwa mbinu ni mbinu ya darasa, hii itakuwa kifungu cha kitu cha darasa (kwa jumla), wakati kwa mbinu ya kifungu, self itaelekeza kwa kifungu kilichoundwa cha darasa kama kitu.
|
||||
* Parameta ya pili, (**op**), ni "chaguo la mbinu inayoshughulikia ujumbe". Tena, kwa maneno rahisi, hii ni tu **jina la mbinu.**
|
||||
* Parameta ya kwanza (**self**) ni "kiashiria kinachoelekeza kwa **mfano wa darasa ambalo linapaswa kupokea ujumbe**". Au kusema kwa urahisi zaidi, ni kitu ambacho mbinu inaitwa juu yake. Ikiwa mbinu ni mbinu ya darasa, hii itakuwa mfano wa kitu cha darasa (kwa ujumla), wakati kwa mbinu ya mfano, self itaelekeza kwa mfano ulioanzishwa wa darasa kama kitu.
|
||||
* Parameta ya pili, (**op**), ni "chaguzi ya mbinu inayoshughulikia ujumbe". Tena, kwa urahisi zaidi, hii ni tu **jina la mbinu.**
|
||||
* Parameta zilizobaki ni **thamani zozote zinazohitajika na mbinu** (op).
|
||||
|
||||
Angalia jinsi ya **kupata habari hii kwa urahisi na `lldb` katika ARM64** kwenye ukurasa huu:
|
||||
|
@ -147,7 +165,7 @@ Angalia jinsi ya **kupata habari hii kwa urahisi na `lldb` katika ARM64** kwenye
|
|||
|
||||
x64:
|
||||
|
||||
| **Hoja** | **Kijisajili** | **(kwa) objc\_msgSend** |
|
||||
| **Hoja** | **Kusajili** | **(kwa) objc\_msgSend** |
|
||||
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **Hoja ya 1** | **rdi** | **self: kitu ambacho mbinu inaitwa juu yake** |
|
||||
| **Hoja ya 2** | **rsi** | **op: jina la mbinu** |
|
||||
|
@ -157,13 +175,40 @@ x64:
|
|||
| **Hoja ya 6** | **r9** | **Hoja ya 4 kwa mbinu** |
|
||||
| **Hoja ya 7+** | <p><strong>rsp+</strong><br><strong>(kwenye steki)</strong></p> | **Hoja ya 5+ kwa mbinu** |
|
||||
|
||||
### Tupa Metadata ya ObjectiveC
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) ni chombo cha kupata Darasa za Objc kutoka kwa dylibs.
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) ni chombo cha kuchambua darasa la binari za Objective-C. Ukurasa wa github unataja dylibs lakini hii pia inafanya kazi na faili za kutekelezwa.
|
||||
```bash
|
||||
./dynadump dump /path/to/bin
|
||||
```
|
||||
Wakati wa kuandika, hii ni **mojawapo inayofanya kazi vizuri zaidi**.
|
||||
|
||||
### Swift
|
||||
#### Vifaa vya Kawaida
|
||||
```bash
|
||||
nm --dyldinfo-only /path/to/bin
|
||||
otool -ov /path/to/bin
|
||||
objdump --macho --objc-meta-data /path/to/bin
|
||||
```
|
||||
#### class-dump
|
||||
|
||||
Kwa binaries za Swift, kwa kuwa kuna utangamano wa Objective-C, mara nyingine unaweza kutoa maelezo kutumia [class-dump](https://github.com/nygard/class-dump/) lakini sio kila wakati.
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) ni chombo cha awali kinachozalisha tamko kwa ajili ya madarasa, makundi, na itifaki katika nambari iliyopangwa kwa ObjetiveC.
|
||||
|
||||
Ni cha zamani na hakijalishi hivyo huenda kisifanye kazi ipasavyo.
|
||||
|
||||
#### ICDump
|
||||
|
||||
[**iCDump**](https://github.com/romainthomas/iCDump) ni chombo cha sasa na cha msalaba-jukwaa cha kudondosha madarasa ya Objective-C. Ikilinganishwa na zana zilizopo, iCDump inaweza kufanya kazi kivyake bila kutegemea mfumo wa Apple na inaonyesha vifungo vya Python.
|
||||
```python
|
||||
import icdump
|
||||
metadata = icdump.objc.parse("/path/to/bin")
|
||||
|
||||
print(metadata.to_decl())
|
||||
```
|
||||
## Uchambuzi Statisi wa Swift
|
||||
|
||||
Kwa mafaili ya Swift, kwa kuwa kuna utangamano wa Objective-C, mara kwa mara unaweza kutoa tamko kutumia [class-dump](https://github.com/nygard/class-dump/) lakini sio kila wakati.
|
||||
|
||||
Kwa kutumia mistari ya amri ya **`jtool -l`** au **`otool -l`** ni rahisi kupata sehemu kadhaa zinazoanza na kiambishi cha **`__swift5`**:
|
||||
```bash
|
||||
|
@ -179,7 +224,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
|||
```
|
||||
Unaweza kupata habari zaidi kuhusu [**habari zilizohifadhiwa katika sehemu hizi katika chapisho hili la blogi**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
|
||||
|
||||
Zaidi ya hayo, **Binaries za Swift zinaweza kuwa na alama** (kwa mfano maktaba zinahitaji kuhifadhi alama ili kazi zake ziweze kuitwa). **Alama kwa kawaida zina habari kuhusu jina la kazi** na sifa kwa njia isiyovutia, hivyo ni muhimu sana na kuna "**wadondoa alama"** ambao wanaweza kupata jina halisi:
|
||||
Zaidi ya hayo, **Binaries za Swift zinaweza kuwa na alama** (kwa mfano maktaba hulazimika kuhifadhi alama ili kazi zake ziweze kuitwa). **Alama kwa kawaida huwa na habari kuhusu jina la kazi** na sifa kwa njia isiyovutia, hivyo ni muhimu sana na kuna "**wadondoa alama"** ambao wanaweza kupata jina halisi:
|
||||
```bash
|
||||
# Ghidra plugin
|
||||
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
||||
|
@ -187,36 +232,30 @@ https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
|||
# Swift cli
|
||||
swift demangle
|
||||
```
|
||||
### Binaries zenye kufungwa
|
||||
|
||||
* Angalia entropy kubwa
|
||||
* Angalia strings (kama hakuna string inayoeleweka, imefungwa)
|
||||
* Packer wa UPX kwa MacOS huzalisha sehemu inayoitwa "\_\_XHDR"
|
||||
|
||||
## Uchambuzi wa Kudumu
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba ili kudebugi binaries, **SIP inahitaji kuzimwa** (`csrutil disable` au `csrutil enable --without debug`) au nakala binaries kwenye folda ya muda na **ondoa saini** na `codesign --remove-signature <njia-ya-binary>` au ruhusu uchambuzi wa binary (unaweza kutumia [script hii](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Tafadhali elewa kwamba ili kudebugi binaries, **SIP inahitaji kuwa imelemazwa** (`csrutil disable` au `csrutil enable --without debug`) au kuiga binaries kwenye folda ya muda na **kuondoa saini** na `codesign --remove-signature <njia-ya-binary>` au kuruhusu uchambuzi wa binary (unaweza kutumia [script hii](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba ili **kuweza kufuatilia binaries za mfumo**, (kama vile `cloudconfigurationd`) kwenye macOS, **SIP lazima izimwe** (kuondoa saini pekee haitafanya kazi).
|
||||
Tafadhali elewa kwamba ili **kuinstrumenti binaries za mfumo**, (kama vile `cloudconfigurationd`) kwenye macOS, **SIP lazima iwe imelemazwa** (kuondoa tu saini haitafanya kazi).
|
||||
{% endhint %}
|
||||
|
||||
### APIs
|
||||
|
||||
macOS ina APIs zenye kuvutia zinazotoa taarifa kuhusu michakato:
|
||||
macOS ina APIs za kuvutia zinazotoa habari kuhusu michakato:
|
||||
|
||||
* `proc_info`: Hii ni moja kuu inayotoa taarifa nyingi kuhusu kila mchakato. Unahitaji kuwa na ruhusa ya mizizi kupata taarifa za michakato mingine lakini hauitaji ruhusa maalum au mach ports.
|
||||
* `libsysmon.dylib`: Inaruhusu kupata taarifa kuhusu michakato kupitia kazi zilizofunuliwa za XPC, hata hivyo, ni muhimu kuwa na ruhusa ya `com.apple.sysmond.client`.
|
||||
* `proc_info`: Hii ni moja kuu inayotoa habari nyingi kuhusu kila mchakato. Unahitaji kuwa na ruhusa ya mizizi kupata habari za michakato mingine lakini hauitaji ruhusa maalum au mach ports.
|
||||
* `libsysmon.dylib`: Inaruhusu kupata habari kuhusu michakato kupitia kazi zilizofunuliwa za XPC, hata hivyo, ni muhimu kuwa na ruhusa ya `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
|
||||
**Stackshotting** ni mbinu inayotumika kukamata hali ya michakato, ikiwa ni pamoja na mstari wa wito wa nyuzi zote zinazoendesha. Hii ni muhimu hasa kwa kudebugi, uchambuzi wa utendaji, na kuelewa tabia ya mfumo wakati fulani. Kwenye iOS na macOS, stackshotting inaweza kufanywa kwa kutumia zana na njia kadhaa kama vile zana **`sample`** na **`spindump`**.
|
||||
**Stackshotting** ni mbinu inayotumika kukamata hali ya michakato, ikiwa ni pamoja na mstari wa wito wa nyuzi zote zinazoendesha. Hii ni muhimu hasa kwa kudebugi, uchambuzi wa utendaji, na kuelewa tabia ya mfumo wakati fulani maalum. Kwenye iOS na macOS, stackshotting inaweza kufanywa kwa kutumia zana na njia kadhaa kama vile zana **`sample`** na **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Zana hii (`/usr/bini/ysdiagnose`) kimsingi inakusanya taarifa nyingi kutoka kwenye kompyuta yako ikitekeleza amri nyingi tofauti kama vile `ps`, `zprint`...
|
||||
Zana hii (`/usr/bini/ysdiagnose`) kimsingi inakusanya habari nyingi kutoka kwenye kompyuta yako ikitekeleza amri nyingi tofauti kama vile `ps`, `zprint`...
|
||||
|
||||
Inapaswa kutekelezwa kama **mizizi** na daemon `/usr/libexec/sysdiagnosed` ina ruhusa za kuvutia sana kama vile `com.apple.system-task-ports` na `get-task-allow`.
|
||||
|
||||
|
@ -224,19 +263,19 @@ Plist yake iko katika `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist
|
|||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Inafuta nyaraka za zamani kwenye /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Bandari maalum 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Kiolesura cha mode ya mtumiaji kupitia darasa la `Libsysdiagnose` Obj-C. Vigezo vitatu vinaweza kupitishwa kwenye dict (`compress`, `display`, `run`)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Kiolesura cha mode ya mtumiaji kupitia darasa la `Libsysdiagnose` Obj-C. Vigezo vitatu vinaweza kupitishwa kwenye neno (`compress`, `display`, `run`)
|
||||
|
||||
### Unified Logs
|
||||
|
||||
MacOS inazalisha magogo mengi ambayo yanaweza kuwa na manufaa sana wakati wa kukimbia programu jaribio kuelewa **inachofanya**.
|
||||
|
||||
Zaidi ya hayo, kuna baadhi ya magogo ambayo yatakuwa na lebo `<private>` kuficha baadhi ya taarifa **za mtumiaji** au **kompyuta**. Hata hivyo, inawezekana **kufunga cheti kufichua taarifa hizi**. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
Zaidi ya hayo, kuna baadhi ya magogo ambayo yatakuwa na lebo `<private>` kuficha baadhi ya habari **inayoweza kutambulika** ya **mtumiaji** au **kompyuta**. Hata hivyo, inawezekana **kufunga cheti kufichua habari hii**. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
#### Kifungu cha Kushoto
|
||||
|
||||
Kwenye kifungu cha kushoto cha hopper inawezekana kuona alama (**Labels**) za binary, orodha ya taratibu na kazi (**Proc**) na strings (**Str**). Hizi siyo strings zote lakini zile zilizofafanuliwa katika sehemu kadhaa za faili ya Mac-O (kama vile _cstring au_ `objc_methname`).
|
||||
Kwenye kifungu cha kushoto cha hopper inawezekana kuona alama (**Lebo**) za binary, orodha ya taratibu na kazi (**Proc**) na herufi (**Str**). Hizi si herufi zote lakini zile zilizofafanuliwa katika sehemu kadhaa za faili ya Mac-O (kama vile _cstring au_ `objc_methname`).
|
||||
|
||||
#### Kifungu cha Kati
|
||||
|
||||
|
@ -244,7 +283,7 @@ Kwenye kifungu cha kati unaweza kuona **msimbo uliopanguliwa**. Na unaweza kuona
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kwa kubofya kulia kwenye kitu cha msimbo unaweza kuona **marejeo kwa/na kutoka kwa kitu hicho** au hata kubadilisha jina lake (hii haitafanyi kazi kwenye pseudocode iliyopasuliwa):
|
||||
Kwa kubofya kulia kwenye kitu cha msimbo unaweza kuona **marejeo kwa/kutoka kwa kitu hicho** au hata kubadilisha jina lake (hii haifanyi kazi katika pseudokodi iliyopasuliwa):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -252,21 +291,21 @@ Zaidi ya hayo, kwenye **kati chini unaweza kuandika amri za python**.
|
|||
|
||||
#### Kifungu cha Kulia
|
||||
|
||||
Kwenye kifungu cha kulia unaweza kuona taarifa za kuvutia kama **historia ya urambazaji** (ili ujue jinsi ulivyofika kwenye hali ya sasa), **grafu ya wito** ambapo unaweza kuona **kazi zote zinazopiga simu kazi hii** na kazi zote ambazo **kazi hii inapiga simu**, na taarifa za **variables za eneo**.
|
||||
Kwenye kifungu cha kulia unaweza kuona habari muhimu kama **historia ya urambazaji** (ili ujue jinsi ulivyofika kwenye hali ya sasa), **grafu ya wito** ambapo unaweza kuona **kazi zote zinazopiga simu kazi hii** na kazi zote ambazo **kazi hii inapiga simu**, na habari za **mazingira ya ndani**.
|
||||
|
||||
### dtrace
|
||||
|
||||
Inaruhusu watumiaji kupata ufikivu kwenye programu kwa kiwango cha **chini sana** na hutoa njia kwa watumiaji kufuatilia **programu** na hata kubadilisha mtiririko wao wa utekelezaji. Dtrace hutumia **probes** ambazo zinawekwa kote kwenye kernel na ziko kwenye maeneo kama mwanzo na mwisho wa wito wa mfumo.
|
||||
Inaruhusu watumiaji kupata ufikivu kwenye programu kwa kiwango cha chini sana na hutoa njia kwa watumiaji kufuatilia **programu** na hata kubadilisha mtiririko wao wa utekelezaji. Dtrace hutumia **probes** ambazo zinawekwa kote kwenye kernel na ziko katika maeneo kama mwanzo na mwisho wa wito wa mfumo.
|
||||
|
||||
DTrace hutumia kazi ya **`dtrace_probe_create`** kuunda kipimo kwa kila wito wa mfumo. Vipimo hivi vinaweza kufyatuliwa kwenye **ingia na toka kwa kila wito wa mfumo**. Mwingiliano na DTrace hufanyika kupitia /dev/dtrace ambayo inapatikana kwa mtumiaji wa mizizi pekee.
|
||||
DTrace hutumia kazi ya **`dtrace_probe_create`** kuunda kipimo kwa kila wito wa mfumo. Probes hizi zinaweza kufyatuliwa kwenye **ingia na toka kwa kila wito wa mfumo**. Mwingiliano na DTrace hufanyika kupitia /dev/dtrace ambayo inapatikana kwa mtumiaji wa mizizi pekee.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ili kuwezesha Dtrace bila kuzima kabisa ulinzi wa SIP unaweza kutekeleza kwenye hali ya kupona: `csrutil enable --without dtrace`
|
||||
Ili kuwezesha Dtrace bila kulemaza kabisa ulinzi wa SIP unaweza kutekeleza kwenye hali ya kupona: `csrutil enable --without dtrace`
|
||||
|
||||
Unaweza pia **kudtrace** au **kudtruss** binaries ambazo **umekusanya**.
|
||||
{% endhint %}
|
||||
|
||||
Vipimo vilivyopo vya dtrace vinaweza kupatikana na:
|
||||
Probes zilizopo za dtrace zinaweza kupatikana na:
|
||||
```bash
|
||||
dtrace -l | head
|
||||
ID PROVIDER MODULE FUNCTION NAME
|
||||
|
@ -278,9 +317,9 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
```
|
||||
Jina la kichunguzi linajumuisha sehemu nne: mtoa huduma, moduli, kazi, na jina (`fbt:mach_kernel:ptrace:entry`). Ikiwa haujataja sehemu fulani ya jina, Dtrace itatumia sehemu hiyo kama kichujio.
|
||||
|
||||
Ili kusanidi DTrace kuchochea vichunguzi na kueleza ni hatua gani za kuchukua wanapochomwa, tutahitaji kutumia lugha ya D.
|
||||
Ili kusanidi DTrace kuamsha vichunguzi na kutaja ni hatua gani za kuchukua wanapochomwa, tutahitaji kutumia lugha ya D.
|
||||
|
||||
Maelezo zaidi na mifano zaidi inaweza kupatikana katika [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
Maelezo zaidi na mifano zaidi inapatikana katika [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
|
||||
#### Mifano
|
||||
|
||||
|
@ -336,31 +375,31 @@ dtruss -c -p 1000 #get syscalls of PID 1000
|
|||
```
|
||||
### kdebug
|
||||
|
||||
Ni kituo cha kufuatilia msingi. Miezi iliyodhibitishwa inaweza kupatikana katika **`/usr/share/misc/trace.codes`**.
|
||||
Hii ni kituo cha kufuatilia kernel. Miezi iliyodhibitishwa inaweza kupatikana katika **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Vyombo kama vile `latency`, `sc_usage`, `fs_usage` na `trace` hutumia hii ndani.
|
||||
Vyombo kama `latency`, `sc_usage`, `fs_usage` na `trace` hutumia hii ndani.
|
||||
|
||||
Kuongeza na `kdebug` `sysctl` hutumiwa juu ya `kern.kdebug` jina la nafasi na MIBs za kutumia zinaweza kupatikana katika `sys/sysctl.h` zikiwa na kazi zilizoanzishwa katika `bsd/kern/kdebug.c`.
|
||||
Kuongeza na `kdebug` `sysctl` hutumiwa kupitia `kern.kdebug` na MIBs za kutumia zinaweza kupatikana katika `sys/sysctl.h` zikiwa na kazi zilizotekelezwa katika `bsd/kern/kdebug.c`.
|
||||
|
||||
Kuwasiliana na kdebug na mteja wa desturi kawaida hatua hizi:
|
||||
Kuwasiliana na kdebug na mteja wa desturi hatua hizi kawaida hufuatwa:
|
||||
|
||||
* Ondoa mipangilio iliyopo na KERN\_KDSETREMOVE
|
||||
* Weka mfuatilio na KERN\_KDSETBUF na KERN\_KDSETUP
|
||||
* Tumia KERN\_KDGETBUF kupata idadi ya vipengele vya kawaida
|
||||
* Pata mteja wako mwenyewe kutoka kwa mfuatilio na KERN\_KDPINDEX
|
||||
* Weka ufuatiliaji na KERN\_KDSETBUF na KERN\_KDSETUP
|
||||
* Tumia KERN\_KDGETBUF kupata idadi ya vipengele vya buffer
|
||||
* Pata mteja wako kutoka kwa ufuatiliaji na KERN\_KDPINDEX
|
||||
* Wezesha ufuatiliaji na KERN\_KDENABLE
|
||||
* Soma kifaa kwa kuita KERN\_KDREADTR
|
||||
* Kulinganisha kila mchakato na mchakato wake piga simu KERN\_KDTHRMAP.
|
||||
* Soma buffer kwa kuita KERN\_KDREADTR
|
||||
* Kulinganisha kila mchakato na mchakato wake kwa kuita KERN\_KDTHRMAP.
|
||||
|
||||
Ili kupata habari hii inawezekana kutumia zana ya Apple **`trace`** au zana ya desturi [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
|
||||
|
||||
**Tafadhali kumbuka kuwa Kdebug inapatikana kwa mteja 1 kwa wakati mmoja.** Kwa hivyo zana moja tu yenye nguvu ya k-debug inaweza kutekelezwa wakati huo huo.
|
||||
**Tafadhali kumbuka kuwa Kdebug inapatikana kwa mteja 1 kwa wakati mmoja.** Kwa hivyo zana moja tu yenye nguvu ya k-debug inaweza kutekelezwa kwa wakati mmoja.
|
||||
|
||||
### ktrace
|
||||
|
||||
`ktrace_*` APIs hutoka kwa `libktrace.dylib` ambayo hufunga zile za `Kdebug`. Kisha, mteja anaweza tu kupiga simu `ktrace_session_create` na `ktrace_events_[single/class]` kuweka maingiliano kwenye nambari maalum na kisha anza na `ktrace_start`.
|
||||
`ktrace_*` APIs hutoka kwa `libktrace.dylib` ambayo hufunika zile za `Kdebug`. Kisha, mteja anaweza tu kuita `ktrace_session_create` na `ktrace_events_[single/class]` kuweka maingiliano kwenye miezi maalum na kisha kuanza na `ktrace_start`.
|
||||
|
||||
Unaweza kutumia hata **SIP ikiwa imewashwa**
|
||||
Unaweza kutumia hii hata na **SIP imewashwa**
|
||||
|
||||
Unaweza kutumia kama wateja zana ya matumizi `ktrace`:
|
||||
```bash
|
||||
|
@ -372,19 +411,19 @@ Au `tailspin`.
|
|||
|
||||
Hii hutumika kufanya uchambuzi wa kiwango cha kernel na imejengwa kwa kutumia simu za `Kdebug`.
|
||||
|
||||
Kimsingi, kipimo cha jumla `kernel_debug_active` huchunguzwa na ikisetiwa huita `kperf_kdebug_handler` na simu ya `Kdebug` na anwani ya fremu ya kernel inayopiga simu. Ikiwa simu ya `Kdebug` inalingana na moja iliyochaguliwa, inapata "vitendo" vilivyowekwa kama ramani (angalia `osfmk/kperf/action.h` kwa chaguo).
|
||||
Kimsingi, kivinjari cha jumla `kernel_debug_active` huchunguzwa na ikisetiwa huita `kperf_kdebug_handler` na `Kdebug` nambari na anwani ya fremu ya kernel inayopiga simu. Ikiwa nambari ya `Kdebug` inalingana na moja iliyochaguliwa inapata "vitendo" vilivyowekwa kama ramani (angalia `osfmk/kperf/action.h` kwa chaguo).
|
||||
|
||||
Kperf ina pia jedwali la sysctl MIB: (kama mzizi) `sysctl kperf`. Nambari hizi zinaweza kupatikana katika `osfmk/kperf/kperfbsd.c`.
|
||||
Kperf ina jedwali la sysctl MIB pia: (kama root) `sysctl kperf`. Nambari hizi zinaweza kupatikana katika `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Zaidi ya hayo, sehemu ya Kperfs inapatikana katika `kpc`, ambayo hutoa habari kuhusu vigezo vya utendaji wa mashine.
|
||||
Zaidi ya hayo, sehemu ya Kperfs inapatikana katika `kpc`, ambayo hutoa habari kuhusu vipimo vya utendaji wa mashine.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) ni chombo chenye manufaa sana kuchunguza vitendo vinavyohusiana na mchakato ambavyo mchakato unafanya (kwa mfano, kufuatilia mchakato mpya ambao mchakato unazalisha).
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) ni chombo cha kufuatilia vitendo vinavyohusiana na mchakato ambavyo mchakato unafanya (kwa mfano, kufuatilia mchakato mpya ambao mchakato unazalisha).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) ni chombo cha kuchapisha mahusiano kati ya michakato.\
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) ni chombo kinachochapisha mahusiano kati ya michakato.\
|
||||
Unahitaji kufuatilia mac yako na amri kama **`sudo eslogger fork exec rename create > cap.json`** (terminal inayoanzisha hii inahitaji FDA). Kisha unaweza kupakia json katika chombo hiki kuona mahusiano yote:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
@ -395,11 +434,11 @@ Unahitaji kufuatilia mac yako na amri kama **`sudo eslogger fork exec rename cre
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) ni chombo cha GUI kinachofanana na watumiaji wa Windows wanaweza kufahamu kutoka kwa _Procmon_ ya Microsoft Sysinternal. Chombo hiki kuruhusu kuanza na kuacha kurekodi aina mbalimbali za matukio, kuruhusu kuchuja matukio haya kwa makundi kama vile faili, mchakato, mtandao, n.k., na hutoa utendaji wa kuhifadhi matukio yaliyorekodiwa kwa muundo wa json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) ni chombo cha GUI kinachofanana na watumiaji wa Windows wanaweza kujua kutoka kwa _Procmon_ ya Microsoft Sysinternal. Chombo hiki kuruhusu kuanza na kuacha kurekodi aina mbalimbali za matukio, kuruhusu kuchuja matukio haya kwa makundi kama vile faili, mchakato, mtandao, n.k., na hutoa utendaji wa kuhifadhi matukio yaliyorekodiwa kwa muundo wa json.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) ni sehemu ya zana za Developer za Xcode - hutumika kwa kufuatilia utendaji wa programu, kutambua uvujaji wa kumbukumbu na kufuatilia shughuli za mfumo wa faili.
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) ni sehemu ya zana za Developer za Xcode - hutumika kufuatilia utendaji wa programu, kutambua uvujaji wa kumbukumbu na kufuatilia shughuli za mfumo wa faili.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1138).png>)
|
||||
|
||||
|
@ -417,7 +456,7 @@ Pia huchunguza michakato ya faili dhidi ya **virustotal** na kuonyesha habari ku
|
|||
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
||||
Katika [**chapisho hili la blogi**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano jinsi ya **kudebugi daemon inayotumia** **`PT_DENY_ATTACH`** kuzuia uchunguzi hata kama SIP ilikuwa imelemazwa.
|
||||
Katika [**chapisho hili la blogi**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano jinsi ya **kudebugi daemon inayotumia** **`PT_DENY_ATTACH`** kuzuia kudebugi hata kama SIP ilikuwa imelemazwa.
|
||||
|
||||
### lldb
|
||||
|
||||
|
@ -436,10 +475,10 @@ settings set target.x86-disassembly-flavor intel
|
|||
Ndani ya lldb, dumpisha mchakato kwa kutumia `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Amri</strong></td><td><strong>Maelezo</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kuanza utekelezaji, ambao utaendelea bila kikomo mpaka kivinjari kikome au mchakato ukome.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kuendelea na utekelezaji wa mchakato uliopo kwenye uchunguzi.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Kutekeleza maagizo ijayo. Amri hii itaruka wito wa kazi.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Kutekeleza maagizo ijayo. Tofauti na amri ya nexti, amri hii itaingia kwenye wito wa kazi.</td></tr><tr><td><strong>finish (f)</strong></td><td>Kutekeleza maagizo mengine kwenye kazi ya sasa ("frame") kurudi na kusimamisha.</td></tr><tr><td><strong>control + c</strong></td><td>Kusitisha utekelezaji. Ikiwa mchakato umekuwa ukitekelezwa (r) au kuendelea (c), hii itasababisha mchakato kusimama ...popote ulipo kwenye utekelezaji.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Wito wowote wa kazi unaoitwa main</p><p>b <binname>`main #Kazi kuu ya bin</p><p>b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyotajwa</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Orodha ya vituo vya kuvunja</p><p>br e/dis <num> #Wezesha/lemaza kituo cha kuvunja</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Pata msaada wa amri ya kituo cha kuvunja</p><p>help memory write #Pata msaada wa kuandika kwenye kumbukumbu</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>Onyesha kumbukumbu kama mnyororo ulio na mwisho wa null.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>Onyesha kumbukumbu kama maagizo ya mkusanyiko.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>Onyesha kumbukumbu kama baiti.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Hii itachapisha kitu kinachotajwa na paramu</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>Tafadhali kumbuka kuwa APIs au njia nyingi za Objective-C za Apple hurudisha vitu, na hivyo inapaswa kuonyeshwa kupitia amri ya "print object" (po). Ikiwa po haizalishi matokeo yanayofaa tumia <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>kumbukumbu soma 0x000....<br>kumbukumbu soma $x0+0xf2a<br>kumbukumbu andika 0x100600000 -s 4 0x41414141 #Andika AAAA kwenye anwani hiyo<br>kumbukumbu andika -f s $rip+0x11f+7 "AAAA" #Andika AAAA kwenye anwani</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disas kazi ya sasa</p><p>dis -n <funcname> #Disas kazi</p><p>dis -n <funcname> -b <basename> #Disas kazi<br>dis -c 6 #Disas mistari 6<br>dis -c 0x100003764 -e 0x100003768 # Kutoka anwani moja hadi nyingine<br>dis -p -c 4 # Anza kwenye anwani ya sasa ya kuchambua</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Angalia safu ya 3 katika x1 reg</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Amri</strong></td><td><strong>Maelezo</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kuanza utekelezaji, ambao utaendelea bila kikwazo mpaka kivinjari kikome au mchakato ukome.</td></tr><tr><td><strong>continue (c)</strong></td><td>Kuendelea na utekelezaji wa mchakato uliopo kwenye uchunguzi.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Kutekeleza maagizo ijayo. Amri hii itaruka wito wa kazi.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Kutekeleza maagizo ijayo. Tofauti na amri ya nexti, amri hii itaingia kwenye wito wa kazi.</td></tr><tr><td><strong>finish (f)</strong></td><td>Kutekeleza maagizo mengine kwenye kazi ya sasa ("frame") na kusimamisha.</td></tr><tr><td><strong>control + c</strong></td><td>Kusitisha utekelezaji. Ikiwa mchakato umekuwa ukitekelezwa (r) au kuendelea (c), hii itasababisha mchakato kusimama ...popote ulipo kwenye utekelezaji.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Wito wowote wa kazi unaoitwa main</p><p>b <binname>`main #Kazi kuu ya bin</p><p>b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyotajwa</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Orodha ya vituo vya kusitisha</p><p>br e/dis <num> #Wezesha/lemaza kituo cha kusitisha</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Pata msaada wa amri ya kituo cha kusitisha</p><p>help memory write #Pata msaada wa kuandika kwenye kumbukumbu</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">muundo</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <anwani ya reg/kumbukumbu></strong></td><td>Onyesha kumbukumbu kama mstari ulio na sifuri.</td></tr><tr><td><strong>x/i <anwani ya reg/kumbukumbu></strong></td><td>Onyesha kumbukumbu kama maagizo ya mkusanyiko.</td></tr><tr><td><strong>x/b <anwani ya reg/kumbukumbu></strong></td><td>Onyesha kumbukumbu kama baiti.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Hii itachapisha kitu kinachotajwa na paramu</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>Taarifa kwamba APIs au njia za Objective-C za Apple kwa kawaida hurejesha vitu, na hivyo inapaswa kuonyeshwa kupitia amri ya "print object" (po). Ikiwa po haizalishi matokeo yanayofaa tumia <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>kumbukumbu soma 0x000....<br>kumbukumbu soma $x0+0xf2a<br>kumbukumbu andika 0x100600000 -s 4 0x41414141 #Andika AAAA kwenye anwani hiyo<br>kumbukumbu andika -f s $rip+0x11f+7 "AAAA" #Andika AAAA kwenye anwani</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disas kazi ya sasa</p><p>dis -n <jina la kazi> #Disas kazi</p><p>dis -n <jina la kazi> -b <jina la msingi> #Disas kazi<br>dis -c 6 #Disas mistari 6<br>dis -c 0x100003764 -e 0x100003768 # Kutoka anwani moja hadi nyingine<br>dis -p -c 4 # Anza kwenye anwani ya sasa ya kuchambua</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Angalia safu ya 3 katika x1 reg</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Unapoitisha **`objc_sendMsg`** function, **rsi** register inashikilia **jina la njia** kama mnyororo ulio na mwisho wa null ("C"). Ili kuchapisha jina kupitia lldb fanya:
|
||||
Unapoitisha **`objc_sendMsg`** function, **rsi** register inashikilia **jina la njia** kama mstari wa sifuri ("C"). Ili kuchapisha jina kupitia lldb fanya:
|
||||
|
||||
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
|
||||
|
@ -458,9 +497,9 @@ Unapoitisha **`objc_sendMsg`** function, **rsi** register inashikilia **jina la
|
|||
* Baadhi ya programu hasidi pia zinaweza **kugundua** ikiwa mashine ni ya **VMware** kulingana na anwani ya MAC (00:50:56).
|
||||
* Pia inawezekana kugundua ikiwa mchakato unachunguzwa na msimbo rahisi kama huu:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //mchakato unachunguzwa }`
|
||||
* Inaweza pia kuita wito wa mfumo wa **`ptrace`** na bendera ya **`PT_DENY_ATTACH`**. Hii **inazuia** kivinjari kutua na kufuatilia.
|
||||
* Inaweza pia kuita wito wa mfumo wa **`ptrace`** na bendera ya **`PT_DENY_ATTACH`**. Hii **inazuia** kideb**u**ga kushikilia na kufuatilia.
|
||||
* Unaweza kuangalia ikiwa **`sysctl`** au **`ptrace`** kazi inaingizwa (lakini programu hasidi inaweza kuipakia kwa njia ya dinamiki)
|
||||
* Kama ilivyobainishwa katika andishi hili, “[Kushinda Mbinu za Kuzuia-Uchunguzi: toleo za macOS za ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
* Kama ilivyobainishwa katika andiko hili, “[Kushinda Mbinu za Kuzuia-Uchunguzi: toleo la macOS la ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Ujumbe Mchakato # ulitoka na **hali = 45 (0x0000002d)** kawaida ni ishara wazi kwamba lengo la uchunguzi linatumia **PT\_DENY\_ATTACH**_”
|
||||
## Kuhifadhi Core
|
||||
|
||||
|
@ -470,17 +509,17 @@ Core dumps huundwa ikiwa:
|
|||
- Ikiwa mchakato haukuwa suid/sgid au `kern.sugid_coredump` ni 1 (kwa chaguo-msingi ni 0)
|
||||
- Kikomo cha `AS_CORE` kuruhusu operesheni. Inawezekana kuzuia uundaji wa core dumps kwa kuita `ulimit -c 0` na kuziruhusu tena kwa `ulimit -c unlimited`.
|
||||
|
||||
Katika kesi hizo, core dumps huundwa kulingana na `kern.corefile` sysctl na kuhifadhiwa kawaida katika `/cores/core/.%P`.
|
||||
Katika kesi hizo core dumps huundwa kulingana na `kern.corefile` sysctl na kuhifadhiwa kawaida katika `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **anauchambua michakato inayopasuka na kuokoa ripoti ya kupasuka kwa diski**. Ripoti ya kupasuka ina habari ambayo inaweza **kusaidia mwandishi wa programu kutambua** sababu ya kupasuka.\
|
||||
Kwa maombi na michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mtumiaji mmoja**, ReportCrash inaendeshwa kama LaunchAgent na kuokoa ripoti za kupasuka kwenye `~/Library/Logs/DiagnosticReports/` ya mtumiaji\
|
||||
Kwa daemons, michakato mingine **inayoendeshwa katika muktadha wa uzinduzi wa mfumo** na michakato mingine yenye mamlaka, ReportCrash inaendeshwa kama LaunchDaemon na kuokoa ripoti za kupasuka katika `/Library/Logs/DiagnosticReports` ya mfumo
|
||||
ReportCrash **anauchambua michakato inayopasuka na kuokoa ripoti ya kupasuka kwa diski**. Ripoti ya kupasuka ina habari ambazo zinaweza **kusaidia mwandishi wa programu kutambua** sababu ya kupasuka.\
|
||||
Kwa maombi na michakato mingine **inayoendesha katika muktadha wa uzinduzi wa mtumiaji**, ReportCrash inaendeshwa kama LaunchAgent na kuokoa ripoti za kupasuka kwenye `~/Library/Logs/DiagnosticReports/` ya mtumiaji\
|
||||
Kwa daemons, michakato mingine **inayoendesha katika muktadha wa uzinduzi wa mfumo** na michakato mingine yenye mamlaka, ReportCrash inaendeshwa kama LaunchDaemon na kuokoa ripoti za kupasuka kwenye `/Library/Logs/DiagnosticReports` ya mfumo
|
||||
|
||||
Ikiwa una wasiwasi kuhusu ripoti za kupasuka **kutumwa kwa Apple** unaweza kuzizima. Vinginevyo, ripoti za kupasuka zinaweza kuwa na manufaa **kutambua jinsi server ilivyopasuka**.
|
||||
Ikiwa una wasiwasi kuhusu ripoti za kupasuka **zikitumwa kwa Apple** unaweza kuzizima. Vinginevyo, ripoti za kupasuka zinaweza kuwa na manufaa **kutambua jinsi server ilivyopasuka**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -494,15 +533,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
|
|||
|
||||
Wakati wa kufanya fuzzing kwenye MacOS ni muhimu kuhakikisha Mac haipati usingizi:
|
||||
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, System Preferences
|
||||
* systemsetup -setsleep Kamwe
|
||||
* pmset, Mapendeleo ya Mfumo
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
#### Kukatisha SSH
|
||||
|
||||
Ikiwa unafanya fuzzing kupitia uhusiano wa SSH ni muhimu kuhakikisha kikao hakitakwenda siku nzima. Kwa hivyo badilisha faili ya sshd\_config na:
|
||||
Ikiwa unafanya fuzzing kupitia uhusiano wa SSH ni muhimu kuhakikisha kikao hakitaisha. Kwa hivyo badilisha faili ya sshd\_config kwa:
|
||||
|
||||
* TCPKeepAlive Yes
|
||||
* TCPKeepAlive Ndiyo
|
||||
* ClientAliveInterval 0
|
||||
* ClientAliveCountMax 0
|
||||
```bash
|
||||
|
@ -518,8 +557,6 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
{% endcontent-ref %}
|
||||
|
||||
### Kuhesabu Michakato ya Mtandao
|
||||
|
||||
Hii ni ya kuvutia kugundua michakato inayosimamia data ya mtandao:
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -608,8 +645,8 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue