Monday 27 December 2021

Прячем Grafana за Nginx.

Всем привет. 

Задача №1 - спрятать Grafana за Nginx по ссылке http://myserver1. Полагаем что наш Nginx по умолчанию отдает index.html.

Переходим в папку Nginx sites-enabled:

cd /etc/nginx/sites-enabled

Создаем новую конфигурацию Nginx для Grafana:

sudo nano myserver1.conf

Название файла конфигурации точно такое же как и сайта, в моем случае "myserver1".

Указываем в нем следующее:

server {

    listen 80;

    listen [::]:80;

    server_name  myserver1;

    location / {

        proxy_pass http://localhost:3000/;

    }

}

Сохраняем и провереям созданный конфиг:

>Nginx -t 

Перезапускаем nginx:

sudo service nginx restart

sudo service nginx status

Имеем Grafana по адресу:

http://myserver1

Это хорошо работает если Grafana на отдельном сервере. Если она на том же сервер что и Zabbix,  то лучше добавить немного безопасности для Grafana. Поэтому ставим следующую задачу.

Wednesday 22 December 2021

PowerShell Direct.

Всем привет.

PowerShell Direct - это новый функционал PowerShell в Windows Server 2016 и Windows 10, позволяющая  создать  прямую локальную PowerShell сессию с любой виртуальной машиной, запущенной на хосте Hyper-V, причем подключение идет не через сеть, а через внутреннюю шину VM bus. Таким образом, администратор  Hyper-V может осуществлять управление ВМ с помощью PowerShell даже на изолированной системе без виртуальных сетевых адаптеров, т.е. можно получить доступ к ВМ которая потеряла связь по сети.

Основные требования для использования Powershell Direct:

  • в качестве хостовой ОС Hyper-V может использоваться Windows Server 2016 или Windows 10 или выше;
  • гостевая ВМ должна быть запущена на том же хосте Hyper-V, с которого осуществляется подключение (т.е. подключение исключительно локальное!);
  • гостевая ОС виртуальной машины также должна быть ОС не ниже Windows Server 2016 или Windows 10;
  • на хосте Hyper-V консоль Powershell должна быть запущена из-под администратора;
  • для подключения к гостевой ОС виртуальной машине нужно будет указать имя пользователя и пароль учетной записи этой ВМ.

Ранее администратор мог выполнять команды на виртуальной машине в Hyper-V только по сети с помощью  Invoke-Command или Enter-PSSession. 

В качестве параметра для подключения к удаленной ВМ нужно указывать ее сетевое имя (-ComputerName) или ее имя в Hyper-V (-VMName).

$cred = Get-Credential

К примеру, получить список запущенных процессов на удаленном сервере можно так:

Invoke-Command -VMName "TEST01" -ScriptBlock {Get-Process} -Credential $cred

Или создать новую интерактивную PS сессию с удаленным сервером:

Enter-PSSession -VMName "TEST01" -Credential $cred

В таком сценарии PS сессию нельзя было установить с ВМ, отключенной от виртуального коммутатора, находящейся в изолированной или защищенной файрволом системе. Все управление осуществляется только через графическую консоль Hyper-V. Для подключения к такой гостевой ВМ с помощью Powershell Direct используется не сетевое имя гостевой ОС, а имя или GUID ВМ в среде Hyper-V. При подключении через Powershell Direct также можно использовать Enter-PSSession для создания интерактивного сеанса Powershell, либо Invoke-Command для запуска одной команды или скрипта.

Saturday 18 December 2021

Синхронизация времени в Active Directory.

Всем привет.

Синхронизация времени - важный и во многом достаточно критичный аспект работы Active Directory, особенно сегодня, когда широко используется взаимодействие с внешними системами и работа с сотрудниками, которые могут находиться в различных часовых поясах. Применение систем виртуализации вносит дополнительные особенности, которые также следует учитывать. Поэтому данный вопрос может оказаться не столь простым, как кажется, а синхронизация с внешним источником точного времени становится одной из актуальных задач.

Прежде всего вспомним, как происходит синхронизация времени в Active Directory. В качестве эталона времени выступает контроллер, владеющий ролью эмулятора PDC. Это FSMO-роль и эмулятором PDC может являться только один контроллер в каждом домене. С ним синхронизируют время остальные контроллеры домена. Доменные ПК и рядовые серверы сверяют часы с ближайшим контроллером домена.

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

С приходом виртуализации все изменилось, появился еще один источник времени - время хоста виртуализации. Многие гипервизоры по умолчанию имеют включенной настройку синхронизации времени гостевых систем и при попадании в виртуальную среду контроллера может возникнуть следующая коллизия: контроллер синхронизирует время с хостом, но сам хост, являясь членом домена, в свою очередь синхронизируется с контроллером.


Еще хуже, если в виртуальную среду попадает эмулятор PDC, в силу особенностей таймера виртуальных машин, время внутри может достаточно сильно плавать, поэтому виртуальный эмулятор PDC всегда должен синхронизировать время с внешним источником, а синхронизация времени с хостом должна быть отключена, последнее касается и всех остальных виртуальных членов домена.

Tuesday 14 December 2021

Полезная программа CMPivot.

Всем привет.

SCCM cодержит в себе многофункциональную отчетную подсистему, которая позволяет выводить разностроннюю информацию относительно последнего опроса своих клиентов. По умолчанию опрос происходит каждые 7 дней.

Начиная с версии 1806 в SCCM появилась встроенная программа CMPivot, которая имеет доступ к состоянию устройств в режиме реального времени. CMPivot позволяет быстро оценить состояние устройств в вашей среде и предпринять действия. При вводе запроса CMPivot запустит его в режиме реального времени на всех подключенных устройствах в выбранной коллекции. Возвращенные данные можно затем отфильтровать, сгруппировать и уточнить, чтобы ответить на бизнес-вопросы, устранить проблемы в среде или угрозы безопасности. 

Принцип работы CMPivot.

CMPivot соединяется с SCCM-клиентами с применением «быстрого канала», который связывает сервер с клиентом, а также используется для уведомления клиентов, получения данных об их состоянии, защиты с помощью Endpoint Protection. Если клиент находится в активном состоянии, то он сразу отвечает на запрос. С офлайновых клиентов CMPivot может получить данные в течение одного часа при условии, что программа не закроется, а компьютеры станут доступными и клиенты получат статус Active. Все полученные результаты будут временно храниться в базе данных (кеш данных).

Работа с CMPivot.

Интерфейс программы CMPivot разделен на три части. Слева расположена панель с объектами, посередине сверху – поле для написания запросов, а под ней – поле для отображения результатов.

Для работы с CMPivot должны быть права администратора:

SMS_Scripts – Read = Yes

Collections – Run Script = Yes

Чтобы запустить CMPivot, нужно в консоли SCCM зайти в Asset and Compliance → Overview → Device Collections, на любой коллекции компьютеров нажать правой кнопкой мыши и выбрать пункт Start CMPivot либо нажать кнопку "Start CMPivot" на верхней панели. Закладка "Главная" имеет развернутую справку по списку сущностей, операторов и функций, которые можно будет применять в запросах CMPivot. В поле слева можно развернуть любую сущность чтобы узнать какие свойства она может показать и формат (текст, дата, число, логика) этого свойства.

CMPivot использует подмножество модели потока данных Azure Log Analytics, запросы очень похожи на запросы языка SQL, но называются Kusto Query Language (KQL) . Совокупность клиентских сущностей и операторов разделяется «|», представляя поток табличных данных слева направо. Каждый следующий оператор получает набор табличных данных от предыдущего, дополняет новыми наборами из тела оператора и передает дальше по конвейеру. Конструкция выглядит так:

Сущность | оператор1 | оператор2 | ...

Комментарий начинается с //.

Saturday 11 December 2021

Файл не может быть дешифрован.

Всем привет.

При миграции между доменами пользователя AD может ожидать сюрприз со стороны EFS. Т.е. файлы которые он зашифровал ранее могут вдруг стать для него недоступными. 

Смотрим рисунок. Изначально только у зашифровавшего его пользователя (Dps7) и у указанного ниже админа (Administrator) есть сертификат для расшифровки файла. Это работает до того момента пока пользователь находится в своем домене. Причем файлы открываются как обычно, пользователь может даже забыть что они их зашифровал.

А завтра пользователя мигрировали в другой домен и файлы стали для него в один момент залочены с сообщением "Файл не может быть дешифрован". 

Что же можно сделать? Можно залогиниться под старым пользователем со старого домена. Т.е. мигрировать пользователя обратно если старый домен еще жив.

Или тоже самое сделать под указанным админом. Или достать сертификат этого админа с любого другого хоста из старого домена. Нужен сертификат и приватный ключ pfx-файл. Но проблема может быть в том, что главный Administrator (а это точно он!) обычно в AD отключен и для логинов не используется.

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

Успехов.

Friday 10 December 2021

Глобальная чистка Windows с Powershell.


Всем привет.

Нашел я на просторах сети еще один мега-скрипт очистки Windows, который перебирает все наявные профили в системе. Собственно сам скрипт:

# задаем системные пути для очистки:

$SysCleanPathsArr = "C:\Temp\*","C:\Windows\Temp\*","C:\tmp\*"

# чистим согласно заданных путей: 

ForEach ($Path in $SysCleanPathsArr) {

Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf

 }

# задаем возможные пути чистки в профилях пользователей:

$InProfilesCleanPathsArr = "\AppData\Local\Temp\*","\AppData\Local\*.auc","\AppData\Local\Microsoft\Terminal Server Client\Cache\*", "\AppData\Local\Microsoft\Windows\Temporary Internet Files\*","\AppData\Local\Microsoft\Windows\WER\ReportQueue\*","\AppData\Local\Microsoft\Windows\Explorer\*"

# извлекаем из реестра местоположение профилей и формируем список:

$Profiles = Get-ChildItem (Get-ItemProperty -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList").ProfilesDirectory -Exclude "Администратор","Administrator","Setup","Public","All Users","Default User"

# чистим согласно списка:

ForEach ($Profile in $Profiles) {

 ForEach ($Path in $InProfilesCleanPathsArr) {

 Remove-Item -Path $Path -Recurse -Force -ErrorAction SilentlyContinue -WhatIf

  }

}

# напоследок чистим Корзину: 

Clear-RecycleBin -Force

(New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | Remove-Item -Recurse -Force

Совет: прогоните скрипт для начала с -WhatIf чтобы оценить последствия. А потом уже запускайте без предохранителя. Мало ли.) 

Удачи.

Wednesday 8 December 2021

Форматы файлового вывода в Powershell.

Всем привет.

В Powershell кроме простого перенаправления вывода в текстовый файл есть возможность сделать это и в другие форматы: XML, JSON, HTML и, конечно же, CSV.  Причем можно использовать как командлет ConvertТо_ так и Export_.

# XML

Get-Process | Export-CliXML d:\processes.xml -Encoding UTF8

Get-Process | ConvertTo-XML | Set-Content d:\processes2.xml -Encoding UTF8

P.S.: а вот тут глюк - без ошибок, но файл processes2.xml получился нулевого размера!

# JSON

Get-Process | ConvertTo-Json | Set-Content d:\processes.json -Encoding UTF8

# HTML

Get-Process | ConvertTo-HTML | Set-Content d:\processes.html -Encoding UTF8

# CSV

Get-Process | Export-CSV d:\processes.csv -Encoding UTF8

Get-Process | ConvertTo-CSV | Set-Content d:\processes2.csv -Encoding UTF8

# TXT

Get-Process | Out-File d:\processes.txt -Encoding UTF8

И не забываем везде добавлять кодирование -Encoding UTF8.

Monday 6 December 2021

MSC оснастки Windows.


Всем привет. 

Уверен что всегда полезно иметь (и в голове) список необходимых элементов оснастки Консоли управления в Windows. Почему? Подчас набрать десяток символов намного удобнее и быстрее чем перещелкиваться мышкой  по окнам. Собственно вот и он в 3-х частях:

1. Перечень msc оснасток для Windows:

appwiz.cpl — Установка и удаление программ

certmgr.msc — Сертификаты

ciаdv.msc — Служба индексирования

cliconfg — Программа сетевого клиента SQL

clipbrd — Буфер обмена

compmgmt.msc — Управление компьютером

dcomcnfg — Консоль управления DCOM компонентами

ddeshare — Общие ресурсы DDE (на Win7 не работает)

desk.cpl — Свойства экрана

devmgmt.msc — Диспетчер устройств

dfrg.msc — Дефрагментация дисков

diskmgmt.msc — Управление дисками

drwtsn32 — Dr.Watson

dxdiag — Служба диагностики DirectX

eudcedit — Редактор личных символов

eventvwr.msc — Просмотр событий

firewall.cpl — настройки файерволла Windows

gpedit.msc — Груповая политика

fsmgmt.msc — Общие папки

fsquirt — Мастер передачи файлов Bluetooth

chkdsk — Проверка дисков (обычно запускается с параметрами буква_диска: /f /x /r)

control printers — Принтеры и факсы — запускается не всегда

control admintools — Администрирование компьютера — запускается не всегда

control schedtasks — Назначенные задания (планировщик)

control userpasswords2 — Управление учётными записями

compmgmt.msc — Управление компьютером (compmgmt.msc /computer=pc — удаленное управление компьютером pc)

lusrmgr.msc — Локальные пользователи и группы

mmc— создание своей оснастки

mrt.exe — Удаление вредоносных программ

msconfig — Настройка системы (автозапуск, службы)

mstsc — Подключение к удаленному рабочему столу

ncpa.cpl — Сетевые подключения

ntmsmgr.msc — Съёмные ЗУ

mmsys.cpl — Звук

ntmsoprq.msc — Запросы операторов съёмных ОЗУ (для XP)

odbccp32.cpl — Администратор источников данных

perfmon.msc — Производительность

regedit — Редактор реестра

rsop.msc — Результатирующая политика

secpol.msc — Локальные параметры безопасности (Локальная политика безопасности)

services.msc — Службы

sfc /scannow — Восстановление системных файлов

sigverif — Проверка подписи файла

sndvol — управление громкостью

sysdm.cpl — Свойства системы

syskey — Защита БД учётных записей

taskmgr — Диспетчер задач

utilman Диспетчер служебных программ

verifier Диспетчер проверки драйверов

wmimgmt.msc — Инфраструктура управления WMI

Wednesday 1 December 2021

Членство в коллекции SCCM.


Всем привет.

Не редко бывает необходимость добавить(удалить) в коллекции SCCM всего один хост, который не подчиняется заданным правилам. Мышкой нащелкать можно, но скучно. Поэтому лучше для это использовать Powershell.

Как инициировать сессию к сайту SCCM я писал ранее, поэтому сегодня просто пройдусь по командам.

Найти хост:

Get-CMDevice -CollectionName "All Computers" | where {$_.name -like '*0008*'} 

Найти пользователя:

Get-CMUSER -CollectionName "All Users" | where {$_.name -like '*Pupkin*'} | ft name

Получаем текущие логины на хостах главной колекции:

(Get-CMDevice -Name $Computer -CollectionName "All Computers").UserName

Получить всех членов коллекции "Forza Upgrade":

Get-CMDeviceCollection –Name "Forza Upgrade"

Получить имена всех членов коллекции "Forza" и ID коллекций в которых они состоят:

Get-CMDeviceCollection –Name "Forza*" | Select Name,CollectionID

Добавляам хост T3-WKS007 в коллекцию c ID "UA1009DA" (ID получен из предыдущего запроса):

$CMCollectionID = "UA1009DA"

$Computer = "T3-WKS007" 

Add-CMDeviceCollectionDirectMembershipRule -CollectionID $CMCollectionID -ResourceId $(Get-CMDevice -Name $Computer -CollectionName "All Computers").ResourceID

Ищем хост T3-WKS007 в главной коллекции:

Get-CMDevice -Name $Computer -CollectionName "All Computers"

А теперь ищем хост T3-WKS007 в нашей коллекции:

Get-CMDevice -Name $Computer -CollectionName "Forza Upgrade"

Или удаляем хост T3-WKS007 из коллекции UA1009DA:

Remove-CMDeviceCollectionDirectMembershipRule -CollectionID $CMCollectionID -ResourceId $(Get-CMDevice -Name $Computer -CollectionName "All Computers").ResourceID

Успехов.

Tuesday 23 November 2021

Практические кейсы с Volatility.

Всем привет.

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

Как правило, для ана­лиза оперативной памяти используют нес­коль­ко при­ложе­ний: Volatility, Memoryze и Autopsy. Autopsy конечно же удобный инструмент, который может одним нажатием кнопки сделать комплексный анализ всего дампа. Но, если речь идет о кейсах когда вы ограничены о времени, тогда важна скорость получения результатов, т.е. лучше использовать, что-то другое консольное. Поэтому сегодня я для анализа дампа оперативной памяти буду исполь­зовать Volatility.

Для своих тестов я взял три дампа Windows:

1) ch2.dmp, Win7SP0x86 получен здесь.

2) memdump.mem, WinXPSP3x86 получен самостоятельно.

3) challenge.vmem, Win10x64_18362 получен здесь.

Сразу оговорюсь что с третьим кейсом у меня получился фейл. Традиционный запрос на определение профиля дампа:

volatility_2.6_win64_standalone.exe -f challenge.vmem imageinfo

мне ничего не выдал. Даже подстановка вручную профиля Win10x64 к успеху не привела. Так что далее я работал только с первыми двумя дампами.

Case 1.

Получение имени компьютера, с моей точки зрения, не является чем-то важным, поэтому это присходит буквально за два шага извлечением значения ключа реестра из ControlSet001\Control\ComputerName\ActiveComputerName:

volatility_2.6_win64_standalone.exe -f ch2.dmp --profile=Win7SP0x86 hivelist

volatility_2.6_win64_standalone.exe -f ch2.dmp --profile=Win7SP0x86 hivedump -o 0x8b21c008 > hi_dump.txt

findstr "ComputerName" hi_dump.txt

volatility_2.6_win64_standalone.exe -f ch2.dmp --profile=Win7SP0x86 printkey -K "ControlSet001\Control\ComputerName\ActiveComputerName"

В качестве бонуса к заданию я попытался реконструировать снимок последнего desktop-a.

volatility_2.6_win64_standalone.exe -f ch2.dmp --profile=Win7SP0x86 screenshot -D F:\Case\Dump

Однако сборка версии 2.6 заточена на библиотеку PIL, где и я получил ошибку "Please Install PIL". PIL уже давно именуется как Pillow, что требует перекомпиляцию всего кода volatility, поэтому более быстрым решением стало использование версии volatility 2.4:

volatility-2.4.standalone.exe -f ch2.dmp --profile=Win7SP0x86 screenshot --dump-dir=/


Wednesday 17 November 2021

Уникальный плагин для Teams.

Всем привет.

Cегодня утром при запуске всеми обожаемого Teams-а выплыло предложение установить плагин Helper v1.0. Не вдаваясь в детали Алекс согласился. После установки плагина Teams попросил перезапуск, вслед за ним на перезапуск попросилась и сама Windows.

После нового старта Teams-а Helper провел анализ времени продуктивной работы за неделю и запланированных собраний. И выдал напоминание на экран что Алексу буквально вчера рекомендовали изменить фон видеочата. Да, участвовать в митингах из дому удобно, но эта стена в его комнате... Алекс по привычке потянулся оформлять заявку на сервис-деск...

- Я могу сделать это прямо сейчас. - выскочило в новом окне.

- Вот как? А ну-ка покажи варианты. - отстучал Алекс в ответ.

Фон позади Алекса изменился на светлый офис с видом на деловой квартал города.

- А еще?

Фон позади начал меняться с частотой в одну секунду... 

- О, вот эти пальмы, прибой, океан,...то что надо. - поспешил заметил Алекс.

- Нет, не пойдет, - вежливо заметил Helper.

- Как это "не пойдет"? - возмутился Алекс.

- Смотри сам - невозмутимо заметил Helper.

При этом изображение Алекса за пару секунд растворилось до слабовидимых контуров на экране.

- Это еще что за глюк?

- Мои алгоритмы анализа совместимости говорят мне что ты являешься лишним на таком фоне. - также невозмутимо продолжил Helper.

- Ты ваще офигел? Алгоритмы видите ли?! Это я то лишний? - Алекс не находил себе места.

- Алекс, а зачем тебе другой фон? - продолжил Helper.

- Что? Фон?! Ты видишь что у меня за спиной? - Алекс был вне себя.

- Ну не то чтобы очень, но этот ковер из прошлого века на стене наводит грусть даже на меня. Ты что-то там прячешь? - спросил Helper.

- Не твое дело. У меня совещание завтра. Говорят что в Teams можно поменять фон на время митинга. Это что - проблема?

- Вовсе нет. А ты не пробовал поменять сам ковер или, на худой конец, повернуть камеру? - спросил Helper.

- Меня все устраивает и так! - отрезал Алекс.

- Как интересно, все устраивает, кроме фона для завтрашнего митинга...! - Helper взял паузу.

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

К 8-ми утра Алекс приготовил себе кофе, и привычным кликом активировал утренний митинг. На экране он увидел себя, а позади солнце, пальмы, прибой океана,...то что надо. Плагин работает! Пальмы на экране раскачивались при дуновении ветра, волны нехотя накатывались на белый песок.

- Класс, даже анимацию всунули. - заметил улыбаясь Алекс.

Митинг закончился быстро. Кто-то даже пошутил про новый фон Алекса. "Зато не ковер!" - отметил он про себя. По окончании митинга выплыло сообщение оценить качество связи, в котором Алекс поставил твердую пять. Затем выплыл еще один запрос - желает ли Алекс использовать новую версию фона по умолчанию. Он, не задумываясь, ответил "Yes". Алекс услышал крики чаек, чуть помедлив сбросил туфли и с наслаждением погрузил свои ноги в белый песок. Он почувствовал как океан осторожно коснулся его ног... тропическое солнце становилось все ярче...

Плагин работал на полную.

Tuesday 16 November 2021

Подписываем PowerShell скрипт с помощью сертификата.


Всем привет.

Наличие цифровой подписи у скрипта или исполняемого файла позволяет пользователю удостовериться, что файл является оригинальным и его код не был изменен третьими лицами. В современных версиях PowerShell есть встроенные средства для подписывания кода файла скриптов *.ps1 с помощью цифровых сертификатов.

Для подписывания скриптов PowerShell нужно использовать специальный сертификат типа Code Signing. Этот сертификат может быть получен от внешнего коммерческого центра сертификации, внутреннего корпоративного Certificate Authority (CA) или можно даже самоподписанный сертификат.

Шаг 1 - сертификат.

В первую очередь нам нужно получить сертификат типа CodeSign из локального хранилища сертификатов текущего пользователя. Сначала выведем список всех сертификатов, которые можно использовать для подписывания кода:

Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert

Возьмем первый сертификат и сохраним его в переменную $cert.

$cert = (Get-ChildItem cert:\CurrentUser\my –CodeSigningCert)[0]

Затем можно использовать данный сертификат, чтобы подписать файл PS1 с вашим скриптом PowerShell:

Set-AuthenticodeSignature MyTest.ps1 -Certificate $cert

Или

Set-AuthenticodeSignature -Certificate $cert -FilePath MyTest.ps1

Теперь можно проверить, что скрипт подписан. Можно использовать командлет Get-AuthenticodeSignature  или открыть свойства PS1 файла и перейдти на вкладку Digital Signatures: Get-AuthenticodeSignature MyTest.ps1 | ft -AutoSize

Если при выполнении команды Set-AuthenticodeSignature появится предупреждение  UnknownError, значит наш сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя. Нужно переместить его в корневые сертификаты:

Move-Item -Path $cert.PSPath -Destination "Cert:\LocalMachine\Root"

Хотя наш сертификат теперь из доверенного Центра Сертификации, но он не от доверенного издателя. Поэтому следует его также скопировать в раздел Trusted Publishers с помощью обычной операции Copy-Paste в консоли Certificates.

Saturday 13 November 2021

REST API и PowerShell.

Всем привет.

Теперь, когда вы знаете, как работать с данными JSON, давайте сделаем нечто более интересное: мы воспользуемся PowerShell для запроса REST API и анализа полученных результатов. Вы можете использовать практически любой REST API, но для некоторых требуется  аутентификация, поэтому будем использовать тот, который ее не требует. Используем сервис postcodes.io как вариант REST API, который позволяет вам запрашивать почтовые индексы стран по различным критериям.

Мы будем использовать URI api.postcodes.io/random/postcodes. Когда вы обращаетесь к этому URI, он запрашивает службу API postcodes.io и возвращает случайный почтовый индекс в форме JSON. Чтобы запросить этот URI, мы будем использовать PowerShell-командлет Invoke-WebRequest:

PS> $result = Invoke-WebRequest -Uri 'http://api.postcodes.io/random/postcodes'

PS> $result.Content


{"status":200,"result":{"postcode":"IP12

2FE","quality":1,"eastings":641878,"northings":250383,"country

:"England","nhs_ha":"East of England","longitude":

1.53013518866685,"latitude":52.0988661618569,"european_elector

al_region":"Eastern","primary_care_trust":"Suffolk","region":"

East of England","lsoa":"Suffo

lk Coastal 007C","msoa":"Suffolk Coastal

007","incode":"2FE","outcode":"IP12","parliamentary_constituen

cy":"Suffolk Coastal","admin_district":"Suffolk Coa

stal","parish":"Orford","admin_county":"Suffolk","admin_ward":

"Orford & Eyke","ccg":"NHS Ipswich and East

Suffolk","nuts":"Suffolk","codes":{"admin_distri

ct":"E07000205","admin_county":"E10000029","admin_ward":"E0501

449","parish":"E04009440","parliamentary_constituency":"E14000

81","ccg":"E38000086","nuts"

:"UKH14"}}}

Friday 12 November 2021

JSON и Powershell.


Всем привет. 

Если вы работали в ИТ-сфере в течение последних пяти лет, вы, вероятно, сталкивались с объектами JSON. JavaScript Object Notation (JSON), созданный в начале 2000-х годов, представляет собой машиночитаемый, но при этом понятный человеку язык иерархической организации наборов данных. Как следует из названия, такое представление данных активно использовалось в приложениях JavaScript, а следовательно, и в веб-разработке. Недавний всплеск числа онлайн-сервисов, пользующихся REST API (это технология, которую используют для передачи данных между клиентом и сервером), привел к параллельному всплеску использования JSON. Если вы что-то делаете в интернете, вам пригодится навык работы с файлами JSON, которыми можно легко управлять в PowerShell.

Если говорить более конкретно, то JSON позволяет описывать объекты, на подобие того как это делает xml, но намного проще. По сути JSON-объекты представляют собой хеш-таблицу, допускающую вложенность.

Следующий пример показывает JSON-представление объекта, описывающего человека. В объекте есть строковые поля имени и фамилии, объект, описывающий адрес, и массив, содержащий список телефонов.

{

   "firstName": "Иван",

   "lastName": "Иванов",

   "address": {

       "streetAddress": "Московское ш., 101, кв.101",

       "city": "Петербург",

       "postalCode": 101101

   },

   "phoneNumbers": [

       "812 123-1234",

       "916 123-4567"

   ]

}

Для работы с JSON-объектами в Powershell начиная с версии 3.0 предусмотрены специальные командлеты:

PS C:\> Get-Command '*json'

CommandType    Name                              ModuleName

-----------    ----                              ----------

Cmdlet         ConvertFrom-Json                  Microsoft.PowerShell.Utility

Cmdlet         ConvertTo-Json                    Microsoft.PowerShell.Utility

Wednesday 10 November 2021

Pixel Maker - все возможно!

Всем привет.

Известная компания The Mountain более 40 лет выпускает футболки с рисунком.

В 1996 году The Mountain начинают сотрудничать с профессиональными художниками и становятся единственными в мире, кто выпускает футболки с потрясающими и уникальными рисунками, которые являются произведением искусства класса "artwear". Футболка с романтическими рисунками, футболка в готическом стиле - все это работы Энн Стокс, благодаря которой была создана коллекция невероятных футболок в стиле Fantasy. Для любителей дикой природы, Антониа Нешью более 20 лет создает реалистичные дизайны диких животных, в попытке показать удивительный, скрытый от наших глаз мир красоты и необычайности дикой природы. Она знаменита своей коллекцией футболок Three Wolf Moon - феномен, произведший сенсацию во всем мире.

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

Однако я нашел для вас выход! Вот онлайн площадка Pixel Maker где все возможно!


Здесь доступна как флекс-печать так и прямая печать которую можно заказать на футболке любого размера и цвета.  А можно на кепке, худи, сумке и даже на анти-ковидной маске! Это ваш шанс заявить про себя без лишних слов!

Налетай!🤩 

iLO 5 и удаленное управление.

Всем привет.

Сегодня глянем одни глазком на iLO 5 на базе сервера HPE Proliant Gen10. Собственно массивный обзор с большим количеством скриншотов находится здесь.  Лично у меня была задача выяснить все способы удаленного управления iLO. Integrated Lights-Out (iLO) - механизм управления серверами в условиях отсутствия физического доступа к ним. Этакая проприетарная ОС на борту, которая применяется фирмой Hewlett Packard почти для всех своих серверов.

Первым мне поддержка НР указала на утилиту Directories Support for ProLiant Management Processors.

# Directories Support for ProLiant Management Processors: DirSupport.exe

Собственно с ее помощью можно легко выяснить активные iLO в вашей сети. Разумеется нужна учетка админа iLO. Поэтому желательно чтобы она была одинакова на всех ваших iLO.

Можно также выполнить следующее:

1.Find management processors on the network.

2.Upgrade their firmware to versions that support directories.

3.Give them names that will be used to identify them in the directory.

4.Create objects in the directory corresponding to each management processor and associate them to a role.

5.Configure the management processors to allow them to communicate with the directory.

6.Configure management processors for Kerberos based authentication.

Следующим инструментом может быть HPQLOCFG - это программное обеспечение командной строки, которое позволяет отправлять XML-конфигурационные и управляемые сценарии по сети на интерфейс HP iLO.

# HP Lights-Out Configuration Utility: HP ILO Remote Console.exe

Исполняемый файл после инсталяции hpqlocfg.exe

Подсоединение делаем так:

hpqlocfg -f Factory_Defaults.xml -s 192.168.0.10 -t user=administrator,password=mypass

Вот содержимое файла Factory_defaults.xml:

<RIBCL VERSION="2.0">

   <LOGIN USER_LOGIN="adminname" PASSWORD="password">

      <RIB_INFO MODE="write">

         <FACTORY_DEFAULTS/>

      </RIB_INFO>

   </LOGIN>

</RIBCL>

Tuesday 9 November 2021

Про PowerShell Empire Framework.

Всем привет.

Наша жизнь невозможна без фреймворков. Фреймворки помогают создавать код, помагают выполнять код, и помогают код исследовать. Сегодня говорим про иcследование кода.

Мы любим PowerShell, но когда на нем еще и создан фреймворк, то мы любим его вдвойне. PowerShell Empire Framework - это фреймворк для пост эксплуатации windows(и не только!) систем, написанный полностью на PowerShell (серверная часть на Python, а клиентская на PowerShell, поэтому легко поднять серверную часть на том же Kali Linux, что я и сделал) который имеет в себе огромный функционал. Как вы заметили что помимо того, что он используется для постэксплуатации (повышение привилегий и закрепленния в системе) он активно используется и для активного фишинга, обхода антивируса и эксплуатации уязвимостей и одна из главных фишок - отлично используется для атак на AD (PowerView). 

Тут и далее я бы начал рассказывать вам про инсталяцию PowerShell Empire Framework, про листенеры, стейджеры и агенты, про огромный список модулей постэксплуатации на все случаи жизни, про все то что красиво описано во многих других местах сети, но... не буду. Смотрите сюда, и повторяйте шаг за шагом. Если вам это интересно. Алгоритм работы очень похож на работу с Metasploit в том же Kali Linux. Кто из них лучше? По моему оба хороши.

По своему первому тесту PowerShell Empire Framework могу сказать что код агента по умолчанию направлен на разовое исполнение с последующим удалением себя на жертве как файла. Полезная нагрузка агента (payload) обфусфицирована в base64.

Пример:

#2>NUL & @CLS & PUSHD "%~dp0" 

& "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -nol -nop -ep bypass "[IO.File]::ReadAllText('%~f0')|iex" 

& DEL "%~f0" & POPD /B powershell -noP -sta -w 1 -enc ..., тут далее следует код нагрузки.

На что следует обратить внимание - генерируемый код stagers в виде файла Powershell Empire теперь ложит в папку kali\Empire\empire\client\generated-stagers или в зависиммости от места самой инсталяции Powershell Empire в /usr/share/powershell-empire/empire/client/generated-stagers.


При этом Empire все равно что мы там указали предварительно в параметр Outfile.

Также полезно помнить что Powershell Empire вывод агента пишет в журнал который можно найти здесь:

kali\Empire\empire\server\downloads\<AgentName>\agent.log

Для каждого агента своя папка. Вот для моего агента ABX2G8DY была такая:

kali\Empire\empire\server\downloads\ABX2G8DY\agent.log

Wednesday 3 November 2021

Чистим Windows 10 вручную.


Всем привет.

Продолжаем чистить нашу планету от разного цифрового мусора. Мусорить наша Windows не перестает, в добавок включилась по умолчанию телеметрия и еще бог весть что. Место тает на  глазах. Поэтому пойдем по простому и включим ка чистку временных каталогов, которые используются большинством приложений и самой Windows 10:

C:\Windows\Temp\

C:\Users\%UserName%\AppData\Local\Temp

C:\Users\%UserName%\AppData\Local\Microsoft\Windows\Temporary Internet Files

Для этого мы можем создать простой bat-скрипт, который удаляет из временных каталогов все файлы старше "Days" дней (пример на 14): 

SET Days = "-14"

SET Path1Del="C:\Windows\Temp\"

SET Path2Del="C:\Users\%UserName%\AppData\Local\Microsoft\Windows\Temporary Internet Files"

forfiles.exe /p %temp% /s /m *.* /d %Days% /c "cmd /c del /q /f @file"

forfiles.exe /p %Path1Del% /s /m *.* /d %Days% /c "cmd /c del /q /f @file"

forfiles.exe /p %Path2Del% /s /m *.* /d %Days% /c "cmd /c del /q /f @file"

Разумеется запускать этот bat-файл нужно с правами Администратора. А еще лучше его зарядить в шедулер раз в месяц.

Если мы любим использовать PowerShell, то пишем такой скрипт для автоматического удаления файлов старше "Days" дней из всех временных папок:

# Традиционная времянка

$Path = "C:\Windows\Temp"

$Days = "-14"

$CurrentDate = Get-Date

$OldDate = $CurrentDate.AddDays($Days)

Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item -force

# Пользовательская времянка ТЕМР

$Path = $env:TEMP

  if($Path -ne $null){

  Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item -force

  }

# Пользовательская времянка ТМР

$Path = $env:TMP

  if($Path -ne $null){

  Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item -force

  }

# Времянка серфинга по интернет в Internet Explorer

$Urname = $env:Username

$Path = 'C:\Users\' + $Urname + '\AppData\Local\Microsoft\Windows\Temporary Internet Files'

Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item -force

Как чистить кеши других web-браузеров описано здесь.
Успехов. 

Tuesday 2 November 2021

Эффект полного присутствия.

Всем привет.

Для вас очередная почемучка с утра. Карантиним уверенно!

Уже какое утро рабочего дня 2021-го начиналось, как обычно, с летучки в Teams. Часть участников оперативно активировала сеанс, предусмотрительно выключив свою камеру и микрофон, и сами продолжали заниматься своими домашними делами стараясь изо всех сил проснуться окончательно. Алекс пропускал свой утренний кофе, так как ему для этого всегда хватало наставлений от шефа. Он, по привычке, хотел было начать и быстро закончить беглым отчетом, но сегодня шеф начал первым...

- Всем добрый день. Пожалуй начнем нашу летучку. Что там  у нас на повестке дня?... Ах да, минутку, Алекс, как прошла вчерашнее собрание коллектива? Гости остались всем довольны? Видеосвязь не подвела? Запись не прерывалалсь?

- Шеф, все отлично. Запись готова, можем ее разослать по списку. Или глянете сами перед тем как... - робко спросил Алекс.

- Конечо гляну. А было что-то интересное?

- Да все как обычно: планы, свершения, мы работает над этим, вы исправляете и докладываете, нам было хорошо, а будет еще лучше,  и бла-бла-бла. Ну я же говорю, ничего не обычного как для нас.

- Хм, ок, меня не спрашивали?

- Хм, пожалуй нет. Да и зачем, если ...? Т.е.мы постарались включить эффект вашего присутствия по максимуму. - Алекс никак не мог подобрать нужные слова, так как еще сам пребывал под впечатлением от произведенного вчера эффекта.

- Эффект присутствия? Знаешь Алекс, мне эти ваши жаргончики уже поднадоели. - как обычно пробурчал шеф.

- Как скажете шеф. Но ведь вы были на собрании, и все прошло на ура.

- Разумеется был, я висел в этом вашем Teams-е все собрание с признаком "В сети" и все слышал. Отвечать не мог потому что я был занят с этой..., как ее, проблемной лицензией.

- Конечно, ну а после вам дали слово... - Алекс почти решился на попытку поставить шефа в известность.

- Слово мне?!  Алекс, ты ничего не путаешь? Вы что, черти, вывели меня на экран проектора?!! Хех, хорошо что я хоть бекграунд сеанса поменял вовремя. Но,... стоп, я не помню чтобы что-то вчера говорил на публику в Teams.

- Какой Teams, шеф? Вы вчера говорили  с трибуны! И причем довольно убедительно. Мы были в восторге, а гости местами были ошарашены вашей лаконичностью и выразительностью мыслей. Мы уже раз пять пересматриваем ваш спич. Шеф, ах если бы вас толкнуть в youtube, вам лайки навалили бы...

Monday 1 November 2021

Клонирование физического хоста в Hyper-V.


Всем привет.

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

Перед операцией клонирования рекомендую тщательно почистить сам хост: корзина, кеши, сессии пользователей.

Далее запускаем Disk2VHD на нашем целевом хосте. Как показано на рисунке интерфейс программы очень простой. 


Чтобы создать диск VHDX, ставим флажок Use Vhdx. VHDX - это формат диска, появившийся в Windows Server 2012. По сравнению с традиционным VHD, в VHDX был внесен ряд изменений: появился специальный внутренний журнал, снижающий вероятность повреждения данных, увеличилась емкость (до 64 ТБ), добавлены некоторые другие функции.

Также выбираем Use Volume Shadow Copy если вы хотим получить копию диска, согласованную на уровне транзакций, а не сбоев. Выбираем место, где будет находиться файл VHDX (если оно будет расположено на том же диске, возможно «поглощение», поэтому для хранения образа лучше использовать другой жесткий диск). Выбираем любой диск/том, который нужно виртуализовать. Если вы хотите сделать этот диск загрузочным, необходимо включить туда системный диск и область загрузки (поставьте флажок System Reserved (Зарезервировано системой)). Нажимаем Create (Создать), чтобы начать преобразование.

Чтобы использовать созданный VHDX-диск, необходимо создать новую ВМ Hyper-V.  Запустите мастер (New → Virtual Machine) в менеджере Hyper-V и настройте ее в соответствии со своими требованиями. Дойдя до шага Connect Virtual Hard Disk (Подключение виртуального жесткого диска), необходимо настроить полученный виртуальный диск. Найдите уже созданный диск, сошлитесь на него, и выполните оставшиеся действия с помощью мастера.

Вот здесь такие шаги описаны более подробно, и даже с рисунками.

В конце добавлю то что я пропустил в самом начале процесса - мой хост был в домене. Логичнее было бы его вывести из домена перед клонированием, сделать клон, и вернуть еще раз в домен. Я этого тогда не сделал, и у меня получилось два близнеца, из которых успешно мог работать только один. Но не все потеряно. Нужно было переименовать клон не выкинув при этом физический хост из домена.

Решение было следующее - отключаем у клона сеть, и выводим его из домена. Следом даем ему другое имя, включаем сеть и вводим в домен. Вуаля! Близняшки работают вместе.

Удачи.

Sunday 24 October 2021

PowerShell Security book #2.

Hi all.

Today I would like to present second part of my resume by e-book "PowerShell Security".

JEA.

I don't know if I need to describe JEA again. Ok, I will write about it very shortly today. So, by default, there are three Session Configurations on each Windows computer, namely: 

  • microsoft.powershell, 
  • microsoft.powershell.workflow,
  • microsoft.windows.server-managerworkflows.

1) Get-PSSessionConfiguration

Define "HelpDesk" configuration:

Register-PSSessionConfiguration -Name HelpDesk

This opens the dialog you already know from managing file permissions:

Register-PSSessionConfiguration -Name HelpDesk -ShowSecurityDescriptorUI

Defining RunsAs users:

Register-PSSessionConfiguration -Name HelpDesk -RunAsCredential forza.com\MikeLee

Set additional options via configuration file:

New-PSSessionConfigurationFile -Path .\MyConfig.pssc

The following are particularly useful to prevent users from potentially harmful actions:

-languageMode with the values FullLanguage, RestrictedLanguage, ConstrainedLanguage, NoLanguage: The latter allows only the exe-cution of cmdlets and functions, other language resources are not available. 

FullLanguage offers the full range of language capabilities, the other two lie between these two poles.

-VisibleAliases, VisibleCmdlets, VisibleFunctions, VisibleProviders: These allow you to specify which aliases, cmdlets, functions, and providers are available in the session. 

You can use wildcards and specify multiple values as array.

Example:

New-PSSessionConfigurationFile -Path .\MyConfig.pssc -VisibleCmdlets "Get*","Select*"

You adjust the Session Configuration based on this file:

Set-PSSessionConfiguration -Name HelpDesk -Path .\MyConfig.pssc

Enter-PSSession -ComputerName Remote-PC -ConfigurationName HelpDesk

-OR-

Invoke-Command -ComputerName Remote-PC -ConfigurationName Helpdesk {Get-ChildItem}

2) New-PSRoleCapabilityFile -Path MyRCF.psrc

-OR-

JEA Helper Tool create MyRCF.psrc

Once you have created the list of permitted cmdlets and parameters, you can add them to the .psrc file. You save this file in a directory called RoleCapabilities under

$env:ProgramFiles\WindowsPowerShell\Modules

The last step is to link the role capabilities to the desired session configu-ration. To do this, edit the configuration file with the extension .pssc and add the role functions there.

Since you create this file automatically at the beginning, this (commented out) section for RoleDefinitions should already be there:

RoleDefinitions = @{ 'CONTOSO\SqlAdmins' = ` @{ RoleCapabilities = 'SqlAdministration' }; 

'CONTOSO\SqlManaged' = @{ RoleCapabilityFiles = 'C:\RoleCapability\SqlManaged.psrc' }; 

'CONTOSO\ServerMonitors' = ` @{ VisibleCmdlets = 'Get-Process' } }

Friday 22 October 2021

Тонкое искусство пофигизма.

Всем привет.

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

Исходя из названия может показаться что книга ни о чем. Так оно и есть - она про нашу жизнь, про проблемы, которые нас окружают, и про те которыми мы окружаем других. И как мы их чуствуем. Или пропускаем мимо... Можно узнать себя или попытаться отложить свои мысли в сторону, но ненадолго, если у вас получится.

Оглянитесь вокруг себя. Пролистайте ленту соцсетей. Прислушайтесь. И вы услышите, как  окружающий мир настойчиво твердит: «Будь лучше!», «Добейся успеха любой ценой!», «Будь первым!» Несмотря на то, что человеческая цивилизация еще никогда в истории не жила в таком достатке, всё больше людей испытывают необъяснимое ощущение фрустрации. Будто бы чего-то не хватает, будто бы у всех твоих френдов в соцсетях жизнь лучше и приятнее. 

"И вот парадокс: сосредоточенность на позитиве - на лучшем, на превосходном - лишь напоминает нам снова и снова о том, чем мы не стали; о том, чего нам не хватает; о мечтах, которые не сбылись. Ведь ни один подлинно счастливый человек не будет стоять перед зеркалом и вдалбливать себе, что он счастлив. Зачем ему это?".

Что делать? Куда бежать? И где найти силы, чтобы со всем этим справиться?

Мэнсон легким языком, доступно и понятно объясняет, как жить в мире, который ежеминутно давит на тебя, принуждая стать успешным, богатым и знаменитым. В своем международном бестселлере автор приходит к парадоксальным выводам:

  • быть середнячком зачастую куда более приятно и полезно, чем карабкаться на недостижимый Олимп.
  • мы постоянно ошибаемся, и это нормально. 
  • неудачи - это хорошо, а боль - прекрасный стимул. 
  • умение говорить «нет» - путь к комфортной жизни.
  • счастье, к которому нас все призывают, это ложная цель.

Я вас уверяю что книга вас не отпустит, и в то же время даст вам возможность дышать свободно. У автора есть и другие книги, но вы начните с этой, как я. Удачи!

"Ищи истину самостоятельно, и там я тебя встречу."


Форсаж апгрейда Windows с помощью SCCM.

Всем привет.

Одной из полезных фишек функционала SCCM является тесная работа с клиентской операционной системой Windows 10. Большое внимание уделяется ее поддержке, а именно апгрейду с младших версий до старшей, вплоть до 20Н2. Теперь не нужно забирать у пользователей компьютеры на глобальное обновление системы, потому как сотрудник может получить новенькую ОС, не отходя от рабочего места и не выключая его.

Автоматический переход между версиями Windows 10 осуществляется при помощи плана обслуживания после настроки необходимых ролей, а также создания правила отбора компьютеров. Аналогично это же можно выполнить через настройку последовательности задач. Оба варианта подробно рассмотрены здесь

А я лишь коснусь  моментов когда по техническим причинам нам надо форсировать процесс обновления. Итак пусть наша коллекция названа как Upgrade_20H2. 

Вариант 1.

Добавляем нужный хост в коллекцию в консоли SCCM. Для форсирования обновления минут через 15 на самом хосте запускаем Configuratiоn Manager и стартуем на выполнение три политики


по очереди с минутной паузой. После этого в разделе Updates Software Center появится само обновление на котором нам и следует кликнуть Install All.

Wednesday 20 October 2021

PowerShell Security book #1.

Hi all.

Today I would like to present for your eyes the best e-book of authors Michael Pietroforte and Wolfgang Sommergut "PowerShell Security".

These authors describe in details security features in Powershell:

  • Control execution of scripts using execution policy, code signing and constrained language mode
  • Secure PowerShell remoting with SSH und TLS
  • Delegate administrative tasks with JEA
  • Audit and analyze PowerShell activities, encrypt logs
  • Improve code quality following best practices.

PowerShell is a powerful tool for system administration and as such also a perfect means for hackers. Due to the tight integration into the system, attempts to simply block PowerShell provide a false impression of security. The best protection is provided by PowerShell's own mechanisms. PowerShell offers almost unlimited access to the resources of a Windows computer and also can automate numerous applications such as Exchange. Users aren't limited to the many modules and cmdlets, but can also integrate .NET classes, Windows APIs, and COM objects. These capabilities are particularly dangerous in the hands of attackers. Since many versions of With Windows Server, Microsoft avoids to activate any roles and features on a freshly installed machine in order to minimize the attack surface. On such a locked down system users must explicitly add all required services.



So, now I try to explain for you these features in practically. Let's go.

# Execution scripts.

We can define policies for execution Powershell scripts on the host by:

  • GPO
  • signing our script
  • set constrained language mode.

# Execution policy.

I prefer set RemoteSigned mode. It means that Scripts downloaded from the Internet must be signed by a trusted publisher.

How it set?

  • Set-ExecutionPolicy RemoteSigned
  • Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • $env:PSExecutionPolicyPreference

How it check?

Get-ExecutionPolicy -List | ft -AutoSize

We can set Turn on Poweshell script execution by GPO.

How it set?

mmc: Policies => Administrative Templates => Windows Components => Windows PowerShell and is called Turn on Script Execution.

Result: powershell.exe -ExecutionPolicy "Unrestricted" doesn't work!

However you can bypass it as following:

a) If a user decides to circumvent this policy, he simply copies the contents of a script to the ISE and runs it there. 

b) RemoteSigned allows unsigned scripts downloaded from the Internet to be started if you unblock the file using Unblock-File.

c) Another bypass consists of encoding the script in Base64 and transferring it to PowerShell.exe via the EncodedCommand parameter. 

To limit possible damage caused by such activities, it is recommended to use the Constrained Language Mode.

Wednesday 13 October 2021

ScriptRunner как диспетчер скриптов.

Всем привет.

В Windows 10 есть такая прикольная утилита как ScriptRunner. Она позволяет запускать один или нескольких скриптов или исполняемых файлов. Утилита ScriptRunner.exe изначально разрабатывалась для применения в средствах виртуализации приложений Microsoft (App-V). Данная технология позволяет системным администраторам делать определенные приложения доступными для конечных пользователей, не устанавливая эти приложения непосредственно на их компьютеры. Утилита устанавливалась как часть средства виртуализации приложений и использовалась в качестве средства запуска множества сценариев по одному триггеру (запускающему событию). Средство виртуализации приложений App-V входит в состав пакета оптимизации рабочего стола Майкрософт (MDOP), который входит в состав подписки Microsoft Software Assurance.

Для получения подсказки по применению ScriptRunner.exe используется команда:

ScriptRunner /?

Формат командной строки:

ScriptRunner.exe -appvscript scriptFileName [Arguments] [-appvscriptrunnerparameters [-wait] [-timeout=] [-rollbackonerror]]

Параметры командной строки:

-appvscript - этот параметр задает имя файла сценария, исполняемого или командного файла (scriptFileName) и аргументы командной строки (Arguments), если они есть.

-appvscriptrunnerparameters - этот параметр определяет режим ожидания завершения сценария (-wait) и интервал ожидания в секундах (-timeout=TimeInSeconds), а также режим выполнения при возникновении ошибки (-rollbackonerror). 

По умолчанию для параметра -appvscriptrunnerparameters приняты значения – нет ожидания, нет таймаута, нет обработки ошибок ( No wait, No timeout, No rollback on error).

Параметры разделяются символом пробела в Unicode (U+0020).

Откат при ошибке работает так: если сценарий создает новый выходной файл, откат удаляет файл, но если сценарий обновляет или заменяет существующий файл, откат не отменяет эти изменения.

Если команда Scriptrunner содержит более одного предложения -appvscript, откат при ошибке может не работать ни для одного из сценариев.

Sunday 10 October 2021

Windows Admin Center.

Всем привет.

В 2017 году Microsoft анонсировала работы по разработке бесплатного HTML5 веб-интерфейса для администрирования и централизованного управления серверами Windows Server. Проект получил кодовое название Project Honolulu. В апреле 2018 года Microsoft выпустила RTM решение и теперь данный продукт официально называется Windows Admin Center.

Идея Microsoft заключается в замене традиционных MMC консолей и других графических инструментов управления серверами Windows возможностью управления из браузера через единый веб интерфейс по аналогии с веб-клиентом управления VMware vCenter. Admin Center разворачивается локально и может быть использован в том числе для управления серверами, изолированных от Интернета.

Windows Admin Center поддерживает управление следующими версиями ОС: Windows Server 2016, Windows Server 2012 / R2, Hyper-V 2016/2012R2/2012, Windows 10, северами Azure, а также Core редакциями. Возможно также управление целыми кластерами: Failover Clusters, Hyper-V Clusters и виртуальными машинами Hyper-V на них.

На управляемый хост не нужно устанавливать никаких агентов или дополнительных расширений. Коммуникация осуществляется выполняется через Remote PowerShell и WMI over WinRM с помощью RESTful API. На управляемых серверах должен быть установлен как минимум Management Framework 5.0 (Powershell 5.0). На Windows Server 2012 / R2 WMF 5.0 нужно становить отдельно.

Сам веб интерфейс Windows Admin Centerнаписан на HTML 5 и корректно работает в Edge и Chrome (Internet Explorer пока полностью не поддерживается).

В последней доступной версии Windows Admin Center прямо из окна браузера поддерживается RDP подключение через веб-интерфейс и консоль PowerShell.

На Windows Server 2016 можно установить Windows Admin Center в режиме шлюза (Gateway Mode), в этом режиме возможно удаленно подключаться к консоли управление с других компьютерах. На Windows 10 / Windows Server 2012 клиент устанавливается в режиме Desktop Mode (консоль доступна только с локального компьютера).

Установить Windows Admin Center можно на Windows 10 или на Windows Server (2016 и 1709) в режиме Gateway. Чтобы скачать msi дистрибутив Windows Admin Center (около 30 Мб), можно на странице https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-сenter/understand/windows-admin-center

Установить дистрибутив Windows Admin Center можно из командной строки (с самоподписанным сертификатом сроком действия 60 дней)

msiexec /i HonoluluTechnicalPreview1712-05002.msi /qn /L*v log.txt SME_PORT=6516 SSL_CERTIFICATE_OPTION=generate

Либо с помощью обычного мастера установки. По умолчанию для управления используется порт 6515 (можно изменить). На Windows Server компонент Admin Center устанавливается в виде отдельной службы.

Если у вас есть selfsigned сертификат:

Start-Process -FilePath "C:\Users\Administrator\Downloads\wac.msi" -ArgumentList " /qn SSL_CERTIFICATE_OPTION=generate"

Если у вас есть купленный сертификат или серитфикат от Let’s Encrypt, установленный в системной хранилище сертификатов, то впишите его Thumbprint в аргументы установщика.

Get-ChildItem -Path Cert:LocalMachine\MY | Select-Object FriendlyName, Thumbprint

Start-Process -FilePath "C:\Users\Administrator\Downloads\wac.msi" -ArgumentList " /qn SME_THUMBPRINT=AA5B564B720ECA01340B1E9178261BB72E5550AF SSL_CERTIFICATE_OPTION=installed"

После установки веб интерфейс консоли Honolulu можно открыть, перейдя по адресу:

https://ip_сервера:6516

или с помощью значка на рабочем столе который залинкован на:

"C:\Program Files\Windows Admin Center\SmeDesktop.exe"

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

С помощью кнопки Add можно добавить

• Отдельный сервер (Server Manager)

• Отказоустойчивый кластер (Failover Cluster Manager)

• Кластер Hyper-V (Hyper-Converged Cluster Manager)

Saturday 9 October 2021

Управление Windows Defender с помощью PowerShell.

Всем привет.

Сегодня под финал пройдемся по управлению Windows Defender с помощью PowerShell в описании Сергея Яремчука. Оригинал был напечатан в журнале "Системный администратор", № 2015/4.

Начиная с Windows 8 продукт Windows Defender (Защитник Windows) получил функционал Microsoft Security Essentials и из простейшего сканера шпионских программ теперь стал полнофункциональным антивирусным решением, способным обнаруживать широкий спектр потенциально вредоносного ПО.

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

На данный момент Windows Defender входит в состав клиентских версий ОС и Windows Server 2012 R2 в варианте установки Server Core и включен по умолчанию. В недавно появившейся бета-версии Windows Server его можно установить как компонент (Install-WindowsFeature-NameWindows-Server-Antimalware). Проверить статус работы службы можно, введя sc query Windefend.

Кроме GUI, настройки Windows Defender устанавливаются с помощью групповых политик (Computer Configuration - Admin Templates - Windows Components - Windows Defender). Кроме этого, в PowerShell 4.0 появился модуль Defender, состоящий из 11 командлетов. Просмотреть их список можно, введя комманду:

PS> Get-Command -Module Defender

Командлеты Get-MpComputerStatus и Get-MpPreference выводят данные о состоянии антивируса – версии антивируса и баз, включенные параметры, расписание, дату проверки и так далее. Все командлеты могут выполняться как локально, так и удаленно.

PS> $session = NewCimSession -ComputerName comp1

PS> Get-MpComputerStatus -CimSession $session

В настройках по умолчанию отключены IPS, проверка съемных дисков, email и некоторые другие. Для установки параметров используется командлет Set-MpPreference. Например, чтобы включить проверку внешних носителей, установим DisableRemovableDriveScanning в false (по умолчанию true):

PS> Set-MpPreference -DisableRemovableDriveScanning $false

Два командлета Add-MpPreference и Remove-MpPreference позволяют добавлять и удалять параметры. Наиболее часто они используются, чтобы исключить каталоги, процессы и файлы с определенным расширением из проверки. Например, исключим сканирование каталога с  временными файлами:

PS> Add-MpPreference -ExclusionPath C:\Temp

Для обновления баз следует применять командлет Update-MpSignature, по умолчанию используются настройки компьютера, но с помощью дополнительных параметров можно указать другие источники (сервер WSUS, сервер обновлений Microsoft, MMPC или каталог). В случае применения для обновлений каталога следует скачать обновления с Microsoft Malware Protection Center (http://www.microsoft.com/security/portal/mmpc) и положить в папку, на которую указать с помощью SignatureDefinitionUpdateFileSharesSources:

PS> Set-MpPreference -SignatureDefinitionUpdateFileSharesSources \\server\update

PS> Update-MpSignature -UpdateSource FileShares

Запуск сканирования осуществляется командлетом Start-MpScan, по умолчанию производится т.н. быстрая проверка только критически важных файлов. Тип проверки можем изменить с помощью параметра ScanType - FullScan, QuickScan или СustomScan.

PS> Start-MpScan -ScanType FullScan

Два параметра – Get-MpThreat и Get-MpThreatDetection – позволяют просмотреть информацию по угрозам, обнаруженным на компьютере. Командлет Remove-MpThreat позволяет удалить активные угрозы:

PS> Get-MpThreat

PS> Remove-MpThreat

Список известных Windows Defender угроз выводит Get-MpThreatCatalog.

PS> Get-MpThreatCatalog | select SeverityID, ThreatName

Успехов.

Friday 8 October 2021

Настройка Windows Firewall с помощью PowerShell.

Всем привет.

Сегодня пройдемся по Firewall с помощью PowerShell в описании Сергея Яремчука. Оригинал был напечатан в журнале "Системный администратор", № 2014/12.

В будущих релизах Windows Microsoft планирует отказаться от использования утилит netsh; для настройки сетевых функций и Windows Firewall будут применяться только командлеты PowerShell.

В Windows Server 2012 и Windows 8 доступен соответствующий модуль NetSecurity, содержащий 27 командлетов для настройки брандмауэра Windows в режиме повышенной безопасности WFAS (Windows Firewall with Advanced Security), охватывающих все возможные настройки и полностью заменяющих netsh advfirewall.

Просмотреть их список очень просто:

PS> Import-Module NetSecurity

PS> Get-Command -Noun "*Firewall*"

Узнать подробную информацию по работе каждого можно с помощью командлета Get-Help. Знакомство упрощает то, что названия командлетов пересекаются с командами netsh. Разберем некоторые примеры. Смотрим текущие установки профилей:

PS> Get-NetFirewallProfile

Включаем все профили (Domain, Public, Private).

PS> Set-NetFirewallProfile -All -Enabled True

Вместо параметра All можем указать конкретный профиль:

PS> Set-NetFirewallProfile -Profile Domain -Enabled True

Установим для профиля Domain блокировку всех входящих как действие по умолчанию:

PS> Set-NetFirewallProfile –Name Domain –DefaultInboundAction Block


Командлет Set-NetFirewallProfile позволяет настроить все параметры профиля: журналирование, добавить IP, порт, протокол и многое другое. Например, можем исключить Ethernet-интерфейс из профиля Public, добавляем правило:

PS> Set-NetFirewallProfile -name Public -DisabledInterfaceAliases Ethernet

Все манипуляции с правилами производятся с помощью семи командлетов *-NetFirewallRule. Для просмотра установленных правил используем командлет Get-NetFirewallRule. Например, выберем только блокирующие правила:

PS> Get-NetFirewallRule -Enabled true -Action block

Создадим правило, блокирующее исходящие соединения для IE в двух профилях.

PS> New-NetFirewallRule -Program "C:\Program Files\Internet Explorer\iexplore.exe" -Action Block -Profile Domain, Private -DisplayName "Block IE" -Description "Block IE" -Direction Outbound

PS> New-NetFirewallRule -DisplayName "Allow Inbound OpenVPN Client" -Direction Inbound -LocalPort 1194 -Protocol UDP -Action Allow

Правило может содержать и прочие атрибуты – порт, протокол, интерфейс, направление, путь к программе и т.п. Для примера добавим к правилу протокол, порт и IP удаленной и локальной системы.

PS> Set-NetFirewallRule -DisplayName "Block IE" -Protocol TCP -RemotePort 80 -RemoteAddress "192.168.1.1" -LocalAddress "192.168.1.10"

Смотрим команды:

PS> Get-NetFirewallRule -DisplayName “*IE*”

Отключается правило очень просто:

PS> Disable-NetFirewallRule -DisplayName "Block IE"

Для удаления используется командлет RemoveNetfirewall-Rule. Параметр -DisplayGroup позволяет группировать правила, чтобы в дальнейшем задавать параметры сразу всем правилам в группе.

PS> Set-NetFirewallRule -DisplayGroup "Windows Firewall Remote Management" -Enabled True


Thursday 7 October 2021

Настройки сети с помощью PowerShell.

Всем привет.

Я решил сделать записи на память по использованию PowerShell для администрирования Windows сети, Firewall и Defender в описании Сергея Яремчука.

Сегодня пройдемся по настройкам сети. Оригинал был напечатан в журнале "Системный администратор", № 2014/6.

Microsoft заявляет, что постепенно классические консольные утилиты, к которым администраторы привыкли за долгое время, будут заменяться командлетами PowerShell.

С выходом PowerShell 4.0 модуль Net TCP/IP пополнился новыми командлетами, которые упростили настройку сети. За настройку параметров интерфейса вместо netsh interface ipv4 отвечают два командлета – New-NetIPAddress и Set-NetIPAddress, синтаксис у них схож, оба могут создавать новые настройки, но второй позволяет модифицировать текущие.

New-NetIPAddress -InterfaceAlias Ethernet -IPv4Address 192.168.0.2 -DefaultGateway 192.168.0.1

Set-NetIPAddress -InterfaceAlias Ethernet -PrefixLength 24

Вместо InterfaceAlias удобнее использовать индекс InterfaceIndex, его легко узнать, просмотрев вывод Get-NetIPInterface. Для удаления настроек IP используется командлет Remove-NetIPAddress.

Remove-NetIPAddress -IPAddress 192.168.0.2

Для корректной работы нам понадобится настроить адреса DNS-серверов, это решается с помощью командлета Set-DNSClientServerAddress (из состава модуля DNSClient):

Get-DnsClientServerAddress

Set-DNSClientServerAddress -InterfaceIndex 12 -ServerAddresses "192.168.0.1","8.8.8.8"

Текущие сетевые настройки можно узнать из выводов Get-NetIPAddress и Get-NetIPConfiguration (алиас gip), являющихся аналогами ifconfig. Например, Get-NetIPConfiguration выводит полную информацию о сетевых настройках: IP-адреса интерфейса и шлюза и DNS. Дополнительный параметр -Detailed позволит получить больше данных. Команда route долго использовалась для просмотра и настройки маршрутов, теперь ему на замену идет набор командлетов *-NetRoute, очень простых и понятных в использовании. Получаем текущие настройки маршрутизации и устанавливаем новый маршрут по умолчанию.

Get-NetRoute

New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.0.1" -InterfaceIndex 12

Чтобы проверить доступность определенного узла, PowerShell предлагает два командлета: Test-Connection и Test-NetConnection (сокращенно tnc). Первый входит в основной модуль PowerShell Management и для проверки использует ICMP (в работе напоминает обычный ping).

Второй входит в состав модуля NetTCPIP и обладает большими возможностями, позволяя проверить доступность определенного порта или системы с разных ПК. Например, проверим подключение к SRV01.example.org с двух систем:

Test-NetConnection -ComputerName SRV01.example.org -source localhost, SRV02.example.org

Чтобы получить больше информации достаточно добавить ключ -InformationLevel Detailed, ключ -TraceRoute позволит произвести трассировку подключения (аналог tracert). Для проверки, слушается ли порт, следует указать его номер (поддерживается четыре строковых параметра – SMB, HTTP, RDP и PING). Если ввести команду без указания узла, будет проверено подключение к Интернету. 

Test-NetConnection -Port 80 -InformationLevel Detailed

Количество решаемых задач может быть очень велико, для каждых условий будут оптимальны разные настройки TCP, а установки по умолчанию эффективны не всегда. Для тюнинга TCP предназначен набор командлетов *-NetTCPSetting и *-NetTransportFilter.

С помощью Get-NetTCPSetting получаем список преднастроек. По умолчанию SettingName установлено в значение Automatic, и настройки пусты. Зато существенно различаются между собой InternetCustom, DatacenterCustom, Compat, Datacenter и Internet, назначение которых понятно и без объяснений. Но редактировать можно только профили InternetCustom и DatacenterCustom. Какие подключения будет использовать профиль, можно выяснить, выполнив Get-NetTCPConnections.

Включим расширения IP ECN (Explicit Congestion Notification, явное уведомление о  перегруженности, см. RFC 3168) и протокол DCTCP (Data Center TCP) для DatacenterCustom.

Set-NetTCPSetting -SettingName DatacenterCustom -ECNCapability Enabled -CongestionProvider DCTCP

Чтобы применить параметр TCP к порту с номером или диапазону IP-адреса назначения, надо создать транспортный фильтр с помощью командлета New-NetTransportFilter.

New-NetTransportFilter –SettingName DatacenterCustom –DestinationPrefix 172.16.0.0/16

Дополнительно можно задать локальный и удаленный порты. 


Версия на печать

Популярное