Показать полную графическую версию : [решено] Ведение лога запускаемых программ
Ребята , в домене необходимо контролировать активность программ , какая когда с каким ключом кем была запущена....
есть неплохой скрипт , не очень разбираюсь 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
Ребята , в домене необходимо контролировать активность программ , какая когда с каким ключом кем была запущена.... »
Глобальная цель какова?
помогите довести до ума »
Что там «доводить»?
Ситуация.
Бухгалтер открыла письмо на почте "Исковое заявление". Во вложении был файл Исковое.doc.exe
Он создал в папке С:/tmp несколько файлов, один из которых с названием Rar.exe заархивировал все файлы в отдельные архивы с паролем, и в каждой папке оставил текстовый файл с требованием денег за разархивацию.
Глобальная задача регистрировать лог активность программ, под каждым логином свой,
тоесть какая, с каким ключам, когда. Для чего нужно - несколько раз предотвращал архивацию с паролем рабочих файлов .doc .xls и т.д.
этот скриптик помог бы еще больше.
в нем не понятно как назначить лог именно по именам пользователей домена , сейчас пишет все в статический путь c:\MyLog.txt
rosalin, я Вас понял. Но тут надо запрещать открытие вложений в виде исполняемых файлов, либо ещё жёстче — вводить Software Restriction Policies.
в нем не понятно как назначить лог именно по именам пользователей домена , сейчас пишет все в статический путь c:\MyLog.txt »
А Вам как бы хотелось?
Ну не очень понял как скрипт работает , но в идеале если это получиться написать скрипт кинуть в logon и пусть при входе юзеров, для каждого пишет действия активности в свой файлик куда нибудь в папочку подальше, файлики разбить по дате создания
PS Привел один из примеров, почему не совсем подходит рекомендация, потому как был еще случай подбора пароля по rdp и потом пытались выполнять разные команды , но что то удалось что то нет
вообщем подобный лог будет не лишний для принятия контрмер
Лог Вам ничем тут не поможет. Меры должны быть превентивными. Какими — я изложил выше. Подбор паролей должен пресекаться на корню той же групповой политикой — в «Политика блокировки учётной записи». «Родная» административная учётная запись «Администратор/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
Cцeнapий:
Cтpoкa: 42
Cимвoл: 3
Oшибкa: He нaйдeн
Кoд: 80041002
Иcтoчник: SWbemObjectEx
Код не меняли?
Запуск так:
В Startup. »
делали или как-то иначе?
Код не менял вообще , запускал простым кликом, насчет переменных домен ни где прописывать не надо ?
Хмм… Если ничего не меняли в коде, то ошибка вот здесь:
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
Скрипт запускаю, лог пишет
еще бы по датам разбивать а то файл толстый получиться
Не вижу в этом ни малейшего смысла. Делайте копию с файла, далее обрабатывайте чем угодно — импортируйте в Excel и стройте сводную таблицу, импортируйте в Access и стройте кроссотчёт, пользуйте LogParser и т.п.
Делайте копию с файла, далее обрабатывайте чем угодно »
Да наверное так и сделаю, спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.