Некоторые картинки не загружаются из РФ и РК, используйте VPN.

понедельник, 25 сентября 2023 г.

воскресенье, 24 сентября 2023 г.

Воображение Оруэла поражает своей прямолинейностью в вопросах частного, но стоит обратить внимание на то, что это уже давно действительность, просто черта между нашей "безопасностью" и частной жизнью сдвигается....

Враг государства, 1998

суббота, 23 сентября 2023 г.

четверг, 21 сентября 2023 г.

Картины: Уильям Хейс

После бури

 

Картины: Джулиус Паульсен

Вечер после дождя

 

Keepass клик по URL - открытие Filezilla

Отталкиваясь от описания можно заставить FileZille открывать FTP соединение с автоматической авторизацией. Cтрочка "URL override":

cmd://%systemdrive%\progra~1\Filezi~1\filezilla.exe ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}

суббота, 16 сентября 2023 г.

Рандомно принтер не подключен

Проблема: некоторые принтеры на сервере(ах) без закономерности меняют статус на Offline (не подключен)

Подробности: сеть хостера и сеть клиента соединены GRE туннелем. Дабы избежать проблем пробраса принтеров, они были установлены прямо на сервер. Появились жалобы "принтер не работает", перезапуск spooler в 90% решает проблему, в остальных случаях требуется повторный перезапуск. Перезагрузка сервера не решила проблему. Проблема появилась также на других серверах у данного хостера, где установлены принтеры. Сервера на базе Windows server 2019.

Заметка Powershell и скрипт добавления IKEv2

Простой скрипт добавления интерфейса IKEv2. Данное решение выполняет следующие задачи:

  • Экспортирует сертификат пользователя и CA
  • Добавляет интерфейс IKEv2
  • Создает IPsec политику
  • Связывает интерфейс с CA
  • Отключает маршрут по умолчанию
  • Отключает IPv6
  • Отключает автометрику и выставляет метрику равной 1. Данная метрика не влияет на трафик, нужна только для смены порядка выбора DNS сервера (подробнее)
Блок кодирования добавлен только для моих задач, без специального параметра не вызывается.

Posh Закодировать скрипт, заготовка


Понадобилось закодировать скрипт, но не ради обмана антивируса, а из-за нежелания возиться с экранированием символов при создании скрипта из батника. В итоге родилось вот такое чудо:

param ($CreateBatch=$False)

$CurrentDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location -Path $CurrentDir

if ($CreateBatch -eq $true) {
	$ps_file_name=(Get-Item $PSCommandPath).Name
	$cmd_file_name=((Get-Item $PSCommandPath).Basename+".bat")
	$encoded_script=[Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes( $(Get-Content $ps_file_name -Raw)))
	$content=("@echo off`r`n"+
			"cd %~dp0`r`n"+
			"powershell -Command [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('$encoded_script'))>$ps_file_name`r`n"+
			"powershell -NoProfile -ExecutionPolicy Bypass -File $ps_file_name`r`n"+
			"pause")
			
	out-file -FilePath $CurrentDir\$cmd_file_name -InputObject $content -Encoding ASCII
	exit
}

Данная заготовка добавляет параметр (добавьте его, если блок с параметрами уже есть) и проверяет его, если он истин, то выполняется создание батника с закодированным скриптом. Батник будет иметь такое же имя с расширением bat и лежать в этой же директории.

Именно Get-Content -Raw позволяет закодировать и раскодировать потом скрипт со всеми переносами строк. Если в скрипте нет обращений к файлам с неизвестным расположением, то можно выполнить скрипт без разворачивания в отдельный файл командой powershell -enc "закодированная строка".

 Пересмотрел трилогию Ворон, соглашусь с комментаторами, первая часть еще ничего, остальное - пародия

четверг, 14 сентября 2023 г.

среда, 13 сентября 2023 г.

Add remote app registry

Создать RemoteApp без установки оснастки и дополнительных приложений можно прописав в реестре

Пример на Google Chrome

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications\Chrome]
"RequiredCommandLine"=""
"Name"="Google"
"SecurityDescriptor"=""
"Path"="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
"ShortPath"="C:\\PROGRA~2\\Google\\Chrome\\Application\\chrome.exe"
"ShowInTSWA"=dword:00000000
"CommandLineSetting"=dword:00000000
"VPath"="%SYSTEMDRIVE%\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"

И файл RDP

allow desktop composition:i:1
allow font smoothing:i:1
alternate full address:s:SERVER_ADDRESS
alternate shell:s:rdpinit.exe
devicestoredirect:s:*
disableremoteappcapscheck:i:1
drivestoredirect:s:*
full address:s:SERVER_ADDRESS
prompt for credentials on client:i:1
promptcredentialonce:i:0
redirectcomports:i:1
redirectdrives:i:1
remoteapplicationmode:i:1
remoteapplicationname:s:Google
remoteapplicationprogram:s:||Chrome
span monitors:i:1
use multimon:i:1
Стоит еще несколько раз пересмотреть, чтобы полностью проникнуться.

Леон, 1994

Powershell Fail2ban for RDP

 Да, можно использовать VPN, разрешенные списки IP адресов и прочее, но бывают случаи, когда требуется прямой доступ к машине без всего этого. Тогда встает вопрос о хотя бы защите от грубого перебора паролей? Есть некоторое количество программ, которые позволяют это сделать, но к сожалению они не являются частью ОС Windows. На просторах интернета был найден скрипт и слегка доработан, можно его использовать повесив в планировщике на событие 4625 журнала безопасность.



Также для работы нужно правило в firewall с именем BlockRDP (читай комментарии к скрипту)


# After first run you need to create firewall rule
# New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block
# In action task scheduler. Check name script file 
# %systemroot%\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ps\ban_rdp_brutfors.ps1"

$log = "C:\ps\blocked_ip.txt"
$interval = 600000; #600000ms = 10min
$count_fail = 5
# фильтр событий в журнале
$XPath = "*[System[Provider[@Name=""Microsoft-Windows-Security-Auditing""]
and Task = 12544
and (band(Keywords,4503599627370496))
and (EventID=4625)
and TimeCreated[timediff(@SystemTime) >= $interval]]]";

$list_IP =@();
$Events = @();
# выбираем события
try { $Events = Get-WinEvent -Logname "security" -FilterXPath $XPath -ErrorAction Stop
}
catch [Exception] {
    if ($_.Exception -match "Не удалось найти события, соответствующие указанному условию выбора.") {
        Write-Host "Не найдены события перебора паролей за последние $($interval/60000) мин.";
        exit;
    }
}
# выбираем IP адреса
$list_IP = $Events | ForEach-Object {
([xml]$_.ToXML()).Event.EventData.Data | Where-Object {$_.Name -eq "IpAddress"} | ForEach-Object {$_."#text"}} | Where-Object {$_ -ne "-" };

$current_ips = @((Get-NetFirewallRule -DisplayName "BlockRDP" | Get-NetFirewallAddressFilter ).RemoteAddress)

foreach ($ip in $list_IP) {
    if ( $((($list_IP | where {$_ -eq $ip}).count) -gt $count_fail) -AND $(($current_ips | where {$_ -eq $ip}).count -eq 0)) {
        (Get-Date).ToString() + " " + $ip + " IP заблокирован за " +  $cnt_try + " попыток за $($interval/60000) мин.">> $log # запись события блокировки IP адреса в лог файл
        $current_ips += $ip
    }
}
$current_ips = $current_ips | gu
if ($current_ips.Length -gt 0) {
    Set-NetFirewallRule -DisplayName "BlockRDP" -RemoteAddress $current_ips
}


вторник, 12 сентября 2023 г.

Немножко о выборе Windows DNS сервера и еще заметка

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

Get-DnsClientServerAddress покажет список DNS серверов с их интерфейсом и метрикой (индексом). Как это ни странно, при выборе DNS сервера между несколькими сетевыми интерфейсами метрика играет не последнюю роль. Метрика устанавливается в автоматическом режиме по внутренней логике операционной системы и согласно ей интерфейс VPN имеет меньшие затраты нежели WiFi, а значит и предпочтительней.

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

Зеленая миля, 1999

Давно хотел ознакомится с Харуки Мураками 1Q84, ибо "Норвежский лес" оставил хорошие впечатления

воскресенье, 10 сентября 2023 г.

Оказывается никогда не смотрел и не читал "Побег из Шоушенка", хотя мне казалось наоборот. Поначалу думаешь, а зачем воспевать факт преступления, а потом понимаешь, что преступник тут не Дюфрейн

Побег из Шоушенка, 1994

суббота, 9 сентября 2023 г.

Удаление данных пользователя при выходе

Google Chrome (да и большинство браузеров) можно настроить так, что при закрытии он удаляет все данные работы, как инкогнито, но не инкогнито (читай тут). Встала задача провернуть такое же с учеткой Windows.

Сразу, это длинопост, в котором нет конкретного решения, есть мой путь к моему решению в самом конце

среда, 6 сентября 2023 г.

вторник, 5 сентября 2023 г.

Без комментариев, ибо с одной стороны сотрудники посольства просто люди, но с другой стороны они действительно были причастны в том, в чем их обвиняли.
Операция арго, 2012

понедельник, 4 сентября 2023 г.

Вот интересно, сталкиваешься с дерьмом, но не знаешь на сколько оно есть, и может ли пахнуть розовым ароматом. Поэтому лучше потом радоваться, чем печалится.

Цветы лиловые полей, 1985

CMD/Posh create scheduled tasks with trigger on logon

СБИС по прежнему не умеет запускать плагин с remoteapp, а мне уж порядком поднадоело ручками создавать задачу в планировщике. Я попробовал сделать задачу при помощи CMD:

set "nameuser=%USERDOMAIN%\%username%"
set "nametask=SBIS Plugin %nameuser%"
schtasks /create /sc ONLOGON /ru %nameuser% /it /tn "%nametask%" /tr "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe --autostart"

И потерпел фиаско по двум пунктам

  1. schtasks требует прав админа на добавление задачи, а как мы помним задача должна запускаться от имени того, кто вошел в систему
  2. любая добавленная задача через cmd с параметром /sc ONLOGON будет иметь триггер "При входе любого пользователя". Параметр /it в данном случае ничего не решает. Задача выполнится, но для любого пользователя (проверено)
Вариант с XML также не подходит, так как в Principals->Principal->UserId помещается ID пользователя, от чьего имени надо запускать задачу. Да, это можно сделать, но средствами CMD это пустая трата времени.
Промежуточный вариант создать в cmd, экспорт в XML, правка, импорт также не рассматривается из-за громоздкости решения.
В итоге было решено использовать PowerShell и получился вот такой короткий скрипт:
$name = Read-Host -Prompt "Enter your name"
$TaskName = "SBIS PLUGIN for $name"
$username ="$env:USERDOMAIN\$name"
 
#create a scheduled task with powershell
$Action = New-ScheduledTaskAction -Execute "C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe" -Argument "--autostart"
$Trigger = New-ScheduledTaskTrigger -AtLogOn -User $username

Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -User $username 

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

Стоит отметить, что параметр --autostart не обязателен

воскресенье, 3 сентября 2023 г.

Не показное, а реальное непонимание ближнего, но самое интересное - это попытка понять и принять

CODA: Ребенок глухих родителей, 2020

пятница, 1 сентября 2023 г.

Думаю такое кино пока не для меня

Дом, который построил Джек, 2018

CMD Path without space

 dir /X ~1 "c:\" - отобразит короткие имена каталогов, удобно, когда нельзя использовать пробелы. Логика проста - первые 6 символов + тильда + порядковый номер, понятно, что это условно, но в большинстве случаев нет каталогов с одинаковыми именами.

Например: C:\PROGRA~2\TENSOR~1\SBIS3Plugin\sbis3plugin.exe