PDA

View Full Version : امنیت برنامه



mahdidabaghi
چهارشنبه 25 خرداد 1390, 12:55 عصر
با سلام خدمت دوستان
من میخواستم روی دیتابیس خودم تو اس کیو ال 2005 یه پسورد بذارم تا کاربری که یه کم اس کیو ال بدونه نتونه راحت مقادیر table هام و هر چیز دیگه تو دیتابیسمو تغییر بده
ممنون میشم اگه منو راهنمایی کنین چجوری میتونم رو دیتابیس خودم یه رمز بذارم(منظورم تو محیط خود اس کیو اله)

Nima NT
چهارشنبه 25 خرداد 1390, 13:57 عصر
پسورد گذاری که نمیدونم ولی من خودم یه یوزر ایجاد میکنم ( در بخش users در Database ) و برای اون پسورد میذارم و نوع ورودی به SQL رو به حالت user mode میذارم ، اینطوری حتما" باید پسورد یوزر وارد بشه تا بشه وارد سیستم شد.

علیرضا حسن زاده
چهارشنبه 25 خرداد 1390, 18:03 عصر
اینطوری حتما" باید پسورد یوزر وارد بشه تا بشه وارد سیستم شد
اشتباهه! در این حالت هم میشه بدون یوزر و پسورد وارد شد
در مورد رمز گذاشتن برای دیتابی SQL تا جایی که می دونم امکان نداره؛ بهترین کار استفاده از Hashing یا کد گذاری فیلدهای حساس دیتابیس هست
برای اینکه بدونید هر کسی میتونه راحت به دیتابیس شما دسترسی داشته باشه حتی با روشی که آقای نیکجو فرمودن به راحتی می تونید دیتابیس رو کپی کنید و دریه سیستم دیگه Attach کنید به این ترتیب می تونید محتوای دیتابیس رو ببینید و رمز گذاری به صورتی که شما می خواین انجام نمیشه

Nima NT
چهارشنبه 25 خرداد 1390, 20:47 عصر
موردی رو که بنده عرض کردم در حالت استفاده نرم افزاری بود که فکر میکنم درست هستش ولی در مورد خود manager مربوطه به sql server اطلاعی ندارم یعنی تست نکردم.

S_VB.max
پنج شنبه 26 خرداد 1390, 10:23 صبح
بهترین کار استفاده از Hashing یا کد گذاری فیلدهای حساس دیتابیس هست
چطوری فیلدهای دیتابیس را میشه کد گذاری کرد؟ اگه در این مورد راهنمایی کنید ممنون میشم

علیرضا حسن زاده
پنج شنبه 26 خرداد 1390, 13:31 عصر
فیلدهای دیتابیس رو با روش های مختلفی میشه رمزگذاری کرد و در حالت کلی دو روش وجود داره روش اول رمزگذاری هایی هستن که حالت برگشت پذیر دارن یعنی می تونید با داشتن کلید عبارت رمز شده رو به حالت اولیه برگردانید در حالت دوم این کار امکان پذیر نیست و برگشت به حالت اول وجود نداره(از حالت دوم معمولا برای چک کردن اطلاعاتی مثل پسورد و ... میشه استفاده کرد)
حالا به خود شما و اطلاعاتتون بستگی داره که از چه روشی استفاده کنید ولی اگه اطلاعاتی در مورد روشهای کد گذاری ندارید می تونید دنبال اطلاعاتی در مورد روش های AES، MD5 و ... بگردین(تو خود سایت هم وجود داره نمونه کد رو هم می تونید از بخش 1001 نکته یا همون چند تا تاپیک بالای تالار پیدا کنید) می تونید از روش ابداعی خودتون هم استفاده کنید مثلا داده ها رو XOR کنید یا خیلی کارهای دیگه که فقط خودتون می تونید اطلاعات رو به حالت اول برگردونید
این طوری اگه کسی به دیتابیس شما هم دسترسی داشته باشه نمیتونه از اطلاعات اون استفاده کنه مگر اینکه روش کد گذاری شما رو به نحوی بفهمه که فهمیدن روش کد گذاری هم خودش بحث مفصلیه

FastCode
پنج شنبه 26 خرداد 1390, 13:34 عصر
ROFL
سلام.

میدونید یاد چی می افتم؟
وزارت دارایی برای این که یک نرم افزار حسابداری رو تایید کنه یک شرط عمده داره.
"بعضی از چیزها رو فقط بتوان با سند اصلاحی درست کرد.مثل چک برگشتی و ...."
برای یک مشتری شرط اصلی اینه که:
کاربر نتونه هر کاری بکنه ولی خودش بتونه.
برای کارمند
معمولاً اصلاً نمیفهمه چی هست ولی وقتی باز باشه راحتتره.
برای برنامه نویس اینه که
بتونه خودش تصمیم بگیره برنامه رو با چه کانفیگی نصب کنه.

بزارید دقیق براتون توضیح بدم:

۱.فرض کنید بخواهیم دیتابیس رو باز بزاریم:
دارایی حال نمیکنه.برنامتون تایید نمیشه.
مدیر هم خوشحال نیست.
کارمند احساس راحتی میکنه.
نوشتنش از همه حالتها سادهتره ولی خوتون هم یک موقع هایی وجدان درد میگیرید که چرا منشی میتونه موجودی صندوق رو تغییر بده.
راه حل:Copy Paste

۲.فرض کنید با مشخصات کاربر محدود کنیم.یعنی User در sql
متاسفانه دارایی فکر میکنه این روش درسته
یکم تنظیمش سخته مخصوصاً اگر مدیر بخواهد از داخل برنامه permission ها رو alter کنه و برنامه از کار نیافته.واقعاً سخته.
مدیر خیلی حال میکنه که همه رمز جدا دارن.فکر میکنه آخر امنیته.
کاربر براش خیلی تفاوت نداره ولی همیشه چشمش به صفحه کلید ه رئیسه که ببینه چی مینویسه.
راه خل:Copy Paste

۳.فرض کنید کل دیتابیس رو رمزنگاری کنیم.
فکر میکنم دارایی تایید نمیکنه.احتمالاً دیگه اینقدر حالیشون هست.بز که نیستن.
مدیر نمیفهمه چیه.ولی اگر زبونتون چرب باشه ممکنه خیلی خوشش بیاد.پشتک وارو هم بزنه.
کارمند هم از مدیر بدتر.
یکم فکر کردید که رمزش رو کجا نگه میدارید؟
راه حل:فقط باید رمز پیدا بشه که کار سختی نیست.اصلاً سخت نیست.آقای نیکجو براتون ۵ دقیقه ای در میارن.
البته برای خوندن اطلاعات راه زیاده.مثلا اینکه چون نه شما و نه مشتری پول certificate نمیدین اطلاعات رو میشه sniff کرد.

۴.فرض کنید که دیتابیس رو یک جوری طراحی کردیم که با دستورات sql به این سادگی نشه باهاش کار کرد.
اصلاً به این مورد فکر نکنید.
هر روز مشتری هاتون زنگ میزنن فحش میدن که آقای X, برنامه وقتی مشتری یک چک در جریان وصول داره و تعداد کمپوت های مرجوعی تاریخ گذشتش بیشتر از منفی تعداد موجودی ه که الان منفیه موقع نشون دادن بدهی مشتری خطا میده.
این مورد رو بنده چند بار در برنامه های مختلف حل کردم.راه حلش اگر امکانات کافی نداشته باشین خیلی سخته. ولی نوشتن برنامش فقط از دست یک احمق بر میاد چون باید بی خیال چیزی به اسم Normalization بشه.

۵.حالت پنجم اینه که هم از User استفاده کنید و هم دیتابیس رو رمزنگاری کنید و دسترسی Admin به کاربر ندید. BootLoader رو ببندید و FireWall و بساط مربوطه رو راه اندازی کنید.یک قفل گنده هم بزارید Background ه Desktop ه ویندوز و بگید "جیززه.کسی دست نزنه."
در این حالت به جز جیب مدیر همه راضی هستن.
به این حالت میگن jail.
ولی چون متاسفانه شما با سیستم عامل ویندوز کار میکنید و خبری از AIX نیست, چیزهایی مثل :
http://downloadsquad.switched.com/2010/02/08/17-year-old-security-flaw-in-ntvdm-makes-the-dos-prompt-an-enterprise-nightmare/
و هزاران مورد دیگه اخبار خوبی برای برنامه شما نیستن.
طرز کارشون هم راحته.

S_VB.max
پنج شنبه 26 خرداد 1390, 15:02 عصر
فیلدهای دیتابیس رو با روش های مختلفی میشه رمزگذاری کرد و در حالت کلی دو روش وجود داره روش اول رمزگذاری هایی هستن که حالت برگشت پذیر دارن یعنی می تونید با داشتن کلید عبارت رمز شده رو به حالت اولیه برگردانید در حالت دوم این کار امکان پذیر نیست و برگشت به حالت اول وجود نداره(از حالت دوم معمولا برای چک کردن اطلاعاتی مثل پسورد و ... میشه استفاده کرد)
حالا به خود شما و اطلاعاتتون بستگی داره که از چه روشی استفاده کنید ولی اگه اطلاعاتی در مورد روشهای کد گذاری ندارید می تونید دنبال اطلاعاتی در مورد روش های AES، MD5 و ... بگردین(تو خود سایت هم وجود داره نمونه کد رو هم می تونید از بخش 1001 نکته یا همون چند تا تاپیک بالای تالار پیدا کنید) می تونید از روش ابداعی خودتون هم استفاده کنید مثلا داده ها رو XOR کنید یا خیلی کارهای دیگه که فقط خودتون می تونید اطلاعات رو به حالت اول برگردونید
این طوری اگه کسی به دیتابیس شما هم دسترسی داشته باشه نمیتونه از اطلاعات اون استفاده کنه مگر اینکه روش کد گذاری شما رو به نحوی بفهمه که فهمیدن روش کد گذاری هم خودش بحث مفصلیه

اما چطوری می توان ساختار دیتابیس را رمزگذاری کرد با این روشی فقط اطلاعات داخل دیتابیس رمزی میشن

حتما از WITH ENCRYPTION برای view و یا برای stored procedure استفاده کردید با این دستور دیگه نمیشه به محتوای تمام روال های ذخیره شده و View ها دسترسی پیدا کرد اما چطوری می توان جدولها و دیاگرام ها را به عبارتی تمام ساختار دیتابیس را رمزگذاری کرد ؟

FastCode
پنج شنبه 26 خرداد 1390, 16:07 عصر
WITH Encryption فقط یک کار انجام میده.
بعد از ساخت SP یا view, سورسش رو از بین میبره.
شما منظورت اینه:
http://technet.microsoft.com/en-us/library/bb934049.aspx
من هم در پست قبلی منظورم همین بود.

FastCode
پنج شنبه 26 خرداد 1390, 16:27 عصر
فیلدهای دیتابیس رو با روش های مختلفی میشه رمزگذاری کرد و در حالت کلی دو روش وجود داره روش اول رمزگذاری هایی هستن که حالت برگشت پذیر دارن یعنی می تونید با داشتن کلید عبارت رمز شده رو به حالت اولیه برگردانید در حالت دوم این کار امکان پذیر نیست و برگشت به حالت اول وجود نداره(از حالت دوم معمولا برای چک کردن اطلاعاتی مثل پسورد و ... میشه استفاده کرد)
حالا به خود شما و اطلاعاتتون بستگی داره که از چه روشی استفاده کنید ولی اگه اطلاعاتی در مورد روشهای کد گذاری ندارید می تونید دنبال اطلاعاتی در مورد روش های AES، MD5 و ... بگردین(تو خود سایت هم وجود داره نمونه کد رو هم می تونید از بخش 1001 نکته یا همون چند تا تاپیک بالای تالار پیدا کنید) می تونید از روش ابداعی خودتون هم استفاده کنید مثلا داده ها رو XOR کنید یا خیلی کارهای دیگه که فقط خودتون می تونید اطلاعات رو به حالت اول برگردونید
این طوری اگه کسی به دیتابیس شما هم دسترسی داشته باشه نمیتونه از اطلاعات اون استفاده کنه مگر اینکه روش کد گذاری شما رو به نحوی بفهمه که فهمیدن روش کد گذاری هم خودش بحث مفصلیه
مطمئنی؟
تا حالا با دیکامپایلر کار کردی؟فکر میکنی چنین روشی حتی اگر کد native باشه از دست قولهایی مثل IDA و Reflector جون سالم به در میبره.من که اینطور فکر نمیکنم.

از نظر تئوری رمز نگاری اطلاعات در یک سیستم برای جلوگیری از دسترسی به اطلاعات در همون سیستم غیر ممکنه.
اگر میخواهی مطمئن بش یک پیغام خصوصی به آقای نیکجو بده که همینجا برات توضیح بده.
من خیلی توی توضیح دادنش وارد نیست.ولی میدونم که این مطلب کاملاً اثبات شده ودقیق هست.

mahdidabaghi
پنج شنبه 26 خرداد 1390, 17:51 عصر
دم همه دوستان گرم
فقط اگه میشه یکم زیر دیپلم تر توضیح بدین ممنون میشم

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

علیرضا حسن زاده
سه شنبه 31 خرداد 1390, 12:00 عصر
مطمئنی؟
تا حالا با دیکامپایلر کار کردی؟فکر میکنی چنین روشی حتی اگر کد native باشه از دست قولهایی مثل IDA و Reflector جون سالم به در میبره.من که اینطور فکر نمیکنم.

از نظر تئوری رمز نگاری اطلاعات در یک سیستم برای جلوگیری از دسترسی به اطلاعات در همون سیستم غیر ممکنه.
اگر میخواهی مطمئن بش یک پیغام خصوصی به آقای نیکجو بده که همینجا برات توضیح بده.
من خیلی توی توضیح دادنش وارد نیست.ولی میدونم که این مطلب کاملاً اثبات شده ودقیق هست.

اینکه شما بتونی به کلید یه الگوریتم رمز دسترسی داشته باشی یا به هر روشی با دیکامپایلر و ... بخوای اونو بدست بیاری مشکلی هست که تو هر نرم افزاری می تونه باشه و باید با روش های محافظتی تا حد امکان از کلید محافظت بکنید به نظر شما کسایی که از قفل های سخت افزاری استفاده می کنن چیکار میکنن یا اصلا یه قفل سخت افزاری چطوری کاری میکنه؟ اکثر موارد یه کلید داره که اطلاعات رو توسط اون رمز کردن و اطلاعات دیگه رو مثل کلید های برنامه و ... تو قفل ذخیره کردن (البته در این حالتی که گفتم و روش های دیگه ای هم استفاده میشه)
این رو هم در نظر داشته باشید: تا زمانی که کلید الگوریتم رمز تو برنامه ذخیره شده امکان دستیابی به اون وجود داره البته نه برای هرکسی و با هر سطح توانایی واگه خوب محافظت شده باشه افراد کمی هستن که بتونن کلید رو بازیابی کنن پس شما اون افراد کم رو در نظر نگیرید و برنامه رو برای باقی افراد محافظت کنید معمولا جواب میده مگر اینکه نرم افزار خیلی گران قیمتی باشه که افراد بخوان برای کرکش اقدام کنن
البته جای این بحثا تو این تاپیک نیست و باید تو تاپیک ویژه بحث بشه تا اساتید هم بتونن ببینن و جواب بدن
برای دوستمون هم که تاپیک رو ایجاد کردن بگم که اگه بخوان اطلاعات رو رمز کنن باید کلید و الگوریتم رمز گذاری رو تا حد امکان محافظت کنن

FastCode
دوشنبه 20 تیر 1390, 01:15 صبح
اینکه شما بتونی به کلید یه الگوریتم رمز دسترسی داشته باشی یا به هر روشی با دیکامپایلر و ... بخوای اونو بدست بیاری مشکلی هست که تو هر نرم افزاری می تونه باشه و باید با روش های محافظتی تا حد امکان از کلید محافظت بکنید به نظر شما کسایی که از قفل های سخت افزاری استفاده می کنن چیکار میکنن یا اصلا یه قفل سخت افزاری چطوری کاری میکنه؟ اکثر موارد یه کلید داره که اطلاعات رو توسط اون رمز کردن و اطلاعات دیگه رو مثل کلید های برنامه و ... تو قفل ذخیره کردن (البته در این حالتی که گفتم و روش های دیگه ای هم استفاده میشه)
این رو هم در نظر داشته باشید: تا زمانی که کلید الگوریتم رمز تو برنامه ذخیره شده امکان دستیابی به اون وجود داره البته نه برای هرکسی و با هر سطح توانایی واگه خوب محافظت شده باشه افراد کمی هستن که بتونن کلید رو بازیابی کنن پس شما اون افراد کم رو در نظر نگیرید و برنامه رو برای باقی افراد محافظت کنید معمولا جواب میده مگر اینکه نرم افزار خیلی گران قیمتی باشه که افراد بخوان برای کرکش اقدام کنن
البته جای این بحثا تو این تاپیک نیست و باید تو تاپیک ویژه بحث بشه تا اساتید هم بتونن ببینن و جواب بدن
برای دوستمون هم که تاپیک رو ایجاد کردن بگم که اگه بخوان اطلاعات رو رمز کنن باید کلید و الگوریتم رمز گذاری رو تا حد امکان محافظت کنن
پست قدیمیه.ولی جواب میدم.
همون کلید هم راه داره.
راه سادش اینه که اطلاعات عبور کرده از پورت usb/rs232 رو بخونید.

از نظر تئوری امکان ندارن که بتوان کاربر یک سیستم را از دسترسی به اطلاعات درون همان سیستم منع کرد.امکان ندارد.ندارد.
مدیران بخش امنیت هم ۱۰۰۰ بار همین جمله و مشتقات و اضافات و کسورات و ملحقات و توضیحاتش رو برای همه توضیح دادن.

علیرضا حسن زاده
دوشنبه 20 تیر 1390, 12:08 عصر
همون کلید هم راه داره.
من هم نگفتم امکان نداره

راه سادش اینه که اطلاعات عبور کرده از پورت usb/rs232 رو بخونید.
همین راه ساده ای هم که می گین به این سادگی ها نیست خیلی هنوز بلد نیستن با پورت USB ارتباط برقرار کنن چه برسه به اینکه بخوان براش ....

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

mahdidabaghi
چهارشنبه 16 شهریور 1390, 15:31 عصر
سلام
شرمنده من يه مدتي سربازي بودم
ولي تو اين مدت جوابمو واسه اينكه كاربران ديگه به تيبل هام نتونن دسترسي داشته باشن نگرفتم
ممنون ميشم راهنماييم كنين

mahdidabaghi
شنبه 19 شهریور 1390, 13:55 عصر
یعنی یه جوون مرد پیدا نمیشه جواب منو بده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟