Ошибка в безопасности Oracle повредила более 300 000 платежных систем


Оглавление (нажмите, чтобы открыть):

Ошибка в безопасности Oracle повредила более 300 000 платежных систем

���������� � Thu Nov 06 18:06:22 2014

Thu Nov 06 19:22:33 2014
ALTER DATABASE OPEN RESETLOGS
ORA-1194 signalled during: ALTER DATABASE OPEN RESETLOGS.
Thu Nov 06 19:22:33 2014
Signalling error 1152 for datafile 6!

WARNING! Recovering data file 1 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 2 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 3 from a fuzzy file. If not the current file
it might be an online backup taken without entering the begin backup command.
WARNING! Recovering data file 4 from a fuzzy file. If not the current file

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

startup mount
alter database open resetlogs;

���� ������ ������������������� ����� �� ����� ���, ��� � ��� ����� ����� ����� � ��� ��������� ���� 8 ��� 14, 02:34����[16815422] �������� | ���������� �������� ����������

Re: ���������. Oracle. ���������� SYSTEM.DBF � CONTROLFILE ������� ���. [new]
Ошибка в безопасности Oracle повредила более 300 000 платежных систем

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org, в прошлый раз мы с вами чинили HDD с поврежденной файловой системой и состоянием RAW уверен, что вам удалось это сделать. Сегодня я в очередной раз переведу наш вектор траблшутера в сторону терминальных столов, а именно мы рассмотрим ситуацию, что когда вы пытаетесь подключиться к удаленному серверу по RDP протоколу, а у вас после ввода логина и пароля, выскакивает ошибка, что вы не прошли проверку подлинности и причиной ошибки может быть исправление шифрования CredSSP. Давайте разбираться, что за зверь, этот CredSSP и как вам получить доступ к вашему серверу.

Как выглядит ошибка credssp

Перед тем, как я покажу вам известные мне методы ее устранения, я бы как обычно хотел подробно описать ситуацию. Вчера при попытке подключиться к своему рабочему компьютеру, работающему на Windows 10 1709, с терминального стола, входящего в RDS ферму на Windows Server 2012 R2, я получил ошибку после ввода логина и пароля:

Ну и конечно в русском исполнении:

Получается двоякая ситуация, что RDP как бы работает, но вот по какой-то причине ваши учетные данные на принимающей стороне не соответствуют, каким-то критериям, давайте разбираться, что это за зверь CredSSP.

Назначение CredSSP

Что такое CredSSP — это Win32 API, используемый системами Microsoft Windows для выполнения различных операций, связанных с безопасностью, таких как аутентификация. SSPI функционирует, как общий интерфейс для нескольких поставщиков поддержки безопасности (SSP). Поставщик поддержки безопасности — это библиотека динамической компоновки (DLL), которая делает один или несколько пакетов безопасности доступными для приложений.

C redSSP позволяет приложению делегировать учетные данные пользователя от клиента целевому серверу для удаленной аутентификации. CredSSP предоставляет зашифрованный канал протокола безопасности транспортного уровня . Клиент проходит проверку подлинности по зашифрованному каналу с использованием протокола SPNEGO (Simple and Protected Negotiate) с Microsoft Kerberos или Microsoft NTLM.

После проверки подлинности клиента и сервера клиент передает учетные данные пользователя на сервер. Учетные данные дважды шифруются с использованием ключей сеанса SPNEGO и TLS. CredSSP поддерживает вход в систему на основе пароля, а также вход в систему с использованием смарт-карт на основе X.509 и PKINIT.

Windows SSP

Следующие поставщики общих служб устанавливаются вместе с Windows:

  • NTLM (Представлено в Windows NT 3.51 ) (msv1_0.dll) — обеспечивает проверку подлинности NTLM с запросом/ответом для клиент-серверных доменов до Windows 2000 и для не доменной аутентификации (SMB /CIFS).
  • Kerberos (Представлен в Windows 2000 и обновлен в Windows Vista для поддержки AES ) (kerberos.dll). Предпочтителен для взаимной аутентификации клиент-серверного домена в Windows 2000 и более поздних версиях.
  • Согласование (введено в Windows 2000) (secur32.dll) — выбирает Kerberos и, если не доступно, протокол NTLM. SSP обеспечивает возможность единого входа , иногда называемую встроенной аутентификацией Windows (особенно в контексте IIS). В Windows 7 и более поздних версиях представлен NEGOExts, в котором согласовывается использование установленных пользовательских SSP, которые поддерживаются на клиенте и сервере для аутентификации.
  • Безопасный канал (он же SChannel) — Представлен в Windows 2000 и обновлен в Windows Vista и выше для поддержки более надежного шифрования AES и ECC. Этот поставщик использует записи SSL/TLS для шифрования полезных данных. (Schannel.dll)
  • PCT (устарел) реализация Microsoft TLS/SSL — криптография SSP с открытым ключом, которая обеспечивает шифрование и безопасную связь для аутентификации клиентов и серверов через Интернет. Обновлено в Windows 7 для поддержки TLS 1.2.
  • Digest SSP (Представлено в Windows XP ) (wdigest.dll) — Обеспечивает проверку подлинности HTTP и SASL на основе запросов/ответов между системами Windows и не-Windows, где Kerberos недоступен.
  • Учетные данные (CredSSP) (Представлено в Windows Vista и доступно в Windows XP с пакетом обновления 3 (SP3)) (credssp.dll) — обеспечивает SSO и проверку подлинности на уровне сети для служб удаленных рабочих столов.
  • Аутентификация с распределенным паролем (DPA) — (Представлено в Windows 2000) (msapsspc.dll) — Обеспечивает аутентификацию через Интернет с использованием цифровых сертификатов.
  • Криптография с открытым ключом «пользователь-пользователь» (PKU2U) (представлена ​​в Windows 7 ) (pku2u.dll) — обеспечивает одноранговую аутентификацию с использованием цифровых сертификатов между системами, которые не являются частью домена.

Причины ошибки шифрования CredSSP

В марте 2020 года, компания Microsoft выпустила обновление безопасности для устранения уязвимостей для протокола поставщика поддержки безопасности учетных данных (CredSSP) под именем CVE-2020–0886 (https://support.microsoft.com/en-us/help/4093492/credssp-updates-for-cve-2020-0886-march-13-2020), используемого подключениями по протоколу удаленного рабочего стола (RDP) для клиентов Windows и Windows Server. Как только пользователи и системные администраторы произвели установку апдейтов, то по всему миру начались массовые жалобы, что люди не могут подключаться по протоколу RDP к серверам, компьютерам, получая ошибку, что причиной ошибки может быть шифрование CredSSP.

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

Под раздачу попали буквально все, клиентские ОС Windows 7, Windows 8.1, Windows 10 с которых были попытки подключиться к RDS ферме или RemoteApp приложениям работающим на Windows Server 2008 R2 и выше. Если бы вы читали ветки обсуждений в эти дни, то вы бы поняли все негодование людей, особенно с запада.

Варианты исправления ошибки CredSSP

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

  • Вы можете удалить новое обновление безопасности, самый плохой вариант, но в ответственные моменты, иногда используется, чтобы перенести работы на вечер или ночь
  • Если нужно быстро получить доступ к серверу и избежать проверку подлинности credssp, то я вам советую отключить на принимающем подключении сервере галку NLA (Network Level Authentication) в русском варианте «Разрешить подключение только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети»
  • То же быстрый метод и на массовое применение, это использование групповой политики, которая изменит шифрование Oracle Remediation
  • Ну и самый правильный метод , это установка обновлений на все ваши системы

Отключаем credssp в Windows через NLA

Данный метод выхода из ситуации я бы рассматривал, как быстрое, временное решение, до того, как вы установите обновления безопасности. Чтобы разрешить удаленное подключение к серверу и избегать ситуации, что произошла ошибка при проверке подлинности credssp, сделайте вот что. Откройте свойства моего компьютера, попав в систему, так же можно нажать одновременно WIN+Pause Breake или как вариант в командной строке ввести control /name Microsoft.System. В окне «Система» находим пункт меню «Настройка удаленного доступа»

Снимите галку «Разрешить подключение только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети»

После этого вы легко сможете подключиться к данному компьютеру или серверу, но как быть что вы не можете туда попасть и снять эту галку, тут нам на помощь придет реестр Windows. Вы можете удаленно создать нужные ключи реестра, которые отключат галку NLA или политику CredSSP. Для этого вы можете пойти двумя путями:

  1. Использовать сетевой реестр Windows
  2. Использовать удаленное управление компьютером, например PsExec.exe, я вам с помощью него уже показывал, как открывать порты в брандмауэре, удаленно.

Давайте попробуем через удаленный реестр, для этого открываем Regedit, через окно «Выполнить».

Из меню «Файл» выберите пункт «Подключить сетевой реестр», далее найдите нужный вам сервер.

У вас подключится дополнительный реестр с двумя кустами. Переходите по пути (Если у вас не будет CredSSP\Parameters, то нужно будет их создать):

Тут вам необходимо создать REG_DWORD ключ с именем AllowEncryptionOracle и значением 2. В данном варианте политика CredSSP выставит Уязвимый уровень — это самый низкий уровень защиты. Это позволит вам подключаться к серверам удаленно, используя RDP. Однако это подвергнет серверы атакам.

Или можно так же отключить NLA, для этого найдите ветку реестра:

Найдите там ключ SecurityLayer и выставите ему значение , чтобы деактивировать Network Level Authentication.

Теперь то же самое вы можете выполнить и через PsExec.exe, выставив для CredSSP минимальный уровень защиты или же отключить NLA, для этого находясь в cmd в режиме администратора введите команду:


w10-cl01 — это имя компьютера.

Далее имея запущенный сеанс cmd для удаленного компьютера, выполните команду:

Аналогично можно сделать и для отключения Network Level Authentication, команда будет такой:

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

Отключаем шифрование credssp через GPO

Если у вас большая инфраструктура, в которой сотни компьютеров и сотни серверов, то вы можете до установки нужных обновлений в вечернее время, временно отключить новый уровень шифрования CredSSP и убрать ошибку «Удаленный компьютер имя. Причиной ошибки может быть исправление шифрования CredSSP». Для этого мы можем воспользоваться всеми плюсами доменной инфраструктуры Active Directory. Тут два варианта, вы можете создать массовую политику для распространения ее на нужные OU или если у вас требование для одного или двух локальных компьютеров, то на них можно запустить локальный редактор групповых политик, тем самым внеся изменения только на них.

Напоминаю, что оснастку управление групповой политикой вы можете найти на контроллере домена или компьютере с установленным пакетом RSAT, открыть ее можно через команду в окне «Выполнить» gpmc.msc. Если нужно открыть локальный редактор групповых политик, то в окне «Выполнить» введите gpedit.msc.

Вам необходимо перейти в ветку:

Открываем настройку «Исправление уязвимости шифрующего оракула (Encryption Oracle Remediation)». Включаем политику, у вас активируется опция «Уровень защиты», на выбор будет три варианта:

  • Принудительно применять обновленные клиенты (Force Updated Clients) — она будет стоять по умолчанию из-за максимального уровня защиты, вам данную опцию нужно сменить. Это так сказать максимально безопасный уровень взаимодействия клиент, он должен быть в идеале, после установки обновлений на все сервера и компьютеры.
  • Оставить уязвимость (Vulnerable) – клиенты могут подключаться на уязвимые машины.
  • Уменьшить риск (Mitigated) – клиенты не могут подключаться к уязвимым серверам, но серверы могут принимать уязвимые клиенты.

Выбираем на время пункт «Оставить уязвимость (Vulnerable)». Сохраняем настройки.

После чего вам нужно обновить политику, для этого откройте командную строку и введите gpupdate /force. Если у вас не доменный компьютер, да и еще Windows 10 Home, которая не имеет встроенного локального редактора политик, то вам как я описывал выше, нужно производить правку реестра

На просторах интернета ходит скрипт PowerShell, который поможет включить данную политику на всех компьютерах в Active Directory

Import-Module ActiveDirectory
$PSs = (Get-ADComputer -Filter *).DNSHostName
Foreach ($computer in $PCs) <
Invoke-Command -ComputerName $computer -ScriptBlock <
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters /v AllowEncryptionOracle /t REG_DWORD /d 2
>
>

Самый правильный метод, это установка обновлений

Когда вам удалось везде подключиться и подошло время обслуживания ваших серверов, быстренько производим установку обновлений закрывающих брешь (CVE-2020-0886 | CredSSP Remote Code Execution Vulnerability).

Раньше были вот такие KB, но они со временем могут меняться свой номер, поэтому пройдите по ссылке выше, так будет надежнее.

  • Windows Server 2012 R2 / Windows 8: KB4103715
  • Windows Server 2008 R2 / Windows 7: KB4103712
  • Windows Server 2020 / Windows 10 1607 — KB4103723
  • Windows Server 2020 / Windows 10 1703 — KB4103731
  • Windows Server 2020 / Windows 10 1709 — KB4103727
  • Windows Server 2020 / Windows 10 1803 — KB4103721

После остановки, база не запускается

17.05.2013, 13:30

нужна помощь в подборе замены компрессора, Samsung RL34ECMS после остановки мотор не запускается
всем доброго здравия. поступил в ремонт Samsung RL34ECMS после первого включения компрессор.

Не запускается BIOS после включения, запускается после 4-5 минут работы системника
ПК 6 лет, от пыли чищу. Недавно стал плохо включаться, сначала просто все стало долго. Потом при.

Определите, на каких маршрутах можно добраться от остановки X до остановки Y
Я новичок в прологе. Пытаюсь что-то сделать, но ничего не компилится) Скоро сдавать. Задание.

Вернуться в терминал после остановки dm
Добрый день! есть debian 7, установленный без иксов. цель — докрутить к нему иксы, отключенные.

Не сохраняются данные в бд после остановки приложения
Есть локальная бд, и интерфейс с cвязанной таблицей datagridview. Добавляю строки с помощью insert.

17.05.2013, 14:17 2
17.05.2013, 14:24 [ТС] 3
17.05.2013, 15:21 4

1. Не понял. Обычно startup и shutdown выполняются из SQL*Plus

2. в listener.ora добавь описание своей БД (можно через Net Manager)

17.05.2013, 15:21
21.05.2013, 10:30 [ТС] 5
21.05.2013, 10:42 6
21.05.2013, 12:28 [ТС] 7

C:\Documents and Settings\admin>sqlplus

SQL*Plus: Release 10.2.0.1.0 — Production on ┬Є ╠рщ 21 12:12:42 2013

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Enter user-name: *******
Enter password: ********

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 — Production

SQL> conn sys/oracle@xe as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
SQL>

Вернуть деньги на карту при ошибке платежа

Причины возвратного платежа (chargeback)


  • если картодержатель «не узнает» транзакцию;
  • если списанная сумма больше суммы оплаты покупки;
  • деньги списаны повторно;
  • если потребитель вернул товар, но деньги на его счет не поступили.

Возвратный платеж — процедура опротестования транзакции банком-эмитентом (в целях защиты прав плательщика), при которой сумма платежа безакцептно списывается с получателя (банка-эквайера) и возвращается плательщику, после чего обязанность доказательства истинности транзакции возлагается на получателя. Технология возврата платежа используется в системах взаиморасчетов по пластиковым картам.

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

Неавторизованный платеж

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

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

Мошенничество в платежных системах

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

Спор плательщика с магазином или комнанией оказывающей услуги начинается, когда он не получил услугу (товар) или же услуга (товар) ненадлежащего качества. Главная сложность состоит в необходимости доказать факт неудовлетворительного качества товара или услуги или факт их неполучения. Обычно это сделать не получается: эквайер обращается к продавцу, тот уверяет, что выполнил абсолютно все свои обязательства, эквайринговая организация отбивает чарджбэк, и арбитраж решает спорную ситуацию в пользу эквайера, поскольку нет веских доказательств. Успеха можно добиться, если продавец по своей воле или на основе требований ФЗ «О правах потребителей» возвращает средства. Старайтесь сохранять все документы по сделке, когда оплачиваете товар или услугу пластиковой картой.

Ошибки в обработке платежей с карты

Ошибки в обработке платежей случаются, причем они бывают довольно неприятными – допустим, у банков иногда задваивается клиринг, и оплата покупателя может внезапно повториться. Данная проблема тоже решается с применением chargeback. «При обнаружении расхождений между транзакциями, указанными в выписке, и реально произведенными транзакциями клиент всегда имеет возможность обратиться в банк за разъяснениями или для подачи заявления, – рассказал Андрей Борискин, являющийся главой департамента розничного сегмента в Росгосстрах Банке. – Наиболее часто картодержатели оспаривают транзакции неполучения денег в банкомате, неполучение товаров и двойное процессирование операции».

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

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

Возвратный платеж (chargeback) в международных платежных системах.

Покупатель, обманутый магазином, либо путешественник, нечестно оштрафованный гостиницей за испорченное имущество, иногда могут вернуть свои денежные средства. Далее – о применении процедуры возвратного платежа (chargeback) в международных платежных системах.

Что называют chargeback?

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

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

Как было сообщено в MasterCard, «банковская карта – уникальный платежный инструмент, в том числе и по той причине, что благодаря ей держатели карт могут не только оплачивать товары и услуги, обладают высокой степенью защищенности своих денежных средств. Также держатель карты может опротестовать операции во многих случаях: если операцию не провели, если ее обработали некорректным образом (допустим, списали средства в двойном размере), либо если оплаченную картой услугу фактически не предоставили. С этой целью платежной системой предоставляются своим клиентам (учреждениям) разные виды инструментов, таких, допустим, как процедура chargeback: чтобы клиентами (держателями карт) могли быть защищены их интересы в случае возникновения указанных выше спорных ситуаций.

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

При получении от клиента заявления на возврат уплаченных денег, банком проводится оценка возможности возврата платежа в рамках МПС. По каким-то заявлениям банк должен возместить денежные средства, исходя из положений статьи 9 161-ВЗ, а по каким-то – нет. Но решение о начале процедуры в любом случае всегда вопрос индивидуальный.

Максимальный срок, в который после совершения платежа, может быть подано заявление, устанавливается банком в соглашении с клиентом. При этом не стоит забывать, что даже при нарушении этого срока Ваше заявление должно быть рассмотрено банком (по 161-ФЗ), а правилами Visa и MasterCard подразумеваются довольно приличные сроки для отправки chargeback. Чаще всего это 120 дней. В такой ситуации банком может быть отправлено требование возвратить платеж, и Вы обладаете всеми шансами на получение своих денег назад.

Процедура выглядит примерно так: банком-эмитентом отправляется требование о возвратном платеже. Следует его рассмотрение эквайером. Если он решает, что требование обоснованно, производится выплата и взыскание средств с предприятия, чьи действия привели к такому платежу. Если же эквайзер отказывает в признании требования обоснованным, им выставляется ответное представление. Если эмитентом снова направляется требование о возвратном платеже, им снова отправляется chargeback – смысл есть, если, допустим, за это время были собраны доказательства отсутствия оказания оплаченной услуги. После второго chargeback стартует процедура арбитража, в дело вступает платежная система и разрешает спор согласно правилам.

Теперь о максимальных сроках, в которые осуществляется прохождение процедуры на примере MasterCard. После того, как заказан товар или услуга, средства могут списываться до 30 дней. Подача заявления на возвратный платеж возможна в срок вплоть до 120 дней после всего. Эквайером может быть отбит chargeback в течение 45-ти дней. Повторно отправить chargeback можно за 45 дней, на арбитраж у платежной системы может уйти еще 45 дней. Это примерно около 285 дней с того момента, как была совершена оплата.

Случаи возврата

«Обращение в банк обладает смыслом во всех ситуациях, когда у клиента при получении выписки возникают вопросы по списанной со счета сумме, — говорится заместителем руководителя блока операционного сопровождения Бинбанка, Игорем Новожиловым. – Например, если клиентом «не признается» операция, если списали больше, чем нужно, если сумму списано повторно, если клиентом возвращен товар без поступления суммы на его счет».

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

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

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

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

Начало спора плательщика с торговой точкой возможно тогда, когда плательщику не предоставляют оплаченный товар либо услугу. Здесь основной трудностью считается доказательство факта неполучения товара либо услуги. Чаще всего это нереально сделать: эквайер составляет обращение к торговцу, а последний говорит о полном выполнении своих обязательств. Эквайером отбивается платеж, арбитраж принимает сторону эквайера – так как отсутствуют веские доказательства.

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

«Если обнаруживаются расхождения между указанными в выписке операциями, и практически осуществленными, у клиента всегда есть право на обращение в банк, который должен разъяснить ситуацию, — сообщается директором департамента розничного бизнеса Росгосстрах Банка, Андреем Борискиным. – Очень часто клиентами оспариваются операции невыдачи средств в банкомате (как этот избежать читайте здесь), двойные трансакции и неполучение услуг».

Теперь о Ваших доказательствах

Для того, чтобы были шансы на хорошее завершение, к подаче заявления на возвратный платеж должен прилагаться пакет документов. В зависимости от определенных условий это может быть копия слипа – ее держатель карты может получить при оплате в магазине. Также это могут быть разные трансакционные данные.

Чаще всего должно присутствовать подтверждение того, что держателем карты осуществлялась попытка урегулирования спора конкретно с получившим оплату учреждением, но успех не был достигнут. В такой ситуации не требуется приложение юридически значимых доказательств. Достаточно приложения электронной переписки либо просто сообщить в заявлении: «Я им звонил, но никто не дал мне никакого ответа». Если отсутствуют такие доказательства, эквайером точно будет отбит платеж.

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

Вторая ситуация случается, если есть перенос ответственности. Здесь также все просто. Если держателем предъявляется карта, оснащенная EMV-чипом, а эквайером она принимается по магнитной полосе (допустим, если у терминала отсутствует считыватель чипов), — ответственен полностью эквайер, он должен вернуть деньги при получении chargeback. Тоже самое и с платежами посредством Интернета (CNP), если эмитентом поддерживается технология 3D Secure, а эквайером нет, то платеж должен быть возвращен по требованию.


«Направление такого запроса имеет смысл, если есть реальные основания для получения от платежной системы средств, которые были списаны с карты нашего держателя из-за ошибки либо мошеннических действий, — рассказывается Юрием Божором, вице-президентом, начальником управления пластиковых карт банка «Открытие». – Допустим, если банковская карта подверглась атаке на сайте, который не поддерживает технологию 3DSecure – получение возмещения от учреждения-эквайера можно практически на 100%. Происхождение аналогичной ситуации возможно в случае прохождения операции снятия средств в банкомате по чиповой российской карте, при этом устройство для чтения чипа на нем отсутствовало. С иной стороны, если мошенники узнали данные карты от самого клиента (а также разовые пароли), направление в платежную систему запроса Chargeback является бессмысленным».

Начальником операционного управления Райффайзенбанка, Натальей Воеводиной, утверждается, что «подача заявления имеет смысл в случае банкротства компании и наличия у человека документов, подтверждающих обязанность этой фирмы предоставить услуги. В подобных ситуациях успешно оспорить операцию можно, вероятность фактически 100%-ая».

Как было сообщено Тинькофф Банком, «у клиентов есть возможность использования этой процедуры в таких ситуациях, как: отличие стоимости покупки от суммы операции по карте»; повторное списание денежных средств за одну и ту же операцию; мошеннические действия, списание денег с карты клиенты за несовершенную им покупку.

Есть шанс и в ситуациях с регулярными платежами: с карты клиента списывают деньги по подписке после отмены клиентом этой подписки; либо если подписка подключена клиенту без определенного уведомления.

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

Отдельная категория – это происхождение следующих случаев: списание за no-show (допустим, если отелем снимаются деньги с клиента за незаезд); дополнительные списания (допустим, при аренде автомобиля: клиентом была использована услуга, после он уехал, а через некоторое время компанией по прокату автомобилей были списаны деньги за повреждения); клиентом получена неполная сумма при снятии денег в банкомате или не получены наличные вовсе».

Ошибка подключения к платежной системе.

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

Аналогичная ситуация с БК MelBet (как я понимаю они связаны с 1xбет, т.к. в WM деньги, зашедшие от MelBet имеют значок ID 1xбет…). Вывод на банковскую карту (единственную, привязанную к игровому счету) не осуществляется, хотя пополнение проходит. На обращение отвечают: техническая проблема со стороны платежной системы, ожидайте или воспользуетесь другим способом. Попробовал вывести на WM, все прошло нормально. С 1xбет действительно все заработало. Территориально нахожусь в Украине, валюта: гривна. Что делать? Ждать? Осуществлять движение по счету через WM?

Евгений Лебедев , жди))

Все заработало, зря ток на ВМ закидывал часть ��
Не знаю как будет дальше у них, но чето стремно стало теперь тут.

Та же ситуация , с горем пополам дали вывести на ВМ сумму последнего пополнения. А на визу уже 5й день никак.

У меня та же самая проблема

Олександр Рубио , сколько дней уже прошло?

Сергей Котов , уже как 3 день…
Вы с какой страны ?счет в какой валюте ?

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

Здравствуйте, Сергей.
Пополняли этой же картой? Что отвечает служба поддержки БК?

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

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

Ошибка в безопасности Oracle повредила более 300 000 платежных систем

По Вашему запросу ничего не найдено.

Программа регулярных критических исправлений

Основным механизмом для исправления уязвимостей в старых версиях продуктов Oracle являются ежеквартальные критические обновления (CPU). Критические обновления выходят в дни, объявленные на год раньше, и публикуются на странице Критические обновления и уведомления системы безопасности. Обновления устраняют значительные уязвимости системы безопасности, а также включают необходимые исправления кода.

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

Программа уведомлений системы безопасности

В виде уведомления системы безопасности выходит одно исправление уязвимости или небольшое количество исправлений. Вплоть до августа 2004 г. уведомления безопасности были основным механизмом выпуска исправлений. В январе 2005 г. компания Oracle начала выпуск исправлений на регулярной основе через программу критических исправлений.

Oracle может выпустить уведомление безопасности в случае специфической или особо опасной угрозы для заказчиков. В этом случае клиенты получат сообщение об уведомлении безопасности по электронной почте через портал My Oracle Support и сеть Oracle Technology Network. Исправление, включенное в уведомление безопасности, также войдет в следующее критическое исправление.

Накопительные и разовые обновления

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

Исправления для остальных продуктов выпускаются в виде одноразовых обновлений. Для таких продуктов необходимо сверяться с примечаниями к выпускам предыдущих CPU, чтобы найти все необходимые исправления.

Объявление о выпуске исправлений безопасности

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

1. Программа предоставления по запросу. Oracle не выпускает исправления систематически для определенных комбинаций платформ и версий продуктов, исправления к которым редко загружаются клиентами. Такие исправления выпускаются по запросу клиентов. Программа предоставления по запросу и процесс отправки запросов на такие исправления для недавних или будущих критических обновлений подробно описаны в документе о доступных исправлениях, который сопровождает каждый выпуск критических обновлений.

2. Возможны незначительные задержки в доступности исправлений до двух недель с даты объявления, как правило, вследствие технических проблем в процессе создания или тестирования исправлений.

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

Исправления безопасности и наборы исправлений

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

Порядок исправления уязвимостей системы безопасности

Чтобы обеспечить максимальный уровень безопасности всем своим клиентам, Oracle исправляет значительные уязвимости системы безопасности в зависимости от потенциального риска. Таким образом, в первую очередь устраняются проблемы, представляющие самый серьезный риск. Исправления для уязвимостей системы безопасности выпускаются в следующем порядке.

  • Сначала основной код — то есть код, который разрабатывается для следующего официального выпуска продукта.
  • Для каждой поддерживаемой версии, подверженной уязвимости:
    • Исправление в следующем наборе заплаток, если для данной поддерживаемой версии планируется другой набор заплаток.
    • Создание критического исправления (CPU)

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


Важное замечание. Напоминаем, что Oracle рекомендует клиентам критические обновления в качестве основного способа поддержки актуальности исправлений безопасности для всех подверженных риску продуктов, поскольку критические обновления выходят чаще, чем наборы исправлений или новые выпуски продуктов.

Документация по критическим обновлениям

Основной документ каждого критического обновления содержит рекомендации по применению. В рекомендациях перечислены затронутые продукты и приведена матрица рисков для каждого набора продуктов.

Матрицы рисков

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

Общая система оценки уязвимостей (CVSS)

В октябре 2006 г. компания Oracle перешла с собственного метода обозначения относительной серьезности уязвимостей в матрицах рисков на Общую систему оценки уязвимостей (CVSS). Веб-сайт FIRST описывает CVSS как систему оценки, которая предоставляет открытую и стандартизированную шкалу серьезности для уязвимостей программного обеспечения. Система CVSS является универсальным методом оценки серьезности уязвимостей. Для каждой уязвимости, исправленной в критическом обновлении, Oracle предоставляет значения метрик CVSS, которые показывают предварительные условия, необходимые для эксплуатации уязвимости, и простоту эксплуатации, а также влияние успешной атаки на конфиденциальность, целостность и доступность (CIA) целевой системы. В системе CVSS используется специальная формула для преобразования этой информации в базовую оценку от 0,0 до 10,0, где 10,0 представляет максимальную степень серьезности. Порядок уязвимостей в матрицах рисков основан на базовой оценке CVSS, и самая серьезная уязвимость указывается первой. Версия 3.0 стандарта CVSS была принята Oracle в апреле 2020 г. и используется в настоящее время. В разделе Использование общей системы оценки уязвимостей (CVSS) компанией Oracle приведено подробное объяснение, как оценки по системе CVSS применяются в рекомендациях Oracle по устранению рисков.

Распространенные уязвимости и риски (CVE)

Oracle использует номера распространенных уязвимостей и рисков (CVE) для идентификации уязвимостей, перечисленных в матрицах рисков в сопроводительной документации к критическим обновлениям и уведомлениям безопасности. Номера CVE представляют собой уникальные общие идентификаторы для опубликованной информации об уязвимостях. Программа CVE финансируется Национальным управлением кибербезопасности и коммуникаций при министерстве внутренней безопасности США и управляется корпорацией MITRE. Компания Oracle имеет статус CVE Numbering Authority (CNA), то есть может присваивать номера CVE уязвимостям в своих продуктах. Обратите внимание, что порядок номеров CVE в рекомендациях по применению исправлений Oracle может не соответствовать времени обнаружения данных уязвимостей. Другими словами, номера CVE не обязательно присваиваются в порядке обнаружения уязвимостей, к которым выпущены исправления. Это происходит, потому что организации CNA, такие как Oracle, периодически получают наборы номеров CVE от MITRE, поэтому нет необходимости запрашивать новый номер при каждом обнаружении уязвимости. Номера CVE последовательно присваиваются уязвимостям компанией Oracle из пула полученных номеров CVE примерно за 3–4 недели до запланированного выпуска исправления через программу критических обновлений.

Краткое описание

Чтобы помочь компаниям быстро оценивать серьезность потенциальных проблем безопасности, исправленных в CPU, Oracle предоставляет краткое описание, содержащее общий обзор уязвимостей в каждом продукте, которые устраняются в данном критическом исправлении. В этом обзоре простым языком описываются уязвимости, устраняемые в критическом исправлении.

Предварительное объявление о выпуске критического обновления

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

  • Названия и номера версий продуктов Oracle, подверженных новым уязвимостям, которые исправлены в данном критическом обновлении.
  • Количество исправлений безопасности для каждого набора продуктов.
  • Самую высокую оценку по базовым метрикам CVSS для каждого набора продуктов.
  • И потенциально любую другую информацию, которая поможет организациям подготовиться к применению критического обновления в своей среде.

Хотя Oracle гарантирует максимальную точность сведений в предварительном объявлении на момент публикации, фактическое содержимое критического обновления может измениться в момент выхода объявления. Поэтому сопроводительную документацию к критическому обновлению следует рассматривать как единственное точное описание его содержимого.

Ошибка при подключении по RDP (CreedSSP encryption oracle remediation)

8 мая 2020 года компания Microsoft выпустила новое обновление устраняющее уязвимость в удалённом выполнении кода в незакрепленных версиях CredSSP (поставщик проверки подлинности, который обрабатывает запросы проверки подлинности для других приложений). Злоумышленники, использующие эту уязвимость, могли передавать данные пользователя для выполнения кода в целевой системе, включая установку и удаление произвольного программного обеспечения, удаление или изменение данных на сервере, создание учётных записей с любыми правами. При этом, после обновления, многие пользователи, при попытке подключения к удалённому рабочему столу, столкнулись с ошибкой «CredSSP encryption oracle remediation»:

На самом деле это не является ошибкой, это является уведомлением о проблеме безопасности давно не обновлённого сервера.

Microsoft отреагировала на уязвимость и приступила к устранению проблемы, поделив шаги на 3 этапа.

Результат первого этапа – обновление от 13 марта 2020 года, для CredSSP и RDP, которое закрывает дыру в безопасности и добавляет новый пункт в групповые политики.

Результат второго этапа – обновление от 17 апреля 2020 года, которое предупреждает о небезопасном соединении, если у сервера или клиента будет уязвимые CredSSP или RDP.

Результат третьего этапа – как раз обновление от 8 мая 2020 г.

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

Откройте редактор групповых политик — запустите «Выполнить» (нажав клавишу Win + R) и в диалоговом окне наберите «gpedit.msc» или найдите его через поиск на вашем компьютере набрав «Edit group policy» (Изменение групповой политики).

Политика должна располагаться по пути:

Computer Configuration -> Administrative Templates -> System -> Credentials Delegation -> Encryption Oracle Remediation

Конфигурация компьютера -> Административные шаблоны -> Система -> Передача учётных данных -> Исправление уязвимости шифрующего оракула

Политика имеет 3 опции:

1. Vulnerable (оставить уязвимость) – клиенты смогут подключаться как раньше, не зависимо от того, пропатчены они или нет. Это уязвимый уровень безопасности.

2. Mitigated (уменьшить риск) – клиенты не смогут подключаться к непропатченым серверам, в свою очередь серверы смогут принимать непропатченных клиентов. Средний уровень безопасности.

3. Force Updated Clients (принудительно принимать обновленные клиенты) – безопасный уровень взаимодействия клиентов – соединение установлено не будет, если один из пары клиент-сервер имеет не пропатченный RDP.

Необходимо включить политику, выбрав «Enabled» (Включено) и установить значение параметра в выпадающем списке на «Vulnerable» (Оставить уязвимость).

После проделанных действий, Вы сможете подключаться к серверу также, как и раньше.

Как только вы подключились к серверу, установите последние обновления Windows. Если возникает ошибка, при попытке установки обновления, проверьте запущена ли служба «Windows Update» (Центр обновления Windows).

Служба располагается по пути:

Start -> Control Panel -> Administrative Tools -> Services

Пуск -> Панель управления -> Администрирование -> Службы

Если служба не запускается, проверьте, разрешён ли её запуск – статус не должен быть «Disabled» (Отключена).

Для Windows Server 2008 R2 SP1 или Windows Server 2012 R2 мы можете установить не все обновления, а только одно, которое устраняет эту уязвимость, сокращая время на решение проблемы подключения к серверу.

Скачать обновление можно с сайта Microsoft на странице описания уязвимости ( https://portal.msrc.microsoft.com/en-us/security-guidance/ad. ):

После того, как сервер будет обновлен, необходимо в политике «Encryption Oracle Remediation» (Исправление уязвимости шифрующего оракула) будет изменить опцию с Vulnerable (оставить уязвимость), на Force Updated Clients (принудительно принимать обновленные клиенты), но в этом случае все клиенты должны быть так же обновлены или на Mitigated (уменьшить риск), что даст возможность подключаться к серверу непропатченным клиентам.

Все образы операционных систем Windows Server, предлагаемые облачными сервисами МАРС Телеком, содержат все последние обновления и после создания нового или пересоздания сервера проблем подключения к нему с ошибкой «CredSSP encryption oracle remediation» уже не будет.

Найдены возможные дубликаты


Пикабу становится источником информации лучшем чем Microsoft Support.

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

Согласен. Правда, от Wannacry тоже заплату выпустили задолго до эпидемии %>

Нужно от имени одмина запустить cmd и выполнить следующее:

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters /v AllowEncryptionOracle /t REG_DWORD /d 2

ябстественно это делается не на сервере, а на клиентской машине

Reboot можно заменить gpupdate

и без этого работает.

Большое спасибо, а то пара человек запилила уже, спасибо мил человек, поставил бы больше плюсов если бы мог

Чувак! Спасибо. Сэкономил кучу времени. Дополню, что в русской локали все не так очевидно

Такая ошибка возникает на старых версиях Windows, на Windows 8.1 или Windows Server, начиная с R2 ошибка выглядит как на скриншоте в статье.

У меня 2012 R2 Standart.

Русская локаль на серверной стороне – удел искателей приключений на пятую точку. Одумайтесь.

Капец. Сегодня столкнулся с этой фигней. Предыдущий админ обновления на серваке не включил. Пришлось отдельно качать. Но приятно что я эту инфу увидел на Пикабу. Респект.

На Хабре вчера писали.

Что-то много одинаковых скриншотов и похожего текста. Только название компании поменяли.

А вы таки надеялись на оригинальный контент под тегом «моё»?

Что, я настолько наивен?

это только для Windows Server?

Если нет возможности обновить сервер или сменить его настройки — можно удалить обновление на компе https://youtu.be/UoXaTx05INI

Работает 100% для WinServ2012

gpedit.msc / computer configuration / administrative templates / windows component / remote desktop services / remote desktop session host / security

«require user autentification for remote connection» -> DISABLED

Спасибо Автор, помогло =) Был рад найти ответ на свой вопрос на пикабу ) А то думаю что за фигня. Обновы накатил, теперь уже все пучком ) Вернул все в зад ))

Спасибо, добрый человек.

Обновите систему. На костылях далеко не убежишь. Ботнет уже варежки вяжет на ваших ПК.

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

Вылезла проблема в одном из отдела, обнову удалил. Щас попробую ваш вариант.

во отлично все, круто, 100500 плюсов

прям выручил человечище

Дай тебе Бог здоровья.

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

У пользователей Windows 10 Home (Windows 10 Домашняя), политика Encryption Oracle Remediation (Исправление уязвимости шифрующего оракула) отсутствует. Для подключения пропатченного клиента к непропатченному серверу необходимо политику добавить в реестр вручную. Сделать это можно так:

Запустить от имени администратора командную строку или Windows PowerShell;

Ввести «REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters /v AllowEncryptionOracle /t REG_DWORD /d 2»;

На технете, этой инфы нет.

Тоже столкнулся вчера. Пока удалил обнову с клиента, сервер решил обновить на выходных. Спасибо за подробную инструкцию, сохранил.

Спасибо, добрый человек. Утром видел ваш пост, сел поработать сейчас, и бах, эта ошибка)

@Rastov , бро! Спасибо тебе, мы как — то упустили этот патч. Кучу времени нам спас!

https://habr.com/company/vps_house/blog/358190/ оригинал был на хабре еще ночью, странно откуда тег мое)

Полдня потратил на решение проблемы, и никак, нашел данную статью сделал на своем компе, но не помогло (правда не перезагружал). И в этот момент обновлялся сам сервер, перезагрузил сервер и все заработало как было.

Столкнулся сегодня. Временно решил отключением проверки подлинности на уровне сети.

Проверку подлинности на уровне сети отключать не стоит, это совсем-совсем-совсем не безопасно.


Поэтому я и написал — «временно», пока не разобрался в чем дело.

Косяк как раз в несвоевременной установке обновлений на сервера. необходимое обновление закрывающее уязвимость было опубликовано 10 апреля 2020 г. — KB4093123 (ежемесячный накопительный пакет). Обновляйтесь своевременно!

Впрочем, я сам немного проебал момент: установил, но перезагрузить терминал не успел.

Править настройки клиентов — допустить эксплуатацию уязвимости.

О сообществе

Данное сообщество будет направленно на:

1. Аккумуляцию информации о самых актуальных проблемах информационной безопасности возникающих в настоящем времени и возможных в будущем,

2. Доведение до подписчиков новостей из мира ИБ.

3. Обучению основам информационных технологий в тематических постах.

Задача сообщества — помогать распространению знаний в сфере ИБ и делиться опытом. Также тут найдется место немного для веселья и описания курьезных ситуаций.

Помните, что Ваша точка зрения принципиально не может быть единственно верной и что особенно важно — принципиально не может быть применена ко всем ситуациям. Уважайте себя и других, будьте ответственными и объективными.

Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.

По решению модератора или администратора сообщества пользователь будет забанен за:

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

2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.

3. За обвинение в киберпреступной деятельности.

Архитектура платежной системы. Банальности, проверенные опытом

Главное в платежной системе — взять денежки, перевести записи из одной таблички в ту же самую табличку со знаком «минус». Звучит не очень сложно, пока не пришли юристы. Платежные системы во всем мире облагаются огромным количеством всевозможных отягощений и указаний. Поэтому в рамках разработки платежной системы приходится все время балансировать на грани между тяжелым enterprise и вполне нормальным масштабируемым web-приложением.

Под катом рассказ Филиппа Дельгядо (dph) на Highload++ про опыт, накопившийся за несколько лет работы над платежной системой для российского легального букмекерского бизнеса, про ошибки, но и про некоторые достижения, и про то, как грамотно смешать, но не взбалтывать, web с enterprise.

О спикере: Филипп Дельгядо за свою карьеру чем только не занимался — от двузвенок на
Visual Basic до хардкорного SQL. В последние годы в основном занимается нагруженными проектами на Java и регулярно делится своим опытом на разных конференциях.

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

Мы — это довольно маленькая команда: 10 программистов, в основном это бэкенд-раработчики и только два человека на фронтэнде, четверо QA и я, и плюс какой-то менеджмент. Поскольку команда маленькая, денег не очень много, особенно в начале.

Платежная система

Вообще, платежная система — это очень просто: взять денежки, перевести записи из одной таблички в ту же самую табличку со знаком «минус» — в общем-то и всё!

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

От enterprise у нас следующее.

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

Мы являемся НКО (небанковской кредитной организацией).
Это практически банк, только кредиты не можем выдавать.

  • У нас отчетность перед Центробанком;
  • У нас отчетность перед Финмониторингом;
  • У нас много коллег в банковской части компании и с банковским опытом;
  • Мы вынужденно взаимодействуем с автоматизированной банковской системой.

У нас есть юристы. Вот часть законов, которые регулируют поведение платежных систем в данный момент в Российской Федерации:

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

При этом, кроме того, что мы такой чистый enterprise, почти банк, мы при этом еще вполне себе web-компания.

  • Для нас принципиально удобство пользователя, потому что рынок высококонкурентный, и если мы не будем заботиться о нашем пользователе, он от нас уйдет и денег у нас не будет совсем.
  • Мы вынуждены делать частые выкладки, потому что бизнес активно развивается. Сейчас у нас релизы 23 раза в неделю, что гораздо чаще, чем у крупных банков, где, говорят, недавно наконец начали делать релизы один раз в 3 месяца и очень этим гордятся.
  • Минимальный time-to-market: как только пришла какая-то идея, нужно как можно быстрее ее запустить в реальную жизнь — желательно быстрее, чем конкуренты.
  • У нас не очень много денег в отличие от многих крупных банков. Взять и залить все деньгами нам не удается, приходится как-то выкручиваться, принимать какие-то решения.

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

Я знаю только три базы данных, с которыми можно делать платежную систему, но одна из них очень дорогая, для второй трудно найти поддержку и она тоже не бесплатная. В итоге PostgreSQL для нас — самый оптимальный вариант: легко найти вменяемую поддержку, и в общем-то за небольшие деньги можно вообще не думать о том, что происходит с базами данных: у вас все чистенько, красивенько и гарантированно.

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

Разумеется, сервисная архитектура. Микросервисами это назвать категорически нельзя. Микросервис в моем понимании — это то, что проще переписать, чем разбираться и рефакторить. Поэтому у нас, разумеется, не микросервис, а нормальные полноценные большие компоненты.

Кроме того, Redis для кэширования, Angular для внутренней кухни. Основной сайт, видимый пользователю у нас сделан на чистом HTML+CSS с минимумом JS.

И понятное дело, Kafka.

Сервисы

Конечно, я предпочел бы жить без сервисов. Был бы один большой монолит, никаких проблем со связностью, никаких проблем с версионированием: взял, написал, выложил. Все просто.

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

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


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

И главный для нас принцип выделения чего-то в отдельный сервис — если можно придумать очевидное имя для этого самого сервиса.

«Процессинг» или «Отчеты» — это более-менее нормальное имя, «Фигня, которая работает с репликой базы данных» — это уже плохое имя. Явно это не один сервис — либо несколько, либо часть одного большого.

Четырех этих требований нам совершенно достаточно для выделения отдельных
сервисов.

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

Сами сервисы взаимодействуют через JSON RPC по http(s), как в любом web-мире. При этом для каждого сервиса прописывается отдельная логика повторов запросов и кэширования результатов. В результате даже при падении какого-либо сервиса вся система продолжает нормально работать, а пользователь ничего не замечает.

Компоненты

Kafka

Это не очередь сообщения, Kafka у нас — это только транспортный уровень между сервисами, с гарантией доставки и понятной надежностью/кластеризацией. Т.е. если из сервиса А в сервис В надо что-то переслать, проще положить сообщение в Kafkу, из Kafkи сервис сам заберет, что надо. И тогда можно и не думать обо всей этой логике для повторов и кэширования, Kafka сильно упрощает такое взаимодействие. Сейчас мы пытаемся как можно больше всего переводить на Kafka, это тоже такой непрерывный процесс.

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

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

Вообще, для платежных систем иметь два независимых хранилища данных — это стандартная практика, без нее жить просто страшно — мне, например.

Логи разработки

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

Мониторинг

Мониторинг у нас на Prometheus + Grafana. Честно говоря, Prometheu’ом я недоволен.

В чем проблема?

  1. Prometheus прекрасен, когда вам надо собирать из готовых стандартных компонентов какие-то данные, и у вас этих компонентов очень много. У нас довольно мало машин. У нас 40 разных сервисов и это примерно 150 виртуалок, это не очень много. Если же мы хотим собирать через Prometheus, какую-то бизнес-мониторинговую информацию, например количество платежей, идущих через определенный шлюз, или количество событий в нашей внутренней очереди, то приходится писать довольно много кода на стороне клиента. Причем код, к сожалению, не очень простой, разработчикам приходится активно разбираться во внутренней логике и том, как именно Prometheus что-то считает.
  2. Prometheus нельзя использовать как честный event oriented time-series db. Я не могу взять и сказать, что есть событие начала платежа, событие конца платежа, а все прочие метрики он пускай сам посчитает. Я вынужден на клиенте все нужные мне метрики заранее считать, и если вдруг мне надо какую-нибудь из них поменять, — это очередная выкладка продакшн-компонента, что очень неудобно.
  3. Очень сложно делать интегрированные метрики. Если мне надо собрать общую метрику для некоторого количества сервисов (например, перцентили времени отклика клиентам по всем серверам фронтенда), то через Prometheus сделать это нереально даже теоретически. Я могу только делать какое-то непонятное среднее суммирование уже на уровне Grafana. Сам Prometheus это сделать не может.

Поэтому я всерьез думаю куда-нибудь уйти.

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

Использование базы данных

Вообще, платеж — это довольно сложно. Ниже примерное описание контекста платежа: множество кортежей (ассоциативных массивов), списков кортежей, кортежей списков, каких-то параметров. И все это постоянно меняется из-за изменений бизнес-логики.

Если это делать честно, будет много таблиц, много связей между ними. Как следствие, нужен ORM, нужна сложная логика миграции при добавлении колонки. Напомню, что, в PostgreSQL даже простое добавление новой nullable колонки в таблицу может привести (в некоторых специфических ситуациях) к тому, что на долгое время данная таблица будет вообще недоступна. Т.е. на самом деле добавление nullable column не атомарная бесплатная операция, как многие думают. Мы на это даже разочек наткнулись.

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

Практики работы с JSON

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

Во-первых, надо сразу думать о возможных конфликтах.

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

Для решения этой задачи обычно достаточно найти хороший сериализатор / десериализатор, которому вы можете в явном виде сказать, что вот это поле из JSON надо преобразовать в такой-то набор полей, эти вещи сериализовывать так-то, а если чего-то нет, то заменить на значение по умолчанию и т.д. В Java, к счастью, с такими сериализаторами проблем нет. Мой любимый — Jackson.

Обязательно в базе данных надо хранить версию структуры, которую вы пишете.

Т.е. рядом с каждым полем, где у вас хранится JSON, должно быть еще одно поле, где хранится версия. В первую очередь, это нужно, чтобы не бесконечно поддерживать код понимания старой версии новой.

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

Для PostgreSQL — надо выбрать между json и jsonb.

Когда-то в этом выборе еще был смысл. У нас, например, использовался JSON, потому что мы начинали довольно давно. Напоминаю, что тип данных JSON — это просто текстовое поле, и чтобы залезть куда-нибудь внутрь, его каждый раз будет парсить PostgreSQL. Поэтому в продакшене лучше лишний раз внутрь json-объектов в базе данных не залезать, только в случае какой-то поддержки или исправления неисправностей. По-хорошему, в вашем SQL-коде вообще не должно быть команд работы с json-полями.

Если же использовать JSONB, то PostgreSQL все аккуратненько разбирает в бинарный формат, но не сохраняет оригинальный вид JSON-объекта. Когда мы, например, храним оригинальные входящие к нам данные, мы всегда используем только JSON.

Нам пока JSONB не нужен, но в данный момент, действительно имеет смысл всегда использовать JSONB и об этом уже не думать. Разница в производительности стала практически нулевой, даже на простое чтение и запись.

PCI DSS. Из простого сделать сложное, и как web становится enterprisе

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

Надежность сервиса реализовывали через active-standby — потому что сервис маленький, перезапускается быстро, 3-5 секунд прочие компоненты его точно подождут, поэтому нет смысла громоздить какую-то сложную кластерную систему.

Перед запуском мы начали проходить аудит PCI DSS, и выяснилось, что есть довольно жесткие требования контроля доступа к данным, которые, в случае нашего аудитора, сводились к тому, что:

  1. Не должно быть одного человека, который может прочесть всю информацию из базы данных. Это должны быть минимум несколько человек, которые совместно должны получать доступ.
  2. Требуется регулярная смена ключей доступа.
  3. PCI DSS требует при любой обнаруженной уязвимости обновлять инфраструктуру, а поскольку уязвимости в операционной системе и инфраструктурном ПО находятся довольно часто, значит, систему надо тоже обновлять довольно часто.

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

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

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


Понятно, что после перехода на схему Шамира в сервисе появляется логика генерации и смены ключей. Для генерации ключа использутся отдельная виртуалочка, на которой:

  • генерируется ключ,
  • раздается админам,
  • виртуалочка убивается.

В результате исходный ключ никто не может узнать, потому что он создается в присутствии СБ-шников, на быстроумирающей системе, а дальше раздаются уже только «порожденные» ключи

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

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

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

Логика платежа. Из сложного сделать простое

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

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

Finite State Machine

Разумеется, вначале у нас была FSM — нормальная стейт-машина, каждое событие обрабатывается в транзакции. Текущее состояние тоже сохраняем в СУБД. Реализовали все сами.

Первая проблема — у нас есть одновременные события.

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

Кроме того многие шаги имеют четкое максимальное время выполнения (тайм-аут), и эти времена тоже нужно где-то хранить, обрабатывать, смотреть, когда события наступления таймаутов происходят (и они тоже иногда бывают одновременными).

Все это реализовывалось через логику блокировок внутри Java-машины, потому что в базе данных это было делать не очень легко. Как следствие, получилась система с организацией высокой доступности только через Active-Standby и с кучей специальной логики восстановления контекстов и тайм-аутов.

У нас довольно маленькая нагрузка, всего десятки платежей в секунду, даже меньше сотни в случае максимального потенциального пика. При этом, правда, даже десять платежей в секунду приводит к сотне запросов (отдельных шагов) в секунду. Это небольшие нагрузки, поэтому одной машины нам почти всегда хватает.

Все было замечательно, но потребовался Active-Active.

Active-Active

Во-первых, мы захотели использовать схему Шамира, ну а также появились и другие хотелки: давайте мы будем выкладывать новую версию только на 3% пользователей; давайте часто менять логику платежа; хочется ее выкладывать с нулевым простоем и т.д.

Делать распределенные блокировки — это грустно, делать тайм-ауты распределенные тоже грустно. И мы начали в очередной раз разбираться — что такое платеж? Платеж — это множество событий, которые надо строго последовательно обрабатывать, это сложное изменяемое состояние, и обработка платежей должна идти параллельно.

Кто узнал определение? Правильно, платеж — это актор.

В Java много разных моделей акторов. Есть прекрасная Akka, есть временами странный, но прикольный Vert.x, есть гораздо менее используемый Quasar. Они все замечательные, но у них есть один фундаментальный недостаток (и не тот, о котором вы подумали) — у них недостаточные гарантии.

Ни один из них не гарантирует доставку сообщений между акторами, у всех из них есть проблема с работой внутри транзакции в базе данных.

Мы долго на это смотрели, думали, не допилить ли нам что-нибудь до вменяемого состояния, но потом сделали свой велосипед: очередь в PostgreSQL через select for update skip locked.

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

Skip locked

Это такая прекрасная штука для реализации очередей в PostgreSQL. На самом деле данный механизм есть во всех базах данных, кроме, по-моему, MySQL.

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

Выбираем самое первое событие в самом первом из flow, указав магическое for update skip locked. Если никаких блокировок в табличке нету, запрос работает ровно как нормальный for update — берет и ставит блокировку на первую строчку, которую мы выбрали, т.е. на строку с первым актором и на строку с первым событием для этого актора.

Запускаем тот же запрос второй раз и он делает ровно то же самое, но пропуская уже заблокированные строчки. Поэтому он выберет первое событие во втором акторе (третья строка в таблице) и повесит на него блокировку.

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

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

Что мы получаем с такой очередью?

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

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

В своей реализации мы еще и добавили сложную политику обработки ошибок, потому что 80% логики платежа — это на самом деле обработка возможных ошибок: пользователь куда-то ушел, контрагент ответил какой-то ерундой, у пользователя вообще нет денег или контрагент не работает и надо выбрать другого контрагента, другой шлюз, и так далее. Там безумное количество разной сложной логики по обработке всевозможных ошибок.

Для нас это решение эффективно — 100 платежей в секунду нас устраивает.

Но это решение очень ограниченной применимости — свой велосипед, который можно применять довольно мало где. И у него очень жесткие ограничения по производительности. То есть коллегам из Яндекс.Денег такое не посоветую, потому что у них бывают черные пятницы, и 100 платежей в секунду им явно мало. У нас, к счастью, черной пятницы не бывает, у нас очень конкретный рынок, и поэтому мы можем спокойненько обойтись подобным решением. При этом это честный свой велосипед, честный enterprise-подход — OpenSource библиотеки в данном случае нам не очень подходит.

Сеть и транзакции

На бумаге все было гладко. Мы это внедрили, запустили — работает. И вдруг приходит проблема — упал один из шлюзов.

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

Начинаем разбираться и выясняем: у нас контрагент стал отвечать на сетевые запросы не за полсекунды, как было раньше, а за одну минуту. Поскольку у нас обработк азапроса к контрагенту является шагом платежа, то она выполняется в транзакции. Когда много транзакций начинают выполняться долго то соединений с БД на все поступающие запросы уже не хватает. Такое нормальное поведение: когда у вас очень много длинных транзакций, у вас соединения почему-то начинают заканчиваться.

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

Можно попытаться сетевой вызов сделать асинхронным, то есть каждый шаг разбить на два. Каждый раз, когда нам нужно кого-то дернуть из контрагентов, нужно сделать вызов, сохранить состояние в контекстную базу данных, получить от него ответ. Обработка ответа попадет на этот же актор, мы поднимем состояние из базы данных, сделаем еще что-нибудь нужное. Но при этом у нас многократно увеличивается количество шагов в платеже, и в наше требование — 100 платежей в секунду — мы уже не укладываемся. Да и логика работы становится сложной.


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

К сожалению, стандартного решения, которое бы позволяло тонко управлять гарантиями сохранения для конкретного события, нет. Сейчас я его пытаюсь писать, но, честно, реализовать skip locked на каком-нибудь Redis на Lua оказывается, довольно нетривиальная задача. Если я все это сделаю, я обязательно про это расскажу.

В качестве временного решения мы разбили процесс платежа на несколько отдельных акторов, исполняемых на разных СУБД (и на разных серверах). Это позволило внести асинхронные запросы там, где это было необходимо и решить текущие проблемы.

Главный вывод — если у вас в системе где-то появились акторы, они рано или поздно поползут всюду. Если вы думаете: «у нас будет актор в отдельном кусочке и производительности нам хватает», это не так. У вас в конечном итоге через год разработки выяснится, что все хотят их использовать там, где надо, и там, где не очень надо, и они всюду. Просто попробовать не удастся!

Учет и контроль. Бюджетный Business Intelligence

У нас платежная система, то есть деньги, а деньги любят, когда их считают. Поэтому очень быстро к нам пришел бизнес с просьбой сделать Business Intelligence систему. Данных у нас не очень много, какие-то сотни гигабайт, нужно это только топ-менеджменту, сотен аналитиков у нас не наличествует. И главное — надо делать «быстро и дешево».

Power BI — быстро и дешево?

Берем PowerBI — это решение от Microsoft: система генерирует нужные данные в виде csv, csv загружаются в облако, из облака они загружаются в PowerBI. Дешево, быстро, просто, сделано буквально на коленке, почти совсем без привлечения программистов. Отчеты написать в csv — это несложно.

Но оказалось, что дешево — это если у вас мало данных, и быстро — если мало данных. Как только у нас объем данных превысил 1 Гб, выяснилось, что и обрабатывается это довольно долго, и главное, в некий момент Microsoft изменил условия использования сервиса и он стал очень платным как раз примерно начиная с размера в 1 Гб. И выяснилось, что это нам уже несколько не по карману.

Пошли смотреть, что можно сделать.

ClickHouse

Первая мысль — ура, есть же ClickHouse! Кидаем все наши события в Kafkу, оттуда пачками выгружаем в ClickHouse, получается круто, модно, хайпово, аналитика должна работать быстро, все должно быть бесплатно, вообще прекрасно и замечательно. Но результат из ClickHouse надо где-то показывать. На данный момент с Clickhouse лучше всех работает Redash. Сделали тестовую версию Redash, показали бизнесу — те сказали, что с этим они работать не будут, потому что выглядит оно, мягко говоря, уродливо и некоторых милых бизнесу вещей типа drill-down там просто нет.

Начали выяснять, а о чем вообще мечтает бизнес. Бизнес мечтает о чем-нибудь типа Tableau, где все красиво. Tableau лучше всего интегрируется с Vertica, и получается прекрасная, по-идее, система: все события кидаем в Kafka, с Kafka перекидываем в Vertica.

Vertica работает быстро, качественно, надежно, просто, а Tableau Server все это показывает. Одно но — стоимость лицензии Vertica официально не сообщается, но, мягко говоря, немалая,. Tableau тоже не очень дешевый. К счастью, выяснилось, что на наших объемах все это на самом деле не так и дорого, потому что до одного терабайта данных Vertica — халявная, Community Edition нас абсолютно устраивает, до терабайта нам еще далеко. А поскольку лицензия на Tableau нам нужна только на небольшое количество разработчиков и топ-менеджеров, то это стоит какие-то полне нормальные деньги. Вплоть до того, что нам нужно было меньше лицензий, чем минимальный пакет, который продает Tableau.

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

При этом я думаю, что если мы через несколько лет вырастем за пределы терабайта, то к этому времени у нас как раз уже будет хорошая экспертиза по ClickHouse, Tableau к этому времени явно сделает к нему адаптор, и мы аккуратненько переползем на бесплатный ClickHouse за какое-то вполне разумное время.

Контент

У нас довольно много текстов:

  1. Юридическая информация, которую мы обязаны предоставлять, оферты и т.д.;
  2. Информация о контрагентах, включая комиссии, которые мы берем с пользователей;
  3. Инструкции для пользователей;
  4. Собственный маленький блог;
  5. Информация об ошибках и прочее.

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

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

И мы начали думать, как бы все это автоматизировать и сделать CМS. Простые CМS не подходят, потому что:

  • сложно с разделением тестовой среды и продакшена;
  • непонятно, как тестировать текст;
  • сложно работать большому количеству пользователей;
  • сложно интегрировать с большой Java-системой.

Не простые CМS — слишком дорогие во всех смыслах, они и стоят обычно больших денег, и их интеграция весьма неочевидна, потому что там напридумано много всего.

Идеальным решением было бы поставить у всех, кто работает с текстами, банальный Git: пусть они все написанные тексты отправляют прямо в репозитарий. Но от мысли поставить Git топ-менеджерам и копирайтером и научить их им пользоваться, мы подумали-подумали и в ужасе отказались, потому что все-таки git не для нормальных людей.

Самое идеальное решение было бы, наверное, редактор текстов, встроенный прямо в IntelliJ IDEA, где можно сложность использования Git аккуратненько скрыть. Но, к сожалению, JetBrains такого редактора до сих пор не сделали, хотя я давно их просил.

Пришлось опять делать велосипед:

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

То есть пришлось написать, по сути дела, микро-портальчик в стиле enterprise.

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

Выводы

Что из всего этого можно сказать? Что жизнь на грани довольно интересна.

Когда у вас задачи одновременно и из web, и из enterprise, можно заимствовать разные идеи из мира корпораций, у них довольно много вещей продумано. Иногда можно заимствовать не только идеи, но и конкретные решения типа как Vertica, если они дешевые.

Честно, если бы я нашел дешевую поддержку для IBM DB2 — я бы реализовывал бы проект на ней, я ее очень люблю, она дешевая и очень надежная, но найти поддержку этой базы за разумные деньги в России сложно. Конечно, можно кого-нибудь переманить из Почты России, но они привыкли к настолько большим серверам, что мы явно для них слишком мелкие.

Ну и большие проблемы из мира enterprise можно решать в web-стиле довольно просто, чем мы постоянно занимаемся.

Архитектура — понятие динамическое.

Не бывает хорошей архитектуры вообще. Бывает архитектура, которая более-менее вас удовлетворяет в конкретный момент времени. Время меняется — архитектура меняется, и надо постоянно быть в этому готовым, и всегда вкладывать ресурсы в развитие архитектуры. Архитектура проекта — это процесс, а не результат.

Java и SQL — это реально круто, если вы умеете это готовить. Мы умеем, поэтому у нас все получается просто, быстро, ненапряжно, и очень небольшой командой мы делаем довольно сложны

Даты проведения HighLoad++ 2020 переносятся на 8 и 9 ноября, чтобы разминуться с Percona Live.

Прием заявок на Highload++ Siberia, которая пройдет 25 и 26 июня в Новосибирске, уже закончился, поданные доклады опубликованы на сайте, цена билетов уже не минимальная, но еще и не слишком выросла — идеальный момент для бронирования.

До РИТ++ осталось совсем немного времени, программа активно формируется. В тему сегодняшней статьи можно отметить такие заявки:

Нет платежных систем для оплаты

поставил 30 дневную пробную версию магазина, все работает ОК

однако при попытке оформить заказ выдает «Нет платежных систем для оплаты» хотя платежные системы есть (квитанция Сбера), валюта RUB

в чем может быть дело и куда копать? я в этом вопросе еще новичок
поискал в инете — нет такой проблемы ни у кого!

получил пробный ключ /bitrix/admin/update_system.php?lang=ru
появилась доставка )
но платежки не работают все равно!

так )) ладно, сам задал вопрос, сам ответил

выделил и сохранил способ доставки в платежной системе и она заработала

Мастер Йода рекомендует:  Создание водяных знаков с помощью PHP
Добавить комментарий