Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

FAQ

Докучаев Дмитрий aka Forb

Спецвыпуск Xakep, номер #045, стр. 045-074-3


Q: Я никогда не выкладывал исходники своей популярной программы. Велика ли вероятность того, что хакеры найдут багу в моем проекте и переполнят буфер?

A: Вероятность очень большая. Существуют утилиты, позволяющие компрометировать на переполнение даже бинарные файлы. Если твоя софтина юзается в качестве пользовательского приложения, можешь особо не волноваться. Когда же прога запускается под рутом (администратором) и требует дополнительных привилегий, следует тщательно проверять софт на всевозможные переполнения.

Q: Пишу софт под MacOS. Весь инет перерыл, но так и не смог найти хороший отладчик для моих программ. Порекомендуйте хороший дебаггер для этой операционки.

A: Посоветовавшись с Apple-программерами и поискав в инете, я сделал выбор в пользу прекрасного дизассемблера MacsBug. Загляни на страницу http://developer.apple.com/tools/debuggers/MacsBug и узнаешь все об этом чудесном приложении.

Q: Каким основным принципам должен следовать начинающий программист?

A: Написание защищенных программ – основной принцип и самая сложная задача для программиста. Это в особенности относится к кодингу серверов, программ по безопасности и тулз, запускающихся под рутом и другими системными аккаунтами. Используй проверку границ (функции strn*, sn* вместо sprintf и т.п.), динамическое задание размера буфера в зависимости от пользовательского ввода. Будь осторожен с циклами for/while и другими, которые накапливают данные в буфере, и всегда обрабатывай пользовательский ввод с большим вниманием. Также в индустрии безопасности были предприняты значительные усилия для предотвращения проблем переполнения буфера с помощью методик типа неисполняемый стек, suid wrapper, защитные программы, которые проверяют адреса возврата, компиляторы с проверкой границ и т.д. Используй эти техники везде, где возможно, но не полагайся только на них, а придумывай что-то свое.

Q: Получил письмо от пользователя, юзающего мою программу. Он пишет, что обнаружил переполнение в моем проекте, ведущее к поднятию дополнительных привилегий. Что лучше всего сделать в этом случае?

A: Тебе повезло, что юзер отписал тебе, а не в багтрак. По данным письма быстренько пофикси баг и выпусти свежий релиз. Постарайся не упоминать, что в старой версии наблюдался разрушительная уязвимость, иначе усугубишь ситуацию. Дождись, когда все апдейтнут прогу, и только после этого (через пару версий) заяви о пофиксенном изъяне. И не забудь поблагодарить нашедшего уязвимость :).

Q: Решил выпускать программу вместе с кодом, но мне сказали, что это не совсем безопасно – могут найти уязвимость и написать эксплоит. Что посоветуете?

A: Уязвимость могут найти и без исходников. Если решил дарить миру исходники – дари, но будь готов ко всему. Прежде чем распространять сырцы, проверь их всевозможными утилитами на наличие уязвимых мест. И попроси проверить других программеров – одна голова хорошо, а две лучше.

Q: Есть ли альтернатива gcc, которая позволила бы избежать переполнений?

A: Про хорошие альтернативы не слышал, однако существуют патчи к gcc, решающие проблему. Сходи по ссылке http://www.trl.ibm.com/projects/security/ssp/ и найдешь ряд фиксов, защищающих от оверлоада. Принцип их действия очень прост: при компиляции к каждой программе добавляется участок кода для защиты от переполнения. Патч универсален и может применяться как для Linux, так и для FreeBSD.

Назад на стр. 045-074-2  Содержание  Вперед на стр. 045-074-4