بررسي جامع اصطلاحات و مفاهيم اكتيو دايركتوري
در اين مقاله ميخوايم ساختار اكتيو دايركتوري رو بررسي كنيم و بگيم چه اجزائي داره.
نكته : يك سري از مفاهيمي كه بررسي ميكنيم مربوط به بحث Windows Internals هستن و اگر سطح بالا به نظر امدن بايد براي درك بيشترشون كتاب Windows Internals رو مطالعه بكنيد ، من هرچقد بتونم ازش ميگم كه شما نياز نداشته باشيد 🤝😁
نكته2 : اكثر اين مفاهيم بصورت منطقي بايد گفته بشه و فرض بشه و چون مثال فيزيكالي براش نيست يكم دركش سخته و به مرور با كار عملي ميتونيد دركشون كنيد پس اولش تو درك زياد سخت نگيريد
نكته3: اين مقاله با ديد امنيتي و مختص بچه هاي امنيت شبكه نوشته شده ، ولي ديد كاملي از اكتيو دايركتوري بهتون ميده
نكته4: اكثر اين مواردو شما فقط بايد بفهميد و نياز نيست حتما درك كنيد
نكته5 : هرچيزي كه براتون مبهم بود حتما بپرسيد 😉
مفاهيم مقدماتي :
Forest :
منظور از forest يه قضاييه كه ما توش بقيه چيز ها مثل دامين و ... رو قرار ميديم ، forest درواقع يك مرز امنيتي هست كه يه فضاي منطقي يا همون Logical هست براي دامين ها و بقيه اشيا در شبكه، مثلا ما در شكل بالا يه forest داريم كه سه تا دامين داره ، دامين اول كه اسمش هست apple.com ، دامين دوم كه اسمش هست sub1.apple.com و دامين سوم كه اسمش هست sub2.apple.com
Domain :
دامين هم يك فضايي هست كه ما اشيا خودمون رو توش قرار ميديم ، همون forest ولي كوچيك تر ، ما داخل forest يك يا چندين domain داريم كه داخل اون ها ما اشيا مون رو داريم
ما مفهوم parent-child يا والد و فرزندي هم داريم ، به apple.com ميگن والد يا HQ(Head Quarters) و به sub1 و sub2 ميگن فرزند ، پس ما سه تا مرض و گروه جدا داخل شبكه بالا داريم يا سه تا دامين
توي هر دامين هم ما سخت افزار ها و دارايي هاي سازمان مثل همون پرينتر و يوزر ها و فايل هارو داريم (سمت راست كادر نارنجي)
Objects :
اشيا همون منابع شبكه ما هستن ولي به صورت مجازي ، اشيا درواقع يك فايله كه حاوي يوزر ها و گروه ها ، فايل سرور ، ديتابيس سرور و... است
Domain Controller(DC) :
به سروري گفته ميشه كه اشيا داخلش باشن ، اين سرور تنظيمات active directory رو داره و گردن كلفت محسوب ميشه 😅 و سطوح دسترسي رو هم توش تعريف ميكنن
Trusts :
اگر هرچيزي داخل دامين ها بخوان باهم ارتباط برقرار بكنن بايد بينشون trust برقرار باشه ، همون اتصال خودمونه و يك لينك ارتباطي امنيتيه كه امكان و سطح دسترسي رو تعيين ميكنه (لينكاي مشكي كه خط خطين و بين دامين ها وصلن)
Organizational Units (OUs) :
يه فضاييه براي مديريت بيشتر :))) همش كه شد فضا !! جلوتر كه بريم بيشتر درك ميكنيد !! ولي همينقدر بدونيد كه به هرچيزي كه يه فضاييه براي دسته بندي كردن و گروه كردن چيزهايي كه داخل دامين داريم مثلا در داخل دامين ما چه واحد هايي داريم ؟ DC - Users - Groups و...
Sites :
سايت به معناي مكان هست ، تا حالا هرچيزي گفتيم مفهوم Logical و منطقي داشت ولي اين مفهوم Physical هست ، مثلا فكر كنيد دامين والد توي انگليس هست و دو دامنه فرزندمون در امريكا ، ما دوتا سايت داريم ، يكيه براي انگليس كه حاوي يك دامينه و يكي هم براي امريكا كه حاوي دو دامينه (سايت هاي براي مديريت و نظم بيشتر هستن)
نكته : يك site ميتونه حاوي چندين domain باشه ولي يك domain نميتونه به بيشتر از يك site تعلق داشته باشه ( براي درك بيشتر شما site رو كشور فرض كن و domain رو آدم ، يك كشور ميتونه چند تا ادم داشته باشه ولي يك ادم نميتونه متعلق به چند كشور باشه)
براي اينكه ي اين مواردي كه گفته شد رو بيشتر درك كنيد اين ساختار رو نگاه كنيد :
Apple.com │ └───GPO ├───sub1.apple.com │ ├───OU │ ├───Employees │ ├───Computers │ └───Users ├───sub2.apple.com ...
كمي درمورد Forest :
در ادامه ما مياييم و ميگيم كه ما دوتا forest داريم ، يك مقدار مباحث جديد ما داريم :
در بحث شبكه اين متداوله كه ما چند تا Domain و يا Forest داشته باشيم كه با trust به هم وصل شده باشن ولي اين ها جهت دارن كه در شكل بعد خلاصه توضيح ميدم ولي شكل بالا رو اوردم كه ديدي از forest داشته باشيد
كمي درمورد trust :
در اينجا به صورت خلاصه مبحث trust رو باز ميكنيم و جلوتر كامل و جامع بررسيش ميكنيم :
نكته : در اين شكل كادرهايي كه رنگ كرم دارن forest هست و ايكون هاي سرور نماد دامين هستن
دليل وجود trust اين هست كه دامين هاي مختلف ميخوان به محتوا هاي دامين هاي ديگه دسترسي داشته باشنو نميخوان اون دامين رو مجدد بسازن ، چه از نظر داده و چه از نظر منابع فيزيكي
ارتباطات trust و دامين ها يكم پيچيدس و جلوتر بررسي ميكنم ولي عكس بالا به صورت مقدماتي اينو داره ميگه :
ارتباطي كه بين دوتا forest شركت dell و apple هست به صورت دو طرفه هست(به فلش دقت كنيد) يعني دامين والد dell و apple جفتي به منابع هم دسترسي دارن ، ولــــــي فرزنداشون اينطوري نيستن
فرزند ها به اطلاعات دامين والد خودشون يا فرزند هاي ديگر در forest خودشون دسترسي ندارن
و فرزندان هيچ forest اي به فرزندان forest ديگر دسترسي ندارن
مثال : واحد فروش شركت apple به هيچ يك از واحد هاي ديگه شركت apple دسترسي نداره و هيچ واحديم بهش دسترسي نداره ( نه در forest خودش نه در forest شركت dell)
واحد مالي شركت dellهم به هيچ واحد ديگه اي دسترسي نداره و برعكس ، نه تو forest خودش نه تو forest شركت apple
ولي والد ها به اطلاعات فرزندانشون دسترسي دارن ، والد apple به كل اطلاعات والد و فرزند هاي شركت dell و والد dell هم به كل اطلاعات خود والد و فرزندان شركت apple دسترسي داره
منطقيم هست ، هر كسي اطلاعاتي بخواد از والد يا فرزند ديگه بايد به والدش اطلاع بده تا براش trust ساخته بشه
اين مبحث در اخر مقاله موشكافانه تر بررسي ميشه
مفاهيم پيشرفته تر :
Attributes :
هر object در اكتيو دايركتوري قصه ما يك سري مشخصات و ويژگي ها داره ، با استفاده از اين ها ميشه اون شئي رو پيدا كرد و طبقه بندي كرد ، مثلا شئي computer ويژگي هاش اينان : hostname ، DNS name و..
همه اين attribute ها هم يك نام مترادف در LDAP دارن واسه اينكه اگر ما query زديم به LDAP بتونيم با استفاده از اين نام ها اطلاعات بدست بياريم مثلا شما نام كاملتو ميدي و با displayName مچ ميشه در يه entry و سرچ ميشه يا نامتو ميدي و با give name مچ ميشه و قابل جستجو هست
ValueEntry
Full NamedisplayName
First Namegiven name
GPO :
ما يه چيزي داريم به اسم Group Policy كه مياييم و توش خط مشي و قوانين تعريف ميكنيم ، و به صورت شئي ذخيره ميكنه (اين شئي كه گفتم با شئي اي كه توي اكتيو دايركتوري در موردش صحبت ميكنيم متفاوته)
Schema :
هرجا اينو شنيديد ميشه يه نقشه كلي از شبكه AD اي كه داريم ، يه شكل كلي كه همه چي توش معلوم باشه
در اين نقشه نوع اشيا مشخص شده و attribute هاي مربوط به هر شئي در اون موجوده و براي هر شئي كلاس خاصي در نظر گرفته ميشه طبق اون چيزي كه اون شئي در اكتيو دايركتوري هست مثلا :
AD ObjectCorresponding Class in schema
usersuser
computer computer
instantiation و instance of that class :
يك مفهوم خيلي مهمه كه اگر اينو ياد نگيريد بعدا به مشكل ميخوريد :
- وقتي يك شئي از روي كلاس سخته بشه بهش ميگن instantiation
- اگر شئي از روي يك كلاس خاص ساخته بشه بهش ميگن نمونه كلاس يا instance of that class
براي مثال اگر ما بگيم "computer RDS01" اين object اكتيو دايركتوري يك instance هست از كلاس Computer كه توي schema بود چون از روي class خاص computer ساخته شده
Container vs Leaf Objects :
ما در كل دو نوع شئي داريم در اكتيو دايركتوري ، يكي اشئايي كه خالين و چيزي نميتونه داخلشون بره ، يكي اشيايي كه داخلشون چيزي هست
- container درواقع اشئايي هستن كه داخلشون اشياء ديگه اي ميتونه قرار بگيره ، خاطرتون هست بالاتر گفتم OU ؟ اين اشياء همه چي داخلشون قرار ميگيره ! مثلا
- leaf اين ها اشيائي هستن كه چيز ديگري توشون نميتونه قرار بگيره ، مثلا پرينتر ، شئ پرينتر فقط پرينتره و هيچي ديگه نميتونه توش قرار بگيره
نكته : فرق بين OU و Container چيه ؟ جفتشون كانتينر هستن ولي GPO فقط به OU اعمال ميشه سر همينه كه اكثرا از OU استفاده ميشه
مثال : فرض كنيد شما مدير دومين asia.mycorp.com هستيد و 500 تا كاربر و 500 تا كامپيوتر در شبكه (دامين) داريد ، شبكه شما رفت و امد زياد دارد ، يعني افراد زيادي روزانه ثبت نام ميكنن و روزانه اخراج ميشوند ، حالا ميخوايد اين شبكه رو بدست يه سنيور بديد تا مديريت بكنه ، امكان ساخت دومين جديدي هم نيست !! شما مياييد و تو همون دامين كه داريد يك Organizational Unit ميسازيد به اسم دلخواه مثلا Manufacturing OU ، و به اون سنيور دسترسي و مجوز اديت GPO رو ميديد ، و در اينجا دسترسي اي كه اون فرد سنيور داره روي Manufacturing OU هست نه روي كل شاخه و خود asia.mycorp.com
Tree :
صحبت از درخت شد ، يه اصطلاح داريم به اسم درخت كه به صورت شاخه وار ميگه چه چيزي زير مجموعه چه چيزي هست ، بالاتر شكلشو كشيدم و يه يبار
├───Root Domain │ ├───child Domain │ │ ├───Computers │ │ └───Users │ └───child Domain ├───Root Domain │ ├───child Domain
نكته : اين نكته مهمه و قبلش حتما Global Catalog رو بخونيد تا اين نكته رو بفهميد ، تمامي دامين ها كه در tree هستن يك standard global catalog مشترك رو به اشتراك ميگذارند كه تمامي اطلاعات object هاي مربوط بهtree رو داخلش داره
Global Catalog(GC) :
Domain Controller كه اول گفتم رو خاطرتون هست ؟ اگر نيست يه بار ديگه بخونيدش ، GC يه نوع DC هست كه اطلاعات تمام object هاي يك forest رو ذخيره ميكنه و ازشون كپي ميگيره ، به اين صورت هم كپي ميگيره كه از دامين متعلق به خودش يه كپي كامل (Full Copy) و از دامين هاي ديگه تو forest يك كپي ناقص (Partial Copy) ميگيره
نكته : GC محتوا فقط خواندني داره و مستقيما آپديت نميشه !
نكته : فرق بين DC و GC چيست ؟ DC فقط محتوا اشئا داخل دامين خودشو داره ولي GC علاوه بر محتوا داميني كه توشه محتوا دامين هاي ديگه رو هم داره
كاربر ها و برنامه ها با استفاده از كوئري زدن به GC ميتونن اطلاعات هر شئي رو در هر كدوم از دامين ها بدست بيارن (داخل Forest)
GC دوتا كار ميكنه :
- Authentication : براي تمامي گروه هايي كه كاربري توشون هست Authentication و Authorization فراهم ميكنن ، كه معمولا بعد گرفتن Access Token توسط يوزر انجام ميشه
- Object search : امكان سرچ يك object بر اساس attribute مد نظر رو به وسعت كل دامين هاي يك forest فراهم ميكنن
Global Unique Identifier (GUID) :
يك ركن بسيار مهم هست ، GUID يك مقدار 128 بيتي منحصر بفرد و تكرار نشدنيه براي هر شئي كه ساخته ميشه ، تكرار ميكنم هر شيئي تو شبكه كه توسط اكتيو دايركتوري ساخته ميشه اين شناسه رو ميگيره و مثل MAC Address يكتا و منحصر بفرده ، اين مقدار توي attribute اي ذخيره ميشه به نام ObjectGUID
ما ميتونيم توسط پاورشل كوئري بزنيم و ObjectGUID رو سرچ كنيم و شئي مورد نظر رو پيدا كنيم ،
سرچ توسط GUID دقيق ترين روشه مخصوصا كه اگر ما كوئري زده باشيم به GC و چند مورد مشابه ببينيم و ندونيم كدوم مد نظرمونه و اين مقدار تو تست نفوذ و فاز Enumerate بسيار بدردمون ميخوره
نكته : تا وقتي شئي مد نظر ما در اكتيو دايركتوري هست اين مقدار ObjectGUID يا همون GUID شئي عوض نميشه و به شئي ديگري تخصيص نميگيره تا وقتي كه اون شئي از اكتيو دايركتوري ما خارج بشه !
براي سرچ كردن در اكتيو دايركتوري ما گزينه هاي متفاوتي داريم از قبيل SID-GUID-SAM Account name-DN كه جلوتر بهش ميپردازيم
Distinguished Name (DN) :
به مسير كامل يه object ميگن DN در اكتيور دايركتوري ، مثلا تو مثال كامپيوتر خودم الان يه يوزر هست به نام محمد حسن پزشكيان كه توي دامينيه به اسم mamad.com
قبل ديپ شدن يه مثال بزنم : فرض كنيد ميگن ادرستون كجاست ؟ ميگيد شهر اراك ، خيابون ملك ، كوچه فريدي ، ساختمان اجر سه سانتي ، پلاك 2 ، محمد حسن پزشكيان
هر كدوم از اين بلاك ها با يه attribute مشخص ميشن، مثلا DC="خيابان ملك" و... پس اينطوري يه object در AD پيدا ميشه !
ما سه نوع Attribute داريم براي نام گذاري :
- O - OU : اولي organizationName يا organizationalUnitName هست و معمولا بيانگر دامين root-level هست و ميگه اين شئي كجا قرار داره
- DC : اين مورد organizationalUnitName هست و براي دامين و DNS هست و اگر مثلا دامين ما يه DNS داشته باشه به اين صورت " rebeladmin.com " ما اين نوع ادرس دهي رو داريم : DC=rebeladmin,DC=com
- CN : اين هم commonName هست و بيانگر شئي و container يا همون فضاي دربرگيرنده object هاي ماست
معمولا اكثرا از CN استفاده ميشه ولي فورم درستش به اين صورته :
CN=bill gates,CN=Users,DC=microsoft,DC=com
اينجا microsoft.com دامين ما هست كه با DC نمايش داده شده و users ابجكت يوزر ماست كه با CN نمايش داده شده و درواقع users واسه اين با CN امده چون يه Container object هست (بالاتر توضيح دادم) و توش كلي اسم ذخيره ميشه و جناب بيل گيتسم كه اسم كامل فرد هست و نام ابجكت ماست
نكته : اگر شئي از يك DC منتقل بشه به DC ديگه DN اش عوض ميشه
Relative Distinguished Name :
اين مفهوم خيلي كلكيه ! خوب و با دقت بخونيد :
RDN يك جزء از DN هست كه اون object رو منحصر به فرد ميكنه
فرض كنيد شما توي يه OU دوتا كاربر داريد به اسم محمد (عكس سمت چپ) و اين دوتا دقيقا DN يكساني دارن ! يعني مسيرشون همينطوري زير شاخه خورده تا رسيدن به OU منابع انساني ، حالا ما كه نميتونيم دوتا محمد يكسان داشته باشيم ! فقط يك محمد
نكته : اگر دوتا اسم يكسان بود خب دوتا فاميلي كه يكسان نيست ؟ مثلا تو عكس سمت چپ سناريويي ك داريم دوتا اسم يكسانه ولي خب دوتا فاميلي متفاوته پس مشكلي نيست
نكته : اگر اسم و فاميلي جفتشون يكي بود چي ؟ يكيشون بايد يك مشخصه داشته باشه كه اون يكي نداره ، مثلا يكيشون سنش 27 عه و ديگري 31 ، خب فقط كافيه يه cn=34 اضافه كنيم به يكيشون و اونوقت اين يكي يه RDN متفاوت داره پس توي يه OU ميتونه كنار اون يكي باشه !
نكته : RDN ميتونه اسم باشه ، يا OU باشه يا سن باشه يا قد باشه يا جنسيت باشه يا يه شماره خاص باشه يا .. فقط يه وجه تمايز بايد باشه
نكته : هر جزئي از DN يك RDN هست ، يا به عبارتي چندين RDN كنار هم يك DN تشكيل ميدهند
كليد : حداقل يكي از RDN ها در يك OU يا همون Container بايد منحصر به فرد باشند ، يعني تكراري نباشد ، اگر همشون تكراري بودند بايد در Container هاي مختلف باشند(در Cotainer مختلف يعني در مكان هاي مختلف ، يعني DN مختلف) !
يك مثال اينجا اوردم ، ما يك شئي داريم در users به نام استيو جابز كه دامينشم apple.com هست ، اينجا ما تو خط دوم يه كاربر ديگه با اسم steve jobs مياريم و اكتيو دايركتوري اين اجازرو به ما نميده ! پس دوتا كار ميتونيم بكنيم ، توي همون مسير يه RDN ديگه تعريف كنيم ، مثلا سومي براش يه مشخصات تعريف كرديم كه عدد 27 هست و سنشه ! يا ميتونيم مثل گزينه اول مسيرشو عوض كنيم و يدونه RDN بهش اضافه كنيم كه ما برديمش تو sales و اينطوري DN عوض شد (نسبت به اصلي)
Access Tokens & SID :
قبل پرداخت به كانسپت هاي امنيتي يكم با مبحث Access Token و SID اشنا بشيم
Access Token يك شئي داخل كرنله كه به Porcess يا Thread تعلق ميگيره و سطح دسترسي و گروه و... هاي ديگشو تعيين ميكنه ، اين موارد امنيتين ، يك توكن خالي كه به process يا thread خاصي تعلق نداره ارزشي نداره !
thread ها هم معمولا از process شون به ارث ميبرن token و دسترسي هارو !
يك نمونه توكن :
ffffc4097ba54060
SID (Security IDentifiers)
درواقع يك شناسس براي شناسايي يوزر ، گروه و يا دامين و سطح دسترسيش ، درواقع از ديدگاه امنيتي به هر كدوم يه عدد اختصاصي داده ميشه كه بشه تشخيص دادشون
در اكتيو دايركتوري DC اين شناسه رو توليد ميكنه براي هر شئي و اونو تو ديتابيس خودش ذخيره ميكنه
هر SID فقط يكبار حق استفاده داره و بعد دليت كردن Security principals هم حتي اون SID حق استفاده شدن نداره
نكته : چه زماني مقدار SID يه شئي ميتونه عوض بشه ؟ زماني كه منتقل بشه به يك DC ديگه !
نكته : تغيير مقادير در هر object هيچ موقع SID شو عوض نميكنه
نكته : اگر يك object توي يك دامين يك مقدار SID داشته باشه اين مقدار SID در دامين ديگه براي همين object مورد قبول نيست
sIDHistory :
مقدار SID يك object كه توي يك دامين بوده و منتقل شده به يه دامين جديد ميره توي sIDHistory و به اون object يه SID جديد توي دامين جديدي كه امده توسط DC تعلق ميگيره
نكته : از ديدگاه امنيتي اين قسمت اگر درست كانفيگ نشده باشه ميتونه مورد سوء استفاده قرار بگيره و يك object جديد ايجاد بشه و SID قديمي اون object اي رو بگيره كه منتقل شده به يه دامين ديگه ! و اين خطرناكه ، براي جلوگيري از اين حمله بايد SID Filtering فعال باشه
يك مقدارم درمورد اجزا سطح دسترسي :
Authorization and access control components :
در عكس بالا subject رو بگيريد يك برنامه كه يه كاربر اجرا كرده و اين برنامه سعي داره يك object (اين object مال ويندوزه و با اوني كه توي اكتيو دايركتوري تا الان گفتيم يكي نيست !) مثلا Share folder رو بخونه و بهش دسترسي بگيره
اينجا اون شئي يه سري سطح دسترسي ويندوز براش تعريف كرده كه هركسي ميخواد بهش دسترسي داشته باشه بايد اون حد از دسترسي رو حداقل داشته باشه ، و اينجا يوزري كه ميخواد به اين object دسترسي داشته باشه هم يه سطوح دسترسي اي داره (همون access token اي كه گفتم) و حالا اينجا ويندوز مياد اين دوتارو باهم مقايسه ميكنه ، اگر سطوح دسترسي برنامه در حد اون object بود ميتونه ازش استفاده كنه
يكم فني تر توضيح بدم ميشه اينكه اون object يه سري ليست دسترسي داره كه بهش ميگن ACE كه تك تك اون ها با Access Token فرد تطابق داده ميشن تا يك مورد Match پيدا بشه
مثال : فرض كنيد شما ميخوايد وارد سينما بشيد وسينما يه ليست داره از افرادي كه ميتونن وارد بشن ، وقتي شما ميريد اونجا از باجه دم در يه بليط يا Access Token ميخريد ، روي اون بليط شماره صندلي شمارو هم نوشته كه مثلا 52 (مثلا ما فرض ميكنيم اينطوريه) و وقتي شما ميخوايد از در رد بشيد كارمند اونجا اول تو ذهنش ميگه خب چه كسي حق داره از اينجا رد بشه ؟ يه ليست داره :
افرادي كه حق عبور دارند :
مدير سينما
مسئول فني
فروشنده بليط مستقر در باجه
نظافتچي و ساير كاركنان
مشتري داراي بليط
و وقتي شمارو ميبينه ميگه خب شما گزينه اخر هستي ، يعني 4 گزينه اول رو رد ميكنه و وقتي به اخر ميرسه ميبينه سطح دسترسي شما با اون اخري Match شده و اصطلاحا اجازه عبور شمارو ميده
اين مكانيزم دقيقا تو ويندوز هست ، و اسم اون ليست در ذهن فرد دم در همون ACE هست كه پايين ميخوايم بهش بپردازيم :
Security principals :
هر چيزيه كه سيستم عامل بتونه احراز بكنه ، شامل يوزر ها ، اكانت ها ، گروه ها يا حتي Process ها و Thread ها كه در چارچوب يوزر اجرا ميشن ! مثلا اگر ما Tomcat رو داشته باشيم و اجرا بشه حتي Security principals اونم احراز ميكنه !
در اكتيو دايركتوري ها اين Security principals ها object هايي هستن كه متعلق به دامين هستن و سطح دسترسي كاربرا و .. رو به منابع تعيين ميكنن ، ما اركان ديگه اي هم براي تعيين سطح دسترسي مثل local user accounts و يا security groups داريم كه توسط SAM مديريت ميشن و سطح دسترسي رو كنترل ميكنن
نكته : كنترل سطح دسترسي كلا مقوله ايه كه به چندين عامل وابستس ، مثلا شما وقتي گوشيتونو به ضبط ماشين وصل ميكنيد كه آهنگ پخش كنيد ، اگر صدا ضبط تا ته زياد باشه و صداي گوشيتون خيلي خيلي كم باشه ، اهنگ صداش كمه و برعكس ، پس به همه عوامل بستگي داره ، مثال واقعي تر بخوام بزنم مثل NTFS Permission و Share Permission هست ، اگر هر هركدوم مجوز ندن و اون يكي بده ، تا زماني كه يكيشون مجوز كم تعيين بكنه همون مجوز كم اعمال ميشه !
Access Control List (ACL) :
يك ليستي هست از سطح دسترسي هايي كه به يه Object اعمال ميشن
وقتي يك object به دامين ديگري منتقل ميشه ACL از روي SID اون object كه تو ليستش داشته دسترسي بهش ميداده و وقتي اون object توي sIDHistory نياد ثبت كنه كه من منتقل شدم و SID قديميش اونجا ثبت نباشه ، ACL مجوز بهش نميده ! چون SID جديدش جايي ثبت نشده ، ولي وقتي بياد و SID قديميشو تو sIDHistory ثبت كنه و بره SID جديد بگيره ACL رهگيريش ميكنه و مجوز هاي SID قبلي اون شئي رو روي SID جديدش ست ميكنه !
Access Control Entries (ACEs) :
يك Entry و مقداريه و مجوزي كه به هر Object توي دامين چه دسترسي اي ميشه داشت براي Trustee ها (Trustee همون اكانتاي يوزر هاست ، يا گروه ها )
Discretionary Access Control List (DACL) :
تعريف ميكنه كه چه اصول امنيتي و قوانيني روي يك object اعمال و تعريف ميشه
System Access Control Lists (SACL) :
لاگ برداري خودمونه ، كه چه زمان چه يوزري سعي كرده به چه Object اي دسترسي بگيره
براي درك كامل اين موارد عكس بالا رو ببينيد كه با رنگ نارنجي و مشكي مشخص كردم ، يكم با بحث سطح دسترسي ها در ويندوز كار كرده باشيد دستتون مياد اين موارد
براي درك اين موارد يكبار عكس نارنجي و ابي اي كه بالا گذاشتم رو ببينيد !
Foreign Security Principals :
اين هم همينجا بگم ، وقتي يك شئي اي در اكتيو دايركتوري ايجاد ميشه براي بحث security principal منتها مروبط به forest ديگه اي هست (external forest يعني forest خارجي)
فرض كنيد از يك forest ديگه يك شئي مثلا يك كامپيوتر اضافه شده به دامين ما توي forest ما ، بلافاصله بايد براش FSP تهيه بشه ، در اين FSP يك چيز مهم يعني SID اون شئي كه تو forest خارجي بود هم ذخيره ميشه و اگر ويندوز بخواد اين شئي رو از طريق SID اش پيداش بكنه از طريق trust ميره و از forest مبدا شئي ميپرسه
اين FSP ها در كانتير خاصي قرار ميگيرن "ForeignSecurityPrincipals" و RN شونم اينطوريه :
cn=ForeignSecurityPrincipals,dc=mamad,dc=com.
sAMAccountName :
اين درواقع اسميه كه كاربر باهاش وارد ميشه و logon ميكنه ، اين اسم بايد منحصر بفرد و يكتا باشه و كمتر از 20 كاراكتر باشه
(فلش صورتي)
userPrincipalName :
اينم يه روش ديگس براي اينكه كاربرا رو بشه پيدا كرد ، يك attribute كه يك پيشوند داره كه همون اسم يوزره و پسوند كه دامينه
(تو عكس بالا با فلش بنفش مشخصه)
Service Principal Name (SPN) :
ساده بگم كاربرا در اكتيودايركتوري با استفاده از SPN ميتونن سرويس هارو تو اكتيو دايركتوري پيدا كنن ، اگر واسه يه سرويسي SPN نباشه نه كاربرا ميتونن پيداش كنن نه Kerberos
SPN درواقع يك Instance از سرويس هست ، SPN ها توسط Kerberos استفاده ميشن كه يك logon account رو به Service Instance تخصيص بده ؛ يعني به يه اپليكيشن (Client Side Application) ، اجازه ميده كه به يه سرويس درخواست بزنه كه احراز بشه بدون اينكه نياز باشه اسم اكانت رو بدونه
(اين مفهوم الان يكم براتون شايد گنگ باشه ، وقتي Kerberos و توضيح دادم اونجا كامل دركش ميكنيد)
(اين مفهوم تو بحث Persist و Priv Esc در اكتيو دايركتوري خيلي بدردتون ميخوره !)
لينك مقاله Kerberos
Replication :
Replication يا تكرار زماني اتفاق ميفته در اكتيو دايركتوري قصه ما كه اشياء ما Update ميشن و و از يه DC به DC ديگه منتقل ميشن
وقتي به AD ما يه DC اضافه ميشه ، بين DC اي كه از قبل بوده و DC جديد يه لينك ارتباطي صورت ميگيره كه بهش ميگن "connection objects" و كل اشياء از DC قبلي كپي ميشن ميرن DC جديد
در هر DC در اكتيو دايركتوري يه سرويسي هست به نام Knowledge Consistency Checker (KCC) كه يه برنامس به زبان ساده و مسئوليتش همين Replication هست و اين لينك ارتباطي كه خط بالا گفتم "connection objects" رو اون ايجاد ميكنه و مسئول انتقال Object هاست
دليل وجود replication اينه كه اول مطمئن بشيم ديتا ها به صورت منظم و كامل در كل DC ها وجود داره و همه يه نسخه از اون ديتا رو دارند و درواقع اگر يه DC به مشكل خورد ما بكاپ داشته باشيم
نكته : Replication فقط بين DC هاي يك Forest صورت ميگيره
SYSVOL :
sysvol يك پوشس (folder) يا ميتونه (share) هم باشه ، كه فايل هاي public روي توي دامين رو ذخيره ميكنه و كپي ميگيره ازشون ، مثل system policies - Group Policy settings - logon/logoff scripts و..
همچنين شامل تمامي اسكريپت هايي ميشه كه تو AD اجرا شدن تا task خاصي رو انجام بدن
ديتاهاي sysvol هم براي ساير DC هاي ديگه Replicate ميشه ولي توسط يه چيز ديگه به اسم "File Replication Services (FRS)"
Sysvol |____ | |____Policies | |____Scripts | |____ DO_NOT_REMOVE_NtFrs_PreInstall_Directory | |____ NtFrs_PreExisting___See EventLog | |____Enterprise | |____Policies | |____Scripts | |____Staging | |____Domain | |____Enterprise | |____Staging Areas | |____Enterprise (junction> = SysvolStagingEnterprise) | |____Your Domain Name (junction> = SysvolStagingDomain) | |____Sysvol | |____Enterprise (junction> = SysvolEnterprise) | |____Your Domain Name (junction> = SysvolDomain)
Read-Only Domain Controller (RODC) :
يك نوع خاص از DC هست كه اطلاعاتش فقط خوانديه و database اش در حالت read-only هست، هيچگونه پسورد هيچ حسابي در AD در RODC نميمونه (Cache نميشه) { البته بجز پسورد خود اكانت RODC و پسورد هاي RODC KRBTGT}
هيچ تغييراتي روي اين RODC صورت نميگيره ، روي نميشه AD database يا SYSVOL ياحتي DNS سرورشو تغيير داد چون Read only هست ! و تغييرات sysvol از به بقيه DC ها منتقل نميشه !
نكته : برخلاف اكانت هاي AD ، ما نميتونيم به صورت مستقيم و تعاملي به اكانت krbtgt لاگين كنيم و باهاش تعامل داشته باشيم ، چون يه اكانت Built-in هستش و نام krbtgt هم نميشه عوض كرد !
نكته : به رخش نگاه نكنيد كه خيلي امنه ، ميزنيم ميتركونيمش :)
نكته : اين مفاهيم اگر براتون گنگه بايد حتما Kerboros و ساختارشو يادبگيريد تا اينا براتون جا بيفته !
FSMO Roles :
خب خب ، بشينيد ميخوام براتون قصه بگم :
يكي بود يكي نبود ، توي AD كبود ، مشكلي بود بين DC ها بر سر مديريت و فرمان دهي ، لوس بازي بسه
در اوايل شكل گيري AD يه مشكلي بود بر سر اينكه كدوم DC تصميم بگيره و تغييراتو اعمال كنه ، مايكروسافت امد و يه حركتي زد ، گفت قانون "last writer wins" رو بيام بنويسم كه ميگه هركي اخر همه نوشت اون اعمال بشه ، كه خب مشكلش اين بود كه اگر اخري تغييرات اشتباهي ميخواست بده چي؟ سازمان بايد به فنا ميرفت ؟
مايكروسافت امد گفت خب اولين DC دامينتون كه root level هم هست (والد همه هست) بياد تصميم بگيره ، درواقع حالت master - slave ايش كرد و خب مشكلي كه داشت اين بود كه اگر اون DC از دسترس خارج ميشد كل سازمان به مشكل ميخورد ! و مشكل SPF (Single Point of Failure) رو داشت
مايكروسافت امد گفت ، خـب حالا ما بياييم وظايف رو بين DC ها تقسيم كنيم و امد Flexible Single Master Operation (FSMO) رو ساخت
اين قوانين به DC ها اجازه ميده كه بدون تداخل باهم ديگه كاربران رو احراز بكنن
اين 5 قانون به اين صورتن :
Schema Master and Domain Naming Master (يدونه براي كل forest), Relative ID (RID) Master (يدونه براي هر دامين), Primary Domain Controller (PDC) Emulator (يدونه براي هر دامين), and Infrastructure Master (يدونه براي هر دامين)
تمامي قوانين به اولين DC توي forest ما اعمال ميشه و اگر دامين جديدي به forest ما اضافه بشه ، به DC اش فقط سه تا قانون اضافه ميشه : RID Master، PDC Emulator و Infrastructure Master
اين قوانين به كار كردن صحيح و روان شبكه كمك ميكنن ، ترافيك replication رو هم كنترل ميكنن و...
- Schema Master :
اين قانون كل عمليات هاي read / write و copy رو در اكتيو دايركتوري مشخص ميكنه ، يعني ميشه تمامي attribute هايي كه اعمال ميشه به يه object در AD
Domain Naming Master : مديريت نام دامنه ها رو انجام ميده و مطمئن ميشه كه توي يك forest دوتا دامين با نام يكسان نداريم
- Relative ID (RID) Master :
قبل اينكه اينو بگم بزاريد RID رو بگم :
درواقع rid قسمتي از sid هست كه باعث منحصر به فرد شدنش ميشه
حالا RID Master چيكار ميكنه ؟ يه مشت از اين RID ها ميده به DC كه هر شئي امد تو شبكه بهش اختصاص بده و كار اصلي RID ام منحصر به فرد كردنه يعني اگر Domain identifier چند شئي يكي شد از لحاظ RID متفاوت بايد باشن
- PDC Emulator :
اين دوست عزيز وظيفش چيه ؟
اگر هاستي يا همون كامپيوتري اين قانون بهش اعمال بشه توي دامين ، يك DC معتبر ميشه و ميتونه احراز هويت ها و اعمال مربوط به امنيت مثل تعويض پسورد ، احراز هويت ، GPO و... رو انجام بده
(زمان هم دست اين دوست عزيزمونه)
- Infrastructure Master :
اين قانونم وظيفه تقسيم GUID - SUID - DN رو دامين ها داره (توي يك forest) و نشونه خرابي اين قانونم وقتيه كه ACL بجاي اينكه نام كامل يك شيئو نشون بده SID شو نشون بده ! اونوقته كه بايد اين Infrastructure Master درست بشه
AD Recycle Bin :
نوبتيم كه باشه نوبت سطح آشغاله :)
اما كاربردش چيه ؟ اگر در AD قصه ما Recycle Bin فعال باشه و ما شئي را پاك كنيم ميره توش و اگر بخوايم برش گردونيم نياز به بكاپ نيست ، براي مدت خاصيم اون شئي رو نگه ميداره تو خودش و بعدش كامل پاكش ميكنه
زمانش دست خودتونه و اگر ست نكنيد پيشفرض 60 روز نگه ميدار
Tombstone :
اين هم يك مكانيه در اكتيو دايركتوري قصه ما كه اشياء حذف شده رو نگه ميداره
وقتي شئي پاك ميشه اگر Recycle bin فعال نباشه مياد اينجا و تمام فلگ هاش پاك ميشه و فلگ isDeleted مقدارش True ميشه و مثل recycle bin مدت زمان داره كه بهش ميگن Tombstone Lifetime كه اگر بگذره ديگه فايلو كامل پاك ميكنه
نكته : فرق بين Recycle Bin و Timbstone چيه ؟ اگر شئي بره توي Recycle bin تمام attribute هاش حفظ ميشه ولي اگر بره تو Tombstone تمام attribute هاش پاك ميشه
Fully Qualified Domain Name (FQDN) :
به نام كامل ميگن FQDNو ساختارش اينطوريه :
[host name].[domain name].[tld]
و براي اين بكار ميره كه مكان يه شئي رو در DNS پيدا كنيم ، كاربرد FQDN اينه كه بدون دونستن آيپي يك شئي اون رو در AD پيدا كنيم ، دقيقا مثل google.com كه شما ايپيشو نميدونيد ولي نامشو ميزنيد و سايت مياد
سمپلشم اينطوريه :
Ali01.mamad.com
و ali01 نام hostname هستش ، براي كاربر علي ! حالا 01 ميتونه هرچي باشه عدد سن باشه هرچي!
Active Directory Users and Computers (ADUC) :
برنامه گرافيكي ADUC براي مديريت AD ، البته با پاورشل هم ميشه باهاش ارتباط گرفت
ADSI Edit :
يه برنامه گرافيكي براي مديريت اشياء در AD ، تفاوتش با ADUC اينه كه ميشه attribute هارو مديريت كرد و روي تك تك اشياء كنترل كامل داشت
AdminSDHolder :
اين داداشمون يك شيء هست كه براي مديريت ACLs هاي اعضا داخل گروه ( built-in groups in AD ) كه سطح دسترسي بالاييم دارن در AD وجود داره
درواقع مثل مفاهيم ديگه يه فضايي هست كه سطح امنيتي اعضايي كه جزو گروه محافظت شده ( protected groups ) هستن رو چك ميكنه
خب ما يه پردازش هم داريم به اسم SDProp (SD Propagator) كه روي نظم (هر يك ساعت يكبار) اجرا ميشه و مياد سطوح دسترسي داخل شئي AdminSDHolder رو با سطوح دسترسي داخل روي يكي از قوانين RODC اي كه بالاتر معرفي كردم (PDC Emulator Domain Controller)
فك كنيد يه مهاجم رفته و يك ACL entry آلوده ايجاد كرده كه مجوز هاي دسترسي يك يوزر خاص رو بگيره ، كه اين يوزر صد در صد چون سطح دسترسيش بالاعه جزو Domain Admins group هست
اگر تنظيمات ديگه اي در AD رو هم عوض نكنه و فقط به اين بسنده كنه ، وقتي SDProp process قصه ما اجرا بشه و سطح دسترسي هارو چك كنه ، پرتــــش ميكنه بيرون
(ما با اين دوست عزيز تو تست نفوذ اكتيو دايكتوري خيلي كار داريم)
dsHeuristics :
dsHeuristics در واقع يك رشتس (string) كه روي service object ها اعمال ميشه و تنظيمات و Configuration رو تعيين ميكنه در كل يك forest
اگر AdminSDHolder بالا رو خونده باشيد شايد يكم گيج بشيد كه چرا گفتي built-in groups بعد گفتي protected groups ، جريان چيه ؟
يكي از اين تنظيمات اينه كه بياد و built-in groups رو از Protected Groups جدا كنه (exclude) ، خاطرتون هست كه گفتم گروه هاي Protected توسط شئي AdminSDHolder و پردازش SDProp محافظت ميشن و بعد يه مدت خاص هر تغييري كه توي protected groups انجام توسط SDProp برميگرده به حالت اولش؟ حالا اگر ما بياييم يك گروه رو جدا كنيم از Protected Groups ، يعني بهش يك dsHeuristics attribute بزنيم ديگه SDProp به اون گروه كاري نداره و هر تغييري كه اعمال شه داخل اون گروه ديگه SDProp برش نميگردونه به حالت قبل و اولش !
adminCount :
يك attribute داريم در AD به نام adminCount كه مياد ميگه آيا SDProp process از يه user محافظت ميكنه
برچسب: آموزش هك, آموزش هك قانونمند, آموزش CEH, آموزش سكيوريتي پلاس،
ادامه مطلب