Как стать автором
Обновить

Комментарии 27

А в чем автоматизация блокирования? Я так понимаю это проверка на «вшивость» отдельно взятой машины?
В том, что не нужно делать все операции руками. Создание файлов perfc и правил для fw останавливает дальнейшее распространение.
Эпидемии и дальше будут наносить значительный ущерб, пока вместо грамотного резервного копирования будут применяться подобные кустарные методы.
Ну скопируете и дальше что, загрузите резервные вирусы? Грамотное это какое?
Вот по вашей теме.

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

2. В окне выбираем «Исключения»

3. Необходимо выбрать слева в меню «Каталоги и файлы» и нажать пиктограмму «Добавить»

4. В открывшемся окне нажимаем на кнопку «Обзор» и выбираем каталог с программой, по умолчанию он находится по путиC:\Program Data\Medoc IS и нажимаем «Ок».
Грамотное — данные, а не вирус. Наличие нескольких ревизий, недоступность предыдущих ревизий на перезапись и так далее.
А с чего Вы решили, что это вместо резервного копирования?

По заявлениям Директора по вопросам технологической политики Центрально-Европейской группы стран Microsoft Михаила Шмелева: «Не меньше двухсот дней назад произошло заражение». Какой глубины должен быть backup?

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

Источник заражения практически наверняка установлен — M.E.Doc и это уже не в первый раз. Если же за 200 дней никто не понял, что данные нарушены — они и не нужны были. А инкрементному бэкапу так вообще поперек — он только изменения хранит.
1. После первой информации в сми про M.E.Doc, это было в начале июня, мы выделили его в отдельный vlan;
2. То что M.E.Doc был одним из источников, это не означает что он был единственным;
3. Данные 200 дней были целые, но в них мог находиться вирус в спящем режиме, соответственно backup скомпрометирован. И восстановление с него приведет к повторному инциденту ИБ.

Если вы говорите о других источниках — неплохо было бы знать что никто из исследователей их не нашел до сих пор. Данные в которых вирус (что уже, в целом, смешно) — не целые данные.
То что до сих пор не нашел, не означает, что не найдет.
На данный момент есть не подтвержденная информация о том, что одним из векторов распространения были письма с вложением. Соответственно если мы делаем резервную копию пользовательских данных в виде pst файла, в котором есть письмо с вирусом, это ли не пользовательские данные в которых вирус? Не совсем понял Ваш сарказм.

До вечера 27.06.2017 данная модификация вируса не детектилась, соответственно знать, что данные не целые не представлялось возможным.
Заражение через M.E.Doc актуально только для Украины, а заражения зафиксированы и за ее пределами.
Все магазины Ehituse ABC закрыты из-за кибератаки
Ehituse ABC Tartu — Краски Vivacolor: Производство красок в Украине

Компания «Сен-Гобен» присутствует в Украине с 1996 года.

Голландское предприятие TNT, которое занимается логистикой.
Як і інші компанії по всьому світу, ми стикаємося з проблемами в наших системах мережі TNT.

А разве в других странах пользуются медком?

Нет, про это и написал Serge78rus
Так это постоянно так. Проблема не шифровальщики, а downloader'ы. Программы, которые проникают, осматриваются, размещают полезную нагрузку, очищают логи и удаляются. Метод проникновения остается неизвестным и все в цикреповторяется
Моя бухгалтерша уверяет, что обновления никакие не устанавливала (и вообще она их только вручную ставит), никакие сообщения не открывала. Но вирусный процесс был запущен из процесса «медок». Поэтому, все же не понятно, как именно он попал на машину и по какому событию активизировался.
Ну верить бухгалтеру, это сомнительная затея. Но такие же аргументы я слышал не раз и от ИТ.

Списать все на M.E.Doc, исключив при этом возможность другого источника проникновения — не правильно, как по мне.
Моя бухгалтерша уверяет, что обновления никакие не устанавливала

Смешно.

-У вас стоит антивирус Касперский?
-Стоит.
— Сработал?
-Не сработал.
-Вы нажимали кнопку третью — исключения антивируса?
— Да. Поставила две галочки. Как и положено! Чтобы программа загружалась.

Мда.


Set-executionpolicy unrestricted -force… Set-executionpolicy restricted -force

Да? А если там, например, remotesigned было (типично для ПК в доменной среде)?


Смысл всей части скрипта до добавления правил файрвола совершенно непонятен. Зачем это всё?


New-NetFirewallRule -Action Block ....

Открываем список правил, смотрим, какие соответствуют блокируемым портам — там не только SMB и NetBIOS. Вы ТОЧНО уверены, что это надо слепо блокировать? :/ В конце-концов, если уж вам SMB-сервер на машине не нужен, ну так погасите службу LanmanServer, зачем над файрволом издеваться?


try
{
Remove-Item -Path C:\Windows\perfc -Force -ea Stop
Write-Verbose -Message "File perfc was already exist" -Verbose
}
catch {Write-Verbose -Message "File perfc already fixed" -Verbose}
, и т.п.

Если файл существует и вы не можете его удалить — значит, всё хорошо и всё починено? А вы не думали, что удаление может не пройти по какой-то другой причине? Ну, скажем, файл открыт?


$accrule1 = New-Object ..........

Во-первых, правила 3 и 4 у вас одинаковы. Во-вторых, зачем вешать на один и тот же объект для одного и того же принципала одновременно Deny Full Control и Allow R&E? В-третьих, использовать локализованные имена для well-known security principals — дурной тон.


Get-ChildItem -Path "$TempPath" -Force -Recurse -ErrorAction SilentlyContinue | where {$_.name -like "*.exe"}

Ух, это вообще застрелиться. Особенно на каком-нибудь ноуте с 5400 HDD, где темп сто лет не чистился, настройки кэша IE по умолчанию, и т.п. Параметр -filter не для настоящих мужчин, да? :)

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

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

НЛО прилетело и опубликовало эту надпись здесь
Так себе способ, честно говоря.
Политика исполнения может быть выставлена определённой на целевых машинах не просто так. Это во-первых.
Во-вторых, на каждой машине надо делать ручками. Потому что на какой-нибудь 8.1 с подтянутыми политиками в части выполнения скриптов (как у меня) даже в подписанном CodeSigning сертификатом к C:\Windows просто так не пустит (Это ещё раз к слову о Set-executionpolicy unrestricted -force — пока это так, что-то помимо вас может успеть отработать — для многих это неприемлемый риск).
Пройти через админшару и руками раскидать этот perfc займёт меньше времени, имхо. Кстати, на сотню виндовых серверов у меня такой действие (руками) заняло минут 15-20 времени.

Автоматизация — это хорошо. Но только не когда это автоматизация ради автоматизации.
Извините, что немного не по теме, но в последнее время столько статей про Петю, что я даже и не знаю куда писать.

Думаю во многих крупных компаниях люди используют outlook, а вместе с ним и архивы почты *.pst.
Так вот, почтовые архивы можно спасти даже если диск зашифровало (видимо обусловлено тем, что Петя шифрует только первый мегабайт файла).
Если MBR не перезаписаны, просто копируем с шифрованного жесткого почтовые архивы на рабочий компьютер с установленным outlook`ом, и пытаемся открыть архив там. Если при открытии возникает ошибка, запускаем утилиту scanpst.exe и пробуем восстановить. Пока не было ни одного полностью потерянного архива.

Если же MBR перезаписан, то понадобится R-Studio, полное сканирование диска, а дальше как описано выше. Надеюсь кому-нибудь это поможет, ведь в почте содержится процентов 30 % рабочей информации
рекомендую заменить в скрипте строчку (пример с Блога MSDN немного устарел):
$newProcess.Arguments = $myInvocation.MyCommand.Definition;

на
$newProcess.Arguments = '"'+$script:myInvocation.MyCommand.Definition +'"';

или (тут можно добавить параметры по вкусу):
$newProcess.Arguments = '-ExecutionPolicy RemoteSigned -File "' + $script:MyInvocation.MyCommand.Path + '"';


можно подписать файл скрипта (сертификат «можно купить»/«уже есть», или сделать самоподписанный):
function sign ($filename) {
$cert = gci cert:\currentuser\my -codesigning|Out-gridview -PassThru
$cert|fl
Set-AuthenticodeSignature $filename $cert
}

рекомендую заменить в скрипте фрагмент:
Старый фрагмент
if((Test-Path -Path C:\Windows\perfc) -eq $true)
{
try
{
Remove-Item -Path C:\Windows\perfc -Force -ea Stop
Write-Verbose -Message "File perfc was already exist" -Verbose
}
catch {Write-Verbose -Message "File perfc already fixed" -Verbose}
}

if((Test-Path -Path C:\Windows\perfc.dll) -eq $true)
{
try
{
Remove-Item -Path C:\Windows\perfc.dll -Force -ea Stop
Write-Verbose -Message "File perfc.dll was already exist" -Verbose
}
catch {Write-Verbose -Message "File perfc.dll already fixed" -Verbose}
}

if((Test-Path -Path C:\Windows\perfc.dat) -eq $true)
{
try
{
Remove-Item -Path C:\Windows\perfc.dat -Force -ea stop
Write-Verbose -Message "File perfc.dat was already exist" -Verbose
}
catch {Write-Verbose -Message "File perfc.dat already fixed" -Verbose}
}


на:
Новый фрагмент
$windows = $env:SystemRoot

$files = @("perfc","perfc.dll","perfc.dat")

$files | % {
if((Test-Path -Path "$windows\$_") -eq $true) {
try {
Remove-Item -Path "$windows\$_" -Force -ea Stop
Write-Verbose -Message "File [$windows\$_] was already exist" -Verbose
} catch {
Write-Verbose -Message "File [$windows\$_] already fixed" -Verbose
}
}

}


и
Старый фрагмент
$acl1 = Get-acl C:\Windows\Perfc
$acl2 = Get-acl C:\Windows\Perfc.dll
$acl3 = Get-acl C:\Windows\Perfc.dat

$acl1.SetAccessRuleProtection($true,$true)
$acl2.SetAccessRuleProtection($true,$true)
$acl3.SetAccessRuleProtection($true,$true)

$accrule1 = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM","FullControl","Deny")
$accrule2 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","FullControl","Deny")
$accrule3 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","ReadAndExecute","Allow")
$accrule4 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","ReadAndExecute","Allow")

$acl1.SetAccessRule($accrule1)
$acl1.SetAccessRule($accrule2)
$acl1.SetAccessRule($accrule3)
$acl1.SetAccessRule($accrule4)

$acl2.SetAccessRule($accrule1)
$acl2.SetAccessRule($accrule2)
$acl2.SetAccessRule($accrule3)
$acl2.SetAccessRule($accrule4)

$acl3.SetAccessRule($accrule1)
$acl3.SetAccessRule($accrule2)
$acl3.SetAccessRule($accrule3)
$acl3.SetAccessRule($accrule4)

Set-Acl -AclObject $acl1 -Path C:\Windows\Perfc -ea SilentlyContinue
Set-Acl -AclObject $acl2 -Path C:\Windows\Perfc.dll -ea SilentlyContinue
Set-Acl -AclObject $acl2 -Path C:\Windows\Perfc.dat -ea SilentlyContinue


на:
Новый фрагмент
$files | % {
try{
New-item -Path $windows -ItemType File -Name $_ -Force -ea Stop
}catch{Write-Verbose -Message "Dont need to create new files"}

}

Write-Verbose -Message "Successfully created" -Verbose

$files | % {
$acl = Get-acl "$windows\$_"
$acl.SetAccessRuleProtection($true,$true)

$accrule1 = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM","FullControl","Deny")
$accrule2 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","FullControl","Deny")
$accrule3 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","ReadAndExecute","Allow")
$accrule4 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Администраторы","ReadAndExecute","Allow")

$acl.SetAccessRule($accrule1)
$acl.SetAccessRule($accrule2)
$acl.SetAccessRule($accrule3)
$acl.SetAccessRule($accrule4)

Set-Acl -AclObject $acl -Path "$windows\$_" -ea SilentlyContinue
}


Преимущества:
  • папка может оказаться сааавсем не Windows
  • быстрая замена имен файлов

P.S. фрагменты не тестировал!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории