LaunchChecker

паук

RAID-массив
Пользователь
Регистрация
03.07.2011
Сообщения
98
Реакции
1
Во-первых всем добрый день. Я тут новенький. Постараюсь оправдать оказанное мне доверие.

Хочу предложить к обсуждения следующую тему, прочитав про Offline Checker, являющийся чем-то вспомогательным при разработке/использовании крипторов, вспомнил о своей недавней разработке инструмента из этой же области.

Назрела необходимость проверять криптованный файл на запуск на различных операционках. В моем распояжении есть достаточно мощьный сервер, на нем 7 виртуалок(XPx86 SP2, XPx64 SP2, XPx86 SP3, Vista x86, Vista x64, 7 x86, 7 x64). Все это добро крутится на VmWare ESXi
Работающие на "заказчика" саппорты, раз в 15 минут (время автоматического рекрипта), проверяли файл на запуск ручками. Я как человек ленивый по натуре не терплю монотонной работы взялся все это дело оптимизировать.

Используя VIX API был написан следующий скриптик
Код:
@echo off
set URL=https://SERVER_IP/sdk
set API=http://CP_IP/launchcheck/

rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP3 x86 Clean/Windows XP SP3 x86 Clean.vmx"
set username=user
set preambula=a
set OS=XP SP3 x86
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP2 x64 Clean/Windows XP SP2 x64 Clean.vmx"
set username=user
set preambula=b
set OS=XP Sp2 x64
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP2 x86 Clean/Windows XP SP2 x86 Clean.vmx"
set username=user
set preambula=c
set OS=XP sp2 x86
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Seven SP1 x64 Clean/Windows Seven SP1 x64 Clean.vmx"
set username=user
set preambula=d
set OS=Win7 x64
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Seven SP1 x86 Clean/Windows Seven SP1 x86 Clean.vmx"
set username=Win7
set preambula=e
set OS=Win7 x86
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Vista SP1 x64 Clean/Windows Vista SP1 x64 Clean.vmx"
set username=user
set preambula=f
set OS=Vista x64
	call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Vista SP1 x86 Clean/Windows Vista SP1 x86 Clean.vmx"
set username=user
set preambula=g
set OS=Vista x86
	call :Check
rem ------------------------------------------------------------------------------------------

pause
:Check
	vmrun -T esx -h %URL% -u root -p PASSWORD start %VirtPath% nogui

	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 deleteFileInGuest %VirtPath% c:\work\CheckThemAll.exe
	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 deleteFileInGuest %VirtPath% c:\work\wally.ini
	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% wally.ini c:\work\wally.ini
	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% CheckThemAll.exe c:\work\CheckThemAll.exe

	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% del.bat c:\work\del.bat

	vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 runProgramInGuest %VirtPath% -interactive -activeWindow c:\work\del.bat > NUL

	:mark
  vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 runProgramInGuest %VirtPath% -interactive -activeWindow c:\work\CheckThemAll.exe "c:\work\wally.ini" > NUL
  if %ERRORLEVEL% LSS 0 goto mark:
  set return=%ERRORLEVEL%
  @echo on
  	@echo %OS%: %return%
  @echo off
  
  start system\wget.exe  -q --spider %API%%preambula%%return%
  start vmrun -T esx -h %URL% -u root -p PASSWORD stop %VirtPath%  soft
exit /b

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

К чему это все... Недавно на check4me проводили опрос, нужна ли нам фича "тест на запуск". Большая часть опрашиваемых ответила положительно. Итак, если допилить к нашему лаунчеру АПИ, позволяющее заказчику указать признаки успешной установки, мы получим универсальную систему.
Есть коненчо и сложные моменты. Нужно как то почистить систему от "зловреда" после проверки и тут 3 пути:
- Снапшоты (недстаток: долго делаются, долго откатываются пордяка 20 секнуд на каждую машину),
- Софт типа DeepFreeze, ShadowUser, откатывающий все изменения в системе после перезарузки (недстаток: некоторый софт нужно проверять на работоспособность именно после перезапуска)
- АПИ, позволяющее в контрольной панели указать заказчику удалить свой софт после проверки (недстаток: недобропорядочные пользователи могут специально указать неверные значения чтобы остаться в системе)

Все это можно реализовать так же как и Offline Checker в рамках этого проэкта. Так же легко прикрутить и чекер не на голых машинах а на компьютерах с антивирусами. Реализованно так же, за исключением добавления скриптов запускающий софт в доверенные у песочниц.

P.S. Сам "запускатель" легко реализуется и на СИ
Код:
#define CONNTYPE VIX_SERVICEPROVIDER_VMWARE_VI_SERVER
#define HOSTNAME "https://VMWARE_IP/sdk"
#define HOSTPORT 443
#define USERNAME "root"
#define PASSWORD "PASSWORD"

#define  VMPOWEROPTIONS VIX_VMPOWEROP_NORMAL

#define VMXPATH_INFO "[Default Datastore] Windows XP SP3 x86 + Essentials/Windows XP SP3 x86 + Essentials.vmx"



static char *progName;

////////////////////////////////////////////////////////////////////////////////
int main(int argc, char **argv)
{
    VixError err;
    char *vmxPath;

    VixHandle hostHandle = VIX_INVALID_HANDLE;
    VixHandle jobHandle = VIX_INVALID_HANDLE;
    VixHandle vmHandle = VIX_INVALID_HANDLE;
	
    progName = argv[0];
    vmxPath = VMXPATH_INFO;


    jobHandle = VixHost_Connect(VIX_API_VERSION,CONNTYPE,HOSTNAME,HOSTPORT,USERNAME,PASSWORD,0,VIX_INVALID_HANDLE,NULL,NULL);
    err = VixJob_Wait(jobHandle, VIX_PROPERTY_JOB_RESULT_HANDLE, &hostHandle,VIX_PROPERTY_NONE);
    if (VIX_FAILED(err)) 
	{
        goto abort;
    }

	Vix_ReleaseHandle(jobHandle);
  
  	jobHandle = VixVM_Open(hostHandle,vmxPath,NULL,NULL);
    
	err = VixJob_Wait(jobHandle, VIX_PROPERTY_JOB_RESULT_HANDLE, &vmHandle,VIX_PROPERTY_NONE);
    if (VIX_FAILED(err)) 
	{
        goto abort;
    }

	Vix_ReleaseHandle(jobHandle);
    
  	jobHandle = VixVM_PowerOn(vmHandle,VMPOWEROPTIONS,VIX_INVALID_HANDLE,NULL,NULL);
    
	err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
    if (VIX_FAILED(err)) 
	{
        goto abort;
    }

	Vix_ReleaseHandle(jobHandle);
    
  	jobHandle = VixVM_PowerOff(vmHandle,VIX_VMPOWEROP_NORMAL,NULL,NULL);
	
	err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
	if (VIX_FAILED(err)) 
	{
        goto abort;
    }

abort:
    Vix_ReleaseHandle(jobHandle);
    Vix_ReleaseHandle(vmHandle);

    VixHost_Disconnect(hostHandle);

    return 0;
}
 
Offline Checker слишком примитивен для этого, у нас в команде работает тестер - он только и занимается что делает тесты, но он не успевает, говорит что с ноутом срать даже ходит...
паук пишет:
Недавно на check4me проводили опрос, нужна ли нам фича "тест на запуск".
То, что это востребовано, даже можно и не обсуждать, но некоторые заказы требуют обязательной "ручной" проверки (к примеру, тест руткита)
паук пишет:
проверяли файл на запуск ручками.
Я сейчас по-другой схеме стал "работать", говорю заказчику, что тестер занят (а он реально занят) и неизвестно когда освободицца, но есть вариант тебе самому все проверить, очень большой процент что заказчик согласится и еще спасибо потом скажет + премию накинет за "обучение" юзать VM
Сами устанавливают разные системы для теста, нужный софт, проверяют после перезагрузки работоспособность и подробненько делают отчет, далее читаю этот отчет и если вижу проблемы, скидываю этот отчет тестеру и уже тогда, он реально занимается поиском причин проблем и их возможных вариантов устранения... (а так хрен за ними успешь...)
Короче по этой схеме все довольны... единственное, что эта схема подходит "только" под мой сервис, так как там такой массовки нет (если сравнивать с криптсервисами)...
Да и вообще сейчас если взять, то тестеры (особенно шарящие) на вес золота, ИМХО.
паук пишет:
XPx86 SP2, XPx86 SP3
Вот интересно, а нужна ли.. может одной XPx86 SP3 достаточно будет для тестов.
Трудно себе представить криптор, который криптует файл, после чего этот файл будет работать на XPx86 SP2, а на XPx86 SP3 - нет, при условии, что то, что криптуется - работает и на XPx86 SP2 и на XPx86 SP3
Да и SP2 вроде как уже официально пиздец :) да и большинство легального софта требует установки SP3...
 
может одной XPx86 SP3 достаточно будет для тестов.
Как показывает практика - нужна. Крипторы часто используют для антиэмуляции совершенно непредсказуемые API из таких уголков /windows/system32 что даже на одном апдейте одного и того же СП пашет а на другом нет.

Я ж не агитирую что-то создавать. У нас 1 файл и нам выгодно было это автоматизировать. Пускать в массы такой серис трудно, но почему бы не обсудить ньюансы :)
 
Ну наверное буткит так не потестируешь... ДА и малварь с зиродеями наверное тоже. Как на счет инжекта?! Контролируеся все созданныей файлы в системе после запуска или только те, что созданны тестируемымы процессом. Имхо это все ненадежно. Хотя ничего не мешает использовать подобную систему, в большинстве случаев она спасет, а раз в сутки скажем откатыватсья на снапшот. Вопрос еще вотв чем. Сработает ли на ней софт, который защищен от запуска в сэндбоксах.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх