در این مقاله نگاهی به پنج راهکار عملی برتر برای امنیت در زمینه برنامهنویسی متنباز خواهیم داشت. زمانی که نرمافزاری را مینویسید، احتمال استفاده از توابع امنیتی در آن بسیار بالا است. بسیاری از کتابخانههای متنباز برای کمک به شما برای اضافه نمودن امنیت وجود دارد، اما شما باید استفاده صحیحی از آنها داشته باشید. در غیر این صورت، بعدها دچار مشکلات بزرگی خواهید شد که ممکن است مشتری شما در صدر اخبار ملی قرار گیرد.
به هیچ وجه خودتان آن را انجام ندهید
این اصل به احتمال قوی مهمترین اصل در کار با امنیت است. تحت هیچ شرایطی سعی در نوشتن کد امنیتی مورد نیازتان نداشته باشید (شکل 1)، مگر این که شما یک خبره امنیتی با گواهی معتبر و تجربه بسیار زیاد باشید. باز هم تکرار میکنیم این کار را انجام ندهید! البته مطمئنا برای شروع و یادگیری نحوه نوشتن یک کد امنیتی و یادگیری از خبرگان این زمینه هیچ مانعی وجود ندارد و تا زمانی که خودتان به سطح یک خبره در این زمینه نرسیدهاید از کد امنیتی نوشته دست خودتان در محصولات خود استفاده نکنید. به جای این کار از کدهایی که توسط متخصصین امنیتی تولید و به کرات آموزده شدهاند استفاده کنید. برای مثال، اگر به مکانیزم login در سیستم خود نیاز دارید، از یک کتابخانهای که به درستی پیادهسازی شده است، استفاده کنید.
در مورد الگوریتمهای رمزنگاری چطور؟ در این مورد نیز اصل گفته شده صادق است مگر این که بخواهید یک حرفه و شغلی را به آن اختصاص دهید. الگوریتمهای رمزنگاری با استفاده از ریاضیات بسیار پیشرفته طراحی شدهاند. این الگوریتمها چیزی بیش از یک شیفت و یا درهم برهم کردن بیتها است. بنابراین، این تفکر را که شما هم میتوانید الگوریتم رمزی به قدرت و خوبی الگوریتمهای رمز مطرح ایجاد کنید از سر خود بیرون کنید، مگر این که شما به درستی و واقعا در این زمینه تعلیم دیده باشید و به اصطلاح استاد این رشته باشید (درجه دکتری و یا سالها تجربه در این زمینه). من واقعا قصد ندارم افکار جوان را در بررسی و کاوش در زمینه رمزنگاری منصرف کنم، اما اگر شما قصد فعالیت در زمینه طراحی و توسعه الگوریتمهای رمزنگاری را دارید، در قدم اول باید مطالعات خود را زیر نظر مطرحترین افکار موجود در این رشته به اتمام برسانید و آنچه که آنها یاد گرفتهاند را بیاموزید، و زمان و انرژی زیادی را صرف آن کنید.
پیام اصلی برای پروژه متنباز: از کتابخانههای معتبر استفاده کنید، سعی در ایجاد کتابخانه یا کدهای رمزنگاری موجود در آن نداشته باشید. اگر علاقهمند به ایجاد یک کتابخانه امنیتی جدید هستید، در رشتههای موجود در این زمینه به طور تخصصی و آکادمیک تحصیل کنید.
از امنیت مناسب در زمان مناسب استفاده کنید
استفاده از کتابخانههای رمزنگاری امنیتی مهم است، اما شما باید از نوع درست امنیت در زمان درست بهره بگیرید. برای مثال، برخی از الگوریتمهای رمزنگاری متقارن هستند که از یک کلید واحد برای هر دو مورد رمز کردن و ترجمه رمز مورد استفاده قرار میگیرد. الگوریتم رمزنگاری دیگر نامتقارن نام دارد که از یک کلید دو بخشی استفاده میکند: یک بخش از این کلید برای رمز و بخش دیگر آن برای ترجمه رمز مورد استفاده قرار میگیرد. رمزنگاری دیگری برای ایجاد توابع درهمساز مورد استفاده قرار میگیرد. برخی روشها از ترکیب چندین رویکرد رمزنگاری استفاده میکنند. انواع روشهای دیگر که از حوصله این بحث خارج است. زمان کافی برای تعیین نیازمندیهای خود در این زمینه اختصاص دهید.
این مورد از جمله مواردی است که برنامهنویسان زیادی در آن با شکست مواجه شدهاند و باعث ایجاد رخنههای امنیتی جدی شدهاند. به ویژه در مورد گذرواژههای رمز شده که باید با استفاده از روشهای مناسب درهمسازی و استفاده از Salt ذخیره شوند. برنامهنویسان با استفاده از روشهای نادرست امنیتی (برای مثال استفاده از رمزنگاری دوطرفه ساده که تمامی فهرست گذرواژهها با یک کلید واحد رمز میشود و با لو رفتن آن کلید همه گذرواژهها قابل بازیابی خواهند بود) عدم استفاده از salt در توابع درهمسازی باعث ایجاد خطاهایی در این زمینه میشوند. نتیجه نهایی در هر دو مورد این است که در صورتی که فایل گذرواژهها به دست کسی بیافتد، ممکن است به راحتی قادر به ترجمه تمامی آن باشد. اگر این مساله در سازمانهای بزرگ اتفاق بیافتد، باعث تولید اخبار ملی خواهد شد. (و به راحتی میتوان متصور شد که برخی از افراد شغل خود را به خاطر آن از دست بدهند). انواع مختلف روشهای امنیتی و رمزنگاری را مورد مطالعه قرار دهید و نحوه استفاده از آنها را بیاموزید.
کتابخانههای مورد اعتماد را گرفته و کامپایل کنید
کد منبع کتابخانه را فقط از سایتهای مورد اعتماد دریافت کرده و به صورت دستی کامپایل کنید. اگر کد منبع را از GitHub دریافت میکنید، مطمئن شوید که نسخه رسمی یا مجاز آن را دریافت میکنید (شکل 2). همچنین در این سایت میتوانید نظرات کاربران و باگهای گزارش شده را بخوانید. آیا کاربران از کتابخانه راضی هستند؟ آیا باگها برطرف شدهاند؟ آیا کتابخانه برای استفاده در پروژههای مقیاس بزرگ مناسب است؟ کتابخانه چندساله است؟ آیا این کتابخانه یک نسخه زود منتشر شده است که ممکن است در حال حاضر برای استفاده مناسب نباشد؟
شکل 2. از پروژههای رسمی و نه غیرمجاز، یک کتابخانه امنیتی متن باز استفاده کنید.
پس یک گام جلوتر بردارید: افراد درگیر در پروژه را پیدا کنید و گواهینامهها و اعتبارنامههای آنها را مشخص کنید. هر کسی میتواند ادعای نوشتن کد رمزنگاری داشته باشد، اما آیا شما میتوانید ممطمئن شوید که این کد به درستی الگوریتم مربوطه را پیادهسازی میکند؟ این قسمت قابل اغماض نیست. شما باید بدانید چه کسی کتابخانه را ایجاد کرده است و آیا نویسندگان کتابخانه برای این کار واجد شرایط هستند. اگر نتوانستید نویسندگان و شایستگیهای آنها را پیدا کنید به کتابخانه بعدی فکر کنید.
مستندات را دنبال کنید
کتابخانههای امنیتی خوب مستندات خوبی نیز دارند. مستندات را به دقت بخوانید و مطمئن شوید آن را کامل متوجه شدهاید. برای دنبال کردن آن، البته باید مطمئن شوید که برای شما منطقی و مفهوم باشد. اگر در مستندات به شما میگوید که این تابع برای به دست آوردن هش با استفاده از یک تابع مخصوص است، مطمئن شوید که در واقع این همان چیزی است که شما در حال انجام آن هستید. این کار همیشه ساده نیست. نگاهی به یک برنامه نمونه بیاندازید و به دقت آن را دنبال کنید تا زمانی که به طور کامل آن را متوجه شده باشید. نمونهها را کامپایل کرده و آن را بیآزمایید. در ادامه زمانی که در استفاده از کتابخانه به طور کامل تخصص یافتید، برنامه آزمایشی خودتان را بنویسید. در نهایت، بعد از این که به طور کامل نحوه استفاده از کتابخانه را آموختید، میتوانید از آن در محصول تولیداتی خود استفاده کنید.
مراقب کد خودتان باشید
بعد از این که کد خود را نوشتید، باید با چشمان کاملا باز کد خود را بازرسی کنید تا مطمئن شوید به درستی کار میکند. وقتی که یک پروژه متن باز ایجاد میکنید، این بدین معنی است که افراد زیادی را در فهرست کمک به آن قرار میدهید. در صورت امکان، از فردی از کتابخانه امنیتی برای بازبینی کد استفاده کنید، و هر نوع نصیحتی از طرف آن شخص را جدی بگیرید.
زمانی که پروژه متنبازی ایجاد میکنید که از کد امنیتی استفاده میکند، شما چالشهای مضافی دارید، به این دلیل که سایر افراد ممکن است در کد شما دستکاری ایجاد کنند. ممکن است این افراد از بهترین شیوهها استفاده نکرده و کد شما را به گونهای دستکاری کنند که باعث تضعیف آن شوند. اگرچه، شما تمایل ندارید فهرست افرادی را که قادر به دستکاری کد شما خواهند بود، محدود کنید و مسلما نمیخواهید یک هشدار در مستندات اضافه کنید و به مردم بگویید که در مورد بخش امنیتی کد اعتراضی نداشته باشید، پس بنابراین اگر به نظر کسی مشکلی در کد وجود دارد، باید آن را به عنوان یک باگ ثبت کرده و برای برطرف کردن آن در صف درخواست برای آن بماند.
جمعبندی
برای کار با امنیت باید مراقبت بیشتری داشت. مسلما شما نمیخواهید با ایجاد یک باگ باعث فاجعه شوید. گامهای ذکر شده در این مقاله را دنبال کنید اما گامهای بیشتری بردارید: تا جایی که میتوانید درباره بهترین رویکردهای امنیتی بخوانید. در این مقاله من خیلی کلی صحبت کردم؛ برای مثال اگر شما برای نگهداری نشستها، دادههای رمز شده را در یک کوکی وب ذخیره میکنید، روشهای برتر زیادی در این زمینه منتشر شدهاند. اگر شما دادههای کاربری رمز شده را که باید به سرعت قابل دسترس باشد، ذخیره میکنید، از برترین روشهای موجود در این زمینه استفاده کنید. با انجمنها در ارتباط باشید و در در امان باشید.
منبع: salam-donya