به عنوان كسي كه سالها تو امنيت نرم افزار تجربه داره ميگم: (البته حرفام كليه و مربوط به موضوع ميشه)
اطلاعات اصلي مربوط به كاربر چيه؟
كاربر
نام و نام خانوادگي كاربر
كلمه رمز
سطح دسترسي
چيكار كنم كه يك كاربر خرابكار با دسترسي به ديتابيس و پيدا كردن پسوردهش شده مدير ، نتونه با جايگزين كردن پسورد هش شده خودش به جاي پسورد مدير راه خودش رو براي ورود به صورت مدير باز كنه؟
پسورد هش شده حتما بايد يك رابطه رياضي با نام كاربري داشته باشه تا قابل جايگذاري نباشه (مثلا ميتونه يك رابطه رياضي ساده يا پيچيده با CRC نام كاربر داشته باشه)
بهتره براي اينكه از تداخلها و توليد پترنهاي يكسان جلوگيري كنيم هميشه نام كاربري رو با يك مقدار تصادفي جمع كنيم البته اين عمل فقط يك بار و در لحظه تعريف كردن نام كاربر اتفاق ميفته...
من به عنوان يك خرابكار ابتدا سعي ميكنم از خود برنامه شروع كنم: پشت سيستم ميشينم و نام كاربري كه قبلا از كسي شنيدم وارد ميكنم...كلمه رمز چيه؟ چندتا كلمه رمز پيش فرض دارم كه هميشه اول اونا رو چك ميكنم بعد از وارد كردن كلمه رمز دهم سيستم يك اخطار بهم ميده : نام كاربري شما دچار تخلف شده و هم اكنون تخلف شما به مدير گزارش شد! كمي ميترسم ! با خودم ميگم برنامه رو از طريق تسك منيجر ميبندم و دوباره سعي ميكنم ولي نه بعد از اجراي دوباره بازم همون پيغامو ميده و ميگه مدير بايد قفل و باز كنه...بهتر ميبينم بلند شم برم پي كارم تا گندش در نيومده... با خودم فكر ميكنم چرا بعد از ده بار اشتباه بايد پيغام بده چرا مثل بقيه برنامه ها بعد از 3 يا 4 بار اين اتفاق نيفتاد؟ اهان احتمالا كاربراي اينجا اينقد ناشي و كم حواسن كه معمولا بعد از 5-6 باز اشتباه تازه كلمه رمزشون يادشون مياد!
به عنوان خرابكار ميرم سراغ sql injection تجربه بهم ثابت كرده حتي برنامه هاي دسكتاپ و غير وب هم ميتونن اين ضعف بزرگ رو داشته باشن چندتا فرمان sql به جاي نام كاربر ميدم ولي اتفاقي نميفته چون به خوبي فرمانهاي كليدي sql رو موقع كد نويسي فيلتر كردن بيخيال اين روش......
با خودم ميگم كافيه رو سيستم يكي از كاربرا يك اسنيفر نصب كنم و اطلاعاتي كه در لحظه ورود از سيستمش وارد شبكه ميشه بدست بيارم شايد بتونم كاري كنم...بعد از انجام اينكار يك مشت اطلاعات كد شده وبي معني رو دستم موند به احتمال زياد اطلاعات بين سرور و كلاينت به صورت كد شده جابجا ميشه و clear text نيست اينم بي خيال...
اي بابا چرا زودتر به فكرم نرسيد؟ يك كيلاگر نصب ميكنم پسوردشو ميزنم هه هه .... بعد از بدست آوردن پسورد وقتي ميخوام وارد شم پيغام ميده كلمه رمز اشتباه است! يعني چي شده؟ ممكن نيست كاربر فهميده باشه و پسوردشو عوض كرده باشه.. از طرفي كي لاگرم خيلي دقيقه و اشتباه نميكنه پس مشكل چيه؟ 2 تا علت داره يكي اينكه احتمالا برنامه يك آنتي كي لاگر داره كه وقتي ميخواد كلمه رمز رو دريافت كنه با هوك كردن كيبورد بعد از دريافت كاراكتر از كاربر يك كاراكتر ديگه رو جايگزينش ميكنه و به سيستم پاس ميده واسه همين كي لاگرم با اينكه درست كار كرده ولي كلمه نادرست رو ثبت كرده... ولي نه برنامه نويساش دانش بالايي ندارن كه بتونن همچين كاري كنن پس احتمالا از كلمه رمز متغير استفاده كردن... اينم پس بيخيال...
من به عنوان يك خرابكار توانستم جدول مربوط به كاربرها رو در ديتابيس پيدا كنم ولي همه چي غير عادي به نظر مياد نميتونم نام كاربري خودم رو توش پيدا كنم گرچه تونستم رديف نام و نام خانوادگي خودم رو پيدا كنم ولي چيزي شبيه كلمه رمز و نام كاربري خودم تو اون رديف وجود نداره فقط يك رشته بسيار طولاني ميبينم كه نامفهومه معلوم نيست با چي هش شده ! به خودم ميگم احتمالا يك الگوريتم هشينگه جديده يا من دراوردي پس به اين راحتي نميشه فهميد چيه شايد تركيبي از MD5 , SHA512 باشه كه اگه باشه ديگه بايد برم بميرم ...ياد قديما ميفتم كه چقدر پسورد MD5 رو با BF پيدا كرده بودم ولي يه روز يه پسورد SHA به تورم خورد دهنم سرويس شد تا تونستم تو اينترنت يه برنامه درست حسابي براي BF كردن SHA384 پيدا كنم و تازه اون برنامه هم كه در نوع خودش بي نظير بود به بدبختي تونسته بود يك پسورد 6 كاراكتري خيلي ساده رو در عرض 24 ساعت كار بي وقفه پيدا كنه اگه يه زماني مجبور باشم يك پسورد SHA512 رو BF كنم چي ميشه؟ هيچي بايد تا قيامت صبر كنم ! تازه اگه ابزار مناسبي براش پيدا بشه!!! ولي اين چيزي كه من ميبينم اصلا شبيه هيچكدوم از الگوريتمهايي كه ميشناسم نيست .... اي بابا بيخيال......
با خودم فكر ميكنم كه همين رشته رو با رشته مدير جايگزين ميكنم شايد بتونم با كلمه رمز خودم و كاربر مدير وارد شم خوب نام كاربري مدير رو هم نميدونم چيه چون ديده نميشه فقط نام و نام خانوادگيشو ميبينم خوب حدس ميزنم كه admin باشه ولي با پيغام كلمه رمز اشباه است برق از كلم ميپره!
چيكار كنم؟ يه رفيقي دارم كه ختم مهندسي معكوسه يك روز يواشكي ميارمش اداره ميگم برنامه رو برام ريورس كنه و بگه چيكار ميتونيم بكنيم شايد بتونه الگوريتم رمزنگاريشو پيدا كنه..... اهان اومد با اون فلش ديسك كذاييش كه هميشه همراشه و معلوم نيست چه گندايي به سيستماي ملت باهاش زده...وصلش ميكنه به دستگاه يه مشت برنامه عجيب غريب اجرا ميكنه ميوفته به جون برنامه.... با دات نت و سي شارپ نوشتنش... خوب چي شد؟ صبر كن....خوب چي شد؟!!! اه چقد حرف ميزني بابا يه قفل خفن روش گذاشتن نميتونم ديكامپايلش كنم! ااااا تو مگه نميگفتي اگه با دات نت نوشته باشنش سه سوت سورسشو برام در مياري دخلشو مياري؟!!! اره گفتم ولي اين يكي خيلي خفنه با دوتا پروتكتور خيلي خفن قفلش كردن : SmartAssembly , InteliLock هيچي از سورس برنامه معلوم نيست ميبيني كه تموم برنامه هامو روش تست كردم نميتونن....اي بابا چيكار كنيم؟ فقط تو كل ايران 3-4 نفر ميتونن اين قفلو باز كنن كه اونا هم اهل كار خلاف نيستن...فايل اصلي برنامه يك فايل exe هست كه 15 مگابايت حجمشه ميدوني حتي اگه سورسشو در بياريم از اون همه كد درهم برهم چي ميخواي بفهمي؟ چون با Obfuscator كاملا بهم ريختنش...دور من يكيو خيط بكش مارفتيم....
كلمه رمز متغير چيه؟ اين اصطلاحو خودم در آوردم چند سال پيش وقتي تو يه بانك نشسته بودم متوجه شدم يكي از كارمندا از پشت سيستمش از دوستش پرسيد پسوردت چي بود؟
اونم گفت اسم پسرم : Reza و من هم اتفاقي شنيدم تو دلم خنديدم گفتم به به اگه يه روز بتونم واسه چند لحظه پشت اون سيستم بشينم چي ميشه ههه... بعد فكر كردم كه چجوري ميشه كاري كرد كه حتي اگه من پسورد يه نفر رو بشنوم حتي با نشستن پشت سيستم نتونم ازش استفاده كنم؟ راهي كه به ذهنم رسيد همين روش بود گفتم اگه تو صفحه لوگين كاربر بعد از وارد كردن اسم خودش مجبور باشه يه محاسبه كوچيك انجام بده به اين هدف ميرسم مثل اين سيستماي ضد ربات كه در قسمت جستجوي سايت استفاده شده كاربر مجبوره يك عكس كه به صورت تصادفي توليد شده رو بخونه و محتوياتش رو وارد كنه تا كارش انجام شه... ولي ميشه با يكم فكر پيچيده ترش كرد جوري كه هم سخت تر شه هم كاربراي معمولي هم بتونن راحت بفهمن و يادشون بمونه مثلا يك عدد تصادفي توليد شه كه كاربر اون رو در يك عدد خاص كه فقط خودش ميدونه ضرب كنه يا جمع كنه جوري كه خيلي سخت نباشه و نتيجه رو به سيستم بده...اينجوري من با داشتن كلمه رمز هم نميتونم كاري بكنم... اينر روش رو بعدها تو چند برنامه ديگه هم ديدم و فهميدم چند نفر ديگه هم قبلا مثل من فكرشون به اينجا رسيده بوده...
خسته شدم.... اين داستان ادامه داره اگه خوشتون اومد ادامش ميدم.... اگه نه ببخشيد ديگه...فعلا.