Батники против эксплойтов (версия для Windows XP)

Как-то мне на глаза попалась публикация на Хабре — «Батники против эксплойтов». В ней рассказывалось, как одним движением запускать браузер из под специально созданного юзера, у которого нет прав запускать приложения. По замыслу автора это может защитить от эксплойтов и Drive-by атак.

Эта, несомненно полезная статья, имела один недостаток — она была написана для Windows 7 (о чём в ней честно было написано).

После того как Windows XP сняли с поддержки — у меня остался нетбук с хрюшей и идея усилить безопасность системы, адаптировав решение, показалась вполне естественной.

Я надел на себя волшебную шляпу и кастанул биллгейтса 10-го уровня


Попытки адаптировать батник под имеющуюся русскую хрюшу выявили следующие недостатки в коде:
  • Автор уверен, что все профайлы пользователей лежат в папке c:\users;
  • Автор уверен, что папка рабочего стола всегда называется Desktop;
  • Автор постоянно забывает, что системные папки могут содержать пробелы, поэтому очень часто забывает кавычить пути;
  • Автор видимо не знает как из батника получить директорию где лежат профайлы;
  • Автор не учёл, что в русской винде бат файлы выполняются в 866-й кодовой странице, а VBS скрипты — в 1251-й. Поэтому русские буквы из батников превращаются в тыкву в скриптах.


После доработки у меня получился следующий код батника:

ВНИМАНИЕ! Код будет работать только на WinXP. Для семерки — смотрите исходную статью.
::Writed by: Sergey.Golovanov at kaspersky.com for habrahabr.ru (enchanted by Alexey Girin — vk.com/alexey.girin)
@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
cscript "%Programfiles%\Windows Resource Kits\Tools\XCACLS.vbs" "%USERPROFILE%\..\%safeusername%\" /D %safeusername%:(OI)(IO)(WDAC,WO,X)

::Setup browsers::
:FindOpera
if exist "%APPDATA%\Opera\" xcopy /E /I /C /Y /Q /H /R "%APPDATA%\Opera\*" "%USERPROFILE%\..\%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\*" "%USERPROFILE%\..\%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\*" "%USERPROFILE%\..\%safeusername%\AppData\Local\Google\Chrome\"
::for /r "%USERPROFILE%\..\%safeusername%\AppData\Local\Google\Chrome\" %%C in (*.exe) do icacls %%C /grant %safeusername%:(X)
::for /r "%USERPROFILE%\..\%safeusername%\AppData\Local\Google\Chrome\" %%C in (*.dll) do icacls %%C /grant %safeusername%:(X)
::echo Chrome^|"%USERPROFILE%\..\%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\*" "%USERPROFILE%\..\%safeusername%\Favorites\"
xcopy /E /I /C /Y /Q /H /R "%LOCALAPPDATA%\Microsoft\Internet Explorer\*" "%USERPROFILE%\..\%safeusername%\AppData\Local\Microsoft\Internet Explorer\"
xcopy /E /I /C /Y /Q /H /R "%LOCALAPPDATA%\Microsoft\Windows\History\*" "%USERPROFILE%\..\%safeusername%\AppData\Local\Windows\History\"
xcopy /E /I /C /Y /Q /H /R "%APPDATA%\Roaming\Microsoft\Windows\Cookies\*" "%USERPROFILE%\..\%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%\ђ ЎзЁ бв«\SafeLinks"
"%Programfiles%\Windows Resource Kits\Tools\linkd.exe" /d "%USERPROFILE%\Downloads\Browser" "%USERPROFILE%\..\%safeusername%\Downloads"
mkdir "%USERPROFILE%\ђ ЎзЁ бв«\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%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo sLinkFile = "%USERPROFILE%\Рабочий стол\SafeLinks\%%A_saferun.LNK" >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo Set oLink = oWS.CreateShortcut^(sLinkFile^) >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo oLink.TargetPath = "%%B\%%A.vbs" >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo oLink.IconLocation = "%%B\%%A.exe,0" >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo oLink.WorkingDirectory = "%%B\" >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
echo oLink.Save >> "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\%%A.lnk.vbs"
)
for /r "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\" %%p in (*.vbs) do cscript %%p
for /r "%USERPROFILE%\ђ ЎзЁ бв«\SafeLinks\" %%v in (*.vbs) do del %%v
:: Open Explorer with links::
explorer "%USERPROFILE%\ђ ЎзЁ бв«\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%\ђ ЎзЁ бв«\SafeLinks" >> uninstall_%~n0.bat
echo rd /s /q "%USERPROFILE%\..\%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


Этот текст надо скопировать в notepad, сохранить его как SaveRun.bat.

ВНИМАНИЕ! Если запускать планируется на английской винде, необходимо в коде реплейснуть все подстроки "ђ ЎзЁ бв«" и «Рабочий стол» (без кавычек) на подстроку Desktop (ну, или на то название директории, где у вас лежит десктоп). Иначе — данный код будет корректно работать только в русской винде.

Кроме этого, необходимо скачать и поставить на машину:

1. Windows Server 2003 Resource Kit Tools;
2. Extended Change Access Control List Tool (Xcacls).

ВНИМАНИЕ! И то и другое надо поставить в дефолтную директорию, куда ставится ресурс кит — %Programfiles%\Windows Resource Kits\Tools\

Или поправьте эту строку в коде.

Теперь — можно запускать.

Система работает очень просто. Она:
  1. Создаёт рандомного юзера, у которого нет прав запускать приложения из профайла, куда по замыслу автора все вирусы будут стремиться попасть, что бы оттуда запуститься;
  2. Сканирует дефолтные пути, по которыми ставятся все основные браузеры — лиса, хром, ослик, опера, и если находит их — создаёт для каждого браузера VBS скрипт, который (если его запустить) генерит линк на запуск браузера. Если этот линк потом запустить — браузер запустится с правами того кастрированного юзера;
  3. Создаёт на рабочем столе папку SafeLinks, куда кладёт все VBS скрипты.
    Туда же будут попадать сгенерённые этими скриптами линки на запуск браузеров;
  4. Создаёт файл uninstall_%~n0.bat рядом с исходным батником. Этот батник (если его запустить) удалит и кастрированного пользователя и скрипты и директорию. И самого себя тоже.


Всё это хозяйство было мною опробовано на русской винде с установленным Firefox 33.0.

Работает.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 8

    +6
    Все хорошо, но Вы перечислили не «недостатки в коде» у Голованова, а хардкод под современные ОС. Ему русский язык в путях был не нужен, вот он кодировки и не использовал… с большинством остальных «недостатков» аналогично. Вам пришлось скрипт перепиливать под более старую ОС, потому и пришлось это переделывать и учитывать.

    Могли бы сделать глобальный скрипт — проверка ОСи и далее уже выполняется нужный код, а то для ХР использовать этот, для 7 — тот, для английской системы что-то править… можно все это учесть в одном большом скрипте (чек версии системы, языка).
      0
      Глобальный скрипт сделать можно, но это усложнит и раздует его. Лучше оставить как есть, что бы проще было разобраться замодифицировать руками, если потребуется. Что собственно я и сделал.
      0
      а что мешает тоже самое сделать красиво и без консоли на автоите например? :)
        0
        Голованов может из чисто спортивного интереса применил батник с созданием из него vbs, а Алексей продолжил славную традицию. А то по такой логике можно было на любом другом языке писать :)
      • UFO just landed and posted this here
          +1
          Я не совсем понял чего хотел добиться автор статьи и какова её целевая аудитория.
          1. Домохозяйки вряд ли будут этим пользоваться
          2. Защита браузера от подобных атак уже несколько лет внедрена в различные антивирусы (браузер, по сути, запускается в некоей песочнице, экспериментировал с этим используя антивирус Касперского года 3-4 назад).
          3. люди с шапочкой из фольги (вроде меня) не используют этот велосипед, а используют виртуальную машину для сёрфинга, ревертят её к снапшоту после каждого использования
          4. WinXP, честно говоря, довольно старая операционка. Могу предположить, что где-то в мире существуют люди, которые используют старые слабые (по нынешним меркам) ПЭВМ (мощности которых не хватает для использования виртуальных машин) и не имеют возможности купить новый ПЭВМ (и Windows). Но имеют желание защититься от вирусов. Для них это будет интересно.
            0
            Целевая статья — точно не домохозяйки (я вообще не уверен, что домохозяйки заходят на хабр :-)).
            Хрюша у меня стоит на нетбуке Samsung N150, который ничего кроме неё не тянет. И антивирус тоже, кстати.

            Я знаю, что обычно старые машины используются в бюджетных учереждениях — школы, универы. Для них это может оказаться полезным, на мой взгляд.
            0
            А записи в реестре о созданных юзерах у вас чистятся?

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

            Only users with full accounts can post comments. Log in, please.