Аудит системы при помощи «родных» приложений ОС Windows

Аудит системы при помощи «родных» приложений ОС Windows

В ОС Windows есть несколько встроенных приложений, которые можно использовать для сбора информации о вашей системе. Используя эти инструменты в сочетании с методами пакетной обработки, вы сможете собрать много полезной информации.

Автор: BLH

Существует множество инструментов от сторонних разработчиков, позволяющих проводить аудит безопасности вашей Window-системы. Некоторые из таких инструментов представляют собой отдельные приложения, некоторые – фреймворки (есть платные и бесплатные варианты). Однако представим себе такую ситуацию, что у вас под рукой нет этих инструментов, а нужно провести аудит Windows-серверов. По сути, в вашем распоряжении находятся только инструменты, которые идут в комплекте операционной системы. В этой статье как раз и будут рассмотрены подобные утилиты, которые можно использовать для проведения аудита служб Windows.

В ОС Windows есть несколько встроенных приложений, которые можно использовать для сбора информации о вашей системе, например:

  • WMIC
  • CACLS/ICACLS
  • netstat
  • systeminfo
  • tasklist

Используя эти инструменты в сочетании с методами пакетной обработки, вы сможете собрать много полезной информации. Конкретно в этой статье мы рассмотрим аудит служб Windows при помощи WMIC и CACLS.

WMIC

Windows Management Instrumentation Command-Line (WMIC) – расширение для WMI, где вы можете, используя командную строку, получать и модифицировать информацию о Windows-системе. Чтобы выполнять эти действия, вы должны обладать правами локального администратора (состоять в группе локальных администраторов).

Службы

Детальную информацию о запущенных службах можно получить в разделе «Настройки»-> «Панель управления»-> «Администрирование»-> «Службы» (речь идет о Windows XP) или запустив приложение «services.msc». Для доступа к информации о службах при помощи WMIC, вы должны зайти в систему как администратор и в консоли ввести следующую команду:

C:\> wmic service get /all

Также можно вывести только определенную информацию, задав соответствующие параметры при запуске команды:

C:\> wmic service get DisplayName, Name
C:\> wmic service get Name, ProcessID, StartName
C:\> wmic service get Name, PathName /format: csv.xsl

Далее приводится справочная информация по использованию команды:

Property get operations.
USAGE:

GET [<property list>] [<get switches>]
NOTE: <property list> ::= <property name> | <property name>, <property list>

The following properties are available:
Property Type Operation
======== ==== =========
AcceptPause N/A N/A
AcceptStop N/A N/A
Caption N/A N/A
CheckPoint N/A N/A
CreationClassName N/A N/A
Description N/A N/A
DesktopInteract N/A N/A
DisplayName N/A N/A
ErrorControl N/A N/A
ExitCode N/A N/A
InstallDate N/A N/A
Name N/A N/A
PathName N/A N/A
ProcessId N/A N/A
ServiceSpecificExitCode N/A N/A
ServiceType N/A N/A
StartMode N/A N/A
StartName N/A N/A
Started N/A N/A
State N/A N/A
Status N/A N/A
SystemCreationClassName N/A N/A
SystemName N/A N/A
TagId N/A N/A
WaitHint N/A N/A

The following GET switches are available:

/VALUE - Return value.
/ALL(default) - Return the data and metadata for the attribute.
/TRANSLATE:<table name> - Translate output via values from <table name>.
/EVERY:<interval> [/REPEAT:<repeat count>] - Returns value every (X interval) seconds,
If /REPEAT specified the command is executed <repeat count> times.
/FORMAT:<format specifier> - Keyword/XSL filename to process the XML results.

NOTE: Order of /TRANSLATE and /FORMAT switches influences the appearance of output.
Case1: If /TRANSLATE precedes /FORMAT, then translation of results will be followed by formatting.
Case2: If /TRANSLATE succeeds /FORMAT, then translation of the formatted results will be done.

Затем можно получить информацию о том, какой исполняемый файл соответствует запущенной службе, используя параметр pathname:

C:\>wmic service get pathname
PathName
C:\WINDOWS\system32\Macromed\Flash\FlashPlayerUpdateService.exe
C:\WINDOWS\system32\svchost.exe -k netsvcs
C:\WINDOWS\system32\svchost.exe -k LocalService
C:\WINDOWS\System32\alg.exe
C:\WINDOWS\system32\svchost.exe -k netsvcs
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_state.exe
...
"C:\Program Files\WinPcap\rpcapd.exe" -d -f "C:\Program Files\WinPcap\rpcapd.ini"
"C:\Program Files\Sophos\Sophos Anti-Virus\SAVAdminService.exe"
"C:\Program Files\Sophos\Sophos Anti-Virus\SavService.exe"
"C:\Program Files\Sophos\AutoUpdate\ALsvc.exe"

Из информации выше видно, что помимо имени программы выводятся ее параметры. Также можно отсортировать и записать информацию в файл, например, так: service get pathname | sort > services.txt. Параметры можно удалить вручную или при помощи скрипта.

Используя полученный ранее файл, можно обработать каждый путь к файлу при помощи утилиты CACLS/ICACLS.

CACLS

CACLS и его замена ICACLS – утилиты, работающие из командной строки, которые входят в состав ОС Windows. При помощи этих инструментов можно отображать и модифицировать права доступа к папкам и файлам, и тем самым управлять правами доступа к ним.

Собираем все вместе

Утилиты cacls/icacls можно запускать в цикле для того, чтобы определить права доступа для каждой службы:

for /f "tokens=*" %a in (services.txt) do cacls %a >> s_cacls.txt

Далее вы можете найти небезопасные службы в системе путем поиска строк, которые не содержат администраторов, и к которым имеют доступ простые пользователи:

findstr /s /n /i /p /v "Administrator Power Authority" s_cacls.txt

Пример скрипта для пакетной обработки

Я написал пакетный скрипт, собирающий файлы, связанные со службами, и выполняющий некоторую обработку этой информации (сортировка, удаление дубликатов и удаление параметров):

REM s_cacls.bat
REM
REM The batch file extracts the services and finds the permissions for the underlying file
REM * Uses 'wmic service' to get program executable for each service
REM * Sort and process the list of programs
REM * Perform cacls

:: SETUP for filenames and directories
SET dirscacls=scacls
SET fileservices=services.txt
SET fileservicessort=services-sorted.txt
SET fileservicesuniq=services-uniq.txt
SET filetemp=temp.txt
md %dirscacls%
cd %dirscacls%

:: Extract program executable for each service
for /F "skip=1 tokens=*" %%a in ('wmic service get pathname') do (
setlocal enableDelayedExpansion
set _str=%%a
set ^"_str=!_str: =^

!"
for /f "eol= delims=" %%S in ("!_str!") do (
if "!!"=="" endlocal
@echo|set/p=%%S>>%fileservices%
@echo.>>%fileservices%
)
endlocal
)

:: Strip out options. Assumption made that each service is using .exe file
for /f "tokens=*" %%a in (%fileservices%) do (
setlocal enableDelayedExpansion
set _str=%%a
set ^_str=!_str:.exe=^

!"
for /f "eol= delims=" %%S in ("!_str!") do (
if "!!"=="" endlocal
@echo|set/p=%%S.exe>>%filetemp%
@echo.>>%filetemp%
)
endlocal
)

:: Sort the file of programs into alphabetical order
::call:sort8ren "%filetemp%", "%fileservices%"
sort %filetemp% > "%fileservicessort%"
del %filetemp%

for /f "tokens=*" %%A IN (%fileservicessort%) DO (
SETLOCAL EnableDelayedExpansion
if /i not [%%A]==[!LN!] (
set "LN=%%A"
echo %%A>>%fileservicesuniq%
)
)
ENDLOCAL

call:sicaclsloop %fileservicesuniq%

cd ..
goto:EOF

:scaclsloop
for /f "tokens=*" %%a in (%~1) do (
cacls "%%a" >> scacls_%%~na.txt
)
goto:EOF

:sicaclsloop
for /f "tokens=*" %%a in (%~1) do (
icacls "%%a" >> sicacls_%%~na.txt
)
goto:EOF

:sort8ren
sort %~1 > %~2
del %~1
rename %~2 %~1
goto:EOF

Заключение

Как вы смогли убедиться, можно провести аудит Windows не прибегая к сторонним приложениям. В этой статье мы провели аудит служб Windows при помощи WMIC, CACLS и написали скрипт для пакетной обработки, который за

Большой брат следит за вами, но мы знаем, как остановить его

Подпишитесь на наш канал!