Андреас Антонопулос розповідає про вразливість CVE-2018-17144 знайдену в клієнті Bitcoin Core. Які наслідки могли б бути для системи Біткоїн, якби цю вразливість вчасно не виправили? Чи можливо виникнення подібних помилок в майбутньому? Як реагувати на такі помилки і як оцінювати їх загрозу? Відповіді на ці питання ви знайдете в новому перекладі Школи Біткоін.
Підпишіться на youtube канал Школи Біткоїн натиснувши кнопку
Девід просить прокоментувати недавню вразливість CVE-2018-17144, і Девід каже: “Важко повірити, що могла статися така критична помилка. Які уроки ми можемо винести з цього інциденту?”
Я ще не вивчав цю проблему детально, тому можу дати вам тільки короткий огляд.
Суть в тому, що в Bitcoin Core була виявлена помилка. Ця помилка була скопійована в інші Біткоїн Форки, це факт, тому, що багато інших Форків і навіть інші монети використовують ту ж основу коду. І це помилка перевірки транзакцій, яка впливає на правила консенсусу. І це дозволяє майнерам, використовувати цю помилку, щоб створити транзакцію, яка не перевірена належним чином і має додатковий вхід, якщо я не помиляюся.
У гіршому випадку ви можете створити біткоїн з нічого. Однак, ніхто не скористався цією помилкою, вона була виправлена до її використання. Ця помилка могла бути використана для створення атаки відмови в обслуговуванні біткоїну і викликати збій вузлів, таким чином, здійснивши атаку на мережу біткоїн.
Девід каже: “Важко повірити, що така критична помилка може статися”.
Ну, з одного боку, так, така критична помилка, що важко повірити, що це може статися, не дивлячись на перевірку коду, і так багато людей які цим займаються… Мало того, що це трапилося, так це ще й залишилося непоміченим майже два роки і зачепило широкий спектр версій BitcoinCore та інших криптовалют. По-моєму, цю помилку містили версії з 0.14 до 0.16.
Помилка була виявлена і передана програмістам в зашифрованому повідомленні, так щоб її не можна було використовувати поки вона ще не виправлена. Вона була виправлена, із цієї причини вам потрібно оновити програму BitcoinCore, якщо ви використовуєте Bitcoin вузол, вам потрібно оновити його до версії 0.16.3, яка містить виправлення. Я оновив свій вузол в той день, коли з’явилося повідомлення про те, що існує критична вразливість, яка потребує оновлення.
Багато вузлів вже оновлені, деякі ще ні. І вони як і раніше вразливі для віддаленого виключення, по суті, виклики для збою через неправильно сформовану транзакцію. На щастя, жодної з гірших проблем цієї вразливості не використовувалися.
Суть в тому, що програмне забезпечення, на якому працюють крипто валюти в цілому, надзвичайно складне, а код рівня згоди, де кожен повинен працювати за тими ж правилами в розподіленій системі, є найскладнішою формою розробки програмного забезпечення на сьогодні. Складність коду подібна до аерокосмічної інженерії з тієї точки зору, що кожна крихітна зміна коду може мати далекосяжний ефект і може зачепити роботу різних блоків системи.
У цьому конкретному випадку це була оптимізація для поліпшення часу обробки блоків, і ця оптимізація мала невдалий побічний ефект, і, наскільки я розумію, була помилка в реалізації, яка і стала критичною.
Ми будемо продовжувати бачити помилки в програмному забезпеченні. Немає програмного забезпечення без помилок. Важливо подивитися, наскільки серйозні помилки, а це була дуже серйозна помилка, наскільки швидко вони виправлені і чи були вони використані, перш ніж їх виправили, і якщо вони використовувалися, які наслідки цих помилок, і чи мають вони тривалий вплив.
Не зважаючи на наявність помилки, ми бачимо, що мережа дуже стійка. Блокчейн системи Біткоїн набагато стійкіший, ніж ми думали, через динамічний характер системи, тому що є багато незалежних операторів, вузлів, тому що є багато розробників, які працюють незалежно один від одного, переглядаючи код, виявляючи і виправляючи помилки, а система оновлюються, коли щось йде не так, і продовжує працювати. Вразливість не вбила Біткоїн. Вразливість зробила Біткоїн ще сильнішим і більш надійним. І один з позитивних аспектів Біткоїна – це його стійкість, яка продовжує дивувати.