یک عدد جونیور علاقه مند به حوزه امنیت :)
رمزنگاری مقدماتی : بررسی امنیت پروتوکول های شبکه
در این مقاله میخوایم به بررسی پروتوکول های شبکه و پروتوکول های امنیتی بپردازیم و نحوه کارشونو به صورت مختصر بررسی کنیم و دوتا مفهوم Cipher Suites و Perfect Forward Secrecy میریم
ما توی این مقاله و بعدی سراغ این پروتوکول ها میریم : TOR-IPSEC-TLS-HTTPS-SSH-SFTP
بررسی SSL - TLS و مفهوم Cipher Suites :
اولین پروتوکولی که میخوایم بررسی کنیم ، پروتکول TLS یا Transport Layer Security هست
اگر خاطرتون باشه من چندین مقاله پیش گفتم که ما کلا دوتا راه داریم برای امن سازی ارتباطمون ، یکی اینکه پیام هارو تک به تک رمزکنیم ، یا یه تونل یا راه امن بسازیم و پیام هارو بدون رمز از توش منتقل کنیم
برای اینکه ما بتونیم یه تانل یا یه مسیر امن بسازیم و داشته باشیم ، آمدن یه پروتوکلی ساختن به اسم TLS ، این پروتوکول در هرجایی که بخوایم دیتا امن ردو بدل کنیم به کار میاد ، از این پروتوکول در کنار سایر پروتوکول های دیگه استفاده میکنن که اون هارو امن کنن، مثلا از TLS در کنار HTTP استفاده میکنن که امنش کنن و ما HTTPS رو داریم، درکنار SMTP استفاده میکنن که ما SMTPS رو داریم (اون S آخر همون TLS هست) ، ببینیم چطوری این مکانیزم کار میکنه :
این مکانیزم اسمش دست دادن TLS یا TLS Handshake هست ، اولین قدم اینه که کاربر پیام میده به سرور و میگه که میخوام باهات ارتباط امن برقرار کنم (TLS) ، و اینم پروتوکول هاییه که من ساپورت میکنم (بهش میگن Cipher Suite ، جلوتر میگمش کامل)
در قدم بعد سرور میاد بررسی میکنه میگه اوکی من اینارو قبول داریم و بیاییم هردو از این پروتوکول های استفاده کنیم ، بیا مدرک دیجیتال منم بگیر
قدم بعدی کاربر مدرک رو گرفته میره از CA اعتبار سنجی میکنه و اگر درست بود میاد و یه کلید میسازه و میده به سرور که باهم استفاده کنن و پیام هارو از این به بعد با اون رمز کنن
چند تا نکته :
نکته : در مراحل 1و2و3 ما با کلید عمومی و خصوصی رمز گذاری و رمزگشایی میکنیم، در قدم اول ما وقتی به سرور پیام میدیم ، اون پیامو با کلید عمومی سرور رمز میکنیم و سرور با کلید خصوصیش باز میکنه ، در قدم دوم سرور وقتی میخواد جواب مارو بده اونو با کلید خصوصیش رمز میکنه و ما با کلید عمومی سرور باز میکنیم، و مرحله 5 هم باز به همین شکله که ما با کلید عمومی سرور ، میاییم Session Key رو رمز میکنیم و سرور با کلید خصوصیش باز میکنه و میبینه و با اون شروع میکنه پیام هارو رمز کردن
نکته : رمزنگاری نامتقارن کلا سنگینه و ارتباط باهاش ممکن نیست ، سر همین ما یه تونل میزنیم و از رمزنگاری نامتقارن استفاده میکنیم که در نهایت یه کلید متقارن بسازیم ، اینجا بهش میگن Session Key ، و با اون شروع میکنیم داده هارو رمز کردن
نکته : این کلید متقارن که بهش میگن Session Key ، برای هر بار ارتباط منقضی میشه و دوباره باید ساخته بشه و بهش کلید موقتی یا Ephemeral هم میگن
نکته : TLS یه الگریتم رمزنگاری نیست ، فقط یه پروتوکولیه که از الگریتم های هش و رمزنگاری های متفاوتی استفاده میکنه برای امن سازی ارتباط
ما میتونیم حتی برای ارسال ایمیل هم از TLS استفاده کنیم که بهش میگن SMTPS و روی پورت 989 و 990 هست (یعنی ما یه تانل TLS اول میزنیم ، بعد SMTP رو از توش رد میکنیم) ، به همین ترتیب میتونیم برای FTP ازش استفاده کنیم ، برای پیام رسان ها ، VOIP و..
نکته : SSL یه پروتوکول قدیمی هست که دقیقا TLS رو از روی اون ساختن ، ولی SSL سال 1996 منسوخ شده و کلی مشکل امنیتی داره ، ولی TLS ورژن جدیدشه و امروزه استفاده میشه و خیلی امن تره ، پس اگر خواستید اسم تکنیکال بکار ببرید باید بگید TLS ، چون SSL منسوخ و نا امنه
نکته : وقتی پروتوکول SSL آمد، سه تا ورژن داشت ، ورژن 1 ، 2 و 3 و از این ورژن ها باگ های زیادی کشف شد و امدن گفتن TLS رو بسازیم ، سر همین آمدن TLS ورژن 1.0 رو از روی SSL ورژن 3 ساختن ، و همینطوری امنش کردن تا به امروز
نکته : پروتوکول TLS ورژن های مختلفی داره ، ورژن 1.0 که امن نیست ، ورژن 1.2 که امنه و ورژن 1.3 که خیلی امنه
Cipher Suites چی هست ؟
وقتی توی مرحله 1 ، کاربر گفت من این پروتوکول هارو ساپورت میکنم ، منظورش چی بود؟
ببینید وقتی ما میخوایم ارتباط برقرار کنیم با سرور باید بگیم ما از چی پشتیبانی میکنیم ، ما چه الگریتم هایی رو میفهمیم ؟ درواقع اگر ما به سرور بگیم که ما یه سری الگریتم خاص ساپورت میکنیم ، به اون میگن Cipher Suite
TLS v1.2 Cipher Suite : ECDHE_RSA_AES128_GCM_SHA256
برای مثال ، CS پروتوکول TLS ورژن 2 چیزی هست که نوشتم : از الگریتم منحنی بیضوی دفی هلمن استفاده میکنه ، از RSA و AES 128 استفاده میکنه و از SHA256 برای هش استفاده میکنه و فقط اینارو میفهمه !
TLS v1.3 Cipher Suite : TLS_AES_256_GCM_SHA384
در ورژن 1.3 TLS ما از AES 256 و SHA 384 استفاده میکنیم ، حالا ما بیاییم ببینیم ویرگول چه Cipher Suite هایی رو ساپورت میکنه :
میبینیم که از Cipher Suite های زیادی پشتیبانی میکنه
نکته : وقتی به سرور پیام میدید و مرورگر شما قدیمیه ، مرورگر شما Cipher Suite قدیمی و ضعیفی رو میفرسته به سمت سرور ، چون قدیمیه ! و اگر سرور قبول کنه که اتصال برقرار میشه ولی اگر نکنه که مرورگر نمیتونه ارتباط بگیره !
نکتش چیه ؟ اگر شما مدیر یه سرور هستید براتون امنیت خیلی خیلی مهمه ، باید ممنوع کنید استفاده از Cipher Suite های ضعیف رو !
نکته : همینجا تا بحث داغه یه چیزی رو بگم ، ما یه حمله داریم به اسم Downgrading یا تنزیل ، همونطور که گفتم اگر ما Cipher Suite هایی که ارسال میکنیم به سمت سرور ضعیف باشن ، ما یه جورایی میتونیم خودمون رو محتمل حمله بکنیم :)
یا اگر بیاییم پروتوکول رو از TLS1.3 که امنه ، بکنیم SSL 2 خب واقعا میتونیم گند بزنیم به امنیت ، به این حملات میگن حملات تنزیل یا Downgrading و به این صورت هستن که ما میاییم به یه سری ورژن پایین تر از هر چیزی که ضعف داره ارتباط رو برقرار میکنیم ، حالا میتونیم کاربر رو مجبور به این کار بکنیم و بهش حمله کنیم :)
برای مثال سایت های زیر رو اگر چک کنیم :
میبینیم که ویرگول امده و همه ورژن های SSL رو بسته و این کار فوق العاده ایه ولی TLS 1.0 و TLS 1.2 رو باز گذاشته که زیاد خطر جدی ای نیست ولی بهتره که اونارم ببنده ، ولی اگر ببنده خیلی از مروگر های قدیمی نمیتونن ارتباط بگیرن با ویرگول ..
نکته : استفاده از TLS یه جورایی END TO END ENCRYPTION محسوب میشه و شما با استفاده از این کار رسما هر دستگاهی که بخواد ترافیک شمارو شنود کنده کور میکنید ، چون هیچ دیدی ندارن ، این از دیدگاه امنیت خیلی خوبه ولی از دیدگاه نفوذم خوبه ، بدافزار ها اگر از این تکنیک استفاده کنن ، کارهایی که میکنن قابل دیدن نیست :)
هرچیزی کاربرد های خوب و بد ممکنه داشته باشه، برای اینکه حالا بیاییم داخل اون ترافیک رو ببینیم باید Proxy کنیم یا روی host ها مکانیزم امنیتی بزاریم و خیلی دنگو فنگ دیگه !
بررسی پروتوکول TOR و مفهوم Perfect Forward Secrecy :
چون این مطلب خودش یه مقاله کامل شد ، من شمارو به خوندنش توی این لینک تشویق میکنم
بررسی پروتوکول IPSEC :
پروتوکول TCP/IP وقتی ابداع شد اصلا امن نبود و بعدها دیدن که باید به فکر امنیتش باشن ، سر همین امدن و IPSEC یا Internet Protocol Security رو ابدا کردن که پروتوکولی هست که از الگریتم های رمزنگاری استفاده میکنه ، دقیقا مثل TLS و خودش الگریتم رمزنگاری نیست
به طور مختصر بگم : ما توی هر بسته ای که ارسال میکنیم یه Header داریم و یه Payload ، توی Header ما ادرس مبدا و مقصد و اینارو داریم و توی Payload ما خود خود دیتا رو داریم
پروتوکول IPSEC میاد و یه تونل امن ایجاد میکنه ، چطوریش بماند ولی بدونید که برای Integrity پکت ما میاد از AH (Authentication Headers) استفاده میکنه که شبیه Hash و HMAC ای هست که بررسی کردیم و میاد به شیوه خودش اعتبار سنجی میکنه که مطمئن بشه نه Header و نه Payload عوض نشده
و از ESP (Encapsulating Security Payload) استفاده میکنه که هم Header و هم Payload رو رمز کنه
مثل TLS که ما Cipher Suite داشتیم ، اینجا هم همون مفهومو داریم ولی بهش میگن SA (Security Associations)
چون با IPSEC میشه تانل زد ، ازش به عنوان VPN استفاده میکردن ، ولی الان دیگه از مدل های دیگه VPN استفاده میکنن
پروتوکول SSH :
ما یه پروتوکول داریم به اسم Telnet که باهاش از راه دور به سرور ها و کامپیوتر ها و دستگاه ها وصل میشن و کامند میزنن، این خیلی نا امنه ، بجاش امدن و ورژن امنشو ساختن که اسمش SSH هست
مکانیزم کاری SSH خیلی خیلی شبیه TLS هست ، از این جهت که با کلید عمومی اول باهم صحبت میکنن تا کلید خصوصی یا Session Key رو تبادل کنن و با اون شروع کنن به رمزنگاری پیام ها (و مثل TLS اول تانل ایجاد میکنه)
پروتوکول SSH ورژن های مختلفی داره ، ورژن 1 ، 1.5 و 2 که بجز 2 بقیه ورژن ها خیلی نا امن هستن
و توی SSH ورژن 2 ما تبادل کلید دفی هلمن رو داریم و MAC برای اینکه از Integrity پیام مطمئن بشیم
امنیت ایمیل با S/MIME :
این هم یک ایده ای بود برای امنیت ایمیل که از ایده کلید عمومی و مدرک دیجیتال (X.509) استفاده میکنه ، سازوکارشم خیلی راحته ، با کلید عمومی شخص مقصد پیام رو رمز میکنه و میفرسته بهش و طرفم با کلید خصوصیش باز میکنه و میخونه !
فقط اینکه این کلید از کجا بدست فرستنده برسه مهمه ، این کلید عمومی باید توی مدرک باشه (X.509) و اون مدرک رو شخص گیرنده یا باید مستقیم ارسال کنه به فرستنده ، یا توی یه سروری بسازه و بگه این ایمیل منه و این هم مدرک و کلید منه و ازش استفاده کنید
برنامه های پیام رسان ایمیل مثل Gmail - Outlook و.. همگی از این روش استفاده میکنن برای امنیت ایمیل
نکته : الان شاید یکم درگیر بشه ذهنتون که فرق S/MIME و SMTPS چیه که مختصر بگم ما تو SMTPS اول یه تانل میزنیم با TLS بعد با SMTP پیام رو میفرستیم ولی تو S/MIME که بیشتر برنامه های تجاری از این استفاده میکنن ، میان و نامه رو رمز میکنن و میفرستن ، اینجا فرق بین تانل و رمز کردن نامه رو اگر درک کرده باشید میفهمید تفاوتشونو ، اون مثال که شاه پیام رو رمز میکنه و با یه سرباز میفرسته ، یا میتونه پیام رو رمز نکنه ولی با 200 تا سرباز بفرسته رو به یادتون بیارید که فرق رمز کردن و تانل رو متوجه بشید !
نکته : رمزنگاری S/MIME هم از نوع E2EE هست
در مطلب بعدی سراغ حملات رمزنگاری میریم و توی یه سناریو رمزنگاری رو مرور میکنیم و تمـــــــام ;)
سوال یا ابهام یا انتقادی بود در خدمتم، یاعلی ;)
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی : مرور و جمع بندی
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی : ریاضیات و شرح کارکرد الگریتم های نامتقارن
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی به زبان ساده : بررسی مفاهیم اولیه رمزنگاری