محمد حسن پزشکیان
محمد حسن پزشکیان
خواندن ۷ دقیقه·۷ ماه پیش

بررسی هدر های امنیتی ایمیل : SPF - DKIM - DMARC


در مبحث امنیت ایمیل ما نکات بسیاری رو باید رعایت کنیم، از اونجایی که حملات در فاز اولیه ( Initial Access ) اغلب از مسیر پیام رسان ها منتقل میشن ، امنیت ایمیل یکی از چالش های افراد و مخصوصا سازمان هاست

راهکار های زیادی برای امن سازی ایمیل و جلوگیری از این حملات وجود داره ، یکیشون استفاده از محصولات

https://sqrx.com/

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

منتها در اینجا ما قراره سه تا قابلیت رو برای امنیت ایمیل معرفی کنیم

Email Authentication and Verification :

ما چطوری میتونیم مطمئن بشیم که ایمیلی که به دست ما میرسه واقعا از اونجایی که گفتن ارسال شدن (فرستنده همونیه که واقعا توی ایمیل نوشته شده)

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

ما چرا به احراز هویت و اعتبار سنجی نیاز داریم؟ ایمیل نیاز نبوده که امن بشه یا امن طراحی بشه ، هدر ها توسط سیستم هایی که ایمیل رو میساختن ست میشدن و این سیستم اگر مال مهاجم باشه شرایط خیلی بد میشه

ما اگر بخوایم بفهمیم این ایمیلی که امده واقعا از طرف یه فرستدنه خاصه (مثلا ایمیلی که از سمت گوگل به ما رسیده رو واقعا گوگل فرستاده یا یکی دیگه فرستاده و خودشو جای گوگل جا زده یا نه) میتونیم از چند روش استفاده کنیم :

1- گواهی نامه دیجیتال : گواهی نامه دیجیتال خیلی خوبه چون از امضای دیجیتال استفاده میکنه ، مشکلی ک این گزینه داره اینه که برای اینکه قابل استفاده باشه همه باید بتونن یدونه داشته باشن (بخرن) و اگر اسکیل بره بالا واقعا قیمتش گرون میشه

2- ما میریم سراغ SPF - DKIM - DMARC و...

Sender Policy Framework :

یه روشیه برای احراز هویت فرستنده پیام ، منظور از فرستنده یه شخص خاص نیست بلکه منظور اینه که ایمیل از مبدا ای میاد که توسط دامینی که اعلائم میکنه معتبر باشه ( خیلی ساده بخوام بگم ، اگر ما چندین سرور داریم و همشون تحت عنوان یک دامین دارن فعالیت میکنن ، وقتی یکی از این سرور ها ایمیل میفرسته ، ما باید بتونیم اعتبار سنجی کنیم که ایا این سرور مال همون دامینه یا خیر ! )

ما اطلاعات spf رو درون رکورد txt میریزیم و برای هر دامین یدونه بیشتر ازش نداریم !

مدیر میاد یه لیست از سرور های معتبر درست میکنه و توی این رکورد قرار میده و میگه همه میتونن این لیستو ببینن و اعتبار سنجی کنن که آیا ایمیلی که براشون امده از سمت ما بوده یا خیر

و به طبع کسانی که ایمیلی دریافت میکنن از سمت اون سرور باید بیان فیلد return path مال اون ایمیل رو بررسی کنن با رکورد های spf ای که مال فرستندس و ببینن آیا ایپی ادرس فرستدنه توی اون لیست بود پس معتبره !

عکس 0
عکس 0

برای مثال اطلاعات رکورد spf مال سایت ویرگول اینطوریه ، بزارید مقادیر مختلفشو تشریح کنم :

عکس 1
عکس 1

ما v=spf1 داریم که نشون میده این رکورد از txt مال spf هست ، ورژن spf رو نشون میده که زیاد مهم نیست و این مقدار حتما باید اول باشه

قسمت ip4 میگه لیست آیپی ادرس هایی که ما (کسی که صاحب وبسرور ها، سایت و دامینه) معرفی میکنیم به عنوان لیست معتبر ، ما ip6 هم داریم

قسمت بعدیش include هست که میگه وقتی یه ما nested domain یا subdomain داریم و... بجز چک کردن ادرس فرستنده (آیپی ها) حتما این مقادیر رو هم چک کنن ، کاربر این قسمت برای اینه که اگر ما چندین دامین مختلف داریم، چندین spf مختلف هم برای اون ها داریم و با این کار میتونیم ارجاع بدیم که گیرنده spf اون هارو هم چک کنه

قسمت اخر هم به گیرنده میگه اگر این مقادیری که گذاشتم نبود و پیام اصطحلا spf fail خورد ، چیکار بکن

اگر all- بود که میگه کلا بیخیال پیام شو و نادیدش بگیر ، اگر all~ بود میگه توی پوشه spam قرارش بده یا به عنوان insecure mail بشناسش ولی قبولش کن ، اگر all+ بود میگه مهم نیست برام spf چی بشه ، قبولش کن

حواستون باشه نباید خیلی رکورد بلندی باشه !

عکس 2
عکس 2

اگر الان بخواید رکورد های ویرگول رو بخونید که من توی عکس 0 گذاشتم براتون ، متوجه یه سری تغییرات کوچیک میشید، درواقع ویرگول بجای معرفی کردن مستقیم آیپی ادرس سروراش ( که کار خوبیم کرده چون اونطوری امنیتشون ب خطر میفتاد ) امده اشاره داده به سایت های دیگه ، درواقع ویرگول برای ایمیل دادن از سرور های شخص ثالت و سایت های دیگه استفاده میکنه که آمده ادرس اون هارو توی رکورد spf اش وارد کرده و با این کار اگر شما از سمت اون ها ایمیلی دریافت بکنید متوجه میشید که ویرگول داده !


DomainKeys Identified Mail :

ما با این روش تمامی ایمیل هایی که از سمت دامین ارسال میشن رو امضا میکنیم

ما اینجا هم authentication داریم هم integrity و از رمزنگاری کلید عمومی استفاده میشه (اگر این مفاهیم رو نمیدونید به سری مقالات رمزنگاری بنده یه سری بزنید) ، کلید عمومی توی یک رکورد دی ان اس ذخیره میشه و کلید خصوصی هم توی سیستمی که باهاش ایمیل ساخته میشه نگهداری میشه

پس پیام امضا شده در وسط راه قابل تغییر نیست چون امضا تغییر خواهد کرد

ما در ایمیل دریافتی یک یا چند تا DKIM Header داریم که سرور فرستنده اضافه میکنه و حاوی اطلاعاتیه که امضا چطوری ساخته شده ، شامل body hash ، الگریتم ها و dkim signature میشه و ما با کلید عمومی ای که در dns record ها هست میتونیم رمزگشایی کنیم و اعتبار سنجی کنیم ، و اما تحلیل این رکورد :

عکس 3
عکس 3

ما اولش مثلا spf یه DKIM-Signature داریم که میگه این قسمت مروبط به DKIM هست، و ورژنش رو نشون میده و میره سراغ الگریتم که با a میگه با چه الگریتمی این مقادیرو هش بگیر و مقایسه کن ، بعد d دامین فرستنده رو میگه ، و s که بهش میگن selector و مهمه ، برخلاف spf که فقط یدونه میتونست باشه، DKIM میتونه چند تا باشه و توی هدرش با s میگه که چه رکورد DKIM ای باید بررسی بشه برای این ایمیل خاص ، درواقع تخصصی تر بخوام بگم ما وقتی چند تا سرور داریم که ایمیل رو جواب بدن یا ارسال کنن، هر کدوم کلید خصوصی خودشونو دارن و این باعث میشه کلید ها متفاوت باشه و تعداد کلید زیاد امنیت رو بیشتر میکنه، و تنها راهی که میشه فهمید و فهموند که کلیدی که برای رمزگذاری و رمزگشایی ایمیل استفاده میشه متفاوت هست استفاده از selector متفاوت هست، یعنی اگر شما دوتا ایمیل دریافت کردید از یک جا با selector های متفاوت یعنی از دو سرور متفاوت امده و دو کلید متفاوت هم برای رمز این دو ایمیل استفاده شده

در bh ما هش body ایمیل رو داریم که برای این استفاده میشه که چک بشه ایا ایمیل عوض شده یا نه

با h میشه فهمید با چه هدر هایی استفاده شدن تو input value برای محاسبه هش ، به زبان ساده وقتی میخواد هش گرفته بشه باید یه مقدار ورودی بهش بدیم، اینکه چه مقادیری داده شده رو اینجا میتونید ببینید و خودتونم اونارو بدید و هش رو محاسبه کنید

و b هم امضای دیجیتال ایمیل هست

عکس 4
عکس 4

رکورد dns مربوطش اینطوریه که اولش سلکتور هست که با قرمز مشخص شده ، با _. ما میفهمیم این مربوط به DKIM هست و با سبز مشخص شده ، با v=DKIM1 هم باز همینو میفهمیم و با =p ما کلید عمومی رو داریم که میتونیم باهاش اعتبار سنجی کنیم

عکس 5
عکس 5

اینجا یه نمونه از هدر واقعی مربوط به سایت ویرگول رو میبینید که اگر بهشون ایمیل بدید یه همچین چیزی میبینید

عکس 6
عکس 6

ما با وارد کرد سلکتور ویرگول و اسم سایتش میتونیم اطلاعات این رکورد رو ببینیم



Domain-based Message Authentication, Reporting & Conformance :

این هم یه رکورد دی ان اس هست که به سرور مقصد میگه بعد چک کردن spf و dkim چیکار بکنه، یه جور دستور العمل و مکانیزم گزارش دهیه که به هر دریافت کننده میگه چیکار کن اگر spf و dkim موفقیت امیز نبود

عکس 7
عکس 7

ساختار تقریبا مثل قبلیاس ولی قسمت مهماش اینه : با p میگه اگر چک spf و dmarc موفقیت امیز نبود با پیام چیکار کن ، اینجا سرور به مقصد میگه قرنطینش کن ، adkim و aspf مقدار r گرفتن ، دوتا مقدار میتونن بگیرن ، یکیشون strict هست و یکیشون relaxed هست که چطوری این دوتارو چک کن ، زیاد فرقی ندارن و اگر سازمان هام relaxed هست، و فیلد اخرم که مهم هست میگه گزارشی که میخوای بفرستی رو به کجا بفرست ، بهتره به یه جای شخص ثالث ارجاعش بدید چون تعداد زیادی ایمیل دریافت میکنید

عکس 8
عکس 8


توی مقاله بعدی (به این لینک) عملی این موارد رو باهم کانفیگ میکنیم

منتظر سوالات ، انتقادات و پیشنهادات شما هستم


امنیت ایمیلspf
یک عدد جونیور علاقه مند به حوزه امنیت :)
شاید از این پست‌ها خوشتان بیاید