Закрити оголошення

Кілька днів тому Apple випустила соту Оновлення iOS 7.0.6, про вихід якого ми вас повідомляли. Можливо, багато хто був здивований тим, що оновлення також було випущено для старих iOS 6 (версія 6.1.6) і Apple TV (версія 6.0.2). Це виправлення безпеки, тому Apple не могла дозволити собі оновлювати лише частину своїх пристроїв. Більше того, ця проблема також стосується OS X. За словами представника Apple Труді Мюллер, оновлення OS X буде випущено якомога швидше.

Чому так багато галасу навколо цього оновлення? Помилка в коді системи дозволяє обійти перевірку сервера під час безпечної передачі на реляційному рівні еталонної моделі ISO/OSI. Зокрема, помилка полягає в поганій реалізації SSL у частині, де відбувається перевірка сертифіката сервера. Перш ніж перейти до подальших пояснень, я віддаю перевагу опису основних понять.

SSL (Secure Socket Layer) — це протокол, який використовується для безпечного зв’язку. Він забезпечує безпеку за допомогою шифрування та автентифікації сторін, що спілкуються. Автентифікація - це перевірка пред'явленої особи. У реальному житті, наприклад, ви називаєте своє ім’я (особу) і показуєте свій ідентифікатор, щоб інша особа могла його підтвердити (автентифікувати). Потім автентифікація поділяється на верифікацію, яка є лише прикладом із національною карткою ідентифікації, або ідентифікацію, коли відповідна особа може визначити вашу особу, не пред’являючи їй її заздалегідь.

Тепер я б коротко перейшов до сертифіката сервера. У реальному житті вашим сертифікатом може бути, наприклад, ідентифікаційна картка. Все засновано на асиметричній криптографії, де кожен суб'єкт володіє двома ключами - закритим і публічним. Вся краса полягає в тому, що повідомлення можна зашифрувати відкритим ключем і розшифрувати закритим ключем. Це означає, що лише власник закритого ключа може розшифрувати повідомлення. При цьому не потрібно турбуватися про передачу секретного ключа обом сторонам, що спілкуються. Тоді сертифікат є відкритим ключем суб’єкта, доповненим інформацією та підписаним центром сертифікації. У Чехії одним із сертифікаційних органів є, наприклад, Česká Pošta. Завдяки сертифікату iPhone може підтвердити, що він дійсно спілкується з даним сервером.

SSL використовує асиметричне шифрування при встановленні з'єднання, т.зв SSL рукостискання. На цьому етапі ваш iPhone перевіряє, що він зв'язується з даним сервером, і при цьому за допомогою асиметричного шифрування встановлюється симетричний ключ, який буде використовуватися для всього подальшого спілкування. Симетричне шифрування швидше. Як вже було написано, помилка виникає вже під час перевірки сервера. Давайте подивимося на код, який викликає цю вразливість системи.

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen)

{
   OSStatus err;
   …

   if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
       goto fail;
   if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
       goto fail;
       goto fail;
   if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
       goto fail;
   …

fail:
   SSLFreeBuffer(&signedHashes);
   SSLFreeBuffer(&hashCtx);
   return err;
}

У другій умові if ви можете побачити дві команди нижче goto fail;. І це камінь спотикання. Потім цей код викликає виконання другої команди на етапі, коли потрібно перевірити сертифікат goto fail;. Це призводить до того, що третя умова пропускається if і перевірки сервера взагалі не буде.

Це означає, що кожен, хто знає про цю вразливість, може запропонувати вашому iPhone підроблений сертифікат. Ви або вашого iPhone, ви думатимете, що спілкуєтеся зашифровано, тоді як між вами та сервером стоїть зловмисник. Такий напад називається атака людина-в-середині, що приблизно перекладається чеською як атака "людина посередині". або людина серед. Атаку з використанням цієї конкретної вади в OS X і iOS можна здійснити, лише якщо зловмисник і жертва знаходяться в одній мережі. Тому краще уникати публічних мереж Wi-Fi, якщо ви не оновили iOS. Користувачі Mac повинні бути обережними щодо того, до яких мереж вони підключаються та які сайти вони відвідують у цих мережах.

Неймовірно, як така фатальна помилка могла потрапити у фінальні версії OS X та iOS. Це могло бути непослідовне тестування погано написаного коду. Це означало б, що і програміст, і тестувальники допускатимуть помилки. Це може здатися малоймовірним для Apple, тому з’являються припущення, що ця помилка насправді є бекдором, так званим. задні двері. Не дарма кажуть, що найкращі бекдори виглядають як тонкі помилки. Однак це лише непідтверджені теорії, тому будемо вважати, що хтось просто помилився.

Якщо ви не впевнені, чи ваша система або браузер захищені від цієї помилки, відвідайте сторінку gotofail.com. Як ви можете бачити на зображеннях нижче, Safari 7.0.1 в OS X Mavericks 10.9.1 містить помилку, тоді як у Safari в iOS 7.0.6 все добре.

Ресурси: Я більше, Reuters
.