- Регистрация
- 20.01.2011
- Сообщения
- 7,652
- Розыгрыши
- 0
- Реакции
- 118
Аннотация
В последнее время, в интернете развелось слишком много мошенников, которые пользуются ********************амотностью людей (недостатком знаний), и разводят их на деньги, иногда не малые. Если разбирать платежи в системе SWIFT то особенно часто можно увидеть предложения про мануал доводку платежей (manual download), которую ставят хакеры (так вам будут объяснять ребята свою работу), в итоге максимум вы получите pdf файл, с непонятным набором символов, который выглядит логично, но ничего общего с SWIFT не имеющий. В данной статье будет описаны процедуры, благодаря которым вы действительно сможете составить платежное сообщение которое сможет пройти комплаенс на суммах до 500 тысяч евро, благодаря доверительным отношениям внутри системы СВИФТ. Также вы поймете общий принцип работы системы СВИФТ, и сможете проводить первичную проверку сообщений и выявлять подделки.
Пролог
Все что описано в данной статье, представлено для ознакомления. Все данные связанные с фирмами, действующими лицами в статье обобщены, отредактированы или изменены. Статья не призывает к незаконным действиям. Представлена для ознакомления в обучающих целях.
Перейдем к сути:
Типичные атаки хакеров, имеющие отношения к системе СВИФТ, которые мы можем наблюдать в отчетах полиции или средствах массовой информации – следующие:
3. Компрометация учетных данных оператора платежей СВИФТ;
4. Доступ к СВИФТ-интерфейсу обмена сообщений учреждения;
5. Авторизация платежных сообщения с использованием скомпрометированных учетных записей платежного оператора и интерфейса обмена сообщениями;
Чтобы выполнить данный вектор атаки вам потребуется компрометация нескольких пользователей, нескольких систем, понимания того, как работает целевое приложение, обход двухфакторной авторизации, затем вы обязаны скрыть журналы доступа во избежание предупреждения от легитимных операторов, настроить вредоносное ПО и .т.д. – что даже в кратком описании выглядит ОЧЕНЬ сложно.
Поэтому мы пойдем от простого к сложному, и опишем устройство системы в целом, которое поможет вам разобраться как работает система SWIFT, и разберем стандартное платежное поручение, а затем уже более внимательно изучим каждый вектор атаки по отдельности.
Общие параметры
Для начала вам нужно полностью понять и разобраться с конкретным «разделом» платежной системы (СВИФТ) в целевом учреждения. Мы будем называть её просто СВИФТ.
СВИФТ принимает данные в произвольном формате и выводит начальные платежные инструкции в формате ISO 15022 / RJE / SWIFT MT.
Мы сосредоточимся на компрометации платежного поручения МТ103, а именно:
Помимо типа сообщения, нам нужно понять, как обрабатывается данный платеж. Он достаточно типичен, для таких видов перевода и выглядит так:
Разбираемся в деталях обмена данными
Зададимся вопросом: как эти сообщения передаются между всеми этими системами?
Чаще всего в любой Платежной Системе для передачи сообщений между различными компонентами используются так называемые Очереди Сообщений (ОС).
Существуют различные «адаптеры», которые могут быть использованы между системами обменивающиеся данными напрямую с Swift Alliance Gateway:
Также в требованиях строго прописано, что должно присутствовать минимум два администратора очереди. Один управляет очередями в Зоне работы SWIFT, второй для общения в корпоративной сети и/или прочих системах учреждения (к примеру внутрибанковские операции должны быть ОТДЕЛЕНЫ от операций связанных с системой SWIFT, а также операции в других платежных системах, например VISA, MASTERCARD или SEPA).
Определяем жизнеспособный вектор для внедрения
Пришло время определится с задачей: «Поместить платежное поручение в очередь и успешно его обработать во всех системах (пройти валидацию)»
Задача простая, поэтому зададим правильные вопросы, которые помогут в реализации:
:20: Ссылка на транзакцию
16x — данное поле может быть размером только 16 символов. По этому ссылке, ваш банк может идентифицировать сообщение в своей сети, ровно также, как и банк отправитель.
:23B: Код операции банка
4!c — четыре заглавных буквы, отвечающие за операцию. В нашем случае это CRED — кредитование бенефициара.
:32A: Дата / Валюта / Сумма
6!n3!a15d — поле заполняется в строгой последовательности. Сначала дата (год/месяц/день), затем заглавными буквами валюта (например: EUR, USD, RUB), затем в произвольном порядке цифрами сумма.
Также к примеру, если комиссия в поле 71A — будет указана как BEN, то в таком случае добавляется поле 33B, где будет указана точная сумма к зачислению на счет.
:50K: Клиент
Данное поле содержит реквизиты приказодателя (юридическое лицо, физическое лицо, банк). Поле используется в сообщениях МТ103, МТ103+ с опциями ”A”, “K”, “F”. В зависимости от опции заполнение меняется, от банка к банку.
:59: Бенефициар
В данном поле указываются реквизиты клиента-бенефициара в пользу которого осуществляется платеж:
- номер счета клиента в банке бенефициара (При переводе средств в пользу клиентов банков стран, поддерживающих Директиву ЕС об обязательном указании IBAN, указание номера счета в формате IBAN является обязательным.(указывается без каких-либо разделительных символов)
- наименование клиента;
- адрес (при наличии);
- город, страна.
:70: Информация о денежном переводе
В данном поле размером 4 строки по 35 символов — указывается информация о переводе, включающая в себя: цель перевода (оплата контракта-договора/ обучения/ путевки, материальная помощь и т.д.), номер и дату договора-контракта, товарных документов, наименование выполненных работ/ оказанных услуг, товаров, др.
:71A: Детали комиссии
Указывается, за чей счет совершается оплата комиссий при осуществлении перевода. При этом отмечается один из возможных вариантов:
- OUR - общая сумма взимаемых комиссий Банка-клиента, а также комиссии других банков, участвующих в прохождении платежа, оплачиваются клиентом-плательщиком (поле 50A,K или F).
При этом существует вероятность зачисления средств бенефициару не в полном объеме.
- SHA - общая сумма взимаемых комиссий Банка-клиента оплачивается клиентом-плательщиком (поле 50A,K или F), а комиссии других банков, участвующих в прохождении платежа взимаются из суммы перевода;
- BEN - общая сумма взимаемых комиссий Банка-клиента, а также комиссии других банков, участвующих в прохождении платежа, взимаются из суммы перевода, указанной в поле 33B.
Теперь имея валидное тело сообщения, будь у нас был доступ к оператору SWIFT Alliance Access, мы могли бы вставить это сообщение в интерфейс создания необработанных сообщений и совершить перевод. Останется лишь дело за малым — добавить коды BIC отправителя и получателя, и выбрать подразделения банка откуда и куда.
Но мало изучить само тело сообщения (вы должны помнить что все поля должны заполнятся СТРОГО инструкций в чем грешат большинство мошенников которые рисуют вам платежки, нарушая элементарные правила заполнения документов). Поэтому перейдем к следующей части и разберем сообщение целиком, не только его тело.
Детальный разбор МТ103
Как выше уже говорилось мы разобрали лишь тело сообщения, которое является «Блоком №4» (именуемым «Текстовый блок») в стандарте сообщений СВИФТ МТ. Как следует из названия, вы сможете догадаться, что также имеются блоки 1-3, и будете правы.
Обычно данные блоки генерируются автоматически приложениями обработки платежей (тот же SWIFT Alliance Access), и не обязательно вводятся операторами.
«Полное» сообщение МТ103 состоит из 6 блоков:
Согласно документации SWIFT, базовый заголовок имеет следующий вид.
{1:F01EBNKGB20AXXX0000999999}
Это порядковый номер блока (не может быть 2, 3 или любым другим в данном блоке).
{1:F01EBNKGB20AXXX0000999999}
Это тип приложения, в нашем случае это F — т.е. FIN
{1:F01EBNKGB20AXXX0000999999}
Это тип сообщения, в нашем случае это 01. Что эквивалетно FIN, т.е. не является сообщением ответом — по типу ACK или NACK.
{1:F01EBNKGB20AXXX0000999999}
Это БИК отправителя EBNKGB20, где EBNK (Код банка) GB (Код страны) 20 (Код территории).
{1:F01EBNKGB20AXXX0000999999}
Это номер терминала отправителя. Обычно указывается A, но в случае огромного институционального банка могут быть и иные терминалы.
{1:F01EBNKGB20AXXX0000999999}
Это филиал отправителя. В случае если указывать филиал банка указывать не требуется, то заполняется просто XXX.
{1:F01EBNKGB20AXXX0000999999}
Это номер сессии, в нашем случае это 0000
{1:F01EBNKGB20AXXX0000999999}
Это порядковый номер сообщения, в нашем случае 999999
Забегая вперед, стало видно первая проблема с которой столкнётся хакер: это номер сеанса и порядковый номер сообщения, достаточно сложно выгадать точные значения которые будут не выбиваться из общей канвы отправленных сообщений в автоматическом режиме.
БЛОК 2 (ЗАГОЛОВОК ПРИЛОЖЕНИЯ)
Также из документации, вы можете свободно понять что он выглядит таким образом:
{2:I103FBNKFR20XXXXN}
Это порядковый номер блока, может быть только 2.
{2:I103FBNKFR20XXXXN}
Это идентификатор сообщения. В нашем случае это I (Input), но есть вариант Output или O. Тут важно не ошибиться, Input — несмотря на то что начинается на IN — исходящее сообщение, а Output — входящее сообщение. Тут часто ошибаются рисовальщики, выдавая со значением O.
{2:I103FBNKFR20XXXXN}
Это тип сообщение, в нашем случае это 103, или кредитный перевод для одного клиента.
{2:I103FBNKFR20XXXXN}
Это идентификатор банка клиента, FBNKFR20, где FBNK (Код банка) FR (Код страны) 20 (Код территории).
{2:I103FBNKFR20XXXXN}
Далее идёт X — или номер терминала банка получателя. Обычно все не специализируемые терминалы маркируются X. И это даёт ещё одну ошибку в SWIFTах, художников. Обычно они пишут всего три X, когда всегда их было 4.
{2:I103FBNKFR20XXXXN}
Это филиал получателя банка. Для обычных переводов, обычно филиал указывать не требуется. В отличии, например от переводов Банковских инструментов.
{2:I103FBNKFR20XXXXN}
Это приоритет сообщения. В нашем случае это N (Normal), то есть не срочный. Может быть также U (Urgent), или срочный. Обычно за такие доплачивают дополнительные комиссии до 100 долларов.
БЛОК 3 (Пользовательский заголовок)
Третий блок используется для определения некоторых «специальных» правил обработки сообщения SWIFT. Используя данный заголовок, можно указать что сообщения должно обрабатываться с использованием так называемых правил «Сквозной обработки» (Straight Through Processing или STP), которые поясняют что сообщение идет end-to-end без вмешательства человека (например вы отправили деньги из онлайн банкинга, и оно обработано автоматически компьютером, без участия банковского офицера). Это можно указать следующим образом.
UETR код, по своей сути является, глобальный уникальный идентификатор (Globally Unique Identifier или GUID) соответствующий четвертой версии алгоритма генерации, используемого стандартом IETF “RFC4122”. Он состоит из 32 шестнадцатеричных символов, разделенных на 5 частей дефисами следующим образом:
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это порядковый номер блока, может быть только 3.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это тип проверки сообщения, в нашем случае 119 — указывает каким способом обработать FIN сообщения.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это область проверки, в нашем случае — STP. Запрос SWIFT проверить сообщение по принципу Сквозной обработки.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Указывает на поле UETR.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Само значение UETR.
БЛОК 5 и 6 (ХВОСТ и СИСТЕМНЫЙ БЛОК)
Ранее мы уже обсуждали «Тело сообщения» или БЛОК 4, поэтому мы его пропускаем и рассмотрим два последних блока.
Прежде чем мы двигаться дальше, немного расскажу о бессмысленно сложной концепции сообщений в СВИФТ.
- Вводимое сообщение (Input message) – это сообщение, которое ОТПРАВЛЯЕТСЯ из учреждения, так как это сообщение «вводится» оператором и отправляется учреждением в другое учреждение.
- Выводимое сообщение (Output message) – это сообщение, которое «входит» в учреждение. Так что это сообщение выводится SWIFTNet и принимается учреждением.
Для вводимых сообщений эти блоки не проблема, потому что заголовки используются только для указания того, было ли сообщение предназначено для обучения/ тестирования, или это возможный дубликат (копия сообщения):
Однако, для выводимых сообщений, все немного сложнее, и системный блок может выглядеть так:
Хвост ({5:})
MAC – код аутентификации сообщения, рассчитанный на основе всего содержимого сообщения с использованием секретного ключа, который был получен от банка получателя, и секретного алгоритма;
CHK – это контрольная сумма PKI сообщения, используемая для гарантии того, что сообщение не было повреждено при передаче.
TNG – отметка, указывающая, является это сообщение тестовым или обучающим.
Системный блок ({S
SPD – возможный дубликат
SAC – отметка об успешном заверении и авторизации, она присутствует только в случаях если проверка подписи прошла успешно или авторизация и проверка RMA (Application Management) прошла спешно.
COP – указывает что это основная копия сообщения;
MDG – HMAC256 сообщения с использованием ключей LAU
И если вы понимаете логику, то указание того же MAC, или CHK в СВИФТе отправки — не возможно. Так как их вам может выдать и отпечатать только принимающий банк, банк отправитель эти значения знать не может.
Разобравшись с логикой сообщения SWIFT, перейдем непосредственно к отправке сообщений.
В последнее время, в интернете развелось слишком много мошенников, которые пользуются ********************амотностью людей (недостатком знаний), и разводят их на деньги, иногда не малые. Если разбирать платежи в системе SWIFT то особенно часто можно увидеть предложения про мануал доводку платежей (manual download), которую ставят хакеры (так вам будут объяснять ребята свою работу), в итоге максимум вы получите pdf файл, с непонятным набором символов, который выглядит логично, но ничего общего с SWIFT не имеющий. В данной статье будет описаны процедуры, благодаря которым вы действительно сможете составить платежное сообщение которое сможет пройти комплаенс на суммах до 500 тысяч евро, благодаря доверительным отношениям внутри системы СВИФТ. Также вы поймете общий принцип работы системы СВИФТ, и сможете проводить первичную проверку сообщений и выявлять подделки.
Пролог
Все что описано в данной статье, представлено для ознакомления. Все данные связанные с фирмами, действующими лицами в статье обобщены, отредактированы или изменены. Статья не призывает к незаконным действиям. Представлена для ознакомления в обучающих целях.
Перейдем к сути:
Типичные атаки хакеров, имеющие отношения к системе СВИФТ, которые мы можем наблюдать в отчетах полиции или средствах массовой информации – следующие:
- Компрометация сети учреждения;
3. Компрометация учетных данных оператора платежей СВИФТ;
4. Доступ к СВИФТ-интерфейсу обмена сообщений учреждения;
5. Авторизация платежных сообщения с использованием скомпрометированных учетных записей платежного оператора и интерфейса обмена сообщениями;
Чтобы выполнить данный вектор атаки вам потребуется компрометация нескольких пользователей, нескольких систем, понимания того, как работает целевое приложение, обход двухфакторной авторизации, затем вы обязаны скрыть журналы доступа во избежание предупреждения от легитимных операторов, настроить вредоносное ПО и .т.д. – что даже в кратком описании выглядит ОЧЕНЬ сложно.
Поэтому мы пойдем от простого к сложному, и опишем устройство системы в целом, которое поможет вам разобраться как работает система SWIFT, и разберем стандартное платежное поручение, а затем уже более внимательно изучим каждый вектор атаки по отдельности.
Общие параметры
Для начала вам нужно полностью понять и разобраться с конкретным «разделом» платежной системы (СВИФТ) в целевом учреждения. Мы будем называть её просто СВИФТ.
СВИФТ принимает данные в произвольном формате и выводит начальные платежные инструкции в формате ISO 15022 / RJE / SWIFT MT.
Мы сосредоточимся на компрометации платежного поручения МТ103, а именно:
- MT - «тип сообщения»
- 1 - категория 1 (платежи и чеки клиентов)
- 0 - группа 0 (перевод финансовых учреждений)
- 3 - Тип 3 (уведомление)
Помимо типа сообщения, нам нужно понять, как обрабатывается данный платеж. Он достаточно типичен, для таких видов перевода и выглядит так:
- Система (Приложение для работы с SWIFT) принимает данные от пользователя в удобном ему формате (например посредством заполнения полей в графическом интерфейсе приложения). Затем Система выводит начальную платежную инструкцию в формате SWIFT MT;
- Система отправляет данное сообщение дальше, в компонент именуемый Промежуточным Программным Обеспечением (ППО), который преобразует (при необходимости) полученное сообщение в современный формат SWIFT, понятный системе. По сути, это брокер сообщений предоставляемый для не институциональных финансовых организаций.
- ППО отсылает сформированное сообщение в Институциональное Финансовое Учреждение (Банк, Кредитная организация или иное, далее Банк для удобства), для обработки.
- Банк проверяет содержимое сообщения, производит ряд проверок (не находится ли компания в черном списке, проходит проверку системой борьбы по отмыванию денег, проверяет легальность операции при высоких объемах, делает запрос в антимонопольное ведомство или в валютный контроль, если такие опции есть в стране где находится Банк)
- Если сообщение сформировано верно, проходит внутрибанковскую проверку, то сообщение отправляется в Swift Alliance Gateway, где оно подписывается и отправляется в организацию/банк получателя через SwiftNet.
Разбираемся в деталях обмена данными
Зададимся вопросом: как эти сообщения передаются между всеми этими системами?
Чаще всего в любой Платежной Системе для передачи сообщений между различными компонентами используются так называемые Очереди Сообщений (ОС).
Существуют различные «адаптеры», которые могут быть использованы между системами обменивающиеся данными напрямую с Swift Alliance Gateway:
- Удаленный хост-адаптер API (HAPI)
- Хост адаптер Очереди Сообщений (MQHA)
- Хост-адаптер веб-служб (WSHA)
Также в требованиях строго прописано, что должно присутствовать минимум два администратора очереди. Один управляет очередями в Зоне работы SWIFT, второй для общения в корпоративной сети и/или прочих системах учреждения (к примеру внутрибанковские операции должны быть ОТДЕЛЕНЫ от операций связанных с системой SWIFT, а также операции в других платежных системах, например VISA, MASTERCARD или SEPA).
Определяем жизнеспособный вектор для внедрения
Пришло время определится с задачей: «Поместить платежное поручение в очередь и успешно его обработать во всех системах (пройти валидацию)»
Задача простая, поэтому зададим правильные вопросы, которые помогут в реализации:
- Как получить доступ на запись в нужную очередь?
- Что защищает сообщения в очередях?
- Что защищает сообщение при транзите?
- В каком формате находятся сообщения?
- Как составить синтаксически верное сообщение для выбранного формата? (цель – 0 ошибок)
- Где находится PKI (Для просмотра ссылки Войди
или Зарегистрируйся)? Как, где и когда подписываются сообщения, производится их проверка? - Можно ли как-нибудь обойти подпись сообщения?
- Какие значения в сообщениях зависят / контролируются / определяются системой, обрабатывают их вне моего контроля (или другого человека)?
- Какую максимальную сумму я могу перевести с помощью, не предупреждая учреждение / не требуя проверки вручную?
- Грамотно написать платежную инструкцию на 500 тысяч евро;
- Вставить данную платежную инструкцию в очередь;
- Сообщение должно пройти синтаксическую проверку (ACK or NACK);
- Сообщение должно пройти все дополнительные проверки, включая проверку AML;
- Сообщение должно быть успешно подписано;
- Пройти валидацию при проверки правилами SWIFTNet;
- Скомпрометировать сеть учреждения;
- Получить доступ к рабочей станции администратора Менеджера Очередей;
- Получить необходимые реквизиты фирмы;
- Провести требуемую работу.
- Атака с участием платежного оператора SWIFT (самой системы);
- Атака с использованием доступа к SWIFT-приложению (прямой доступ к официальному банковскому приложению);
- Необходимость компрометации подписи ключей (подделка цифровых ключей);
- Необходимость компрометации учетных записей или сертификатов оператора SWIFTNet.
:20:TRANSACTIONMT103
:23B:CRED
:32A:200707EUR500000,00
:50K:/GB22EBNK88227712345678
JOHN DOE
JOHN'S BUSINESS LTD
21 JOHN STREET, LONDON, GB
:59:/FR20FBNK88332287654321
ALICE SMITH
ALICE'S COMPANY
10 ALICE STREET, PARIS, FR
:70:12345-67890
:71A:OUR
Разберем каждое поле выделенное :ТАК: подробнее.:20: Ссылка на транзакцию
16x — данное поле может быть размером только 16 символов. По этому ссылке, ваш банк может идентифицировать сообщение в своей сети, ровно также, как и банк отправитель.
:23B: Код операции банка
4!c — четыре заглавных буквы, отвечающие за операцию. В нашем случае это CRED — кредитование бенефициара.
:32A: Дата / Валюта / Сумма
6!n3!a15d — поле заполняется в строгой последовательности. Сначала дата (год/месяц/день), затем заглавными буквами валюта (например: EUR, USD, RUB), затем в произвольном порядке цифрами сумма.
Также к примеру, если комиссия в поле 71A — будет указана как BEN, то в таком случае добавляется поле 33B, где будет указана точная сумма к зачислению на счет.
:50K: Клиент
Данное поле содержит реквизиты приказодателя (юридическое лицо, физическое лицо, банк). Поле используется в сообщениях МТ103, МТ103+ с опциями ”A”, “K”, “F”. В зависимости от опции заполнение меняется, от банка к банку.
:59: Бенефициар
В данном поле указываются реквизиты клиента-бенефициара в пользу которого осуществляется платеж:
- номер счета клиента в банке бенефициара (При переводе средств в пользу клиентов банков стран, поддерживающих Директиву ЕС об обязательном указании IBAN, указание номера счета в формате IBAN является обязательным.(указывается без каких-либо разделительных символов)
- наименование клиента;
- адрес (при наличии);
- город, страна.
:70: Информация о денежном переводе
В данном поле размером 4 строки по 35 символов — указывается информация о переводе, включающая в себя: цель перевода (оплата контракта-договора/ обучения/ путевки, материальная помощь и т.д.), номер и дату договора-контракта, товарных документов, наименование выполненных работ/ оказанных услуг, товаров, др.
:71A: Детали комиссии
Указывается, за чей счет совершается оплата комиссий при осуществлении перевода. При этом отмечается один из возможных вариантов:
- OUR - общая сумма взимаемых комиссий Банка-клиента, а также комиссии других банков, участвующих в прохождении платежа, оплачиваются клиентом-плательщиком (поле 50A,K или F).
При этом существует вероятность зачисления средств бенефициару не в полном объеме.
- SHA - общая сумма взимаемых комиссий Банка-клиента оплачивается клиентом-плательщиком (поле 50A,K или F), а комиссии других банков, участвующих в прохождении платежа взимаются из суммы перевода;
- BEN - общая сумма взимаемых комиссий Банка-клиента, а также комиссии других банков, участвующих в прохождении платежа, взимаются из суммы перевода, указанной в поле 33B.
Теперь имея валидное тело сообщения, будь у нас был доступ к оператору SWIFT Alliance Access, мы могли бы вставить это сообщение в интерфейс создания необработанных сообщений и совершить перевод. Останется лишь дело за малым — добавить коды BIC отправителя и получателя, и выбрать подразделения банка откуда и куда.
Но мало изучить само тело сообщения (вы должны помнить что все поля должны заполнятся СТРОГО инструкций в чем грешат большинство мошенников которые рисуют вам платежки, нарушая элементарные правила заполнения документов). Поэтому перейдем к следующей части и разберем сообщение целиком, не только его тело.
Детальный разбор МТ103
Как выше уже говорилось мы разобрали лишь тело сообщения, которое является «Блоком №4» (именуемым «Текстовый блок») в стандарте сообщений СВИФТ МТ. Как следует из названия, вы сможете догадаться, что также имеются блоки 1-3, и будете правы.
Обычно данные блоки генерируются автоматически приложениями обработки платежей (тот же SWIFT Alliance Access), и не обязательно вводятся операторами.
«Полное» сообщение МТ103 состоит из 6 блоков:
- Блок 1 – Базовый заголовок;
- Блок 2 – Заголовок приложения;
- Блок 3 – Пользовательский заголовок;
- Блок 4 – Текстовый блок;
- Блок 5 – Хвост сообщения;
- Блок 6 – Системный блок.
Согласно документации SWIFT, базовый заголовок имеет следующий вид.
{1:F01EBNKGB20AXXX0000999999}
Разберем его на составные части{1:F01EBNKGB20AXXX0000999999}
Это порядковый номер блока (не может быть 2, 3 или любым другим в данном блоке).
{1:F01EBNKGB20AXXX0000999999}
Это тип приложения, в нашем случае это F — т.е. FIN
{1:F01EBNKGB20AXXX0000999999}
Это тип сообщения, в нашем случае это 01. Что эквивалетно FIN, т.е. не является сообщением ответом — по типу ACK или NACK.
{1:F01EBNKGB20AXXX0000999999}
Это БИК отправителя EBNKGB20, где EBNK (Код банка) GB (Код страны) 20 (Код территории).
{1:F01EBNKGB20AXXX0000999999}
Это номер терминала отправителя. Обычно указывается A, но в случае огромного институционального банка могут быть и иные терминалы.
{1:F01EBNKGB20AXXX0000999999}
Это филиал отправителя. В случае если указывать филиал банка указывать не требуется, то заполняется просто XXX.
{1:F01EBNKGB20AXXX0000999999}
Это номер сессии, в нашем случае это 0000
{1:F01EBNKGB20AXXX0000999999}
Это порядковый номер сообщения, в нашем случае 999999
Забегая вперед, стало видно первая проблема с которой столкнётся хакер: это номер сеанса и порядковый номер сообщения, достаточно сложно выгадать точные значения которые будут не выбиваться из общей канвы отправленных сообщений в автоматическом режиме.
БЛОК 2 (ЗАГОЛОВОК ПРИЛОЖЕНИЯ)
Также из документации, вы можете свободно понять что он выглядит таким образом:
{2:I103FBNKFR20XXXXN}
Разберем его на составные части:{2:I103FBNKFR20XXXXN}
Это порядковый номер блока, может быть только 2.
{2:I103FBNKFR20XXXXN}
Это идентификатор сообщения. В нашем случае это I (Input), но есть вариант Output или O. Тут важно не ошибиться, Input — несмотря на то что начинается на IN — исходящее сообщение, а Output — входящее сообщение. Тут часто ошибаются рисовальщики, выдавая со значением O.
{2:I103FBNKFR20XXXXN}
Это тип сообщение, в нашем случае это 103, или кредитный перевод для одного клиента.
{2:I103FBNKFR20XXXXN}
Это идентификатор банка клиента, FBNKFR20, где FBNK (Код банка) FR (Код страны) 20 (Код территории).
{2:I103FBNKFR20XXXXN}
Далее идёт X — или номер терминала банка получателя. Обычно все не специализируемые терминалы маркируются X. И это даёт ещё одну ошибку в SWIFTах, художников. Обычно они пишут всего три X, когда всегда их было 4.
{2:I103FBNKFR20XXXXN}
Это филиал получателя банка. Для обычных переводов, обычно филиал указывать не требуется. В отличии, например от переводов Банковских инструментов.
{2:I103FBNKFR20XXXXN}
Это приоритет сообщения. В нашем случае это N (Normal), то есть не срочный. Может быть также U (Urgent), или срочный. Обычно за такие доплачивают дополнительные комиссии до 100 долларов.
БЛОК 3 (Пользовательский заголовок)
Третий блок используется для определения некоторых «специальных» правил обработки сообщения SWIFT. Используя данный заголовок, можно указать что сообщения должно обрабатываться с использованием так называемых правил «Сквозной обработки» (Straight Through Processing или STP), которые поясняют что сообщение идет end-to-end без вмешательства человека (например вы отправили деньги из онлайн банкинга, и оно обработано автоматически компьютером, без участия банковского офицера). Это можно указать следующим образом.
{3:{119:STP}}
Однако, в таком виде заголовок не будет действительным, потому что с Ноября 2018 года теперь для данного заголовка требуется ОБЯЗАТЕЛЬНОЕ значение “Unique end-to-end transsation reference” или UETR, которое введено в рамках Swift Global Payments Innovation (GPI), а с Ноября 2020 года абсолютно все SWIFT MT1xx, 2xx — должны обрабатываться согласно директивы GPI во всех банках без исключений. (Это ещё один повод не верить в сказки людей, ищущих специфичные «приемки» GPI. Все SWIFT сейчас работают с этим протоколом.)UETR код, по своей сути является, глобальный уникальный идентификатор (Globally Unique Identifier или GUID) соответствующий четвертой версии алгоритма генерации, используемого стандартом IETF “RFC4122”. Он состоит из 32 шестнадцатеричных символов, разделенных на 5 частей дефисами следующим образом:
XXXXXXXXXXXX-4xxx-Yxxx-ХХХХХХХХХХХХ
Где:- Х – любой шестнадцатеричный символ в нижнем регистре (от 0 до f)
- 4 – фиксированное значение;
- Y – либо 8, 9, а, b.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Где:{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это порядковый номер блока, может быть только 3.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это тип проверки сообщения, в нашем случае 119 — указывает каким способом обработать FIN сообщения.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Это область проверки, в нашем случае — STP. Запрос SWIFT проверить сообщение по принципу Сквозной обработки.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Указывает на поле UETR.
{3: {119: STP} {121: 8с1с42b5-669f-46ff-b2f2-c21f99788835}}
Само значение UETR.
БЛОК 5 и 6 (ХВОСТ и СИСТЕМНЫЙ БЛОК)
Ранее мы уже обсуждали «Тело сообщения» или БЛОК 4, поэтому мы его пропускаем и рассмотрим два последних блока.
Прежде чем мы двигаться дальше, немного расскажу о бессмысленно сложной концепции сообщений в СВИФТ.
- Вводимое сообщение (Input message) – это сообщение, которое ОТПРАВЛЯЕТСЯ из учреждения, так как это сообщение «вводится» оператором и отправляется учреждением в другое учреждение.
- Выводимое сообщение (Output message) – это сообщение, которое «входит» в учреждение. Так что это сообщение выводится SWIFTNet и принимается учреждением.
Для вводимых сообщений эти блоки не проблема, потому что заголовки используются только для указания того, было ли сообщение предназначено для обучения/ тестирования, или это возможный дубликат (копия сообщения):
{5:{TNG:}}{S:{SPD:}}
Где TNG – означает TRAINING (обучение), а SPD означает Possible Duplicate (Возможный дубликат).Однако, для выводимых сообщений, все немного сложнее, и системный блок может выглядеть так:
{5:{MAC:13461AEF}{CHK:4A3367FD3D76}{TNG:}}{S:{SPD:}{SAC:}{COP
} {MDG:5E87F8F390E5FB886E8311E4D7C994371FA9AF3119B2C314DAE4583 8AFF08AC}}
Разбивая эти значения получим следующее.Хвост ({5:})
MAC – код аутентификации сообщения, рассчитанный на основе всего содержимого сообщения с использованием секретного ключа, который был получен от банка получателя, и секретного алгоритма;
CHK – это контрольная сумма PKI сообщения, используемая для гарантии того, что сообщение не было повреждено при передаче.
TNG – отметка, указывающая, является это сообщение тестовым или обучающим.
Системный блок ({S
SPD – возможный дубликат
SAC – отметка об успешном заверении и авторизации, она присутствует только в случаях если проверка подписи прошла успешно или авторизация и проверка RMA (Application Management) прошла спешно.
COP – указывает что это основная копия сообщения;
MDG – HMAC256 сообщения с использованием ключей LAU
И если вы понимаете логику, то указание того же MAC, или CHK в СВИФТе отправки — не возможно. Так как их вам может выдать и отпечатать только принимающий банк, банк отправитель эти значения знать не может.
Разобравшись с логикой сообщения SWIFT, перейдем непосредственно к отправке сообщений.