Рубрики
Без рубрики

Многими способами, которыми я мог угонировать ваши приложения Node.js

Многими способами, которыми я мог угонировать ваши приложения Node.js

Автор оригинала: Abdulrasaq Nasirudeen.

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

Это немного длинная статья, возьмитесь сиденье и пачку попкорна, чтобы следовать за мной.

Как исследователи безопасности, мы считаем всеми возможными способами, мы можем проникнуть в приложение, а также возможные способы, с помощью которых можно исправить недостатки безопасности. Buzzing вокруг – это узел-экспресс-штука.

Я начну урокул, объяснив несколько способов Возможно, я могу ввести конечные точки API, построенные на Nodejs и что вы можете сделать, чтобы остановить меня.

Запросить впрыск тела: Запрос на впрыск тела – это уязвимость, в которой вы не фильтруете точно, что пользователь передал приложение, экземпляр: вы построили приложение электронной коммерции, в котором пользователи могут приобрести предметы, а также оплачивать онлайн, всякий раз, когда процесс оплаты У вас есть конечная точка, в которой вы отправляете какой-нибудь почтовый запрос от шлюза платежей, в качестве злоумышленника, я могу получить API, купив товар, который менее дорогим, мониторинг моих сетевых журналов, чтобы увидеть конечные точки, метод Используется для запуска запроса и типа полезной нагрузки. Ожидается конечная точка. После получения этих деталей я мог бы имитировать мою предыдущую покупку, но на этот раз, приобретая более дорогой предмет, а затем впрыскивая конечную точку, ожидая статус платежа с соответствующим методом, а затем отправлять точные данные, которые он ожидает через него, на этот раз, приложение Оражена в веру, я заплатил, тем самым создавая меня счет, который я купил товар! Легко справа? Ну, вот это, но простой процесс мог предотвратить такой катастрофический эффект.

Что я могу сделать глупо? Теперь я вижу, что вы хотите учиться Подмигивание Закрепите свой ремень безопасности, давайте переместимся! Чтобы предотвратить эту проблему, я побудим вас создать уникальный идентификационный ключ, который не виден во время процесса транзакции, я слышал, как вы говорите, как я могу сделать это возможным? Ну, вы можете сделать это, сохраняя ключ идентификации в файла cookie браузера, шифрование его с секретным ключом, который известен только вашим приложением, таким образом, даже если кто-то подделал токен, вы можете быть уверены, что они не могут получить Ключ, даже если они пытаются перебросить, ваша заявка заблокирует их!

Я сделал это, что дальше? Очень хорошо, следующим шагом – убедиться, когда процесс оплаты завершен, и код ответа – 200 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 или 201 штурвала, вам необходимо отправить данные из шлюза платежей в свое веб-приложение, затем во время хранения Процесс, вы проверяете токен в файлах файлов вашего браузера, декодируете его, чтобы убедиться, что он проходит через и еще не истек или не подделал злоумышленником. Вам также нужно недействовать токен, как только процесс будет завершен Отказ Это очень просто прямо вперед, и, безусловно, вы можете быть уверены, что ваша платежная система не одурачена в полагаю, что товар был оплачен, когда по-настоящему это вынуждено поверить в ложь.

Запросить впрыск тела 2: Я не захочу тратить свое время здесь, я уже могу видеть, как вы спрашиваете, почему мне нужна часть, когда я могу сложить все в первом объяснении, возьми таблетку охлаждения! Я только пытаюсь сделать все более пояснительными, я хочу быть уверен, что вы получите мое сообщение, и вы делаете все возможное, чтобы помешать мне взломать ваше приложение. Запрос впрыска тела – это имя, которое я даю уязвимостью, когда конечная точка API может быть обманута, чтобы принять данные, которые нельзя предположить или выполнять операцию за пределами своей системы функциональности.

Позвольте мне дать вам экземпляр того, как я могу проникнуть через ваше приложение, экземпляр – это когда я пытался создать учетную запись на вашем сайте, и я проверяю свои сетевые журналы, чтобы увидеть список данных, которые проверяет ваше приложение. Я проверю мою локальную или браузерное файлы cookie, чтобы увидеть, если вы используете токен, похожий на JWT, я буду декодировать токен онлайн, используя любой онлайн-декодер JWT, после просмотра вашего вывода образец, я отметку их в мою волшебную книгу. Вы спрашиваете меня, как информация может помочь мне проникнуть через ваше приложение? читать дальше! Пусть скажу после декодирования вашего токена JWT, похоже на объект ниже JSON.

{
alg: "HS256",
typ: "JWT"
}.
{
userDetails: {
isAdmin: 0,
_id: "5a80f1ca298abc001450ba4b",
username: "James",
email: "name@gmail.com",
__v: 0
},
exp: 1519295362,
iat: 1519208962
}.
[signature]

После просмотрения ваших объектов UserDetails я вижу, что у вас есть значение ISADMIN, установленное на 0, что означает изменение токена, чтобы сделать , сделает меня администратором, я мог бы попытаться зашифровать токен онлайн, но я не могу получить ваш Секретный ключ Отказ Мне понадобится более умный способ пройти через, я постараюсь снова создать учетную запись, осмотр моего запроса на сетевую браузер, я получу конечную точку, которая обрабатывает ваш процесс регистрации, я открою свой почтовый пользователь или любой HTTP-клиент, вставьте конечную точку в Адресная строка, измените метод HTTP, чтобы опубликовать, вставить необходимые детали Ваше приложение ожидает, но на этот раз я добавлю странный ключ хихикает Я сделаю значение ISADMIN 1, если вы не фильтруете данные с вашей бэкинда, ваше приложение примет их в и Boom! Я сделал себя администратором.

Прежде чем пройти через то, как вы можете предотвратить такие проблемы, я хотел бы объяснить еще один возможные способы проходить через, если по какой-либо возможности вы получили конечную точку регистрации, от принятия того, что в набранном пользователю. Я созданию учетной записи на вашем сайте. , попробуйте изменить мой профиль, если вы ленивый разработчик, вы просто примите все, что идет с вашей конечной точки EditProfile после того, как промежуточное программное обеспечение проверило необходимые данные, вы отправляете req .body Непосредственно к вашему контроллеру, я обязательно добавлю на этот раз, впрыскивая через вашу конечную точку eddprofile и woooosh, я только что сделал себя администратором, я просто выведут, потом войти в систему, просто чтобы войти и полностью наслаждаться моим новым предоставлена привилегия, бесплатно.

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

const { username, passord, email } = req.body

Затем в вашем приложении вы будете хранить его с кодом, похожим на ниже.

User.create({ username, password, email })
.then(() => {})
.catch(() => {})

Инфильтрация токена: Я слышал, что вы спросите, откуда у меня были эти терминологии? Не волнуйтесь, мы здесь не учитываем терминологии, мы здесь, чтобы узнать, как защитить наши веб-приложения от атакующих.

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

Слишком много разговоров уже! Покажите мне, что вы имеете в виду! Хорошо, что я пытаюсь сказать, это скажем, вы построили приложение, которое использует JWT в качестве метода аутентификации, и когда пользователь пытается выполнить операцию, вы декодировали токен, а затем проверьте, содержит ли объектный объект Decoded User. admin>. Как злоумышленник, я мог подписать токен, чтобы выглядеть точно так, как тот, который подписан вашим приложением. Я буду хранить токен в моей локальной табличке браузера или файлы cookers браузера в зависимости от того, где ваше приложение хранит токен изначально, я бы изменил его, чтобы заставить меня выглядеть как админ, скажем, на ваш токен, вы имеете ключ, называемый ролью с Значение как admin или пользователь в зависимости от привилегии, предоставленной вошедшим в систему пользователя.

Если произойдет уязвимость, заключается в том, что вы выполняете работу, как декодирование токена, забывая использовать ваш секретный ключ. Это означает, что любой токен, подписанный и сохраненный для вашего приложения к пикату, будет действительным. Экземпляр может быть, когда вы используете пакет NPM, как JWT-Decode что позволяет вам декодировать токен без фактического прохождения в секретном ключ. Я уверен, что вы уже знаете, как для того, чтобы защитить атаку, как это, но для лучшего контекста, я посоветую вам зашифровать токен с секретным ключом, который сильнее, чем самый страшный пароль, а также убедитесь, что никаких средств декодирования Токен в вашем приложении без явного использования секретного ключа, который вы использовали при подписании токена.

Пересекающий сайт Запрос Подделка (CSRF): Ура! Я уже знаю об этом! Ну, успокоится, есть некоторые люди, которые еще не знают об этом, и есть высокая вероятность, что ваше текущее применение мирового класса уязвимо к этой атаке. Г-н Джон имеет веб-сайт форума, где миллионы людей делятся идеями, этот форум – это полный рабочий день, поскольку доход, который он зарабатывает через рекламу, может поддержать его и его семью даже до того, чтобы жить жизнью своей мечты, Питер Хакер из подземного мира ищет свою следующую жертву, чтобы упасть в темные искусства колдовства Отказ

Петр пытается каждый из нападений, упомянутых выше, но, похоже, нет никаких возможностей, разработчики веб-сайта г-на Джона была отличная работа в фиксации целого множества ошибок и защита от учетной записи конечных пользователей, от того, как уклонается, но Питер – хакер, а хакеры естественным образом Мы думаем о каждом возможных сценариях, чтобы проникнуть через заявку, поскольку мы не сдаваемся легко, Петр продолжает проверять приложение, но вдруг он вдруг вздохнул с облегчением, придерживаясь клееных рук в воздух и кричал да ! Я понял!

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

{
userId: 87789299,
articleId: 3534645767
}

Peter модифицировал запрос, изменил идентификатор пользователя администратора (он получил его в посещении профиля администратора). Таким образом, он смог редактировать/удалить статью на веб-сайте, поскольку ваша приложение проверяет, действительно ли идентификатор входящего ID, а также, если идентификатор является той идентификатором создателя статей или администратора. Поскольку Peter может выполнять операцию, подковывая UserID к Admin, он может выполнять каждую операцию, относящуюся к администратору всем, что ему нужно сделать, это пройти через приложение, изменить лучшую статью, чтобы отразить его контактные данные и как админ Добраться до него, чтобы заплатить ему немного выкупа для него, чтобы раскрыть уязвимость в системе. Это уязвимость, которая происходит в основном при наращивании конечных точек, но мы обычно забываем или, вероятно, не знаем лучший способ обеспечить приложение против такой атаки.

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

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

Дайте мне знать, если у вас есть какие-либо вопросы/обратная связь в окне комментариев ниже. Спасибо