PDA

View Full Version : سوال: یه سوال از دوستان هکر در مورد کوکیها



hobab-theme
دوشنبه 08 تیر 1388, 19:21 عصر
سلام به تمامی دوستان و اساتید محترم
یه سوال درمورد کوکیهایی که بعضاً توی سیستم کاربر ذخیره میشن دارم
فرض کنید شما یه سری به سایت من زدید و هنگام ورود چک باکس "مرا بخاطر بسپار" رو علامت زدید . خوب یه کوکی معمولاً دائمی توی سیستم شما ذخیره میشه و فرض کنید تو این کوکی نام کاربری ذخیره شده
حالا توی صفحاتی که نیاز به لاگ این دارن میاییم و وجود این کوکی رو بررسی می کنیم
تا اینجا که همه چی سر جاشه
ولی آیا چنین امکانی واسه کاربر داره که نام کاربری که تو فایل کوکی ذخیره شده رو تغییر بده ؟؟؟
اگه بشه این کار رو کرد آیا یه مشکل امنیتی بزرگ نیست ؟
مثلاً به دستور زیر دقت کنید


Select * From Members Where Username = @Username
cmd.Parameters.Add("@Username", Request.Cookies("CookieName.Value)

مثال دیگه . فرض کنید با یه همچین شرطی ما تمام اطلاعات کاربر رو از دیتابیس به اون نمایش میدیم
خوب اگه نام کاربری ذخیره شده تو کوکی عوض شده باشه اطلاعات یکی دیگه نمایش داده میشه ؟
سوالات :
1) آیا اصلاً امکان یه همچین کاری هست؟؟
2) در صورت مثبت بودن پاسخ راه حل چیست؟؟
3)فعلاً چیزی یادم نمیاد:بامزه:
ممنون از تمام دوستان

milade
دوشنبه 08 تیر 1388, 21:21 عصر
یه سوال از دوستان هکر در مورد کوکیها
سوالتون رو در سایت مناسب مطرح کنید !!!!!

ولی آیا چنین امکانی واسه کاربر داره که نام کاربری که تو فایل کوکی ذخیره شده رو تغییر بده ؟؟؟
بله ! . یه تروجان ست میکنه حالشو میبره .

1) آیا اصلاً امکان یه همچین کاری هست؟؟
یکی از مشکلها همینه

2) در صورت مثبت بودن پاسخ راه حل چیست؟؟
Encode کردن اطلاعات با کلاسها و موردهای استفاده .
ذخیره نکردن اطلاعات بسیار مهم از قبیل پسورد

3)فعلاً چیزی یادم نمیاد
من هم جواب نمیدم ! ;)

موفق باشید

hobab-theme
دوشنبه 08 تیر 1388, 22:40 عصر
ممنون از پاسختون

Encode کردن اطلاعات با کلاسها و موردهای استفاده
میشه یکم بیشتر توضیح بدید و یه مثال ساده بزنید

ذخیره نکردن اطلاعات بسیار مهم از قبیل پسورد
بله . معمولاً تو کوکی ها باید شماره شناسایی (ID) یا نام کاربری یا یه همچین اطلاعاتی رو ذخیره کرد.

من هم جواب نمیدم
بسیار کار عاقلانه ای میکنید:چشمک:

خوب اگه نام کاربری ذخیره شده تو کوکی عوض شده باشه اطلاعات یکی دیگه نمایش داده میشه ؟

واقعاً میشه از طریق همچین کاری اطلاعات یکی دیگه برامون لود بشه؟؟

milade
دوشنبه 08 تیر 1388, 22:55 عصر
میشه یکم بیشتر توضیح بدید و یه مثال ساده بزنید
اطلاعات نبایست به صورت خام ذخیره بشه . استفاده از کلاسهای MD5 و 64byteString و ... ( جستجو کن سورس 100% هست )
که بسته به برگشت پذیر بودن و ناپذیر بودن میتونی انتخاب کنی

واقعاً میشه از طریق همچین کاری اطلاعات یکی دیگه برامون لود بشه؟؟
بستگی به شما داره .
مثلاً اگه با این روش سورس بالا عمل کنید خوب مطمعناً اره .
شما میتونید حتی بعد از Encode کردن هم باز یه سری کارها بکنید ( مثلاً ذخیره شناسه های مخفی و ... )

موفق باشید

hobab-theme
دوشنبه 08 تیر 1388, 23:04 عصر
بستگی به شما داره .
مثلاً اگه با این روش سورس بالا عمل کنید خوب مطمعناً اره .
شما میتونید حتی بعد از Encode کردن هم باز یه سری کارها بکنید ( مثلاً ذخیره شناسه های مخفی و ... )

پس با این حساب کار خیلی خطرناکه حسن
مثلاً اعضای برنامه نویس میتونن با تغییر کوکی اطلعات همدیگه رو ببینن:متعجب::افسرده::ناراحت:
فرض دیگه

dr.pantagon
دوشنبه 08 تیر 1388, 23:43 عصر
یک پیشنهاد هر کوکی که ایجاد می کنی رو تو دیتابیس ذخیره کن و وقتی می خواد بازخونی بشه چک کن اگر یوزر و کد شناسایی یکی بود لاگین انجام می شه اگر نبود هم نمی شه
پس نتیجه می گیریم که اگر یوزر رو تغییر بده حذف کنه یا کد اصلی رو با اونی که شما تو دیتابیس ست کردین نمی خونه و نتیجه معلوم است .

hobab-theme
سه شنبه 09 تیر 1388, 02:55 صبح
یک پیشنهاد هر کوکی که ایجاد می کنی رو تو دیتابیس ذخیره کن و وقتی می خواد بازخونی بشه چک کن اگر یوزر و کد شناسایی یکی بود لاگین انجام می شه اگر نبود هم نمی شه
پس نتیجه می گیریم که اگر یوزر رو تغییر بده حذف کنه یا کد اصلی رو با اونی که شما تو دیتابیس ست کردین نمی خونه و نتیجه معلوم است .
دوست عزیز منظور و هدف کلی شما اینه که به شناسایی کاربر فقط از روی یه گزینه مثلاً Username بسنده نکنیم؟ و حداقل از دو پارامتر واسه شناسایی استفاده بشه. ( مثلاً نام کاربری و شماره شناسایی که گفتید یا نام کاربری و ایمیل) درسته؟
آره به نظر منم پیشنهاد معقولیه
یه فکر
میتونیم موقع ثبت نام کاربر یه عدد تصادفی مثلاً 10 رقمی یا یه شماره GUID هم همراه مشخصاتش ذخیره کنیم و شناسایی رو بر اساس نام کاربری و اون عدد در نظر بگیریم.( البته اینو دوست عزیزم آقای دکتر پنتاگون جون هم فرمودند)
اینجوری دیگه اصلاً فکر نکنم بشه کاری کرد ؟! به نظر شما چطوره ؟؟
دوستان من یه خورده فکرم باز شد و دیگه راه حلهای خوبی به سرم میزنه:کف:
اگه کسی هنوز پیشنهادات بهتری داره لطفاً مطرح کنه
ما با آغوش باز ازشون پذیرائی میکنیم

silverfox
سه شنبه 09 تیر 1388, 11:12 صبح
اگه یوزر و پسورد رو کد شده بذاریم توی کوکی فکر نکنم بشه به این راحتی عوضش کرد و به نتیجه رسید...دوستمون هم اشاره کرده بودند...

dr.pantagon
سه شنبه 09 تیر 1388, 19:07 عصر
silverfox (http://barnamenevis.org/forum/member.php?u=53488) عزیر وقتی می شه با قاشق و چنگال غذا خورد چه نیازی به دست است که دست رو کثیف کنی

100% درست می گی یعنی می شه ولی تنها نشد دنیا این است که بگی کاری نشدنی است
حتی 1% هم احتمال بدیم که به الگوریتم کد کردن پی ببرند
مثلا طرف می یاد چند تا یوزر می سازه و با دیتا های ثابت روش الگوریتم رو در می یاره یعنی اینجوری

پسورد شما : 123456 کد شده : 234567
به روش افزایش عدد
خوب اگر 5 تا یوزر بسازه و ببینه که عدد ها دارن یکی یکی می رن بالا .... البته این الگوریتم مسخره است است
الگوریتم های بدون بازگشت هم وجود دارن ولی نیازی نیست :D

silverfox
چهارشنبه 10 تیر 1388, 00:42 صبح
به همین سادگی نیست که 123 بشه 2345 که 123 می شه a1D9w8Dqp1d با 5 تا یوزرم نمی شه حدس زد بعد شما محدودیت بذار هر ip بتونه هر 1ساعت یه یوزر بسازه طرف هم باید خیلی حوصله داشته باشه هم وقت آخرشم به نتیجه نمی رسه...مگه خود یاهو چطوری ذخیره می کنه؟


B
1j6jqup52prn4&b=3&s=6j
yahoo.com/
1024
34259096
320654
3916248731632
30009383
*
PL
V=1.1&d=a8DzO.BRMqUuBoLtPGv2pOfBFHCeYrLQ9S8NpbHH4dEx808T tRT642S3fw--
yahoo.com/
1024
15504512
304103
2933608
30010677
*

hobab-theme
چهارشنبه 10 تیر 1388, 03:11 صبح
از دوستانم جناب dr.pantagon و جناب silverfox سپاسگزارم

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

بعد شما محدودیت بذار هر ip بتونه هر 1ساعت یه یوزر بسازه
میشه بگید چطوری؟؟
من برا این کار مشکلی ندارم فقط نمیدونم زمانش رو چطور محاسبه کنم
یعنی مثلاً اگر یکی با یه IP وارد شد من IP اون رو کش کنم؟ و به مدت مثلاً یک ساعت نگه دارم؟
----------------------
silverfox جان یه نمونه گذاشتید که ظاهراً یاهئ استفاده میکنه. اگه میشه در مورد اون هم بیشتر توضیح بدید . یاهو از این الگریتم چطور استفاده میکنه؟
ممنون

silverfox
چهارشنبه 10 تیر 1388, 09:09 صبح
من خبر ندارم یاهو از چه استفاده می کنه(اونی که گذاشتم خود کوکی بود) اما چیزی که به نظر میاد اینه که کد شده یوزر و پسورد رو قرار می ده می شه مثلا آی پی سیستم رو هم قرار بده که نشه کوکی رو روی سیستم دیگه استفاده کرد...
منم راهی که به نظرم می رسه اینه که کش کنی یا بذاری توی db با کوکی هم می شه البته طرف می تونه پاکش کنه...

raravaice
چهارشنبه 10 تیر 1388, 14:34 عصر
شما هیچگاه نباید نام کاربری را در کوکی ذخیره کنی.
ذخیره کردن نام کاربری به صورت الگوریتم برگشت پذیر هم کار اشتباهی هست ولی اگر با یک الگوریتم بر گشت نا پذیر ادغام بشه امنیت خوبی داره.
پیشنهاد میدم :


قابلیت http only را برای کوکی فعال کنید تا کلاینت به راحتی نتونه توی کوکی تغییر ایجاد کنه ، هر چند که بعضی از مرورگر ها از اون پشتیبانی نمیکنن.
از الگوی Digest access authentication الهام بگیر و سطح امنیت رو در کوکی ها بالا ببر.

توضیحات راجع به Digest access authentication:

http://en.wikipedia.org/wiki/Digest_access_authentication
http://tools.ietf.org/html/rfc2069
http://tools.ietf.org/html/rfc2617



من خبر ندارم یاهو از چه استفاده می کنه
یاهو از پروتکل SIP بر بستر TCP/IP استفاده میکنه و نوع اهراز هویت آن چه در بستر Messenger و چه در بستر وب Digest access authentication و چند الگوی استاندار دیگه هست.


موفق باشید

silverfox
چهارشنبه 10 تیر 1388, 15:11 عصر
nonce و realm چی هستن؟


A server-specified data string which may be uniquely generated each
time a 401 response is made.
اگه کاربری هویتش مشخص نباشه response 401 میفرسته سرور؟چجوری تولید می شه به چه دردی می خوره؟حاوی چه اطلاعاتی است؟اگر بحث طولانی داره تاپیک جدید بزنم اگر هم توضیح زیادی نداره ممنون می شم پاسخ بدین

raravaice
چهارشنبه 10 تیر 1388, 15:34 عصر
nonce : یک عدد یا رشته که به صورت Random ساخته میشه که سرور و کلاینت از اون مطلع هستند
realm : ترکیبی از نام دامنه و نام کاربری هست مثلا نام کاربری raravaice در دامنه mydomain.com به صورت raravaice@mydomain.com شناخته میشه.


اگه کاربری هویتش مشخص نباشه response 401 میفرسته سروراین روش در اهراز هویت HTTP توسط وب سرور ها به کار میره مثال اون رو میتونی در گوگل کد با IP ایران ببینی.

شما در برنامه خودت لازم نیست از این روش استفاده کنی همانطور که گفتم فقط الگوبرداری کن!
مثلا :
نام کاربری را به صورت کد برگشت پذیر در یک کوکی ذخیره میکنی و در کلید بعدی توی کوکی میای این الگورو پیادا میکنی که میتونه شامل :




HA1=MD5(User name:Password)
HA2=MD5(realm)
response=MD5(HA1:nonce:HA2)

باشه! در این صورت کاربر اگر بتونه نوع کد شدن نام کاربری در کلید اول رو پیدا کنه و با فرض اینکه نام کاربری را تغییر بده باز هم نمیتونه کلید دوم رو ایجاد کنه چون از مقدار nonce و realm و Password فقط سرور مطلع هست.
پس اگر شما نام کاربری در کلید اول را با response در سرور مقایسه کنی و یکسان نباشه در این صورت اهراز هویت کامل نیست و اون هکر عزیز بعد از چند با تلاش حداقل نفوذ از طریق این روش رو بیخیال میشه :)

برای اطلاع از استاندارد واقعی Digest access authentication که کاربردهای بسیار زیادی داره و تنها به HTTP محدود نمیشه حتما تمام مقاله و RFC را مطالعه کنید. اگر زبان انگلیسیتون ضعیف هست از Google Translate استفاده کنید تا حد بسیاری بهتون کمک میکنه.

موفق باشید

dr.pantagon
چهارشنبه 10 تیر 1388, 19:26 عصر
raravaice (http://barnamenevis.org/forum/member.php?u=37086) بسیار جالب و جامع گفت

hobab-theme
پنج شنبه 11 تیر 1388, 04:09 صبح
raravaice عزیز ممنون از اینکه توضیحاتی رو به تاپیک اضافه کردید
الان قهمیدم که کوکیها اگه درست استفاده بشن میشه بهشون اعتماد کرد و امنیت نسبتاً خوبی دارن
از تمام دوستان هم تقاضا دارم در صورتی که دوست دارن توضیحاتی رو اضاف کنن برا افزایش اطلاعات
ممنون از همگی
موفق و پیروز باشید

alim1369
شنبه 17 مرداد 1388, 02:17 صبح
هنوز یه مشکلی هست
برای اینکه نشه در یه کامپیوتر دیگه استفاده کرد ما اگه بیاییم آی پی را هم در داخل کوکی قرار بدیم بازهم یک هکر حرفه ای می تونه با تغییر آی پی خودش اون دیوار امنیتی را رد بشه