Понад рік усі версії Bitcoin Core містили одну із найжахливіших помилок в історії Bitcoin. У цій статті ми розкриємо хороші, погані та злі (відсилання до фільму 1966 року "The Good, the Bad and the Ugly" - прим. перекладача) подробиці про одну з найнеприємніших помилок Bitcoin Core на сьогоднішній день.
Погано, звичайно, саме існування помилки, тепер зареєстрованої як CVE-2018-17144 Exposures".
Помилка з'явилася як частина апдейту Bitcoin Core 0.14.0, випущеного в березні 2017 року для підвищення продуктивності та пов'язаного з маршрутизацією блоків. Коротко, помилка не давала вузлам мережі відкидати блоки, що містять транзакцію, яка витрачає одні й самі засоби ("входи") кілька разів, що допускає нерегулярну форму подвійних витрат. Це при тому, що одне із завдань, які вирішувалися при розробці Bitcoin - запобігання подвійному витрачанню коштів.
Ця серйозна проблема могла б виявитися по-різному. По-перше, версії Bitcoin Core з 0.14.0 по 0.14.2 (а в деяких випадках і новіші версії) прийняли б блок, але в той же час визнали б, що щось не так. Проте вони не змогли б точно сказати, що саме не так. В результаті вузол перестав би працювати і відключився. Таким чином, якби неприпустимий блок пробився до таких вузлів – це могло б спричинити крах мережі. А це погано...
Але далі – гірше. У версіях Bitcoin Core з 0.15.0 до 0.16.2 було додано ще одне підвищення продуктивності, яке допускало, що в деяких випадках ці вузли навіть не розуміли, що щось не так. Зокрема, якщо двічі витрачена монета не переміщалася в тому самому блоці (що часто буває), ці вузли прийняли б транзакцію і не блокували б як завжди. У гіпотетичному, гіршому випадку, зловмисник міг би роздмухати грошову масу Bitcoin, скопіювавши свої власні монети, і будь-який вузол, що працює на Bitcoin Core версій з 0.15.0 по 0.16.2, прийняв би ці монети як валідні.
Технічно, помилка також могла призвести до розгалуження блокчейна між порушеними вузлами (Bitcoin Core 0.15.0 до 0.16.2 та його форками) та незачепленими вузлами (зокрема, Bitcoin Core 0.13.2 і старішими, а також їх форками). Однак це малоймовірно, оскільки остання категорія, ймовірно, не мала б достатнього хешрейту, щоб створити хоча б один блок протягом декількох днів, не кажучи вже про декілька блоків. Тому такі вузли просто зупинилися б, чекаючи на справжній блок.
Проте помилка, про яку йдеться, могла допустити одну з найгірших атак на Bitcoin в історії.. Багатьох це протвережує, оскільки помилка, що потенційно призводить до подібних найважчих наслідків, залишалася непоміченою близько 18 місяців.
Тепер добрі новини. Перша та головна хороша новина полягає в тому, що ця помилка ніколи не була використана.
Друга хороша новина полягає в тому, що ймовірність того, що ця помилка могла б бути взагалі використана, вкрай мала. Це пов'язано з тим, що атака могла бути реалізована лише майнером, який навмисно створює атакуючий блок, але не майнером, який робить це випадково або звичайним користувачем.
Це означає, що майнер мав би свідомо ризикнути втратити винагороду за здобутий блок у розмірі близько 80 000 доларів. Подібна атака була б помічена досить швидко, оскільки все відбувається в публічному блокчейні. Досить швидко звіти про збої заповнили б чати та форуми. У цей момент було б виявлено, що некоректний блок фактично був викликаний помилкою.
Як і сталося в 2010 і 2013 роках, коли через помилки в коді відбулося розгалуження блокчейну, більшість майнерів провели б апгрейд або даунгрейд використовуваного ПЗ, відкидаючи атакуючий блок і я. Згодом, валідна гілка переважить атакуючу і навіть уразливі вузли переключаться на коректну гілку, залишаючи атакуючий майнер без винагороди за блок. Також подібний інцидент одразу знизив би ринкову ціну атакованої монети, тим самим значно знизивши фінансову ефективність самої атаки.
Третя частина хороших новин полягає в тому, що розробник з ніком awemany відповідально розкрив помилку насамперед саме розробникам, які працюють над Bitcoin Core (а також над Bitcoin ABC та Bitcoin Unlimited). Спочатку помилка була прийнята за помилку відмови в обслуговуванні (DoS). Але, при подальшому розгляді співробітник Bitcoin Core і Chaincode Labs Метт Коралло (Matt Corallo) виявив, що ця ж помилка була ще й уразливістю впливу на мережу. Помилка була виправлена вже наступного дня та були випущені версії Bitcoin Core 0.16.3 та реліз кандидат Bitcoin Core, 0.17.0. Група учасників Bitcoin Core, яка знала про проблему, звернулася до ключових гравців в екосистемі Bitcoin і попросила їх перейти на Bitcoin Core 0.16.3..
Четверта частина хороших новин полягає в тому, що більшість майнерів у мережі досить швидко оновили ПЗ, а це означає, що навіть якщо зловмисник спробує використати помилку, він не просунеться далеко. Чесні майнери досить швидко подолають атакуючий ланцюг, і в цей момент навіть неоновлені вузли сприйматимуть валідний ланцюжок як єдиний вірний. Однак, щоб убезпечити свої транзакції, користувачам рекомендується дочекатися додаткових підтверджень до прийняття платежу.
Злі особливості... Виправлення подібної помилки може бути складним завданням у відкритій, децентралізованій, постійно діючій мережі, що підтримується програмним забезпеченням з відкритим вихідним кодом. Наприклад, коли Bitcoin Unlimited на початку 2017 року виправив критичну помилку, сам факт виправлення вразливості в коді показав її потенційним противникам, відкривши вікно атаки доти, доки виправлення не буде розгорнуто на більшості вузлів мережі.
Щоб уникнути таких атак, розробники Bitcoin Core вирішили не одразу розкривати серйозність помилки громадськості. Спочатку, приховавши повну інформацію від майнерів та користувачів, вони повідомили про DoS-уразливість, але не про вразливість впливу на мережу. Вони сподівалися, що DoS-уразливість та наполегливі рекомендації стануть достатніми причинами для оновлення користувачами свого програмного забезпечення, не привертаючи увагу потенційних зловмисників.
Однак не всі поділяли цей підхід. Оскільки помилка потрапила під пильну увагу, дедалі більше людей почали самостійно з'ясовувати, що помилка була серйознішою, ніж просто DoS-вразливість. Деякі розкривали повні деталі вразливості, поставивши мережу Bitcoin під загрозу атаки. Після того, як інформація про цю вразливість була опублікована в Hacker News (хоча пізніше вона була прибрана), стало безглуздо далі тримати її в секреті.
На щастя, до моменту витоку докладної інформації про проблему, більшість великих гравців майнінгу Bitcoin вже оновила використовуване ПЗ, убезпечивши мережу від атаки, після чого Bitcoin Core опублікували повну технічну інформацію про помилку..
Велика кількість альткоїнів, що базуються на вихідному коді Bitcoin, можливо, все ще вразлива і факт публічної популярності проблеми не знімає з них загрози. Хоча такі криптовалюти, як Bitcoin ABC, відразу ж опублікували оновлення свого ПЗ, убезпечивши свої мережі від потенційних атак.
За матеріалами Bitcoin Magazine
Читайте також
Чи впливає Google на Bitcoin?
Чи може впливати зростання кількості пошукових запитів про біткойн на його ціну? Це означає не те, що Google прямо впливає на вартість ринків, проте результати нових досліджень показують, що тенденції пошуків у Google можуть допомогти інвесторам зрозуміти, що може статися ...
«Білий кролик» загрожує анонімності транзакцій у мережі біткоїн
В даний час у Лас-Вегасі зібралися шанувальники IT-технологій, кіберпанки та хакери для участі у двох відомих технічних конференціях: Defcon 2018 (Caesar's Palace) та Black Hat Arsenal (Mandalay Bay).
