Войти

Показать полную графическую версию : [решено] Ведение лога запускаемых программ


rosalin
01-10-2014, 14:31
Ребята , в домене необходимо контролировать активность программ , какая когда с каким ключом кем была запущена....

есть неплохой скрипт , не очень разбираюсь vb помогите довести до ума

Option Explicit

Const ForAppending = 8
Const TristateTrue = -1

Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource
Dim objSWbemObjectEx
Dim objFSO
Dim objTS

strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process'")

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Do
Set objSWbemObjectEx = objSWbemEventSource.NextEvent()

Set objTS = objFSO.OpenTextFile("c:\MyLog.txt", ForAppending, True, TristateTrue)

With objSWbemObjectEx.TargetInstance
objTS.WriteLine Now() & " " & _
.Name & " " & _
.ProcessID & " " & _
.ParentProcessID & " " & _
.ExecutablePath & " " & _
.CommandLine
End With

objTS.Close

Set objTS = Nothing
Loop

Set objFSO = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0

Iska
01-10-2014, 14:50
Ребята , в домене необходимо контролировать активность программ , какая когда с каким ключом кем была запущена.... »
Глобальная цель какова?

помогите довести до ума »
Что там «доводить»?

rosalin
01-10-2014, 15:08
Ситуация.
Бухгалтер открыла письмо на почте "Исковое заявление". Во вложении был файл Исковое.doc.exe
Он создал в папке С:/tmp несколько файлов, один из которых с названием Rar.exe заархивировал все файлы в отдельные архивы с паролем, и в каждой папке оставил текстовый файл с требованием денег за разархивацию.

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

этот скриптик помог бы еще больше.

в нем не понятно как назначить лог именно по именам пользователей домена , сейчас пишет все в статический путь c:\MyLog.txt

Iska
01-10-2014, 16:37
rosalin, я Вас понял. Но тут надо запрещать открытие вложений в виде исполняемых файлов, либо ещё жёстче — вводить Software Restriction Policies.

в нем не понятно как назначить лог именно по именам пользователей домена , сейчас пишет все в статический путь c:\MyLog.txt »
А Вам как бы хотелось?

rosalin
01-10-2014, 16:51
Ну не очень понял как скрипт работает , но в идеале если это получиться написать скрипт кинуть в logon и пусть при входе юзеров, для каждого пишет действия активности в свой файлик куда нибудь в папочку подальше, файлики разбить по дате создания

PS Привел один из примеров, почему не совсем подходит рекомендация, потому как был еще случай подбора пароля по rdp и потом пытались выполнять разные команды , но что то удалось что то нет

вообщем подобный лог будет не лишний для принятия контрмер

Iska
02-10-2014, 05:28
Лог Вам ничем тут не поможет. Меры должны быть превентивными. Какими — я изложил выше. Подбор паролей должен пресекаться на корню той же групповой политикой — в «Политика блокировки учётной записи». «Родная» административная учётная запись «Администратор/Administrator» должна быть переименована и/или отключена.

кинуть в logon и пусть при входе юзеров, для каждого пишет »
Не в Logon. В Startup. Иначе будете иметь столько же одинаковых логов, сколько будет зарегистрированных в данный момент на машине учётных записей.

Пробуйте:
Option Explicit

Const ForAppending = 8
Const TristateTrue = -1
Const TemporaryFolder = 2


Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource
Dim objSWbemObjectEx

Dim objFSO
Dim objTS

Dim strPath

Dim strDomain
Dim strUser


strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process'")

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strPath = objFSO.BuildPath(objFSO.GetSpecialFolder(TemporaryFolder), "Application activity.log")

Do
Set objSWbemObjectEx = objSWbemEventSource.NextEvent()

Set objTS = objFSO.OpenTextFile(strPath, ForAppending, True, TristateTrue)

With objSWbemObjectEx.TargetInstance
If .GetOwner(strUser, strDomain) <> 0 Then
strDomain = "Unkhown"
strUser = "Unkhown"
End If

objTS.WriteLine _
Now() & vbTab & _
.Name & vbTab & _
.ProcessID & vbTab & _
.ParentProcessID & vbTab & _
.ExecutablePath & vbTab & _
.CommandLine & vbTab & _
strDomain & "\" & strUser
End With

objTS.Close

Set objTS = Nothing
Loop

Set objFSO = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0

rosalin
02-10-2014, 08:49
Cцeнapий:
Cтpoкa: 42
Cимвoл: 3
Oшибкa: He нaйдeн
Кoд: 80041002
Иcтoчник: SWbemObjectEx

Iska
02-10-2014, 11:31
Код не меняли?

Запуск так:
В Startup. »
делали или как-то иначе?

rosalin
02-10-2014, 11:50
Код не менял вообще , запускал простым кликом, насчет переменных домен ни где прописывать не надо ?

Iska
02-10-2014, 12:15
Хмм… Если ничего не меняли в коде, то ошибка вот здесь:
If .GetOwner(strUser, strDomain) <> 0 Then
Единственный вариант, который могу предположить — процесс завершается быстрее, нежели чем отведённый для опроса интервал — т.е., менее, чем за секунду.

Давайте попробуем так:
Option Explicit

Const ForAppending = 8
Const TristateTrue = -1
Const TemporaryFolder = 2


Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource
Dim objSWbemObjectEx

Dim objFSO
Dim objTS

Dim strPath

Dim strDomain
Dim strUser


strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process'")

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strPath = objFSO.BuildPath(objFSO.GetSpecialFolder(TemporaryFolder), "Application activity.log")

Do
Set objSWbemObjectEx = objSWbemEventSource.NextEvent()

Set objTS = objFSO.OpenTextFile(strPath, ForAppending, True, TristateTrue)

With objSWbemObjectEx.TargetInstance
On Error Resume Next
If .GetOwner(strUser, strDomain) <> 0 Then
If Err.Number <> 0 Then
Err.Clear
On Error Goto 0
strDomain = "Unkhown"
strUser = "Unkhown"
Else
On Error Goto 0
End If
End If

objTS.WriteLine _
Now() & vbTab & _
.Name & vbTab & _
.ProcessID & vbTab & _
.ParentProcessID & vbTab & _
.ExecutablePath & vbTab & _
.CommandLine & vbTab & _
strDomain & "\" & strUser
End With

objTS.Close

Set objTS = Nothing
Loop

Set objFSO = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0

rosalin
02-10-2014, 13:33
Скрипт запускаю, лог пишет
еще бы по датам разбивать а то файл толстый получиться

Iska
02-10-2014, 13:56
Не вижу в этом ни малейшего смысла. Делайте копию с файла, далее обрабатывайте чем угодно — импортируйте в Excel и стройте сводную таблицу, импортируйте в Access и стройте кроссотчёт, пользуйте LogParser и т.п.

rosalin
02-10-2014, 13:58
Делайте копию с файла, далее обрабатывайте чем угодно »
Да наверное так и сделаю, спасибо!




© OSzone.net 2001-2012