🛡️ Windows: Скрипт-аудит "Кто удалил файл?" (NTFS Forensics)
Боль: Критический файл в \\Shares\Data исчез. Бизнес в панике. "Кто это сделал и когда?!"
Реакция админа: "Я восстановлю из бэкапа" (но не знает, почему это случилось).
Реакция архитектора: "Я настрою аудит и найду виновного за 30 секунд".
Это двухэтапный процесс: сначала "взводим ловушку", потом "ловим".
Шаг 1: "Взвести ловушку" (Включить аудит на папке): (Это нужно сделать до инцидента)
(Также включите "Audit Object Access" в GPO)
Шаг 2: Скрипт-охотник (Когда инцидент произошел): Этот скрипт найдет в логах Security событие 4663 (Попытка доступа к объекту) с Accesses: ...Delete...
Взгляд архитектора: Вы переходите от "надежды" к "доказательствам". Это основа Форензики (Digital Forensics) и Incident Response (IR).
#windows #powershell #security #audit #ntfs #скрипты #гайд
Боль: Критический файл в \\Shares\Data исчез. Бизнес в панике. "Кто это сделал и когда?!"
Реакция админа: "Я восстановлю из бэкапа" (но не знает, почему это случилось).
Реакция архитектора: "Я настрою аудит и найду виновного за 30 секунд".
Это двухэтапный процесс: сначала "взводим ловушку", потом "ловим".
Шаг 1: "Взвести ловушку" (Включить аудит на папке): (Это нужно сделать до инцидента)
# 1. Получаем ACL папки
$Acl = Get-Acl "C:\Shares\Data"
# 2. Создаем правило аудита: "Следить за 'Delete' и 'DeleteSubtree' для 'Everyone'"
$AuditRule = New-Object System.Security.AccessControl.FileSystemAuditRule(
"Everyone",
"Delete, DeleteSubtreeAndFiles",
"None",
"None",
"Success, Failure"
)
# 3. Добавляем правило в ACL и применяем
$Acl.AddAuditRule($AuditRule)
Set-Acl -Path "C:\Shares\Data" -AclObject $Acl
(Также включите "Audit Object Access" в GPO)
Шаг 2: Скрипт-охотник (Когда инцидент произошел): Этот скрипт найдет в логах Security событие 4663 (Попытка доступа к объекту) с Accesses: ...Delete...
Write-Host "--- Ищу событие удаления файла в C:\Shares\Data ---"
Get-WinEvent -FilterHashtable @{
LogName = "Security";
ID = 4663
} | ForEach-Object {
# 'Object Name' - это 6-е свойство, 'Accesses' - 9-е
$ObjectName = $_.Properties[6].Value
$Accesses = $_.Properties[9].Value
# Проверяем, что это наша папка И это было удаление
if ($ObjectName -like "*C:\Shares\Data*" -and $Accesses -match "Delete") {
[PSCustomObject]@{
Time = $_.TimeCreated
User = $_.Properties[1].Value
Process = $_.Properties[13].Value
Object = $ObjectName
}
}
}
Взгляд архитектора: Вы переходите от "надежды" к "доказательствам". Это основа Форензики (Digital Forensics) и Incident Response (IR).
#windows #powershell #security #audit #ntfs #скрипты #гайд
🔬 Linux: Скрипт "Аудит открытых портов" (Сравнение с "Эталоном")
Боль: Вы думаете, что на вашем веб-сервере открыты только порты 22, 80, 443. Но разработчик "для теста" запустил python -m http.server 8000 на 0.0.0.0 и забыл.
Реакция админа: "Я проверю ss -tuln вручную, когда будет инцидент".
Реакция архитектора: "У меня есть cron-скрипт, который автоматически сверяет 'что есть' с 'что должно быть'".
Этот Bash-скрипт — ваш аудитор безопасности.
Код скрипта:
Взгляд архитектора: Это "Compliance as Code". Вы не "проверяете", вы валидируете вашу политику безопасности. Этот скрипт — основа для автоматического алерта в Zabbix или Prometheus (Alertmanager).
#linux #bash #security #networking #audit #скрипты #sre
Боль: Вы думаете, что на вашем веб-сервере открыты только порты 22, 80, 443. Но разработчик "для теста" запустил python -m http.server 8000 на 0.0.0.0 и забыл.
Реакция админа: "Я проверю ss -tuln вручную, когда будет инцидент".
Реакция архитектора: "У меня есть cron-скрипт, который автоматически сверяет 'что есть' с 'что должно быть'".
Этот Bash-скрипт — ваш аудитор безопасности.
Код скрипта:
#!/bin/bash
# --- Скрипт аудита "лишних" TCP-портов ---
# 1. ЭТАЛОН: Порты, которые ДОЛЖНЫ быть открыты (на 0.0.0.0)
# (Используйте 'ssh' или номер '22')
ALLOWED_PORTS=(
"ssh"
"http"
"httpsA"
)
# 2. ФАКТ: Получаем все, что слушает на 0.0.0.0 (IPv4)
# `ss -tuln`: TCP, UDP, Listening, Numeric
# `awk ...`: Вытаскиваем только номер порта
CURRENT_PORTS=$(ss -tuln | grep 'LISTEN.*0.0.0.0:' | awk '{print $5}' | sed 's/.*://' | sort -u)
# 3. СРАВНЕНИЕ:
# `comm -13`: Показывает строки, которые есть только во втором файле (CURRENT_PORTS)
# (т.е. "лишние" порты)
UNAUTHORIZED_PORTS=$(comm -13 <(printf "%s\n" "${ALLOWED_PORTS[@]}" | sort -u) <(echo "$CURRENT_PORTS"))
if [ -n "$UNAUTHORIZED_PORTS" ]; then
echo "[!!!] ОБНАРУЖЕНЫ НЕСАНКЦИОНИРОВАННЫЕ ОТКРЫТЫЕ ПОРТЫ:"
echo "$UNAUTHORIZED_PORTS"
exit 1
else
echo "[OK] Все порты соответствуют эталону."
exit 0
fi
Взгляд архитектора: Это "Compliance as Code". Вы не "проверяете", вы валидируете вашу политику безопасности. Этот скрипт — основа для автоматического алерта в Zabbix или Prometheus (Alertmanager).
#linux #bash #security #networking #audit #скрипты #sre
🔒 Windows (Security): "Куда бежать?" Аудит открытых сетевых шар (Open Shares)
Боль: Вы "думаете", что все ваши файловые шары защищены и доступны только "изнутри". Но где-то тихо "живет" шара \\SERVER\Docs, которая открыта "Everyone: Full Control" и светит в интернет через проброс портов.
Реакция админа: "Пролистаю Computer Management на каждом сервере". (Это тысячи шар).
Реакция архитектора: Запустить автоматический скрипт-аудит.
Этот PowerShell-скрипт найдет все открытые шары на всех ваших серверах, которые разрешают доступ группе Everyone (или Authenticated Users).
Код скрипта:
Взгляд архитектора: Это — непрерывный аудит периметра. Открытая шара — это золотой рудник для атакующего. Этот скрипт — ваш сканер безопасности, который должен запускаться регулярно.
#windows #powershell #security #audit #networking #скрипты #sysadmin
Боль: Вы "думаете", что все ваши файловые шары защищены и доступны только "изнутри". Но где-то тихо "живет" шара \\SERVER\Docs, которая открыта "Everyone: Full Control" и светит в интернет через проброс портов.
Реакция админа: "Пролистаю Computer Management на каждом сервере". (Это тысячи шар).
Реакция архитектора: Запустить автоматический скрипт-аудит.
Этот PowerShell-скрипт найдет все открытые шары на всех ваших серверах, которые разрешают доступ группе Everyone (или Authenticated Users).
Код скрипта:
Write-Host "--- Начинаю аудит открытых сетевых шар (Everyone/Auth. Users) ---" -ForegroundColor Cyan
# 1. Получаем список всех серверов в домене
$Servers = Get-ADComputer -Filter 'OperatingSystem -like "Windows Server*"' | Select-Object -ExpandProperty Name
$Report = @()
foreach ($Server in $Servers) {
Write-Host "Проверяю сервер: $Server..."
try {
# Получаем все шары на сервере
$Shares = Get-CimInstance -ClassName Win32_Share -ComputerName $Server -ErrorAction Stop
foreach ($Share in $Shares) {
# Пропускаем стандартные (ADMIN$, C$, IPC$)
if ($Share.Name -notmatch '\$') {
# Получаем ACL каждой шары
$Acl = Get-Acl "Microsoft.PowerShell.Core\FileSystem::\\$Server\$($Share.Name)" -ErrorAction SilentlyContinue
if ($Acl) {
# Ищем правила для Everyone или Authenticated Users
$OpenAcl = $Acl.Access | Where-Object {
($_.IdentityReference -eq "Everyone") -or ($_.IdentityReference -eq "Authenticated Users")
}
if ($OpenAcl) {
$Report += [PSCustomObject]@{
Server = $Server
ShareName = $Share.Name
Path = $Share.Path
Identity = $OpenAcl.IdentityReference
AccessRights = $OpenAcl.FileSystemRights
AccessType = $OpenAcl.AccessControlType
}
}
}
}
}
}
catch {
Write-Warning "Не удалось подключиться к $Server: $($_.Exception.Message)"
}
}
if ($Report) {
Write-Host "`n[!!!] ОБНАРУЖЕНЫ ОТКРЫТЫЕ СЕТЕВЫЕ ШАРЫ (EVERYONE / AUTHENTICATED USERS):" -ForegroundColor Red
$Report | Format-Table -Wrap -AutoSize
} else {
Write-Host "`n[OK] Открытых сетевых шар не найдено." -ForegroundColor Green
}
Взгляд архитектора: Это — непрерывный аудит периметра. Открытая шара — это золотой рудник для атакующего. Этот скрипт — ваш сканер безопасности, который должен запускаться регулярно.
#windows #powershell #security #audit #networking #скрипты #sysadmin
👍2
🛡️ Windows (Security): Аудит UAC. "Почему админ нажимает 'Да'?"
Боль: Вы настроили LAPS, убрали права. Но UAC (User Account Control) — это "внутренний файрвол" Windows, который останавливает 90% атак с повышением привилегий. И многие админы его отключают или ослабляют до "тихого" режима, потому что он "мешает".
Реакция админа: "Я просто нажму 'Да', я же админ".
Реакция архитектора: "Я принудительно включу безопасный UAC через GPO и буду аудировать тех, кто его отключает".
Этот PowerShell-скрипт — ваш аудитор. Он проверит критически важные ключи реестра UAC на списке машин.
Код скрипта:
Взгляд архитектора: Отключение UAC (EnableLUA = 0) — это не "удобство", это приглашение для mimikatz и шифровальщиков. Этот скрипт — ваш первый шаг к Security Baseline (базовому уровню безопасности).
#windows #powershell #security #uac #audit #скрипты #sysadmin
Боль: Вы настроили LAPS, убрали права. Но UAC (User Account Control) — это "внутренний файрвол" Windows, который останавливает 90% атак с повышением привилегий. И многие админы его отключают или ослабляют до "тихого" режима, потому что он "мешает".
Реакция админа: "Я просто нажму 'Да', я же админ".
Реакция архитектора: "Я принудительно включу безопасный UAC через GPO и буду аудировать тех, кто его отключает".
Этот PowerShell-скрипт — ваш аудитор. Он проверит критически важные ключи реестра UAC на списке машин.
Код скрипта:
[CmdletBinding()]
param (
[string[]]$ComputerNames = @("SERVER01", "WKS-01")
)
$UAC_Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
$Report = @()
foreach ($Server in $ComputerNames) {
Write-Host "Проверяю UAC на $Server..."
if (-not (Test-Connection -ComputerName $Server -Count 1 -Quiet)) {
$Report += [PSCustomObject]@{ ComputerName = $Server; Status = "НЕДОСТУПЕН" }
continue
}
try {
$RegKey = Get-ItemProperty -Path $UAC_Path -ComputerName $Server -ErrorAction Stop
$Report += [PSCustomObject]@{
ComputerName = $Server
Status = "OK"
# 1 = Включен (Хорошо)
EnableLUA = $RegKey.EnableLUA
# 2 = "Prompt for consent on the secure desktop" (Лучший)
# 5 = "Prompt for consent" (Нормально)
# 0 = "Elevate without prompting" (КРИТИЧЕСКАЯ УЯЗВИМОСТЬ)
ConsentPromptBehaviorAdmin = $RegKey.ConsentPromptBehaviorAdmin
}
}
catch {
$Report += [PSCustomObject]@{ ComputerName = $Server; Status = "ОШИБКА ДОСТУПА" }
}
}
Write-Host "`n--- РЕЗУЛЬТАТ АУДИТА UAC ---"
$Report | Format-Table
Write-Host "[!] 'EnableLUA = 0' или 'ConsentPromptBehaviorAdmin = 0' — это дыра в безопасности!" -ForegroundColor Red
Взгляд архитектора: Отключение UAC (EnableLUA = 0) — это не "удобство", это приглашение для mimikatz и шифровальщиков. Этот скрипт — ваш первый шаг к Security Baseline (базовому уровню безопасности).
#windows #powershell #security #uac #audit #скрипты #sysadmin
☣️ Windows: Скрипт-аудит "Кто может сбросить пароль Domain Admin?"
Боль: Вы думаете, что только Domain Admins могут менять пароли. Но в AD есть "темные" права, как GenericAll, WriteDacl или User-Force-Change-Password.
Проблема: Учетка HelpDesk (которую взломали) может иметь право сбросить пароль SQL-Admin, а тот, в свою очередь, — пароль Domain Admin. Это "теневые" админы (Shadow Admins).
Этот PowerShell-скрипт (на модуле DSInternals) — ваш аудитор. Он покажет всех, кто имеет "опасные" права на ваших Domain Admins.
Код скрипта:
Взгляд архитектора: Это — аудит путей атаки (Attack Paths). Вы должны знать каждую учетку, которая может сбросить пароль DA.
#windows #powershell #security #activedirectory #audit #скрипты #cybersecurity
Боль: Вы думаете, что только Domain Admins могут менять пароли. Но в AD есть "темные" права, как GenericAll, WriteDacl или User-Force-Change-Password.
Проблема: Учетка HelpDesk (которую взломали) может иметь право сбросить пароль SQL-Admin, а тот, в свою очередь, — пароль Domain Admin. Это "теневые" админы (Shadow Admins).
Этот PowerShell-скрипт (на модуле DSInternals) — ваш аудитор. Он покажет всех, кто имеет "опасные" права на ваших Domain Admins.
Код скрипта:
# 1. Установка модуля (один раз)
# Install-Module DSInternals -Scope CurrentUser
Import-Module DSInternals
Write-Host "--- Начинаю аудит 'опасных' ACL на Admin-группах ---" -ForegroundColor Cyan
# 2. Список "целей" (кого проверяем)
$CriticalGroups = @(
"Domain Admins",
"Enterprise Admins",
"Administrators",
"Schema Admins"
)
# 3. Список "опасных" прав
$DangerousRights = @(
'GenericAll',
'WriteDacl',
'WriteOwner',
'Self',
'WriteProperty',
'GenericWrite',
'User-Force-Change-Password'
)
$Report = foreach ($Group in $CriticalGroups) {
Get-ADACL -Identity $Group | Where-Object {
($_.ActiveDirectoryRights -in $DangerousRights) -and
($_.IdentityReference -notin @("NT AUTHORITY\SYSTEM", "BUILTIN\Administrators", "CORP\Domain Admins", "CORP\Enterprise Admins")) # Исключаем "ожидаемых"
}
}
if ($Report) {
Write-Host "`n[!!!] ОБНАРУЖЕНЫ 'ТЕНЕВЫЕ' АДМИНЫ:" -ForegroundColor Red
$Report | Format-Table ObjectDN, IdentityReference, ActiveDirectoryRights
} else {
Write-Host "`n[OK] 'Лишних' прав на критических группах не найдено." -ForegroundColor Green
}
Взгляд архитектора: Это — аудит путей атаки (Attack Paths). Вы должны знать каждую учетку, которая может сбросить пароль DA.
#windows #powershell #security #activedirectory #audit #скрипты #cybersecurity
👍1
🔒 Linux: Скрипт-аудит "неизменяемых" (immutable) файлов
Боль: Команда chattr +i (immutable) — это и "оружие", и "щит".
Хакеры используют ее, чтобы "зацементировать" свой rootkit (его не может удалить даже root).
Админы используют ее, чтобы защитить /etc/hosts или sshd_config от случайных изменений.
Проблема: Как найти все "неизменяемые" файлы в системе?
Реакция админа: "Надеюсь, их нет".
Реакция архитектора: "Я запущу аудит".
Этот Bash-скрипт использует lsattr для рекурсивного сканирования системы.
Код скрипта:
Взгляд архитектора: Это — аудит целостности (Integrity Audit). Вы должны знать о каждом файле, который "заморожен". Если вы видите ----i- на /tmp/x.sh — у вас огромные проблемы. Если на sshd_config — это ваша (или чужая) работа.
#linux #bash #security #audit #forensics #скрипты #гайд
Боль: Команда chattr +i (immutable) — это и "оружие", и "щит".
Хакеры используют ее, чтобы "зацементировать" свой rootkit (его не может удалить даже root).
Админы используют ее, чтобы защитить /etc/hosts или sshd_config от случайных изменений.
Проблема: Как найти все "неизменяемые" файлы в системе?
Реакция админа: "Надеюсь, их нет".
Реакция архитектора: "Я запущу аудит".
Этот Bash-скрипт использует lsattr для рекурсивного сканирования системы.
Код скрипта:
#!/bin/bash
# --- Поиск 'immutable' файлов (атрибут 'i') ---
echo "--- Начинаю поиск 'неизменяемых' файлов (chattr +i)... ---"
echo "Это может занять много времени."
# -R: Рекурсивно
# /: Начиная с корня
# 2>/dev/null: Игнорируем ошибки (типа 'Permission denied' для /proc)
# grep '----i-': Ищем ТОЛЬКО файлы, где установлен 'i' (immutable)
lsattr -R / 2>/dev/null | grep '----i-'
echo "--- Поиск завершен ---"
Взгляд архитектора: Это — аудит целостности (Integrity Audit). Вы должны знать о каждом файле, который "заморожен". Если вы видите ----i- на /tmp/x.sh — у вас огромные проблемы. Если на sshd_config — это ваша (или чужая) работа.
#linux #bash #security #audit #forensics #скрипты #гайд
👮♂️ PowerShell: Кто в админах?
Банальная, но критичная задача. Часто техподдержка дает права локального админа пользователю "на 5 минут, чтобы поставить программу", и забывает убрать. Через полгода у вас половина офиса — админы.
Скрипт для инвентаризации группы Administrators на удаленных ПК.
Код:
Что искать в отчете:
Доменных пользователей (кроме админов домена и техподдержки).
Левые локальные учетки.
Чистота прав доступа — залог спокойного сна.
#powershell #security #audit #windows #scripting
Банальная, но критичная задача. Часто техподдержка дает права локального админа пользователю "на 5 минут, чтобы поставить программу", и забывает убрать. Через полгода у вас половина офиса — админы.
Скрипт для инвентаризации группы Administrators на удаленных ПК.
Код:
$Computers = Get-Content "C:\servers.txt" # Или список из AD
foreach ($PC in $Computers) {
Try {
$Admins = Invoke-Command -ComputerName $PC -ScriptBlock {
Get-LocalGroupMember -Group "Administrators" |
Select-Object -ExpandProperty Name
} -ErrorAction Stop
[PSCustomObject]@{
Server = $PC
LocalAdmins = ($Admins -join ", ")
}
} Catch {
Write-Warning "Не удалось подключиться к $PC"
}
}
Что искать в отчете:
Доменных пользователей (кроме админов домена и техподдержки).
Левые локальные учетки.
Чистота прав доступа — залог спокойного сна.
#powershell #security #audit #windows #scripting
🔥2
share PowerShell: Найди "забытые" сетевые папки
Сетевые шары (Shares) — любимый путь вирусов-шифровальщиков. Часто бывает так: админ расшарил папку "temp" для передачи дистрибутива и забыл. Спустя год там лежит архив с базой 1С, доступный всем (Everyone: Full Control).
Давайте найдем все не-системные шары одной командой.
Скрипт:
Задача: Запустите на файловом сервере. Если увидите шару с именем Distrib, Scan или Obmen — проверьте права доступа немедленно (Get-SmbShareAccess -Name "Obmen").
#windows #powershell #security #audit #network
Сетевые шары (Shares) — любимый путь вирусов-шифровальщиков. Часто бывает так: админ расшарил папку "temp" для передачи дистрибутива и забыл. Спустя год там лежит архив с базой 1С, доступный всем (Everyone: Full Control).
Давайте найдем все не-системные шары одной командой.
Скрипт:
# Получаем все шары
Get-SmbShare |
# Исключаем дефолтные (C$, IPC$, ADMIN$ и т.д.)
Where-Object { $_.Special -eq $false } |
# Смотрим путь и описание
Select-Object Name, Path, Description |
Format-Table -AutoSize
Задача: Запустите на файловом сервере. Если увидите шару с именем Distrib, Scan или Obmen — проверьте права доступа немедленно (Get-SmbShareAccess -Name "Obmen").
#windows #powershell #security #audit #network
🕵️♂️ Linux: Кто трогал этот файл? (auditd)
Иногда ls -l и last недостаточно. Вам нужно знать: кто, когда и какой процесс изменил критический конфиг /etc/passwd или удалил файл базы данных.
Включаем подсистему аудита ядра — auditd.
1. Ставим слежку за файлом:
2. Смотрим отчет: Кто трогал файл?
Вы увидите всё: PID процесса, UID пользователя и даже команду, которой это было сделано. Незаменимо при разборе инцидентов.
#linux #security #audit #forensics #securityhardening
Иногда ls -l и last недостаточно. Вам нужно знать: кто, когда и какой процесс изменил критический конфиг /etc/passwd или удалил файл базы данных.
Включаем подсистему аудита ядра — auditd.
1. Ставим слежку за файлом:
# -w : watch (следить за файлом)
# -p wa : permission write/attribute (запись или смена прав)
# -k passwd_change : ключ поиска (тег для логов)
auditctl -w /etc/passwd -p wa -k passwd_change
2. Смотрим отчет: Кто трогал файл?
ausearch -k passwd_change
Вы увидите всё: PID процесса, UID пользователя и даже команду, которой это было сделано. Незаменимо при разборе инцидентов.
#linux #security #audit #forensics #securityhardening
🕵️♂️ Linux: stat — Вся правда о файле
Мы привыкли смотреть на файлы через
Команда:
Что смотреть в выводе:
1. Access (atime): Когда файл читали последний раз (полезно для поиска неиспользуемых конфигов).
2. Modify (mtime): Когда менялось содержимое файла.
3. Change (ctime): Когда менялись метананые (права, владелец).
* Нюанс: Если хакер подменил файл и скрутил
Форматированный вывод (для скриптов):
Используйте
#linux #forensics #stat #security #cli #audit
Мы привыкли смотреть на файлы через
ls -l . Но она показывает только время последней модификации ( mtime ). Когда нужно понять, действительно ли файл меняли, или просто поменяли права доступа ( chmod ), или когда к нему последний раз обращались — нужна команда stat .Команда:
stat /etc/passwd
Что смотреть в выводе:
1. Access (atime): Когда файл читали последний раз (полезно для поиска неиспользуемых конфигов).
2. Modify (mtime): Когда менялось содержимое файла.
3. Change (ctime): Когда менялись метананые (права, владелец).
* Нюанс: Если хакер подменил файл и скрутил
mtime назад (чтобы скрыть следы), ctime все равно выдаст время изменения!Форматированный вывод (для скриптов):
# Вывести только права в цифрах (например, 644)
stat -c "%a" filename
Используйте
stat при разборе инцидентов. ls часто врет (или недоговаривает).#linux #forensics #stat #security #cli #audit
🧟♂️ PowerShell: Охота на упавшие сервисы
Перед уходом на каникулы критически важно проверить: всё ли, что должно работать — работает? Частая ситуация: Агент мониторинга или Бэкап-сервис стоит в автозапуске (
Скрипт-минутка для поиска "мертвецов":
Что делать: Если список пуст — вы красавчик. Если что-то нашлось — пробуем
#windows #powershell #services #audit #maintenance #healthcheck
Перед уходом на каникулы критически важно проверить: всё ли, что должно работать — работает? Частая ситуация: Агент мониторинга или Бэкап-сервис стоит в автозапуске (
Automatic ), но упал неделю назад ( Stopped ). Вы об этом даже не знаете.Скрипт-минутка для поиска "мертвецов":
Get-Service |
Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped' } |
Select-Object Name, DisplayName |
Format-Table -AutoSize
Что делать: Если список пуст — вы красавчик. Если что-то нашлось — пробуем
Start-Service . Если падает снова — у вас есть задача на сегодня, пока все не ушли домой.#windows #powershell #services #audit #maintenance #healthcheck
🪟 PowerShell: Краткая сводка происшествий за праздники
Листать Event Viewer за 10 дней выходных — это боль. Вам нужно знать только одно: были ли критические ошибки?
Скрипт, который покажет только "Красные" события (Errors & Critical) за время праздников, сгруппированные по источникам.
Команда:
Результат: Вы увидите таблицу вроде:
* Disk — 5 ошибок (Стоит проверить RAID!)
* TermService — 1 ошибка (Ерунда)
Экономит часы кликанья мышкой.
#windows #powershell #eventlog #audit #monitoring #scripting
Листать Event Viewer за 10 дней выходных — это боль. Вам нужно знать только одно: были ли критические ошибки?
Скрипт, который покажет только "Красные" события (Errors & Critical) за время праздников, сгруппированные по источникам.
Команда:
# Проверяем последние 7 дней
$Date = (Get-Date).AddDays(-7)
Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2; StartTime=$Date} -ErrorAction SilentlyContinue |
Group-Object ProviderName |
Select-Object Count, Name |
Sort-Object Count -Descending |
Format-Table -AutoSize
Результат: Вы увидите таблицу вроде:
* Disk — 5 ошибок (Стоит проверить RAID!)
* TermService — 1 ошибка (Ерунда)
Экономит часы кликанья мышкой.
#windows #powershell #eventlog #audit #monitoring #scripting
👮♂️ PowerShell: Ревизия локальных админов
За время праздников (или в суете перед ними) кто-то мог выдать временные права "Локального админа" пользователю, чтобы поставить софт, и... благополучно забыть забрать. Это классическая дыра в безопасности.
Проверяем состав элитного клуба на сервере одной командой.
Скрипт:
На что смотреть: В списке должны быть только:
👑 Administrator (Встроенный)
🏢 Domain Admins (Группа домена)
🤖 Легитимные сервисные учетки.
Если видите DESKTOP\Ivan (обычный юзер) — удаляйте немедленно:
#windows #powershell #security #audit #localadmin #cleanup
За время праздников (или в суете перед ними) кто-то мог выдать временные права "Локального админа" пользователю, чтобы поставить софт, и... благополучно забыть забрать. Это классическая дыра в безопасности.
Проверяем состав элитного клуба на сервере одной командой.
Скрипт:
Get-LocalGroupMember -Group "Administrators" | Select-Object Name, PrincipalSource, ObjectClass
На что смотреть: В списке должны быть только:
👑 Administrator (Встроенный)
🏢 Domain Admins (Группа домена)
🤖 Легитимные сервисные учетки.
Если видите DESKTOP\Ivan (обычный юзер) — удаляйте немедленно:
Remove-LocalGroupMember -Group "Administrators" -Member "Ivan"
#windows #powershell #security #audit #localadmin #cleanup
🛡 PowerShell: Доверяй, но проверяй хеши (Get-FileHash)
Вы скачали ISO-образ Windows, драйвер для RAID-контроллера или инсталлятор. Как убедиться, что файл не побился при скачивании? И, что важнее, что хакеры не подменили его на сервере (Supply Chain Attack)?
Всегда сверяйте Hash Sum. В PowerShell это делается нативно.
Команда:
Как сверить автоматически (Лайфхак): Если у вас есть эталонный хеш с сайта разработчика, не сравнивайте глазами! Пусть компьютер работает:
Возьмите за правило: скачал критический софт — проверил хеш.
#windows #powershell #security #hashing #sha256 #audit
Вы скачали ISO-образ Windows, драйвер для RAID-контроллера или инсталлятор. Как убедиться, что файл не побился при скачивании? И, что важнее, что хакеры не подменили его на сервере (Supply Chain Attack)?
Всегда сверяйте Hash Sum. В PowerShell это делается нативно.
Команда:
Get-FileHash -Path .\Server_Image.iso -Algorithm SHA256
Как сверить автоматически (Лайфхак): Если у вас есть эталонный хеш с сайта разработчика, не сравнивайте глазами! Пусть компьютер работает:
$TrueHash = "A1B2C3... (копипаст с сайта)"
$FileHash = (Get-FileHash .\setup.exe).Hash
if ($FileHash -eq $TrueHash) { "✅ OK" } else { "❌ DANGER! Файл изменен!" }
Возьмите за правило: скачал критический софт — проверил хеш.
#windows #powershell #security #hashing #sha256 #audit
🔐 BitLocker: Твой ноутбук украли. Данные утекли?
В 2026 году потеря корпоративного ноутбука — это не потеря железа ($1000), это потеря данных (миллионы). Если диск не зашифрован, пароль Windows сбрасывается за 2 минуты флешкой с Linux.
Убедитесь, что BitLocker включен и ключи надежно защищены TPM-чипом.
PowerShell-аудит (одной строкой):
Что искать в выводе:
1. VolumeStatus: FullyEncrypted (Обязательно!)
2. ProtectionStatus: On
3. KeyProtector: Должен быть Tpm (безопасно) или TpmPin. Если там Password или пусто — это дыра.
Если статус
#windows #security #bitlocker #powershell #encryption #audit #tpm
В 2026 году потеря корпоративного ноутбука — это не потеря железа ($1000), это потеря данных (миллионы). Если диск не зашифрован, пароль Windows сбрасывается за 2 минуты флешкой с Linux.
Убедитесь, что BitLocker включен и ключи надежно защищены TPM-чипом.
PowerShell-аудит (одной строкой):
Get-BitLockerVolume | Select-Object MountPoint, VolumeStatus, EncryptionMethod, ProtectionStatus, KeyProtector
Что искать в выводе:
1. VolumeStatus: FullyEncrypted (Обязательно!)
2. ProtectionStatus: On
3. KeyProtector: Должен быть Tpm (безопасно) или TpmPin. Если там Password или пусто — это дыра.
Если статус
Off — включайте немедленно. Это база безопасности эндпоинтов.#windows #security #bitlocker #powershell #encryption #audit #tpm
👻 AD: Как найти действительно неактивных пользователей?
Вы хотите почистить домен от уволенных сотрудников. Вы смотрите свойство LastLogon. Но оно показывает старую дату. Вы удаляете юзера, а через час звонит директор: "Почему меня не пускает?".
Проблема: Атрибут LastLogon не реплицируется. Он обновляется только на том контроллере домена, через который прошел вход. Решение: Используйте LastLogonDate (это конвертированный LastLogonTimeStamp, который реплицируется, но с задержкой 9-14 дней).
PowerShell скрипт для поиска "мертвых душ" (> 90 дней):
Используйте этот список для проверки. Если дата входа была 3 месяца назад — смело отключайте (Disable), а удаляйте еще через месяц.
#windows #powershell #activedirectory #cleanup #audit #sysadmin
Вы хотите почистить домен от уволенных сотрудников. Вы смотрите свойство LastLogon. Но оно показывает старую дату. Вы удаляете юзера, а через час звонит директор: "Почему меня не пускает?".
Проблема: Атрибут LastLogon не реплицируется. Он обновляется только на том контроллере домена, через который прошел вход. Решение: Используйте LastLogonDate (это конвертированный LastLogonTimeStamp, который реплицируется, но с задержкой 9-14 дней).
PowerShell скрипт для поиска "мертвых душ" (> 90 дней):
$Date = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $Date -and Enabled -eq $true} -Properties LastLogonDate |
Select-Object Name, LastLogonDate, SamAccountName |
Sort-Object LastLogonDate |
Format-Table -AutoSize
Используйте этот список для проверки. Если дата входа была 3 месяца назад — смело отключайте (Disable), а удаляйте еще через месяц.
#windows #powershell #activedirectory #cleanup #audit #sysadmin
✍2
⚡ PowerShell: Как узнать, кто удалил файл на сетевом диске?
«Я ничего не трогал, оно само исчезло!» — классика. 🤡 Если в Active Directory включен аудит доступа к объектам, PowerShell поможет быстро найти виновника без долгого копания в Event Viewer.
Скрипт для поиска события удаления (Event ID 4660):
Нюанс: Чтобы это работало, на нужной папке в свойствах безопасности (вкладка «Аудит») должен быть включен аудит на удаление.
#windows #powershell #security #audit #active_directory #sysadmin 📂
«Я ничего не трогал, оно само исчезло!» — классика. 🤡 Если в Active Directory включен аудит доступа к объектам, PowerShell поможет быстро найти виновника без долгого копания в Event Viewer.
Скрипт для поиска события удаления (Event ID 4660):
# Укажите время, за которое ищем логи (последние 24 часа)
$TimeFilter = (Get-Date).AddDays(-1)
$Events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4660
StartTime = $TimeFilter
} -ErrorAction SilentlyContinue
foreach ($Event in $Events) {
[xml]$EventXml = $Event.ToXml()
$User = $EventXml.Event.EventData.Data | Where-Object { $_.Name -eq 'SubjectUserName' } | Select-Object -ExpandProperty '#text'
$Time = $Event.TimeCreated
Write-Host "🗑️ Файл был удален пользователем: $User в $Time" -ForegroundColor Red
}
Нюанс: Чтобы это работало, на нужной папке в свойствах безопасности (вкладка «Аудит») должен быть включен аудит на удаление.
#windows #powershell #security #audit #active_directory #sysadmin 📂
🐧 Linux: systemd-analyze security — узнай, насколько дырявые твои сервисы 🛡️
Ты поднял Nginx, базу данных и пару самописных демонов.
Они работают.
Но насколько они защищены от взлома, если в коде найдется уязвимость?
В 2026 году systemd имеет встроенный сканер безопасности, о котором многие забывают.
Он анализирует unit-файлы и выставляет оценку "опасности" от 0 (безопасно) до 10 (проходной двор).
Команда-аудитор:
Как исправить "красные" зоны:
Выбери сервис с плохой оценкой (например, nginx.service) и посмотри детали:
Добавь в секцию [Service] файла юнита простые директивы изоляции:
Результат: Даже если сервис взломают, хакер окажется в "тюрьме" и не сможет навредить системе. Оценка упадет с 9.0 до 2.0. ✅
#linux #security #systemd #hardening #sysadmin #devops #audit
Ты поднял Nginx, базу данных и пару самописных демонов.
Они работают.
Но насколько они защищены от взлома, если в коде найдется уязвимость?
В 2026 году systemd имеет встроенный сканер безопасности, о котором многие забывают.
Он анализирует unit-файлы и выставляет оценку "опасности" от 0 (безопасно) до 10 (проходной двор).
Команда-аудитор:
systemd-analyze security
Как исправить "красные" зоны:
Выбери сервис с плохой оценкой (например, nginx.service) и посмотри детали:
systemd-analyze security nginx.service
Добавь в секцию [Service] файла юнита простые директивы изоляции:
[Service]
PrivateTmp=yes # Свой /tmp, невидимый другим
ProtectSystem=strict # Запрет записи в системные папки
ProtectHome=yes # Запрет чтения /home
NoNewPrivileges=yes # Запрет повышения прав (sudo)
Результат: Даже если сервис взломают, хакер окажется в "тюрьме" и не сможет навредить системе. Оценка упадет с 9.0 до 2.0. ✅
#linux #security #systemd #hardening #sysadmin #devops #audit
🪟 Windows: Быстрый аудит входов через PowerShell
Коллеги, в марте 2026-го безопасность — это не просто слово, а ежедневная рутина. Если тебе нужно быстро узнать, кто заходил на сервер за последние сутки, не нужно ждать вечность, пока прогрузится тяжелый графический Event Viewer. Мы сделаем это прямо в консоли.
Скрипт для проверки (копируй и запускай):
Зачем это нужно:
#windows #powershell #security #audit #admin_future
Коллеги, в марте 2026-го безопасность — это не просто слово, а ежедневная рутина. Если тебе нужно быстро узнать, кто заходил на сервер за последние сутки, не нужно ждать вечность, пока прогрузится тяжелый графический Event Viewer. Мы сделаем это прямо в консоли.
Используем Get-WinEvent с фильтром по ID 4624 (успешный вход).
Скрипт для проверки (копируй и запускай):
# Список успешных входов за последние 24 часа
$Time = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=$Time} |
Select-Object TimeCreated, @{Name='User'; Expression={$_.Properties[5].Value}} |
Format-Table -AutoSize
Зачем это нужно:
Для контроля. Ты сразу увидишь, если в систему заходил кто-то лишний или под учеткой, которая должна быть неактивна. В пятницу перед уходом домой — это отличная привычка для проверки безопасности своей цифровой крепости.
#windows #powershell #security #audit #admin_future
🛡️ Windows: Аудит элитного клуба — мониторим Domain Admins через PowerShell
Доверие — это отлично, но контроль — лучше. Особенно если дело касается группы Domain Admins. Представьте: в вашей инфраструктуре есть только два легитимных администратора — условные Bogdan и Roman. А в один прекрасный день скрипт показывает третьего. Это либо взлом, либо кто-то временно выдал права техподдержке и забыл забрать. В 2026 году такие инциденты стоят бизнесу миллионы.
Скрипт мониторинга критичной группы:
#windows #powershell #activedirectory #security #audit #admin_future
Доверие — это отлично, но контроль — лучше. Особенно если дело касается группы Domain Admins. Представьте: в вашей инфраструктуре есть только два легитимных администратора — условные Bogdan и Roman. А в один прекрасный день скрипт показывает третьего. Это либо взлом, либо кто-то временно выдал права техподдержке и забыл забрать. В 2026 году такие инциденты стоят бизнесу миллионы.
Вместо того чтобы кликать мышкой по оснастке Active Directory, повесьте в планировщик задач простой скрипт, который будет следить за изменениями.
Скрипт мониторинга критичной группы:
$Domain = "domain.local"
$GroupName = "Domain Admins"
$AllowedAdmins = @("adm1", "adm1", "adm3")
# Получаем текущий состав группы
$CurrentMembers = Get-ADGroupMember -Identity $GroupName -Server $Domain | Select-Object -ExpandProperty SamAccountName
# Ищем чужаков
$Unauthorized = $CurrentMembers | Where-Object { $_ -notin $AllowedAdmins }
if ($Unauthorized) {
Write-Warning "⚠️ АЛАРМ! Найдены неавторизованные пользователи в Domain Admins: $($Unauthorized -join ', ')"
# Здесь можно добавить код отправки алерта в Telegram или на почту
} else {
Write-Host "✅ Состав группы Domain Admins в норме." -ForegroundColor Green
}
Группа политик безопасности (GPO) не всегда спасет, если учетка скомпрометирована. Автоматический аудит критически важных групп — это ваш первый рубеж обнаружения внутренних угроз.
Безопасность домена начинается с понимания того, у кого от него ключи.
#windows #powershell #activedirectory #security #audit #admin_future