Agencja Bezpieczeństwa Narodowego oraz Federalne Biuro Śledcze USA , według którego 85. głównym ośrodkiem specjalnej służby (85 GЦСС ГРУ) wykorzystuje zestaw złośliwego oprogramowania o nazwie „Drewno”. W skład „Drewna” wchodzą rootkit w postaci modułu jądra Linux, narzędzie do przesyłania plików i przekierowywania portów sieciowych oraz serwer zarządzający. Część kliencka może pobierać i przesyłać pliki, wykonywać dowolne polecenia w imieniu użytkownika root oraz przekierowywać porty sieciowe na inne węzły w sieci.
Serwer zarządzający „Drewno” przyjmuje argument wiersza poleceń wskazujący ścieżkę do pliku konfiguracyjnego w formacie JSON:
{
„db_host” : „”,
„db_port” : „”,
„db_db” : „”,
„db_user” : „”,
„db_password” : „”,
„lport” : „”,
„lhost” : „”,
„ping_sec” : „”,
„priv_key_file” : „”,
„phrase” : „”
}
Jako backend używana jest baza danych MySQL. Do łączenia z klientami stosowany jest protokół WebSocket.
Klient posiada wbudowaną konfigurację, w tym adres URL serwera, jego klucz publiczny RSA, nazwę użytkownika i hasło. Po zainstalowaniu rootkita konfiguracja jest zapisywana w formie pliku tekstowego w formacie JSON, który jest ukrywany przed systemem przez moduł jądra „Drewno”:
{
„id” : „cbcf6abc-466b-11e9-853b-000c29cb9f6f”,
„key”: „Y2xpZW50a2V5”
}
Tutaj „id” to unikalny identyfikator nadany przez serwer, w którym ostatnie 48 bitów odpowiada adresowi MAC interfejsu sieciowego serwera. Parametr „key” domyślnie jest zakodowany w formacie base64 jako ciąg „clientkey”, który jest wykorzystywany przez serwer podczas wstępnego handshake. Ponadto plik konfiguracyjny może zawierać informacje o ukrywanych plikach, modułach i portach sieciowych:
{
„id” : „6fa41616-aff1-11ea-acd5-000c29283bbc”,
„key”: „Y2xpZW50a2V5”,
„monitor” : {
„file” : [
{
„active” : „true”,
„id” : „d9dc492b-5a32-8e5f-0724-845aa13fff98”,
„mask” : „testfile1”
}
],
„module” : [
{
„active” : „true”,
„id” : „48a5e9d0-74c7-cc17-2966-0ea17a1d997a”,
„mask” : „testmodule1”
}
],
„net” : [
{
„active” : „true”,
„id” : „4f355d5d-9753-76c7-161e-7ef051654a2b”,
„port” : „12345”,
„protocol” : „tcp”
}
]
}
}
Kolejny komponent „Drewna” to agent, którego plik konfiguracyjny zawiera informacje potrzebne do połączenia z serwerem:
{
„client_login” : „user123”,
„client_pass” : „pass4567”,
„clientid” : „e391847c-bae7-11ea-b4bc-000c29130b71”,
„clientkey_base64” : „Y2xpZW50a2V5”,
„pub_key_file” :„public_key”,
„server_host” : „192.168.57.100”,
„server_port” :„45122″
«server_uri» :»/ws»
}
Pola «clientid» i «clientkey_base64» początkowo nie są obecne, są dodawane po wstępnej rejestracji na serwerze.
Po zainstalowaniu wykonują się następujące operacje:
- ładowany jest moduł jądra, który rejestruje haki dla wywołań systemowych;
- klient rejestruje się w module jądra;
- moduł jądra ukrywa działający proces klienta oraz jego plik wykonywalny na dysku.
Do interakcji klienta z modułem jądra używane jest pseudourządzenie, na przykład /dev/zero. Moduł jądra dokonuje analizy wszystkich danych zapisywanych w urządzeniu, a w celu przesłania w przeciwnym kierunku wysyła klientowi sygnał SIGUSR1, po czym ten odczytuje dane z tego samego urządzenia.
Aby odkryć «Drowara», można użyć analizy ruchu sieciowego za pomocą NIDS (złośliwa aktywność sieciowa w samym zainfekowanym systemie nie może być wykryta, ponieważ moduł jądra ukrywa używane przez siebie gniazda sieciowe, reguły netfilter i pakiety, które mogłyby zostać przechwycone przez gniazda raw). W systemie, w którym zainstalowano «Drowara», można wykryć moduł jądra, wysyłając mu polecenie ukrycia pliku:
touch testfile
echo “ASDFZXCV:hf:testfile” > /dev/zero
ls
Utworzony plik «testfile» staje się niewidoczny.
Inne metody wykrywania obejmują analizę pamięci i zawartości dysku. Aby zapobiec infekcji, zaleca się użycie obowiązkowego sprawdzania podpisów jądra i modułów, dostępnego od wersji jądra linux 3.7.
Raport zawiera zasady Snort do wykrywania aktywności sieciowej «Drowara» oraz zasady Yara do wykrywania jego komponentów.
Przypominamy, że 85 GZSS GRU (w/c 26165) jest powiązany z grupą , odpowiedzialną za liczne cyberataki.
Źródło: opennet.ru
