حلقه‌ی خراب در زنجیره‌ی کیف پول رمزگذاری شده

توسعه دهندگان نرم افزار و کاربران آنها در معرض یک خطر جدی

کیف پول رمزگذاری شده
کیف پول رمزگذاری شده

تقریبا تمام توسعه‌دهندگان وب از  کتابخانه‌های شخص ثالث (کدهای آماده) برای طراحی کیف پول رمزگذاری شده استفاده می‌کنند. با وجود میلیون‌ها توسعه دهنده که ابداعات و کدهای خودشان را با دیگران شریک می‌شوند، استفاده از ماژول‌های موجود برای حل مشکلات، روش هوشمندانه‌ای برای صرفه‌جویی در زمان است. ولی استفاده از کدهای نوشته شده توسط دیگران یعنی اعتماد به نویسنده‌ آنها! در ادامه پرولاین با یک مثال نحوه سوءاستفاده از کیف پول رمزگذاری شده را برای شما بیان میکند.


شرکت بیت پِی (Bitpay) که توسعه‌دهنده‌ی کیف پول رمزگذاری شده‌ کوپی (Copay) می‌باشد، به خاطر همین ویژگی کدهای منبع باز به مشکلات فراوانی برخورد.

     کوپِی در واقع یک کیف پول رمزگذاری شده ارزی برای ارزهای مجازی مثل بیت‌کوین است. و به کاربرانش امکان ساختن کیف‌پول مشترک می‌دهد. کوپِی با استفاده از کد جاوا نوشته شده و به شدت به کدهای منبع باز تکیه دارد.

یکی از این کدها ماژولی منبع باز از نوع نودِ جِی اِس (Node.js) به نام ایونت-استریم (Event-Stream) است. مخزن این کد در کنترل خدمات نسخه‌ی جیت‌هاب (GitHub) توسط کاربری پشتیبانی می‌شد که خیلی وقت پیش حوصله‌اش از این کار سررفته و چندین سال بود که مخزن را به حال خودش رها کرده‌. بنابراین، وقتی یک کاربر جدید بدون هیچ پیش‌زمینه‌ فعالیتی در جیت‌هاب به کدنویس اصلی نزدیک شده و از او خواهش کرد تا اختیارات مخزن را به وی بدهد، کدنویس اصلی بدون هیچ معطلی به اون اختیارات تام را واگذار کرد.

     کدنویس جدید به سرعت وارد عمل شد. ابتدا کتابخانه‌ی ایونت-استریم شروع کرد به استفاده از ماژولی به نام فلت‌مپ-استریم (flatmap-stream) که در مخرن جیت‌هابِ همان کدنویس قرار داشت. سپس این تازه‌وارد، ماژول فلت‌مپ را تغییر داده و چند خط کد خرابکارانه وارد آن کرد. سه روز بعد از به روز رسانی، کدنویس مذکور، نسخه‌ی دیگری از فلت‌مپ-استریم را بارگذاری کرد که هیج کد خلافی نداشت (احتمالا برای گم کردن رد نسخه‌ی خراب).

     و این‌گونه بود که کتابخانه‌ی ایونت-استریم دچار مشکل شد. این کتابخانه نه تنها توسط شرکت بیت‌پِی، بلکه توسط شرکت‌های فراوان دیگری هم مورد استفاده قرار می‌گیرد. ظاهرا این مشکل ظرف 3 روز رفع شد. ولی همین مدت کم هم برای طراحان کوپِی که متوجه ویروس درون کتابخانه نشده‌بودند، کافی بود تا آن را وارد نسخه‌ به روز‌رسانی شده‌ی کتابخانه‌ی پروژه‌ی خودشان کنند. نرم‌افزار کیف‌پول رمزدار به روز شده در تمام فروشگاه‌های اپلیکیشن پخش شده و توسط کاربران زیادی دانلود شد.

     شاید طراحان کوپی قصد نداشتند بر روی چک کردن تغییرات به‌وجود آمده در کتابخانه‌ی مورد استفاده‌شان وقت بگذارند. امروزه با تشکر از سرویس‌های مدیریتی مانند اِن پی اِم (npm) بروزرسانی کتابخانه‌های مورد استفاده در پروژه‌های مختلف به صورت اتوماتیک انجام می‌شود. با استفاده از اِن پی اِم، طراح می‌تواند با یک فرمان، تمام ماژول‌های منبع باز موجود در کارش را بروزرسانی کند.

    طراحان کوپِی حتی اگر هم چک می‌کردند، پیدا کردن ویروس برایشان سخت می‌بود. کتابخانه‌های مورد استفاده در کیف پول رمزگذاری شده ممکن است خودشان به کتابخانه‌های دیگر (مثل وابستگی ایونت-استریم به فلت‌مپ استریم) وابسته باشند و بررسی تک‌تک این کتابخانه‌ها کار زمان‌بری است. در مورد داستان ما، کار چک کردن، مخصوصا به علت رمزدار بودن ماژول فلت‌مپ-استریم، سخت‌تر شده‌بود.

     با توجه به اخبار سی اِن اِن، کتابخانه‌ی فلت‌مپ-استریم، طوری طراحی شده‌ بود تا اطلاعات خصوصی افراد (در واقع رمز عبور کیف پول رمزگذاری شده) را از طریق اپلیکیشن‌هایی که از هر دو کتابخانه‌ ایونت-استریم و کوپِی-دَش استفاده می‌کردند؛ بردارد.

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

     طبق گفته آرس‌تکنیکا (ArsTechnica) این کد مشکل‌ساز، به کدنویس خرابکار امکان می‌داد تا بدون اجازه وارد کیف پول کاربران شده و از حساب آنها پول برداشت کند. مشکل توسط یکی از کاربران جیت‌هاب گزارش شد ولی متاسفانه تا آن لحظه، تعداد زیادی از نسخه‌ی آلوده‌ی کیف پول کوپِی در دسترس مردم قرار گرفته‌بود. بیت‌پی بالاخره مجبور شد به وجود این مشکل، اعتراف کند و از کاربرانش درخواست کرد تا صاحبان نسخه‌های 5.0.2 تا 5.1.0 نرم‌افزار کوپِی نرم‌افزارشان را به آخرین نسخه یعنی 5.2.0 ارتقا دهند. هنوز گزارشی مبنی بر تعداد آسیب‌دیدگان و مقدار پول دزدیده‌شده از این طریق اعلام نشده‌است.

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

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

     کسب‌وکارهایی که بر اساس تهیه‌ی نرم‌افزار (مخصوصا نرم‌افزارهای مرتبط با نقل و انتقال پول) پایه‌ریزی شده‌اند؛ باید قبل از انتشار کارشان، به دقت خود نرم‌افزار و تمام نسخ موجود از کتابخانه‌های شخص سوم مورد استفاده در نرم‌افزار را بررسی کنند.

     بهترین کار، چک کردن وضعیت خود مخزن، بررسی امتیازات سایر کاربران و تعداد برزورسانی پروژه و مدت‌زمانی که از آخرین بروزرسانی آن می‌گذرد، می‌باشد. همچنین جستجو در فهرست ایرادات و باگ های پروژه هم فواید زیادی دارد و در صورت مشاهده‌ی هر نوع چیز عجیب، می‌توان جستجو را پیشرفته‌تر کرده و یا به سراغ یک ماژول دیگر رفت.

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

پاسخ دهید

Time limit is exhausted. Please reload the CAPTCHA.

سبد خرید شما خالیست!