الأمن في النوافذ  لمحة سريعة  
» مشاكل وحلول  » المعلومات التقنية الحواسيب

 

كلمة أمن كلمة واسعة في معانيها لكن لها أساس موحد بين جميع أصولها .
كلمة أمن تعني الإبتعاد قدر الإمكان عن المشاكل الناجمة عن تصرفات غير متوقعة وغير مرغوبة في نظام التشغيل , مما يجعل نظام التشغيل مستتب وذو كفائة وموثوقية عالية .

نظام التشغيل وندوز يضم مزايا أمن عديدة وكثيرة جدا مبيته فيه من الأساس مما يجعل من إدارتها بشكل سليم عملية شاقة وبشكل كبير .
للأمن نواحي عديدة في وندوز من أهمها :
الوصول الآمن ولكل شيء تقريبا بدء من صلاحيات الوصول لتشغيل Thread أو Process جديد من قبل مستخدم معين وحتى الوصول لتشغيل ملفات في أي دليل في نظام التشغيل , مرورا بإنشاء كائنات Mutex أو كائنات النواة Kernel بشكل عام وحتى سماحية الوصول لجهاز آخر عبر الشبكة وتقنيات الخاطب بأنواعها من أنابيب مسماة ومجهولة Pipes وحتى تشغيل الخدمات Services في نظام التشغيل .

مايحدد إمكانية مستخدم معين من تشغيل أو إستحداث شيء من أي من أنواع الكائنات التي تطبق عليها سياسات الأمن في وندوز هو معرف المستخدم SID المقترن معه بشكل مباشر .
معرف SID هو معرف بصيغة S-R-I-S-S
حيث I هي رقم من 48 بت , S التي تلي I رقم من 32 بت وكمثال على معرف أمن SID مرتبط بإسم مجموعة معينة نأخذ مجموعة Evreyone المعروفة بمعرف SID S-1-1-0 , وحساب Localsystem معرف SID الخاص به هو S-1-5-18 .

لكن بماذا تفيد هذه المعرفات ؟ معرفات SID هي حجر أساس الأمن في وندوز , حيث أن كل الصلاحيات التي يمكن تطبيقها متدرجة في السماحية وعدم السماحية وبالنسبة للمستخدمين , سواء كانو على نفس الجهاز أو على جهاز في الشبكة بحساب في مجموعة Network أو في Domain Controller بحساب مستخدم من Active Directory أو حتى Remote Account .

يمكن أن تمنع المستخدمين بأنواعهم من أداء نشاطات معينة في نظام التشغيل بطبيق سياسات ACL على الكائنات التي تريد حظرها أو إعطاء صلاحيات لها .
ACL وهو Access Control List عبارة عن مداخل أو أجزاء داخلية كل منها يسمى ACE Access Control Entries, وكل ACE يضم صلاحيات معينة وهي بطول 32 بت مقترنة بمعرف SID معين.
الصلاحيات التي تطبق على الكائنات كثيرة منها Read Permission و write Permission و Take Owner Ship و Full Control وغيرها , مما يمكن أن يطبق على أنواع الكائنات المختلفة .
مثلا حساب مستخدم من مجموعة Guest مثلا لايمكنه بشكل إفتراضي أن يقوم بعمليات تعديل على مجلد في نظام التشغيل , ولايمكنه أن يعدل في سجل نظام التشغيل Registry , ولايمكنه أن يشغل تطبيقات إدارة لوندوز أيضا ك mmc بشكل إفتراضي مالم تغير صلاحيات المجموعة .

نظام التشغيل نفسه يستخدم في فحص وتعيين أنواع الصلاحيات المختلفة دوال API مبيتة في نظام التشغيل , إنشاء مستخدمين بحسابات ومعرفات SID جديدة وحتى معرفة وإستخراج كل أنواع المجموعات وأعضاء هذه المجوعات تستخدم دوال API , التحكم بإدارة الأوصياء والصلاحيات Polices في بيئة تخدم Active Directory تستخدم دوال وطرق من واجهات COM مبيتهة في نظام التشغيل , التشفير وفك تشفير المستندات المبيت في نظام التشغيل يستخدم أيضا دوال API مبيتة في نظام التشغيل .

بالطبع يمكنك إستخدام أي من هذه المجموعات لإدارة برامجك لكي تتفاعل مع نظام التغشيل وبشكل آمن بدون مفاجآت وسنتناول بشكل سريع هذه المجموعات ويمكن إستخدام أي منها بدون مشاكل في برامجك الخاصة , لكن بشرط فهم البنية التحتية اللازمة لمفهوم الأمن في وندوز .

1)مجموعة دوال NetAPI : وهي مجموعة دوال تسمح لك بإنشاء وإدارة مستخدمين على نظام التشغيل وندوز , سواء مستخدمين محليين أو في Domain Controller , حيث أن المستخدمين في شبكات WorkGroup يمكن إعتبارهم من النوع Local .
مجموعة دوال NetAPI موجودة في ملف netapi32.dll ويمكن ربطها وقت التطوير بشكل ستاتكي مع المكتبة netapi32.lib , وتصريح الدوال موجود في ملف الرأس lm.h .

دوال NetAPI تبدأ بالبادئة Net دائما أمثال

CODE

NET_API_STATUS NetLocalGroupAdd )
     LPCWSTR   servername,
     DWORD    level,
   LPBYTE   buf,
 LPDWORD  parm_err OPTIONAL


وهي لإنشاء مجموعة جديدة كمجموعة Administarator مثلا ونحدد صلاحياتها البارامتر buf .
كمثال لدالة إنشاء مستخدم جديد في النظام لمجموعة معينة :
 

CODE

NET_API_STATUS NetUserAdd )
   IN  LPCWSTR     servername OPTIONAL,
   IN  DWORD      level,
   IN  LPBYTE     buf,
 OUT LPDWORD    parm_err OPTIONAL


ولمجموعة NetAPI دوال وبنى كثيرة تتحكم في كل شيء تقريبا , ويمكن مراجعة الرابط للفائدة :
http://msdn.microsoft.com/library/default....p_functions.asp

2)مجموعة واجهات ADSI إختصارا ل active Directory Services Interface وهي واجهات لإدارة الكائنات والصلاحيات من على شبكة تخدم Domain Controller .
ربما تكون قد لاحظت أن هناك مشكلة قد تنجم عند إستخدام دالات NetAPI في حال كنا في شبكة تضم Active Directory حيث أنه يجب أن تخزن حسابات المستخدمين الجدد ويسري مفعولها من على ال Domain Controller لتأخذ مكانها ويستفاد من هذه الحسابات من على أي حساب في الشبكة .
في هذه الحال تتدخل دوال NetAPI بالإستدعاء المطلوب لواجهات ADSI , والعكس بالعكس أيضا في حال طبقت طرق ADSI على جهاز محلي فأن ال Polices التي ستطبق ستطبق على مستوى المستخدمين المحليين فقط .
للمزيد :
http://msdn.microsoft.com/library/default....i/iadsgroup.asp

3) دالات LSA وهي دوال خاصة لإعطاء إمتيازات أساسية معينة بعدد 37 إمتياز تقريبا حتى نسخة Windwos 2000 في نظام التشغيل ,
الإمتيازات الخاصة يمكن أن نقول أنها تفيد في نجاح إستدعاء أنواع دوال معينة تحتاج لإمتيازات لإجراءها . مثلا الدالة InitiateSystemShutDown لنجاح إستدعاءها يجب أن يمتلك المستخدم إمتياز عمل ShutDown للجهاز , وهي Policy يمكن تعطيلها بالنسببة لمستخدم من على جهاز محلي أو حتى على Domain Controller .
نوع آخر من الإمتيازات وهو حق إمتياز عمل Debugging للبرامج حيث أن ال Debug ليس إلا تشغيل Process من Process أساسي بحيث يصبح مجرد Thread في ال Process الأساسي وتستلم أحداث البرنامج المختبر "بفتح الباء " في حلقة نظام البرنامج المختبر " بكسر الباء" , حيث الفكرة الأساسية في عمل برامج Debugging هي إستدعاءها من دالة CreateProcess بتمرير بارمتر DEBUG_ONLY_THIS_PROCESS ليعمل كThread في النهاية .
نفي حق الوصول Debug Programs لايظهر زر لعمل Debug في حال تعطل أي برنامج في نظام التشغيل , طبعا بعد وجود برنامج Debugger في نظام التشغيل .
مثال على دوال LSA للإمتيازات :
 

CODE

NTSTATUS LsaOpenPolicy PLSA_UNICODE_STRING SystemName, PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
 ACCESS_MASK DesiredAccess,
 PLSA_HANDLE PolicyHandle

للمزيد من التفاصيل :
http://msdn.microsoft.com/library/default....aopenpolicy.asp

4) الوصول وحقوق الوصل للكائنات التي تحدثنا عنها في البداية , ونأخذ كمثال بسيط حقوق الوصول للملفات والمجلدات في وندوز تستخدم مجموعة دوال ببادئة Set أو Get وهي قليلة لكنها مرنة وتعمل على جميع أنواع ال objects .
وفي المدخل Security في خصائص كل مجلد أو ملف يعمل تحت نظام ملفات NTFS سنجد صور كالتالي :

وهي توضح المدخل Security , وفي داخله يوجد المستخدمون بمعرفاتهم SID ولكل منهم سياسات وصول ACE خاصة بكل منهم , وهذه ال ACEs موجودة في ACL المجلد وهي البيانات الظاهرة في يمين المدخل Security
فمثلا في حال أردنا أن نستلم ACL خاص بملف معين لنعرف الإمتيازات المعطاة للملف ونتأكد من إمكانية قراءة الملف أو الكتابة فيه أو أي كان , علينا أن نستدعي الدالة :

CODE

DWORD GetSecurityInfo)
HANDLE  hHandle,SE_OBJECT_TYPE objType,
SECURITY_INFORMATION secInfo,
PSID     *ppsidOwner,
PSID     *ppsidGroup,
PACL   *ppDACL,
PACL    *ppSACL,
PSECURITY_DESCRIPTOR  *ppSecurityDescriptor;(


سيتم إستلام موصف الأمن في البارامتر الأخير ppSecurityDescriptor , ويتم إستلام DACL وال SACL الخاصين بالملف في البارمترين ppDACL و ppSACL , وسيتم إستلام معرفات SID للمجموعة ومالك الملف في المتغيرين ppsidOwner و ppsidGroup , طبعا كل هذا بعد تمرير HANDLE للملف المطلوب , أو تمرير إسم الملف في دالة محملة بتغيير المتغير الأول لتستلم سلسلة UNICODE لمسار الملف .
للمزيد :
http://msdn.microsoft.com/library/default....ecurityinfo.asp

هذه معلومات خفيفة وسريعة لنتعرف على كيف يدير نظام Windows الأمن الداخلي فيه , وسنتناول المرة القادمة دوال التشفير في نظام التشغيل بحول الله .
المراجع :
كتاب Server Side Application Programming ل جيفري ريتشر وجايسون كلارك .
كتاب Debugging Application لجون روبنز
msdn.microsoft.com

Free Counters from SimpleCount.com


جميع حقوق النشر محفوظة لموقع شبكة ابن الصحراء الدليل المتكامل