Короткий ответ
#До чего 1ADK может дотянуться
Ни до чего внутри ваших систем. Это свойство архитектуры, а не политика.
В продукте нет поля для адреса репозитория, нет хранилища для деплойного ключа, нет SSH-клиента и нет ни одного коннектора в сторону клиентской среды. Настроить неправильно нечего, потому что настраивать нечего.
Любой обмен начинается с вашей стороны по HTTPS: человек загружает файл или подключённый вами кодовый агент открывает задание и спрашивает те, что его ждут. Сам 1ADK соединение в вашу сторону не открывает никогда, и подключение агента не даёт ему ничего, чем такое соединение можно было бы открыть.
Почему сделано именно так
Альтернатива — SaaS, у которого лежит персональный токен доступа к репозиторию каждого клиента, — собирает огромный риск в одной точке. Один скомпрометированный поставщик означает компрометацию исходников всех его клиентов. 1ADK построен так, что его взлом не даёт никому доступа ни к одной строке кода ни одного клиента, потому что этого кода у него никогда не было.
#Что 1ADK хранит
| Вид | Примеры | Где живёт |
|---|---|---|
| Аккаунт и организация | Ваш адрес почты, название организации, тариф, заведённые вами проекты | Управляющий контур |
| Операционный след | Задания на анализ, состояние пакетов, когда прошла запись, что не удалось | Управляющий контур |
| Техническая картина | Имена компонентов, относительные пути, связи, описания, утверждения, ссылки на источники, открытые вопросы, охват | Собственное изолированное хранилище проекта |
| Пришедший пакет | Тот JSON-файл, который сделал ваш агент, — загрузили вы его сами или прислала подключённая машина | Карантин, пока по нему не принято решение |
| Открытые вами подключения | Какую машину вы подключили и как она себя называет, когда она обращалась в последний раз, и односторонняя свёртка выданного ей ключа | Управляющий контур |
Шестой строки нет. Ни исходного кода, ни значений конфигурации, ни содержимого баз, ни каких-либо ваших учётных данных — и самого ключа подключения тоже нет: он хранится свёрткой, и прочитать его обратно нельзя.
#Путь пакета
Четыре рубежа, и на третьем стоит человек.
-
Карантин при поступлении
Пришедшие байты попадают туда, где нет ни одного хранилища проекта и куда остальной продукт не дотягивается. Ничего ещё не разобрано.
-
Проверка, включая поиск секретов
Файл сверяют со схемой пакета, ограничением по размеру и тем заданием, к которому он себя относит. Свободный текст просматривают на формы, которые принимают учётные данные: bearer-заголовки, ключи доступа AWS, блоки приватных ключей, начала токенов Stripe и Slack. Пакет с такой находкой отклоняют целиком; ничего частичного не сохраняют.
Это второй рубеж обороны. Первый — инструкция, запрещающая значения и секреты, а третий — то, что в проект ничего не пишется, пока человек не прочитает пришедшее и не одобрит его. Ни один из трёх не является доказательством, и страница их так не подаёт.
-
Решает человек
Проверенный пакет ждёт явного одобрения кем-то с вашей стороны. Без него в хранилище проекта не попадает ничего.
-
Один писатель, проверенная блокировка
Одобренный пакет передают единственному писателю этого проекта: он держит блокировку, перепроверяет, что всё ещё держит её, пишет короткими транзакциями и при любом сбое оставляет хранилище нетронутым.
#Как проекты отделены друг от друга
Один проект — одно логически изолированное хранилище. Не одна схема в общей базе с колонкой арендатора, а отдельное хранилище с отдельным адресом.
Следствие, которое стоит проговорить: в продукте нет запроса, который возвращает знание сразу о двух проектах. Забытый фильтр по арендатору — классическая утечка в мультиарендных системах, и у выбранной здесь формы хранения такого способа сломаться просто нет.
Публичный сайт, который вы сейчас читаете, — отдельное приложение без доступов к базе платформы, без путей к хранилищам и без приватных секретов. Это не обещание, а проверка во время работы: приложение снимает собственные соединения с базой при старте, поэтому случайное обращение к данным падает, а не подключается куда-то втихую.
#От чего эта граница не защищает
Та часть страницы про безопасность, которую и стоит читать.
Граница 1ADK настоящая и узкая. Вот что остаётся снаружи.
- Кодовый агент читает ваш код. Тот агент, который выполняет инструкцию, видит репозиторий, и если он облачный, то к увиденному применяются условия его поставщика. Это уже верно для любой другой задачи, которую вы этому агенту даёте, — но границей 1ADK это не покрыто, и именно поэтому сайт никогда не обещает, что ваш исходный код не увидит никто посторонний.
-
Метаданные бывают чувствительны сами по себе. Путь
app/Services/AcmeBankIntegration.phpназывает клиента. КомпонентLayoffQueueназывает план. Предпросмотр метаданных существует ровно для того, чтобы посмотреть на это честно до того, как принимать решение. - Карта остаётся картой. Картина, которую строит 1ADK, показывает читателю, где что лежит и какие части никто не проверял. В чужих руках это полезный документ. Его и защищают как документ — но он не безобиден по своей природе только потому, что это не исходный код.
- Кто может войти в ваш аккаунт, тот всё это и прочитает. Безопасность аккаунта общая: скомпрометированный пароль с вашей стороны — это компрометация картины, и снизить это вторым фактором 1ADK пока не предлагает.
- 1ADK не ищет уязвимости в вашем софте. Это не сканер. Чистая карта не означает, что ваша система защищена.
#Аккаунты и доступ
- Вход клиента — почта и пароль с восстановлением. Двухфакторной аутентификации для клиентских аккаунтов пока не существует.
- Внутренние администраторские учётные записи создаются из командной строки, никогда самостоятельно, и требуют второго фактора. Восстановление администратора — тоже консольная операция; ссылки для сброса у него нет.
- Клиентское приложение и внутренняя консоль — одна кодовая база и две зоны безопасности: разные хосты, разные группы маршрутов, разные сессионные куки, разные заголовки.
- Непонятная авторизация означает отказ, а не разрешение. Там, где продукт не может установить, что вам это можно видеть, он этого не показывает.
#Как система ведёт себя при сбое
Правило, которое стоит опубликовать, потому что оно решает, что будет в худший день.
- Доступность деградирует мягко. Безопасность и целостность отказывают наглухо.
- Область, которую не удалось прочитать, сообщает о своём состоянии на месте, а не гасит страницу целиком. Запись, целостность которой не подтверждена, не фиксируется. Когда очередь записи недоступна, записи ждут: продукт никогда не переключается на прямую запись, потому что обход блокировки — это ровно то, как два писателя портят одно хранилище.
- Если проще Если часть продукта не загрузилась, страница говорит, какая именно, и продолжает работать. Если продукт не может установить, что действие разрешено, а данные целы, он отказывает.
То же правило видно и в самом знании: неподтверждённое утверждение помечают как неподтверждённое, а не выдают за факт, и компонент, чьё удаление подтвердить не удалось, не объявляют удалённым.
#Чего 1ADK не утверждает
Сегодня неправда — и нигде не подразумевается
- Нет ни SOC 2, ни ISO 27001, ни любой другой сертификации.
- Нет отчёта о независимом тестировании на проникновение.
- Нет двухфакторной аутентификации в клиентских аккаунтах.
- Нет опубликованного списка субобработчиков сверх того, что сказано на странице о приватности.
- Нет гарантий доступности и нет соглашения об уровне обслуживания.
- Нет утверждения, что анализ находит все компоненты и что пустая находка означает пустую систему.
Это пробелы, а не позиция. Они перечислены, потому что страница про безопасность, где есть только сильные стороны, — самая неинформативная из возможных, и потому что покупатель, который узнаёт об одном из этих пунктов после оплаты, будет прав в своей претензии.
#Как сообщить об уязвимости
Напишите на security@1adk.com и приложите достаточно деталей, чтобы проблему можно было воспроизвести. Письмо читает человек и отвечает человек.
Программы вознаграждений нет, но и юридических угроз нет тоже: добросовестное сообщение о настоящей дыре — это услуга, и к ней так и относятся. Пожалуйста, не проверяйте это на чужих проектах и не публикуйте рабочий эксплойт до того, как появилась возможность починить.
Вы сообщаете названной компании, а не безымянному адресу: FinMV SIA, регистрационный номер 40203378371, страна регистрации — Латвия, дата регистрации — 8 февраля 2022.
Телефонной линии и почтового адреса нет. Ящик выше — это весь список, и его читает человек.
Вопросы, которые задают на самом деле
Техническая картина систем, которые в нём заведены: имена компонентов, относительные пути, связи, описания и открытые вопросы. Это действительно чувствительно — это карта того, где что лежит, — но это не ваш исходный код, не ваши учётные данные и не ваши данные, потому что ничего из этого 1ADK никогда не хранил.
Нет. В продукте нет ни одного исходящего соединения от 1ADK к машине клиента и нет ни одного доступа, который такое соединение разрешал бы. Любой обмен начинается с вашей стороны по HTTPS.
Ключ на один проект. Он позволяет этой машине открыть задание по этому проекту, прочитать инструкцию ждущего задания, отправить обратно одно описание по нему и спросить, что с ним стало. Это закрытый список, и ни одна из этих возможностей не принимает ни адреса, ни пути, ни команды, — направить её куда-то ещё нечем. Ни до какого другого вашего проекта он не дотягивается. Он выдан машине, а не 1ADK: он разрешает обращения в сторону 1ADK и ничего в обратную сторону. Отозвать его можно на странице подключения, и отзыв срабатывает на следующем обращении этой машины. 1ADK хранит только одностороннюю свёртку ключа, поэтому прочитать его из базы нельзя.
Нет. 1ADK — новый продукт, и ничего из этого у него нет. Заявить обратное значило бы поставить на эту страницу первое, что покупатель сможет опровергнуть, поэтому это сказано здесь, а не опущено.
Для клиентских аккаунтов пока нет: вход сегодня — почта и пароль плюс восстановление. Внутренние администраторские учётные записи, которые создаются только из командной строки и никогда самостоятельно, второй фактор требуют. Клиентский второй фактор — это пробел, и он назван пробелом.
У каждого проекта своё изолированное хранилище. В продукте нет запроса, который читает сразу два проекта, а у публичного сайта нет вообще никаких доступов к базе: это отдельное приложение, которое не дотянулось бы до данных проектов, даже если бы его скомпрометировали.
Напишите на security@1adk.com. Приложите достаточно деталей, чтобы её можно было воспроизвести. Программы вознаграждений нет, юридических угроз тоже нет: на сообщение отвечает человек.