IRCAR201406217
تاريخ: 26/3/93
1- مقدمه
SQL Server ويژگيهاي زيادي دارد كه ايجاد برنامههايي با پايگاه داده امن را پشتيباني ميكند. صرفنظر از نسخه SQL Server، ملاحظات امنيتي معمول مانندسرقت دادهها و جامعيت دادهها در اين نرمافزار در نظر گرفته ميشود. درصورتيكه دادهها محافظت نگردند، ممكن است به علت دستكاري و تغييرات غيرعمدي يا خرابكارانه پاك شوند يا تغيير يابند و ارزش خود را از دست بدهند. بعلاوه، اغلب بايد مسائلي مانند ذخيرهسازي صحيح اطلاعات محرمانه نيز مورد توجه قرار گيرد.
هر نسخه از SQL Server مانند هر نسخه از ويندوز، ويژگيهاي امنيتي متفاوتي نسبت به نسخههاي پيشين خود دارد و نسخههاي جديدتر، عملكرد بهتري نسبت به نسخههاي پيشين دارند.
اين مهم است كه درك كنيم كه ويژگيهاي امنيتي به تنهايي قادر به تضمين يك برنامه پايگاه داده امن نيستند. هر برنامه پايگاه داده از جهت ملزومات، محيط اجرا، مدل اجرا، موقعيت فيزيكي و تعداد كاربران منحصر به فرد است. ممكن است برخي برنامههاي محلي نيازمند امنيت حداقلي باشند، درحاليكه ساير برنامههاي محلي و يا برنامههايي كه بر روي اينترنت به كار گرفته ميشوند ممكن است به معيارهاي امنيتي قويتر و مانيتورينگ و ارزيابي دائم نياز داشته باشند.
ملزومات امنيتي يك برنامه پايگاه داده SQL Server بايد در زمان طراحي در نظر گرفته شود نه پس از آن. ارزيابي تهديدات در ابتداي چرخه توسعه برنامه اين فرصت را در اختيار شما قرار ميدهد كه خسارت بالقوه را در هرجايي كه يك آسيبپذيري شناسايي ميشود، كاهش دهيد.
حتي اگر طراحي اوليه يك برنامه بيعيب و نقص باشد، باز هم تهديدات جديد ممكن است در زمان بهرهبرداري از سيستم رونمايي كنند. با ايجاد خطوط دفاعي مختلف براي پايگاه داده، ميتوانيد خسارت وارد شده توسط يك نشت امنيتي را به حداقل برسانيد. نخستين خط دفاعي، كاهش سطح حمله با اعطاي مجوزهاي حداقلي و رعايت اصل حداقل دسترسي است.
در قسمت قبلي مجموعه مقالات امنيت SQL Server، به نماي كلي امنيت SQL Server، انواع سناريوهاي احراز هويت در SQL Server، تفويض اختيار و مجوزها در SQL Server، و رمزگذاري دادهها و امنيت يكپارچه CLR پرداختيم. اين بخش از اين مجموعه مقالات به طور مختصر به سناريوهاي امنيت برنامه كاربردي در SQL Server ميپردازد.
2- سناريوهاي امنيت برنامه كاربردي در SQL Server
هيچ راه صحيح يكتايي براي ايجاد يك برنامه كلاينت امن SQL Server وجود ندارد. هر برنامه از نقطه نظر ملزومات، محيط به كارگيري و جمعيت كاربران منحصر به فرد است. ممكن است برنامهاي كه در ابتداي به كار گيري منطقاً امن است، در گذر زمان از امنيت آن كاسته شود. چرا كه پيشبيني تهديداتي كه در آينده ظاهر خواهند شد با هر دقتي غيرممكن است.
براي SQL Server به عنوان يك محصول، نسخههاي زيادي عرضه شده است تا جديدترين ويژگيهاي امنيتي را كه توسعه دهندگان را قادر به ساخت برنامههاي امن پايگاه داده ميكند، در خود جاي دهد. البته امنيت در يك جعبه قرار نميگيرد، بلكه نياز به كنترل و بهروز رساني مداوم دارد.
2-1- تهديدات معمول
توسعه دهندگان نياز دارند تهديدات امنيتي، ابزارهاي ارائه شده براي مقابله با آنها، و نحوه جلوگيري از حفرههاي امنيتي كه توسط خودشان ايجاد ميشود را درك كنند. امنيت ميتواند به عنوان يك زنجير در نظر گرفته شود كه شكستگي هريك از حلقههاي آن، استحكام كل زنجير را كاهش ميدهد. فهرست زير شامل برخي تهديدات امنيتي معمول است كه جزئيات و نحوه مقابله با هريك مورد بررسي قرار ميگيرد.
2-1-1- تزريق SQL
تزريق SQL روالي است كه طي آن، كاربر خرابكار دستورات Transact-SQL را به جاي ورودي معتبر وارد مينمايد. درصورتيكه اين ورودي به طور مستقيم و بدون اعتبارسنجي به سرور ارسال گردد و درصورتيكه سرور بهصورت ناآگاهانه و غيرعمدي اين كد تزريق شده را اجرا نمايد، آنگاه اين حمله پتانسيل تخريب يا آسيب زدن به دادهها را داراست. شما ميتوانيد حملات تزريق SQL به سرور را با استفاده از روالهاي ذخيره شده و دستورات پارامتري، اجتناب از SQL دايناميك و محدودسازي مجوزها براي تمامي كاربران، خنثي نماييد.
2-1-2- افزايش امتياز حق دسترسي
حملات افزايش امتياز حق دسترسي زماني اتفاق ميافتند كه يك كاربر قادر باشد امتيازات و حقوق دسترسي يك حساب كاربري قابل اعتماد (trusted) مانند مالك پايگاه داده يا administrator را به خود تحصيص دهد. همواره حسابهاي كاربري را با حداقل حق دسترسي ايجاد كنيد و صرفاً مجوزهاي مورد نياز را به هر كاربر تخصيص دهيد. اين كار درصورت وقوع حمله، حجم خرابي را محدود ميكند. در هنگام انجام فعاليتهايي كه نياز به مجوزهاي بيشتري دارند، فقط در طول مدت انجام آن فعاليت از ثبت روال (procedure signing) يا تغيير هويت (impersonation) استفاده كنيد. شما ميتوانيد روالها را توسط گواهينامهها ثبت كرده يا از تغيير هويت براي تخصيص موقتي مجوزها استفاده نماييد.
2-1-3- پويش كردن و مشاهده هوشمند
يك حمله پويش (probing) ميتواند از پيغامهاي خطاي توليد شده توسط برنامه براي جستجوي آسيبپذيريهاي امنيتي استفاده كند. مديريت خطا را در تمامي كد خود پيادهسازي نماييد تا بدين وسيله از بازگرداندن اطلاعات خطاي SQL Server به كاربر نهايي جلوگيري كنيد.
2-1-4- احراز هويت
يك حمله تزريق رشته اتصال به پايگاه داده ميتواند هنگام استفاده از login هاي SQL Server اتفاق بيفتد، به شرطيكه يك رشته اتصال مبتني بر ورودي كاربر در زمان اجرا ساخته شود. درصورتيكه اين رشته اتصال در مورد زوجهاي كلمات كليدي معتبر چك نشود، مهاجم ميتواند كاراكترهاي اضافي را وارد كند و به طور بالقوه به دادههاي حساس يا ساير منابع سرور دسترسي پيدا كند. هرجا كه ممكن است از احراز هويت ويندوز استفاده كنيد. درصورتيكه مجبور هستيد از login هاي SQL Server استفاده كنيد، از SqlConnectionStringBuilder براي ساخت و اعتبارسنجي رشتههاي اتصال در زمان اجرا استفاده نماييد.
2-1-5- كلمات عبور
علت موفقيت بسياري از حملات اين است كه يك فرد نقوذگر قادر بوده است كلمه عبور يك كاربر داراي امتياز و حق دسترسي بالاتر را به دست آورد يا حدس بزند. كلمات عبور اولين خط دفاعي شما در مقابل نفوذگرها است، بنابراين استفاده از كلمات عبور قوي و مستحكم براي امنيت سيستم شما حياتي است. سياستهاي كلمه عبور را براي احراز هويت مود تركيبي ايجاد كرده و استفاده از آن را الزام نماييد.
همواره و حتي هنگامي كه از احراز هويت ويندوز استفاده ميكنيد، يك كلمه عبور قوي و مستحكم به حساب كاربري sa تخصيص دهيد.
- 8