EFS و Recovery Agent در ویندوز سرور

پیاده سازی Encryptipn File System) EFS) و Recovery Agent در ویندوز سرور

در این مقاله به معرفی و پیاده سازی EFS و Recovery Agent در ویندوز سرور می‌پردازیم.

EFS چیست؟

در این جلسه میخواهیم در مورد EFS یا Encrypting File System صحبت کنیم که به این وسیله میتوانیم فایل ها و فولدر ها را رمزنگاری کنیم. اگر به یاد داشته باشید گفته بودیم که فقط کسی که رمز میکند میتواند آنرا باز کند. حتی ادمین هم نمیتواند فایل را باز کند. حالا تصور کنید ما با NTFS Permission میریم و دسترسی همه رو میبندیم. حالا اگر یک روز یک نفر اومد هارد ما رو دزدید و برد روی یک سیستم دیگر بالا آورد، به واسطه ی اینکه یا کاربر Administrator خودش بالا می آید و الان take ownership هم میدانیم چیه؛ خواست فایل را بخواند چی؟ یعنی میخواهیم بگوییم اگر دیسک را بدزدد در نهایت میتواند به فایل ها دسترسی پیدا کند.

EFS یکی دیگر از قابلیت های موجود در NTFS است که میتواند فایل ها را رمز کند. فایلی که رمز میشود فقط توسط کسی که رمز شده باز خواهد شد و ادمین هم نمیتواند آن را باز کند.

برای رمز کردن یک فایل روی آن کلیک راست کرده و Properties میگیریم. سپس از تب general روی گزینه Advance کلیک میکنیم. بعد از آن در منوی Advance یک گزینه وجود دارد به نام Encrypt Contents to secure data. با زدن این گزینه محتویات فایل encrypt میشود. بعد از آن پیغامی داده میشود که میپرسد میخواهی فقط همین فایل را رمز کنم یا Parent آن را هم رمز کنم؟ Parent فایل اگر رمز شود یعنی اون فولدره که این فایل در آن هست رمز شود. که برای مثال ما فقط خود فایل را رمز میکنیم.

تا اینجا ما که خودمان سازنده ی فایل هستیم میتوانیم هرکاری که میخواهیم با این فایل بکنیم. ولی به غیر از ما هیچ کس دیگری به این فایل دسترسی نخواهد داشت؛ حتی ادمین. نکته اینجاست که Administrator حتی با برداشتن permission همه از جمله مالک فایل و Full دادن به خودش و همچنین Take ownership کردن فایل به خودش هم نمیتواند فایل را باز کند. هیچ کار خاصی مثل کپی یا حذف هم نمیتواند انجام دهد.

1 2 3

حالا نکته ای که پیش می آید این است که اگر الان مالکیت دوباره به مالک اصلی آن برگردد دیگر او هم به این فایل دسترسی ندارد. زیرا یکبار مالکیت توسط ادمین از آن گرفته شده است و با دوباره برگرداندن آن همه چیز به حال اول برنخواهد گشت و همچنین NTFS Permission هم دیگر ندارد. مگر اینکه دوباره مالکیت بهش برگردد و دوباره دسترسی Full را روی آن داشته باشد. حالا اینجا ادمین یک راه دیگر هم دارد. این است که با User ، همان کاربر مالک لاگین کند و به فایل دسترسی پیدا کند. اما ادمین که پسورد آن کاربر را ندارد! تنها کاری که برای این مورد میتواند بکند این است که پسورد را reset کند. یعنی پسورد کاربر را عوض کند و بعد با پسورد جدید لاگین بکند. اما جالب توجه است که با این کار هم ادمین نمیتواند به فایل رمز شده دسترسی پیدا کند. درحقیقت اگر ادمین پسورد کاربر را عوض کند بازهم به فایل های رمز شده آن کاربر دیگر دسترسی نخواهد داشت. چون یک نفر رفته پسورد این کاربر را عوض کرده و کسی که الان لاگین کرده دیگر همان کاربر نیست. توجه کنید چون پسورد reset شده است این مشکل پیش آمده است و اگر پسورد change میشد این مشکل پیش نمی­آمد و به فایل دسترسی پیدا میشود. منتها مسئله اینجاست که چه کسی میتواند پسورد را change کند؟ خود آن کاربر. چون ادمین پسورد قبلی را ندارد مجبور میشود که آن را ریست کند.

حالا تصور کنید ادمین پسورد جدید را به کاربر میگوید و کاربر میخواهد که پسورد جدید را به همان پسورد قبلی change کند تا شاید به فایل دسترسی پیدا بکند. حالا کاربر دوباره با همان پسورد قبلی خودش لاگین میکند و به فایل خودش دسترسی پیدا خواهد کرد. پس نتیجه میگریم که فرآیند رمز نگاری به پسورد جاری ما ربط دارد. یعنی باید سیستم مطمئن شود که کسی که داره فایل را باز میکند خود کاربر مالک است. خب این طبیعی است که وقتی ادمین با این همه دسترسی کاملی که دارد وقتی نمیتواند فایل را باز کند، دیگر User ها که استاندارد هستند یا دسترسی کمتری دارند که دیگر اصلا نمیتوانند به فایل دسترسی پیدا کنند.

خب تا اینجه مشاهده کردیم که باید زدن یک تیک فایل رمز شد و شرایط بعد از آن هم دیدیم. حالا میخواهیم ببینیم که اصلا EFS چگونه کار میکند؟

اگر به یاد داشته باشید زمانی که داشتیم در مورد Password Policy و فایل SAM (جایی که User به همراه password هایش به صورت رمز شده قرار میگیرد) صحبت میکردیم در مورد متد های رمز نگاری اشاراتی را  داشتیم. گفتیم که برای رمز نگاری یک حالت Symetric داریم و یک حالت Asymetric. در حالت Symetric شما یک کلید رمزنگاری دارید که با آن data را رمز میکنید و عمل decryption نیز با همان کلید انجام خواهد شد. در حالت دیگر که Asymetric است شما دوتا کلید دارید (Key Pair دارید). در این حالت یک کلید فقط کارش رمزنگاری است و کلید دیگر کارش رمزگشایی است.

برای مثال وقتی کاربر علی یک فایلی را رمز میکند با Public خودش این کار را میکند. آیا Private ادمین میتواند آن را باز کند؟ آیا Private یک کاربر دیگر میتواند این کار را انجام دهد؟ خیر. فقط با Private خود علی باز خواهد شد.

public_private_many
سیستم ویندوز برای EFS از روش های Asymetric و Symetric تواما استفاده میکند. تصور کنید یک فایل A.txt وجود دارد و کاربر علی میخواهد آن را رمز کند. اتفاقی که می افتد به این صورت است که در مرحله ی اول این فایل به بخش های مختلف تیکه تیکه میشود و هر تیکه با یک کلید رندوم Symetric ای رمز میشود. این امنیت را به میزان بالایی بالا میبرد. یعنی با یک کلید رمز نمیشود بلکه با چندین کلید رمز میشود و حتی اگر یک کلید لو برود باز هم اتفاقی نمی افتد و فقط یک تیکه از فایل قابل خواندن خواهد بود نه همه ی فایل. بالای فایل یک بخشی (فیلد) وجود دارد به نام DDF یا Data Decrypt Field. حالا تمام این کلید ها در اینجا store میشوند. پس اگر کسی بخواهد فایل را باز کند نیاز به کلید دارد و همه ی کلیدهای Symetric ای در DDF است. حالا نکته ای که وجود دارد این است که کل DDF با public علی رمز میشود و فقط با private علی باز میشود. اگر یک فولدر رمز شود همه ی فایل ها و فولدرهای داخل آن نیز رمز میشود. اما نکته ای که وجود دارد این است که ورود به یک فولدر رمز شده منعی ندارد و میتوان به آن وارد شد و لیست فایل ها قابل نمایش است. اما به هیچکدام از فایل های دسترسی وجود ندارد. حالا سوال اینجاست؛ اگر فولدر را ادمین رمز کند و مثلا علی وارد فولدر شود و یک فایل را خودش بسازد و رمز کند، این فایل با دسترسی ادمینی که فولدر parent را رمز کرده رمز میشود یا با دسترسی علی؟ این فایل با دسترسی خود علی رمز خواهد شد و حتی ادمین هم نمیتواند فایل دیگران را باز کند. اگر به یاد داشته باشید یکی از سناریو هایی که قبلا انجام دادیم این بود که هرکسی وارد یک فولدر شود و فایل درست کند اما فقط به فایل و فولدر خودش دسترسی پیدا کند. این سناریو به این روش با یک تیک Encryption قابل پیاده سازی است. پس تفاوت رمزنگاری فایل و فولدر هم در این مطلب شد.

اگر به یاد داشته باشید زمانی که داشتیم در مورد Password Policy و فایل SAM (جایی که User به همراه password هایش به صورت رمز شده قرار میگیرد) صحبت میکردیم در مورد متد های رمز نگاری اشاراتی را  داشتیم. گفتیم که برای رمز نگاری یک حالت Symetric داریم و یک حالت Asymetric. در حالت Symetric شما یک کلید رمزنگاری دارید که با آن data را رمز میکنید و عمل decryption نیز با همان کلید انجام خواهد شد. در حالت دیگر که Asymetric است شما دوتا کلید دارید (Key Pair دارید). در این حالت یک کلید فقط کارش رمزنگاری است و کلید دیگر کارش رمزگشایی است (public Key & Private Key).
برای اینکه جلوی این قضیه گرفته شود شما میتوانید یک سیستمی را راه اندازی کنید به نام Recovery Agent. Recovery Agent پیش فرض در ویندوز فعال نیست. Recovery Agent کسی است که میتواند فایل های رمز شده ی دیگران را باز کند. به صورت پیش فرض Administrator را Recovey Agent میکنند اما میتواند هم نباشد و یک user دیگر باشد. پس وقتی ادمین Recovery Agent شد میتواند فایل های رمز شده دیگران را هم باز کند. حالا در جهت تکمیل مطالب قبل یک فیلد دیگر در کنار DDF قرار میگیرد به نام DRF یا Data Recovey Field.
اما تا اینجا EFS شما را نگران چیزی نمیکند؟ اگر یکی از کارمندان شرکت اومد یک سری از اطلاعات مهم را رمز کرد و بعدش رفت؛ ادمین هم میتواند کاری کند؟ نشان داده شد که خیر.


اگر در یک سیستم Recovery Agent راه اندازی شود فرآیند به این ترتیب خواهد بود که سیستم یک کپی از کلیدهای موجود در DDF را در DRF میگذارد و اونجا رو با public، Recovery Agent رمز میکند. ولی همه ی اینها مستلزم این است که Recovery Agent راه اندازی شده باشد. حالا میخواهیم ببینیم این کار را چطور میتوانیم پیاده سازی کنیم. میخواهیم Administrator را Recovery Agent کنیم.

برای اینکه Recovery Agent بشویم باید یک ست کلید Public و Private جدید ایجاد کنیم و این ها را به عنوان کلیدهای public  و private به اون user ای که میخواهد Recovery Agent شود assign کنیم. حالا چطوری میتوانیم این کلید ها را درست بکنیم؟

به Command prompt میرویم:

خب برای نشان دادن کار ابتدا یک فولدر به نام Recovery در درایو C درست میکنیم و به آن میرویم:

4

حال دستور زیر را داریم:

5

این دستور یک سوییچی به صورت زیر دارد:

6

این دستور برای کلیدها یک Certificate درست میکند که به واسطه ی این Certificate اون کلیدها احراز هویت بشوند. یعنی این سوییچ هم کلیدها را میسازد هم Certificate را. نحوه ی دستور به صورت زیر است:

جلوی /R: اسم یک فایلی را میدهیم:

7

حالا اینجا میگوید که این فایلهایی که میخواهد درست کند و کلیدها و certificate توش هست ممکن هست لو برود. برای اینکه جلوی این قضیه گرفته شود روی آن همین الان یک پسورد بگذار. بعد از دادن پسورد دوتا فایل ساخته میشود؛ فایل با پسوند CER که همان certificate است و فایل با پسوند PKF که کلیدها است.

8

حال اگر به درایو C و فولدر Recovery برویم میبینیم که این فایل ها ساخته شده است:

9

حالا در مرحله ی بعد باید فایل کلید را به اون user ای که قرار است Recovery Agent شود بدهیم. در اینجا خودمان که Administrrator هستیم میخواهیم به خودمان بدهیم:

10

چندتا Next میزنیم و در مرحله ی Password ، Password ای که گذاشتیم رو وارد میکنیم:

11

سپس بقیه مراحل هم Next میکنیم و Finish میزنیم. اما برای اینکه این کلیدها احراز هویت بشوند باید Certificate هم به سیستم بدهیم. برای اینکه این کار را بکنیم به کنسول Group Policy یعنی gpedit.msc میرویم. به Dreil Down های شکل توجه کنید:

12 13

Next میزنیم و فایل Certificate مربوطه را به آن میدهیم:

14

و بعد Finish میکنیم. خب تا اینجا فایل PFX را به user ای که قرار است Recovery Agent شود دادیم و نصبش کرده است. فایل CER هم به سیستم معرفی کردیم و تمام. از این به بعد ادمین میتواند فایل های بقیه را باز کند. ما اون فایل PFX را به هر User ای که بدهیم نصب بکند او هم میشود Recovery Agent.

پس به عنوان یک ادمین هوشمند باید فرآیند Recovery Agent را راه اندازی کرده باشیم تا اگر کسی خواست سوء استفاده بکند جلوی آن را بگیریم.

 – به صورت پیش فرض Administrator ئه Domain ، Recovery Agent هم هست. اما روی Local یک کامپیوتر اینجوری نیست.

 – اگر روی یک فایل یا فولدر کلی NTFS Permission ست کرده باشیم و آن را هم رمز کرده باشیم، اگر آن را خودمان روی یک File System ئه FAT یا FAT32 کپی کنیم فایل اتوماتیک از حالت رمز درمی آید و Permission هایش هم میپرد. چون تمامی این قابلیت ها روی File System ئه FAT یا FAT32 موجود نیست. یعنی در مقصد دیگر رمز نیست. اما اگر روی یک File System ئه NTFS کپی شود مشکلی نخواهد بود. فایلی که رمز میشود توسط کاربران دیگری که مالک آن نیستند قابل کپی نخواهد بود زیرا داخل آن را نمیتوانند بخوانند (برای کپی باید داخل فایل خوانده شود و محتویات آن در جای دیگری نوشته شود).

سوال: تصور کنید برخی از فایل ها را رمز کردیم و ناگهان ویندوزمان خراب میشود و بوت نمیشود. ویندوز را مجبور میشویم تا عوض کنیم. آیا میتوان فایل های رمز شده را باز کرد؟ خیر، اگر ویندوز پاک شود و ویندوز جدید نصب شود دیگر به فایل های رمز شده ی آن دسترسی نخواهیم داشت. اما این دلیلی نمیشود که بگوییم این روش اصلا خوب نیست زیرا برای این مسئله راه حل دارد. شما میتوانید از کلیدهای Public و Private تان Backup بگیرید. وقتی از کلیدها Backup میگیرید اگر ویندوز خراب شود با یک User جدید بالا می­آیید  و بک آپ کلیدهای Public و Private را به سیستم جدید میدهیم و چون کلیدها را داریم دوباره میتوانیم به فایل ها دسترسی داشته باشیم.

ما در یک سیستم میتوانیم کلیدهای رمزنگاری مثلا کاربر علی را به کاربر امیر بدهیم. این یعنی اینکه هرچیزی که علی رمز کرد امیر هم میتواند بازش کند. یعنی شما میتوانید از کلیدها بک آپ بگیرید و آن کلیدها را ببریم به یک user دیگر بدهیم.

برای Backup گرفتن از کلیدها؛ همانطور که مشاهده میکنید وقتی یک فایلی را برای اولین بار رمز میکنید یک بالن هشدار در پایین صفحه باز میشود. شما با کلیک روی آن میتوانید Backup بگیرید.

15

16

مراحل را Next میکنیم سپس دوباره به مرحله ای میرسیم که باید برای آن یک پسورد انتخاب کنیم:

17

دوباره Next میکنیم و سپس Finish .

خب حالا با یک user دیگری لاگین میکنیم و یک فایل میسازیم و آن را رمز میکنیم و از کلیدهایش Backup میگیریم. پس الان دوتا فایل رمز شده داریم که به وسیله ی دوتا user مختلف رمز شده است. حالا آیا همینجوری User1 به فایل رمز شده ی user2 دسترسی دارد؟ خیر(نه به خاطر اینکه NTFS Permission ندارد بلکه به خاطر اینکه فایل رمز شده است). اگر کلید رمزنگاری user1 به صورت زیر در اختیار user2 قرار بگیرد طبیعتا باید بتواند که به فایل دسترسی پیدا کند.

18

خب برای استفاده از کلیدها ابتدا روی آن کلیک راست کرده و آن را نصب میکنیم.

19

سپس Next میکنیم و در مرحله ی بعدی پسوردی که User1 روی بک آپ آن گذاشته است و بهمان گفته است و میدانیم را وارد میکنیم و تمام؛ بعدش میتوانیم فایل را باز کنیم.به این نکته ی خیلی مهم توجه کنید که این یعنی از این به بعد هرچیزی که user1 رمز بکند user2 میتواند ببیند چون کلیدهای این user را دارد. اما حالا یک سوالی؛ هرچیزی که user2 رمز بکند user1 میتواند ببیند؟ خیر؛ چون user1 که کلیدهای user2 را ندارد که.

حالا با User3 لاگین میکنیم. آیا user3 میتواند فایل های رمز شده user2 را ببیند؟ خیر.

بک آپ کلیدهای User2 را بهش میدهیم و نصب میکند. حالا میتواند فایل رمز شده user2 را رمز کند. حالا این User3 یک فایلی میسازد و آن را رمز میکند. خب همانطور که قبلا گفتیم وقتی برای اولین بار یک فایلی را رمز میکنیم یک بالنی باز میشود که از آن کلیدها Backup گرفته شود. ولی مشاهده میشود که این بالن دیگر در اینجا نمایش داده نمیشود. حالا signout میکنیم و با User2 لاگین میکنیم. آیا User2 باید بتواند فایل رمز شده User3 را ببیند؟ خیر چون کلیدهایش را ندارد؛ ولی خیلی جالب است که مشاهده میکنید که user2 به فایل رمز شده user3 دسترسی دارد و آن را باز میکند. این باز شدن دلیل دیگری دارد. در اینجا یک نکته ی بسیار ریز وجود دارد: اگر تا قبل از اینکه User یک فایلی را برای اولین بار رمز کند Backup کلیدهای یکی دیگر را بهش بدهید از این به بعد خودش هم هر چیزی را بخواهد رمز بکند با همان کلیدها رمز میکند و دیگر کلید جدید برای خودش درست نمیکند. اگر میخواهید خودش کلید جدید داشته باشد که فایل های رمز شده ی اونو کسی دیگر نتواند باز کند قبل از اینکه Backup رو بهش بدهید یک فایل را باهاش رمز کنید که یک ست کلید برایش ساخته شود. وقتی ساخته شد Backup را برگردانید. به این ترتیب هروقت چیزی را بخواهد رمز کند با کلیدهای خودش رمز میکند. هر وقت بخواهد به فایل های دیگران دسترسی داشته باشد اول سعی میکند با کلیدهای خودش آن را باز کند اگر توانست که هیچی؛ اگر نتوانست با اون کلیدهایی که بهش دادیم try میکند.

خب حالا کلیدهای یک User را به یک User دیگر داده ایم و میخواهیم بعد یک مدت کلیدها را ازش بگیریم.

21

سپس Snap in ، Certificates را Add میکنیم.

22

آن را باز میکنیم و از مسیری که در Dreil Down ها مشخص است به کلیدهای ذخیره شده میرسیم و از آنجا پاک میکنیم:

23

در اینجا هم کلیدهای User1 وجود دارد و هم کلیدهای User2.

حالا تصور کنید از کلیدهامون بک آپ نداریم و اون بالن هم باز نشده و میخواهیم بک آپ تهیه کنیم. این کار را باید از کجا انجام دهیم؟

تصور کنید ما User2 هستیم و لاگین کردیم . باز دوباره به MMC میرویم و Snap in مربوط به Certificate رو Add میکنیم. در اینجا میبینیم که کلیدهای خودمان موجود هست. روی آن کلیک راست می کنیم:

24

روی Export کلیک میکنیم و همان Wizard ای که قبلا هم باز میشود می آید. مطابق شکل زیر در اولین گام میپرسد که Private Key هم میخواهی در این Export در نظر بگیری یا نه؟ اگر Private Key نباشد که اصلا به درد نمیخورد پس Yes را انتخاب میکنیم.

25

ما میتوانیم به وسیله ی Command هم فایل رمز بکنیم. برای مثال میخواهیم فایل AAA.txt را که در درایو C هست را رمز بکنیم. همانطور که در شکل مشاهده میکنید دوتا سوییچ داریم. /E و /D که اولی فایل را رمز میکند و دومی فایل را رمزگشایی میکند.

27 28

حالا اگر همین دستور را با سوییچ /D اجرا کنیم فایل رمزگشایی میشود:

29

حالا با سوییچ /X هم میتوانیم از فایل Backup بگیریم:

30

یک فایل با نام و پسوردی که میدهیم درست میکند و Backup کلیدها را در آن جا ذخیره میکند.

سوال: چه کسی میتواند یک فایل را رمز کند؟ یعنی چه دسترسی هایی باید وجود داشته باشد تا بتوان یک فایل را رمز کرد؟ برای رمز یک فایل باید کاربر حتما دسترسی read و write داشته باشد. زیرا کسی که دسترسی read & write دارد نمیتواند فایل را delete کند اما میتواند فایل را باز کند یه ctrl+A بگیرد و بعد محتویات را پاک کند و save کند. یعنی یک کاری شبیه delete. بنابرایم رمز کردن دیگر بدتر از این کار نیست که . پس با read & write میتوان یک فایل را رمز کرد. یعنی ممکن است یک فایل را خودمان ساخته باشیم و یک نفر که این دسترسی را دارد بیاید و فایل خودمان را رمز کند و آن وقت دیگر خودمان به آن فایل خودمان دسترسی نخواهیم داشت.

مقاله EFS و Recovery Agent در ویندوز سرور نویسنده : مهندس محمد آجورلو

admin

    دیدگاه‌ها