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

    Доброго времени суток, многоуважаемый %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, который выдаёт себя за автора статьи. Так оно и есть. Спасибо!
    Метки:
    «Лаборатория Касперского» 486,94
    Ловим вирусы, исследуем угрозы, спасаем мир
    Поделиться публикацией
    Комментарии 73
    • +2
      Пожалуй одна из интереснейших статей Kaspersky_Lab.
      Предвижу вопросы «а если работать под юзером??777»
      • 0
        Предвижу ответ, что трояны, запущенные с пользовательскими правами, не будут мешать работе остальным пользователям… + Ни кто не запрещает рисовать «Full Screen» + «Always on Top» окно блокерам.
      • +2
        Кстати, я после твоих скринов еще несколько секунд не мог проморгаться при переключении на белый фон Хабра. Как у тебя глаза не вытекают только?
        • +5
          Я ношу очки.
          • 0
            Солцезащитные? :)
            • +4
              Для плавания!)
        • 0
          *sarcasm on* Пока пользователи отказываются потратить несколько минут своего времени на самообучение и настройку операционной системы, мы в ЛК с радостью продолжим зарабатывать миллионы и мне это нравится ;) *sarcasm off*
        • +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
                                подскажите плиз в какой кодировке сохранять бат файл для русской window 7?
                                Меняю как вы выше написали на net localgroup пользователи saferun_user_***6 /delete
                                И всеравно получаю ошибку, причем в консоли вместо пользователи крякозяблики.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • 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
                                            Зато наверное с документами и всякими файлами вместе загружаются на ура.
                                      • +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
                                            Серёжа, без обид, но идея оказалась настолько интересной, что я продолжил копаться в суровых командных скриптах 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
                                              Во-во. Еще хорошо бы хорошо добавить поддержку почтовых клиентов и всё!)

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

                                            Самое читаемое