Большинство программистов учатся постоянно. Мы читаем книги гуру и смотрим код профессионалов. И спорим какой метод лучше и какое решение красивее.
Но представим себе что есть суперпрофессионал, код которого нам удалось посмотреть. Чему мы можем научиться у него? И какие выводы мы сможем сделать?
Итак — искусственные иммунные системы.
Реальная иммунная система — крайне сложная и до конца непонятая вещь, состоящая из клеток с долговременной памятью, чей вес сопоставим с весом человеческого
Описывать всю иммунную систему — дело затратное, и подробная статья больше подошла бы для портала страдающих бессонницей, чем для Хабра. Поэтому я очень поверхностно пробегусь по ключевым точкам, пропустив многие не столь критичные с точки зрения воспроизведения in silico (хотя и очень важные in vivo).
Сама иммунная система (далее ИС) обычно разделяется на две части — врожденная и адаптивная. Однако природа — плохой системный архитектор, и уровни абстракции не любит. Зато любит использовать унаследованные решения. Человеческая ИС — это конгломерат древних алгоритмов и более новых разработок и не всегда их легко разделить.
Поэтому попробуем сначала перечислить объекты и процессы.
1. Лимфоциты. Клетки составляющие основу иммунной системы, абстрактный базовый класс для специальных версий клеток (B-клеток и T-клеток). Некоторые типы лимфоцитов несут на своей поверхности молекулярный детектор (Major histocompatibility complex, MHC), отвечающий за связывание с молекулой белка (ближайшая аналогия – пара ключ и замок). Этот детектор может быть уникален в пределах системы. Многие типы лимфоцитов могут менять свой тип в ходе созревания, имеют состояния, которые переключаются под воздействием различных активаторов.
1.1. T-лимфоциты. Клетки, насчитывающие много подвидов и специализаций. От данного базового класса наследуются различные типы, которые могут менять свою специализацию.
1.1.1 T-киллеры (Tk), клетки киллеры. Штатные палачи на службе тотального контроля, зачищающие территорию от своих. Они уничтожают раковые клетки, поврежденные клетки или клетки инфицированные вирусом.
1.1.2 T-хелперы (Th). Клетки осуществляющие активацию других клеток и переносящие информацию.
1.2. B-cells. Клетки отвечающие за адаптивную реакцию организма. B-cells за время жизни могут менять свой геном и отращивать себе разные детекторы на разных стадиях развития.
1.2.1 Плазматические B-клетки. Основной поставщик антител.
1.2.2 Клетки долговременной памяти, несут информацию об механиме производства антител.
2. Антиген-презентующие клетки (APC). Группа клеток, к которым относятся макрофаги и дендритные клетки (DC). Их назначение – «показать» другим клеткам иммунной системы фрагменты белка, дайджесты, образовавшиеся из клеточных белков путем расщепления их на фрагменты. Фрагмент привязывается к MHC и выставляется на клеточной мембране. Фактически это имитация «замка» для подбора ключа.
2.1. DC, дендритные клетки. Именно с ними связана в первую очередь концепция “теории опасности”. Большую часть жизни они неактивны, однако в случае проблем активизируются и начинают работать.
3. Антиген (Ag). Та часть внешней угрозы, которая детектируется иммунной системой. Обычно это белки или токсины.
4. Антитело. Белки специальной Y-образной формы со способностью связывания с антителом, они же иммуноглобулины. Включают в себя молекулярные “шарниры”, позволяющие удерживать различные дайджесты. Токсины блокируются связыванием с антигеном напрямую. Если же поражена клетка — то антитело связывается с комплексами на поверхности клетки и метит ее для последующего уничтожения.
Когда мы говорим о метафоре “ключ-замок” то надо понимать что это только метафора.
Ключ либо подходит к замку, либо не подходит – это бинарный атрибут. У молекулярного детектора значение “подходит-не подходит” — вещественное и называется сродством (affinity). Это очень важный момент и он используется для подстройки сродства на лету.
Определенная часть ИС (в первую очередь врожденная подсистема) в принципе соответствует традиционной схеме детектор-реакция, которая применяется и в современных антивирусах. Но не вся. В реальной ИС есть кое-что не существующее в наших системах защиты, процессы делающие атаку нулевого дня очень маловероятной.
Впрочем к этому мы еще вернемся, а пока перейдем к описанию процессов (очень сокращенному).
1. Апоптоз — это контролируемая гибель клеток, обычный геноцид в отдельно взятом организме с согласия центральной власти и широкой общественности. Иногда по каким-то причинам клетку собственного организма надо уничтожить. Плановый вывод использованного материала из употребления. Сборщик мусора, он же биореактор. При этом целостность мембраны сохраняется до конца.
2. Некроз — это внеплановое разрушение, например внешней атакой. При этом проницаемость мембраны падает, из клетки происходит выброс и организм в состоянии зафиксировать массовую гибель. Эта смерть, вызванная внешними причинами, и является сигналом для старта. После этого сигнала мобилизуются силы организма, повышается температура (с повышением скорости необходимых химических реакций), ускоряется кровоток, включаются механизмы клеточного обучения, чтобы атака была встречена во всеоружии.
В разнице этих двух процессов лежит сущность того, что называется Danger Theory.
Это относительно новая теория, ее рождение относят к 1994 году и связывают с именем легендарной Полли Метцингер. Принципиальная граница между понятиями лежит в том, что организм (в отличие от традиционного антивируса) реагирует не на внешние сигналы а на комбинации внутреннего состояния и внешних реакций. Или, говоря другими словами, система является существенно рефлексивной. Она может не знать что кто-то ее атакует. Но она знает когда ей плохо.
Это очень критичная граница.
Фактически мы переходим от простого классификатора “свой-чужой” к сложному детектору аномалий, определяющему момент, когда система начинает терять целостность и необходимо что-то предпринимать. И данный детектор аномалий имеет великолепную поддержку дрейфа концепции (concept drift).
Впрочем, реакция на внешние паттерны в реальной иммунной системе тоже есть.
Костный
Фактически это первая ступень того, что в компьютерном мире называется детектором аномалий (novelty detector).
Последняя точка — это то, что называется affine maturation. Это скоростное изменение генома, соматическая гипермутация. При активации в случае опасности клетка начинает случайно модифицировать геном, подстраивая тем самым детектор, меняя при этом генерализацию, расширяя или сужая пространство захвата, получая возможность более точно ловить конкретный вариант атаки.
А теперь представим себе весь массив сенсоров разбросанных по организму себя любимого. Все эти миллионы клеток, вес которых сопоставим с весом
И каждая из которых имеет уникальный детектор.
Лично меня впечатляют масштабы и возможности подобной системы.
Ни один современный суперкомпьютер несравним с вычислительной мощностью иммунной системы среднего гопника жующего семки, не говоря уже о мобильном кластере таких гопников.
Впрочем, не будем забывать о том, что PM данного проекта (да не пропадут его бэкапы) имел неограниченное финансирование и неопределенные сроки, т.е. то, о чем мы можем только мечтать. Не исключено, что с таким бюджетом мы бы сделали лучше.
По логике повествования я должен был бы дальше описать эквивалент иммунной системы in silico. Однако это занятие более неблагодарное, чем перечислять все варианты генетических алгоритмов.
Дам только названия основных методов, созданных на основе анализа иммунных сетей и показавшихся интересными лично мне. Желающие могут найти описание в соответствующих журналах или просто нагуглить много текста в формате pdf.
DCA – dendritic cell algorithm.
AIRS – artificial immune recognition system
FIN – formal immune networks
CLONALG – clonal selection algorithm
aiNet – artificial immune network для кластеризации и фильтрации
libtissue – библиотека для экспериментов в области иммунных систем
Для профессионалов могу также указать сайт www.dangertheory.com.
Практиков возможно заинтересует сайт www.artificial-immune-systems.org/algorithms.shtml
Ряд алгоритмов портирован в Weka и с ними можно поиграться в личной песочнице.
Перейдем теперь к более близкой автору теме – обсуждению практической реализации в коде. Я имею в ввиду не реализацию алгоритмов, надерганных из кусков препарированной живой системы. Нас интересует целостное понимание.
Ревью кода Главного Программиста, случайно попавшего нам в руки может быть более полезным чем чтение книг практиков С++. Паттерны проектирования Природы сильно отличаются от наших политкорректых ограничений и правил “хорошего” кода. Поэтому в этой статье я делаю акцент именно на общих идеях, а не на конкретных алгоритмах – их слишком много и, следовательно, ни один из них не является полностью рабочим.
Изучение иммунных систем межпрофильными коллективами с участием биологов, математиков и программистов было очень полезным этапом, распределившим немалое количество грантов среди заинтересованных лиц. Open-source библиотеки, алгоритмы DCA, красивый термин Immunocomputing и новый взгляд на проблемы информационной безопасности — это тоже достижения и достижения немалые.
Но что мы хотим получить в конечном результате?
Чему мы можем научиться у Главного Системного Архитектора?
Непосредственно воспроизводить решения природы в железе глупо — иначе на наших автомобилях вместо колес стояли бы металлические ноги. Нейронные сети имеют не так много общего с биологическими нейронами, генетические алгоритмы не являются абсолютной копией реальных процессов воспроизведения двойной спирали.
Ниже я выскажу скромное мнение инженера, не так уж сильно разбирающегося в иммунологии.
1. Мы привыкли классифицировать процессы по своим примитивам, субъективным и строго человеческим. Поэтому все вышеперечисленные алгоритмы реализуют лишь часть того, что мы сумели понять в живой природе. Должна ли будущая AIS иметь в составе детектор аномалий, кластеризатор, обучение с учителем или без него?
Реальная иммунная система не имеет таких компонент в ярко выраженном виде. В отличие от нас, Бог не играет в Лего. Настоящее назначение иммунной системы – даже не разграничение «Я-неЯ», как считалось ранее. Поддержание собственной целостности — это то, чему нет броского названия в буклетах IT-маркетологов. Поэтому когда мы говорим, что AIS включает в себя какой-то компонент – это не совсем правильно. AIS не похожа на классификатор, детектор аномалий или data fusion, хотя имеет соответствующий функционал. Это отдельный термин, при разложении которого на компоненты что-то теряется.
2. Система безопасности не является надстройкой над объектом защиты. Она является частью этого объекта. Она защищает не от атак — мы все живем в постоянной обороне от внешнего мира. Она поддерживает жизнеспособность и целостность объекта в недружелюбной среде. Поэтому глубокая рефлексивность защищаемой системы заложена в нее изначально, ее нельзя прикрепить снаружи отдельным уровнем.
3. Как следствие глубокой рефлексивности, внутренние сенсоры должны быть случайной выборкой из максимально возможного списка состояний компонент и их комбинаций. Тогда защита может отслеживать собственное состояние достаточно полно. В пределе система должна иметь доступ ко всем собственным данным, включая свой код на произвольном уровне детализации. В современных коммерческих системах это выглядит малореальным, если вспомнить все политкорректные правила «хорошего» кодирования и закрытость кода компонент. Машину Геделя сложно создать, придерживаясь стиля и общепринятых практик программирования или рекомендаций экспертов.
4. Система безопасности является индивидуальной по отношению к объекту защиты. Компьютер секретарши в банке может быть защищен от игры в пасьянс. Сендбокс в антивирусной лаборатории должен быть открыт к заражению трояном. В каждом случае понятия “норма” и “опасность” — разные. Бухгалтерский сервер и рендер-ферма слишком отличающиеся вещи и строить их оборону с помощью однократного списка фильтров, паттернов и акцесс-листов бессмысленно.
Для кого-то прочитать политический пост за нелюбимого президента — попытка вторжения. И, следовательно, его киндл должен быть защищен от таких текстов. Понятие “опасность” расширяется в “нежелательное поведение”. Спам-фильтры, порнофильтры, фильтры мнений — это другие рынки, но AIS может быть использована в каждом, создавая в пределе Лемовскую Этикосферу в информационном пространстве.
5. Многоуровневая система защиты — и это не то, про что пишут маркетологи антивирусных компаний. Это конгломерат подсистем, в котором не только каждая компонента имеет свою иммунную систему, но и сам конгломерат защищается с помощью своих правил, независимых от защиты компонентов. Теоретически можно создать защиту корпоративной сети вместе с индивидуальной защитой каждого компьютера – угрозы для компьютера и родительской сети отличаются. И в теории можно создать защиту всего интернета – система масштабируется очень легко.
6. Защита должна быть адаптивной. Это не означает необходимость ее тренировки каждый раз при новой инсталляции. Но она должна эволюционировать с появлением новых угроз не дожидаясь апдейтов модного антивируса.
7. Реальная иммунная система – вещь с большим количеством объектов, но малым количеством типов отношений, такой низкий уровень связности малодоступен современным архитекторам. Не существует единого центра координации, хотя дендритные клетки и сама среда выполняют часть работы по взаимодействию. Это чистая распределенная система, максимально использующая распределенность и параллелизм.
8. Самый главный и последний пункт. Не существует бизнес-модели для массового применения подобных систем, как не существовало бизнес-модели пиринговых сетей до Напстера и индустрии CDS. Это было подтверждено людьми из нескольких антивирусных компаний, с которыми я общался. Впрочем, это было ясно с самого начала, антивирусный рынок слишком велик и капитализирован для резких движений и революционных изменений.
И, в заключение, несколько мыслей по возможной реализации прототипа.
Детекторы аномалий — ключевая точка. Их существует много, от one-class классификаторов, до вероятностных моделей. Однако это очень грубый уровень, дающий множество FP в реальных ситуациях. Для исследовательских прототипов можно было бы попробовать инкрементальные деревья решений, например асимметричные random forests из one-class very fast decision tree.
В идеале это должна быть генетика, если забыть ее жадность к ресурсам и слабую генерализацию.
Сенсоры — случайная комбинация состояний системы с хорошей селективностью. Возможно получать их с помощью генетики (что несколько затратно), либо простым Монте-Карло. В любом случае конструирование сенсора должно производиться полностью автоматически, без участия человека – их должно быть слишком много.
Одним из примеров реализации является DASTON — набор программных сенсоров с минимальным интеллектом в хипе исполняемой программы.
Дрейф концепта (concept drift). Компьютер могут передать от бухов девам или геймерам. И “нормальное” состояние сразу станет “ненормальным”. Система должна иметь возможность забыть неважное для нового окружения. Но помнить общее для обеих моделей поведения. Т.е. должен быть характерный период переинициализации или переобучения. Сама техника affine maturation позволяет это сделать, однако ограничения этой техники пока не ясны.
Система должна уметь отделять общее от частного, обмен правилами и компонентами детекторов между компьютерами возможен, но как вариант коэволюции, без возможности компроментации со стороны соседней машины. Что даже в случае коэволюции достаточно сложно гарантировать.
Реальная иммунная система часто рассматривается как детектор аномалий. Как я уже упоминал ранее это в корне неверно. Организм знает, что он болен. Как компьютер или сеть могут получить сигнал о том, что что-то не так?
Это очень непростой вопрос. Не существует формальных признаков «больной» системы. Троян отличается от браузера только авторством – оба допускают удаленное управление и закачку апдейтов без согласия пользователя, оба коллекционируют пароли и могут сохранять их удаленно. Что есть здоровый компьютер и что есть больной? Живой организм способен отличить инфекцию от случайного изменения своего состояния наблюдая уровень некроза. Что может наблюдать компьютер? Реакцию пользователя? Счетчик битых файлов? Изменение Колмогоровской сложности системы?
Как только мы ослабляем требования и от «некроза» переходим к абстракции – мы теряем определенную часть логики работы AIS.
Понять, что произошла аномалия — просто. Как автоматически, без участия человека, принять решение на тему — что делать дальше?
Блокировать сетевой адрес являющийся источником аномалий несложно. Большинство коммерческих применений алгоритмов AIS занимаются как раз анализом сетевого трафика. Хотя не факт, что это не корпоративный бухгалтерский сервер на который попал троян. И даже если это так — надо ли из-за этого останавливать начисление зарплаты тысяче злых рабочих, которые имеют свой взгляд на процесс, бухгалтерию и программистов.
Блокировать поток исполнения на компьютере тоже несложно. Ну а если это подмененный драйвер файловой системы? Тогда такое действие равносильно выключению компьютера и это, безусловно, высшая мера информационной защиты, только вот полезна ли она?
По условию задачи система должна стабилизировать свое функционирование. И минимизировать ущерб от атак. Выключение компьютера или остановка сервера для чистки или восстановления его из бэкапа — уже ущерб, DoS в чистом виде.
И вот это — та часть иммунной системы, которую пока никому не удалось воспроизвести.
Возможно самая главная.
Универсального решения мне, увы, не попадалось, пока все что можно сделать – онлайновый откат на точку восстановления.
И да, теперь со всем этим барахлом на борту надо еще и взлететь. Система не должна тратить 146% своих ресурсов на собственную защиту. Добавочную нагрузку хотелось бы держать в рамках логарифма от общей сложности системы. Уже на этом этапе использование генетики или SVM начинает быть проблематичным.
И напоследок три ложки дегтя в бочку с вареньем.
Использование внутреннего состояния в качестве источника для обучения — штука мощная, но крайне опасная.
При резком изменении количества данных могут (и должны) возникать циклы обратной связи, которые бывают, как известно отрицательные (т.е. очень полезные для нас), так и положительные (с очень неприятным эффектом).
Последний вариант приводит к перетренировке и самоподтверждению — система тратит ресурсы на обучение себя любимой своим же собственным изменениям.
Такое вот форсированное самопознание, ведущее к аутизму, мало кому понравится когда бухгалтерский сервер уйдет в компьютерный дзен.
Второй минус иммунных систем — это их несовершенство, заметное любому аллергику. Автоиммунные болячки множатся с каждым годом. И вирус СПИД, который цепляется к helper T-cells, блокируя всю иммунную систему сразу, в компьютере тоже возможен. Более того, процессы старения в организме во многом связаны с разрегулировкой иммунной системы – например артрит.
Третий минус субъективен. У меня есть глубокая убежденность в том, что серебряные пули либо плохо попадают в цель, либо дорого стоят. За все надо платить свою цену, и в случае AIS эта цена пока не определена.
Автор: 0decca