Веб-программирование

Уязвимости состояния гонки в веб-приложениях

Уязвимости состояния гонки в веб-приложениях
Когда веб-приложение, настроенное для управления функциями в фиксированной последовательности, требуется для одновременного выполнения двух или более операций, происходит атака состояния гонки. Этот метод использует временную задержку между тем, когда услуга вводится, и тем, когда происходит контроль безопасности. Эта атака может быть проведена одним из двух способов на основе многопоточных приложений: вторжение, вызванное ненадежными процессами, и вторжение, вызванное надежным процессом, который может иметь одинаковые и равные права.

Различные процессы могут взаимодействовать друг с другом без адекватных мер. Эти атаки также известны как атаки на время проверки, атаки на время использования или атаки TOC / TOU. Уязвимости состояния гонки возникают в первую очередь из-за основных ошибок программирования, которые обычно создают разработчики, и эти сбои оказались дорогостоящими. Вредоносные сущности использовали условия гонки для множества злонамеренных целей, например.е., от получения бесплатных ваучеров для кражи денег с онлайн-счетов и инвестиционных фирм.

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

Это происходит потому, что эффект завершения одного потока зависит от результата другого. Когда два потока выполняются одновременно, будут непредвиденные последствия.

Объем атак состояния расы:

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

Уязвимость в состоянии гонки обнаружил Егор Хомаков на сайте Starbucks. Он открыл способ бесплатно создать бесконечную сумму кредита на подарочные сертификаты Starbucks, используя разные браузеры с разными файлами cookie.

Известная атака Meltdown является примером уязвимости состояния гонки. В атаке срыва уязвимость вызывается параллельной обработкой извлечения данных из памяти и аутентификацией того, разрешен ли пользователю доступ к памяти. Этот недостаток позволяет инструменту избегать стандартных проверок привилегий, которые отделяют механизм атаки от доступа к данным ОС. Эта лазейка позволяет любому неавторизованному процессу просматривать данные и информацию с любого другого адреса, связанного с текущим состоянием выполнения в памяти. В процессе ошибочного выполнения информация с неутвержденного адреса часто будет быстро накапливаться в кеш-памяти ЦП, из которого ее можно восстановить.

Реальные сценарии атаки:

Постоянно отправляя многочисленные запросы на веб-сервер, вы можете искать и управлять условиями гонки в веб-приложениях. Если вы хотите узнать, можете ли вы снять больше денег, чем есть на вашем банковском счете, используя функцию curl, вы можете одновременно отправить несколько запросов на снятие средств на сервер.

curl (снять 50000) & (снять 50000) & (снять 50000) & (снять 50000) и (снять 50000) & (снять 50000)

Чем больше требований вы подадите за короткий промежуток времени, тем выше шансы, что ваша атака сработает.

Более того, если вы отправляете асинхронные последующие запросы, вы будете следовать за пользователем несколько раз вместо отправки ответа об ошибке. я.е., если вы добавляете поддельный заголовок, содержащий% s, при отбрасывании запросов с помощью турбо-злоумышленника и вставляете следующий код Python:

def followReqs (цель, списки слов):
двигатель = RequestEngine (конечная точка = цель.конечная точка,
concurrentConnections = 40,
requestPerConnection = 100,
pipeline = False
)
для i в диапазоне (40):
двигатель.очередь (цель.req, str (i), gate = 'check')
двигатель.openGate ('проверить')
двигатель.завершено (тайм-аут = 60)
def responseHandle (req, интересно):
Таблица.добавить (требуется)

Вы увидите кнопку атаки. После нажатия этой кнопки Turbo Intruder отправляет 40 запросов и сканирует коды состояния. Если вы видите несколько ответов со статусом 201 Создано, это означает, что вы несколько раз следили за человеком.

Существует уязвимость состояния гонки, при которой вы можете получить доступ к нескольким консолям, предлагаемым для бесплатных учетных записей. Большинство веб-сайтов, предоставляющих бесплатные консоли, имеют бесплатные учетные записи, стандартные и премиальные пакеты. Бесплатные аккаунты предоставляют только 2 или 3 консоли на пользователя. Чтобы нарушить этот предел и использовать неограниченное количество консолей, несколько раз вторгайтесь в запрос GET, используя NULL полезные данные, например 100 или 200. Затем удалите любую из консолей вручную из пользовательского интерфейса во время выполнения потоков.

Заключение:

В качестве средства подрыва контроля доступа включены условия гонки. Любая программа, зависящая от механизмов контроля доступа, может быть уязвима. В большинстве случаев на сайтах финансовых организаций хакеры используют условия гонки. Поскольку это может привести к неограниченным финансовым выгодам для хакера, если условие гонки может быть обнаружено на жизненно важной функции, такой как снятие наличных, денежный перевод или оплата кредитной картой. Платформы электронной коммерции, видеоигры и услуги онлайн-голосования - другие технологии с высоким уровнем риска. Внедрение безопасного параллелизма - это секрет предотвращения гонок. И вы также можете использовать блокировки ресурсов. Также будет встроенная функция блокировки для языков программирования с возможностью параллелизма, которая поможет предотвратить такие условия. Кроме того, следуя стандартам безопасного кодирования, я.е., концепция минимальных привилегий и код аудита уменьшат вероятность нарушения программы.

Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...