Статья По горячим следам: в попытках раскрыть мошенническую схему — Discord, ботнет да стиллеры
Честно, я не знаю получит ли этот материал возможность быть опубликованным, ибо это лишь записки расследования мошеннической схемы, на которую автор сей писульки и попался. Да-да, все мы можем быть порой невнимательными. Это не будет сюжетный материал или что-то этого рода, мне просто нужно не потеряться в собственных мыслях и не зайти в тупик. Поехали.
Для начала мы имеем такую картину. Доверенный вам человек просто присылает сообщение, мол что-то там произошло и готов дарить скины в CS. На первый взгляд сразу понятно ,что это мошенничество, но явно не всем. С самим фишинговым текстом вы можете ознакомиться где-то на скрине в тексте выше или ниже.
Статус “недоверенный” действительно лишает игрока возможности полноценно наслаждаться игрой да и вовсе играть на ранг. Для некоторых это и вправду становится причиной ухода из данной игрульки. Ухода, но не раздачи всего нажитого, да?
Сразу можно отметить, что на первый взгляд кажется все очень нелогичным, ведь зачем дарить вещи, имеющие цену от 5.000 рублей? Но это компенсируется тем, что текст пропитан эмоциями и вводит читающего в явное заблуждение, заставляя думать, что вот она — халява, на дурачке нажиться смогу.
Ведь всё преподносится, будто раздающий — на пике переживаний, а у жертвы это заставляет включить режим охотника, который слепо бежит в сеть, становясь добычей сам. Дальше мошенник отмечает, мол ножи не трогайте, и это важно, сразу добавляет реалистичности, ведь цены тех, которые были в инвентаре варьируются от 50.000, что сразу обесценивает в ваших глазах то, что парень отдает. И фирменная пометка “Если не успел, не обижайся”, которая прямо таки бьет по мозгу халявщиков, заставляя быстрее сделать то, что вас просят.
Вся схема продвигается через Дискорд, при том с множества аккаунтов, иногда даже по несколько раз с одного и того же спустя определенное время. Установив контакт ещё с несколькими жертвами, мне удалось проанализировать их почты и я очень удивился.
Если схема со Стимом базировалась на фишинге, то как злоумышленник получил доступ к ДС, для меня остается загадкой, это и предстоит нам выяснить кстати. На почте нет даже сообщения о подтверждении входа с незнакомого айпи. Нет запроса на смену пароля или что-то в этом роде. Странно.
Изначально у меня сложилось ощущение, что рассылка происходит посредством API и никто не получает пароля или сессию, а просто использует аккаунт, как бота. Эту версию мы проверим чуточку позже.
Итак. История начинается с того, что позвала меня моя девушка в CS, притом даже 1.6, захожу такой в Стим, а оно не заходит. Сначала я не понял в чем прикол, пароли я всегда забываю, поэтому пошел восстанавливать, спустя минут 10 обнаружил, что аккаунта привязанного к моей почте уже нет. Я просмотрел сообщения от Стима и заметил прекрасную картину входа с незнакомого IP, подтверждения попытки входа, на тот момент мне даже в голову не пришло, что случай с переходом по ссылке с ДС на инвентарь CS:GO и это могут быть связаны. Точнее я просто забыл, что куда-то заходил.
Первое суждение всегда ошибочно? Получается. Подумав, что скорее всего взломали мою почту, а такое может быть, хотя пароли обычно сложные везде стояли (именно поэтому забываю, хе-хе). Убежал я проверять историю входов, очевидно, что ничего подозрительного не заметил и не нашел.
И тут меня озарило, сопоставив даты писем о незнакомом айпи и одного сообщения на сервере Дискорда, я очень гневно высказался о их авторе. Связавшись со знакомыми, узнал ВК спамера и там написал целую петицию. Ожидая ответа, запустил Кали и с помощью nmap’а проверил засвеченный IP. Как и ожидалось — прокси, ничего особого. Размещены они в Москве, откуда было произведено подключение, через Мальтего удалось установить компанию, которая имеет в собственности эти сервера. Также корпоративный и личный емейл владельца. Некоторую документацию, несколько исков против данной организации и кучу всякого хлама, который никак не поможет. Писать владельцу, дабы тот выдал историю подключений — бред, всё таки это конфиденциальная информация, которую получить могут лишь государственные органы да и то только через суд. Поправьте, если ошибаюсь.
- на повторении, примером будет mm — mn. steamcommunity — steamcomnunity.
- и в словах, который обычный русский не читает или просто не знает как правильно они пишутся. steamcommunity — steamcommuntiy.
Фейк страницу с красивым доменным именем можно нынче создать и создать недорого, это не 2012, когда приходилось искать бесплатный хостинг, ибо денег родители не давали, да? Раньше большинство фейков имели странные долгие ссылки, типа: steamcommunity.up.time.ua.ru.bigmir.com, сейчас же имеем “https://steamconmmuinty.com/tradaffer/new/?partner=2109629920&token=YEsp1sqlP” . Намного красивей и более похоже на оригинал. Сделать фейк очень просто нынче, или использовать готовый с таких репозиториев, как SocialFish, или сделать самому с помощью wget на Линуксе. После чуть-чуть подправить и вуаля.
Итак. Всё ближе и ближе подходим к дискорду: как, что делать и почему .
Для начала давайте загуглим часть фишинг-текста и посмотрим встречался ли он где-то ещё. В результате получаем несколько десятков ответов: люди жалуются на мэйл.ру, что с их аккаунтов в ДС флудят таким текстом, заметьте — именно в дискорде. Несколько десятков людей отозвались с похожей проблемой. Дальше произошло то, что заставило меня действительно задуматься над тем, что рассылает это не человек, а какой-то скрипт.
В поиске находим чатлог с ДС, с иностранного сервера, люди там общаются на немецком, но сообщения о раздаче на русском. Или вот вариант, где англичане предполагают, что это спамбот:
“22:50 Я в тильте, в кс дали статус «Ненадежный», за ахк, мм играть не могу и пофиг), просто раздам скины. Можешь взять 1-2 скина (кроме ножей), обмены подтверждаю все, на всех не хватит, так что если не успел, не обижайся..
22:50
Ссылка скрыта от гостей
@everyone
22:50 nice
22:50 Alright, this was funny the first time.
22:51 what was it?
22:51 spambot”.
И я разделяю их мнение. Так вот, давайте-ка попытаемся что-то такое воссоздать. Для начала я поинтересовался, есть ли возможность своровать API ключ или токен. Первый вариант сразу отпал, потому что функции и возможности бота слабо походят на то, что мы видели. А вот токен-стиллер имеет место быть, не представите себе — их туча.
Самым удобным и простым оказался какой-то ПриватСтиллер, он имеет свой билдер на C, советую не использовать, могут иметься самые разные вредоносы. Сам использую лишь для расследования и этой писульки. Для начала нам понадобиться создать свой сервер в ДС, после кликнуть правой клавишей мыши по нему. Выбрав “Настройки сервера”, переходим в “Интеграция” , после “Вебхуки” и создаем новый хук. Можно добавить аватар, но это не обязательно.
Следом шагаем в билдер, запускаем тот и вставляем ссылку на вебхук. У нас генерируется приложение-стиллер, которое при открытии разголинивает вас с Дискорда и открывает как-бы авторизацию. Введя пароль, жертва ничего не заметит, ибо её просто перенаправит в рабочее приложение. А у нас на сервере бот пришлет нам все данные, включая токен, пароль, логин, айпи и всё-всё. Кстати эта штука не палится никаким антивирусом, на данный момент вирустотал не показывает ничего.
Итак, на этом этапе у нас есть всё для того, чтобы просто поставить какого-то спамбота и он делал своё дело. Использовать будем Кали и какой-то первый попавшийся скриптик с гитхаба. Установим его:
git clone https://github.com/Merubokkusu/discord-spam-bots.git cd discord-spam_bots ls pip3 install -r requirements.txt
Теперь давайте перейдем в папку со скриптом и подравим блокнотом файл конфигурации config.py. Этот бот флудит только в те каналы, айди которых указаны в конфиге, видимо злоумышленник использовал более продвинутую версию. Разобраться в настройках не тяжело, вписываем токен, логин и пароль. Есть возможность добавлять несколько аккаунтов.
Также имеется джойнер по приглашениям, спамер картинками(только путь указать верный осталось) и всё прочее.
Давайте запустим и посмотрим работает ли:
python3 start.py
Затем нам предложит выбрать какой тип спама нам нужен, вводим своё сообщение и кликаем энтер. Здесь столкнулся с ошибкой отсутствия модуля “discum” , даже не смотря на то, что он есть и ручная установка ничего не дала:
pip3 install discum
После перезагрузки всё магическим образом начало работать, почему так — не охота знать. Спамит оно не единожды, а с определенным интервалом. Но это уже не суть.
Ну вот мы и разобрались как всё это работает, примерно таким путем скорее всего наш вредитель следовал. Обнаружить его мне не удалось, парень чертовски неплохо провернул сие дельце и я уже думал заканчивать это разбирательство, которые перешло в статью. Но для прикола решил помониторить самый популярный в СНГ рынок аккаунтов с пометкой CS 1.6. Не представляете моё удивление, когда я нашел вот это:
Естественно выкупать своё же имущество я не собирался, и так было ясно, что поддержка Стим мне вернёт всё, но я не устоял от соблазна чуть-чуть порезвиться и узнать чуточку больше о этом персонаже, поэтому я ему написал под предлогом предлогом покупки.
Его почтовый адрес я не мог узнать раньше, ибо Стим его тщательно скрывает, но после того, как он скинул авторизационные данные на Фанпей — почту мы получили. Если кому-то известна ваша почта, то с вероятностью 50% они знают ваш реальный IP. Сначала мне хотелось поискать достойный скрипт, но после наткнулся на достаточно неплохого бота, который специализируется на сборе общедоступных данных — Глаз Бога. Данный ресурс всячески ущемляют на данном этапе его существования, но это не мешает ему быть эффективным в некоторых случаях. Путем нехитрых манипуляций нам удалось получить карту передвижений данного персонажа, за что благодарим Яндекс. И ведь всё это есть в открытом доступе. Хотя я сомневаюсь, что это его емейл, если это очередной ворованный экземпляр, то у меня нет ни единой зацепки кроме как схемы его действий.
Но мне оказалось этого мало и появилась идея создать проект в Мальтего и поискать все, что связанно с этим адресом в сети. Ничего особого обнаружить не удалось, но всё же ВПН не спас. Парнишка оказался с Украины. Ему я хочу выразить респект, ибо сделано было всё на прекраснейшем уровне, вплоть к моменту продажи. Но , повторюсь, если этот аккаунт тоже не его — то я вышел на его очередную жертву и этот инкогнито таки ускользнул. Я склонен верить этому варианту, ибо слишком было бы глупо оставлять свой реальный адрес, особенно, если смотреть насколько глобальны были его манипуляции. От этого пострадали сотни, а может даже тысячи человек и персона, которая воротит такие дела не должна палиться так. Выразите своё мнение, пожалуйста.
Итоги расследования, а может и выводы
Ну вот как-то так, я считаю, что выводы здесь быть обязаны. Делать с парнишкой, чей емейл и местоположение удалось узнать — я ничего не стану, так как нет уверенности, что это именно он. Аккаунт был восстановлен через поддержку. Я не планировал писать данный материал, вышло абсолютно спонтанно, но, может быть, сегодня мы раскрыли с вами набирающую популярность схему мошенничества. Надеюсь, что после выхода писульки этой поменьшает количество случаев успеха. Защита от этого проста: уметь думать головой и всегда помнить о том, что все хотят о вас только лишь наживы, анонимность — залог безопасности. Сыр лишь в мышеловке бывает бесплатным, да и то не всегда, нынче даже за него придется платить.
Также некоторые сервера начали устанавливать плагины, которые блокируют рассылку рода подобного. Одним из них делюсь —
Ссылка скрыта от гостей
. Как установить его — понятия не имею, коль никогда не разбирался в функциях ДС. Ну, а на этом у меня всё. Будьте бдительны, надеюсь, что вам никогда не придется попасть в сети злоумышленников вроде этого.
А ой, чуть не забыл. Как защититься от стиллера, может быть, спросили бы вы. А я вам отвечу: желательно проверять все файлы, которые вам кидают и говорят, что это для дискорда. Также стоит учесть, что злодей может быть ленивым и даже не изменит данные в Свойствах, поэтому советую смотреть. Самый распространенный метод его распространения — склейка с оригинальным дискордом с пометкой, что это какой-то мод или фиксит какую-то проблему. На одном из крупных порталов до сих пор висит статья о исправлении какой-то ошибки в ДС, где предлагают скачать модифицированный .exe, который как раз и содержит этот стиллер. Я бы просто посоветовал проанализировать свой трафик, на наличие нагрузки от какого-то вредоносного ПО, ну и переустановить само приложение Дискорда.
(v44444v — я)
Теперь уже точно все. Расследование может быть продолжено, в зависимости от вашей активности, просто понятия не имею зайдёт ли такой формат. А так-то мне самому интересно раскрыть данное преступление. Ощущаю себя детективом что-ли, ЛА Нуар? Даниил — лишь пешка и очередная жертва. Когда я предпринимал попытки вернуть себе свой аккаунт, то имейл отражался, путь и зацензуренный, с началом на буковку “A” и с окончанием mail.ru. Стим, пожалуйста, сделайте возможность просматривать действия смены или сброса без цензуры. А Дискорд, просим всем селом, простую таблицу сессий аккаунта. Скорее всего этот гений столкнул первому рандому ворованное, когда увидел попытки восстановить доступ, а этим примо случайным оказался Даня с Украины, кстати, ему я позвонил и это прям очень мелкий парнишка, явно не его состава ума дело. Хорош злодейка наш однако. Если ты это читаешь, то палец вверх тебе. Бывайте.
Хитрый код: мошенники научились обходить СМС-подтверждение операций
Мошенники научились обходить двухфакторную аутентификацию (по коду из СМС) для подтверждения платежей в интернете. Это делается с помощью одновременного проведения фейковой операции на фишинговом сайте, стилизованном под оплату ОСАГО, и реального перевода денег, инициированного злоумышленником. О такой схеме «Известиям» рассказали в «Лаборатории Касперского», ее распространение подтвердили в других компаниях по кибербезопасности и в банках. Россияне уже привыкли, что нельзя называть код из СМС по телефону, но при вводе его на сайте проявляют меньшую бдительность.
Двухфакторный обман
Схема обмана начинается с того, что гражданину направляют сообщение с предложением продлить ОСАГО: в нем указаны данные об авто, в том числе госномер, а при переходе по ссылке демонстрируется сумма страховки и другая ссылка для оплаты, рассказал руководитель отдела развития методов фильтрации контента в «Лаборатории Касперского» Алексей Марченко. Он продолжил: после перехода по ссылке и ввода данных карты пользователю показывается страница с надписью «Формируется СМС-код», которая демонстрируется по таймеру около 30 секунд, а затем перебрасывает на форму ввода кода. В этот момент клиенту действительно поступает СМС от кредитной организации.
Фото: РИА Новости/Максим Богодвид
Ничего личного: как защититься от мошенников в соцсетях
Эксперты призвали максимально скрывать свои данные от посторонних
— Вероятнее всего, после того как пользователь указывает на ресурсе данные карты, злоумышленники инициируют не оплату, а запрос на списание денег с этой карты. На этом этапе у них есть всё необходимое для перевода, кроме проверочного кода. В этот момент пользователь находится на страничке ожидания «Формируется СМС». За это время к нему приходит сообщение. Пользователю кажется, что это СМС для оплаты, хотя на самом деле это СМС для подтверждения перевода денег, который инициировали злоумышленники, — пояснил Алексей Марченко.
Он заключил: когда пользователь вводит СМС-код на страничке, которая появилась после ожидания, злоумышленники завершают атаку, подтверждая перевод денег, который они инициировали на своей стороне. Это комбинация скама и фишинга, подчеркнул эксперт. Схема обмана, в которой сочетается фейковое предложение оплатить страховой полис, использование номера автомобиля человека, серия веб-страниц с ожиданием для получения сперва данных карты, а затем проверочного кода и другие, была зафиксирована недавно и встречается достаточно редко, уточнил Алексей Марченко. В «РЕСО-Гарантия» известно о пяти таких случаях в последнее время. Об этой схеме обмана знают в Росбанке, Газпромбанке и ВТБ, а также в компаниях Digital Security и Zecurion, которые специализируются на кибербезопасности. В Росбанке уточнили, что сейчас злоумышленники активно используют этот сценарий, например, создавая подложные сайты интернет-магазинов. Также способ обмана с обходом двухфакторной аутентификации применяется на сайтах объявлений, добавили в Digital Security. Услуга оплаты страховки через интернет популярна у автолюбителей, знает замглавы департамента защиты информации Алексей Плешков. Он добавил, что поскольку многие покупали автомобиль либо в конце календарного года, либо в самом его начале, переоформление полисов часто приходится на декабрь и январь — в этот период массово появляются и фишинговые сайты страховщиков.
Фото: ИЗВЕСТИЯ/Дмитрий Коротаев
На код вперед: на Госуслугах готовят обязательную двухфакторную авторизацию
Зачем Минцифры планирует усилить защиту пользователей
— Таким способом можно не только украсть деньги, но и войти на важные порталы. Но от подобных случаев, например, на «Госуслугах» есть дополнительные проверки. Если пользователь выполняет вход из нового места (определяется по IP и другим косвенным признакам), то потребуется ввод не только кода из СМС, но и других данных для аутентификации (например, номер какого-либо документа), — разъяснил замдиректора департамента анализа защищенности Digital Security Максим Прокопович. Накануне «Известия» сообщили, что на «Госуслугах» в 2022 году планируют ввести обязательную двухфакторную аутентификацию.
Проверка адреса
Россияне в большинстве своем уже научились выявлять телефонных мошенников и не называют им коды подтверждения операций, отметил руководитель аналитического центра Zecurion Владимир Ульянов. При этом, по его словам, ввод кода из СМС на подозрительном сайте несет такие же риски, как и передача его собеседнику. В то же время пользователи уверены, что применение двухфакторной аутентификации повышает безопасность операций. Эксперт также пояснил, что данные об авто, которые используются для повышения доверия, могут быть взяты из открытых источников или из утечек баз данных. По его словам, такую схему обмана вполне можно автоматизировать и поставить на поток.
Фото: ИЗВЕСТИЯ/Дмитрий Коротаев
Несекретные материалы: продажа и ремонт смартфона грозят утечкой данных
Пользователи рискуют потерять личные файлы при передаче гаджета третьим лицам
— Чтобы избежать несанкционированных списаний, клиентам необходимо внимательно читать сообщения от банков с кодом подтверждения. В них, как правило, указываются назначение платежа, наименование получателя, сумма операции и другие реквизиты. Также нужно обращать внимание на адрес получателя на странице сайта, где вводится код подтверждения, и на саму страницу, — предупредили в банке «Открытие». Даже несмотря на то что злоумышленники находят способы обойти двухфакторную аутентификацию, ей все равно стоит доверять, уверены эксперты. Этот метод подтверждения легальности операции подразумевает, что пользователь отдает себе отчет в своих действиях и понимает, на каком сайте и с какой целью он вводит пароль и код, подчеркнул генеральный директор Infosecurity a Softline Company Николай Агринский. В ЦБ и Минцифры оперативно не ответили на запрос «Известий» о том, знают ли в регуляторах о фишинговой схеме, позволяющей обойти двухфакторную аутентификацию.
Что такое код безопасности discord
ID места – это уникальный идентификатор места в базе данных Google Places и на Google Картах. Его можно использовать в следующих запросах к API Google Карт:
- Получение адреса по ID места в веб-сервисе Geocoding API и сервисе Geocoding (Maps JavaScript API).
- Указание пунктов отправления, назначения и промежуточных путевых точек в веб-сервисе Directions API и сервисе Directions (Maps JavaScript API).
- Указание пунктов отправления и назначения в веб-сервисе Distance Matrix API и сервисе Distance Matrix (Maps JavaScript API).
- Получение информации о месте в веб-сервисе Places API, Places SDK для Android, Places SDK для iOS и библиотеке Places (Maps JavaScript API).
- Использование параметров ID места в Maps Embed API.
- Извлечение поисковых запросов из URL Карт.
- Показ ограничения скорости в Roads API.
- Поиск и стилизация многоугольников, обозначающих административные границы, с помощью стилей на основе данных.
Внимание! 30 марта 2022 г. все API платформы Google Карт перестали поддерживать некоторые устаревшие идентификаторы мест. Начиная с 30 марта 2022 г. любые запросы с такими идентификаторами будут отклоняться: в ответ придет код ошибки INVALID_REQUEST . Позаботьтесь о пользователях и обновите идентификаторы мест, которым больше 12 месяцев. Это необходимо сделать до 30 марта 2022 г.
Как найти идентификатор места
Если вам нужно узнать идентификатор интересующего вас места, воспользуйтесь приведенной ниже строкой поиска.
Вы также можете ознакомиться со средством поиска идентификаторов мест и его программным кодом в документации по Maps JavaScript API.
Обзор
ID места – это уникальный текстовый идентификатор места в Google Картах. Длина идентификатора может быть разной, ограничений по максимальной длине нет. Примеры:
- ChIJgUbEo8cfqokR5lP9_Wh_DaM
- GhIJQWDl0CIeQUARxks3icF8U8A
- EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0EiGhIYChQKEgnRTo6ixx-qiRHo_bbmkCm7ZRAN
- EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0E
- IhoSGAoUChIJ0U6OoscfqokR6P225pApu2UQDQ
Идентификаторы мест есть у большинства объектов на карте, в том числе компаний, географических объектов, парков и перекрестков дорог. Одному местоположению могут соответствовать несколько ID мест, а сами идентификаторы могут меняться со временем.
Один и тот же идентификатор места можно использовать и с Places API, и с рядом других API платформы Google Карт, например Maps JavaScript API, Geocoding API, Maps Embed API и Roads API.
Как получить данные о месте по идентификатору
На идентификаторы мест не распространяются ограничения по кешированию, указанные в пункте 3.2.3(a) Условий использования платформы Google Карт. Определив ID места, вы сможете использовать это значение для поиска этого места в будущем. Подробнее об этом читайте в разделе Как сохранять идентификаторы мест для последующего использования.
Чаще всего разработчики ищут ID по названию места (например, с помощью Places API или библиотеки Places в Maps JavaScript API) и затем сохраняют его, чтобы запрашивать и получать данные о месте в будущем. Подробнее об этом читайте ниже.
Пример использования библиотеки Places с Maps JavaScript API
Чтобы использовать ID места в приложении на JavaScript, сначала найдите идентификатор, отправив запрос в Поиск мест (поле PlaceResult ), или с помощью команды getPlace() в сервисе Place Autocomplete. Затем используйте ID места, чтобы получить информацию о нём.
var map; function initialize() < // Create a map centered in Pyrmont, Sydney (Australia). map = new google.maps.Map(document.getElementById('map'), < center: , zoom: 15 >); // Search for Google's office in Australia. var request = < location: map.getCenter(), radius: '500', query: 'Google Sydney' >; var service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); > // Checks that the PlacesServiceStatus is OK, and adds a marker // using the place ID and location from the PlacesService. function callback(results, status) < if (status == google.maps.places.PlacesServiceStatus.OK) < var marker = new google.maps.Marker(< map: map, place: < placeId: results[0].place_id, location: results[0].geometry.location >>); > > google.maps.event.addDomListener(window, 'load', initialize);
Как сохранять идентификаторы мест для последующего использования
На идентификаторы мест не распространяются ограничения по кешированию, указанные в пункте 3.2.3(a) Условий использования платформы Google Карт. Поэтому их можно хранить для последующего использования.
Обновление сохраненных идентификаторов
Мы рекомендуем обновлять идентификаторы мест, если они хранятся у вас более 12 месяцев. Сделать это можно бесплатно, отправив запрос информации о месте и определив в нем только поле place_id параметра fields . Запрос активирует SKU Places Details – ID Refresh. Также этот запрос может вернуть код NOT_FOUND . Один из способов обойти эту ошибку – сохранить исходный запрос, вернувший идентификаторы всех мест. Если идентификатор какого-либо места станет недействителен, вы сможете получить по этому запросу новые результаты (с данными нужного места или без них). За такие запросы взимается плата.
Примечание. Используя этот способ обхода с запросами Place и Query Autocomplete, вы можете получать ошибку NOT_FOUND в течение еще нескольких дней после того, как идентификатор места станет недействительным.
Коды ошибок при использовании идентификаторов мест
Код статуса INVALID_REQUEST означает, что указанный ID места недействителен. Вы можете получить код INVALID_REQUEST , если идентификатор места был обрезан или изменен другим способом и его значение стало недействительным.
Код статуса NOT_FOUND означает, что указанный ID места устарел. Так происходит, если организация закрывается или ее адрес меняется. Также это может быть результатом массового обновления идентификаторов мест в базе данных Google Карт (место получает новый ID, и поэтому запрос со старым ID возвращает ответ NOT_FOUND ).
Некоторые идентификаторы мест по запросу к API могут возвращать ответ NOT_FOUND или другой ID. К таким относятся:
- Почтовые адреса, для которых нет точных совпадений в базе данных Google Карт и которые выводятся по аналогии со схожими адресами.
- Отрезки длинного маршрута, в запросе которого указан город или другой населенный пункт.
- Перекрестки.
- Места с компонентом адреса subpremise .
Такие идентификаторы часто принимают форму длинной строки (ограничений по длине ID места нет). Пример:
EpID4LC14LC_4LCo4LCv4LGN4LCo4LCX4LCw4LGNIC0g4LC44LGI4LCm4LGN4LCs4LC-4LCm4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSAmIOCwteCwv-CwqOCwr-CxjSDgsKjgsJfgsLDgsY0g4LCu4LGG4LCv4LC_4LCo4LGNIOCwsOCxi-CwoeCxjeCwoeCxgSwg4LC14LC_4LCo4LCv4LGNIOCwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwsuCwleCxjeCwt-CxjeCwruCwv-CwqOCwl-CwsOCxjSDgsJXgsL7gsLLgsKjgsYAsIOCwuOCwsOCxguCwsOCxjSDgsKjgsJfgsLDgsY0g4LC14LGG4LC44LGN4LCf4LGNLCDgsLjgsK_gsYDgsKbgsL7gsKzgsL7gsKbgsY0sIOCwueCxiOCwpuCwsOCwvuCwrOCwvuCwpuCxjSwg4LCk4LGG4LCy4LCC4LCX4LC-4LCjIDUwMDA1OSwg4LCt4LC-4LCw4LCk4LCm4LGH4LC24LCCImYiZAoUChIJ31l5uGWYyzsR9zY2qk9lDiASFAoSCd9ZebhlmMs7Efc2NqpPZQ4gGhQKEglDz61OZpjLOxHgDJCFY-o1qBoUChIJi37TW2-YyzsRr_uv50r7tdEiCg1MwFcKFS_dyy4
Отправить отзыв
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons «С указанием авторства 4.0», а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2023-04-05 UTC.
Безопасность
Для получения информации о том, как правильно устранять уязвимости Electron, загляни в SECURITY.md.
For upstream Chromium vulnerabilities: Electron keeps up to date with alternating Chromium releases. For more information, see the Electron Release Timelines document.
Preface
As web developers, we usually enjoy the strong security net of the browser — the risks associated with the code we write are relatively small. Наши веб-сайты имеют ограниченные полномочия в песочнице, и мы верим, что пользователи довольны браузером, созданным большой командой инженеров, которая может быстро реагировать на последние обнаруженные угрозы безопасности.
Когда вы работаете в среде Электрон, важно понимать, что это не веб браузер. Электрон позволяет создавать функционально развитые приложения для настольных компьютеров с помощью веб технологий, но ваш код обладает большими возможностями. JavaScript имеет доступ к файловой системе, пользовательским скриптам и т. д. Благодаря этим возможностям вы можете создавать высококачественные нативные приложения, но это так же множит риски увеличивающиеся с дополнительными полномочиями вашего кода.
Учтите что показ произвольного содержимого от недоверенных источников влечет за собой риски безопасности, которые Электрон не предназначен купировать. In fact, the most popular Electron apps (Atom, Slack, Visual Studio Code, etc) display primarily local content (or trusted, secure remote content without Node integration) — if your application executes code from an online source, it is your responsibility to ensure that the code is not malicious.
General guidelines
Security is everyone’s responsibility
Важно помнить, что безопасность вашего Electron приложения является результатом общей безопасности основы платформы (Chromium, Node.js), самого Electron, всех NPM-зависимостей и вашего кода. Поэтому вы обязаны следовать нескольким важным рекомендациям:
- Keep your application up-to-date with the latest Electron framework release. When releasing your product, you’re also shipping a bundle composed of Electron, Chromium shared library and Node.js. Vulnerabilities affecting these components may impact the security of your application. By updating Electron to the latest version, you ensure that critical vulnerabilities (such as nodeIntegration bypasses) are already patched and cannot be exploited in your application. For more information, see «Use a current version of Electron».
- Оцените свои зависимости. В то время как NPM предоставляет полмиллиона многоразовых пакетов, вы несете ответственность за выбор надежных библиотек третьей стороны. If you use outdated libraries affected by known vulnerabilities or rely on poorly maintained code, your application security could be in jeopardy.
- Используйте безопасные методы программирования Первая линия защиты вашей заявки — ваш собственный код. Common web vulnerabilities, such as Cross-Site Scripting (XSS), have a higher security impact on Electron applications hence it is highly recommended to adopt secure software development best practices and perform security testing.
Isolation for untrusted content
Проблемы безопасности возникают всякий раз, когда вы получаете код из ненадежного источника (напр., удаленный сервер) и выполняете его локально. As an example, consider a remote website being displayed inside a default BrowserWindow . If an attacker somehow manages to change said content (either by attacking the source directly, or by sitting between your app and the actual destination), they will be able to execute native code on the user’s machine.
Under no circumstances should you load and execute remote code with Node.js integration enabled. Instead, use only local files (packaged together with your application) to execute Node.js code. To display remote content, use the tag or BrowserView , make sure to disable the nodeIntegration and enable contextIsolation .
Electron security warnings
Security warnings and recommendations are printed to the developer console. They only show up when the binary’s name is Electron, indicating that a developer is currently looking at the console.
Вы можете принудительно включить или выключить эти предупреждения в настройках ELECTRON_ENABLE_SECURITY_WARNINGS или ELECTRON_DISABLE_SECURITY_WARNINGS на любом process.env или объекте window .
Checklist: Security recommendations
You should at least follow these steps to improve the security of your application:
- Загружайте только безопасный контент
- Выключите Node.js интеграцию во всех видах (renderers) показывающих удаленный контент
- Enable context isolation in all renderers
- Enable process sandboxing
- Используйте ses.setPermissionRequestHandler() в сессиях с загрузкой удаленного контента
- Не выключайте webSecurity
- Определите Content-Security-Policy и используйте ограничительные правила (i.e. script-src ‘self’ )
- Не включайте allowRunningInsecureContent
- Не включайте экспериментальные функции
- Не испольхуйте enableBlinkFeatures
- : Не используйте allowpopups
- : Verify options and params
- Disable or limit navigation
- Disable or limit creation of new windows
- Do not use shell.openExternal with untrusted content
- Использовать текущую версию Electron
- Validate the sender of all IPC messages
To automate the detection of misconfigurations and insecure patterns, it is possible to use Electronegativity. For additional details on potential weaknesses and implementation bugs when developing applications using Electron, please refer to this guide for developers and auditors.
1. Загружайте только безопасный контент
Все ресурсы не включенные в ваше приложение должны быть загружены с использованием безопасного протокола HTTPS . Откажитесь от не безопасных протоколов, таких как HTTP . Так же мы рекомендуем WSS over WS , FTPS over FTP , и т. п.
Почему?
HTTPS has two main benefits:
- It ensures data integrity, asserting that the data was not modified while in transit between your application and the host.
- It encrypts the traffic between your user and the destination host, making it more difficult to eavesdrop on the information sent between your app and the host.
Как?
main.js (Main Process)
// Плохо browserWindow.loadURL('http://example.com') // Хорошо browserWindow.loadURL('https://example.com')
index.html (Renderer Process)
script crossorigin src="http://example.com/react.js"> script> link rel="stylesheet" href="http://example.com/style.css"> script crossorigin src="https://example.com/react.js"> script> link rel="stylesheet" href="https://example.com/style.css">
2. Do not enable Node.js integration for remote content
This recommendation is the default behavior in Electron since 5.0.0.
After this, you can grant additional permissions for specific hosts. For example, if you are opening a BrowserWindow pointed at https://example.com/ , you can give that website exactly the abilities it needs, but no more.
Почему?
A cross-site-scripting (XSS) attack is more dangerous if an attacker can jump out of the renderer process and execute code on the user’s computer. Cross-site-scripting attacks are fairly common — and while an issue, their power is usually limited to messing with the website that they are executed on. Disabling Node.js integration helps prevent an XSS from being escalated into a so-called «Remote Code Execution» (RCE) attack.
Как?
main.js (Main Process)
// Bad const mainWindow = new BrowserWindow( webPreferences: contextIsolation: false, nodeIntegration: true, nodeIntegrationInWorker: true > >) mainWindow.loadURL('https://example.com')
main.js (Main Process)
// Good const mainWindow = new BrowserWindow( webPreferences: preload: path.join(app.getAppPath(), 'preload.js') > >) mainWindow.loadURL('https://example.com')
index.html (Renderer Process)
webview nodeIntegration src="page.html">webview> webview src="page.html">webview>
При отключении интеграции с Node.js, можно по-прежнему использовать API на вашем сайте, которые используют модули или функции Node.js. Preload scripts continue to have access to require and other Node.js features, allowing developers to expose a custom API to remotely loaded content via the contextBridge API.
3. Enable Context Isolation
This recommendation is the default behavior in Electron since 12.0.0.
Context isolation is an Electron feature that allows developers to run code in preload scripts and in Electron APIs in a dedicated JavaScript context. In practice, that means that global objects like Array.prototype.push or JSON.parse cannot be modified by scripts running in the renderer process.
Electron uses the same technology as Chromium’s Content Scripts to enable this behavior.
Even when nodeIntegration: false is used, to truly enforce strong isolation and prevent the use of Node primitives contextIsolation must also be used.
For more information on what contextIsolation is and how to enable it please see our dedicated Context Isolation document.
4. Enable process sandboxing
Sandboxing is a Chromium feature that uses the operating system to significantly limit what renderer processes have access to. You should enable the sandbox in all renderers. Loading, reading or processing any untrusted content in an unsandboxed process, including the main process, is not advised.
For more information on what Process Sandboxing is and how to enable it please see our dedicated Process Sandboxing document.
5. Handle session permission requests from remote content
You may have seen permission requests while using Chrome: they pop up whenever the website attempts to use a feature that the user has to manually approve ( like notifications).
The API is based on the Chromium permissions API and implements the same types of permissions.
Почему?
By default, Electron will automatically approve all permission requests unless the developer has manually configured a custom handler. While a solid default, security-conscious developers might want to assume the very opposite.
Как?
main.js (Main Process)
const session > = require('electron') const URL > = require('url') session .fromPartition('some-partition') .setPermissionRequestHandler((webContents, permission, callback) => const parsedUrl = new URL(webContents.getURL()) if (permission === 'notifications') // Approves the permissions request callback(true) > // Verify URL if (parsedUrl.protocol !== 'https:' || parsedUrl.host !== 'example.com') // Denies the permissions request return callback(false) > >)
6. Не выключайте webSecurity
This recommendation is Electron’s default.
You may have already guessed that disabling the webSecurity property on a renderer process ( BrowserWindow , BrowserView , or <webview> ) disables crucial security features.
Do not disable webSecurity in production applications.
Почему?
Disabling webSecurity will disable the same-origin policy and set allowRunningInsecureContent property to true . In other words, it allows the execution of insecure code from different domains.
Как?
main.js (Main Process)
// Bad const mainWindow = new BrowserWindow( webPreferences: webSecurity: false > >)
main.js (Main Process)
// Good const mainWindow = new BrowserWindow()
index.html (Renderer Process)
webview disablewebsecurity src="page.html">webview> webview src="page.html">webview>
7. Define a Content Security Policy
A Content Security Policy (CSP) is an additional layer of protection against cross-site-scripting attacks and data injection attacks. We recommend that they be enabled by any website you load inside Electron.
Почему?
CSP allows the server serving content to restrict and control the resources Electron can load for that given web page. https://example.com should be allowed to load scripts from the origins you defined while scripts from https://evil.attacker.com should not be allowed to run. Defining a CSP is an easy way to improve your application’s security.
Как?
The following CSP will allow Electron to execute scripts from the current website and from apis.example.com .
// Bad Content-Security-Policy: '*' // Good Content-Security-Policy: script-src 'self' https://apis.example.com
CSP HTTP headers
Electron respects the Content-Security-Policy HTTP header which can be set using Electron’s webRequest.onHeadersReceived handler:
main.js (Main Process)
const session > = require('electron') session.defaultSession.webRequest.onHeadersReceived((details, callback) => callback( responseHeaders: . details.responseHeaders, 'Content-Security-Policy': ['default-src \'none\''] > >) >)
CSP meta tag
CSP’s preferred delivery mechanism is an HTTP header. However, it is not possible to use this method when loading a resource using the file:// protocol. It can be useful in some cases to set a policy on a page directly in the markup using a tag:
index.html (Renderer Process)
meta http-equiv="Content-Security-Policy" content="default-src 'none'">