Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ведение лога запускаемых программ (http://forum.oszone.net/showthread.php?t=288766)

rosalin 01-10-2014 14:31 2409427

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

есть неплохой скрипт , не очень разбираюсь 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 2409437

Цитата:

Цитата rosalin
Ребята , в домене необходимо контролировать активность программ , какая когда с каким ключом кем была запущена.... »

Глобальная цель какова?

Цитата:

Цитата rosalin
помогите довести до ума »

Что там «доводить»?

rosalin 01-10-2014 15:08 2409446

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

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

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

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

Iska 01-10-2014 16:37 2409508

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

Цитата:

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

А Вам как бы хотелось?

rosalin 01-10-2014 16:51 2409519

Ну не очень понял как скрипт работает , но в идеале если это получиться написать скрипт кинуть в logon и пусть при входе юзеров, для каждого пишет действия активности в свой файлик куда нибудь в папочку подальше, файлики разбить по дате создания

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

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

Iska 02-10-2014 05:28 2409770

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

Цитата:

Цитата rosalin
кинуть в 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 2409795

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 2409846

Код не меняли?

Запуск так:
Цитата:

Цитата Iska
В Startup. »

делали или как-то иначе?

rosalin 02-10-2014 11:50 2409858

Код не менял вообще , запускал простым кликом, насчет переменных домен ни где прописывать не надо ?

Iska 02-10-2014 12:15 2409875

Хмм… Если ничего не меняли в коде, то ошибка вот здесь:
Код:

                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 2409927

Скрипт запускаю, лог пишет
еще бы по датам разбивать а то файл толстый получиться

Iska 02-10-2014 13:56 2409937

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

rosalin 02-10-2014 13:58 2409939

Цитата:

Цитата Iska
Делайте копию с файла, далее обрабатывайте чем угодно »

Да наверное так и сделаю, спасибо!


Время: 01:53.

Время: 01:53.
© OSzone.net 2001-