Встречи и звонкиAsterisk

Безопасность — Asterisk

Что CLI Asterisk читает и хранит, где лежит пароль базы и что видит агент.

Что общего у всех CLI WireCat (связка ключей, разрешения, MCP и то, что никогда не попадает в лог), описано на общей странице о безопасности. Здесь только то, что касается именно pbx.

pbx хранит настройки в config.json, а состояние в папках, которые показывает pbx doctor. Он читает АТС и никогда в нее не пишет: Master.csv и аудиозаписи открываются только для чтения, а сеанс базы открывается только для чтения и отправляет SELECT по таблице CDR, со значениями в виде параметров. Дайте ему пользователя, которому больше ничего не разрешено, как показано на странице подключите Asterisk, и не открывайте базу и AMI в интернет.

session start хранит пароль базы в связке ключей ОС или в закрытом файле там, где связка ключей не работает. Пароль читается скрыто или из stdin, никогда из командной строки, и проверяется, прежде чем его сохранить. Он уходит только драйверу базы и никогда не попадает в ответ, ошибку, запись запуска или лог. Профиль с локальным Master.csv пароля не хранит.

Что лежит в хранилище

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

Речь распознается на этом компьютере. Ни аудиозапись, ни расшифровка не уходят во внешний сервис.

Аудиозаписи и согласие

Запись телефонного разговора, ее хранение и перевод в текст может требовать согласия участников звонка, а как именно, решает закон вашей страны (в России, например, 152-ФЗ о персональных данных). Сообщать звонящим, что звонок записывается, и хранить записи не дольше разрешенного обязан владелец АТС. pbx читает только аудиозаписи, которые АТС уже сделала, и не удаляет ни одной из них.

pbx personal mcp serve --http слушает только на 127.0.0.1, для браузерных приложений, которые доходят до него через ваш собственный туннель. Каждое приложение входит по одноразовому коду, а сервер хранит хеш каждого выданного входа в папке состояния, доступной для чтения только вам. pbx personal mcp revoke забывает их все.

Запись запуска хранит командную строку в том виде, как вы ее ввели, поэтому pbx runs show показывает, что было запущено. Секрет при этом сохраняется как [redacted]: параметр с именем вроде token или password, пароль в ссылке, длинная непрозрачная строка. Номер телефона заменяется на [redacted] внутри введенного слова, включая текст сообщения: номер, записанный с «+» и кодом страны, или от 11 до 15 цифр подряд, так что длинный id такой длины тоже скрывается. Чтобы не хранить ни одного введенного слова, выполните pbx personal config set record_input false.

Секрет распознается и по внешнему виду, в записи запуска и в сохраненном сообщении об ошибке: токен известного формата (GitHub, OpenAI, Slack, AWS, Stripe, npm и подобные), учетные данные Bearer, случайная на вид строка из 20 и более символов и случайная на вид последовательность из 20 и более шестнадцатеричных символов в нижнем регистре, например шестнадцатеричный ключ или полный хеш коммита. Значение после имени секрета тоже скрывается, будь то после =, : или пробела: password=, API_TOKEN=, password hunter2, pin 1234. Некоторые секреты похожи на обычные слова и остаются: значение из одних букв после имени секрета и пробела (pin this message остается), шестнадцатеричный ключ в верхнем регистре, короткий хеш коммита или UUID, короткий пароль, введенный без имени секрета перед ним, и секрет внутри ссылки или пути к файлу, если он не известного формата и не стоит после имени секрета.

config.json сохраняется доступным для чтения только вам (0600), а его папка создается только для вас (0700). Файл или папка, созданные старой версией, могут быть открыты другим пользователям компьютера: pbx doctor выводит каждый такой путь в files.problems и печатает chmod, который это исправляет. В Windows это не проверяется. Об уязвимости сообщайте так, как описано в SECURITY.md.