Что такое STIR/SHAKEN?

6 сентября 2021, 12:41

Как это работает?

STIR/SHAKEN (Secure Telephony Identity Revisited / Signature-based Handling of Asserted information using toKENs)  это новая технология, которую телекоммуникационная отрасль использует для борьбы с телефонным мошенничеством. Мы все получали спам-звонки, и некоторые из нас, возможно, даже получили звонок с Caller ID абонента, который нам хорошо известен, но в итоге оказывались кем-то другим. Это было серьезной проблемой в течение многих лет, но с помощью STIR/SHAKEN мы можем резко снизить вероятность того, что это произойдет.

Технология STIR/SHAKEN  основана на сертификатах Х.509, использует закрытые и открытые ключи для идентификации источника вызова. Это устанавливает цепочку доверия от одной организации к другой. Доверенные поставщики будут хранить закрытый ключ, который они используют для подписи заголовков SIP (в частности, заголовок удостоверения будет иметь эту подпись), и они предоставят открытый ключ другим пользователям для загрузки и проверки по закрытому ключу. В этом заголовке хранится много информации, включая аттестацию, идентификатор вызывающего абонента, URL-адрес открытого ключа и многое другое. Аттестация будет использоваться для определения того, какой уровень доверия пытается установить этот звонок. Оттуда получатель вызова может решить, что он хотел бы сделать с этой информацией. :

Вот пример того, как может выглядеть заголовок идентификатора

Identity: eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovL3Rlc3RpbmcxMjMifQ==.eyJvcmlnIjp7InRuIjoiMTIzNDU2NyJ9LCJhdHRlc3QiOiJCIiwib3JpZ2lkIjoiYXN0ZXJpc2siLCJpYXQiOjE1OTA1ODgzODV9.MEUCIQCmINlklk+fCxEEjgbbwE5X7DAEy19aPRfLvypXrKUwpwIgaDtEzKZoGRa/Omof9iC6tPQPzsKazN1hygDWOc9uWXQ=;info=alg=ES256;ppt=shaken

Заголовок, payload и подпись кодируются BASE64 и разделяются точками. Вот пример заголовка:

eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovL3Rlc3RpbmcxMjMifQ==

Если расшифровать BASE64 (через https://www.base64decode.org например) то получим:

{"alg":"ES256","ppt":"shaken","typ":"passport","x5u":"http://testing123"}

Заголовком является JSON-объект, как миниму содержащий алгоритм кодирования, ppt, тип и URL публичного ключа. На момент написания этой заметки ppt должен иметь значение “shaken и тип - “passport”..

Теперь payload:

eyJvcmlnIjp7InRuIjoiMTIzNDU2NyJ9LCJhdHRlc3QiOiJCIiwib3JpZ2lkIjoiYXN0ZXJpc2siLCJpYXQiOjE1OTA1ODgzODV9

После расшифровки BASE64 получим:

{"orig":{"tn":"1234567"},"attest":"B","origid":"asterisk","iat":1590588385}

Payload является также JSON-объектом, который содержит  номер caller ID, аттестацию, ID оригинатора и метку времени. Большая часть приведенной здесь информации будет использована для сравнения с условиями, которые необходимо выполнить для успешного выполнения вызова.

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

info=alg=ES256;ppt=shaken

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

Конфигурация STIR/SHAKEN


Астериск уже имеет встроенный механизм поддержки STIR/SHAKEN. Это реализовано в виде опции в секции “endpoint” файла pjsip.conf:

[my_endpoint]
type=endpoint
stir_shaken=yes

По умолчанию для этого параметра установлено значение нет. Если вы хотите, чтобы ваши звонки поддерживали STIR/SHAKEN, вам нужно включить эту опцию для этих конечных пиров. Это все, что вам нужно сделать в pjsip.conf. Остальное настраивается в файле stir_shaken.conf. Вот пример того, как может выглядеть этот файл конфигурации:

[general]
ca_file=/etc/asterisk/stir/ca.crt
ca_path=/etc/asterisk/stir/ca
cache_max_size=1000
curl_timeout=2
signature_timeout=15

[my_cert]
type=certificate
path=/etc/asterisk/stir/mycert.pem
public_key_url=http://testing.com/test.crt
caller_id_number=1234567
attestation=C
origid=MyAsterisk

Использование STIR/SHAKEN в Диал-плане


Еще одна интересная вещь, которую вы можете сделать, - это проверять результаты STIR/SHAKEN в диалплане. Функция STIR_SHAKEN сообщит вам результат проверки, чтобы вы могли использовать его по своему усмотрению. Возможными результатами являются “Проверка отсутствует”, “Ошибка подписи”, “Несоответствие проверки” и “Проверка пройдена”. Если результат “Проверка отсутствует”, это означает, что не было никакой информации для обработки (без заголовка идентификации). “Несоответствие проверки” означает, что информация внутри полезной нагрузки не соответствует информации в сообщении SIP. “Проверка пройдена” означает, что проверка ПЕРЕМЕШИВАНИЯ/ВСТРЯХИВАНИЯ прошла успешно. “Ошибка подписи” означает, что либо подпись и открытый ключ не совпадают, либо подпись не удалась по другой причине. Основываясь на этих результатах, вы можете выбрать действия, которые можно предпринять. Вот несколько примеров:

exten => example1,1,STIR_SHAKEN(count)

exten => example2,1,STIR_SHAKEN(0, verify_result)

exten => example3,1,STIR_SHAKEN(5, identity)

exten => example4,1,STIR_SHAKEN(2, attestation)

Вы уже знаете, что означает verify_result, но есть и другая информация, которую также можно получить и обрабатывать.
Если просто вызвать функцию count, она вернет, сколько существует идентификаторов STIR/SHAKEN.
Затем вы можете просмотреть их все и получить информацию по каждому. Вот тут-то и появляются цифры. Чтобы получить результат проверки, вы должны сначала ввести индекс удостоверения, для которого вам нужна информация, а затем имя нужной вам информации. В настоящее время вы можете получить verify_result, идентификацию и аттестацию.

Выводы


Вот и всё как это устроено! Настройка довольно минимальна, но влияние, которое она окажет на клиентов, огромно. Выполнив описанные выше действия по настройке Asterisk для STIR/SHAKEN, вы сможете предотвратить несколько спам-звонков, сэкономив время и деньги. В будущем, по мере дальнейшего развития технологий и промышленности, будет проделана дополнительная работа по STIR/SHAKEN, но основа уже заложена и может быть использована сейчас. Попробуйте и помогите нам улучшить Asterisk своими отзывами!