Friday, March 14, 2014

Кому бояться 0-day, а APT?

Неоднократно говорил, но не помню писал ли... поэтому не будет лишним на фоне всеобщей истерии об APT повториться, так как не считаю это зазорным, ибо никогда не относил себя к гениям (напомню: Гений - это тот, кто никогда не повторяется).

Если вы работаете в компании, которая сама не производит ПО и технических средств в чем может быть обнаружена уязвимость нулевого дня, вам не надо сильно много думать об атаках на эти уязвимости. Логика тут проста - вы не можете в полной мере управлять этим риском. Банально, у вас нет механизмов исправить эти уязвимости (поскольку не вы разработчик). Вы можете налепить множество детектирующих (которые вам реактивно покажут, что вас атаковали) и компенсирующих (которые, может, помогут вам восстановиться быстро или сделают что-то что снизит ваш возможный ущерб) контролей, но закрыть 0-day вы не сможете - это может сделать только производитель.
Именно для этого мы исправно платим производителям ПО за поддержку, а они, в свою очередь нам исправно латают свои дырки - это, в целом, единственное, как вы можете повлиять на 0-day. Если вы действительно сильно озабочены 0-day и есть подтверждения, что они часто возникают, а производитель плохо выпускает заплатки - меняйте производителя (... ну или навешивайте детектирующие, компенсирующие контроли и всякие другие навесные штуки, которые снизят вероятность эксплуатации или снизят возможный ущерб).

Итак, мы не боимся 0-day, пойдем далее. Выходит, мы не боимся того, о чем не знаем (вот действительно подтверждение того, что многие знания преумножают печаль) - это уже хорошо, поскольку опасаться не зная чего - вполне определенный медицинский диагноз, который с трудом поддается лечению. Несложными умозаключениями приходим к тому, что APT (если слово кажется сложным, можно заменить на 0-day, концептуально смысл не поменяется) также не стоит опасаться. APT по определению всегда будет успешной, она всегда будет направлена туда, где нет защиты, в противном случае - это не APT. Поэтому всякие продвинутые системы для "защиты от APT" - не более чем ловкословие маркетологов, - не надо на это вестись.

Но пост о том, кому бояться... - да. да, есть такие и кто они - понятно - те, кто сами пишут софт для своих нужд. В целом, таких полно и сам я неоднократно прибегал к "наколеночной" автоматизации, - сказываются годы работы программистом - в ряде задач проще самому написать, чем искать готовое решение, его закупать, внедрять и т.п. или кому-либо объяснять что же я все-таки хочу. Как правило все эти "самописные" системы автоматизации ужасно дырявые, ибо проектировались с прицелом на быстрое достижение бизнес-выгод и конечно же никто не думал о безопасности. Да что далеко ходить - SAP тоже был дырявый, пока его не стали успешно пентестить и закидывать файндингами несчастных бюргеров Вальдорфа.
Вот на такие home-made поделки и может быть направлена APT, эксплуатирующая 0-day там. И с этим нужно и можно бороться. Как? Опять же, очевидными способами - внедрить SDLC и не допускать производства софта мимо этого процесса.

Wednesday, January 15, 2014

За нами следят

Уже наверно не секрет, что закладки есть везде - и в железе, и в ПО.
Поэтому это уже не удивляет, не удивляет, например, и ответ Cisco.
В любом случае, как бы там ни было на самом деле, очевидно, что НДВ в ПО реализовать несложно, да и в железе тоже.
Это и понятно - страна имеющая абсолютное господство на рынке аппаратных и программных средств рано или поздно будет использовать это преимущество для преследования, своих, государственных целей.

Что же делать со всем этим рядовым компаниям, использующим все эти "вражеские" технологии, за неимением отечественных, доверенных альтернатив? Да ничего не делать! Противостоять спецслужбам должны спецслужбы. Отсутствие отечественных конкурентоспособных продуктов, что вынуждает всех использовать недоверенные вражеские решения - также государственная проблема. У нас даже есть своя Силиконовая долина, - там даже есть секция, посвященная ИТ. Но почему-то я не вижу элементарных вещей отечественного производства, столь же качественных как западные аналоги: операционная система, офисное и прикладное ПО, аппаратные средства вычислительной техники, собранные на отечественных микросхемах и комплектующих... Без этого элементарного фундамента никакая сертифицированность прикладного ПО не избавит от возможности быть компрометируемым, поскольку всегда возможна компрометация с более низкого уровня абстракции (я столько раз об этом писал и говорил разным людям, поэтому прошу извинить, если повторяюсь): супер-защищенная ОС компрометируется через железные закладки, супер-защищенное прикладное ПО - через закладки в ОС и т.п. - зашифрованные по ГОСТ крипто-контейнеры в устройствах Apple компрометируются через закладки в iOS и железе, приложения под Windows - через закладки в ОС Windows и том же железе, поскольку даже если мы будем собирать платы сами, там будет стоять тот же Intel с vPRO, что является легальной закладкой.

Поэтому, я предлагаю переориентировать Сколково на вопросы национальной безопасности - пускай там научатся делать для начала элементарные вещи, которые покроют внутреннюю потребность в "беззакладочных" информационных технологиях. Если из этого выйдут конкурентоспособные продукты, на этом потом можно будет и заработать, и также попробовать попреследовать государственные интересы, как это делает АНБ США.

Friday, January 10, 2014

О национальной безопасности

Я часто задумываюсь о различного рода социальных проблемах, об их пагубных последствиях для общества, для нации, для Человечества.
Несложно понять, что все современные этические нормы, также недвусмысленно ораженные в основах всех современных религий (в случае Православия - заповеди), имеют вполне определенную цель - сохранение человека как одного из видов, населяющих нашу планету на как можно более долгие годы.
Для государства - физическое и духовное здоровье его населения - прямой стратегический интерес. Ведь понятно, что истрию и события творят конкретные люди, и если людей в государстве (как это иногда грязно называют "людского материала") не будет - попросту не будет государства. Люди - едва ли не основная ценность любого государства, основа его мощи, залог процветания. Кто будет отставить интересы государства в межгосударственных кофликтах? Кто будет двигать науку и прогресс? Кто будет зарабатывать на пенсию пожилым и на всякого рода социальные программы?.... Поэтому, очевидная позиция государства, - всяческая поддержка воспроизводства населения, - различные "материнские капиталы" и "земельные участки многодетным" и т.п.. Все эти программы не могут приносить результата без поддержки естественного инструмента воспроизводства населения - института семьи. Да, если у нас будут нормальные крепкие семьи ситуация с воспроизводством населения будет решаться сама собой. Поэтому - культивирование естественных семейных взаимоотношений - стратегический интерес государства.
Однако, последнее время действительно наблюдается реальный перекос морали в России, что невольно заставляет верить во всякого рода теории заговоров. Откуда не возьмись повылазили сексуальные меньшинства, причем, почему-то об этом стало "модно" открыто заявлять. Вот я реально не пойму, - если у человека какой-то изъян, - разумная реакция это всячески скрывать: если у кого-то нет глаза, - нормально это как-то прикрыть, чтобы не шокировать своим видом общество, - это элементарное уважение. Аналогично, если кто-то имеет особые пристрастия в интимных отношениях - не понятно, зачем эти свои "особенности", свои пороки, афишировать. Тем более абсурдно этим гордиться, и уже просто опасно для всех окружающих - это культивировать.
Ну а чем же это плохо для государства? Тут все просто и примитивно: если однополых браков будет большинство, население государства просто перестанет самовоспроизводиться. И уже некому будет пойти на войну чтобы защитить интересы государства, а может, буть и нацию от исчезновения, уже некому будет заработать на социальные программы, на детские сады, бесплатное образование и медобслуживание, на пенсии пожилым, некому будет производить элементарные блага, которые мы уже давно не умеем себе обеспечивать сами, но так к ним привыкли.
В свете всего сказанного выше, я полностью поддерживаю письмо Ивана Охлобыстина и считаю абсолютно нормальным государственное преследование пороков, разлагающих мораль общества (более понятно: создающих риск вымирания населения государства). Я здесь усматриваю прямые государственные интересы, которые государство обязано защищать имеющимися у него инструментами (в частности, законами).
При этом, может, и не нужно наказывать людей за то, что они больны (я рассматриваю гея исключительно как психически нездорового человека), просто нужно чтобы они сидели спокойно, как прежде, и уже тем более не гордились и не рассказывали окружающим как круто быть также больнымими, особенно людям, с еще не оформившейся психикой, еще не умеющими отличить где истина, а где ложь, еще не способными за красивыми словами увидеть суть, еще склонным верить и доверять, чистым и наивным - нашим детям.

Thursday, January 9, 2014

Сравнение хешей MD5

Снова возникла потребность поупражняться в академическом программировании. На сей раз надо было научиться быстро сравнивать хеши MD5.
Обычно при слове "MD5" перед глазами встает шестнадцатеричное представление 16-байтного числа, т.е. последовательно типа "7b68b20e5f46971e9daab02208c53f2c", поэтому первая идея сравнения была - сравнение двух 32-символьных срок с использованием strncmp.
Если наша хеширующая фунция возвращает MD5 не как строку, а как массив байтов (все нормальные функции именно так и делают), как например, здесь, то представляется совсем неразумным каждый раз рассчитав 16-и байтовый хеш, преобразовывать его в 32-символьную строку только для возможности выполнить сравнение. Ситуация особенно ухудшается, если нам надо выполнить миллион сравнений, - у нас будет миллион ненужных преобразований в строку.
Поэтому, второй мыслью было сравнение двух бинарных 16-байтных массивов с использованием memcmp. По скорости она примерно такая же как strncmp (разве что сейчас мы сравниваем 16 байтов, а выше сравнивали 32 байта), однако нет необходимости преобразовывать MD5 в строку исключительно для возможности сравнения.
Но и этот вариант показался тоже не оптимальным, поскольку memcmp слишком продвинута, чем это необходимо для нашей задачи - всего-то понять, идентичны хеши или нет, - мне не надо знать какой из них больше, а какой меньше.... Более того, с большой степенью вероятности разные хеши будут различаться с первого же байта, причем эта вероятность будет стремительно расти продвигаясь побайтово по хешу....
Все это навело на мысль следующей простой функции, которая, как мне показалось, продемонстрировала большую производительность чем memcmp и strncmp.

inline bool bcmp(BYTE *a, BYTE *b, int n){
    for (int i = 0; i < n; i++)
        if(b[i] ^ a[i]) 
            return false;

    return true;
}
Важно отметить, что здесь используется слово "inline", что свидетельствует о использовании C++.
Соответственно, сравнение хешей выглядит так:

if ( bcmp(md5hash1, md5hash2, 16) ){
   //Сделать что-то, если равны
}
else {
   //Сделать что-то, если не равны
}

Поскольку программирование, все-таки, не основное мое занятие, более чем уверен, что у кого-то возникнут более оригинальные идеи сравнения. Буду очень признателен, если кто-то поделится, заранее спасибо.

Thursday, December 19, 2013

Эшелонированная оборона

Издавна нас учили, что безопасность должна быть эшелонированной, т.е. чтобы добраться до корпоративных секретов, злоумышленнику надо сначала найти дуб в лесу из 108426062525234 деревьев, разглядеть там сундук, достать его, открыть, поймать вылетевшую утку, достать из нее яйцо, которое затем надо суметь разбить, а иголку из этого яйца также надо успешно сломать.
Требование эшелонированности как-то преобразовалось, и даже попало в некоторые отечественные рекомендации по ИБ (см. п. 7.5.5), в необходимость использования подряд нескольких антивирусов разных производителей.
За годы наблюдения различных вирусных атак и попыток борьбы с ними, могу с уверенностью сказать следующее:
1. Чисто антивирусы, как класс, мертвы. Обход антивируса - вполне решаемая задача.
2. Решения, занимающие лидирующие позиции, технологически примерно одинаковы. Поэтому заменять один антивирус на другой из соображений качества обнаружения смысла никакого. Это про движок.
3. Практически любой зловред в течение одного дня попадает ко всем вендорам в базу, поэтому базы также у всех примерно одинаковы.
4. .....
Поэтому ставить последовательно несколько антивирусов подряд смысла большого нет.

Так что же делать? Как же обеспечить эшелонированность? 
В современных условиях эшелонированность должна достигаться не за счет использования однотипных решений от разных производителей, а за счет использования различных технологий защиты. При этом мультивендорность или моновендорность на качество влияет весьма посредственно. Т.е. наряду с простым антивирусом на хосте имеет смысл рассмотреть возможность использования IPS, систем контроля целостности и контроля приложений, систем с модным названием DLP, в сети имеет смысл использовать IPS/IDS и системы профилирования трафика и анализа поведения, на шлюзах - системы фильтрации по различным признакам, безусловно, надо собирать все логи и успешно их анализировать. Использование разных технологий значительно повысит вероятность выявления и эффективной форенсики.

При этом надо помнить, что моновендорность имеет ощутимое преимущество перед мультивендорностью - это тупо дешевле.

Thursday, November 28, 2013

IDM как система мониторинга

В целом, достаточно занимательное занятие логгировать пролетающие через фаервол пакеты - обычно, почему-то, логгируют deny-и, хотя, наверно, любопытнее было бы смотреть на permit-ы. Также прикольно смотреть логи IDS\IPS... Но с точки зрения контроля доступа (а вся безопасность так или иначе может свестись к контролю доступа к защищаемым данным) куда более интересны события добавления\удаления роли\группы\полномочия. Безусловно любая продвинутая система умеет писать такие события в свои логи безопасности, соответстенно, их можно собрать в какой-нибудь SIEM и повесить на них какое-нибудь реагирование.
Однако тут есть некая философская проблема - такой инцидент не поднимется на бизнес-уровень самостоятельно и оператору мониторинга SIEM придется переводить технический отчет на язык понятный менеджерам. Делать такое "уточнение у бизнеса" скорее всего придется, поскольку далеко не всегда у оператора SIEM есть понимание насколько легитимно то или иное присвоение\удаление. 
Другим вариантом является - возложение вопроса аудита полномочий пользователей в системах на предмет соответствия поданным заявкам на подразделение контроля доступа, которое если и делает такие проверки то нечасто, что создает возможность преднамеренной атаки НСД остаться вообще не замеченной: несанкционированные добавления с последующим удалением полномочий проводятся между процедурмаи аудита прав.
Поэтому, обычно, на практике все-таки делают автоматическое оповещение об изменении полномочий, но для каких-то особых случаев, когда таких пользователей\ролей\полномочий не так много - как правило, какие-нибудь администраторы (Domain Admins, Enterprise Admins, Administrators, ....), казначеи и операторы систем ДБО и т.п.

Но все становится по-другому с появлением решений IDM\IAG (не буду тут много лить воды об их функционале и различиях - можно ознакомиться в Интернете). Практически все современные их представители имеют функционал аудита настроенных прав доступа в управляемой системе (системы, доступ к которым регулируется через IDM) на соответствие согласованным доступам в системе IDM. Найденные несоответствия могут обрабатываться по-разному, как правило, это настраиваемо. Мне нравится реакция в виде запуска workflow согласовния. Это позволяет автоматически вывести техническую проблему появления членства в лишней группе AD на бизнес-уровень - согласующие получат автоматически сгенеренные заявки по этому поводу на согласование. Если такой доступ был предоставлен в связи с реальной бизнес-потребностью, доступ останется и легализуется. Если такой доступ появился в результате каких-то неправильных позывов - он будет отобран IDM на основании отклоения поданной на этот доступ заявки. И вот тут уже прилетает оповещение в Безопасность, что был обнаружен и испрвлен факт НСД (так как заявка была отклонена Бизнесом). Принципиально здесь то, что решение об отъеме доступа принимается не оператором SIEM, у которого, безусловно, есть чем заняться (его любимые фаерволы и IDS\IPS генерят гигабайты логов в день, с которыми, раз уж собираем, надо хотя бы что-то делать), а бизес-согласующие по результатам отработки формального процесса согласования\отклонения доступа.

 

Tuesday, November 19, 2013

Наследование

Наследование - прекрасная возможность, предоставляемая ООП. Как и во многих вещах, здесь тоже лень была двигателем прогресса, и скрытый смысл этого изобретения - многократное использование одного и того же кода без необходимости переписывать: в потомках можно использовать код родителей, докручивая при необходимости. Утверждается, что такое многократное использование способствует снижению количества ошибок. Тут тоже все логично: чем меньше кода мы пишем, тем меньше ошибок делает. Однако, проблема начинается когда сам код базового класса содержит ошибки, а многократное наследование это тиражирует. Дальше хуже - если в каждом потомке мы что-то докручиваем, также делая ошибки, это приводит к совсем загадочным последствиям...