Уязвимости в ПО.

Уязвимости в ПО.

Kevin Mitnick


Заразиться даже ничего не скачивая?

Разработчики пишут код, который, используя возможности системы, воплощает идеи в программы. Любая программа состоит из последовательности команд, которые диктуют процессору, что ему делать.

Опасность может прийти и оттуда, откуда её никто не ждёт.

Следуя командам программа выполняет заложенные в неё алгоритмы и взаимодействует с операционной системой. Код способен на любые действия, которые ему позволит система, а это в свою очередь будет зависеть от настроек безопасности пользователя и прав процесса. Если мы говорим о вредоносном ПО, то в него изначально заложены механизмы, способные нанести вред. Если такая программа получит доступ к системе, то последствия могут быть не очень хорошими для человека, запустившего подобное ПО. Но для хакера тут остаётся открытым один из, пожалуй, самых трудных вопросов: как занести программу на компьютер жертвы и заставить её исполнить зловред. Этот вопрос встаёт ещё острее при атаках на сервера, на которые устанавливается только надёжное и минимально необходимое ПО, вредоносных функций в котором никто ожидать не будет. Но опасность может прийти и от туда, от куда её никто не ждёт - уязвимость в доверенной программе.


Находя ошибки в реализации кода, хакеры способны заставлять программу делать произвольные действия. Уязвимости имеют много классификаций, и встречаются очень безобидные, эксплуатируя которые нанести существенный вред системе невозможно, однако встречаются и такие, которые способны сделать хакера чуть ли не Богом на компьютере или сервере. Хорошим примером тут является недавняя уязвимость в протоколе SMB, которая затронула чуть ли не все версии windows и позволяет исполнить произвольный код с привилегиями ядра на любом уязвимом компьютере, лишь бы тот был подключен к сети. Она наделала много шума лишь потому, что число потенциально уязвимых машин было крайне велико. Но подобные уязвимости находятся регулярно и в любом ПО(SMB является частью windows).


Говоря простым языком, уязвимость - недочёт в ПО, который позволяет заставить программу делать действия, не предусмотренные разработчиком. Для осуществления этого всего нужен эксплойт, который инициирует срабатывание уязвимости и выполнение заложенных хакером действий. В некоторых случаях получается добиться исполнения произвольного кода с правами текущего процесса. Другие типы уязвимостей могут приводить к нарушению работы ПО или отказу обслуживания, что критично для серверов. Уязвимости представляют не меньшую угрозу, чем вирусы. По этой причине можно смело сказать, что ни один компьютер не защищён. Даже если на машине не установлено никаких программ, в системе 100% есть какой-то недочёт, который делает её уязвимой. Новые баги в ПО, о которых ещё никто кроме хакера, нашедшего их, продаются на просторах даркнета. Их называют 0day уязвимости или уязвимости нулевого дня. Поскольку они нигде ещё не показались, никто не ожидает атаки с этого фронта. Любой, кто обладает таким эксплойтом, с очень высокой вероятностью сможет использовать его против жертвы, без шансов на спасение у последней.


В основе исполнения произвольного кода чаще всего лежат ошибки, связанные с переполнением буфера(stack overflow). Он наступает, когда программа пытается записать данные большего размера, чем отведено под них места. Выходящие за рамки данные будут записаны поверх дугой информации, но так же можно добиться изменения адреса возврата из процедуры и внедрения произвольного кода. Эта уязвимость актуальна в языках низкого уровня, где у разработчика есть свободный доступ к памяти.

В вебе наиболее часто встречается sql-инъекция - внедрение произвольного условия или оператора в запрос к базе данных. С её помощью можно читать произвольные таблицы и секретные поля, которые пользователю никогда показываться не должны; менять там значения, а в некоторых случаях и создавать файлы на сервере. Если получится прогрузить шелл, то хакер откроет себе полный доступ к серверу.

Ошибка include связана с недостаточно проверкой вводимых пользователем данных. Если такие данные пропустить в команду подключения сторонних файлов, хакер сможет, комбинируя разные методы атак, добиться получения контроля над сервером.

Менее техническая, но очень часто встречающаяся уязвимость - стандартные пароли и недостаточная проверка прав. Она способна свести на нет любую защиту, и обнаруживается очень часто, особенно в IOT.


Большинство новых уязвимостей не найти в открытом доступе, а можно только купить за деньги. Однако со временем они все тем или иным образом попадают в базы. Одна ис самых больших - exploit-db.com. Одного беглого взгляда достаточно, чтобы понять масштабы трагедии. Хакеры часто используют автоматизированные средства для приведения эксплойтов в действия, и тут бесспорным лидером будет metasploit.


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