بررسی گواهی ssl/tls با ابزار TLSx در باگ بانتی
مقدمه
امروزه در دنیای دیجیتالی، امنیت دنیای آنلاین بیش از پیش احساس میشود. هرچه بیشتر به اینترنت وابسته میشویم، بایستی راهی برای حفظ حریم شخصی و امنیت ارتباطات مان هم پیدا کنیم. اینجا نقطه ای است که SSL و TLS به میان میآیند.
SSL (Secure Sockets Layer) و TLS (Transport Layer Security) هندشیک های سری اینترنت هستند. این پروتکل ها ارتباطات امنی بین یک وب سایت و مرورگر شما ایجاد میکنند و به شما اطمینان میدهند که حریم خصوصی تمام اطلاعاتی که بین شما و وب سایت رد و بدل میشود حفظ میشود و هیچ کدام از آنها توسط شخص دیگری رهگیری یا دستکاری نمیشوند.
SSL و TLS چیزی فراتر از برقراری امنیت برای اطلاعات شما انجام میدهند. آنها همچنین تایید میکنند که آیا این وب سایت چیزی است که خودش میگوید یا نه؟ بنابراین وقتی در قسمت آدرس بار مرورگرتان آیکون قفل کوچک را مشاهده کردید، میفهید که این وب سایت قانونی است و تله فیشینگ نیست.
دراین مقاله به بررسی جزئی و عمیق پروتکلهای SSL و TLS پرداختهایم البته اگر میخواهید بیشتر در مورد این پروتکل ها بدونید حتما دوره آموزش مبانی تست نفوذ وب را مشاهده کنید. دراین مقاله یاد میگیریم که چگونه از این گواهیها برای ریکان، آسیبپذیری ها و پیکربندیهای نادرست استفاده کنیم و همچنین یادمیگیریم که چگونه از ابزار TLSx برای یافتن آسیبپذیریها و پیکربندیهای نادرست استفاده کنیم.
TLS چگونه کار میکند؟
برای کاربر آخر، بیشتر مراحل فرایند غیرقابل مشاهده است. ولیکن کاربر در کل فرایند درگیر است.
- کلاینت با ارسال یک درخواست به سرور برای شروع یک ارتباط امن، فرایند را آغاز میکند
- مراحل بعدی دربرگیرنده پاسخدهی های سرور با ارسال یک کپی از گواهی SSL/TLS خود که شامل کلید عمومی سرور است، ادامه پیدا میکنند.
- سپس، کلاینت گواهی را تایید میکند و کلید عمومی سرور را استخراج میکند.
- سپس کلاینت یک کلید متقارن ایجاد و آن را با کلید عمومی سرور کدگذاری میکند، و کلاینت این کلید کدگذاری شده را به سرور ارسال میکند.
- سپس، سرور این کلید را بااستفاده از کلید خصوصی کدگشایی میکند، و دراین مرحله هردو بخش کلید متقارن را درست دارند.
- از ایجا به بعد، تمام دادههای تبادل شده بین کلاینت و سرور بااستفاده از کلید متقارن کدگذاری و کدگشایی میشوند.
TLSx – یک TLS گیر سریع با قابلیت پیکربندی
TLSx یک ابزار سریع با قابلیت پیکربندی است که در امر پیدا کردن پیکربندی های اشتباه TLS و ریکان مثل چاقوی سوییسی عمل میکند. TLSx یکی دیگر از ابزارهای خط فرمان غنی از ویژگی است که میتواند به اتومیشن سازی ریکان و اسکن آسیبپذیری برای گواهیهای SSL/TLS کمک کند. این ابزار قابلیت های زیادی دارد که در ادامه به آن ها پرداختهایم:
- اسکن پیکربندی اشتباه: با این قابلیت امکان بررسی حضور آسیبپذیری های متعدد در گواهیهای SSL و TLS مثل گواهیهای منقضی شده و … را داریم.
- تشخیص SAN و CN: این ابزار به تشخیص و استخراج فیلدهای SAN و CN از گواهی SSL/TLS کمک میکند.
- تجزیه گواهی: ابزار TLSx قادر به تجزیه گواهیهای SSL و TLS و استخراج اطلاعاتی مثل تاریخ انقضا، صادرکننده گواهی و الگوریتمهای کدگذاری است.
- انگشتنگاری JARM/JA3: ابزار TLSx قادر به تولید اثرانگشتهای JARM و JA3 ارتباطات SSL و TLS به منظور شناسایی نرم افزارهای خاص و نسخه های استفاده شده در وب سایت است.
- قابلیت گزارش نویسی: TLSx بااستفاده از اطلاعات و آسیبپذیریهای پیدا شده قادر به تولید گزارش هم هست، که این قابلیت باعث آسان تر شدن آنالیز نتایج میشود. فرایند نصب این ابزار خیلی سرراست آسان است، دستورالعمل کامل را از این لینک میتوانید دریافت کنید: https://github.com/projectdiscovery/tlsx.
درادامه مقاله به بررسی جنبه های مختلف پیاده سازی SSL/TLS پرداخته ایم که از می توان از آنها برای کارهای تست نفوذ بیشتر استفاده کرد.
گزارشهای شفافیت گواهی
گزارش های شفافیت گواهی (Certificate transparency logs) گزارشهای عمومی با قابلیت ضمیمه شدن هستند که اطلاعات مربوط به گواهیهای SSL/TLS را درخود ذخیره میکنند. از این گزارشها با اجازه دادن به افراد برای نظارت برفرایند صدور گواهی و تشخیص صدور گواهی اشتباه، برای افزایش شفافیت و بهبود امنیت اپلیکیشنها استفاده میشود.
این گزارشها توسط سازمان های مستقل نگهداری می شوند و توسط هر کسی از طریق زیرساخت کلید عمومی قابل تأیید هستند. علاوهبراین اگر گواهیای به درستی صدور نشده باشد هم از طریق این گزارشها قابل تشخیص است.
تایید مالکیت
مالکیت هاست را می توان با بررسی جزئیات موجود روی گواهی SSL/TLS مرتبط با هاست تعیین کرد. راههای مختلفی برای بررسی این اطلاعات وجود دارد، اعم از: بررسی دستی ازطریق مرورگر وب، یا استفاده از ابزارهایی مثل TLSx.
ازطریق مرورگر وب، معمولا میتوانید مالک هاست را با دنبال کردم مراحل زیر به صورت دستی پیدا کنید:
- به وب سایتی که می خواهید آن را بررسی کنید بروید، مثلا https://ginandjuice.shop/.
- روی آیکون قفل در آدرس بار کلیک کنید و سپس روی سربرگ “Details” یا “Certificate” کلیک کنید.
- دنبال فیلد “Subject” یا “Issued” بگردید، که اطلاعات مالک را ممکن است دربرداشته باشند.
برای بررسی مالکیت بااستفاده از ابزار TLSx دستور زیر را اجرا کنید:
tlsx -u https://ginandjuice.shop -cn
این دستور هدف گواهی را برمیگرداند که دراصل همان مالک وب سایت است. با استفاده از ابزار با سرعت بیشتری مالکیت هاست های بیشتری را بااستفاده از URL های بیشتری به عنوان آرگومان میتوانید بررسی کنید.
پروتکلهای SSL/TLS
از زمان شروع بهکار SSLv2 در سال 1995 تا TLSv1.3 که آخرین نسخه بود، نسخه های پروتکل مختلفی به وجود آمدند. در ادامه به طور خلاصه به چند پروتکل SSL و TLS پرداختهایم:
- SSLv2 :ا SSLv2 اولین نسخه پروتکل SSL بود که درسال 1995 منتشر شد. با داشتن چند آسیبپذیری شناخته شده این نسخه بسیار ناامن است و استفاده ازآن اصلا پیشنهاد نمیشود.
- SSLv3 :ا SSLv3 نسخه بعدی پروتکل SSL بود که درسال 1996 منتشر شد. این نسخه نیز به دلیل حمله PODDLE آسیبپذیر و ناامن است و استفاده از آن پیشنهاد نمیشود.
- TLSv1.0: این پروتکل اولین نسخه پروتکل TLS است که درسال 1999 منتشر شد. این نسخه نیز مستعد حملات خاصی مثل POODLE است، که توصیه میشود درصورت امکان آن را غیرفعال کنید.
- TLSv1.1: این نسخه از پروتکل در سال 2006 منتشر شد و به منظور اصلاح برخی از ضعفهای امنیتی نسخه TLSv1.0 طراحی شده بود. امن تر از نسخه TLSv1.0است ولیکن به دلیل اینکه از حفظ محرمانگی اطلاعات ارسال شده پشتیبانی نمیکند و میزان مقاومت آن دربرابر برخی از حملات که نسخههای جدیدتر امتحان خود را دربرابر آنها پس دادهاند، مشخص نیست، استفاده از آن توصیه نمیشود.
- TLSv1.2: این نسخه از پروتکل در سال 2008 منتشر شد و درمقایسه با نسخههای قبلی از امنیت بیشتری برخوردار است. به دلیل پشتیبانی از محرمانگی اطلاعات ارسال شده و سایر بهینه سازی های امنیتی استفاده از این نسخه توصیه میشود.
- TLSv1.3: این نسخه از پروتکل درسال 2018 منتشر شد و امن ترین نسخه تولید شده تا به امروز است. این نسخه درمقایسه با نسخه های قبلی دربرگیرنده بهبودهای قابل توجهی ازجمله بهبود سیستم رمزنگاری و عملکرد سریع تر است.
به طور کلی توصیه می شود از آخرین نسخه پروتکل که توسط کلاینت و سرور پشتیبانی میشود، استفاده کنید که در حال حاضر TLSv1.3 است. همچنین این نکته مهم را به یادداشته باشید که حتی به روزترین نسخه پروتکل هم باید به درستی پیکربندی شود و از رمزهای آسیبپذیر و پیکربندیهای ضعیف باید اجتناب شود.
برای پی بردن به نسخه پروتکل، دستور زیر را در TLSx اجرا کنید:
tlsx -u https://ginandjuice.shop -tv
همانطور که در اسکرین شات بالا هم نمایش داده شده است، ابزار تشخیص داده که در اپلیکیشن https://ginandjuice.shop از پروتکل TLS1.2 استفاده شده است.
مشکلات پیکربندی رایج
چندین پیکربندی اشتباه ممکن است با گواهینامه های SSL/TLS رخ دهد که به طور بالقوه منجر به آسیب پذیری های امنیتی می شود. برخی از این اشتباهات پیکربندی عبارتند از:
- گواهیهای منقضی شده: یک گواهی منقضی شده گواهیای است که زمان انقضای آن رد شده و دیگر اعتباری ندارد. این اتفاق زمانی رخ میدهد که گواهی به موقع به روزرسانی نشده باشد.
- گواهیهای خودامضا: یک گواهی خود-امضا به جای اینکه توسط یک سازمان (Certificate authority (CA)) معتبر و قابل اعتماد تایید و امضا شود توسط صاحب وبسایت امضا و تایید میشود.
- گواهیهای نامتقارن: در یک گواهی نامتقارن با نام دامنه ای که با آن مرتبط است تطابق ندارد. این اتفاق زمانی رخ میدهد که گواهی برای نام دامنه متفاوتی صادر شده باشد یا در وب سایت دیگری غیر از آنچه در نظر گرفته شده است استفاده شود.
- گواهی های باطل شده: گواهی ابطال شده توسط مرجع صدور گواهی (CA) قبل از تاریخ انقضای آن لغو شده است. این اتفاق زمانی رخ میدهد که گواهی در معرض خطر قرار گرفته باشد، گواهی برای نهاد اشتباهی صادر شده باشد یا درخواست امضای گواهی نیاز به تأیید داشته باشد.
درکل ابزار TLSX درحین اجرا با URL وب سایت به عنوان مدرک و بررسی جزئیات گواهی چنین مشکلات پیکربندی را تشخیص میدهد. این بررسی میتواند مشخص کند که گواهی منقضی شده، خود امضا شده، مطابقت ندارد یا باطل شده است.
دستور زیر را به منظور تشخیص اشتباهات پیکربندی رایج در ابزار TLSx اجرا کنید:
./tlsx -l hosts.txt -ex -ss -mm -re
مشاهده شد که دستور بالا پیکربندیهای اشتباه مختلفی مانند گواهیهای منقضی شده و لغو شده از لیست هاست های ارائهشده درلیست بالا را برجسته میکند.
شمارش رمز ها با TLSx
یکی از ویژگی های TLS امکان انتقال در موارد استفاده از رمزنگاری های مختلف رمزنگاری در طول فرآیند هند شیک اولیه است. شمارش رمزها به شخص اجازه می دهد تا بفهمد و تشخیص دهد که آیا از رمزهای ضعیف استفاده شده است یا خیر.
راههای مختلفی برای شمارش رمزها وجود دارد و TLSx هم یک راه آسان برای شمارش رمزها با اجرای دستورات زیر را فراهم کرده است:
tlsx -l hosts.txt -cipher -ce
از آنجاییکه به منظور شمارش رمزهای ضعیف در Nuclei قالبهایی ایجاد کردهایم، از این ابزار برای اینمنظور هم میتوانید استفاده کنید. این قالب را از لینک زیر میتوانید پیدا کنید:
https://github.com/projectdiscovery/nuclei-templates/blob/main/ssl/weak-cipher-suites.yaml
اسکن برای پیدا کردن رمزهای ضعیف بااستفاده از Nuclei چیزی شبیه به دستور زیر است:
nuclei -u https://cbc.badssl.com/ -t weak-cipher-suites.yaml
SAN/CN
نام جایگزین هدف (Subject Alternative Name (SAN)) و نام عمومی (Common Name(CN)) اسم فیلدهای موجود در یک گواهی SSL/TLS است که دربرگیرنده اطلاعاتی درباره نام (های) دامنه مرتبط با گواهی است.
نام جایگزین هدف (Subject Alternative Name (SAN)) : فیلد SAN تا استاندارد X.509 توسعه مییابد، و به نامهای دامنه مختلف این اجازه را میدهد تا با یک گواهی درارتباط باشد. این به این معناست که هر گواهی می تواند امنیت چند نام دامنه مختلف را تامین کند، این امکان لاعث آسان تر شدن اضافه و حذف کردن نام های دامنه به/از یک گواهی بدون نیاز به یک گواهی دیگر باشد.
نام عمومی (Common Name (CN)) : فیلد CN برای تعیین نام دامنه اصلی که گواهی با آن مرتبط است استفاده میشود. این نام دامنه ای است که گواهی صادر می شود.
از فیلدهای SAN و CN می توان برای ریکان به منظور یافتن اسم هاستهای مرتبط با دامنه هدف استفاده کرد.
دستورات زیر را برای راه اندازی اسکن SAN و CN بااستفاده از ابزار TLSx اجرا کنید:
tlsx -u google.com -san
tlsx -u google.com -cn
انگشت نگاری JARM/JA3
JARM ( معیارهای انتقال مجدد اپلیکیشن JSON ) و JA3 (انگشت نگاری کلاینت SSL/TLS ) از متدهای انگشت نگاری کلاینت های SSL/TLS هستند.
JARM:ا JARM یک روش انگشت نگاری کلاینت های SSL/TLS است که به وسیلهی گرفتن پارامترهای هند شیک SSL/TLS و کدگشایی آنها در فرمت JSON کار خود را انجام میدهد. . این امکان مقایسه آسان اثرانگشت، مجموعه شناخته شدهای از اثر انگشتها را برای تعیین نرم افزار و نسخه مشتری فراهم می کند.
JA3:ا JA3 یک روش انگشتنگاری کلاینت های SSL/TLS است که به وسیله ی گرفتن پارامترهای هند شیک SSL/TLS و تولید هش منحصربفرد بااستفاده از آنها کار خود را انجام میدهد. این امکان مقایسه آسان اثرانگشت، مجموعه شناخته شدهای از اثر انگشتها را برای تعیین نرم افزار و نسخه مشتری فراهم می کند.
دستورات زیر را به منظور اجرای فرایند انگشتنگاری SSL/TLS بااستقاده از ابزار TLSx اجرا کنید:
tlsx -u google.com -jarm
tlsx -u google.com -ja3
دادههای خروجی در فرمت JSON با TLSx
TLSx از ویژگیهای فلگ مختلفی پشتیبانی میکند که می توان از آن برای جمعآوری اطلاعات خاصی استفاده کرد. همچنین به ما اجازه میدهد تا از ویژگی فلگ -json برای بدست آوردن دادههای خروجی به فرمت JSON هم استفاده کنیم که مناسب ترین گزینه برای اتومیشن و پردازشهای بعدی است. دانستن این نکته که ساختن یک پایپلاین اتومیشن، مثلا برای ریکان، استخراج داده را برای شما بسیار آسان خواهد کرد، میتواند برای شما بسیار مفید باشد.
دستور زیر را به منظور گرفتن داده خروجی به فرمت JSON در ابزار TLSx اجرا کنید:
./tlsx -l hosts.txt -san -cn -json
برای بازیابی اطلاعات در یک ویو مناسب، دستور زیر را اجرا کنید:
./tlsx -l hosts.txt -san -cn -json | jq
خلاصه
دراین مقاله ما درمورد اهمیت گواهیهای SSL و TLS در برقراری امنیت در ارتباطات اینترنتی و میزان مفید بودن آنها در عملیات تست نفوذ و باگ بانتی صحبت کردیم. به طور خلاصه به پروتکل TLS و کارهای آن پرداختیم و ابزار TLSx که یک ابزار قدرتمند برای اسکن و آنالیز گواهیهای SSL/TLS است را معرفی کردیم.
مطالب زیر را حتما مطالعه کنید
Prompt Injection چیست؟
چارچوب (framework) امنیت سایبری چیست؟ و انواع آن
10 افزونه برتر Burp Suite برای تست نفوذ
DNS Rebinding چیست و چگونه کار می کند؟
دور زدن ( JailBreak ) هوش مصنوعی Chatgpt
ACCESS LOG چیست؟
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
عالی بود ممنون
nice