View Full Version : امنیت ترد های برنامه
Go_On_Friend
دوشنبه 20 آبان 1392, 17:11 عصر
با سلام به همه اساتید .
من در برنامه ام چند ترد (Thread) دارم . (CreateThread)
همچنین یک دی ال ال را به یک برنامه اینجک کردم (CreateRemoteThread)
از آنجا که با CreateToolhelp32Snapshot میتوان به ترد های برنامه دسترسی داشت و آنها را متوقف کرد .
سوال من اینه : بهترین روش جلوگیری از دسترسی به ترد های ایجاد شده توسط یک برنامه دیگر چیست ؟!!
به بیان ساده تر : نمیخوام برنامه دیگری بتواند به ترد های برنامه من دسترسی داشته باشد .
با تشکر .
بهروز عباسی
دوشنبه 20 آبان 1392, 19:08 عصر
درود
بهتر بود در بخش امنیت مطرح می کردی ولی :
همچنین یک دی ال ال را به یک برنامه اینجک کردن (CreateRemoteThread)
درست متوجه منظورت نشدم .
یه راه معمول؛ اینه که توابعی مثل "CreateRemoteThread" و یا توابع مکمل (در Injection :شیطان:) مثل VirtualAllocEx و WriteProcessMemory یا GetProcAddress و ... (ظاهراً خودت میدونی) رو توی برنامه خودت Hook کنی البته Global Hook و هر وقت از توابع استفاده شد اونو چک کنی و ببینی به برنامه شما ربطی داره یا نه !!
یا در ساده ترین حالت -خانواده- OpenProcess رو Hook کنی تا اجازه گرفتن Handle برنامت رو به کسی ندی !
سوال من اینه : بهترین روش جلوگیری از دسترسی به ترد های ایجاد شده توسط یک برنامه دیگر چیست ؟!!
بازم
باید -خانواده- OpenProcess رو Hook کنی تا اجازه گرفتن Handle برنامت رو به کسی ندی ! اینطوری دیگه نمیتونن لیست ترد ها رو به دست بیارن یا اینکه توابع مربوط به ترد ها رو هوک کن.
* این روش ها در ساده ترین حالت هستن.
شب خوش
Go_On_Friend
دوشنبه 20 آبان 1392, 19:49 عصر
ممنون جناب عباسی از پاسختون . در بخش امنیت به نتیجه نرسیدم و مجبور شدم بیام اینجا .
شاید منطورم رو از اینجکت دی ال ال بد گفتم . کد برنامه رو میزارم .
const char* strDllPath = "MyDll.dll" ;
LPVOID lpRemoteString;
//
if( (lpRemoteString = VirtualAllocEx( m_PI.hProcess, NULL, sizeof( strDllPath ),
MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE )) == NULL )
{
TranslateError(VIRTUAL_ALLOC , NULL ) ;
return false;
}
//
if( !WriteProcessMemory( m_PI.hProcess, lpRemoteString, strDllPath, strlen( strDllPath ), NULL ) )
{
TranslateError( WRITE_PROCESS_MEMORY , NULL );
return false;
}
//
if( (m_hRemoteInjectThread = CreateRemoteThread( m_PI.hProcess, NULL, NULL,(LPTHREAD_START_ROUTINE)LoadLibraryA, lpRemoteString, NULL, NULL )) == NULL )
{
TranslateError( CREATE_REMOTE_THREAD , NULL );
return false;
}
//
return true;
.
.
.
.
بهترین روش ها چیا هستند ؟
با تشکر
بهروز عباسی
دوشنبه 20 آبان 1392, 20:24 عصر
یادم رفت بگم : به برنامه نویس خوش آمدی:لبخند:
شاید منطورم رو از اینجکت دی ال ال بد گفتم . کد برنامه رو میزارم .:متعجب:
فکر کنم منظوذت این بود که می خوای اینجکت کنی وجلوی بسته شدن ترد اینجکت کننده رو بگیری درسته ؟
Go_On_Friend
دوشنبه 20 آبان 1392, 20:45 عصر
ممنون . امیدوارم اینجا اساتید و دوستان خوبی پیدا کنم .
ببینید یک برنامه(هدف) هست که من دی ال ال رو در اون اجرا میکنم و یک ترد داخلش میسازم و کارش برسی وجود برنامه من هست . و همچنین در برنامه خودم هم وجود اون ترد رو برسی میکنم .
مشکل اصلی اینجاست که در صورتی که این تردهای امنیتی شناسایی بشه و متوقف بشه ( suspend) برنامه از نظر امنیتی به مشکل بزرگی برخورد میکنه .
راه حلی که به فعلا دارم بالا بردن اولویت ترد ها و سرعت برسی ترد ها توسط یکدیگر است . اما چون عملیات های پردازش زیادی انجام میشود در کارکرد سیستم اخلال بوجود میاد .
ممنون میشم راه حل های مختلفی ارائه بدید که برسی کنم ...
بهروز عباسی
دوشنبه 20 آبان 1392, 21:05 عصر
مشکل اصلی اینجاست که در صورتی که این تردهای امنیتی شناسایی بشه و متوقف بشه ( suspend) برنامه از نظر امنیتی به مشکل بزرگی برخورد میکنه .
خب، شما با هوک کردن توابع مربوط به ترد ها میتونی این کارو بکنی . در مورد هوک های گلوبال تحقیق کن
البته اگه بتونی Kernel mode hook انجام بدی خیلی بهتره.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.