
Малък злонамерен код може да причини DDoS атака на сървъри, работещи със софтуерната библиотека OpenSSL, поради грешки при разпределението на паметта. Вече са налични обновени версии на софтуера, но проблемът е показателен колко уязвима може да бъде инфраструктурата на глобалната мрежа.
Оказва се, че OpenSSL сървърите могат да бъдат „свалени” от нищожен като размер зловреден код – „полезният товар” е с дължина само 11 байта, алармира публикация на Bleeping Computer.
Поддръжниците на OpenSSL са поправили уязвимостта, без да ѝ присвоят CVE идентификатор, и са разпространили актуализацията на всички версии, включително и на по-старите.
Софтуерът OpenSSL играе основна роля в защитените интернет комуникации, така че съответните отговорници за мрежовата инфраструктура трябва да интегрират обновените версии на библиотеката възможно най-скоро.
11-байтова DDoS атака
Изследователите на Okta са обозначили уязвимостта като HollowByte. Според тях, по време на процеса на установяване на TLS връзка, всяко съобщение има 4-байтов заглавен файл, указващ размера на входящото съобщение. Уязвимите версии на OpenSSL обаче разпределят памет за декларираната дължина на съобщението, дори преди да бъде получен полезният товар и преди да бъде проверен размерът му.
„Когато злонамереният заглавен файл пристигне, компонентът на състоянието задейства непроверено разпределение на паметта. В резултат на това, когато самият 11-байтов злонамерен полезен товар пристигне на сървъра, машината на състоянието на TLS прочита 4-байтовия заглавен файл за ръкостискане и задейства непроверено предварително разпределение на паметта въз основа на 3-байтовата декларация за дължина на заглавката:
Read Header⟶grow_init_buf()⟶OPENSSL_clear_realloc()⟶malloc(attacker_size).
И тъй като на този етап не се извършва проверка на полезен товар, функцията malloc() разпределя до 131 KB памет единствено въз основа на неверни данни. След това работната нишка преминава в безкраен цикъл, чакайки данни, които никога няма да пристигнат”, разкриват механизма специалистите.
Усложнения
Многократното отваряне на връзки за бързо изчерпване на ресурсите на сървъра е стар трик, отбелязват изследователите. Но HollowByte създава допълнителен проблем поради начина, по който GNU C Library (glibc) обработва паметта.
Когато злонамерена връзка бъде прекратена, OpenSSL освобождава разпределения буфер. Въпреки това, glibc не връща незабавно малки и средни по размер разпределени ресурси на операционната система; библиотеката ги съхранява за потенциална повторна употреба.
Чрез изпращане на множество вълни от заявки за свързване с различни декларирани дължини на съобщенията, нападателят предотвратява преразпределението на освободени области от паметта. Това причинява значителна фрагментация на „купчината” (програмен термин), което води до непрекъснато нарастване на максималния размер на резидентната памет, който остава завишен дори след края на атаката. Единственият начин за преразпределяне на паметта е да се прекрати процесът OpenSSL.
„За да оценим заплахата, тествахме незащитени и защитени инстанции на OpenSSL, работещи под Nginx при различни условия на натоварване”, разказват изследователите. „В стандартна среда с 1 GB RAM, незащитеният сървър се срива поради грешка „недостатъчно памет” (OOM), с 547 мегабайта замръзнала, фрагментирана памет. При тестване в по-високопроизводителни среди (16 GB RAM), атаката успешно блокира 25% от паметта на системата, като същевременно остава в рамките на лимита за връзка, което означава, че стандартните защити, които ограничават входящите връзки, няма да могат да я спрат”.
По същество подобна атака е много лесна за изпълнение, трудна за смекчаване и последствията са подобни на тези на разпределена атака тип „отказ от услуга” (DDoS), коментират специалисти по сигурност.
Щетите от прекъсване на работата, в зависимост от натоварването на сървъра, могат да бъдат огромни, така че актуализирането на библиотеките е приоритет, ако все още не е направено.
Библиотеката OpenSSL е вградена в популярни пакети като Nginx, Apache, Node.js, Python, Ruby и PHP runtime, както и в бази данни MySQL и PostgreSQL. Тя е предварително инсталирана в повечето Linux дистрибуции, които поддържат TLS криптиране и обработка на сертификати за сигурност.
Версиите 4.0.1, 3.6.3, 3.5.7, 3.4.6 и 3.0.21 са поправени. Буферът на паметта вече се разпределя въз основа на действителния размер на входящото съобщение, а не на размера, деклариран в заглавката.
