niedziela, 22 lutego 2015

Logowanie uderzeń klawiszy w komputerach Lenovo

W ubiegłym tygodniu ujawniona została informacja dotycząca oprogramowania adware SuperFish preinstalowanego w niektórych modelach komputerów Lenovo. Oprogramowanie z wykorzystaniem techniki MitM ma dostęp do szyfrowanych połączeń https. Możliwe jest „monitorowanie” a także podmiana danych przesyłanych przez użytkowników za pomocą niektórych przeglądarek internetowych.

Przy tej okazji opiszemy poniżej inną „ciekawą” funkcję jednej z dodatkowych aplikacji preinstalowanych razem z komputerami firmy Lenovo (w opisanym tutaj przypadku ThinkPad). Dotyczy ona aplikacji USB Enhanced Performance Keyboard (wersja 2.0.1.9).


Najprawdopodobniej przez pomyłkę instalowana jest aplikacja, która rejestruje wszystkie uderzenia klawiszy użytkowników. Uważamy, że może to być „niedoparzenie” gdyż kody ascii poszczególnych klawiszy rejestrowane są za pomocą funkcji API OutputDebugString().

Czy jest to zagrożenie? Tak, gdyż dowolna aplikacja może odczytywać te znaki i w ten sposób może powstać skuteczny keylogger. Keylogger składający się z dwóch modułów. Pierwszego modułu już zainstalowanego i uruchomionego na komputerach oraz drugiego który można w dowolnym momencie uruchomić.

Nie analizowaliśmy szczegółowo wszystkich preinstalowanych aplikacji Lenovo ale nie stwierdziliśmy aby którykolwiek z uruchomionych procesów Lenovo w czasie rzeczywistym zapisywał na dysku bądź przesyłał przez sieć komunikaty generowane przez OutputDebugString().

Poniżej kilka technicznych informacji dotyczących aplikacji. Proces, który uruchamia rejestrowanie klawiszy to Skdaemon.exe.


Przy uruchomieniu aplikacji (uruchamiana z HKLM\Software\Microsoft\Windows\CurrentVersion\Run) ładowana jest biblioteka SKHOOKS.DLL (wersja 1.0.0.1).  Biblioteka za pomocą funkcji SetWindowsHookExA() rejestruje procedurę przechwytującą, która monitoruje zdarzenia  dotyczące klawiatury (idHook = 0xD, WH_KEYBOARD_LL).

 

Poniżej fragment funkcji sub_10001AA0(), która jest wywoływana przy każdej wiadomości dotyczącej monitorowania uderzeń klawiszy.


vkCode zawiera kod ascii wybieranych przez użytkownika klawiszy klawiatury komputera.

W jaki sposób odczytywać komunikaty z funkcji OutputDebugStringA()? Możemy wykorzystać narzędzie DebugView z pakietu Sysinternals. Można też samemu napisać prostą aplikacje do odczytu bufora zawierającego komunikaty funkcji OutputDebugString(). Aplikacja taka musi:
  1. Utworzyć Mutex DBWinMutex
  2. Utworzyć dwa zdarzenia DBWIN_BUFFER_READY oraz DBWIN_DATA_READY
  3. Odczytać współdzielony segment pamięci zawierający bufor z komunikatem z funkcji OutputDebugString().
Poniżej efekt działania takiej aplikacji. Link do kodu źródłowego podaliśmy poniżej. vkCode zawiera znaki ascii klawiszy.


Aktualizacja 8 marca 2015

Załączamy treść informacji otrzymanej 6 marca od firmy Lenovo.

"Oświadczenie:

W oprogramowaniu Lenovo USB Enhanced Performance Keyboard (73p2620), preinstalowanym na niektórych komputerach, występuje znany problem polegający na tym, że w pliku wykonywalnym, przeznaczonym do produkcji ,pozostawiono przypadkowo kod do debugowania. Firma Lenovo udostępniła aktualizację, która usuwa funkcję generowania danych wyjściowych debugowania. Ta aktualizacja będzie udostępniana za pośrednictwem usługi System Update (np. TVSU) od 4 marca 2015 r. na wszystkich komputerach Lenovo, których to dotyczy.

Opis:
We wszystkich poprzednich wersjach tego oprogramowania występują pozostałości kodu debugowania, a oprogramowanie to było preinstalowane na niektórych komputerach Lenovo od wiosny 2014 r. Ta luka umożliwia osobom mającym dostęp do systemu przechwytywanie poufnych danych, takich jak dane logowania lub dane osobowe. Tej luki nie można wykorzystać zdalnie, a użytkownik musi uprzednio uzyskać dostęp do systemu.
Oprogramowanie to włącza aplikację „SKDaemon.exe”, która uruchamia się, gdy użytkownik loguje się w systemie Windows. Program wyszukuje klawisze dostępu naciskane w celu wykonania poleceń Dalej i Wstecz w przeglądarce Internet Explorer. Po programie tym przypadkowo pozostało w kodzie wywołanie OutputDebugString, które w sposób nieplanowany umożliwia innym lokalnym użytkownikom, stosującym specjalistyczne narzędzia do systemu Windows, poznawanie klawiszy naciskanych przez innych użytkowników."

Źródła:
[1] https://github.com/Prevenity/debug_monitor
[2] http://www.unixwiz.net/techtips/outputdebugstring.html
[3] https://technet.microsoft.com/en-us/sysinternals/bb896647
[4] File: Skdaemon.exe, MD5: 8AAADD581467160C81C0FF1ED999AC84
[5] File: SKHOOKS.DLL, MD5: 433D6EDF06A4D6D1DD56F4BE7F96D518