PDA

View Full Version : سوال: بهترین راه تشخیص هویت در WebService و جلوگیری از نفوذ



Javad_raouf
پنج شنبه 20 فروردین 1394, 12:03 عصر
سلام بر اساتید
یک وب سرویس داریم که توش کلی تابع داریم مثلا یکیش DoSomething
چون قرار نیست از این وب سرویس همه استفاده کنند توابع این وب سرویس دو تا پارامتر به نام UserName,PassWord دارند که کاربردشون مشخصه (توضیح اضافی: هر دفعه هر تابع می خواد اجرا بشه اول از روی این دو تا ورودی می فهمه که آیا شخصی که از وب سرویس استفاده می کنه اجازه این کار رو داره یا نه :چشمک:)

تا اینجاش که معلومه

حالا برای من یک سوالی پیش اومده:متفکر:
اگر شخصی یک برنامه بنویسه که از سیستم کلاینت تابع DoSomething رو توی یک While بزاره و هر دفعه PassWord متفاوتی رو در پارامتر قرار بده امکان نفوذ بسیار بالا میره:افسرده:

دو تا راه حل به نظرم میرسه:
1. توی تابع DoSomething یک Sleep چند ثانیه ای بزارم تا حداقل سرعت While هکر رو به صورت قابل توجهی پایین بیاره:شیطان:
ولی این دو تا مشکل داره: اول اینکه سیستم نفوذ ناپذیر نشده بلکه سرعت نفوذ رو آوردیم پایین، دوم اینکه من نمی دونم وقتی توابع وب سرویس به صورت Async برای هر کلاینت اجرا میشن یا نه؟؟؟ منظورم اینه که مثلا اگر من توی تابع خودم یک Sleep 10 ثانیه ای بزارم ممکنه در زمان خلوتی یک کلاینت 10 ثانیه الاف بشه ولی اگر 10 کلاینت همزمان بخوان از سیستم استفاده کنند سرعت خیلی بیاد پایین

2. راه حل دوم به نظرم عقلانی تره ولی بلد نیستم انجامش بدم:قهقهه:
در این راه حل ما باید یک جوری بفهمیم که یک کلاینت با یک آی پی خاص اگر بیشتر از 5 بار تابع DoSomething رو با user,pass غلط فراخوانی کرد فقط همون کلاینت رو به مدت 10 دقیقه فریز کنیم یا مثلا تا 10 دقیقه هر چی فراخوانی کرد خطا برگردونیم
ولی نمی دونم توی تابع DoSomething از کجا بفهمم چه سیستمی یا چه IPی داره DoSomething رو فراخوانی می کنه:عصبانی++:

امیدوارم تونسته باشم منظورم رو برسونم
پیشاپیش تشکر
عیدتونم مبارک

hamid_hr
پنج شنبه 20 فروردین 1394, 12:49 عصر
یه لیست درست کن که داخلش اینا باشه
IP
Count
با دستور HttpContext.Current.Request.UserHostAddress تو توابع وب سرویست ای پی کلاینتو بگیر و اگه تو لیستت این ای پی رو داشتی که هیچی اگر نه به لیستت ای پی رو اضافه کن و مقدار Count رو صفر بزار
وقتی بررسی کردی برا یوزر و پسوورد ببین اگه یوزر و پسوورد درست بود که مقدار Count این ایپی رو صفر کن
اگر اشتباه بود یوزر و پسوورد به Count یکی اضافه کن
اول هر تابع وب سرویست هم نگاه کن ببین اگه ین ایپی مثلا 5 با اشتباه زده یعنی count >= 5 بود نزار بقیه تابع اجرا بشه یه پیغام براش بفرست همین

am_al_59
پنج شنبه 20 فروردین 1394, 12:49 عصر
ببخشید جناب حمید ظاهراً همزمان ارسال کردیم و من پست شمارو ندیدم اگر نه جسارت نمیکردم پست بزارم


متن زیر تجربه و نظرات کاملاً شخصی هست
معتقدم 90% موارد که منجر به آسیب پذیری در سیستم هایی که با محصولات مایکروسافت نوشته میشن ایرادات ناشی از بی دقتی، سهل انگاری و عدم پیشبینی های لازم هست حالا چه سایت باشه چه برنامه آنلاین چه لوکال
اون 10% بقیش روهم که ایرادات ناشی از همین مواردی که گفتم میشه در کدها و برنامه هایی وجود داره که شما داری ازش استفاده می کنی (مثل نسخه فریم ورکی که داری استفاده میکنی) و برای رفعش هیچ کاری نمیتونی بکنی مگر اینکه ازش استفاده نکنی یا کلاً یکسری از خدمات و فعالیت هارو انجام ندی که اونم دقیقاً باید بدونی مشکل از چیش هست
من برای همه برنامه هایی که نوشتم و سالهاست که منبع درآمد اصلیم هم هست و برای همشون هم تمام سیستم فعالسازی webservice هست و حتی پسورد هم نداره
حالا ممکنه کلی بیان اعتراض کنن که نه ویندوز آسیب پذیره! محصولات مایکروسافت فلان و فلان... بعدم کلی سایتو مقاله متن ... هزارتا چیز دیگه رو کنن! همین ویندوز رو بدون آنتی ویروس و فایروال بزار جلو تک تکشون بگو یک هک کوچولو انجام بدن...
همیشه از جدیدترین نسخه ها استفاده کن اگر کارت و برنامه نویسیت آنلاینه از هاست هایی استفاده کن که جدیدترین نرم افزارهارو استفاده میکنن مثل SQL Serve و فریم ورک
سایر آسیب پذیری ها مثل ایرادات سرور و فریم ورک هارو ما نمیتونیم کاری بکنیم
برای اون مطلبی هم که شما گفتی فکر کنم اسمش brute force باشه، وقتی پسوردت طولانی و متشکل از حروف و اعداد و سایر کاراکترها باشه طرف یا باید سیستمشو کلی روشن بزاره یا باید یک سرور داشته باشه
برای اینکه ببینی پسوردت ممکنه در چه زمانی با سیستم های مخصوص این نوع حملات شکسته بشن توی اینترنت نرم افزارهای زیادی وجود دارن که میگن عبارت شما (چه پسورد چه یوزر چه هر رشته ای) لول چنده و چند صد سال طول میکشه تا با سیستم های brute force شکسته بشه

Javad_raouf
چهارشنبه 26 فروردین 1394, 08:40 صبح
یه لیست درست کن که داخلش اینا باشه
IP
Count
با دستور HttpContext.Current.Request.UserHostAddress تو توابع وب سرویست ای پی کلاینتو بگیر و اگه تو لیستت این ای پی رو داشتی که هیچی اگر نه به لیستت ای پی رو اضافه کن و مقدار Count رو صفر بزار
وقتی بررسی کردی برا یوزر و پسوورد ببین اگه یوزر و پسوورد درست بود که مقدار Count این ایپی رو صفر کن
اگر اشتباه بود یوزر و پسوورد به Count یکی اضافه کن
اول هر تابع وب سرویست هم نگاه کن ببین اگه ین ایپی مثلا 5 با اشتباه زده یعنی count >= 5 بود نزار بقیه تابع اجرا بشه یه پیغام براش بفرست همین
مرسی آقا دمت گرم:تشویق:

ببخشید جناب حمید ظاهراً همزمان ارسال کردیم و من پست شمارو ندیدم اگر نه جسارت نمیکردم پست بزارم


متن زیر تجربه و نظرات کاملاً شخصی هست
معتقدم 90% موارد که منجر به آسیب پذیری در سیستم هایی که با محصولات مایکروسافت نوشته میشن ایرادات ناشی از بی دقتی، سهل انگاری و عدم پیشبینی های لازم هست حالا چه سایت باشه چه برنامه آنلاین چه لوکال
اون 10% بقیش روهم که ایرادات ناشی از همین مواردی که گفتم میشه در کدها و برنامه هایی وجود داره که شما داری ازش استفاده می کنی (مثل نسخه فریم ورکی که داری استفاده میکنی) و برای رفعش هیچ کاری نمیتونی بکنی مگر اینکه ازش استفاده نکنی یا کلاً یکسری از خدمات و فعالیت هارو انجام ندی که اونم دقیقاً باید بدونی مشکل از چیش هست
من برای همه برنامه هایی که نوشتم و سالهاست که منبع درآمد اصلیم هم هست و برای همشون هم تمام سیستم فعالسازی webservice هست و حتی پسورد هم نداره
حالا ممکنه کلی بیان اعتراض کنن که نه ویندوز آسیب پذیره! محصولات مایکروسافت فلان و فلان... بعدم کلی سایتو مقاله متن ... هزارتا چیز دیگه رو کنن! همین ویندوز رو بدون آنتی ویروس و فایروال بزار جلو تک تکشون بگو یک هک کوچولو انجام بدن...
همیشه از جدیدترین نسخه ها استفاده کن اگر کارت و برنامه نویسیت آنلاینه از هاست هایی استفاده کن که جدیدترین نرم افزارهارو استفاده میکنن مثل SQL Serve و فریم ورک
سایر آسیب پذیری ها مثل ایرادات سرور و فریم ورک هارو ما نمیتونیم کاری بکنیم
برای اون مطلبی هم که شما گفتی فکر کنم اسمش brute force باشه، وقتی پسوردت طولانی و متشکل از حروف و اعداد و سایر کاراکترها باشه طرف یا باید سیستمشو کلی روشن بزاره یا باید یک سرور داشته باشه
برای اینکه ببینی پسوردت ممکنه در چه زمانی با سیستم های مخصوص این نوع حملات شکسته بشن توی اینترنت نرم افزارهای زیادی وجود دارن که میگن عبارت شما (چه پسورد چه یوزر چه هر رشته ای) لول چنده و چند صد سال طول میکشه تا با سیستم های brute force شکسته بشه
بحث سر اینا نیست برادر چون اولا پسوورد توسط مشتری گذاشته میشه ضمن اینکه هر چی هم پسوورد خفن باشه حداقلش اینه که اگر یک رباط بخواد هی چک کنه یک سربار اضافه بر روی سروره ولی وقتی تشخیصش بدی دیگه جوابشو نمی دی:لبخندساده:

FastCode
چهارشنبه 26 فروردین 1394, 09:25 صبح
من کارم وب نیست.ولی الان خیلی دوست دارم بخندم.
کاربر این وب سرویس خودتون هستید؟
میتونید به هر کاربر public/private key بدید؟
سرویستون stateless هست؟ اگر نیست چرا از یک token استفاده نمیکنید؟
اگر کاربر به تعداد زیادی IP دسترسی داشته باشه چی؟
اگر وسط یک attack سرور restart بشه چی میشه؟ همه IP ها دوباره مطمئن هستند؟
اگر یک IP به شما حمله نکرده بود و واقعا رمزش رو یادش رفته تا آخر عمرش نباید بتونه وصل بشه؟
و یه عالمه سوال دیگه.

بیشتر راجع به مسئلتون توضیح بدید.

Javad_raouf
چهارشنبه 26 فروردین 1394, 10:13 صبح
من کارم وب نیست.ولی الان خیلی دوست دارم بخندم.

بخندید خوب:چشمک:


کاربر این وب سرویس خودتون هستید؟

خیر، یوزر و پس داریم به تعداد کاربران :لبخندساده:


میتونید به هر کاربر public/private key بدید؟

منظورتون رو نفهمیدم اگه منظورتون از این User و Pass هست آره دیگه هر کاربر یوزر و پس داره


سرویستون stateless هست؟ اگر نیست چرا از یک token استفاده نمیکنید؟

نمی دونم یعنی چی من اولین باره وب سرویس می نویسم یک وب سرویس نوشتم برای نرم افزارم که یک سری خدمات رو به برخی کاربران VIP ارائه می ده نه می دونم
stateless چی هست و نه token

اگر کاربر به تعداد زیادی IP دسترسی داشته باشه چی؟
اگر وسط یک attack سرور restart بشه چی میشه؟ همه IP ها دوباره مطمئن هستند؟

حق با شماست

اگر یک IP به شما حمله نکرده بود و واقعا رمزش رو یادش رفته تا آخر عمرش نباید بتونه وصل بشه؟

کلا فریزش نمی کنم که 5 دقیقه مثلا بهش جواب نمیدم تازه اونم اگر 5 بار اشتباه لاگین کرد
:متفکر:


و یه عالمه سوال دیگه.

یه عالمه جواب دیگه:لبخند:


یشتر راجع به مسئلتون توضیح بدید.

یک نرم افزار دارم که یک سری کارا با وب سرویس انجام میده مثل اینکه چک می کنه ببینه آخرین ورژن چیه و دانلودش می کنه
یا مثلا اگر اطلاعیه ای برای مشتریان گذاشته بودم دانلود می کنه و به مشتریا نشون میده
این کارا که عمومیه ولی برخی کارا هست که فقط کاربران VIP دارن مثلا برخی کاربرا که پول بیشتری دادن می تونن برای بقیه یوزرای نرم افزار اطلاعیه یا حتی تبلیغات بفرستن در این صورت این کاربران VIP نیاز به UserName و Pass دارن
همین حالا اینکه وب سرویسم
stateless یا نه رو نمی دونم فقط می دونم توی اینرنت سرچ کردم و نحوه ساخت وب سرویس رو دیدم و از روی اون پیش فرضشو ساختم
:افسرده:
مرسی از توچهتون:قلب:

FastCode
چهارشنبه 26 فروردین 1394, 10:33 صبح
بخندید خوب:چشمک:

خیر، یوزر و پس داریم به تعداد کاربران :لبخندساده:

منظورتون رو نفهمیدم اگه منظورتون از این User و Pass هست آره دیگه هر کاربر یوزر و پس داره

نمی دونم یعنی چی من اولین باره وب سرویس می نویسم یک وب سرویس نوشتم برای نرم افزارم که یک سری خدمات رو به برخی کاربران VIP ارائه می ده نه می دونم
stateless چی هست و نه token

حق با شماست

کلا فریزش نمی کنم که 5 دقیقه مثلا بهش جواب نمیدم تازه اونم اگر 5 بار اشتباه لاگین کرد
:متفکر:

یه عالمه جواب دیگه:لبخند:

یک نرم افزار دارم که یک سری کارا با وب سرویس انجام میده مثل اینکه چک می کنه ببینه آخرین ورژن چیه و دانلودش می کنه
یا مثلا اگر اطلاعیه ای برای مشتریان گذاشته بودم دانلود می کنه و به مشتریا نشون میده
این کارا که عمومیه ولی برخی کارا هست که فقط کاربران VIP دارن مثلا برخی کاربرا که پول بیشتری دادن می تونن برای بقیه یوزرای نرم افزار اطلاعیه یا حتی تبلیغات بفرستن در این صورت این کاربران VIP نیاز به UserName و Pass دارن
همین حالا اینکه وب سرویسم
stateless یا نه رو نمی دونم فقط می دونم توی اینرنت سرچ کردم و نحوه ساخت وب سرویس رو دیدم و از روی اون پیش فرضشو ساختم
:افسرده:
مرسی از توچهتون:قلب:

stateless خیلی ساده یعنی اینکه سرور نتیجه پردازش یک دستور رو در دستورات دیگه استفاده نکنه.
و public/private key هم کاملا با user/password فرق داره.جست و جو کنید. شاید ساده ترین راه حل سوالتون باشه.

Javad_raouf
چهارشنبه 26 فروردین 1394, 10:49 صبح
stateless خیلی ساده یعنی اینکه سرور نتیجه پردازش یک دستور رو در دستورات دیگه استفاده نکنه.

یعنی یک تابع یک تابع دیگه رو فراخونی نکنه؟
در این صورت جواب منفیه یعنی درون یک متد از متد های دیگه استفاده کردم
جسارتا اینی که می پرسید برای جلوگیری از حلقه بینهایته؟ یا به همین موضوع خودمون مربوطه؟

LastAirbender
چهارشنبه 26 فروردین 1394, 13:30 عصر
بحث سر اینا نیست برادر چون اولا پسوورد توسط مشتری گذاشته میشه ضمن اینکه هر چی هم پسوورد خفن باشه حداقلش اینه که اگر یک رباط بخواد هی چک کنه یک سربار اضافه بر روی سروره ولی وقتی تشخیصش بدی دیگه جوابشو نمی دی:لبخندساده:

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

FastCode
پنج شنبه 27 فروردین 1394, 09:32 صبح
خیر.یعنی مقادیر برای مدت کوتاهی در سرور ذخیره بشن و در صدازدن های بعدی توابع دیگر استفاده بشن.
بله.برای همین موضوع هست.

Javad_raouf
پنج شنبه 27 فروردین 1394, 10:54 صبح
خیر.یعنی مقادیر برای مدت کوتاهی در سرور ذخیره بشن و در صدازدن های بعدی توابع دیگر استفاده بشن.
نه چنین اتفاقی نمیفته
البته برخی توابع از دیتابیس استفاده می کنند ( مثلا تابع تشخیص هویت که User ,pass رو توی دیتابیس می خونه)


و public/private key هم کاملا با user/password فرق داره.جست و جو کنید. شاید ساده ترین راه حل سوالتون باشه.
سرچ کردم فکر کنم متوجه شدم چیه
ولی ربطشو به موضوع خودمون نفهمیدم
Public private key طبق چیز دست و پا شکسته ای که من فهمیدم مال کد گذاری اطلاعات است به این صورت که الگوریتم کد گذاری الگوریتم عمومیه و همه می بیننش ولی الگوریتم باز کردن قفل رو فقط خودمون داریم! درست فهمیدم؟؟؟

FastCode
پنج شنبه 27 فروردین 1394, 11:15 صبح
بله. این فایلها میتونن به عنوان password هم استقاده بشن به این صورت که API ای که نیاز به login داره فقط کانکشن های امن با کلیدهایی رو قبول میکنه که ca شما تاییدشون کرده.
جست و جو کنید: open*** certificate authentication
و ServicePointManager.ServerCertificateValidationCal lback

EDIT:
WOW, WTF, HOLLY SHIT, این یکی دیگه جدید بود. کلمه v.p.n رو فیلتر کردن.توی سایت برنامه نویسی.....

FastCode
پنج شنبه 27 فروردین 1394, 11:22 صبح
اولین خاصین این روش اینه که بدون دسترسی به سرور میتونید کاربر جدید ایجاد کنید.
و دومیش این که فایلی که به کاربر میدید میتونه رمز داشته باشه.
سومین خاصیت اینه که فایلهای تاریخ مصرف دارن.

Javad_raouf
پنج شنبه 27 فروردین 1394, 15:30 عصر
مرسی
فکر کنم برای کار من در این حد امنیت لازم نباشه ولی اطلاعاتم خیلی زیاد شد حتما یاد می گیرم:لبخندساده:
متشکرم عزیزم