30 января 2012 в 17:11

Батники против эксплойтов

Доброго времени суток, многоуважаемый %USERNAME%. Меня зовут Голованов Сергей, и я всё еще являюсь ведущим вирусным аналитиком в «Лаборатории Касперского». Я понимаю, что название этого поста в корпоративном блоге компании может вызвать смех, грусть, а у некоторых даже эпилептический припадок, но дайте мне всё объяснить.

Я понимаю, что для всех батники выглядят как нечто очень простое и со времен AUTOEXEC.BAT уже практически забытое, в то же время эксплойты, если вы конечно не профессиональный исследователь уязвимостей, выглядят очень сложно и практически неправдоподобно, особенно для некоторых разработчиков. Но! В данном посте я постараюсь перевернуть эти представления и рассказать, что всё как будто наоборот. Батники чуть легче и сильнее по функционалу brainfuck'а, а эксплойты не страшнее сортировки пузырьком на basic'е.

image

(Осторожно! 3 МБ иллюстрированного потока сознания и куча скриптов)

Как я до этого дошел?


Мне тут на глаза попалась коробка с Windows 7 x64 c минимальными системными требованиями в 2 ГБ оперативной памяти! И я тут подумал, неужели во всех этих гигабайтах не найдётся пары килобайт кода, которые могли бы защитить пользователей от такой напасти, как эксплойты и Drive-by? Это бич всех ОС от MS уже лет пять! Должны быть там средства для хоть какой-то защиты? Но как их заюзать, да еще и стандартными средствами? С помощью батников. А как? Чтобы это понять, нужно прочитать эту простыню до конца. 8)

Теория


В упрощенной теории срабатывания эксплойтов всё выглядит так: «что-то где-то посмотрели, что-то где-то послали, что-то где-то запустилось». В реальной жизни это часто выглядит так: пользователь, гуляя по интернетам, попадает на честно взломанный сайт, где ему вместе с полезной информацией отдают или JavaScript или редирект на JavaScript, который, анализируя USER-AGENT, информацию о плагинах и т.д. выдаёт пользователю эксплойт, который точно у пользователя сработает. После этого на машину пользователя сгружается троянец, запускается, прописывается в системе и начинает делать свои грязные дела.

image

Завалявшаяся картинка от Google Anti-Malware Team о Drive-By для визуалов,
читающих на языке вероятного противника


(-СГ. Юля, подправь, пожалуйста, по смыслу следующее предложение, чтобы было понятно, и удали этот комментарий. -Редактор. По смыслу??? Да я после «выделяет себе память» уже ничего не понимаю. Сам подправь и удали этот комментарий.)

Если копнуть чуть глубже, то оказывается, что в таких эксплойт-паках часто (практически всегда) полезная нагрузка выделяет себе память в процессе жертвы, ищет нужные системные функции, сохраняет файл из интернета на локаль и делает CreateProcess или очень редко — ShellExecute, при этом проблемы повышения привилегий перекладываются на то, что скачали. Всё в принципе просто и понятно. И чего с этим делать? Хватать за пятую точку за слабые места! Во всей этой схеме есть одно уязвимое место: неважно, какое приложение пробили, главное — запустить файл с троянцем. Таким образом, получается, что нам просто-напросто надо сделать так, чтобы на компьютере пользователя лишние файлы не запускались, и сделать это нужно стандартными средствами.

Стандартные средства


В Windows 7 есть несколько способов ограничить или расширить работу программ. Самыми популярными средствами, пожалуй, являются ACL и всяческие политики.

image

Наглядная схема SRP (Software Restriction Policies) от Microsoft

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

Батник


Итого: наш батник должен создать пользователя со стандартными правами, затем модифицировать эти права для запуска только определённого ПО и, наконец, сделать это прозрачно и удобно для пользователя. Начнем-с…

1. Создать пользователя. Халява.

net user saferun_user Passw0rd /add

Имя пользователя и пароль здесь указаны только для примера, их надо будет обязательно разбавить %random%’ами, чтобы не оказалась, что у нас у всех пользователей батника одинаковые имена пользователей и пароли на машинах. А то получится этакий Backdoor.Bat.Hren.a, его еще детектировать придется…)))

2. Модифицировать права. Э… а вот тут уже есть проблемы

По-хорошему назначать права на исполнение нужно AppLocker'ом с помощью PowerShell’a, например так:

PS C:\> Get-ApplockerFileInformation -Directory 'C:\Program Files (x86)\Adobe\' -Recurse -FileType Exe | New-ApplockerPolicy -RuleType Publisher -User SafeRun_user -RuleNamePrefix Adobe -Optimize -Xml > Adoby.xml
PS C:\> Set-AppLockerPolicy –XmlPolicy Adoby.xml


Однако, вся эта хитрая хрень «is only available in Ultimate and Enterprise versions of Windows 7». Поэтому как альтернативу в Home версии Windows 7 можно использовать Parental Control (ссылка на форум — я не шучу), который хранит информацию о том, какие программы можно запускать в:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Parental Controls\Users\UID\App Restrictions

Значит, политики в топку, ибо неудобно, будем использовать ACL, тем более что, начиная с Vista’ы, появилась замечательная команда ICACLS. В принципе всё, что написано дальше, может быть спроецировано и на XP c помощью XCACLS, но по умолчанию такой команды в XP нет, и входит она только в пакет Resource Kit.

Итого, в Windows 7 cначала вынесем пользователя из группы по умолчанию, чтобы ограничить его возможности благодаря групповым разрешениям создавать файлы где попало:

net localgroup users saferun_user /delete

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

icacls %USERPROFILE% /deny saferun_user:(OI)(IO)(WDAC,WO,X)

(-Редактор. Ты бы еще здесь попросил меня чего-нибудь проверить и подправить. Комментарии не забудь убить.)

Параметры «(OI)(IO)» как бы говорят нам, что все файлы, находящиеся в указанной папке, наследуют права родителя, которые, собственно, Deny Execute. Проверяем, что выставленные права работают:

C:\Users\Golovanov>runas /user: saferun_user cmd.exe
Enter the password for saferun_user:
Attempting to start cmd.exe as user “saferun_user" ...
C:\Windows\system32> cd %temp%
C:\Users\saferun_user\AppData\Local\Temp>%windir%notepad.exe
C:\Users\saferun_user\AppData\Local\Temp>copy c:\windows\notepad.exe .
1 file(s) copied.
C:\Users\saferun_user\AppData\Local\Temp>.\notepad.exe
Access is denied.


Итого: Notepad.exe из папки Windows работает, а если его скопировать в папку TEMP и запустить, то ACCESS IS DENIED. Всё ОК. Идём дальше.

3. Удобство использования

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

1. Скопировать профайл браузера текущего пользователя к новому пользователю. Например, для Firefox’а так:

xcopy /E /I /C /Y /Q /H /R %APPDATA%\Mozilla\* C:\Users\saferun_user\AppData\Roaming\Mozilla\

2. Создать в папке с браузером VBS файл, в котором прописать запуск Runas браузера. Делать это нужно через VBS, чтобы обойти ограничение по приёму пароля в STDIN к Runas’у. Прекрасный Microsoft сделал это, чтобы повысить защищенность своей ОС. Как обычно, защищенность осталась под вопросом, а геморроя прибавилось. VBS файл при этом будет выглядеть, например, так:

Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "RunAs /noprofile /user:saferun_user Firefox.exe"
WScript.Sleep 1000
oShell.Sendkeys "Passw0rd"
oShell.Sendkeys "{ENTER}"
Wscript.Quit


Маленький комментарий. В интернетах пишут, что Sendkeys в некоторых версиях отсутствует или запрещен, однако у меня на Windows 7 Professional, Ultimate и Home всё работает. Продолжаем.

3. Создать ярлык на новосозданный VBS файл c иконкой браузера.

Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\firefox_saferun.LNK"
Set oLink = oWS.CreateShortcut(sLinkFile)
oLink.TargetPath = "C:\Program Files (x86)\Mozilla Firefox\firefox.vbs"
oLink.IconLocation = "C:\Program Files (x86)\Mozilla Firefox\firefox.exe,0"
oLink.WorkingDirectory = "C:\Program Files (x86)\Mozilla Firefox\"
oLink.Save

4. Заменить новым ярлыком все уже имеющиеся у пользователя ярлыки на браузеры. Шутка. Положим ярлыки в отдельную папку на рабочем столе, а там пользователь пусть сам решает.

Листинг батника


Итого вроде всё ОК, осталось это всё причесать и оттестить.

::Writed by: Sergey.Golovanov at kaspersky.com for habrahabr.ru
@echo on
@Echo This batch file will create a new user for browsers with no rights to run downloaded from Internet files. 
Pause
::Setup new user::
set safeusername=saferun_user_%random%
set safepassword=%random%Ai%random%
echo Login: %safeusername% 
echo Password: %safepassword%
net user %safeusername% /delete
del Browserlist4saferun.txt
net user %safeusername% %safepassword% /add

::init new user profile::
echo Option explicit > init_new_user_profile.vbs
echo Dim oShell >> init_new_user_profile.vbs
echo set oShell= Wscript.CreateObject("WScript.Shell") >> init_new_user_profile.vbs
echo oShell.Run "RunAs /profile /user:%safeusername% ping" >> init_new_user_profile.vbs
echo WScript.Sleep 1000 >> init_new_user_profile.vbs
echo oShell.Sendkeys "%safepassword%" >> init_new_user_profile.vbs
echo oShell.Sendkeys "{ENTER}" >> init_new_user_profile.vbs
echo Wscript.Quit  >> init_new_user_profile.vbs
call cscript init_new_user_profile.vbs 
ping -n 10 localhost >> nul
del init_new_user_profile.vbs 

::Setup privileges for new user::
net localgroup users %safeusername% /delete
icacls c:\users\%safeusername%\ /deny %safeusername%:(OI)(IO)(WDAC,WO,X)  

::Setup browsers::
:FindOpera
if exist %APPDATA%\Opera\ xcopy /E /I /C /Y /Q /H /R %APPDATA%\Opera\* C:\Users\%safeusername%\AppData\Roaming\Opera\
if exist "%Programfiles%\Opera\Opera.exe" goto run4opera
if exist "%Programfiles(x86)%\Opera\Opera.exe" goto run4operax86
Goto FindFireFox
:run4opera
echo Opera^|%Programfiles%\Opera>> Browserlist4saferun.txt
Goto FindFireFox
:run4operax86
Set Browsername=Opera
echo Opera^|%Programfiles(x86)%\Opera>> Browserlist4saferun.txt
Goto FindFireFox
:FindFireFox
if exist %APPDATA%\Mozilla\ xcopy /E /I /C /Y /Q /H /R %APPDATA%\Mozilla\* C:\Users\%safeusername%\AppData\Roaming\Mozilla\
if exist "%Programfiles%\Mozilla Firefox\Firefox.exe" goto run4Firefox
if exist "%Programfiles(x86)%\Mozilla Firefox\Firefox.exe" goto run4Firefoxx86
Goto FindChrome
:run4Firefox
echo Firefox^|%Programfiles%\Mozilla Firefox>> Browserlist4saferun.txt
Goto FindChrome
:run4Firefoxx86
echo Firefox^|%Programfiles(x86)%\Mozilla Firefox>> Browserlist4saferun.txt
Goto FindChrome
:FindChrome
If exist %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe goto run4chrome
Goto FindIE
:run4chrome
::// Can work for some versions of Chrome by not stable. Dissabled for performance. 
::xcopy /E /I /C /Y /Q /H /R %LOCALAPPDATA%\Google\Chrome\* C:\Users\%safeusername%\AppData\Local\Google\Chrome\
::for /r C:\Users\%safeusername%\AppData\Local\Google\Chrome\ %%C in (*.exe) do icacls %%C /grant %safeusername%:(X)
::for /r C:\Users\%safeusername%\AppData\Local\Google\Chrome\ %%C in (*.dll) do icacls %%C /grant %safeusername%:(X)
::echo Chrome^|C:\Users\%safeusername%\AppData\Local\Google\Chrome\Application\>> Browserlist4saferun.txt
Goto FindIE
:FindIE
::// TODO A lot of XCOPYs
if exist "%LOCALAPPDATA%\Microsoft\Internet Explorer" (
xcopy /E /I /C /Y /Q /H /R "%USERPROFILE%\Favorites\*" "C:\Users\%safeusername%\Favorites\"
xcopy /E /I /C /Y /Q /H /R "%LOCALAPPDATA%\Microsoft\Internet Explorer\*" "C:\Users\%safeusername%\AppData\Local\Microsoft\Internet Explorer\"
xcopy /E /I /C /Y /Q /H /R "%LOCALAPPDATA%\Microsoft\Windows\History\*" "C:\Users\%safeusername%\AppData\Local\Windows\History\"
xcopy /E /I /C /Y /Q /H /R "%APPDATA%\Roaming\Microsoft\Windows\Cookies\*" "C:\Users\%safeusername%\AppData\Roaming\Microsoft\Windows\Cookies\"
)
if exist "%Programfiles(x86)%\Internet Explorer\iexplore.exe" goto run4iex86
if exist "%Programfiles%\Internet Explorer\iexplore.exe" goto run4ie
:run4iex86
echo IExplore^|%Programfiles(x86)%\Internet Explorer>> Browserlist4saferun.txt
goto MakeLinks
:run4ie
echo IExplore^|%Programfiles%\Internet Explorer>> Browserlist4saferun.txt

::Make links::
:MakeLinks
rd /s /q %USERPROFILE%\Downloads\Browser
rd /s /q %USERPROFILE%\Desktop\SafeLinks
mklink /d %USERPROFILE%\Downloads\Browser C:\Users\%safeusername%\Downloads
mkdir %USERPROFILE%\Desktop\SafeLinks
echo on
For /f "tokens=1,2 delims=|" %%A in (Browserlist4saferun.txt) do (
echo Option explicit > "%%B\%%A.vbs"
echo Dim oShell >> "%%B\%%A.vbs"
echo set oShell= Wscript.CreateObject^("WScript.Shell"^) >> "%%B\%%A.vbs"
echo oShell.Run "RunAs /user:%safeusername% %%A.exe" >> "%%B\%%A.vbs"
echo WScript.Sleep 1000 >> "%%B\%%A.vbs"
echo oShell.Sendkeys "%safepassword%" >> "%%B\%%A.vbs"
echo oShell.Sendkeys "{ENTER}" >> "%%B\%%A.vbs"
echo Wscript.Quit  >> "%%B\%%A.vbs"
echo Set oWS = WScript.CreateObject^("WScript.Shell"^) > "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo sLinkFile = "%USERPROFILE%\Desktop\SafeLinks\%%A_saferun.LNK" >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo Set oLink = oWS.CreateShortcut^(sLinkFile^) >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo oLink.TargetPath = "%%B\%%A.vbs" >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo oLink.IconLocation = "%%B\%%A.exe,0" >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo oLink.WorkingDirectory = "%%B\" >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
echo oLink.Save  >> "%USERPROFILE%\Desktop\SafeLinks\%%A.lnk.vbs"
) 
for /r %USERPROFILE%\Desktop\SafeLinks\ %%p in (*.vbs) do cscript %%p
for /r %USERPROFILE%\Desktop\SafeLinks\ %%v in (*.vbs) do del %%v
:: Open Explorer with links::
explorer %USERPROFILE%\Desktop\SafeLinks\

:: Create Uninstall::
echo @echo off > uninstall_%~n0.bat
echo net user %safeusername% /del >> uninstall_%~n0.bat
echo rd /s /q %USERPROFILE%\Downloads\Browser >> uninstall_%~n0.bat
echo rd /s /q %USERPROFILE%\Desktop\SafeLinks >> uninstall_%~n0.bat
echo rd /s /q C:\Users\%safeusername%\ >> uninstall_%~n0.bat
echo For /f "tokens=1,2 delims=|" %%%%A in (Browserlist4saferun.txt) do del "%%%%B\%%%%A.vbs" >> uninstall_%~n0.bat
echo del Browserlist4saferun.txt >> uninstall_%~n0.bat
echo del %%0 >> uninstall_%~n0.bat

:Exit

Тестирование


Ну-с, а теперь попробуем, как это всё работает в дикой природе:

1. Выключаем антивирус и даунгрейдим, например, JAVA (чета мне сразу не по себе стало).

2. Копипастим батник из листинга.

3. Сохраняем его как saferun.bat, делаем глубокий вдох и кликаем на него два раза.

4. Мигают консоли и открывается окно эксплорера. Смотрим на окно с ярлыками и много думаем.

5. Выбираем любой браузер. Идём на Youtube, проверяем, что всё работает, кликается и т.д.

6. Теперь идём на Google и ищем «Самый популярный браузер рунета» (это мне сестра показывала, как скачать порно-блокер бесплатно). Кликаем на несколько ссылок, и наш компьютер начинает подозрительно трещать. Ждём минуту. Вроде ничего страшного не произошло. Смотрим в Process Explorer и видим, что наш браузер запустил JAVA.exe, который успешно унаследовал нашего нового пользователя.
image


7. Теперь идём во временную директорию нового пользователя и видим там следующее…
image


8. Проверяем права на файл «____991.exe»
image


9. Отрываем cmd.exe под созданным пользователем. Пароль для него можно посмотреть, например, в VBS скрипте рядом с EXE’шником браузера
image


10. Делаем cd %temp% в новой консольке и пишем «.\____991.exe». Жмём Enter!
image


11. УРА-УРА!!! Это победа.
image

12. Кому интересны подробности, то

C:\Users\saferun_user_31714\AppData\Local\Temp>d:\md5.exe ____991.ex
____991.ex : 04DA16B5447D8F2B4BD23AFD469FB153

Если бы этот файл запустился, то мы бы увидели веселые картинки и просьбу поработать с платёжным терминалом.

Вместо заключения


image

Итого наш батник будет очень полезен для защиты от Drive-by атак и эксплойтов при работе с Windows 7 как из-под админа, так и под простым пользователем. Да, у него есть теоретическое ограничение на полезные нагрузки с повышением привилегий, но такое в дикой природе благо редко встречается. Плюсы при работе с батником — его можно очень быстро править и добавлять в него поддержку новых программ, таких как почтовые клиенты, офисные программы и т.д. Настройка, гибкость, клёвость и крутость очень важны, и мы в ЛК это прекрасно понимаем.

Спасибо большое, что дочитали этот поток сознания автора до конца и еще ни разу не нажали на минус. 8) Удачи!

ПС. Данный батник не имеет никакого отношения к SafeBrowser’у, входящему в продукты ЛК.
ППС. Батник создаёт очень удобный Uninstall — на случай если что-то вдруг пошло не так.
ПППС. Как обычно в комментариях тусуется доброжелательный пользователь k1k, который выдаёт себя за автора статьи. Так оно и есть. Спасибо!
Автор: @Kaspersky_Lab
Ловим вирусы, исследуем угрозы, спасаем мир

Комментарии (73)

  • +2
    Пожалуй одна из интереснейших статей Kaspersky_Lab.
    Предвижу вопросы «а если работать под юзером??777»
    • 0
      Предвижу ответ, что трояны, запущенные с пользовательскими правами, не будут мешать работе остальным пользователям… + Ни кто не запрещает рисовать «Full Screen» + «Always on Top» окно блокерам.
  • +2
    Кстати, я после твоих скринов еще несколько секунд не мог проморгаться при переключении на белый фон Хабра. Как у тебя глаза не вытекают только?
    • +5
      Я ношу очки.
      • 0
        Солцезащитные? :)
        • +4
          Для плавания!)
  • 0
    *sarcasm on* Пока пользователи отказываются потратить несколько минут своего времени на самообучение и настройку операционной системы, мы в ЛК с радостью продолжим зарабатывать миллионы и мне это нравится ;) *sarcasm off*
      • +1
        Классика антивирусов :)
        • +1
          Ну, если совсем уж быть точным, то не известно, как сработает эмуль, HIPS и PDM. Вечером не сообразил проверить, а сейчас уже не имеет смысла, будет ловиться даже с выключенным антивирусом.
  • +2
    Отличная статья и интересный подход. Ждем новой статьи Батники против Человеческой глупости.
    • +4
      А также «Батники против Perl», «Батники против PHP» и, конечно же, «Батники против пришельцев»…
  • –8
    Ни асилил :(
    Но было интересно!
    • +1
      Прочитал! Было интересно! :)
  • 0
    (-СГ. Юля, подправь, пожалуйста, по смыслу следующее предложение, чтобы было понятно, и удали этот комментарий. -Редактор. По смыслу??? Да я после «выделяет себе память» уже ничего не понимаю. Сам подправь и удали этот комментарий.)

    Это вроде как самому влом перечитывать было?
    • +4
      Я так понял это шутка :)
      • +1
        А вы ник человека прочтите
    • +8
      Это месть за редакторскую правку. В оригинале статья была смешнее)
  • +2
    Вау! Виндузятники /tmp с noexec примонтировали жалкой сотней строк в консоли.
    • +21
      Виндузятники, не понявшие шутки, решили на всякий случай обидеться на слово «виндузятники» :)
    • +4
      Прототип AppArmor в bat-файле.
    • 0
      Сколько там ваш линупс в процентах на десктопах, а?
      • +2
        *шутка про Mac OS X*
      • +2
        Стоп! Мысль то нормальная. Только вот если запретить запуск программ из temp'a пользователя, все инстолляторы обломаются…
        • +2
          Я не спорю что мысль адекватная и правильная, но можно было выразить её чуть-чуть по-другому. Ну, Вы поняли.
  • 0
    Спасибо за статью, поток сознания пошел на ура даже в понедельник. Я тут заметил, что где-то наш юзер называется «saVerun_user», где-то «saFerun_user», а где-то даже «saCerun_user». Грамматически правильно второе, но кэп подсказывает, что желательно бы ввести некоторое однообразие :) Еще раз спасибо за статью.
    • +4
      Упс. Спасибо! Да, в батнике я всё почистил, а вот про текст и тесты забыл… Юля, исправь, пожалуйста)
  • 0
    Винды-с, что с них возьмёшь.
  • +2
    Мне прислали вопросы, но я думаю, лучше ответить здесь, всем и сразу

    > 1. Есть разница в скриптах между saVerun_user и saferun_user

    Разницы нет. В теле батника, просто всё написано через «saFerun_user», а в тексте поста через «saVerun_user», но смысл не меняется)

    > 2. Под русской W7 Ult.
    >
    > net localgroup users saferun_user_***6 /delete
    > Системная ошибка 1376.
    >
    > Указанная локальная группа не существует.

    Да, в русской версии Windows 7 надо писать
    «net localgroup пользователи saferun_user_***6 /delete»

    > 3. Если скрипт запустить при запущенном FireFox, скрипт зависнет на предложении при xcopy — попытка доступа к открытым ресурсам.

    При запущенном Firefox'e xcopy должен сказать «sharing violation» на файл parent.lock, но зависнуть ни чего не должно. Дождитесь, пожалуйста, пока профайл просто полностью скопируется. Время ожидания зависит от размера профайла на диске. По этой же причине долгого ожидания в батнике закомменчена работа с Chrome'ом.

    Еще вопросы?
    • 0
      а не подскажете, что это у вас там за плагины к far-у стоят (из нестандартных)? :)
      • 0
        Ну как то так)
        D:\Far\Plugins>dir /b /a:D
        7zip
        Align
        AutoWrap
        Av
        avixtr
        Brackets
        Browsers
        chmview
        Colorer
        Compare
        DocFile Browser
        DrawLine
        EditCase
        Editor
        EMenu
        FARCmds
        FarReg
        FileCase
        frb
        FTP
        HlfViewer
        MacroView
        mscab
        MultiArc
        mv
        Network
        NTFS File Streams Browser
        Observer
        PEdit
        PrintMan
        ProcList
        ProxyFTP
        rclick
        RECYCLE
        SpellChecker
        startup
        Tetris
        TmpPanel
        • 0
          спасибо :)
    • 0
      подскажите плиз в какой кодировке сохранять бат файл для русской window 7?
      Меняю как вы выше написали на net localgroup пользователи saferun_user_***6 /delete
      И всеравно получаю ошибку, причем в консоли вместо пользователи крякозяблики.
      • 0
        win1251
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Упс. А эксплорер открывается, когда из под админа запускаете? А ошибки какие-нибудь сыпятся?
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          он создается в папке профиля администратора?
          • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Проверил на home под учеткой, всё создалось…
          • 0
            Проверил на всех своих системах, всё ок, все файлы создаются и работают под стандартным пользователем, если стартануть батник как «run as administrator»
            +
            > Можно как-нибудь прибивать запущенный браузер перед тем как удалить пользователя и его папку?

            Да, конечно.
            «taskkill /F /IM iexplore.exe /T»
            Причем это действительно надо делать для всех браузеров и при старте батника и при его вынесе. Спасибо! Добавлю и такой функционал.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Странно, я все делал на рабочем столе и все файлы появлялись. + Если следующий пост будет про тоже самое только на PowerShell'e, то туда же войдет и обновление батника. Но Вы можете и сами это сделать. В конец батника нужно вбить
                ===
                :killbr
                taskkill /F /IM iexplore.exe /T
                taskkill /F /IM firefox.exe /T
                taskkill /F /IM opera.exe /T
                taskkill /F /IM chrome.exe /T
                goto :FindOpera
                ===
                А после строчки
                ::Setup browsers::
                написать
                ===
                goto :killbr
                ===
                Плюс в начало секции :: Create Uninstall:: нужно вбить
                echo taskkill /F /IM iexplore.exe /T >> uninstall_%~n0.bat
                echo taskkill /F /IM firefox.exe /T >> uninstall_%~n0.bat
                echo taskkill /F /IM opera.exe /T >> uninstall_%~n0.bat
                echo taskkill /F /IM chrome.exe /T >> uninstall_%~n0.bat

                Всё.
                • 0
                  не хватает exit перед :killbr, скрипт зацикливается. В конец файла нужно добавлять
                  exit
                  
                  :killbr
                   taskkill /F /IM iexplore.exe /T
                   taskkill /F /IM firefox.exe /T
                   taskkill /F /IM opera.exe /T
                   taskkill /F /IM chrome.exe /T
                   goto :FindOpera
                  


                  В опере не копировались виджеты(тестировал на 12.17), нужно заменить
                  if exist %APPDATA%\Opera\ xcopy /E /I /C /Y /Q /H /R %APPDATA%\Opera\* C:\Users\%safeusername%\AppData\Roaming\Opera\
                  

                  на
                  if exist %APPDATA%\Opera\ (
                  xcopy /E /I /C /Y /Q /H /R %APPDATA%\Opera\* C:\Users\%safeusername%\AppData\Roaming\Opera\
                  xcopy /E /I /C /Y /Q /H /R %LOCALAPPDATA%\Opera\* C:\Users\%safeusername%\AppData\Local\Opera\
                  )
                  
  • +2
    Похожая техника для Windows XP. habrahabr.ru/blogs/sysadm/97594/
    Через групповые политики. Это, конечно, не батники, но для домена должно быть самым удобным решением.
  • 0
    Что-то мне сдаётся, что у меня Chrome перестанет запускаться в таком случае, пока я не скачаю специальную версию, которая в Program Files ставится.
    • 0
      Попробуйте. У меня он честно на некоторых сборках писал cannot find chrome dlls. Я так и не нашел по исходникам каких прав ему не хватило. Может быть Вам повезет)
      • 0
        Не, пробовать не буду :)
        Просто он по дефолту как раз в AppData устанавливается, а тут как раз из AppData фиг чего запустишь.
        • 0
          Ну for /r какбы намекает, что на все файлы хрома выставлена метка execute granted
          • 0
            То ли я не внимательно читал, то ли статья менялась уже после того, как я прочёл и отписался :)
            • 0
              Не менялась)
  • +1
    Эм. для домашних пользователей, это, в принципе хорошо.
    В корпоративном — всё немного по другому — подпись разрешенных и групповые политики…

    Кстати, эти скрипты переписать бы на powershell… :)
    • 0
      В тексте уже есть заготовка для этого, но лучше таки делать новый пост… ок подумаем. Спасибо!)
      • 0
        Печально только то, что домашние пользователи таким не морочатся,
        Те, кто разбираются — такие сайты открывают из песочниц/виртуалок,
        А на работе есть AppLocker и групповые политики, по которым подписан десяток-другой допустимых к запуску приложений и все лишнее/непонятное изначально запущено быть не может.
        А, да, еще есть *nix для совсем суровых :)
        хотя тьфу тьфу, мое окружение, мало разбирающееся в ИТ, использует только вконтактик/одноклассники и ни разу не словили винлокер, хотя, это совсем не показатель
  • 0
    Осталось защититься от DLL Hijacking как-нибудь
    • 0
      Благо на dllки запрет запуска тоже распространяются, то есть вызвать rundll32 с путем к dll в профайле, например, не получится… хотя я не проверял)
      • 0
        Зато наверное с документами и всякими файлами вместе загружаются на ура.
        • 0
          Не уверен… надо проверять…
          • +1
          • +1
            Ну загрузится, и? в 7 и 2007/10 офисе надо еще постараться чтобы vba скрипт в макросе запустился…
  • +1
    «____991.exe»

    Знакомый зверёк, только вчера вычищал, причем KAV WS его пропустил и на virustotal детекта тоже небыло. -_-

    Метод с блокированием запуска, несмотря на простоту, очень эфективен, если кому-то не нравятся батники, можно взять какой-либо апп-ланчер и его запускать от сейф-юзера, например любимые многими имитаторы Dock'a.
  • 0
    Оригинальный подход к делу и интересная подача материала.
    Маленькое «но»: рецепт хромает как минимум в плане копирования профиля. Мой профиль в FF — это 220 Мб. Когда будет копироваться — пользователь может от волнения поседеть :)
    • 0
      Действительно, Сережа, ускорь пожалуйста процедуру копирования профиля. Можно, например, всем бесплатно раздать SSD'шники.
      • –1
        Хаха, очень смешно, Слава, опубликуй это обязательно в Твиттере.

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

        Хотя безусловно у Русакова FF без папки %userprofile%\AppData\Roaming\Mozilla\Firefox\Crash Reports не запустится :-Р
        • 0
          FF без профиля может сам запуститься и создать его без аддонов, куков и т.д. Проблема в том, что для пользователя это не удобно, т.к. потребуется занова всё ставить и настраивать => пользоваться этим ни кто не будет, а это фэйл. Можно было бы конечно сделать symbol link'ки, на профайл текущего пользователя и запритить там запуск, но проблема в том, что винда перекрывает ACL своими политиками разграничения доступа к файлам другого пользователя, соответственно доступа по этим ссылкам не будет. Выход один xcopy. А про 220 МБ… Ну да. У меня всё занимает 75 МБ и копируется за 15 секунд. Всё ок. Ни какого криминала, тем более что это процедура потребуется только один раз.
          • 0
            Проблема в том, что аддоны захотят обновляться :) Это не будет конфликтовать с заданными ограничениями? ;)

            Хотя да, тут я уже немного загибаю. Просто в реале запесоченный браузер лучше запускать голым. Всё равно из-за ограничений аддоны будут работать криво, а в ряде таких, как к примеру NoScript необходимость как бы и исчезает :)
            • 0
              Угу + конфликтовать ничего не будет)
      • 0
        P.S. И ещё — несовсем уверен, но возможно
        if exist %APPDATA%\Mozilla\ xcopy /E /I /C /Y /Q /H /R %APPDATA%\Mozilla\* C:\Users\%safeusername%\AppData\Roaming\Mozilla\

        надо заменить на
        if exist %APPDATA%\Mozilla\Firefox xcopy /E /I /C /Y /Q /H /R %APPDATA%\Mozilla\Firefox\* C:\Users\%safeusername%\AppData\Roaming\Mozilla\Firefox\
        ?
        • 0
          В некоторых версиях FF испольвазует папку %APPDATA%\Mozilla\Еxtenstions для плагинов и аддонов. Хотя, да. Там лежат профайлы и для других программ, может быть и стоило ограничиться этими 2мя папками…
          • 0
            Например, Thunderbird ;)
            • 0
              угу
  • 0
    Серёжа, без обид, но идея оказалась настолько интересной, что я продолжил копаться в суровых командных скриптах Windows. И вот что ещё накопал.

    1. Возможны проблемы, когда %Programfiles%=C:\Program Files, а пользователь установил браузер на диск D. В итого нормально определится только Осёл.

    2. Не знаю, что там за проблемы с Хромом от Гугла (подозреваю, что проблемы с тем, что настройки переплетаются с другими приложениями Гугла в одинаковых папках. Ну да речь не о том. Есть молодой браузер на движка Chromium, в последнее время он мне нравится всё больше — Comodo Dragon. Так вот можно было бы и его приделать, там всё просто: /Comodo/Dragon/ и настройки в %LOCALAPPDATA%\Comodo\Dragon
    Короче — просто влепить между ::Setup browsers:: и :FindOpera следующий код:
    :FindDragon
    if exist %LOCALAPPDATA%\Comodo\Dragon xcopy /E /I /C /Y /Q /H /R %LOCALAPPDATA%\Comodo\Dragon\* C:\Users\%safeusername%\AppData\Local\Comodo\Dragon\
    if exist "%Programfiles%\Comodo\Dragon\Dragon.exe" goto run4dragon
    if exist "%Programfiles(x86)%\Comodo\Dragon\Dragon.exe" goto run4dragonx86
    Goto FindOpera
    :run4dragon
    echo Dragon^|%Programfiles%\Dragon>> Browserlist4saferun.txt
    Goto FindOpera
    :run4dragonx86
    Set Browsername=Dragon
    echo Dragon^|%Programfiles(x86)%\Dragon>> Browserlist4saferun.txt
    Goto FindOpera


    Как-то так…
    • 0
      Во-во. Еще хорошо бы хорошо добавить поддержку почтовых клиентов и всё!)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное