ТЕХНОЛОГИИ

Как работает Axis

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

axis · по умолчанию
Подсистемы
8
Слои проверки
15
Срабатывание анти-нюка
4 действия за 10 с
Медленный нюк
24 действия за 15 мин
Блок рейда
8 входов за 10 с
Журнал
цепочка SHA-256
Публичная подпись
Ed25519
IP-адреса
scrypt · 16 МБ на хеш
Резервные копии
AES-256-GCM
АРХИТЕКТУРА

От события Discord до ответа

Axis слушает шлюз Discord: каждую запись журнала аудита, каждого нового участника, каждое сообщение и каждое взаимодействие. ONYX передаёт событие восьми подсистемам, которые решают, нужно ли действовать. Каждое решение записывается в журнал.

DISCORDONYXОТВЕТЖурнал аудитаВходыСообщенияВзаимодействияСнять ролиБан или кикЗакрыть входУдалить сообщенияОповестить стаффGATEВходSHIELDЩитSURGEВолнаFILTERФильтрLEDGERЖурналRECALLВосстановлениеTRACEСледRELAYСвязьВсё попадает в журнал: цепочка SHA-256, подпись Ed25519
DISCORDЖурнал аудитаВходыСообщенияВзаимодействия
ONYXGATESHIELDSURGEFILTERLEDGERRECALLTRACERELAY
ОТВЕТСнять ролиБан или кикЗакрыть входУдалить сообщенияОповестить стафф
GATEВходПроверяет новых участников и узнаёт тех, кто возвращается с другого аккаунта.
SHIELDЩитОстанавливает массовое удаление, баны и раздачу прав — даже от администратора.
SURGEВолнаЗамечает аккаунты, входящие одновременно, и закрывает вход.
FILTERФильтрСпам, ссылки, массовые упоминания и мошенничество в сообщениях.
LEDGERЖурналКаждое действие в цепочке хешей, с копиями удалённого.
RECALLВосстановлениеЗашифрованные копии каналов, ролей и прав и их восстановление.
TRACEСледДосье участника: кто пригласил, мультиаккаунты, имена и наказания.
RELAYСвязьУчёт и очистка вебхуков и контроль новых.
АНТИ-НЮК · SHIELD

Сколько весит каждое действие

Нюк — это серия разрушительных действий. Axis суммирует вес того, что делает каждый аккаунт, в окне 10 секунд и останавливает его на 4. Удаление весит больше создания, а правка — мало, поэтому перестройка сервера ничего не запускает.

Иллюстрация
Аккаунт с правами администратора
  1. Удаляет #general+1
  2. Создаёт вебхук+0,75
  3. Удаляет роль @Модерация+1
  4. Переименовывает #правила+0,25
  5. Удаляет #объявления+1
0порог 4
Остановлен: лишён ролей с правами
ДействиеВес
Удаление канала, роли, эмодзи или стикера; бан, кик или чистка; смена ролей участника1
Создание вебхука0,75
Создание канала или роли; удаление вебхука0,5
Правка каналов, ролей, прав или сервера; создание эмодзи или стикеров; разбан0,25
Медленный режим или закрытие прав — так работает блокировка во время рейда0
Медленный нюк24 действий с весом за 15 минут тоже срабатывают — для тех, кто удаляет понемногу и делает паузы.
Потолок для всехДаже доверенный стафф не может превысить 20 действий за 10 секунд.
Атакующие ботыИх банят; если Discord не позволяет — кикают; если и это нельзя — их роль лишается прав.
Отмена ущербаВоссоздаёт каналы и роли с правами и возвращает каждую роль тем, у кого она была.
Первые 48 часовПравила о правках только предупреждают, пока Axis изучает работу сервера. Правила о разрушении действуют с первой минуты.
РЕЙДЫ · SURGE

Рейд виден по скорости входа

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

Иллюстрация
Вход закрыт
8 / 10 s · 2 ждут
ПРОВЕРКА · GATE

15 слоёв, чтобы узнать вернувшегося

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

СоединениеIP · IPv6 /64Тот же IP или тот же блок сети. Для IPv6 сравнивается весь /64: менять адрес внутри него ничего не стоит.
Анонимные сетиTor · VPN · проксиВыходы Tor, VPN и прокси дата-центров.
Отпечаток устройстваcanvas · WebGL · GPUУзнаёт устройство, даже если сменилось соединение.
Защитный cookieпостоянная меткаМетка в браузере, которая переживает смену IP и отпечатка.
Связанные аккаунтыSteam · SpotifyОдин аккаунт Steam или Spotify, подключённый к двум аккаунтам Discord. Только если сервер это включил.
Доказательство работыадаптивная сложностьВычисление в браузере, которое усложняется при признаках риска. Делает фермы ботов дороже.
Кто пригласилдоверие к пригласившемуАккаунт, приглашённый тем, кто уже привёл группу новых аккаунтов.
Приглашениятемп · vanityВсплески приглашений и смена персонального URL перед рейдом.
Общие сетиCGNAT · школы · офисыМобильный интернет или школьный Wi-Fi: там одного IP мало, чтобы связать аккаунты, и Axis это учитывает.
Роль проверенноговыдаёт только AxisЕсли кто-то выдал роль вручную, чтобы обойти вход, это не засчитывается.
ПоведениеоценкаЧто делает аккаунт после входа: кому пишет, какие ссылки отправляет и с какой скоростью.
Возраст аккаунтановые аккаунтыСам по себе ничего не доказывает. Вместе с другими сигналами — учитывается.
Отпечаток по частямчастичное совпадениеСравнение по частям: сменить браузер или экран недостаточно, чтобы выглядеть другим человеком.
Согласованностьсоединение и браузерIP из Амстердама при часах, языке и раскладке Мадрида указывает на VPN на самом компьютере.
Телефонпроверка DiscordТребовать телефон, подтверждённый в Discord. Номер стоит денег, IP — нет.

Сильные совпадения — cookie или то же устройство в необщей сети — задерживают аккаунт. Слабые открывают проверку для стаффа. Мобильный интернет, одинаковая модель телефона или школьный Wi-Fi сами по себе никогда не достаточны.

ЖУРНАЛ · LEDGER

Журнал, который нельзя переписать незаметно

Каждое действие связано с SHA-256-хешем предыдущего: изменение одной строки ломает всё, что идёт после. Корень дерева Меркла (RFC 6962) подписывается Ed25519 и публикуется, поэтому переписать всю историю тоже не выйдет незаметно.

Иллюстрация
событие #1041ChannelDelete #generalprev 0000000000…hash 1e7d0ebe3f…
событие #1042MemberRoleUpdate -Adminprev 1e7d0ebe3f…hash 65c26df9b3…
событие #1043ChannelCreate #generalprev 65c26df9b3…hash b32d4c6672…
событие #1044MemberBanAdd 8xx…prev b32d4c6672…hash d3e850978c…
Корень МерклаПодпись · Ed25519753d48f7f30d3f9cecaa7c…
КвитанцииНаказанный может проверить, что решение было в журнале в тот день, с доказательством включения и не видя остального.
Копии удалённогоУдалённые сообщения и их файлы остаются в журнале сервера.
Доступ оператораЕсли команда Axis открывает данные сервера, это записывается в журнал этого сервера, и его стафф получает уведомление.
ДАННЫЕ

Что Axis хранит, а что нет

Хранит

  • IP — только как хеш scrypt (16 МБ памяти на хеш) с ключом, которого нет в базе данных.
  • Отпечаток браузера — только как HMAC-SHA256.
  • Записи проверки — 90 дней; записи наказанных аккаунтов — пока действует наказание.
  • Копии сервера — зашифрованные AES-256-GCM, с ключом, выведенным через scrypt для каждой копии.
  • Отчёты об инцидентах — 180 дней.

Не хранит

  • IP в открытом виде.
  • Личные сообщения между участниками: бот не может их читать.
  • Текст сообщений, которые автомод проверил и пропустил.
  • Платёжные данные: их обрабатывает Lemon Squeezy.
  • То, что анализирует ИИ: сохраняется только вердикт, никогда — кто опубликовал.
ИНФРАСТРУКТУРА

Два узла и ни одного открытого порта

Axis работает на основном узле и на резервном у другого провайдера. Если основной перестаёт отвечать, резервный берёт управление с реплицированной конфигурацией. Веб-сервер слушает только 127.0.0.1, доступ к нему — через туннель Cloudflare с его межсетевым экраном.

БраузерCloudflare · WAFТуннельОсновной узел127.0.0.1Резервный узелпульс
Браузер
Cloudflare · WAF
Туннель
Основной узел · 127.0.0.1Резервный узелпульс
CSP на каждый запросКаждая публичная страница отдаётся с политикой безопасности контента и новым nonce при каждом посещении.
Ограничение частотыПо IP на всех маршрутах и строже на портале проверки и в API.
Публичный статусДоступность в реальном времени и история за 90 дней на /status.
ОГРАНИЧЕНИЯ

Чего Axis сделать не может

Лишить прав владельца сервераDiscord этого не позволяет. Если этот аккаунт украдут, Axis предупредит, но остановить его не сможет. То же касается любой роли выше роли Axis — поэтому его роль ставится наверх, а панель предупреждает, если это не так.
Гарантировать, что ни один мультиаккаунт не пройдётКупленный аккаунт, новый телефон и мобильный интернет могут пройти вход. По-настоящему это удорожает проверка телефона в Discord.
Вернуть то, что было раньшеВосстановить можно только сохранённое. Сообщения, удалённые до добавления Axis, не вернутся.
Читать личные сообщенияНе читает и не может.

Добавьте Axis и проверьте сами

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

Статус сервиса →