Пользовательская вставка журнала событий безопасности Windows 2012 R2

Я пытаюсь писать журналы в Windows Server 2012 r2, я могу писать журнал приложений следующим образом:

Write-EventLog -LogName Application -Source "mysource" other parameters goes here 

он работает правильно и записывает этот журнал в windowslog/application

после этого я пытаюсь сделать это для журнала безопасности

Write-EventLog -LogName Security -Source "Microsoft-Windows-Security-Auditing" other parameters goes here 

верни мне эту ошибку

Write-EventLog : The registry key for the log "Security" for source "Microsoft-Windows-Security-Auditing" could not be
opened.
At line:1 char:1
+ Write-EventLog -LogName Security -Source "Microsoft-Windows-Security-Auditing" - ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Write-EventLog], Exception
    + FullyQualifiedErrorId : AccessDenied,Microsoft.PowerShell.Commands.WriteEventLogCommand

после этого я ищу и нахожу функцию для записи журналов безопасности AuthzReportSecurityEvent Я думаю, я могу писать свои журналы, используя эту функцию, если я могу это сделать, у меня есть еще один вопрос, как я могу использовать эту функцию в powershell или python? Я думаю, могу ли я использовать эту функцию через модуль pywin32? или я могу позвонить прямо в скрипте powershell? Можете ли вы поделиться каким-либо примером того, как я могу вызвать эту функцию и записать журнал в журнал безопасности, используя эту функцию.

Я могу войти в систему безопасности, если буду следовать предложениям @Strive Sun.


person Mehmet Başaran    schedule 04.09.2020    source источник
comment
Командлет Write-EventLog завершается ошибкой, так как у вас недостаточно прав для проведения аудита безопасности. Выбор другого способа написания аудита безопасности не увенчается успехом по той же причине. Вам придется узнать, как работает система безопасности.   -  person IInspectable    schedule 04.09.2020
comment
Я спрашиваю, как я могу написать собственный журнал в этой области, и вы говорите, что должны изучить работу безопасности, так что это означает, что это невозможно? если это то, почему существует AuthzReportSecurityEvent и почему я не могу найти ни одного примера с использованием этого API. Спасибо за ответ   -  person Mehmet Başaran    schedule 04.09.2020


Ответы (1)


я думаю, я могу писать свои журналы, используя эту функцию, если я могу это сделать, у меня есть еще один вопрос, как я могу использовать эту функцию в powershell или python?

В Windows Server 2003 ограничение доступа для записи в журнал безопасности было несколько ослаблено без изменения фундаментальной структуры за счет введения специального набора API (см. рис. 2). Эти API используют внутренние вызовы процедур (LPC) для взаимодействия с LSA, предписывая ему создавать журналы аудита от имени приложения. Механизм элегантный и простой.

Сначала приложение регистрирует дескриптор источника события безопасности с помощью LSA, вызывая AuthzRegisterSecurityEventSource. Единственный параметр, представляющий интерес для этого API, — это имя источника события, которое может быть практически любым, с некоторыми ограничениями. Например, его нельзя назвать «Безопасность», поскольку это имя зарезервировано для системного использования. Дескриптор источника события безопасности, возвращаемый этим вызовом, используется в следующих шагах.

Затем события генерируются путем вызова одного из двух тесно связанных API: AuthzReportSecurityEvent или AuthzReportSecurityEventFromParams. Наконец, когда приложение завершает работу, оно отменяет регистрацию дескриптора источника события безопасности, вызывая AuthzUnregisterSecurityEventSource.

См.: Журнал безопасности

Можете ли вы поделиться каким-либо примером того, как я могу вызвать эту функцию и записать журнал в журнал безопасности, используя эту функцию.

Пример кода: (С++)

#include <stdio.h>
#include <iostream>
#include <string>
#include <strsafe.h>
#include <windows.h>
#include <Authz.h>
#include <Ntsecapi.h>


#pragma comment(lib,"Authz.lib")
#pragma comment(lib,"Advapi32.lib")

BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
)
{
    TOKEN_PRIVILEGES tp;
    LUID luid;

    if (!LookupPrivilegeValue(
        NULL,            // lookup privilege on local system
        lpszPrivilege,   // privilege to lookup
        &luid))        // receives LUID of privilege
    {
        printf("LookupPrivilegeValue error: %u\n", GetLastError());
        return FALSE;
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;

    // Enable the privilege or disable all privileges.

    if (!AdjustTokenPrivileges(
        hToken,
        FALSE,
        &tp,
        sizeof(TOKEN_PRIVILEGES),
        (PTOKEN_PRIVILEGES)NULL,
        (PDWORD)NULL))
    {
        printf("AdjustTokenPrivileges error: %u\n", GetLastError());
        return FALSE;
    }

    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)

    {
        printf("The token does not have the specified privilege. \n");
        return FALSE;
    }

    printf("Get the specified privilege! \n");

    return TRUE;
}




int main(int argc, const char* argv[])
{
    // Declare and initialize variables.

    BOOL bResult = TRUE;
    DWORD event_id = 4624;
    AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE hEventProvider = NULL;
    PAUDIT_PARAMS p;
    std::string Source_Name = "Test security audit";
    std::wstring ws;
    std::string pbuf = "What is your purpose ?";
    std::wstring ws_buf;
    int return_code = 0;
    int i = 0;
    // Register the audit provider.
    HANDLE token;
    HANDLE hevent_source;
    ws.assign(Source_Name.begin(), Source_Name.end());
    ws_buf.assign(pbuf.begin(), pbuf.end());

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token))
        return FALSE;

    SetPrivilege(token, L"SeAuditPrivilege", true);

    AUTHZ_SOURCE_SCHEMA_REGISTRATION ar;
    memset(&ar, 0, sizeof(ar));
    ar.dwFlags = AUTHZ_ALLOW_MULTIPLE_SOURCE_INSTANCES;
    ar.szEventSourceName = &ws[0];
    ar.szEventMessageFile = &ws_buf[0];
    ar.szEventSourceXmlSchemaFile = NULL;
    ar.szEventAccessStringsFile = &ws_buf[0];
    ar.szExecutableImagePath = NULL;

    AuthzInstallSecurityEventSource(0, &ar);

    bResult = AuthzRegisterSecurityEventSource(0, ws.c_str(), &hEventProvider);
    int err = GetLastError();
    if (!bResult)
    {
        printf("AuthzRegisterSecurityEventSource failed, error is %d\n", err);
        return_code = -1;
    }

    SID id;
    if (hEventProvider)
    {
        // Generate the audit.
        while (i < 10) {
            bResult = AuthzReportSecurityEvent(
                APF_AuditSuccess,
                hEventProvider,
                event_id,
                NULL,
                3,
                APT_String, L"Jay Hamlin",
                APT_String, L"March 21, 1960",
                APT_Ulong, 45);
            int err1 = GetLastError();
            if (!bResult)
            {
                printf("AuthzReportSecurityEvent failed, error is %d\n", err1);
                return_code = -2;
                break;
            }

            i++;
        }

        AuthzUnregisterSecurityEventSource(0, &hEventProvider);
        AuthzUninstallSecurityEventSource(0, &ws[0]);
    }
    std::cout << "Exit  : " << return_code << std::endl;
    getchar();
}

Примечание. Перед запуском примера кода необходимо выполнить несколько действий в локальной политике безопасности. Шаги могут относиться: https://stackoverflow.com/a/18242724/11128312

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

Обновлено:

Перейдите в локальные политики-›Политика аудита. Включите аудит доступа к объектам для успеха и неудачи.

введите здесь описание изображения

Затем вы снова перестраиваете и отлаживаете, вы обнаружите, что журналы безопасности появляются в средстве просмотра событий.

введите здесь описание изображения

person Strive Sun    schedule 08.09.2020
comment
Во-первых, спасибо за ответ, я следую вашему руководству и возвращаю вывод: Получите указанную привилегию! Я проверил свои привилегии, у меня есть SeAuditPrivilege, и после этого я увидел, что в журнале безопасности нет новой записи. У вас есть какие-нибудь идеи по этому поводу? - person Mehmet Başaran; 08.09.2020
comment
Я не могу этого сделать Извините. Об одном забыл вам сказать: Заходим в локальные политики-›Audit Policy. Включите аудит доступа к объектам для успеха и неудачи. из-за того, что это меню заблокировано, поэтому я создаю новый сервер win и настраиваю его, как ваше последнее предложение, и продвигаю этот сервер как новый контроллер домена в моем существующем домене, но он не работает, после перезагрузки (повышенный контроллер домена) есть предложения по этому поводу? – - person Mehmet Başaran; 09.09.2020
comment
@ Мехмет Башаран this menu is locked, это значит, что вы не можете включить аудит доступа к объектам? - person Strive Sun; 09.09.2020
comment
@Mehmet Başaran Попробуйте это. - person Strive Sun; 09.09.2020
comment
@Strive_Sun Да, это работает после этих шагов, я удаляю все свои серверы и клиенты и создаю новое объявление, новых клиентов и новый домен и просто следую вашим руководствам по политике, да, теперь это работает, я могу вести журнал безопасности, спасибо большое. Также у меня есть некоторые проблемы с форматом журнала, но я думаю, что справлюсь с этим. Спасибо еще раз. - person Mehmet Başaran; 10.09.2020
comment
Я обновил свой вопрос, если вы можете мне помочь, я был бы признателен, спасибо. - person Mehmet Başaran; 10.09.2020
comment
@MehmetBaşaran Я очень рад помочь вам решить эту проблему. Что касается формата журнала безопасности, я продолжу помогать вам исследовать этот вопрос. Учитывая, что это новая проблема, я думаю, что для вас будет правильным опубликовать ее в виде новой темы. Это позволит более опытным людям обратить на это внимание и придумать полезные решения. - person Strive Sun; 11.09.2020
comment
Еще раз спасибо за вашу помощь, и я следую вашим инструкциям; я обновил этот вопрос и удалил часть форматирования и создал новый вопрос для форматирования журнала безопасности stackoverflow.com/questions/63853858/ - person Mehmet Başaran; 11.09.2020