PDA

View Full Version : تک کاربره بودن نرم افزار



oxygenws
سه شنبه 19 اردیبهشت 1385, 11:41 صبح
چطور میشه یک نرم افزار رو فقط روی یک (یا چند سیستم خاص) سیستم اجرا کرد به طوری که به راحتی کرک هم نشه؟!

خیلی بد توضیح دادم، نه؟!

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

ترجیح داده میشه که همه چی از راه دور، و از طریق نرم افزار (منظورم اینه که سخت افزاری نباشه) انجام بشه و این امنیت اینطوری تامین بشه.

ورود به سیستم با نام کاربری و رمز عبور روی بستر امن SSL انجام خواهد شد.

ممنونم.

reza_rad
سه شنبه 19 اردیبهشت 1385, 11:44 صبح
با session number چی؟ نمیشه؟

oxygenws
سه شنبه 19 اردیبهشت 1385, 11:59 صبح
منظورت از session number چیه؟
مشکل "بستن دسترسی کاربران دور" نیست، مشکل من اینه که "کاربران معتبر، از **سیستم** های معتبر باید بتونند لاگین کنند"

mzjahromi
سه شنبه 19 اردیبهشت 1385, 12:02 عصر
به نظر نمی رسه راهی غیر از قفل سخت افزاری داشته باشید.

reza_rad
سه شنبه 19 اردیبهشت 1385, 12:21 عصر
منظورت از session number چیه؟


منظورم همون sessionID ای بود که بعد از باز شدن browser ایجاد میشه.



مشکل من اینه که "کاربران معتبر، از **سیستم** های معتبر باید بتونند لاگین کنند"


در مورد این نمی دونم! :-(

houtanal
سه شنبه 19 اردیبهشت 1385, 13:35 عصر
Client Authentication Certificates

Inprise
سه شنبه 19 اردیبهشت 1385, 13:46 عصر
به صورت مسئله ات میگن احراز و تصدیق هویت دو طرفه که PKI اصولا" به همین منظور استفاده میشه . باید در مورد نیاز و جزئیات برنامه ات و محدودیتها و پلت فرم و غیرهم به اندازه کافی توضیح بدی که بتونم یه لیست از کامپوننتهائی که باید کنار هم داشته باشی بهت بدم اما اگر فرض کنیم یه برنامه خیلی ساده وب داری با هیچ محدودیت یا قاعده پیش فرضی ، و دنبال یک روش ساده و کم هزینه میگردی میتونی از Kerberos (http://modauthkerb.sourceforge.net/) استفاده کنی (http://sl.mvps.org/docs/LinuxApacheKerberosAD.htm) .

oxygenws
سه شنبه 19 اردیبهشت 1385, 14:43 عصر
ممنونم از توضیحات همه دوستان.
نیاز:
- اپراتور باید فقط توسط یک سیستم بتواند وارد سایت شود (چیزی شبیه برنامه هایی که فقط روی یک *هارد* نصب می شوند)
- همان اپراتور، با دانستن نام کاربری و رمز عبور، از روی سیستم دیگری نتواند لاگین سیستم بشود.
- این سیستم باید روی اینترنت قرار گیرد (ترجیحا حتی مناسب برای سرعت های اتصال بسیار پایین)

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

روند پروسهء پایه، این روند می تواند تغییر کند یا تکمیل شود:
- اپراتور وارد سایت شده.
- نام کاربری و رمز عبور را وارد می کند.
- خدماتی را ارایه داده و خارج می شود.

روند پروسه هایی که باید جلویش گرفته شود:
الف:
- فردی رمز عبور را می دزدد.
- در خانه خود وارد سیستم می شود.
- خدمات به خودش(!) ارایه می کند.

ب:
- اپراتور در خانه خود وارد سیستم می شود.
- به خودش یا بقیه خدمات ارایه می کند.

همچنان سپاسگذارم.

Inprise
سه شنبه 19 اردیبهشت 1385, 15:25 عصر
این یک راه حل کامل مبتنی بر ویندوز هست :

- به یک Domain نیاز داری که کاربران معتبر رو بشناسه و مدیریت کنه ؛ این شناسائی ضمن اینکه به کاربر توجه میکنه ، میتونه ماشین رو هم محدود کنه . بعد از نصب Active Directory و فعال کردن Kerberos ، دامنه رو جوری پیکره بندی کن که برای اضافه شدن یک کاربر یا ماشین به دامنه فقط به مجوز مدیر نیاز باشه , اینجا منظور از مجوز مدیر ، مجوز مدیر دامنه هست ، نه هر ماشین .

- بهتره یک Certificate Authority هم راه بندازی ، که گواهی دیجیتالت رو خودت بسازی و به سرور و کلاینت منتقل کنی ؛ این سرویس میتونی روی همان ماشینی که Active Directory روش نصب هست نصب بشه ؛ مدیریت گواهی ها و کلیدها به عهدهء این سرویسه .

- IIS رو طوری پیکره بندی کن که از Security Authentication بصورت NTLM یا Kerberos استفاده کنه ؛ بدین ترتیب کاربران ، به هر ترتیبی که متصل شده باشند ، هنگام اتصال یا با اکانت کاربری ، یا با گواهی دیجیتالی که در ابتدای ورود به دامنه دریافت کرده اند احراز هویت میشن .

- قاعدتا" برای اینکه ماشین دیگری به دامنه اضافه بشه و بتونه از سرویسهای موجود در اون استفاده کنه باید به اکانت مدیر دامنه دسترسی داشته باشه ؛ پس محدودیت اضافه شدن ماشینهای غیر قابل اعتماد به این وسیله تامین میشه . تعریف کاربران و سطوح اختیارات هر کدام هم بصورت متمرکز روی Domain Controller انجام میشه . با تغییر Domain Security Policy ها کلیه تغییرات امنیتی روی ماشینهای عضو دامنه اعمال میشن ، اعم از محدودیتهای نرم افزاری ، کاربری ، شبکه و غیرهم . دامنه ، یعنی کلیهء ماشینهای عضو دامنه ، درست مانند اجزاء واحد یک سیستم هستند که بصورت مجتمع به کلیه عناصر اونها دسترسی مدیریتی و امنیتی متمرکز وجود داره .

- با فعال کردن IP Security Policy کلیه ترافیک بین ماشینها و دامنه توسط IPSec رمزنگاری میشه و علی القاعده نیازی به SSL نیست ، مگر اینکه بر فراز همین رمزنگاری ، باز هم برای اعای اختیارات ویژه ، به شناسائی کاربران مختلف نیاز باشه که با استفاده از SSL و Client Certification ها این مسئله هم عملی هست .

- فعال بودن Kerberos باعث میشه کلیه تراکنشهای بین ماشینها و سرویسهای موجود روی دامنه مبتنی بر Certification اون کاربر باشه ، و چون ماشین مورد استفاده کاربر ، قبل از هر چیز ، باید عضو دامنه باشه ، و این مسئله منوط به وجود اکانت مدیر دامنه و طی مراحل ورود به دامنه است ، بصورت همزمان امکان محدود کردن کاربر و ماشین وجود داره .


Security Infrastructure ویندوز بطور کامل یک پیاده سازی خوب برای PKI هست ، و صورت مسئلهء تو که هم به امنیت ترافیک و هم شناسائی و تصدیق هویت طرفین بستگی داره بطور کامل پوشش داده شده ، ولی متاسفانه برای انجام هر کدام از این مراحل باید مستندات مربوطه رو به دقت مطالعه کنی و در مجموع روند ساده ای نیست و هزینه های جدی ای برای نگهداری داره ؛ با این جامعیت ، راه حل Open Source ای که بتونه تمام ویژگیهای مورد نیاز رو بصورت مجتمع فراهم کنه نمیشناسم .

Identifier
سه شنبه 19 اردیبهشت 1385, 16:33 عصر
با عرض ادب
جناب اینپراز که تمامی توضیحات فنی را به به طور کامل و جامع ارائه کردند، و جا داره از توضیحات کاملشون تشکر کنم.

طبق نگاهی گذرا، که من روی راه حل های تشخیص هویت با استفاده از سیستم های بیومتریکی داشتم؛ اکثرا در این گونه سیستم ها (IRIS,Finger Print) یکسری توابع BAPI و بعضا؛ ActiveX در اختیار کاربر قرار میگرفت و با استفاده از آن امکان انجام عملیات Authentication و Authorization از طریق وب و یا Application فراهم میشد.

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

همانطور که در Kerberos امکان Offline Password Guessing وجود دارد، و می توان Timestamp ها را رمز گشایی کرد ؛ بکار گیری IPSEC و امن کردن از طریق لایه فیزیکی از این امر جلو گیری میکند.

در صورتی که امکان طراحی قفل از طریق ActiveX و بکارگیری آن مهیا باشد فکر میکنم پیاده سازی آن به مراتب ساده تر و امکان پذیر تر باشد.

متشکرم

houtanal
سه شنبه 19 اردیبهشت 1385, 16:57 عصر
من فکر می کنم صرفا با استفاده از Client Authentication Certificate تمام نیاز هات رو برآورده کردی.
پست های آخر "امنیت در نرم افزار های تحت وب" رو یه نگاهی بنداز.
با این روش حتی با داشتن نام کاربری و پسورد هم کسی تا زمانی که Certificate روی سیستمش نصب نشده باشه نمی تونه کلا وارد اون URL بشه.

Inprise
سه شنبه 19 اردیبهشت 1385, 17:02 عصر
Client Certification ها ، محدودیتی برای ماشینی که مورد استفاده قرار میگیره ایجاد نمیکنند ؛


از روی سیستم دیگری نتواند لاگین سیستم بشود.

houtanal
سه شنبه 19 اردیبهشت 1385, 17:21 عصر
از روی سیستم دیگری نتواند لاگین سیستم بشود.

انجام میده .
مادامیکه اون certificate بر روی کلاینتی نصب نشه اصلا نمی توان وارد URL شد.

"HTTP Error 403.7 - Forbidden: SSL client certificate is required."

Identifier
سه شنبه 19 اردیبهشت 1385, 17:27 عصر
مساله اینجاست که جناب متقی می خواهند با وجود داشتن Certification کاربر نتونه از طریق کامپیوتر های مختلف لاگین کنه. و فقط مجاز به لاگین کردن از طریق یک کامپیوتر معرفی شده انجام بشه.


مادامیکه اون certificate بر روی کلاینتی نصب نشه اصلا نمی توان وارد URL شد.

در این حالت کاربر Certification را میتونه بر روی کلاینت های مختلفی نصب کنه.و عملیات
لاگین را انجام بدهند.

Inprise
سه شنبه 19 اردیبهشت 1385, 17:28 عصر
انجام میده .
مادامیکه اون certificate بر روی کلاینتی نصب نشه اصلا نمی توان وارد URL شد.

"HTTP Error 403.7 - Forbidden: SSL client certificate is required."


بله این که واضحه . اما اگر به سوال دقت کنی - که سوال خاصی نیست و یک مسئلهء عمومی و متداول است - اگر کسی موفق بشه گواهی تو رو از روی سیستمت برداره ، عملا" دیگه امنیتی وجود نداره ؛ مشخصه که یک خرابکار ، یا یک کاربر ناشی ، میتونه براحتی از گواهی اش سوء استفاده کنه یا اون رو از دست بده . دقیقا به همین دلیله که روشهای "سه جانبه" ای مانند Kerberos محبوب هستند ؛ یعنی با تفاصیلی که شرحش صفحه قبل هست ، دغدغه ای که در متن سوال وجود داره پوشش داده میشه . هم در بازه های زمانی مشخص و قابل تنظیم با تبادل دائمی بلیطهای امنیتی ، هویت طرفین تبادل توسط طرف سوم قابل اعتماد بررسی میشه ، و هم اضافه یا کم شدن "یک ماشین جدید" فقط با نظر و تائید مدیر دامنه عملی ست ، و هم متن کلیه بسته ها توسط IPSec با سیاست واحدی رمز میشه .

موردی که تو پیشنهاد میکنی اغلب روی سیستمهائی که به جامعیت نیاز ندارند کاربرد داره . مثلا" یک سرویس تجاری آنلاین . بانک موظف به حفاظت از تو نیست ، و فقط بهت گواهی ات رو میده و بقیه اش به عهدهء خودته ، به هر سبکی که دوست داری ، از هر جائی که دوست داری . اما وقتی جامعیت و یکپارچگی و مدیریت متمرکز به سبکی که گفته شد نیاز باشه ، باید از تمام اجزاء PKI استفاده کرد .

oxygenws
پنج شنبه 21 اردیبهشت 1385, 08:53 صبح
ممنونم بچه ها، واقعا زحمت کشیدید...
دلیل اینکه اینقدر دیر جواب دادم این بود که داشتم حرفاتون رو کامپایل می کردم!!!

برادر اینپرایز، احیانا وقت داری و می تونی منطق این عملیاتی که شرح دادی رو بهم بگی؟؟! اصولا چنین عملی، در اینترنت زیاد برام منطقی نیست. چون به هر حال داده ها باید از جایی به جایی منتقل بشن و این داده ها می تونند دستکاری بشن، منظورم اینه که به نظر من ارتباطات اینترنتی (به دلیل عمومیت) به هر ترتیبی قابلیت دور زدن دارند!!

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

همچنان شدیدا سپاسگذارم از اینکه وقت ارزشمندتون رو می ذارید... :بوس:
موفق و پیروز باشید.

Inprise
پنج شنبه 21 اردیبهشت 1385, 20:48 عصر
مفهوم PKI زیاد پیچیده نیست ، اما Infrastructure مایکروسافت به دلیل تعدد کامپوننتهای موجود کمی پیچیده است و شرح و توضیحش واقعا" وقت میخواد که متاسفانه یکی از مواردیه که ندارم ؛ ولی قطعا" روی اینترنت به اندازه کافی داده هست و اینجا میتونه مکانی برای رفع ابهام باشه .

اما در این مورد :

منظورم اینه که به نظر من ارتباطات اینترنتی (به دلیل عمومیت) به هر ترتیبی قابلیت دور زدن دارند!!

در عمل اینطور نیست . منطق و مفهومی که PKI ازش استفاده میکنه با استدلال ریاضی ، و به کمک اتکاء به مفهوم "اعتماد سازی" موجود در PKI قطعا" امنه . این نتیجه گیری که یک ارتباط اینترنتی به دلیل عمومیت به هر حال نا امنه صحیح نیست . اما همیشه بین یک مفهوم علمی و پیاده سازی اون توسط یک کمپانی فاصله هائی وجود داره ؛ به عنوان یک مثال کوچک ، مفهوم Kerberos اطمینان ایجاد میکنه که احراز و تصدیق هویت بدون تردید با صحت انجام میشه ، شکی در این نیست و این قابل اثباته ، اما اگر پیاده سازی Kerberos دارای نقائص امنیتی نرم افزاری باشه ، اون موقع نمیشه در مورد تضمین صحبت کرد . منطق PKI هم همینطوره ، یعنی بدون تردید ، مدل کلی معماری ای که در موردش توضیح دادم ، دقیقا" همان چیزی هست که برای تحقق تام و تمام امنیت خلق شده ، اما کسی نمیتونه ضمانت بده پیاده سازی اون لزوما" بتونه همیشه و بهر صورت موفق باشه .

ترکیب IPSec برای رمزنگاری ترافیک ، و استفاده از توافق سه طرفه روی گواهی و کلید ، و وجود CA قابل اعتماد برای طرفین ، و سیستم تصدیق هویتی مانند Kerberos‌ و استفاده از Directory Service ای مانند Active Directory مایکروسافت برای مدیریت متمرکز کاربران و ماشینها و Domain Security Policy برای تعمیم سیاستهای امنیتی روی همه ماشینهای دامنه ، و IP Security Policy برای تعمیم سیاستهای امنیتی شبکه ، و Software Policy برای کنترل و مدیریت متمرکز نرم افزارهای کاربران و ماشینهای دامنه ، نهایتا" بستر خوبی برای رسیدن به هدف هستند . کمپانی های بزرگی این روزها با هزینه های سرسام آور از چنین معماری هائی استفاده میکنند ( به نظرت بیل گیتس از فروش ویندوز 30-40 دلاری به کاربران خانگی غیر متعهد به ثروتمندترین مرد مبدل شده ؟ )

در کل ، تمام اون چیزی که توضیحات ارائه شده روش استوار است Public Key Infrastructure در کنار Domain-based Security and management Service و Active Directory است .