امنیت در برنامه های تحت شبکه
سلام
من یه برنامه تحت شبکه نوشتم و چندین شرکت برای ارائه بردم و به یه سوال هرگز نتونستم جواب بدم. "برای امنیتش کاری کردی؟" و جواب هم خیر بوده.
برنامه من به زبان دات نت نوشته شده یکسری DLL به زبان C# و یکسری به زبان VB.NET و بانک اطلاعاتی هم SQL هستش و در سرور قرار داره. مطابق معمول هر برنامه، مدیر برنامه میتونه سطح دسترسی تعریف کنه. برنامه بصورت سه لایه نوشته شده و شیوه ارتباط برنامه به بانک اطلاعاتی بواسطه DataSetها انجام میشه. اما در خصوص سوال شرکت ها راجع به امنیت برنامه، سوالم این هستش که منظورشون چیه؟
امنیت بستر شبکه که فکر میکنم باید توسط کارشناس IT و بخشی توسط مدیر بانک اطلاعاتی (DBA) انجام بشه. نکته مبهم برای من اینه که از طرف من که برنامه نویس هستم باید چه اقدامی انجام بشه. عمده عملیات ها در بانک اطلاعاتی توسط StoredProcedure ها انجام میشه و من فقط پارامترها رو مقدار دهی میکنم.
ممنون میشم دوستان کمک کنند که بتونم مفهوم امنیت رو در چنین برنامه هایی بیشتر درک کنم
نقل قول: امنیت در برنامه های تحت شبکه
سلام
شما میتونید استاندارد هایی که برای امنیت نرم افزار تدوین شدند رو مطالعه کنید و سعی در پیاده سازی ملزومات اونها داشته باشید
مثلا یکی از این استاندارد ها OWASP هست (که البته برای اپلیکیشن ها تحت وب تدوین شده در اصل ، اما نکات پایه ای در اون وجود داره که در همه اپلیکیشن ها میتونه رعایت بشه) ، میتونید با مطالعه سند فارسی شده اون که در وبسایت خودش ارائه داده اطلاعاتی کسب کنید
https://www.owasp.org/images/9/91/OW..._2_Persian.pdf
دقت کنید همه موارد این استاندارد ، در اپلیکیشن های ویندوزی وجود ندارند ، اما موردی مثل Injection که مورد اول از لیست 10 مورد آسیب پذیری مهم در سال 2017 هست ، محدود به وب نیست و شما همه جا باید این مورد مهم رو رعایت کنید.
موارد دیگری که میشه بهش اشاره کرد ، تامین امنیت ارتباطات کلاینت و سرور ، رمزنگاری اطلاعات حساس و مواردی از این قبیل هست.
این فقط یکی از انواع استاندارد ها و اسنادی هست که برای تامین امنیت نرم افزار ها تدوین شده و خدمتتون معرفی کردم
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول:
نوشته شده توسط
mmbguide
ممنون جناب آشتیانی
تو برنامه نویسی سعی کنید کدهاتون مبهم کنید و بعد به سازمان بدید این مورد کمک میکنه چون رشته اتصال تون دست کسی بیفته خطر ناک هستش ولی وقتی رشته اتصال و تمام کدها مبهم کنید توسط Smart assembly که خیلی بهتر هستش اگه dll و فایل اختصاصی دارید مبهم کنید و به مشتری بدید باز بهتر هستش. اگه از قفل سخت افزاری تحت شبکه استفاده در صورت خطر رویت شد قفل میکشید و همه کاربرها از برنامه میفتن بیرون که این مورد هم خوب هستش.
نقل قول: امنیت در برنامه های تحت شبکه
البته یک تاپیک درخصوص مبهم سازی وجود داره که من هنوز نتونستم جوابی بگیرم. دلیلش هم اینه که وقتی Referenceهای مبهم شده را به پروژه اضافه میکنم برنامه با خطا مواجه میشه ولی خود برنامه با کدهای درون خودش بدرستی کار میکنه.
اما جدای از مبهم سازی، به دنبال مفاهیمی درخصوص امنیت هستم که در سازوکار یک برنامه تحت شبکه باید رعایت بشه. مشابه مطلبی که جناب آشتیانی ارسال کردند. البته هرچیزی بدست بیارم و یا سوال داشته باشم در همین تاپیک قرار میدم که همه بتونیم استفاده کنیم.
تشکر
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول:
نوشته شده توسط
mmbguide
البته یک تاپیک درخصوص مبهم سازی وجود داره که من هنوز نتونستم جوابی بگیرم. دلیلش هم اینه که وقتی Referenceهای مبهم شده را به پروژه اضافه میکنم برنامه با خطا مواجه میشه ولی خود برنامه با کدهای درون خودش بدرستی کار میکنه.
اما جدای از مبهم سازی، به دنبال مفاهیمی درخصوص امنیت هستم که در سازوکار یک برنامه تحت شبکه باید رعایت بشه. مشابه مطلبی که جناب آشتیانی ارسال کردند. البته هرچیزی بدست بیارم و یا سوال داشته باشم در همین تاپیک قرار میدم که همه بتونیم استفاده کنیم.
تشکر
بله روش مبهم سازی مهم من با اسمارت اسمبلی مبهم کرد و برنامه هم پیامک میده، هم با کارت خوان ارتباط داره و هم با تلفن و تحت شبکه هم هستش ولی بدون هیچ مشکلی با همه Dll ارتباط داره و خطای هم بهم نمیده و برنامه بدون مشکل روی سیستم مشتری کار میکنه
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول:
نوشته شده توسط
mmbguide
البته یک تاپیک درخصوص مبهم سازی وجود داره که من هنوز نتونستم جوابی بگیرم. دلیلش هم اینه که وقتی Referenceهای مبهم شده را به پروژه اضافه میکنم برنامه با خطا مواجه میشه ولی خود برنامه با کدهای درون خودش بدرستی کار میکنه.
اما جدای از مبهم سازی، به دنبال مفاهیمی درخصوص امنیت هستم که در سازوکار یک برنامه تحت شبکه باید رعایت بشه. مشابه مطلبی که جناب آشتیانی ارسال کردند. البته هرچیزی بدست بیارم و یا سوال داشته باشم در همین تاپیک قرار میدم که همه بتونیم استفاده کنیم.
تشکر
احیانا شما اومدی تک تک dll هارو بصورت جداگانه مبهم سازی کردی؟ در این حالت احتمال خطا و اجرا نشدن برنامه خیلی زیاده، شما فقط کافیه فایل اصلی برنامه تون یعنی همون فایل exe رو توسط Smart assembly باز کنین خود smart assembly بصورت خودکار رفرنس هارو پیدا میکنه و براتون لیست میکنه
نقل قول: امنیت در برنامه های تحت شبکه
بله دقیقا. من تک تک پروژه ها (DLLها) رو مبهم کردم و بعد به پروژه اصلی به عنوان Reference اضافه کردم و در انتها پروژه اصلی رو مبهم کردم. و نکته ای که گفتید رو نمیدونستم و امتحان میکنم. ولی سوالم اینه که اگر من برای یک پروژه ای که متعلق به من نیست و نتونم DLL خودم رو جداگانه مبهم کنم پس چطوری باید اون رو به افراد دیگه ارائه کنم. ممنون
نقل قول: امنیت در برنامه های تحت شبکه
گفتم که فقط کافیه فایل Exe رو توی smart باز کنین، فایل dll شما شناسایی میشه و میتونین داخل فایل exe اصلی مدفون (merge و یا embed) و مبهمش کنید
نقل قول: امنیت در برنامه های تحت شبکه
پیرو مطلب شماره #2:
از اونجایی که سرور پروژه تنها به برنامه SQL مجهز شده، آیا لازمه که برای ایجاد ارتباط (امن و رمزگذاری شده) با SQL از تکنولوژی و یا شیوه خاصی مثل WCF استفاده بشه و یا به تنهایی بین برنامه نوشته شده در دات نت و SQL میشه الزامات ASVS (آنهایی که برای WinForm ممکن هست) رو پیاده سازی کرد؟ ممنون اگر توضیح بدید
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول:
نوشته شده توسط
mr.sirwan
گفتم که فقط کافیه فایل Exe رو توی smart باز کنین، فایل dll شما شناسایی میشه و میتونین داخل فایل exe اصلی مدفون (merge و یا embed) و مبهمش کنید
البته منظورم این هستش که من به سفارش یک برنامه نویس یک DLL براش آماده کردم و قرار از این فایل استفاده کنه و من هم میخوام DLL رو مبهم سازی کنم، ایا برای استفاده کننده دوم مشکلی پیش نمیاد. برای این مشکل راه حل چیه؟ ممنون
نقل قول: امنیت در برنامه های تحت شبکه
نقل قول:
نوشته شده توسط
mmbguide
البته منظورم این هستش که من به سفارش یک برنامه نویس یک DLL براش آماده کردم و قرار از این فایل استفاده کنه و من هم میخوام DLL رو مبهم سازی کنم، ایا برای استفاده کننده دوم مشکلی پیش نمیاد. برای این مشکل راه حل چیه؟ ممنون
سر مبهم سازی فایل Dll و استفاده ازش تو کدنویسی هنگام کدنویسی نه با مشکلی برخورد نمیکنید من خودم تمام کلاس و دستورات کاریم مبهم کردم و به پروژه ام دادم و دستورات ام میزدم میامد و کار میکرد ولی با نرم افزار که سورس میزدم ببینم کد درست حسابی بهم نشان نمیداد یعنی همه چیز نشان داد جز کدهای خودم ولی تو کدنویسی مشکلی نبود. راحت کد صدا میکردم و استفاده بدون مشکل خیالت راحت مبهم کنی بدی باز میتونه استفاده کنه ولی کدش نمیتونه ببینه چی هستش
نقل قول: امنیت در برنامه های تحت شبکه
سلام
برای تامین امنیت باید کارهای ذیل را انجام دهید :
- حتما Access Modifier ها را صحیح انتخاب کنید ترجیحا private , internal ( در غیر اینصورت با Obfuscate شدن هم قابل نفوذ است) همچنین استفاده از dll بعلت استفاده از member های public و protected یک دردسر امنیتی است اگر لازم است بعضی از کلاس های مهم را sealed کنید
- حتما با حمله Injection مقابله کنید به خصوص کارکتر سینگل کوتیشن در تکست باکس ها
- حتما ConnetionString را Encrypt کنید
- باید حتما با ابزار مناسب برنامه را Obfuscate کنید (اگر از internal و private استفاده کرده باشید نتیجه obfuscate خیلی مناسب تر است)
- در صورت مقدور hash فایل اجرایی را درون برنامه کنترل کنید
نقل قول: امنیت در برنامه های تحت شبکه
سلام
بنده پروسه Obfuscation رو جزو بحث امنیت نرم افزار به معنی اصلیش نمیدونم هیچوقت هم لزومی ندیدم به انجامش ، مفاهیم امنیت نرم افزار توی استاندارد ها تعریف شده و حدودا محدودش مشخصه.
ببینید ، مثلا شما نرم افزارتون رو باید از نرم افزارهایی که قادر به کشف رمز عبور شما هستند حفاظت کنید (برای مثال کنترل حداقل پیچیدگی رمز کاربران هنگام تنظیم و تغییر رمز و یا اعتبار سنجی کاربران سمت سرور و حتی اجرای محدودیت برای دفعات لاگین نا موفق به همراه ثبت لاگ برای تمام این مراحل) ، یا مثلا دیتای حساس شما ، اعم از کانکشن استرینگ ، اطلاعات کاربری و رمزهای عبور ، احتمالا اطلاعات مالی و ... رمز نگاری کنید.
حفظ امنیت ارتباطات بین کلاینت ها و سرور (سرویس ها) از اهمیت بالایی برخورداره که قابلیت سرقت وجود نداشته باشه (برای این منظور استفاده از SSL راه حل مطمئنی هست)
مواردی که باید رعایت بشه لیست بلندی از موارد هست که اشاره به همه اونها در حوصله این تاپیک نمیگنجه و اصلا این خودش یک شاخه ی مهم در توسعه نرم افزار هست (همون داکیومنتی که در پست قبلی پیوست کردم ، از صفحه 16 به بعد چک لیست نسبتا کاملی از اقداماتی که باید انجام بشه تا نرم افزار شما سطوح مختلف استاندارد OWASP رو پاس کنه ، ارائه شده و خوندنش میتونه کمک بسیاری بکنه)
در نهایت این بحث ، بسیار بحث گسترده ای هست که البته داخل ایران (شرکت ها / توسعه دهنده ها) اکثرا خودشون رو مقید به اعمال اون ها نمیدونن و نتیجش میشه هر از چند گاهی افشای اطلاعات کاربران و ...
در مورد پست شماره 10:
اصولا ارتباط مستقیم نرم افزار کلاینت با دیتابیس سرور راه حل خوبی نیست ، و بهتر هست نرم افزار کلاینت با یک سرویس در ارتباط باشه و نهایتا سرویس درخواست های کلاینت ها رو پاسخ بده و از طرفی سرویس با دیتابیس سرور در ارتباط باشه (البته که ارتباط سرویس و دیتابیس سرور هم باید محافظت شده باشه همونطور که بالاتر عرض شد)
جستجو با این کلید واژه ها میتونه کمک کنه
Encrypted Connections to the Database Engine
Configure SSL encryption in SQL Server
موفق باشید