اینجا(هک ماینر– قسمت اول) در قسمت قبل، یک سوال کلیدی مطرح کردیم که:
چطور بدون اینکه مالک ماینر متوجه بشه بتونیم درصدی از تراکنش و محاسبات اون ماینر رو به خودمون اختصاص بدیم؟
و بعد یکم مقدمه چیدیم و سعی کردیم سر نقطه مناسبی، قسمت اول رو تموم کنیم(خوشبختانه این موضوع قرار نیست مثل سریالهای ترکیهای هزاروچند قسمت طول بکشه و ما به سهگانه رضایت دادیم!)، توی این قسمت قراره یواشکی وارد مزرعه بشیم!
چطور قراره ماینرها رو پیدا کنیم؟
کسانی که حتی مدت کوتاهی بهعنوان معدنچی ارزهای دیجتال مشغولبهکار بودند! اطلاع دارن که تقریبا کسی حتی از محل فیزیکی فارمها اطلاع نداره و معمولا شما دستگاهتون رو به کشاورز محترم، توی خیابون یا مغازه یا هرجای دیگهای غیر از محل خود فارم تحویل میدید و احتمالا رسید تحویل میگیرید یا قراردادی امضاء میکنید و آقا یا خانم فارمر محترم، دستگاه شما رو یکی دو روز بعد میبرن توی محل تاپ سیکرت خودشون به شبکه متصل میکنند، پس طبیعتا قرار نیست(و در شان ما هم نیست!) که به روش سنتی شبونه از دیوار مزرعه بالا بریم و با یه لپتاپ بشینیم و کانفیگ دستگاههای اونجا رو عوضکنیم! ما از روشهای اساطیری استفادهکردیم! اسب تروایی ساختیم تا مزرعهدار(مثل اهالی تروا) با دستهای خودش و با سلام و صلوات داخل مزرعه ببره و اونجاست که ما موقعیکه کسی فکرش رو نمیکنه، وارد مزرعه میشیم.
چطور اسب تروا بسازیم؟
مشخصه که هدف ما از نوشتن این مقاله این نیست که آموزش قدمبه قدم هککردن دستگاههای ملت رو برای شما بنویسیم، قراره نشونبدیم رعایتنکردن نکات امنیتی چطور میتونه مشکلات بزرگی رو برای ما ایجاد کنه!؟ همونطورکه توی قسمت اول گفتیم، ماینرها یک برد کنترلی ویژه خودشون دارن که مدیریت هشبردها رو برعهده میگیره، و اکثر اونها مبتنیبر لینوکس هستند. و وقتی مبتنیبر لینوکس باشن، چرا ما نتونیم کمی تغییرات توی اونها ایجاد کنیم؟ تمرکز اصلیما روی هک و نفوذ به دستگاههای M3x شرکت Whatsminer بود، ویژگی مهمی که این دستگاهها دارن(جدای از فراگیربودنشون توی بازار ایران) این هست که پسورد دسترسی SSH اونها با کنترل پنلشون یکیه! (و بیشتر مواردی که دیدیم کسی پسورد root ، root رو عوض نکرده بود!!)
این یعنی دسترسی کامل به برد دستگاه، البته قسمتهایی اصلی سیستم بخاطر جلوگیریاز اشکالات احتمالی بهصورت فقط خواندنی قرار دارن، که ما قول دادیم که خرابش نکنیم و به قابل نوشتن تبدیلش کردیم!
اینجا رئیس کیه؟
ما الان تونستیم به سیستمعامل روی برد کنترلی ماینر متصل بشیم، خود حضرت لینوکس که سرش به کار خودش گرمه و ایدهای نداره که روی چه دستگاهی نصبشده و قراره چه استفاده(یا سوءاستفادهای) ازش بشه! کل این آشوب، زیر سر نرمافزاری به اسم CGMiner هست که تقریبا روی تمام ماینرهایی که حداقل ما ازشون اطلاع داریم نصبشده(واضحهکه این نرمافزار رو روی مثلا لپتاپ یا رزبریپای هم میتونید نصبکنید اما غیر از مصرف برق، تلفکردن وقت و خرابی احتمالی دستگاه چیز دیگهای بهدست نمیارید!) CGMiner مدیریت هش بردها، استخرها، دریافت اطلاعات و ارسال نتیجه به استخر و کل کاری که روی ماینر شما انجام میشه رو مدیریت میکنه و خوشبختانه متنباز هم هست و اینجا(لینک به گیت هاب) میتونید سورس و داکیومنتهای مربوط به اون رو ببینید.
حریف تمرینی
قبلازاینکه ساخت اسب تروا رو کامل کنیم تصمیم گرفتیم، اولین تستها رو روی دستگاهی که از یکیاز دوستان برای تست گرفتهبودیم پیادهکنیم، اگه برای یکی کار کرد طبیعتا بعدا میتونه برای تعدادزیادی هم کار کنه. هر دستگاه ماینری معمولا آدرس ۳ تا استخر رو توی کنترل پنلش میگیره، البته همیشه فقط به استخر اول وصل میشه مگه بهدلیل قطعشدن ارتباطش با استخر اول(مثلا بخاطر فیلترشدن استخر یا قطعی سرور اون) به سراغ استخرهای دیگهای که براش تعریفشده بره. ما قرار بود قسمتیاز محاسبات ماینر رو بدوناینکه کاربر متوجهبشه، به سمت دیگهای منتقلکنیم، این فرایند هرچیزی که هست باید بهصورت اتوماتیک انجامبشه، نه ازطریق کنترل پنل، پس اولین راه بررسی داکیومنتهایCGMiner بود.
شکست مقدمه پیروزی
توی بررسی اولیه متوجهشدیم که از قبل برای API CGminer تعریفشده(اینجا میتونید داکیومنت API رو ببینید) تا بهغیراز فایلهای کانفیگ خودش امکان تنظیمکردن ازطریق شبکه هم وجود داشته باشه، برای اسب تروای ما این شاید ایدهآلترین حالت بود، یه بررسی توی شبکه داخلی برای پیداکردن دستگاهها و بعداز اون صدازدن توابعی که یک نفر دیگه قبلا نوشته.
تست اولیه موفقیتآمیز بود، توی تصویربالا بااستفادهاز API تحت شبکه داخلی، آدرس و مشخصات استخرهای تنظیمشده روی دستگاه رو بدست آوردیم. اما بااینکه بهنظر میومد دسترسیهای لازم رو توی کانفیگ خود M3x برای اضافه و تغییر استخر داریم، اما بهدلایل نامعلومی هرچه زدیم به در بسته خورد! از لحاظ فنی باید استخر اضافه میشد، خطای خاصی هم دریافت نمیکردیم اما در عمل اتفاقی نیفتاده بود. چندروزی انواع رشتهها با پارامترهای مختلف رو بررسی کردیم اما روز، روز پیروزی شکست بود! توی همین فرایند بررسی دیدیم نکته واضحی رو قبلا بهش توجهنکردهبودیم، توی کنترل پنل دستگاه هربار که استخر رو عوضکنید، باید دستگاه مجددا ریست بشه و هربار که دستگاه ریست بشه حدود ۱۰دقیقه طول میکشه تا به حالت کارکرد عادی برگرده. درنتیجه به احتمالزیاد حتی اگه موفق به اضافهکردن استخر ازطریق API هم میشدیم، توی هربار تعویض حدود ۲۰دقیقه قطعی داشتیم که اصلا چیزجالبی نبود! یورکا، یورکا! وقتی راهحل اول به شکست خورد ایده جدیدی به ذهنمون رسید، ایده ما این بود که بجای اضافهو کمکردن استخرها، کاریکنیم دستگاه توی بازههای مشخصی یه تک پا به استخر موردنظر ما سر بزنه و بعد دومرتبه برگرده به استخرهایی که کاربر براش تعریفکرده.
مجددا به داکیومنت CGMiner مراجعهکردیم تا بررسی کنیم چه راهحلهایی دیگهای میتونه وجود داشتهباشه، بعداز مدتی مکاشفه در اعماق، ناگهان ارشمیدس طور(با این تفاوت که ما لباس پوشیدهبودیم اما اون لخت بود!) فریاد یافتم، یافتم زدیم!
سویچی به اسم balance توی CGMiner تعریفشده که سیاست استفادهاز استخرها در نرمافزار رو تغییر میده، یعنی بجای اینکه همیشه سعیکنه به اولین استخر متصلبشه امکان این رو داره که برای هر استخر سهمی درنظر بگیره مثلا ۸۰درصد پردازشها رو به استخر اول بفرسته و ۲۰درصدش رو به استخر دوم.
البته بهصورت پیشفرض این سوئیچ توی دستگاه فعال نیست، باتوجهبه اینکه ما قبلا قسمتهای فقط خواندنی رو نوشتنی کردهبودیم تونستیم این سوئیچ رو به سیستم اضافهکنیم!
بااستفادهاز این سوئیچ کاربر متوجه قطعی توی سیستمش نمیشه که به چیزی شک کنه، فقط کمی از قدرت پردازش دستگاهش کم شده که مثل موارد عینی که ما دیدیم احتمالا پیش خودش استدلال میکنه بخاطر گرمی دستگاه و کندی اینترنت و… هست. و اینجا اون فرضیه ” اگه چینیها قبلا این کار رو کرده باشن چی؟ ” بیشاز پیش ذهن ما رو مشغول میکنه. کاربر همیشه مومن بعضیاز کاربرها مخصوصا اونهایی که تازه دستگاه خریدن روزی چندین مرتبه دستگاهشون رو بررسی میکنند و از دیدن هش ریت و بالارفتن بیتکوینهاشون لذت میبرن، طبیعتا اگه توی لیست استخرها، اسم استخر غیرمرتبتی ببینن سریعا عوضش میکنن و نقشه ما در نطفه خفه میشه، برای این عزیزان هم برنامه ویژهای داریم! چند پاراگراف قبل دیدید که تونستیم ازطریق ssh به دستگاه متصل بشیم، اونجا فایل کانفیگ رو باز کردیم
نرمافزار cgminer موقع ریست دستگاه ازطریق این فایل کانفیگ میشه، توی قسمت قرمز رنگ اطلاعات استخرها رو باتوجهبه چیزی که کاربر در کنترل پنل وارد کرده تنظیم میکنه، اما ما میتونیم بهش لطفکنیم و بگیم لازمنیست برای استخر دوم بررسی کنی ببینی کاربر چی زده، این آدرسی که ما بهت اعلام میکنیم رو تنظیم کن با این درصد مشخص از کارکرد کل دستگاه! یعنی کاربر آدرس استخرهای خودش رو تنظیم میکنه، اما در پشت پرده دستگاه گاهی به آدرس استخر دیگهای وصل میشه!
عملیات روی دستگاه تستی کاملا موفقیتآمیز بود، از ۱۲تراهش دستگاه ما ۲تراهش اون رو به استخر خودمون منتقلکردیم!
بفرمایید دسر!
درحال آمادهسازی دستگاه تروجان برای نفوذ به مزرعه بودیم که اطلاعات خیلیجالبی تونستیم پیدا کنیم! یکیاز دوستان که دستگاهش رو توی فارم قراردادهبود پیش ما اومد و خواست وضعیت دستگاهش رو چککنیم که کارکردش طبیعیه یا نه. متوجهشدیم بعضیاز فارمها بهعنوان مزیت رقابتی کنترل پنلی(معمولا آیپی و پورت برای هر دستگاه) به کاربرانشون میدن تا بتونن دما و وضعیت دستگاه رو از راهدور بررسی کنن، همون لحظه اول حدسزدیم که احتمالا کسی که تا دیروز کارش چیز دیگهای بوده و حالا اومده فارم دستگاههای استخراج ارز دیجیتال زده، احتمالا کلمه امنیت به گوشش هم نخورده! یه اسکن ساده روی رنج آیپی مزرعهای که دستگاه دوستمون داخلش بود زدیم و نتیجه جذاب بود!
به تعداد راههای رسیدن به خدا پورت باز روی سرور وجود داشت، برای ما از همه مهمتر پروتکل http بود، حدود ۸۰دستگاه که تقریبا همه اونها از نوع M3x بودن! بی اطلاعی افرادی که توی این زمینه فعالیت داشتند از مسائل امنیتی، مسیری که قرار بود بریم و نفوذ کنیم رو حاضر و آماده در اختیار ما قراردادهبود، حدس دوم ما هم درست بود، از این ۸۰دستگاه حدود ۸۰درصدشون پسورد پیشفرضشون عوض نشدهبود!!
توی بررسی پورتها چندتا دوربین هم پیداکردیم که پسورد دوتا از اونها عوضنشدهبود، بررسی کردیم دیدیم که آقا توی یه باغ خیلی باصفا و احتمالا با سوءاستفادهاز برق کشاورزی یک مزرعه ارز دیجیتال راهاندازی کردن!
هرچند که دسترسی به این سادگی یکم از هیجان قضیه کم میکرد اما تصمیمگرفتیم چندتا تست کوچولو بزنیم! برای شروع خیلی خودمون رو درگیر پیچیدگیهای مواردی که بالا توضیح دادم نکردیم، شاید بیشتر میخواستیم یه تحقیق بامزه کنیم! شب قبلاز تعطیلات خردادماه یه برنامه ساده نوشتم که لیست دستگاهها رو بگیره، بهشون وصل بشه، استخرشون رو ازطریق خود کنترل پنل عوضکنه و ریستشون کنه تا شروعکنن به کار برای استخر جدیدی که ساختهبودیم! و البته بعداز ۴۵دقیقه به وضعیت قبلی برشون گردونه. احتمال میدادیم چون توی اون ۴۵دقیقه دستگاه کاملا قطع میشه، کاربر بفهمه و مثلا پسوردها رو ریست کنه یا استخرهای ما رو عوض کنه، اما هیچاتفاقی نیفتاد! چندروز بعد کار رو سادهتر هم کردیم، بیخیال اون برنامه شدیم و دستی ۵تا دستگاه رو بهصورت کامل، روی استخر خودمون انداختیم! غیراز یکیاز کاربرها که یه ریست ساده روی دستگاهش زد(و باز هم پسوردش رو عوض نکرد) هیچ واکنشی ندیدیم!
چندروزی گرفتار کارهای شخصی بودیم و بعد وقتی بررسیکردیم دیدیم میزان بیتکوینی که از این طریق استخراجشدهبود به قیمت امروز بهکمی بیشتر از ۲میلیون تومان رسیده و صاحب مزرعه و دستگاهها هم هشدار ما رو دریافت نکردن، تصمیمگرفتیم متوقفشکنیم. ما قرارنبود از این راه برای خودمون درآمد بسازیم، حتی دادن این پول به خیریههای مثل محک هم یهجورایی بخشش از جیب مردم بود، یه کار تحقیقاتی هیجانانگیز بود که یه قسمتیش زودتر از اونیکه انتظار داشتیم به پول رسیده بود و این هدف ما نبود. ترجیحدادیم برگردیم سر ساخت اسب تروا و فرضیه چینیهای بی تربیت…
البته در قسمت بعدی مستنداتی را ارائه میکنیم که نشونمیده این فرضیه اصلا باطل نبوده و همین الان هم ایده هک ماینر متاسفانه درحال اجراست…
در قسمت بعد که قسمت پایانی است با ما همراه باشید.
منبع: سیسوگ