Помилки сегментації і безпека: засоби захисту, способи їх обходу і слова-канарки

Засоби захисту та способи їх обходу
Помилки сегментації і безпека: засоби захисту, способи їх обходу і слова-канарки

Переповнення буфера - дуже поширена проблема, яка трапляється в безлічі додатків, створених різними розробниками. Не можна сподіватися на те, що всі програмісти раптом перестануть робити такі помилки. Також поки не передбачається появи надійних засобів виявлення проблемних місць в додатках. Можливим вирішенням цієї проблеми є використання мов з автоматичним управлінням пам`яттю (типу Java, Perl, Python, сімейства .NET і їм подібних), де за дотриманням меж всіх змінних стежить відповідний інтерпретатор. Але розробники не поспішають відмовлятися від C / C ++ і повністю переходити на подібні технології - на те є вагомі причини, але їх обговорення виходить за рамки цієї статті.

Загалом, глобального позбавлення від першоджерела проблем і усунення всіх помилок в додатках не передбачається. Але правка коду проблемних додатків - не єдиний спосіб убезпечити ОС та інші програми. За десятиліття розвитку операційних систем було запропоновано кілька підходів до вирішення проблем переповнення на загальносистемному рівні. Розглянемо найбільш поширені з них.

Слова-канарки




Одним з популярних і доступних способів запобігти експлуатацію вразливостей, пов`язаних з переповненням буфера в стеку при виклику функцій, є використання «слів-канарок» ( «oanary words»). Спосіб полягає в запису деякого спеціального значення в комірку пам`яті, наступну за буфером, який може бути модифікований в ході роботи функції. Перед поверненням з функції, система здійснює перевірку цілісності цього значення. У разі якщо буфер переповнився, «канарейка» перезапише якимось іншим значенням (звичайно, є шанс, що нове значення співпаде з попереднім, але ймовірність цього вкрай мала).




Порушення цілісності слова-канарки просигналізує системі, що коректну адресу повернення з функції (або інші дані, які йдуть за переповнені буфером) може бути змінений. При виявленні такого порушення переходу за адресою повернення не проізводітся- замість цього програма аварійно завершується. Свою назву метод отримав через схожість з використанням канарок для виявлення небезпечних газів в шахтах - при викидах газу канарки вмирали задовго до того, як люди починали щось відчувати, що служило сигналом про необхідність терміново покинути небезпечне місце.

У Linux використовувати подібний захист досить просто - для цього в компіляторах GCC передбачені опції -fstack-protector і -fstack-protector-all, що створюють «канарок» для всіх потенційно небезпечних функцій програми. Якщо додаток зібрано з такими опціями, то при виявленні переповнення буфера воно буде зупинено з помилкою виду:
*** stack smashing detected ***: program terminated

Однак переповнення може виникати при роботі функцій з сторонніх бібліотек, використовуваних в програмі. В такому випадку про «канарок» повинні подбати творці бібліотеки, а точніше - люди, що займаються її збиранням для конкретної системи. У дистрибутивах, що поширюються в вигляді набору бінарних пакетів, це можуть зробити самі розробники, а в source-based системах все залежить від прапорів компіляції, встановлених користувачем.

Оскільки слова-канарки мають очевидний недолік у вигляді зменшення продуктивності програм, то далеко не завжди вони використовуються за замовчуванням - адже поголовне їх використання може позначитися на таких важливих для користувача факторах, як швидкість завантаження системи або час виходу із сплячого режиму. Тому не варто розраховувати на те, що всі бібліотеки в системі зібрані з підтримкою canary words.

ІНШЕ

Qt 5: зміни в c ++ api і модулях фото

Qt 5: зміни в c ++ api і модулях

Відео: Qt5 C ++ - QTimer Взагалі склалося враження, що розробники Qt 5 доклали багато зусиль, щоб програмісти С ++…

Cbi і співтовариство фото

Cbi і співтовариство

Відео: Dr Grinstead On Community Bridges Inc Treatment Center In Arizona Метою проекту CBI декларується залучення…

At & t: мови програмування фото

At & t: мови програмування

Відео: Улюблені мови програмування в Яндексі Дистрибутив Yoix включає в себе Yoix Web Application Instant Template…

» » Помилки сегментації і безпека: засоби захисту, способи їх обходу і слова-канарки