Каждый день хакеры по всему миру обнаруживают и используют новые уязвимости в веб-сайтах, приложениях и даже в системной архитектуре. Одна общая черта всех электронных устройств, старых или новых, заключается в том, что они управляются программами, хранящимися в памяти. Хакеры воспользовались этим и обнаружили уязвимости, известные как переполнение буфера.
Хотя это и не ново, атаки и уязвимости, связанные с переполнением буфера, сеют хаос в киберпространстве. Здесь мы объясним вам, что такое атаки переполнения буфера и как вы можете их предотвратить.
Понимание буферов и системной памяти
Чтобы понять, что такое атака переполнения буфера и как она работает, вам нужно знать, что такое буфер и как работает память компьютера.
Стек и куча памяти две основные особенности памяти компьютера. Это структуры данных, используемые для выделения памяти. Хотя они похожи, стек и куча памяти отличаются несколькими способами.
Стек, в котором используется принцип «последним пришел — первым обслужен» (LIFO), используется в ОЗУ (оперативной памяти) для временно хранить выполнение программ, в то время как куча выделяет память, используя динамическое распределение, для глобальных переменные. Но у них есть одна общая черта — буфер.
Что такое буфер?
Буфер — это область памяти, используемая для хранения данных, чаще всего в оперативной памяти компьютера, в то время как они перемещаются из одного места в другое. Эти данные обычно представляют собой программы, которые необходимо выполнить. Буферы хранятся в стеке или куче. Они оптимизируют выполнение данных.
Что такое переполнение буфера?
Переполнение буфера происходит, когда буфер получает больше данных, чем его емкость. Поскольку он не может обработать такой объем данных, он переполняется.
Теперь в памяти компьютера сразу после буфера или буферного пространства находится адрес возврата. Этот адрес возврата на самом деле называется расширенным указателем инструкций (EIP). Его функция состоит в том, чтобы указать компьютеру на указанную программу при заполнении. Когда в буфере больше данных, чем он может вместить, и он переполняется, он переполняется по адресу возврата.
Чтобы понять это, давайте предположим, что у вас есть буферное пространство, которое может содержать только пять букв. Поэтому, если вы введете такие слова, как «сахар» или «мир», буферный поток сможет их содержать. Но когда у вас есть такое слово, как «аутентификация», оно неизбежно выльется наружу. Это приводит к ошибке или сбою в системе. Но хакеры могут использовать эту уязвимость, чтобы начать атаку переполнения буфера.
Что такое атака переполнения буфера и как она работает?
Атаки с переполнением буфера происходят, когда хакер получает контроль над обратным адресом или EIP. Когда злоумышленник знает размер системной памяти, он может намеренно записывать данные в эту систему только для того, чтобы переполнить ее. Затем они убеждаются, что EIP или обратный адрес написаны так, чтобы указывать на программу, которая может предоставить им доступ к системе или раскрыть конфиденциальную информацию, хранящуюся в системе.
Злоумышленник может даже записать некоторые данные, содержащие вредоносный код, и вызвать переполнение буфера. Затем записывается EIP для перенаправления системы обратно к вредоносному коду, после чего он запускается. Затем хакер получает контроль над системой.
В атаках на переполнение буфера есть пять основных шагов:
- шипы
- Фаззинг
- Нахождение смещения
- Перезапись EIP или обратного адреса
- Использование уязвимости
Шипование — это первый шаг. Здесь хакеры находят часть памяти программы, уязвимую для переполнения буфера. Затем следует фаззинг, похожий на всплеск, но здесь хакер отправляет символы в программу, чтобы проверить, можно ли ее взломать. В случае успеха атакующий приступает к поиску смещения, в котором происходит переполнение буфера. Это делается для того, чтобы узнать размер буфера и адрес возврата. Затем хакер вставляет вредоносный шелл-код и контролирует систему.
Какие существуют типы атак переполнения буфера?
Существует два основных типа атак переполнения буфера: атаки на основе стека и атаки на основе кучи.
1. Атаки на переполнение буфера на основе стека
Атаки переполнения буфера на основе стека являются наиболее популярным типом атак переполнения буфера. Они возникают, когда память стека системы переполняется и используется. Это также известно как разрушение стека.
2. Атаки на переполнение буфера в куче
Этот тип переполнения стека не очень распространен, так как его сложно реализовать и использовать. Это происходит, когда память, выделенная для программы, переполняется. В январе 2021 года Google обнаружил переполнение буфера в куче. уязвимость в компоненте V8 Chrome.
Как вы можете предотвратить атаки переполнения буфера?
Атаки переполнения буфера можно смягчить с помощью средств защиты среды выполнения ОС, безопасных языков программирования, рандомизации структуры адресного пространства и обеспечения надлежащих общих мер безопасности.
1. Использование защиты среды выполнения ОС
Защита во время выполнения также известна как проверка границ массива во время выполнения. Это гарантирует, что каждая программа выполняется в пределах доступного буферного пространства или памяти. И он проверяет все данные, записанные в память системы. Это затрудняет хакерам перезапись данных в системе и использование уязвимости.
2. Использование безопасных языков программирования
Языки программирования, такие как C и C++, не реализуют проверку границ массива во время выполнения, потому что для проверки каждой программы, записанной в систему, требуется дополнительный код, что замедляет ее работу. Следовательно, они более подвержены атакам переполнения буфера. Лучше использовать более безопасные языки, такие как C#, Java и Python, поскольку они менее подвержены риску атак переполнения буфера.
3. Используйте рандомизацию размещения адресного пространства (ASLR)
Эта мера безопасности случайным образом назначает адреса программ и функций в памяти системы различным областям данных. Это затрудняет для злоумышленника навигацию по конфиденциальным функциям в памяти.
4. Обеспечить строгие политики безопасности
Это включает в себя регулярное обновление системы, проверку всех данных, записанных в систему, и назначение пользователям минимальных привилегий. При наличии надлежащих политик безопасности вам не придется беспокоиться об атаке переполнения буфера.
Обеспечение надежной защиты необходимо для борьбы с атаками переполнения буфера
Согласно популярной поговорке в области безопасности, «пока система используется людьми, существует уязвимость», что верно и неизбежно. Однако всегда можно снизить вероятность атаки, обеспечив наличие и строгое соблюдение надлежащих мер безопасности.
Помните, что хакеры постоянно находят новые способы использования таких уязвимостей, как этот. Поэтому вы должны опережать их, следя за последними достижениями в области кибербезопасности.