ورود

View Full Version : سوال: تزریق برنامه یا...



MIDOSE
یک شنبه 17 خرداد 1388, 19:17 عصر
در این بخش می‌توانید درباره امنیت در نرم افزار، راه‌های بهبود آن، و روش‌های بهینه سازی و جلوگیری از تخریب آن بحث کنید.


اول بگم دلیلی که این جا تایپیک را زدم راه های بهبود است. مدتی است که این موضوع برام جالب شده و خواستم در موردش بدون اما سوال:
برنامه های حساسی که حتی نباید یک لحظه متوقف بشوند ،برای بهبود این گونه برنامه ها یا اضافه نمودن امکانات به انها در حین اجرا از چه روشی استفاده می شود ایا برای همه ی زبان های برنامه نویسی می تونیم این روش را بکار بگیریم (شاید بشه گفت تزریق کرد)
با تشکر.

Nima NT
یک شنبه 17 خرداد 1388, 20:44 عصر
این کار منطقی نیست , مثلا" اگر میخواهید به یه Anti Virus گزینه Anti Spy رو اضافه کنید خوب نمیشه با تزریق کد در پروسه استفاده کرد !
تزریق کد در پروسه 30 % در کارهای مثبت مثل برنامه های امنیتی و فایروال ها کاربرد داره و 70 % در روتکیت و برنامه های مخرب.
من از سوال شما این رو برداشت کردم , اگر بد متوجه شدم لطفا" بیشتر توضیح دهید.

MIDOSE
دوشنبه 18 خرداد 1388, 02:53 صبح
ایا روشی هست که بشه در حین اجرای برنامه ای ، اون را بدون توقف ارتقا داد یا اصلاح نمود
بازم ممنون به خاطر جوابت

Nima NT
دوشنبه 18 خرداد 1388, 20:30 عصر
فکر نمیکنم بشه , اگر کسی راه حلی داره منم ممنون میشم بیان کنه.

MohsenTi
سه شنبه 19 خرداد 1388, 01:38 صبح
دوست عزیز این کاری رو که می خواید انجام بدید امکان پزیره به دو صورت
1- استفاده از پلاگین ها
2- تزریق کد به آدرس هایی از برنامه که خالی باشه که به مهارت زیادی نیاز داره
و البته متقداری از کارو api های ویندوز انجام میدن مثل تابع WriteProcessMemory
می تونی از MSDN استفاده کنی تو اون در مورد این توابع و توابع مشابه توضیح داده

Nima NT
سه شنبه 19 خرداد 1388, 01:59 صبح
1- استفاده از پلاگین ها
این حرف شما رو قبول دارم ولی در مواردی خاص

- تزریق کد به آدرس هایی از برنامه که خالی باشه که به مهارت زیادی نیاز داره
این کار عملا" غیرممکنه , چون وقتی شما میای و تو آدرس X اطلاعات رو مینویسی , بعد باید برنامه اون اطلاعات رو بتونه بخونه یا اجرا کنه , پس باید مقادیری رو در آدرسهای اون تغییر بدی , این کار پایداری برنامه رو پائین میاره و حتی میتونه به متوقف شدن اجرای برنامه منجر بشه که هدف هم این نیست.

MIDOSE
سه شنبه 19 خرداد 1388, 03:27 صبح
این حرف شما رو قبول دارم ولی در مواردی خاص
مثال می زنی؟؟:لبخند:

HadiDelphi
سه شنبه 19 خرداد 1388, 09:54 صبح
این کار عملا" غیرممکنه , چون وقتی شما میای و تو آدرس X اطلاعات رو مینویسی , بعد باید برنامه اون اطلاعات رو بتونه بخونه یا اجرا کنه , پس باید مقادیری رو در آدرسهای اون تغییر بدی , این کار پایداری برنامه رو پائین میاره و حتی میتونه به متوقف شدن اجرای برنامه منجر بشه که هدف هم این نیست.

دقیقا هم عملی
بله , بعضی از برنامه ها که نباید حتی برای یک لحظه هم متوقف نشن به همین صورت آپدیت میشن , یعنی کد های جدید به برنامه در حال اجرا تزریق میشن
مثلا در سرور ها .
در سرورهای که امکانت ریست کرد اونها اصلا نیست ویندوز شودن رو به همین طریق آپدیت میکنن یا سایر برنامه هاشونو

Nima NT
سه شنبه 19 خرداد 1388, 14:50 عصر
در سرورهای که امکانت ریست کرد اونها اصلا نیست ویندوز شودن رو به همین طریق آپدیت میکنن یا سایر برنامه هاشونو در صورتی که بخوای قسمتی رو که قبلا" وجود داشته رو به روز کنی بله میشه ولی زمانی که هدف اضافه کردن امکانات جدید باشه , تزریق راه حل منطقی نیست.
تا حالا در ویندوز ویستا تزریق انجام دادید ؟ ویندوز هر گونه تزریق رو بلوکه میکنه.
درمورد تزریق کد مستقیم هم اگر شما از API های UnDocumented بخوای استفاده کنی , باید اونها رو در حافظه پروسه Target لود کنی و این میتونه اول Performance و دوم پایداری رو کاهش بده.
در ویندوز هم نمونه بارز اینه که اگر قرار باشه سرویس Svhost به روز بشه بدون توقف اون نمیشه چیزی رو در حافظه اون نوشت , علتش هم سیاست های مایکروسافت هست ( با End Task کردنش میفهمید چرا ؟؟؟؟ :لبخند: )
فایروالها هم از تزریق استفاده میکنن ولی وقتی قرار باشه آپدیت به صورت App Update نصب بشه حتما" برنامه رو دوباره راه اندازی میکنن.

مثال می زنی؟؟:لبخند:مثل دیباگر معروف OllyDBG که خیلی از قابلیتهای اساسی توسط Plugin به اون اضافه میشه.

HadiDelphi
سه شنبه 19 خرداد 1388, 17:26 عصر
توی ویندوز ویستا هم میتونید تزریق کنید فقط باید اجازاه دسترسی داشته باشید
اگر ویندوز هر نوع تزریقی رو بلوکه می کرد در آن صورت اکثر فایروال ها روی ویندوز ویستا از کار می افتادن
مثلا اگر گفته شما درست باشه ZoneAlarm نباید روی ویندوز ویستا کار کنه , که اینطوری نیست

در ضمن میتونید بگید API ها UnDocumented چیه ؟

HadiDelphi
سه شنبه 19 خرداد 1388, 17:30 عصر
در صورتی که بخوای قسمتی رو که قبلا" وجود داشته رو به روز کنی بله میشه ولی زمانی که هدف اضافه کردن امکانات جدید باشه , تزریق راه حل منطقی نیست.


فرض کنید وقتی شما به هیچ وجه نتونید یه برنامه یا یه سرور رو ریست کنید تنها راه برای آپدیت همون تزریق هستش یعنی راه دیگری وجود ندارد پس در این حالت نمیتونید بگید این راه منطقی هست یا نه .

Nima NT
سه شنبه 19 خرداد 1388, 19:43 عصر
فرض کنید وقتی شما به هیچ وجه نتونید یه برنامه یا یه سرور رو ریست کنید تنها راه برای آپدیت همون تزریق هستش یعنی راه دیگری وجود ندارد پس در این حالت نمیتونید بگید این راه منطقی هست یا نه .
آخه شما داری بحث رو میبری روی شبکه , تو شبکه کی میگه سرور رو ریست نمیکنن , مثلا" شما چطوری میتونید سرور لینوکس رو که با CPanle با ProAdmin کار میکنه آپدیت کنید ؟
برای اینطوری کارهای حساس برنامه دوباره راه اندازی میشه و در راه اندازی دوم به روز میشه.
میگم روش غیر منطقی هست چون هیچ شرکت تولید کننده آنتی ویروس از این شیوه برای آپدیت استفاده نمیکنه , هیچ نرم افزار امنیتی از این روش استفاده نمیکنه , شما وقتی Engine ضد ویروس Kasper رو به روز میکنی آیا خودش رو دوباره راه اندازی نمیکنه , اگر قرار باشه ما 1000 بار آپدیت نصب کنیم ( به صورت تزریق ) میدونید چه سرباری به سیستم تحمیل میشه. به همین دلیل میگم روش غیر منظقی هست.

HadiDelphi
چهارشنبه 20 خرداد 1388, 19:27 عصر
بله در مورد آپدیت Engine کسپر برنامه ریست میشه
ولی در مورد برنامه های حساسی که رو شبکه ها کار میکنن این صادق نیست مثلا سروری که سایت من روش هست اگه به History مراجعه بکنی میبینی که در یک روز احتمالا چند بار آپ میشه در صورتی که سرور رو هر روز چندبار ریست نمیکنن

HadiDelphi
چهارشنبه 20 خرداد 1388, 19:30 عصر
در ضمن با تزریق , بار اضافی به سیستم تحمیل نمیشه اگر هم بشه این بار مساوی با همون مقداری خواهد بود که با آپدیت معمولی تحمیل میشه و نه بیشتر

Nima NT
چهارشنبه 20 خرداد 1388, 19:32 عصر
ولی در مورد برنامه های حساسی که رو شبکه ها کار میکنن این صادق نیست مثلا سروری که سایت من روش هست اگه به History مراجعه بکنی میبینی که در یک روز احتمالا چند بار آپ میشه در صورتی که سرور رو هر روز چندبار ریست نمیکنن
این به خاطر این هست که سرویس فعال رو خودش متوقف میکنه ؛ مثلا" در به روز رسانی Windows Installer وقتی شما میخوای از نسخه 3 به نسخه 4 مهاجرت کنی , برنامه نصب ابتدا سرویس رو متوقف میکنه و بعد به روز رسانی انجام میشه.
خوب در سرورهای ویندوز هم این صادق هست , وقتی شما داری Context سایت خودت رو به روز میکنی , کسی نمیتونه از سایت شما استفاده کنه چون سرور Session ها رو مینده تا اطلاعات رو به روز کنه , اگر میتونست با تزیق کد اطلاعات رو به روز کنه خوب من هم میتونستم از سایت شما همزمان با به روز رسانی استفاده کنم.
شاید بگید که Session ها موقتی هستن ولی منظور من Session ها خود سرور هست نه کاربری که داره از سایت بازدید میکنه.

Nima NT
چهارشنبه 20 خرداد 1388, 19:40 عصر
علاوه اگر ما سالها تمام به روز رسانی ها یا اکثرشون رو به صورت تزریق انجام بدیم اگر یه هکر از خدا بی خبر سرور رو .... !؟!
اون موقع رسما" خاک بر سرمون شده.:لبخند:

HadiDelphi
چهارشنبه 20 خرداد 1388, 19:45 عصر
این به خاطر این هست که سرویس فعال رو خودش متوقف میکنه ؛ مثلا" در به روز رسانی Windows Installer وقتی شما میخوای از نسخه 3 به نسخه 4 مهاجرت کنی , برنامه نصب ابتدا سرویس رو متوقف میکنه و بعد به روز رسانی انجام میشه.
خوب در سرورهای ویندوز هم این صادق هست , وقتی شما داری Context سایت خودت رو به روز میکنی , کسی نمیتونه از سایت شما استفاده کنه چون سرور Session ها رو مینده تا اطلاعات رو به روز کنه , اگر میتونست با تزیق کد اطلاعات رو به روز کنه خوب من هم میتونستم از سایت شما همزمان با به روز رسانی استفاده کنم.
شاید بگید که Session ها موقتی هستن ولی منظور من Session ها خود سرور هست نه کاربری که داره از سایت بازدید میکنه.

من منظورم CPanel سایت بود نه خود سایت
شما میتونید هنگام آپ کردن CPanel سایت (که رو سرور هست) از سایت هم استفاده کنید

Nima NT
چهارشنبه 20 خرداد 1388, 19:49 عصر
من منظورم CPanel سایت بود نه خود سایت
شما میتونید هنگام آپ کردن CPanel سایت (که رو سرور هست) از سایت هم استفاده کنید
آپدیت اگر Critical باشه , نمیشه , این رو مطمئن هستم , اگر چنین چیزی برای لینوکس تا حالا مشاهده نشده به خاطر این هست که سرورهای لینوکس کمتر تحت تهدید قرار گرفتن ( نمیگم نبوده ولی کم بوده ) , ولی رو سرورهای ویندوز این مشکل هست که اگر آپدیت در وضعیت نام برده باشه , سرور برای معمولا" 1 ساعت از دسترسی خارج میشه.
اوایل سال پیش برای 2 ساعت سایت مایکروسافت خوابید و همه فکر کردن هک شده , نگو داره به روز رسانی میکنه.

MIDOSE
پنج شنبه 21 خرداد 1388, 01:07 صبح
خب شما در مورد سایت را گفتید اگه برنامه مثلن کنترل خطوط هوایی باشه یا کنترل کننده ی دستگاه های حساس باشه(که حتی نشه یک لحظه خاموشش کرد یا از خط خارج بشه) چی؟می شه تزریق را انجام داد و پلاگین ها را اضافه کرد برای روز مبادا تا این که اگه هک هم شد(یا ریست شد) پلاگین ها جایگزین بشند، ایا این طوری می شه گفت بهتره؟یا اصلن راه حلی نیست.

Nima NT
پنج شنبه 21 خرداد 1388, 02:23 صبح
خب شما در مورد سایت را گفتید اگه برنامه مثلن کنترل خطوط هوایی باشه یا کنترل کننده ی دستگاه های حساس باشه(که حتی نشه یک لحظه خاموشش کرد یا از خط خارج بشه) چی؟می شه تزریق را انجام داد و پلاگین ها را اضافه کرد برای روز مبادا تا این که اگه هک هم شد(یا ریست شد) پلاگین ها جایگزین بشند، ایا این طوری می شه گفت بهتره؟یا اصلن راه حلی نیست.
در این گونه موارد استفاده از پلاگین خیلی بهتره , چون وقتی شما پلاگین رو اضافه میکنی میتونی از امکانات اون استفاده بکنی و مشکل از دست دادن به روز رسانی ها رو نداشته باشی.
البته باید در برنامه میزبان سیستم به نحوی طراحی بشه که در موقعی که پلاگین جدید به سیستم اضافه شد خودکار اون رو شناسایی کنه و نیازی به راه اندازی دوباره نباشه.