Русский
Русский
English
Статистика
Реклама

Информационная безопасность

Бэкдор в 1С-Битрикс под угрозой сотни сайтов

28.02.2021 02:15:32 | Автор: admin

Субботний вечер омрачен скандалом: сайт не работает, админы - негодяи, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битрикс в данной ситуации пострадали не только лишь все?

Какое-то время назад некоторые пользователи начали сообщать о том, что их любимый сайт взломан, в лучшем случае он просто не работал, в худшем - показывал рекламу средств для улучшения KPI. Пока это были единичные случаи, но после 3-4 однотипных взломов на разных платформах уже есть основания полагать, что где-то закралась дырка, которую активно эксплуатируют.

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

Анализируя содержимое сайта, что первое бросается в глаза, так это наличие нехарактерного мусора:

Таких файлов, как правило, быть вообще не должно. Хорошо, смотрим на дату создания таких файлов и лезем в логи для анализа что происходило на сайте в какой-то промежуток времени. Тут всё оказалось проще, чем хотелось бы:

Видно простой перебор файлов по словарю. Все запросы летят с одного IP, а главное, видно файл new.php, который вместо 404 вернул редирект 302, и сразу после этого видим POST на /bitrix/admin. Вау! Что же это такое?

А это - красота:

Те, кто хоть раз в жизни писал код для битрикса, сразу же поймет что этот код делает. А кто не писал, то всё просто: делает авторизацию под пользователем с ID=1, который как правило является админом сайта.

Пробегаемся поиском по паттерну и находим сразу три таких файла с одинаковым содержимым:

bitrix/admin/mobile/new.php
bitrix/tools/new.php
bitrix/new.php

Хэш - 1964d7215f3944fa7a086d590b02152c

Все одинаковые, все делают одно и то же. Удаляем их, откатываем сайт из бэкапа, проверяем что в системных файлах битрикса ничего лишнего нет, и на всякий случай откатываем БД - вдруг там тоже есть что-либо лишнее.

Почему не только лишь все?

Проанализировав все случаи взлома был получен неутешительный вывод: все те, кого взломали, использовали хакнутый Битрикс. Да, Вы не ослышались - вечной демо-версией продукта уже никого не удивишь. Мало того, что это нарушение авторских прав, так ещё и так подвергать свой бизнес опасности взлома обычным ботом. Надо уметь!

Держите свои сайты в безопасности и не позволяйте случаться таким неприятным ситуациям.

Подробнее..

Бэкдор во взломанном 1С-Битрикс под угрозой сотни сайтов

28.02.2021 06:06:55 | Автор: admin

Субботний вечер омрачен скандалом: сайт не работает, админы - негодяи, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битрикс в данной ситуации пострадали не только лишь все?

Какое-то время назад некоторые пользователи начали сообщать о том, что их любимый сайт взломан, в лучшем случае он просто не работал, в худшем - показывал рекламу средств для улучшения KPI. Пока это были единичные случаи, но после 3-4 однотипных взломов на разных платформах уже есть основания полагать, что где-то закралась дырка, которую активно эксплуатируют.

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

Анализируя содержимое сайта, что первое бросается в глаза, так это наличие нехарактерного мусора:

Таких файлов, как правило, быть вообще не должно. Хорошо, смотрим на дату создания таких файлов и лезем в логи для анализа что происходило на сайте в какой-то промежуток времени. Тут всё оказалось проще, чем хотелось бы:

Видно простой перебор файлов по словарю. Все запросы летят с одного IP, а главное, видно файл new.php, который вместо 404 вернул редирект 302, и сразу после этого видим POST на /bitrix/admin. Вау! Что же это такое?

А это - красота:

Те, кто хоть раз в жизни писал код для битрикса, сразу же поймет что этот код делает. А кто не писал, то всё просто: делает авторизацию под пользователем с ID=1, который как правило является админом сайта.

Пробегаемся поиском по паттерну и находим сразу три таких файла с одинаковым содержимым:

bitrix/admin/mobile/new.php
bitrix/tools/new.php
bitrix/new.php

Хэш - 1964d7215f3944fa7a086d590b02152c

Все одинаковые, все делают одно и то же. Удаляем их, откатываем сайт из бэкапа, проверяем что в системных файлах битрикса ничего лишнего нет, и на всякий случай откатываем БД - вдруг там тоже есть что-либо лишнее.

Почему не только лишь все?

Проанализировав все случаи взлома был получен неутешительный вывод: все те, кого взломали, использовали хакнутый Битрикс. Да, Вы не ослышались - вечной демо-версией продукта уже никого не удивишь. Мало того, что это нарушение авторских прав, так ещё и так подвергать свой бизнес опасности взлома обычным ботом. Надо уметь!

Держите свои сайты в безопасности и не позволяйте случаться таким неприятным ситуациям.

Подробнее..

Интернет вещей по-русски. Процедура активации OpenUNB

28.02.2021 12:13:00 | Автор: admin

Односторонний характер протокола OpenUNB накладывает отпечаток на все процедуры протокола. Разработчики OpenUNB, стремясь разработать защищенный протокол, создали на первый взгляд довольно сложную процедуру вхождения устройства в сеть активацию. Давайте разберем ее в деталях.


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


В обычных, двусторонних системах такая информация вставляется в передаваемый информационный пакет. Грубо говоря, пакеты нумеруются. В экономичных система передачи типа Интернета вещей такой метод расточителен. В таких системах выгоднее вести счетчики времени на двух сторонах отдельно, а не передавать его в пакете. В стремлении к совершенству, так и было сделано в OpenUNB.


В OpenUNB связь на канальном уровне происходит между конечным устройством и сервером. В процессе активации устройства выполняется его аутентификация на сервере, осуществляется начальная синхронизация времени между устройством и сервером и вырабатываются рабочие ключи криптографической защиты. После аутентификации сервер будет готов дешифровывать пакеты от данного устройства. Синхронность времени и рабочих ключей позволяет проверять целостность сообщений и дешифровывать их.


В OpenUNB активация устройства производится пользователем. Также необходим доверенный канал между пользователем и сервером сети. Схема взаимодействия представлена ниже:


image


Как видно из схемы, пользователь должен иметь некоторое мобильное устройство с программой и находиться рядом с устройством OpenUNB.


В стадии "запрос на активацию" пользователь должен по служебному каналу отправить на сервер запрос на активацию, в котором передается идентификатор DevID активируемого конечного устройства. Если активация возможна, то сервер сообщает об этом. Далее пользователь делает "запуск процедуры активации на устройстве". Это может быть пакет по радио-интерфейсу или другому, удобному. Это также может быть нажатие кнопки "активация" или просто включение питания устройства. После этого события устройство передает "служебный пакет активации", в котором содержится номер текущей активации.


Если сервер правильно (совпадает имитовставка MIC) получает сообщение обо активации от устройства по каналу OpenUNB, то он индицирует пользователю "подтверждение успешной активации". После этого пакеты данных могут передаваться защищенно.


Рассмотрим подробно процедуру со стороны устройства и со стороны сервера.


Со стороны устройства процедура выглядит так:


  1. проверяется текущее значение счетчика активаций Na. Если счетчик активаций уже достиг максимально возможного значения, то данное устройство больше не может использоваться, и выключается;
  2. увеличивается значение счетчика активаций: Na = Na + 1;
  3. вырабатывается ключ активации Ka;
  4. вырабатывается ключ расчета имитовставки Km для эпохи Ne = 0;
  5. формируется служебный пакет активации, в поле MACPayload которого содержится текущее значение счетчика активаций Na, а в качестве адреса указывается DevAddr0 = CRC24(DevID). При этом поле MACPayload передается в открытом виде (не шифруется), а поле имитовставки MIC рассчитывается на ключе Km для номера Nn = 0. Сформированный служебный пакет активации должен быть отправлен MAX_PKT_TX_NUM раз подряд для повышения вероятности его доведения;
  6. устройство считает активацию успешно завершенной и может передавать пакеты полезных данных.

Напомним формат пакета OpenUNB:
image


Сервер по приему пакета активации ищет адрес из пакета в списке адресов активированных устройств. Для каждого из найденных совпадений:


  1. сохраняется полученное значение счетчика активаций устройства Na. Если для данного устройства ранее уже осуществлялась успешная активация, то сервер должен дополнительно проверить, что текущее значение Na больше чем значение Na, полученное при предыдущей успешной активации. Если эта проверка завершается неуспешно, то сервер переходит к следующему найденному устройству;
  2. вырабатывается ключ активации Ka;
  3. вырабатывается ключ расчета имитовставки Km для эпохи Ne = 0;
  4. для пакета проверяется совпадение имитовставки MIC на ключе Km для номера Nn = 0.

Если для какого-то из устройств совпало значение имитовставки MIC, то процедура его активации считается успешно завершенной, и сервер посылает пользователю через доверенный служебный канал сообщение об успешной активации устройства. Однако если значение имитовставки MIC совпало сразу для нескольких активируемых устройств, то ни одно из них не считается успешно активированным и данный алгоритм завершается.


Детали работы процедур активации OpenUNB смотрите в первоисточнике на сайте Сколтеха.


Реализованные процедуры активации и другие процедуры безопасности доступны в исходниках здесь.


Наш бессменный мастер Интернета вещей deef137 всегда на связи и готов помочь с вопросами по коду.

Подробнее..

Подавление спутниковой навигации на Кремлевской набережной незаконно

28.02.2021 20:13:53 | Автор: admin
Чтобы не пытаться вместить этот довольно длинный текст в комментарий, я создал отдельную статью. Заранее прошу прощения у юристов, я сам технарь, но легкомысленные комментарии к моей статье Серебряная пуля для кремлевского демона вынудили меня заняться не своим делом и полезть в законы. Я прошу провести экспертизу моих юридических изысканий.

Я делаю это из желания сохранения своего личного времени. Нет больше сил моих отвечать на бесконечные комментарии комментаторов. Нужно работать. Это последнее слово, которое я готов сказать на тему законности подавления спутниковой навигации на Кремлевской набережной в Москве. Теперь я буду только слушать, независимо от того, прав я или нет.

Я нашел Федеральный закон от 14 февраля 2009 г. N 22-ФЗ О навигационной деятельности. Вы все без труда найдете ссылку на его текст. Приведу здесь некоторый выдержки.

Статья 1. Сфера действия настоящего Федерального закона

1. Настоящий Федеральный закон устанавливает правовые основы осуществления навигационной деятельности и направлен на создание условий для удовлетворения потребностей в средствах навигации и услугах в сфере навигационной деятельности.

2. Действие настоящего Федерального закона распространяется на отношения, возникающие в связи с осуществлением навигационной деятельности и оказанием услуг в сфере навигационной деятельности, включая создание государственных навигационных карт и навигационных карт для автомобильных дорог, в том числе в целях обеспечения обороны и безопасности Российской Федерации.

Осмысление первой статьи показывает, что сферой ее является, в том числе, навигация на моем смартфоне или автомобильном навигаторе.

Определения пропускаем, сами откроете и прочитаете. Но чего мы там не знаем? Все понятно, далее.

Статья 3. Субъекты правовых отношений в сфере навигационной деятельности

Субъектами правовых отношений в сфере навигационной деятельности являются органы государственной власти, органы местного самоуправления, физические и юридические лица, обеспечивающие создание и функционирование средств навигации и объектов навигационной деятельности, а также физические и юридические лица, оказывающие и получающие услуги в сфере навигационной деятельности в соответствии с гражданским законодательством.

Статья три показывает, что я, как физическое лицо, да и вы все, являетесь субъектами правовых отношений в сфере навигационной деятельности.

Статьи с четвертой по седьмую можете прочитать, но к нашему разговору они, по моему мнению, не относятся.

Статьи восемь и девять для нас самые главные.

Статья 8. Участие физических и юридических лиц в навигационной деятельности

Физические и юридические лица могут осуществлять навигационную деятельность для собственных нужд и оказание услуг в сфере навигационной деятельности на всей территории Российской Федерации без ограничения точности определения координат объектов навигационной деятельности, за исключением территорий и объектов, для которых законодательством Российской Федерации установлен особый режим безопасного функционирования и перечень которых утверждается Правительством Российской Федерации.

Статья 9. Условия предоставления навигационных сигналов с открытым доступом

Навигационные сигналы с открытым доступом предоставляются субъектам правовых отношений в сфере навигационной деятельности на безвозмездной основе и без ограничений.

Ну что тут сказать, все ясно. Если место не попадает в перечень, то закон запрещает не только ограничивать мне навигацию, но и даже просто ухудшать ее точность.

Указанный выше перечень утвержден Постановлением Правительства РФ от 5 июля 2001 г. N 508 Об утверждении перечня закрытых административно-территориальных образований и расположенных на их территориях населенных пунктов. С изменениями и дополнениями от:
16 апреля 2007 г., 16 июля 2009 г., 16 апреля 2015 г., 18 августа, 23 декабря 2016 г., 14 февраля, 19 апреля 2017 г., 18 апреля, 29 августа 2019 г., 16 февраля 2021 г. указанный перечень содержит:

image
image
image

Москвы в перечне нет. Прошу специалистов указать мне на ошибки в этой моей юридической инсинуации.

Весь материал я подготовил сам, ни один юрист не пострадал. Заранее спасибо!
Подробнее..

Особенности подготовки и прохождения международных аудитов безопасности

01.03.2021 10:14:41 | Автор: admin

В данной статье я хочу описать основные этапы подготовки к аудиту безопасности. Чаще всего это аудит соответствия стандартам безопасности серииISO(27***) илиPCIDSS, либо выполнение требований соответствияGDPR.

Мой опыт в области информационной безопасности 12 лет. За это время мной были выполнены проекты с десятками компаний из США, Британии, Китая, России, Украины и стран Европы. Клиентами были как крупные процессинговые центры и банки, так и ИТ компании разной специализации. Результаты внедрения оценивалиPWC(Hongkong),VISA(USA),Deloitte(UKR) и успешно подтвердили соответствие требованиям, о чем можно посмотреть в рекомендательных письмах насайтеи отзывах в профилеLinkedin.

Надеюсь, что мой опыт проведения аудитов, консалтинга и курирование проектов по приведению компаний в соответствие требованиям стандартаPCIDSS,VISA&MASTERCARDSecurityпоможет мне простыми словами донести полезную информацию до читателей.

Накопившийся опыт и знания, наблюдения и замечания я бы хотел выразить в данной статье на примере подготовки к аудиту соответствия стандартуPCIDSS. Все высказанное в данной статье может значительно отличатся от мнений других аудиторов и консультантов, официальной позицииPCISecurityStandardsCouncilи других источников. Я не предлагаю неукоснительно следовать всему, о чем будет идти речь. Это всего лишь информация для принятия Вами собственных решений. Надеюсь, она будет полезной для читателей.

Итак, с чего же начинается и как проходит аудит?
Все начинается даже не с подписания договора на аудит или пред аудит. Все начинается с решения компании (чаще директора или менеджера) о необходимости прохождения аудита.

И тут есть два варианта развития событий: аудит необходимо пройти по требованию клиентов или платежных систем, что бывает чаще, либо аудит инициируется и отстаивается перед директором компании (главой правления, материнской компанией) начальником отдела информационной безопасности (ИБ) или менеджером - реже. В первом случае аудит спускается как Божья кара на сотрудников ИТ и ИБ подразделений, так как дополнительной работы добавится, в должностных инструкциях ее может и не быть, а зарплата остается на прежнем уровне. Тут все зависит от коллектива, руководителя ИБ и конкретной компании. Если коллектив удастся мотивировать, чем это уже вопрос менеджмента и к данной статье не относится, то результат, безусловно, будет. Результат будет, даже в том случае если персонал будет не мотивирован, но применяться будет уже иной метод метод кнута. Но вот трудностей возникнет больше.

По-иному обстоят дела, если инициатором выступает руководитель отдела ИБ. В таком случае с высокой долей вероятности процессы так или иначе уже соответствуют требованиям стандарта. Документация подготовлена, архитектура в корне не противоречит требованиям стандарта, начальник ИБ понимает, зачем это нужно. А раз он инициирует, значит, понимает пользу для себя и для отдела. И сможет донести до подчиненных (скорее всего, уже донес) необходимость, а также найти понимание (в идеале поддержку) у отдела ИТ.

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

Также, не стоит забывать, что вы можете как сами готовиться к аудиту, так и привлечь профильного специалиста для подготовки. Это может быть как сотрудник в штате, так и внешний консультант. Преимущество сотрудника в штате то, что вероятно данный человек будет выполнять дополнительные функции в рамках задач безопасности вне активных фаз ежегодного аудита, а также всецело отдавать себя процессам и инфраструктуре компании.

Преимущества консультанта профильная специализация именно по требуемому стандарту, минимизация затрат путем оплаты за конкретные задачи и часы и высокая скорость подготовки к аудиту. Каждый из вариантов имеет свои плюсы и важные особенности в зависимости от компании, требований к срокам аудита, бюджету и пр., которые стоит оценить перед началом проекта.

Если есть необходимость пройти аудит, а не построить процессы (заранее говорю, что часть требованийPCIDSSособенно в части документирования процессов тормозит работу самих бизнес-процессов). То лучше обратится к маленькому локальному игроку рынка. Аудиторы такой компании, как правило, более лояльны к формам реализации требованийPCIDSS. Если же хочется получить не только толстый отчет, но и консалтинг в рамках его проведения то однозначной рекомендации нет. Выбирайте именно аудитора. Если же нужен красивый отчет с печатью известной компании выбор очевиден, международная известная компания. Окончательный выбор только за Вами.

В рамках данной статьи не будет рассматриваться вопрос, по какой версии проводить аудит, так как стандарт развивается и его версии меняются. Сейчас актуальной версией является версияPCIDSS3.2.1 но готовится к выходу версияPCI DSS4.0.

Если не планируется привлекать профильного специалиста или консультанта на этапе подготовки, то проводить внутренний аудит придется собственными силами. Результатом аудита должен стать не отчет, а согласованный план-график устранения несоответствий (пример таблицы аудита, разделов отчета и плана графика приведен в Приложениях 1-3).

Приложение 1

Приложение 2

Приложение 3

И вот для того, чтобы получить данный план, необходимо провести детальный анализ инфраструктуры, документации, процессов и интервьюирование персонала. Выполнение данной задачи позволит понять уровень зрелости процессов компания и выявить самые большие прорехи.
Основные моменты, на которые стоит обратить внимание в рамках устранения несоответствий можно разделить на следующие:
1.Подготовка либо внесение изменений в регуляторные документы.
2.Подготовка актов, реестров, планов тестирования и иной отчетности.
3.Модернизация и внесение изменений в конфигурацию систем и ПО.
4.Проведение внутренних и внешних сетевых сканирований и обработка их результатов.
5.Проведение тестов на проникновение.
6.Проведение обучений и тестирование планов реагирования.
7.Анализ прав доступа в логических и физических системах.

Стоит быть готовым к тому, что, как и любое изменение бизнес-процессов, изменения вносимые в рамках приведения компании к соответствиюPCIDSSмогут встречать ожесточенное сопротивление со стороны руководителей отделов и остального персонала. Для нивелирования данного эффекта, рекомендую комплексный подход. А именно:
- Поддержку вашей позиции руководством и доведение его мнения до персонала.
- Выделение части времени персонала на задачиPCIDSSпо указанию руководства.
- Проведение совместных совещаний с руководителями отделов для донесения сути стандарта и предполагаемых проверок.
- Ознакомительные рассылки для персонала.
- Непрямая мотивация: сувениры по теме ИБ, конкурсы, плакаты, заставки.

Думаю, не стоит говорить, что нет компании, в которой бы абсолютно все было без нарушений. На то есть разные причины: слишком большие затраты на выполнение требований, нарушение или разрушение реальных бизнес-процессов при исполнении требований, исторически сложившиеся процессы. И тут все зависит от того, что покажут аудитору или, что он увидит или найдет. Опять-таки не стоит забывать о возможности применения компенсационных мер.
В случае отсутствия возможности привлечения профильного консультанта, при подготовке к аудиту, безусловно, необходим человек компетентный в области аудита и стандартов, или тот, кто быстро может стать таковым (специалист смежной сферы). Так как аудиторам и представителям компании крайне желательно понимать друг друга, обладать высоким уровнем компетенций в сфере, подлежащей аудиту. Когда проектом по прохождению аудита соответствия руководит не мотивированный и некомпетентный в вопросах проектного менеджмента и стандартов ИБ человек, вероятность его успешного прохождения сильно уменьшается, а сроки и бюджет проекта, наоборот увеличиваются. Исключение могут составлять случаи, когда за все уплачено заранее. Но в таком случае, наверное, даже не стоит вести сам проект.

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

1.При разработке и редактировании документов используется очень простой принцип. Необходимо, чтобы все процессы, подлежащие документированию в рамках требованийPCIDSS, были документированы.
Из нюансов рекомендую обратить внимание, что это чревато тем, что большинство процессов так и останутся только на бумаге. Прописывая, тот или иной процесс в документах думайте, как он будет выполняться персоналом. Как это ни банально, но это действительно важно.
2.Достаточно длинный перечень ежемесячных, ежеквартальных и прочих актов должен готовиться сотрудниками компании. Если прибавить к этому актуализацию реестров, планов, анализ и обработка результатов сканирования и обработку рисков, а также документацию по реагированию на инциденты, то стопка за год, может быть толще качественной кирпичной кладки (хотя возможно, что и в электронной форме). Нужно понимать, что лучше готовить ее на протяжении года. Хотя часто ее делают непосредственно перед аудитом. Тут уже вопрос корректности процессов. В конце концов, все направлено на повышение уровня безопасности и логичнее все делать вовремя. Ведь все равно делать придется.
3.Системы требуют постоянных обновлений, изменения настроек и параметров конфигураций. Для этого необходимо иметь в штате компетентных специалистов, отслеживать частоту и правильность установки обновлений. Соответствие паспортам конфигураций. Это периодическая и очень затратная по времени часть работ. Кстати, это можно автоматизировать. Я писал об этом, когда рассматривал вопрос Построение процессов управления уязвимостями и соответствиемтут.
4.Для проведения внутренних сканирований достаточно использовать любой более-менее качественный сетевой сканер с последними обновлениями. И разворачивать целый комплекс по управлению сетевыми уязвимостями в рамках соответствияPCIDSSсовсем не обязательно.А вот что обязательно это обработка результатов сканирования. Все уязвимости, которые немогут быть устранены должны быть проанализированы. И если уязвимость обнаружена не ошибочно, для нее должны быть разработаны и внедрены компенсационные меры.
Что же касается ежеквартального сканирования внешнего периметра (ASV) то достаточно просто купить лицензию на необходимое количествоIPC28Cи проводить 4 раза в год сканирование самостоятельно. Естественно это для тех случаев, когда у Вас нет уязвимостей в сканируемой инфраструктуре. А их не должно быть.
5.C29CВ рамках подготовки к тесту на проникновение по приоритетности я бы выделил следующие особенности:
- Донесение до сотрудников компании, что можно, а чего делать нельзя.
- Контроль мест хранения карточных данных.
- Обновление систем.
Именно в этой последовательности, как правило, возникают проблемы в рамках теста на проникновение.
6.C30CОбучение сотрудников является неотъемлемой частью улучшения безопасности. Но вот если у вас не все процессы, прописанные на бумаге, работают в действительности, то это как раз возможность рассказать сотрудникам кому и как они должны отвечать на вопросы. Чтобы в рамках интервьюирования сотрудников не выяснилось, что далеко не все процессы, отраженные на бумаге, используются в действительности.
Что касается планов реагирования, то если за текущий отчетный период они применялись нужно подготовить свидетельства. В противном случае провести тестирование планов реагирования по результатам - составить акты.
7.C31CТакже обязательно контролировать доступ пользователей к системам. При этом если это выполняется сугубо для галочки, то так тому и быть. Но если Вы хотите наладить процессы и обеспечить реальный процесс разграничения доступа, то сначала нужно строить процесс, а потом проводить аудит. А не наоборот. Так как при неработающем процессе у Вас очень быстро все вернется на круги своя и усилия будут напрасны.C32C

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

Непосредственно перед проведением аудита обязательно необходимо собрать всех сотрудников, которые будут участвовать в интервьюировании и провести совещание, где уточнить основныемоменты предстоящего аудита и особенно обратить внимание на нюансы. Например, что администратору запрещается покидать рабочее место, не заблокировав компьютер при посторонних. На каждом аудите находится администратор, который выбегает, куда-то оставив при этом аудитора один на один с открытыми соединениями к подлежащим аудиту критичным серверам. Данное замечание не критично, и использовано как пример, но таких мелочей может накопиться достаточно много. Кроме того, обязательно согласуйте с коллегами, какую информацию не стоит разглашать аудитору ни в коем случае об этом выше. Так как, услышав хоть какое-то несоответствие, аудитор обязательно распутает клубок можете не сомневаться.
Перед аудитом будьте готовы к тому, что как бы вы все не планировали, вы не успеете устранить все несоответствия и выполнить все задачи, которые хотели к запланированным срокам. Так как в компании происходят непрерывные внесения изменений в системы, процессы, случаются авралы (обязательно в самый неподходящий момент), а сотрудникам кроме подготовки к аудиту нужно выполнять свои функциональные задачи. Рекомендую обязательно при планировании в зависимости от уровня зрелости процессов, загрузки сотрудников и своей сферы влияния закладывать от 10 до 35% дополнительного времени на риски.
Да вот еще, что касается решений, которые рекомендуют компании по результатам аудита. Нужно понимать, что как правило, компании, которые проводят аудит, имеют подразделения, которые занимаются внедрением определенных решений и систем. И можете не сомневаться, что независимо от их соответствия в полной мере вашим требованиям, рекомендовать к внедрению будут именно их. Просто имейте это виду. Ничего страшного в этом нет. Если подразделение компании обладает реально выполненными успешными проектами, а данное решение и цена за услуги вас устраивает смело соглашайтесь. Просто имейте виду, что не стоит слепо полагаться на рекомендации и внедрять дорогостоящие системы, чтобы пройти аудит и забыть о них до следующего года.
И еще. Не воспринимайте аудитора как врага. Воспринимайте его как союзника. Часто, результаты аудита могут показать руководству, что у вас действительно не хватает ресурсов, технологий или бюджета, и что это не вы сами придумали необходимость наличия бесполезных игрушек для ИТ или ИБ. Смело говорите об этом аудитору, пусть пишет в отчете. Но помните, такое можно говорить при предварительном аудите или экспертном аудите, но уж никак не как несоответствие, на сертификационном. Так как в противном случае сертификата соответствия, вы можете и не увидеть. А руководство вместо дополнительных ресурсов и бюджета может наградить вас выговором или и вовсе уволить, за плохую работу и провал сроков проекта.
В целом могу сказать, что подготовка компании к аудиту на предмет соответствия требованиям стандартаPCIDSS(впрочем, как и любого иного) требует четкого планирования, упорства и выдержки. А также умения балансировать между документированными требованиями стандарта и их внедрения таким образом, чтобы они минимально влияли на работающие процессы в компании, при этом повышая их реальную безопасность.

Если у вас возникли вопросы, то вы всегда можете их задать, написав мне напочту.

Актуальнуюиполезную информацию поPCIDSSможно найтина сайте.

Подробнее..

Парсинг общедоступных данных запрещен с 1 марта

01.03.2021 14:22:08 | Автор: admin

С 01 марта 2021 года вступают в силу новые правила обработки персональных данных, сделанных доступными неопределенному кругу третьих лиц общедоступных персональных данных.

Поправки введенызаконом N 519-ФЗ от 30.12.2020и существенным образом меняют порядок использования персональных данных, находящихся в общем доступе, и в первую очередь, размещенных на сайтах в сети Интернет. В большей части поправки важны для сайтов по типу агрегаторов и социальных сетей. Однако и корпоративным сайтам с отзывами и контактными данными сотрудников тоже досталось.

Как всегда, смотрите подробности под катом. </cut>

Из закона исключается понятие персональные данные, сделанные общедоступными субъектом персональных данных, используемое в качестве правового основания обработки таких ПДн любыми лицами (пп.10 п.1 ст.6 152-ФЗ). Взамен вводится понятие персональные данные, разрешенные субъектом персональных данных для распространения.

Принципиальное отличие этих понятий в режиме использования персональных данных, доступ к которым предоставляется третьим лицам.Новые условия предусматривают получение отдельного согласия субъекта ПДн на их распространение и обработку третьими лицами, тогда как ранее такое согласие предполагалось (достаточно было доказать факт их публикации субъектом ПДн или с его разрешения).

Как следствие, с 01 марта 2021 года нельзя собирать и использовать опубликованные в Интернете сведения об отдельном лице или массово извлекать и осуществлять последующее использование персональных данных с сайтов и прочих ИСПДн в автоматическом режиме (посредством парсинга), если не получено согласие каждого субъекта на такие действия. Ссылка на то, что сведения общедоступны перестает работать.

Требуется ли владельцам сайтов согласие на обработку публикуемых персональных данных

Нужно понимать, что отдельное согласие на обработку персональных данных, разрешенных субъектом персональных данных для распространения, требуется только для случаев, когда нет иных законных оснований для их обработки.

Обычно владельцы сайтов осуществляют сбор и последующее использование персональных данных пользователей в целях заключения или исполнения договора. Это самостоятельное основание для обработки ПДн, не требующее отдельного согласия (пп.5 п.1 ст.6 ФЗ 152). В таком случае достаточно сформулировать условия договора с пользователем в общем виде вПользовательском соглашении, а порядок обработки ПДн включить вПолитику конфиденциальности.

Если сайт позволяет публиковать персональные данные в общем доступе, то важно обозначить, что пользователь раскрывает такие данные неопределенному кругу лиц по собственной инициативе (п.2 ст.10.1 ФЗ 152 в новой редакции). Для предоставления доступа к таким сведениям третьим лицам администрации не требуется отдельное согласие субъекта, поскольку у нее есть действующий договор. Однако третьим лицам потребуется подтвердить наличие законных оснований для копирования материалов с сайта и их последующего использования, поскольку прямого договора с субъектом у них нет.

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

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

Таким образом, изменения направлены на пресечение бесконтрольного использования персональных данных неопределенным кругом лиц. Субъекту вернули контроль над его персональными данными. Теперь он волен давать согласие на обработку ПДн неопределенным кругом лиц или конкретным лицам, вводить ограничения и условия использования отдельных персональных данных, опубликованных в общем доступе.

Ограничения и условия использования персональных данных

Наибольшие затруднения с правовой и технической стороны вызывают изменения 152-ФЗ в части возможности установления субъектом персональных данных в согласии ограничений и условий их использования.

Оператор ПДн обязан обеспечить субъекту персональных данных возможность определить перечень персональных данных по каждой категории персональных данных, указанной в согласии на обработку персональных данных, разрешенных субъектом персональных данных для распространения (п.1 ст.10.1 ФЗ 152).

Если в согласии прямо не указано, что субъект не установил запретов и условия их использовании или не определил категории и перечень ПДн, к которым такие запреты и условия относятся, оператор ПДн вправе осуществлять их обработку без передачи (распространения, предоставления, доступа) и возможности осуществления иных действий с персональными данными неограниченному кругу лиц (п.5 ст.10.1 ФЗ 152).

На основании п.9 новой статьи 10.1 ФЗ 152, в согласии на обработку персональных данных, разрешенных субъектом персональных данных для распространения, субъект персональных данных вправе установить запреты на передачу (кроме предоставления доступа) этих персональных данных оператором неограниченному кругу лиц, а также запреты на обработку или условия обработки (кроме получения доступа) этих персональных данных неограниченным кругом лиц.

При этом оператор обязан обеспечить субъекту возможность установления запретов и условий использования персональных данных. Отказ оператора в установлении субъектом персональных данных предусмотренных выше запретов и условий, не допускается.

Более того оператор, оператор обязан в срок не позднее 3 рабочих дней с момента получения соответствующего согласия субъекта персональных данных опубликовать информацию об условиях обработки и о наличии запретов и условий на обработку неограниченным кругом лиц персональных данных, разрешенных субъектом персональных данных для распространения (п.10 ст.10.1 ФЗ 152).

Иными словами, для обеспечения возможности использования третьими лицами опубликованных в общем доступе персональных данных, помимо ознакомления с ними (получения доступа), владелец сайта (оператор ИСПДн) обязан получить согласие субъекта на их распространение. Одновременно оператор должен обеспечить возможность установления запретов и условий использования отдельных категорий и перечня ПДн и опубликовать данную информацию.

Представьте себе сайт для поиска работы, на котором публикуются резюме соискателей, или доску объявлений, где есть контактные данные пользователей. Как обеспечить с 1 марта возможность копирования с них персональной информации пользователей, размещенной в общем доступе?

Выше мы рассмотрели 2 варианта правовых оснований для обработки ПДн: по договору и на основании согласия. Что необходимо сделать в каждом из указанных случаев?

При наличии договора с субъектом ПДн согласие необходимо получать для обеспечения возможности копирования и последующего использования персональных данных неопределенным кругом лиц. Если такой задачи перед администрацией сайта не стоит, можно ограничиться включением в соглашение (договор) с пользователем и политику конфиденциальности, условий о возможности из предоставления заранее определенному кругу лиц (например, агентствам по подбору персонала или работодателям в примере с сайтами поиска работы).

Если владелец сайта по каким-то причинам намерен распространять ПДн пользователей заранее неопределенному кругу лиц (например, любым интернет-пользователям), потребуется выполнить план мероприятий по ограничению копирования третьими лицами персональных данных пользователей до получения тельных согласий, обеспечению возможности установления различных запретов и условий использования таких данных и публикации таких сведений совместно с такими данными.

Полагаем, что операторов, желающих делиться данными со всеми, найдется не много. Поэтому поправки в ФЗ 152 в целом можно воспринимать в положительном ключе для большинства агрегаторов, поскольку они явным образом запрещают парсинг. Для корпоративных сайтов новшества не несут ничего хорошего, т.к. потребуется получать отдельные согласия со всех субъектов, персональные данные которых у них публикуются

Подробнее..

Data driven подход для усиления защиты Android

01.03.2021 16:18:41 | Автор: admin


Мы делаем все, чтобы платформа Androidбыла безопасной для всех пользователей на всех устройствах. Каждый месяц выходятобновления системы безопасностис исправлениями уязвимости, найденными участниками программыVulnerability Rewards Program (VRP). Однако мы также стараемся защищать платформу от других потенциальных уязвимостей, напримериспользуя компилятори улучшая тестовую среду. Экосистема Android включает в себя устройства с самыми разными возможностями, поэтому все решения должны быть взвешенными и должны учитывать доступные данные.

В этой статье рассказано о том, как мы выбираем средства безопасности для конкретных обстоятельств и как они реализуются.

Обеспечение безопасности Android подразумевает комплексный подход. Чтобы затруднить потенциальное использование уязвимостей, мы принимаем решения на основе данных, руководствуясь сразу несколькими принципами и методами. Когда речь идет об усилении защиты платформы, необходимо ответить на следующие вопросы:

  • Какие у нас есть данные и как они могут помочь в принятии решений?
  • Какие средства предотвращения атак доступны? Как их можно улучшить? В каких ситуациях их следует применять?
  • Какие проблемы могут возникнуть при использовании тех или иных средств безопасности? Какие возможные расклады следует принять во внимание?

Принципы, на которые мы опираемся при выборе средств безопасности, отражают наш общий подход к защите пользователей платформы Android.

Принятие решений по обеспечению безопасности на основе данных


Чтобы выяснить, для каких компонентов платформы будут эффективны те или иные решения, мы обращаемся к различным источникам. ПрограммаAndroid Vulnerability Rewards Program(VRP) едва ли не самый информативный из них. Наши инженеры по безопасности анализируют все уязвимости, обнаруженные участниками программы, определяя их первопричины и уровень серьезности (на основеэтих рекомендаций). Кроме того, есть внутренние и внешние отчеты об ошибках. Они помогают выявлять уязвимые компоненты, а также фрагменты кода, которые часто вызывают сбои. Зная, как выглядят такие фрагменты, и представляя себе серьезность и частоту ошибок, возникающих из-за них, мы можем принимать взвешенные решения о том, какие средства безопасности будут наиболее эффективными.


Уязвимости с высоким и критическим уровнем серьезности, исправленные в бюллетенях по безопасности Android в 2019 г.

Однако не стоит полагаться только на отчеты об уязвимостях. Они изначально дают искаженную картину, так как специалисты по безопасности часто обращают внимание на горячие зоны, то есть на те области, где ранее уже были найдены уязвимости (например,Stagefright). Или они могут искать уязвимости там, где их проще обнаружить с помощью готовых решений. Например, если на платформе GitHub будет опубликован какой-нибудь аналитический инструмент безопасности, многие специалисты будут им пользоваться.

Мы стараемся равномерно распределять усилия по укреплению безопасности. Наши команды обращают внимание на менее изученные и более сложные компоненты платформы. Кроме того, на виртуальных машинах и физических устройствах Android постоянно выполняется автоматическое фаззинг-тестирование, что позволяет находить и исправлять ошибки на самых ранних стадиях разработки. При принятии решений о том, какие инструменты использовать, мы также анализируем исходные причины и уровень серьезности обнаруженных проблем.

В рамках программы Android VRP мы поощряем разработчиков, которые добавляютполные цепочки уязвимостей,позволяющие проследить весь процесс атаки от начала до конца. Как правило, злоумышленники используют сразу несколько уязвимостей, и в подобных цепочках эти связки хорошо видны, поэтому они очень информативные. Наши инженеры по безопасности анализируют как цепочки целиком, так и их отдельные звенья и пытаются обнаружить в них новые стратегии атак. Такой анализ помогает определить стратегии, помогающие предотвратить последовательное использование уязвимостей (например,случайное распределение адресного пространстваи методыControl Flow Integrity), а также понять, можно ли уменьшить масштабы атаки, если процесса получил нежелательный доступ к ресурсам.

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

Чтобы понимать текущие угрозы безопасности и прогнозировать будущие тенденции, нужно постоянно держать руку на пульсе сообщества специалистов безопасности, в частности:

  • тесно сотрудничать со сторонними специалистами по вопросам безопасности;
  • читать тематические издания и посещать конференции;
  • изучать технологии, используемые вредоносным ПО;
  • отслеживать последние разработки в сфере безопасности;
  • принимать участие в сторонних проектах, таких какKSPP, syzbot, LLVM, Rust ит.д.

В результате у вас будет более полное понимание общей стратегии безопасности, эффективности существующих решений и возможностей для их улучшения.

Почему усиление защиты необходимо


Усиление защиты и предотвращение атак


Анализ данных помогает выявлять области, в которых эффективные средства предотвращения атак могут устранить целые классы уязвимостей. Например, если в некоторых компонентах платформы появляется много уязвимостей из-за ошибок целочисленного переполнения, следует использовать санитайзер неопределенного поведения (UBSan), например Integer Overflow Sanitizer. Если часто наблюдаются уязвимости, связанные с доступом к памяти, необходимо использоватьпрограммы распределения памяти с усиленной защитойAndroid 11 они включены по умолчанию) и средства предотвращения атак (например,Control Flow Integrity), устойчивые к переполнению памяти и уязвимостям Use-After-Free.

Прежде чем поговорить об использовании данных, мы предложим классификацию инструментов для усиления защиты платформы. Вот основные сегменты, на которые можно разбить все эти инструменты (хотя некоторые средства и методы могут относиться сразу к нескольким из них):

  • Средства устранения эксплойтов
    • Средства детерминированного устранения уязвимостей в среде выполнениявыявляют неопределенное или нежелательное поведение и прерывают выполнение программы. Это исключает повреждение данных в памяти, при этом сохраняется вероятность лишь менее серьезных сбоев. Часто такие средства можно применять точечно, и они все равно будут эффективными, так как рассчитаны на отдельные ошибки. Примеры:санитайзер для целочисленного переполненияиBoundsSanitizer.
    • Средства снижения воздействия эксплойтовпредотвращают переход от одной уязвимости к другой или получение возможности выполнения кода. В теории эти средства могут полностью устранять некоторые уязвимости. Однако чаще всего они ограничивают возможности их использования. В результате злоумышленникам приходится тратить больше времени и ресурсов на разработку эксплойта. Часто эти средства задействуют весь объем памяти, занимаемый процессом. Примеры: случайное распределение адресного пространства, Control Flow Integrity (CFI), стековый индикатор, добавление тегов к памяти.
    • Преобразование компилятора, изменяющие неопределенного поведения в определенное на этапе компиляции. В результате злоумышленники не могут воспользоваться неопределенным поведением, напримернеинициализированной областью памяти. Пример: инициализация стека.
  • Декомпозиция архитектуры
    • Отдельные блоки разделяются на мелкие компоненты с меньшими привилегиями. В результате воздействие уязвимостей в этих компонентах уменьшается, так как злоумышленник не получает прежнего доступа к системе. Этот метод удлиняет цепочки уязвимостей, а также усложняет доступ к конфиденциальным данным и дополнительным путям повышения привилегий.
  • Песочницы и изоляция
    • Здесь действует принцип, схожий с декомпозицией. Процессу выделяется минимальный набор разрешений и возможностей, необходимых для нормальной работы (часто с помощью обязательного и/или избирательного контроля доступа). Как и в случае с декомпозицией, песочница ограничивает возможности злоумышленников и делает уязвимости в этих процессах менее значимыми благодаря принципу минимальных привилегий. Примеры:разрешения в Android,разрешения в Unix,возможности Linux,SELinux иSeccomp.
  • Использование языков с безопасной обработкой памяти
    • Языки программирования C и C++, в отличие от Java, Kotlin и Rust, не обеспечивают достаточный уровень безопасности памяти. Учитывая, чтобольшинствоуязвимостей в Androidсвязаны с памятью, мы применяем двусторонний подход: улучшаем безопасность языков C/C++ и одновременно рекомендуем использовать более надежные языки программирования.

Реализация этих инструментов


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


Декомпозиция архитектуры и изоляция медиа фреймворков в историческом контексте

Объекты удаленных атак (NFC, Bluetooth, Wi-Fi и медиаконтент) традиционно сопряжены с самыми серьезными уязвимостями, поэтому усиление их безопасности должно стать приоритетной задачей. Как правило, появление этих уязвимостей вызвано самыми распространенными первопричинами, которые выявляют в рамках программы VRP, и недавно мы добавили для всех них санитайзеры.

Средства предотвращения атак удобно использовать для библиотек и процессов, которые задают границы безопасности или находятся в них (например,libbinder, а также стандартные библиотекиlibui,libcore иlibcutils), так как они не привязаны к конкретным процессам. Однако эти библиотеки отвечают за эффективную и стабильную работу систем, поэтому перед тем как применять тот или иной метод, необходима серьезная гарантия того, что он усилит безопасность.

Наконец, важно обеспечить защиту ядра, учитывая высокий уровень его привилегий. У всех кодовых баз разные характеристики и функциональность, поэтому и вероятность появления уязвимостей в них отличается. Главные критерии здесь стабильность и производительность. Следует применять только эффективные средства безопасности, которые не будут мешать пользователям работать. Поэтому прежде чем выбрать оптимальную стратегию усиления защиты, мы тщательно анализируем все доступные данные, связанные с ядром.
Подход, основанный на данных, дал ощутимые результаты. После обнаружения уязвимости Stagefright в 2015 году мы стали получать сообщения о большом количестве другихкритическихуязвимостей мультимедийной платформы Android. Ситуацию усложняло то, что многие из них были доступны удаленно. Мы провелимасштабную декомпозицию системы Android Nougat иускорили исправление уязвимостей в мультимедийных компонентах. Благодаря этим изменениям в 2020 году не было ни одного сообщения о критических уязвимостях в мультимедийных платформах, к которым можно получить доступ через Интернет.

Как принимается решение о развертывании


Естественно, есть смысл сосредоточиться на тех средствах предотвращения атак, которые работают лучше всего. Чтобы выявить их, мы смотрим, как каждое средство влияет на производительность, какой объем работ необходим для его развертывания и поддержки, не будет ли оно негативно влиять на стабильность системы.

Производительность


При выборе средства предотвращения атак необходимо понять, как оно влияет на производительность устройства. Если некоторые компоненты или система в целом не будут справляться с нагрузкой, время работы от батареи и общая скорость работы устройства может снизиться. Особенно это касается устройств начального уровня, которым также необходимо усиление безопасности. Таким образом, мы отдаем предпочтение наиболее эффективным решениям, которые не сказываются на производительности устройств.

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

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

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

  • Выборочно отключить средства предотвращения атак для функций, существенно влияющих на производительность. Как правило, только некоторые функции потребляют ресурсы в среде выполнения. Если не применять к ним средства предотвращения атак, можно сохранить производительность и максимально усилить влияние на безопасность.Вот примертакого подхода для одного из медиакодеков. Чтобы исключить риски, упомянутые функции следует предварительно проверить на наличие ошибок.
  • Оптимизировать использование средства предотвращения атак. Часто для этого необходимо внести изменения в компилятор. Например, наша команда перешла на использование IntegerOverflowSanitizer иBoundsSanitizer.
  • Параметры некоторых средств предотвращения атак, таких как встроенная устойчивость распределителя Scudo к уязвимостям в динамической памяти,можно настраиватьдля повышения производительности.

Для многих из этих улучшений необходимы изменения в проекте LLVM. В результате выигрывает не только платформа Android, но и другие участники сообщества LLVM.

Развертывание и поддержка


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

Влияние средств безопасности на стабильную работу системы


Важно понимать, возможно ли ложное срабатывание того или иного средства предотвращения атак. Например, если санитайзер Bounds выдает ошибку, речь точно идет о запрещенном доступе (хотя его могли и не использовать). В случае с санитайзером Integer Overflow возможны ложные срабатывания, так как целочисленное переполнение часто бывает абсолютно нормальным и безвредным процессом.

Поэтому важно учитывать влияние средств предотвращения атак на стабильность системы. Неважно, произошло ли ложное срабатывание или была реальная угроза безопасности, в любом случае пользователь испытывает неудобства. И здесь мы снова отмечаем, что необходимо четко понимать, для каких компонентов следует использовать те или иные средства безопасности. Потому что сбои в некоторых компонентах сильнее сказываются на стабильности системы. Если средство предотвращения атак вызывает сбой в медиакодеке, видео просто перестанет воспроизводиться. Однако в случае ошибки в процессеnetdпри установке обновления устройство может больше не включиться. Даже если для некоторых средств предотвращения атак ложное срабатывание не вызывает проблемы (например, как в случае с санитайзером Bounds), мы все равно проводим подробное тестирование, чтобы убедиться в стабильной работе устройства. Например, ошибки смещения на единицу могут не приводить к сбоям в обычном режиме, а санитайзер Bounds прерывает выполнение процесса и нарушает стабильную работу системы.

Также важно понимать, можно ли заранее выявить все компоненты, которые средство предотвращения атак может вывести из строя. Например, в случае с санитайзером Integer Overflow очень сложно предсказать риски, не проводя масштабного тестирования, потому что трудно определить, какие целочисленные переполнения являются намеренными (разрешенными), а какие могут вызвать уязвимости.

Поддержка


Необходимо рассматривать не только возможные проблемы при развертывании средств предотвращения атак, но и особенности их поддержки в долгосрочной перспективе. Мы оцениваем время, необходимое, чтобы интегрировать средство с существующими системами, активировать и отладить его, развернуть на устройствах, а затем обслуживать после запуска. Технология SELinux это хороший пример. Чтобы создать набор правил, требуется много времени и сил. И этот набор нужно поддерживать годами, невзирая на изменения кода, а также добавление или удаление отдельных функций.

Мы стремимся к тому, чтобы средства предотвращения атак минимально влияли на стабильность работы и чтобы у разработчиков была вся необходимая информация. Для реализации этих целей мы улучшаем текущие алгоритмы, чтобы уменьшить число ложных срабатываний, и публикуем документацию на страницеsource.android.com. Упростив отладку в случае сбоев, можно снизить нагрузку на разработчиков при обслуживании. Например, чтобы было проще обнаружить ошибки санитайзера UBSan, мы по умолчанию добавили в систему сборки Androidподдержкуминимального времени выполнения UBSan. Изначально минимальное время выполнения былодобавленодругими разработчиками Google специально для этой цели. При сбое программы из-за санитайзера Integer Overflow в сообщение об ошибке SIGABRT добавляется следующий фрагмент:

Abort message: 'ubsan: sub-overflow' 

Увидев это сообщение, разработчики поймут, что необходимовключить режим диагностики, чтобы распечатать информацию о сбое:

frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:2188:32: runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'size_t' (aka 'unsigned long')

При этом в SELinux есть инструмент audit2allow, который позволяет предлагать правила, разрешающие те или иные заблокированные операции:

adb logcat -d | audit2allow -p policy #============= rmt ============== allow rmt kmem_device:chr_file { read write };

И пусть audit2allow не всегда предлагает правильные варианты, он сильно помогает разработчикам, плохо знакомым с SELinux.

Заключение


В каждом выпуске Android мы предлагаем вам новые инструменты, которые защищают всю экосистему, обеспечивая необходимую производительность и стабильную работу. Важную роль в этом играет анализ данных. Надеемся, что эта статья помогла вам лучше понять, какие сложности возникают при внедрении новых средств предотвращения атак и как мы с ними справляемся.



Благодарим наших коллег и авторов: Кевин Деус, Джоэл Галенсон, Билли Лау, Иван Лосано специалистов по вопросам безопасности и конфиденциальности данных Android. Отдельная благодарность Звиаду Кардава и Джеффа Ван Дер Ступа за помощь в подготовке статьи.
Подробнее..

Security Week 09 инфосек-драма вокруг Nurserycam

01.03.2021 20:22:05 | Автор: admin
На прошлой неделе получил развитие вялотекущий скандал вокруг Footfallcam, британского производителя специализированных веб-камер. Издание The Register в своем материале приводит предысторию: все началось с сообщений нидерландского исследователя OverSoftNL, в которых он еще в начале февраля описал серьезные проблемы с безопасностью устройств этой компании.



Как выяснил эксперт, камера Footfallcam, предназначенная для подсчета проходящих мимо людей, построена на плате Raspberry Pi. Анализ прошивки показал не только забытые разработчиком отладочные файлы (и один музыкальный трек), но и фиксированный пароль доступа к Wi-Fi-сети стандартного пользователя ОС Raspbian с паролем по умолчанию, а также включенный доступ по протоколу SSH. Иными словами, после добавления в корпоративную сеть устройство представляло собой огромную дыру в безопасности. Но это был не единственный продукт производителя со странным подходом к защите.

Драма началась в процессе приватного общения исследователя c производителем. Представители Footfallcam запросили у OverSoftNL и его компании услуги пентестинга, но после предварительной оценки стоимости исследователя публично обвинили в вымогательстве и пообещали заявить в полицию. Здесь к истории подключился другой исследователь, Эндрю Тирни (Andrew Tierney), который 14 февраля опубликовал обзор проблем в другом устройстве того же производителя. На этот раз речь шла о камерах Nurserycam. Их устанавливают в детских садах, а родителям предлагается скачать приложение, через которое они могут получить доступ к видео в потоковом режиме.

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

Финальным аккордом истории стала утечка пользовательских данных, предположительно произошедшая в результате взлома серверов компании. О ней стало известно 22 февраля: в открытый доступ попали сведения о 12 000 клиентов Nurserycam, включая пароли открытым текстом. Судя по анализу уязвимостей, можно говорить о многолетнем игнорировании базовых средств защиты пользовательских данных. На это также указывают свидетельства клиентов Nurserycam: несколько лет назад кто-то обнаружил, что прямой доступ к любым видеопотокам можно получить, перебирая цифры в URL, а архив записей какое-то время лежал на FTP без пароля.

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

Что еще произошло


Эксперты вновь сообщают об опасности навыков (по сути, стороннего софта) для умных колонок Amazon Alexa (новость, исследование). Ряд прорех в защите позволяет в теории использовать навыки для фишинговых атак на пользователей и прочего. Представители Amazon (впрочем, как и в других подобных случаях) отрицают возможность вредоносных атак на умные голосовые устройства.

Специалисты Лаборатории Касперского опубликовали свежее исследование о деятельности группировки Lazarus, частично связанное с недавней атакой на исследователей по безопасности.

В другом отчете Лаборатории Касперского освещают эволюцию сталкерского ПО для неправомерной слежки за людьми.

В Индии обнаружена масштабная утечка данных о прошедших тест на коронавирус.

В свитчах Cisco Nexus 3000 и Nexus 9000 нашли (и закрыли) критическую уязвимость, которую оценили на 9,8 балла по шкале CvSS, она давала возможность удаленно получить root-права.
Подробнее..

Как я прошел обучение в учебном центре Специалист при МГТУ им.Н.Э.Баумана по курсу CCNA Безопасность в сетях Cisco

01.03.2021 22:20:48 | Автор: admin

Здравствуй, дорогой читатель!

В начале февраля я попал на данный курс и сразу окунулся в обучение. В ходе изучения данного курса, я понял, что он состоит из основ курса CCNA и дополнительными наработками и кейсами от преподавателя.

Курс представлял собой несколькочасовое занятие, часть которого состояло из вебинара, а вторая часть представляла собой практику в виде выполнения лабораторных работ.

В обучении я увидел несколько плюсов:

  • Доступность стендов;

  • Очень подробное описание лабораторных работ и команд;

  • Быстрое решение технических проблем (редко возникали);

  • Учебный материал можно оставлять себе;

  • Лабораторный стенд доступен после окончания обучения еще неделю, что дает возможность отточить полученные знания;

  • Отзывчивость преподавателя, всегда готов ответить на любые вопросы.

Из минусов могу выделить один пункт, но кому-то он может не показаться минусом:

  • Выдача сертификата/удостоверения/свидетельства без проведения тестирования на усвоения программы.

В целом, при достаточном количестве времени на выполнение лабораторных работ и закрепления материала, обучение является качественным.

По итогам этой статьи каждый сам сделает свои выводы, я лишь немного приоткрыл завесу тайны для тех, кто еще не проходил обучение в этом центре.

Подробнее..

Угрозы информационной безопасности в эпоху цифровой трансформации

02.03.2021 00:19:35 | Автор: admin

Введение


Цифровая трансформация (ЦТ) это прежде всего инновационный процесс, требующий внесения коренных изменений в промышленные технологии, социум и культуру, финансовые транзакции и принципы создания новых продуктов и услуг. Фактически, это не просто набор подлежащих развертыванию ИТ-продуктов и решений в компаниях и на производстве, а глобальный пересмотр подходов и стратегий в бизнесе, выполняемый с помощью информационных технологий. Цифровая трансформация является переходным периодом к шестому технологическому укладу в ходе четвертой промышленной революции (Industry 4.0).

image
Рис 1. Цифровая трансформация переход к 6-му технологическому укладу.

Не все компании готовы к новым и достаточно жестким требованиям, которые им предъявляет ЦТ, а именно, к полной модернизации методов ведения бизнеса, пересмотру внутренних бизнес-процессов и новой культуре взаимоотношений внутри компании. Мало того, менеджмент должен быть подготовлен, как к позитивным, так и к негативным последствиям цифровой трансформации.

Цифровая трансформация это не просто автоматизация и цифровизация отдельных производственных процессов на местах, это интеграция обычных офисных и промышленных технологий, которые мы используем ежедневно, с совершенно новыми ИТ-направлениями, специфичными для ЦТ, (облачные вычисления, искусственный интеллект и машинное обучение, IoT и т.д.).

Негативные последствия цифровой трансформации


Однако у процессов, которые вызывает цифровая трансформация, есть и негативная сторона. Революционные изменения, которые привносит в бизнес ЦТ, породили определенные проблемы для служб информационной безопасности (ИБ), а именно, возникли новые вектора угроз ИБ и расширился спектр уязвимостей для потенциальных кибератак.

Модная технология DevOps является предметом особой настороженности специалистов ИБ, так как она принципиально изменила взаимоотношения между разработчиками софта, системными администраторами, службами тех. поддержки и конечными пользователями. (Методология DevOps означает интеграцию деятельности разработчиков и специалистов по обслуживанию ПО, сетей и оборудования в командах и компаниях).

image
Рис 2. Что такое DevOps.

Также хочется отметить, что одним из серьезных препятствий для быстрого внедрения ЦТ в компаниях являются старые (унаследованные) технологии, которые обслуживают производственные и офисные процессы уже много лет. С одной стороны, их невозможно заменить быстро (без остановки бизнес-процессов), а с другой стороны они плохо вписываются в процессы цифровой трансформации и несут в себе множественные угрозы ИБ.

Ниже остановимся на основных проблемах ИБ, а также обозначим пути разрешения этих проблем в ходе ЦТ.

Проблемы информационной безопасности в условиях ЦТ


1. Непрозрачность событий ИБ в корпоративной инфраструктуре предприятий.
В крупных компаниях повсеместно используются различные технологические локации, развернутые в облачных сервисах, причем оснащенные собственными инструментами ИБ и разными внутренними сервисами. Однако, пока еще есть проблемы, как с интеграцией таких решений, так и с прозрачностью и фиксацией всех инцидентов и событий ИБ в такой сложной ИТ-инфраструктуре. Мало того, цифровая трансформация предполагает значительный рост, как облачных решений, так и усложнение корпоративной инфраструктуры за счет внедрения IoT, блокчейна, ИИ и т.д.

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

3.Интеграция ИБ-решений.
Хочется отметить, что в большинстве организаций до сих пор плохо с интеграцией различных ИБ-решений, нет сквозной видимости всех угроз, плохо с контролем соответствия требованиям регуляторов (compliance).

4.Гибкое масштабирование.
По результатам опросов и исследований в области информационной безопасности экспертами выяснено, что на многих предприятиях, четверть корпоративной инфраструктуры так и остаётся незащищенной. По мере роста ИТ-инфраструктуры, вызванного цифровой трансформацией, а также в связи с усложнением кибератак, появляется потребность в масштабируемости ИБ-решений. И даже если в компании есть эффективно работающие решения, защищающие отдельные компоненты инфраструктуры ИТ (например, антивирусы, межсетевые экраны и т.д.), то в целом это не повышает общий уровень безопасности в организации, по причине плохой интеграции и масштабируемости этих отдельных решений.

На данный момент наибольшую проблему у специалистов по кибербезопасности вызывают сложные для блокировки полиморфные кибератаки, целевые кибератаки (APT, advanced persistent threat, развитая устойчивая угроза), а также рост использования методологии DevOps, которая повышает риски несвоевременного обнаружения новых уязвимостей.

image
Рис 3. Фазы целевой кибератаки (APT, advanced persistent threat).

5.Последствия обновлений ПО.
До сих пор остаются опасными угрозы, связанные с обновлением софта, так как зачастую вместе с патчами и апдейтами может быть инсталлировано и вредоносное ПО.

Стратегия обеспечения безопасности в условиях ЦТ или меры противодействия угрозам


В будущем, ЦТ может быть использована как для позитивных изменений в социуме, так и для реализации угрозы для мировой стабильности и безопасности. Таким негативным примером является, так называемое, кибероружие. Для того, чтобы в условиях постоянно нарастающей нестабильности, обозначить стратегию безопасности своего бизнеса и систем государственного управления, необходимо уяснить для себя в целом, что такое безопасность и какая она бывает.

Таким образом, само понятие безопасность подразделяется на 3 большие группы: личную, общественную и государственную.

Личная безопасность это такое состояние, когда человек защищён от любого вида насилия (например, психологического, физического или др.)
Общественная безопасность способность социальных институтов государства защитить личность и общество от различного вида угроз (в основном, внутренних).
Государственная безопасность система защиты государства от внешних и внутренних угроз.

Еще одним важным направлением в области безопасности, является информационная безопасность и защита информации. Цель работы специалистов по защите информации это обеспечение её конфиденциальности, доступности и целостности. В общем, эти три ключевых принципа ИБ называют триадой CIA, ниже раскроем смысл этих понятий.

Confidentiality (с англ.конфиденциальность) это свойство информации быть закрытой для неавторизованных лиц;
Integrity (с англ.целостность) свойство сохранения правильности и полноты данных;
Availability (с англ. доступность) свойство информации быть доступной и готовой к использованию по запросу авторизованного субъекта.
image
Рис 4. Три ключевых принципа ИБ (триада CIA). Основная цель информационной безопасности в контексте ЦТ это обеспечить защищенность как информации, так и ИТ-инфраструктуры от случайных или преднамеренных воздействий (атак и т.д.), которые могут нанести неприемлемый ущерб владельцам информационных активов.

Особое внимание необходимо уделить инцидентам ИБ на объектах критической информационной инфраструктуры (КИИ), это могут быть, как таргетированные атаки (APT), так и техногенные катастрофы, физическое похищение активов и др. угрозы. По мере усложнения атак наращиваются и средства обороны (т.е. инфраструктура ИБ).
На этом фоне все большую популярность набирают системы SIEM (Security information and event management), основная задача которых это мониторинг корпоративных систем и анализ событий безопасности в режиме реального времени, в том числе с широким использованием систем ИИ и глубокого машинного обучения (Deep learning).

Крупные технологические компании, которые лидируют в области ЦТ, намного чаще других интегрируют свои продукты и средства ИБ в единую архитектуру корпоративной безопасности. Надо отметить, что в таких компаниях отдают предпочтению стратегическому подходу и формированию политики безопасности, что позволяет:
  • быстро обнаруживать угрозы и оперативно реагировать на них;
  • обеспечивать качественную защиту информационных активов;
  • иметь прозрачную для обнаружения угроз технологическую среду.

Лидеры цифровой трансформации, как правило, охотнее автоматизируют ИБ-процессы в компании, это намного эффективнее ручного мониторинга угроз и событий ИБ, который применялся повсеместно до периода ЦТ. Позитивным примером такой автоматизации и комплексного подхода является внедрение SOC (Security Operations Center, центр обеспечения безопасности). Однако нужно учитывать, что настройка автоматизации всех рабочих процессов требует большего времени для тестирования и необходимости привлечения грамотных специалистов.

image
Рис 5. Внедрение SOC (Security Operations Center) в компании.

Одной из особенностей ИБ в эпоху цифровой трансформации является процесс внедрения в корпоративную систему средств централизованного контроля соответствия как промышленным стандартам, так и стандартам ИТ и ИБ, что повышает эффективность работы такого направления ИБ, как compliance.

Заключение


Одним из серьезных препятствий на пути компаний к ЦТ является необходимость обеспечения высокого уровня информационной безопасности, что не всегда посильно большинству компаний, особенно фирмам из сектора SMB. При этом необходимо учитывать факторы нарастания, как внутренних, так и внешних угроз ИБ, связанные со значительным ростом сектора киберпреступности, а также рисками, возникающими естественным путем в ходе реализации методологии DevOps, облачных технологий, IoT и т.д.

Один из достаточно новых, но эффективных подходов в области обеспечения безопасности информационных активов это применение методов проактивной защиты, способных не просто защитить, но и предотвратить кибератаки. Здесь хочется отметить такие технологии, как ханипоты (honeypots и honeynets), а также более продвинутые системы по развертыванию распределенной инфраструктуры ложных целей (Distributed Deception Platform, DDP).
В итоге, можно выделить лучшие практики ИБ, которые мы можем порекомендовать компаниям и бизнесу в ходе процесса цифровой трансформации:
  • построить единую архитектуру безопасности, которая обеспечит централизованное управление ИТ-инфраструктурой и прозрачность всех событий ИБ;
  • разработать стратегию защиты корпоративной сети и политику безопасности компании;
  • внедрить встроенные средства контроля соответствия стандартам и требованиям регуляторов;
  • использовать методы, как превентивной, так и проактивной защиты.

image

Рис 6. Стратегический подход к ИБ разработка политики безопасности компании.
Подробнее..

Миф про мобильный CHACHA20

02.03.2021 14:06:25 | Автор: admin

При подготовке Методики расчета Индекса надежности HTTPS мы перерыли массу тематической литературы и не раз сталкивались с рекомендацией поддерживать на веб-сервере шифронаборы на основе алгоритма шифрования CHACHA20 в целях снижения нагрузки на мобильные клиенты, которые не умеют в аппаратный AES. В этом контексте обычно упоминались процессоры Mediatek и скопом старые бюджетные мобильные процессоры.

Действительно ли CHACHA20 со своим верным спутником POLY1305 позволяют не слишком греться мобильным клиентам и стоит ли его поддерживать на веб-сервере? Давайте это обсудим!

CHACHA20 был создан известным специалистом по криптографии Дэниэлом Бернштейном, которого мы любим, в частности, за Curve25519, а также за правозащитную деятельность, благодаря которой только олдфаги помнят, что означало _EXPORT_ в имени шифронабора. Алгоритм неплохо изучен, работает в AEAD-режиме, не имеет известных слабостей и уязвимостей, и является одним из двух алгоритмов шифрования, одобренных IETF для использования в TLS 1.3 (второй бессмертный AES).

Его теоретическая криптостойкость при использовании в TLS оценивается по-разному, в интервале между AES-128 и AES-256 в режиме GCM, что считается достаточным по сегодняшним меркам и на обозримую перспективу. При этом отмечается, что CHACHA20 быстрее AES, т.е. потребляет меньше процессорных ресурсов на обеспечение того же уровня криптостойкости. Эта формулировка не только отдает душком телемаркетинга (при всем уважении к ее автору), но и упускает важную деталь: на процессорах без аппаратной поддержки AES.

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

Intel представил поддержку AES-NI в 2010 году в процессорах архитектуры Westmere, причем далеко не во всех: Atom, Celeron, Pentium и Core i3 она еще долго не полагалась. В поддержке AES-NI без копания в спецификациях можно быть уверенным только начиная с архитектуры Goldmont (Apollo Lake и Denverton), а это уже 2016 год.

У AMD это архитектуры Bulldozer (2011) и Jaguar (2013 год), с ARM все сложнее: поддержка AES-инструкций предусмотрена в архитектуре ARMv8-A (2011 год, первое устройство 2013 год), но фактическое воплощение их в кремнии зависит от производителя процессора и я лично не стал бы так уверенно свистеть про старые бюджетные мобильные процессоры, скорее стоит говорить о не флагманских мобильных процессорах вообще, в т.ч. выпускаемых поныне.

Проще говоря, встретить процессор без аппаратной поддержки AES не так уж и сложно. Получается, CHACHA20, действительно, отличная альтернатива AES? Давайте взглянем, например, на результаты этого исследования. На процессорах без поддержки AES CHACHA20 заметно опережает его в производительности, зачастую в разы. К сожалению, замеров температуры нам не показали, но если речь идет о серверном процессоре, очевидно, что разница в потребляемых процессорных ресурсах значима.

Ситуация меняется на прямо противоположную, когда речь заходит о процессорах с поддержкой AES. Вряд ли стоит винить в этом CHACHA20, которому никто не предложил персональный набор инструкций в процессоре, а что бывает, когда оба участника играют по одним правилам, мы видели на старых процессорах (напоминаю: AES сливает).

Так что, дружно включаем поддержку CHACHA20 на веб-серверах? Почему бы и нет, хотя бы из того соображения, что все яйца в одну корзину не кладут, и если вдруг завтра в самом AES или его реализации в конкретной криптобиблиотеке найдут дыру, мы легким движением руки сможем отключить его до выяснения, оставшись на CHACHA20, а не судорожно искать, чем заменить AES, да как это включается.

Куда менее однозначен вопрос о месте CHACHA20 в нашей жизни списке шифронаборов, предлагаемых веб-сервером для согласования, то есть о его приоритетности.

Давайте вспомним, как вообще происходит согласование шифронабора при установлении HTTPS-соединения: клиент передает серверу список поддерживаемых им шифронаборов, в порядке от балды и изменить этот порядок можно только через групповые политики Windows и только для Internet Explorer браузеров, использующих SChannel (поправьте, если ошибаюсь). Сервер сравнивает полученный от клиента список со списком поддерживаемых им самим шифронаборов и сообщает клиенту, какой из них он выбрал для защиты соединения. Если на сервере задан приоритет шифронаборов, согласован будет первый совпавший в обоих списках с учетом заданного на сервере приоритета. Если не задан, то админу сервера надо оторвать руки мы погружаемся в область неизведанного теории вероятностей.

Приоритетность шифронаборов на сервере обычно задают исходя из принципа максимально доступной защищенности: более стойкие шифронаборы идут в списке первыми, менее последними. Современный клиент натыкается на стойкий шифронабор и согласовывает его, устаревший клиент проскакивает по списку дальше, к менее стойкому шифронабору и согласовывает его. Все довольны, всё работает, от каждого по способностям, каждому по HTTPS.

И тут в эту стройную картину мира влезает шифронабор на базе CHACHA20, который мы добавляем из соображений снижения нагрузки на слабых с аппаратной точки зрения клиентов, ничего не зная о том, являются ли они одновременно устаревшими или нет (т.е. флагманом этого года от третьеразрядной китайской компании или середнячком пятилетней давности от первостатейного бренда). Клиент сообщает, что поддерживает TLS 1.3 и полный комплект соответствующих шифронаборов, как на базе AES, так и на базе CHACHA20. Ваше решение, админ, какой шифронабор согласовываем клиенту? Вот и я о том же

Резюмирую вышесказанное по поводу алгоритма шифрования CHACHA20.

  1. Алгоритм вполне себе хорош и годится для использования в TLS.
  2. Шифронаборы на его основе поддерживаются только достаточно современным браузерами, так что совсем без AES пока никуда.
  3. Выигрыш в производительности от его использования можно получить не только лишь на старых бюджетных мобильных процессорах, но и на десктопах и серверах. На процессорах с аппаратной поддержкой AES, ситуация меняется на прямо противоположную.
  4. При установлении HTTPS-соединения не существует способа узнать, поддерживает ли процессор клиента AES на аппаратном уровне. Соответственно, нет способа узнать, какой шифронабор окажется быстрее в каждом конкретном случае.
Подробнее..

Анастасия Тихонова Нам крупно повезло, что атаки APT пока еще не привели к массовым человеческим жертвам

02.03.2021 18:23:53 | Автор: admin


У нас новый проект: начиная с этого поста мы будем знакомить вас с профессиями и ведущими специалистами Group-IB, расскажем об их работе, исследованиях и кейсах, о том, как и где можно пройти обучение и, конечно, дадим ссылку на актуальные вакансии. Первый гость Анастасия Тихонова, ее интервью мы даем прямой речью и, что называется, без купюр.

Профайл:
Имя: Анастасия Тихонова.
Должность: Руководитель отдела исследования сложных киберугроз Департамента Threat Intelligence Group-IB.
Профессия: Threat Intelligence & Attribution Analyst.
Возраст: 29 лет.
Специализация: Киберразведка.
Чем известна: Более 9 лет работает в сфере информационной безопасности, последние четыре года исследует прогосударственные хакерские группы (APT).


С чем я имею дело: APT, киберармии, шпионаж и диверсии



Прямо сейчас мы все являемся свидетелями глобальной гонки кибервооружений разработки нового цифрового оружия, использования уязвимостей нулевого дня (0-day), тестирований новых средств доставки и распространения вредоносных программ. Свои киберармии есть у Китая, Северной Кореи, у США, у Ирана, и в эту гонку включились Турция, Индия, Казахстан, страны из Южной Америки. Я уже более трех лет, с 2017 года, изучаю APT (Advanced Persistent Threat) сложные целевые угрозы, атаки спецслужб или, как их еще называют, прогосударственные хакерские группы и вижу, как каждый год появляется 4-5 новых групп. Сейчас в мире действую более 70 групп, не считая тех, кто временно залег на дно или тех, кто пока еще действует скрыто. Цель большинства APT кибершпионаж, в меньшей степени саботаж и диверсии. Хотя есть и исключения в лице северокорейской группы Lazarus и многочисленных китайских APT, которые, атакуют криптовалютные биржи, банки и разработчиков компьютерных игр, чтобы заработать.

Прогосударственные группы это не обязательно хакеры в погонах, которые работают из условного бункера с 9.00 до 18.00. Это могут быть специалисты, которых используют в темную, или даже киберпатриоты, которые идут на преступление из-за любви к родине (есть и такие!), или профессиональные наемники хакеры на зарплате. У нас нет расписок или ведомостей, сколько им платят (и платят ли вообще), но думаю, что выше, чем по рынку. Потому что у них довольно специфическая работа. И риски соответствующие.

Любая кибератака, независимо от мотива, который преследуют хакеры это преступление и нарушение законодательства. Недавняя атака в Майами (Флорида) на АСУ ТП водоочистной системы это история с удаленным входом на компьютер. На машину был установлен TeamViewer, для того, чтобы сотрудники могли что-то удаленно контролировать. Аккаунт был запаролен, но злоумышленник смог подобрать пароль. Он логинился два раза, и во второй раз изменил количественное соотношение гидроокисида натрия в настройках интерфейса на такое, которое могло бы потенциально нанести существенный ущерб здоровью людей. Сотрудник компании, увидев это, тут же изменил настройки обратно на безопасные. И это не сюжет из киберпанк-сериала. В позапрошлом году северокорейским хакерам удалось добиться остановки энергоблоков на АЭС Куданкулам в Индии, предположительно скомпрометировав рабочую станцию довольно высокоуровневого сотрудника. В 2020 году в Израиле атакующим также удалось получить доступ к системам очистки воды и они даже удаленно пытались изменить уровень содержания хлора, что вызвало бы волну отравлений. Нам крупно повезло, что атаки APT пока еще не привели к массовым человеческим жертвам.

Крупные APT-группировки являются трендсеттерами тактики и процедуры, которые они используют в своих атаках, берет на вооружение и обычный киберкриминал. Например, после использования в 2017 году шифровальщиков WannaCry, BadRabbit и NotPetya прогосударственными группами, мир захлестнула настоящая эпидемия криминальных атак ransomware с их помощью можно заработать не меньше, чем в случае успешнои атаки на банк, при том, что техническое исполнение и стоимость атаки значительно проще. Даже такие классические финансово мотивированные преступные группы как Cobalt и Silence, раньше атаковавшие банки для хищения и вывода денег, переключились на использование шифровальщиков и стали участниками приватных партнерских программ. По нашим оценкам, ущерб от атак шифровальщиков а их было около 2000 за прошлый год составил как минимум $1 млрд. И это по самым скромным подсчетам.

Немного личного: как я пришла в профессию и о тонкостях Threat Intelligence


Мне кажется, что в инфобез я попала не случайно. В детстве я хотела стать полицейским. А в 10 классе пыталась поступить в Академию ФСБ я из семьи военнослужащих. До Group-IB я год проработала в антивирусной компании, и уже там часто замечала в прессе новости про Group-IB: выпустили новое исследование, провели расследование, участвовали в задержании. В то время на рынке ИБ-компаний было совсем немного игроков, и уже тогда Group-IB выделялась своей нетерпимостью к киберпреступности, ставкой на технологии, и мне стало интересно, узнать, какие возможности для развития здесь есть. Когда я пришла в 2013 году в Group-IB, наш департамент Threat Intelligence назывался просто отделом аналитики, и мы занимались абсолютно разными вопросами: от исследований хактивистов до помощи отделу расследований с идентификацией хакеров и установлением их личностей. За семь лет наш отдел из трех человек вырос до департамента Киберразведки с более чем тридцатью сотрудниками.

Киберразведка бывает разная. Сейчас очень часто Threat Intelligence и рынок TI-инструментов сводится к отправке клиентов банальных черных списков списка плохих адресов, плохих доменов. Для нас, в Group-IB, Threat Intelligence & Attribution это знание об атакующих, нам уже недостаточно просто анализировать угрозы. Как говорит наш CTO Дима Волков, когда вы сталкиваетесь с реальнои угрозой, вам нужен ответ на один из важных вопросов: кто вас атакует и с помощью чего? Кроме этих данных, мы даем клиентам инструменты для работы, ну и предоставляем наш собственныи сервис, которыи перекладывает часть активных задач на плечи наших специалистов, которые уже обладают необходимым опытом и навыками. Многое теперь делает за нас машинный интеллект и автоматизированные системы. Но это не отменяет тонкую ручную работу.

Одно из моих первых больших исследований было на тему атак на Россию хакеров, которые поддерживают ИГИЛ. Об этом тогда Forbes писал: Хакеры-исламисты из группировок Global Islamic Caliphate, Team System Dz, FallaGa Team атаковали около 600 российских сайтов госведомств и частных компаний. Мы тогда ещё в полу-ручном режиме получали доступ к андеграунду: я заходила на хакерские форумы, регистрировалась, собирала различную полезную информацию и данные для киберразведки (Threat Intelligence), и на их основе делала отчеты для наших клиентов. В какой-то момент мне стало просто скучно уже заниматься андеграундом, захотелось задачек посложнее и мой руководитель, Дмитрий Волков, CTO Group-IB, предложил сделать исследование про одну из китайских APT. С этого все и началось.



В моей работе нужно быстро шевелить мозгами, руками да вообще шевелиться. За один день у нас может быть исследование атак прогосударственных группировок из Китая, потом ты видишь, как прилетела сработка на правило детекта по нигерийцам (недавно была совместная операция с Interpol), а к вечеру вообще окажется, что кто-то DDOS-ит клиента от имени российских хакеров

Девушка в инфобезе? Ну да, и что? Терпеть не могу такие вопросы. Как говорится, talent has no gender. Не важно какого ты пола, ты можешь быть отличным аналитиком, рессерчером, а можешь и не быть им)).

Работа как она есть: немножко внутрянки



Мой обычный день начинается с чашки кофе и твиттера. У меня неплохая база подписок там и исследователи, и журналисты, на кого я подписана, и кто подписан на меня. В этой соцсети инфобез обменивается данными о различных атаках, отчётами вендоров. Например, очень интересные расследования делает сейчас корейская компания ESRC. Еще я подписана на парочку профильных телеграм-каналов по APT. Здесь комьюнити работает очень четко: если один исследователь нашел управляющий сервер хакерской группы и сбросил данные в телеграм-канал, ему помогают доисследовать и скидывают информацию по этому кейсу. Любая вброшенная тема про APT обычно очень быстро обрастает интересными подробностями, а вот к киберкрайму и фишингу интерес не такой повышенный. Ну может быть за исключением популярного ransomware.

Работа над любым кейсом начинается с аналитики. Как правило, перед тем, как я начну ресерч, у меня уже есть пул информации: как нашей, так и чужой (от других вендоров или аналитиков). Я начинаю раскручивать обнаруженные идикаторы: хеши троянов, вредоносных документов, домены, ссылки и так далее, которые использовались, и тестирую все это на возможность дополнения этих индикаторов нашими данными, которые ещё никто не видел, такое часто бывает. Мои рабочие инструменты наши разработки Threat Intelligence & Attribution, сетевой граф Group-IB с их помощью я довольно быстро нахожу дополнительные индикаторы компрометации и отправляю их в виде оповещения для клиента. Благодаря этому у клиентов есть возможность предотвратить атаку и заблокировать нежелательную активность.


На фото: пример исследования инфраструктуры группы с использованием сетевого графа Group-IB


У нас есть исторические связи групп и хакеров в комьюнити, данные киберпреступников за несколько лет. Это ценные данные почта, телефоны, мессенджеры, база доменов и IP, данные, связанные с рассылками вредоносных программ. Например, в базе Group-IB TI&A, все домены, когда-либо используемые злоумышленниками с историей их изменений за 17 лет. Мы можем говорить о специфике, почерке каждой отдельной преступной группы. Мы знаем, что одна группа использует одни и те же сервера, или регистрирует доменные имена у двух любимых провайдеров. Все эти данные мы загружаем в External Threat Hunting системы Group-IB и получаем на выходе то, что сейчас можно называть эффективный threat hunting.

Все, даже очень умные киберпреступники, совершают ошибки. Бывает так, что ты долго сидишь, мониторишь персонажа, пытаешься найти какие-то дополнительные аккаунты и так далее, и не можешь найти. А потом вдруг видишь, что он на выложенном в интернет скриншоте или старом фотоснимке указал свою личную почту. Приходится копать глубже, deeper analysis. Ты уже начинаешь искать дополнительные аккаунты, людей, которые могли с ним взаимодействовать, если вычисляешь конкретный город, получаешь уже больше информации, иногда бывает, что ты уже знаешь улицу. Что может быть подсказкой? Это может быть фотография из соцсетей, или фотография в инсте его девушки, нет девушки ищи в тиндере и так далее проще говоря OSINT, разведка на основе открытых источников. Этим инструментом обладают все технические подразделения Group-IB, но у каждого свой OSINT.

Нас исследуют тоже. Вы думаете нас, Group-IB, не пытались атаковать? Мы противостоим самой настоящей киберпреступности, нам пытаются угрожать, приветы присылали. Не как Кребсу, конечно, другие приветы, чаще с ВПО.

В конечном итоге вся моя аналитика нужна для того, чтобы предотвращать киберпреступления. Это кажется научной фантастикой, но мы можем предсказывать атаки еще до того, как хакеры и APT совершают их. Еще на этапе подготовки инфраструктуры мы выявляем атаки и предупреждаем клиентов. Кроме того, данные Threat Intelligence & Attribution обогащаются информацией из darkweb, с подпольных хакерских форумов и используются в других наших решениях, позволяя аналитикам увидеть наиболее полную картину угроз и атрибутировать преступную деятельность с предельной точностью.



От Кореи до Карелии: ландшафт APT


Если сравнивать разные APT, то инженерный оргазм по меткому выражению нашего босса Ильи Сачкова я испытываю от северокорейских групп. Мне нравится их подход они вдумчиво и нестандартно подходят к своей работе. Например, на этапе разведки и пробива проводят супер-реальные собеседования с кандидатами, играют вдолгую, не вызывая подозрений. Плюс у них, действительно есть интересные инструменты, которые они постоянно развивают. Изначально они начинали с классического кибершпионажа против Южной Кореи и США, со временем стали универсальными солдатами, способными похитить деньги, ценную информацию или устроить диверсию. Из года в год такие северокорейские группировки как Lazarus и Kimsuky показывают стабильное развитие методов атак и своих инструментов. В прошлом году большое количество атак северокорейских хакеров были направлены на военных подрядчиков по всему миру. Об этом писал Коммерсант, может вы читаете такую прессу:)

В Северной Корее, по моему мнению, есть крупная корневая группировка Lazarus, у которой, в подчинении есть разные команды, например, Андариэль, для решения различных непрофильных задач. Кстати, оба названия этих северокорейских APT взяты исследователями из популярной компьютерной игры Diablo.

В Иране вербовка сотрудников в APT-группы происходит прямо со студенческой скамьи. Как-то раз мы опубликовали на Хабре статью про иранских хакеров, где в документах оказалась написаны имя и фамилия одного из фигурантов. Мы сначала сомневались мало ли, чье имя вписано. Однако, оказалось, что когда-то давно была засвечена его почта на хакерских ресурсах, что нас довольно сильно заинтересовало. Распутав всё это мы нашли очень много различных аккаунтов на форумах, которые посвящены обучению использования уязвимостей, что еще больше нас убедило в том, что именно этот человек блэчер, занимается хакингом. Когда мы опубликовали свои находки, он отписался в твиттере в таком духе Почему вы так просто обвиняете людей, мало ли, человека могли подставить, либо он оступился?. Через какое-то время он сам удалил это сообщение: оно обличало его с головой.

Мы не слышим про американские APT, но это не значит, что их нет. Американские группы есть, просто о них почти ничего нет. Зачем тебе много мелких APT-групп, если у тебя есть одна хорошо организованная, которая работает по задачам и шпионит за другими? Риторический вопрос. В США всё тесно связано с АНБ, то есть вот у них, я бы сказала, довольно большая сеть с вот этими 0-day и прочими уязвимостями, инструментами. То, что выложил WikiLeaks это малая часть того, что есть у АНБ.

Русские хакеры, которые работают на государство, это сейчас очень модная и хайповая на западе тема. Хакерские атаки в прессе часто привязывают к той или иной стране, исходя из напряженной политической ситуации Россия vs США, Израиль vs Иран, Северная Корея vs Южная Корея, а не на основе реальных технических данных, однозначно указывающие на ту или иную группировку. Не будем забывать о том, что группы часто используют ложные флаги, и пытаются запутать следы. Например, так делал Lazarus. Вообще русский хакер это что-то уже из конца 90-х. Нет никаких русских, есть русскоязычные выходцы из стран постсветского пространства. Да и русские хакеры самые крутые тоже уже не так: группы перемешаны и состоят из людей разных национальностей.



Не надо думать, что все просто. APT часто пытаются запутать следы, выбрасывают ложные флаги и переводят стрелки друг на друга. Те же иранские MuddyWater начинали с того, что пытались подделаться под Fin7. Если, как в случае с Lazarus, выйти на конкретные айпишники, которые принадлежат Северной Корее, то после этого можно делать заявление о том, что это Северная Корея. И так делают некоторые вендоры. А так ты можешь смотреть только на цели, которые атаковались, смотреть на инфраструктуру, откуда она была взята, и на манеру каких-нибудь комментариев в написании кода, и так далее. Если была атака в Южно-Китайском море, ты можешь предположить, что замешаны страны, интересы которых связаны с этим регионом. И дальше уже начинаешь разбираться, что за инструменты использовались: раз это троян PlugX, то скорее всего, это точно Китай. И дальше мы доходим до инфраструктуры, оказывается, что это, действительно, китайские айпишники.

Секреты мастерства и список книг для прокачки


В собственном саморазвитии потолка нет. Я бы хотела поработать в Европе и Азии, потому что там было бы больше шансов обмена опытом с другими специалистами инфобеза, начинаешь понимать менталитет и лучше представлять как бы APT могли работать конкретно в этом регионе. Думаю, что это будет несложно сделать. В позапрошлом году Group-IB открыла глобальную штаб-квартиру в Сингапуре, а в прошлом европейскую штаб-квартру в Амстердаме. Поскольку инструменты развиваются, а APT-группы не исчезнут никогда работа у меня будет всегда. Тем более будет востребована моя профессия.

Мы все супер-многозадачны: часто приходится брать очень много данных из разных источников, анализировать, и это кропотливый процесс. Поэтому для новичка важно несколько качеств: любопытство, усидчивость. Нам необходимо быть в курсе всех политических новостей, в курсе всех типов атак, отслеживать появление новых типов атак или уязвимостей. В большинстве случаев мы берём людей с профильным образованием в информационной безопасности, но так как мой случай не из этих, то возможен вариант с получением опыта на месте. То есть если ты интересующийся человек, привык докапываться до сути, у тебя есть знания в IT (всё равно придётся иметь знания в IT) тогда в принципе на младшего аналитика ты можешь попасть, и уже опытом добиться развития в этой сфере. Главное целеустремленность и желание развиваться.

Для того, чтобы погрузиться в профессию или прокачаться как Threat Intelligence аналитик, рекомендую этот небольшой список литературы:

  1. Нестареющая классика от ветерана ЦРУ Ричардса Хойера ( Richards Heuer) Psychology of Intelligence Analysis, которая описывает особенности нашего мышления, ошибки и ограничения (когнитивные предубеждения), которые генерирует наш мозг. Например, для распознавания неожиданного явления требуется больше однозначной информации, чем для ожидаемого: We tend to perceive what we expect to perceive.
  2. О базовых принципах и концепциях Cyber Threat Intelligence можно узнать из издания Threat Intelligence: Collecting, Analysing, Evaluating by David Chismon, Martyn Ruks from MWR InfoSecurity.
  3. Для тех, кто хочет не только в Cyber Threat Intelligence, но и более конкретно разбираться в теме с APT, есть хорошая книга Attribution of Advanced Persistent Threats: How to Identify the Actors Behind Cyber-Espionage by Timo Steffens. В ней изложен предметный анализ того, как действуют хакеры, какие ошибки они совершают и какие следы оставляют.
  4. Kill Chain, Diamond Model и MITRE ATT&CK три кита, на которых должны базироваться знания любого аналитика Cyber Threat Intelligence, в связи этим рекомендую три книги: MITRE ATT&CK: Design and Philosophy с подробным объяснением того, для чего вообще создавался и служит ATT&CK, как происходит его обновление и как его использует сообщество. Обязательно загляните и на сайт MITRE ATT&CK, где уже можно ознакомиться с описанием некоторых групп и их возможностей.
  5. Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains by Eric Hutchins, Michael Cloppert, and Rohan Amin кроме описания самой модели Kill Chain, тут можно встретить примеры, которые также будут полезны для начинающих аналитиков.
  6. The Diamond Model of Intrusion Analysis by Sergio Caltagirone, Andrew Pendergast, and Chris Betz довольно простая, но полезная книга для понимания основ CTI.
  7. Большой репозиторий с разными исследованиями, которые выпускались вендорами ИБ, можно найти в APTNotes. Обновляется, к сожалению, нечасто, но там можно обнаружить большие интересные кейсы с описанием, как проводился анализ того, как делали атрибуцию, как действуют злоумышленники.
  8. Ну и конечно загляните к нам в блог, и почитайте исследования наших специалистов на русском языке и на английском


Как стать Threat Intelligence & Attribution Analyst?





Для тех, кто заинтересовался профессией Threat Intelligence & Attribution Analyst наша компания готова предложить практический курс по сбору информации о киберугрозах и обогащению процессов кибербезопасности данными TI для эффективного реагирования на инциденты и мониторинга угроз.


Цель курса Group-IB Threat Intelligence & Attribution Analyst научить вас собирать значимую информацию из разных типов источников как открытых, так и закрытых, толковать эту информацию и выявлять признаки подготовки к атаке. Занятия по программе включают в себя практические упражнения на основе примеров из рабочей практики Департамента киберразведки Group-IB. Такой подход важен для того, чтобы слушатели могли сразу применять полученные знания в своей ежедневной практике.

Работа, которая имеет смысл!


И еще одно важное объявление. Group-IB усиливает команду технических специалистов: стань частью команды и меняй мир вместе с нами! Сейчас открыто 120+ вакансий, в том числе 60 для технических специалистов. Подробности тут. Group-IB это новое поколение инженеров. Мы воплощаем смелые идеи, создавая инновационные технологии для расследования киберпреступлений, предотвращения кибератак, слежения за атакующими, их тактикой, инструментами и инфраструктурой. Присоединяйся!
Подробнее..

Удобный вид для проверки результатов сканирования Nmap

02.03.2021 20:22:33 | Автор: admin

Введение





Всем привет!

Я работаю в сфере информационной безопасности и занимаюсь анализом защищенности веб приложений. В свободное время я стараюсь повысить свои технические скилы и поэтому практикую bughanting на платформе hackerone или решаю лабы на hackthebox.

Вообще любой анализ web-приложения логично проводить с этапа сбора информации или разведки (кому как нравится, сути это не меняет). На этапе сбора информации о исследуемой системе я использую инструмент под названием nmap. Смею предположить, что данная легендарная утилита не нуждается в представлении, но, если вдруг кто-то не слышал вот ссылка.

Nmap это консольное приложение (да конечно есть различные форки, например Zenmap и.т.д), и вывод его по умолчанию тоже отображается в консоли. Конечно, он также поддерживает сохранение в файл, в разных форматах, я не буду останавливаться на этом подробно, кому интересно можно посмотреть полный список ключей. (Список опций для Nmap)

Все хорошо, когда ты сканируешь N хостов, и это N не превышает 10 или 20 штук. Но что делать если хостов становится сильно больше? А теперь представим, что часть из этих хостов например dev.example.com или test123.example.com, разработчики просто забыли вывести из эксплуатации и они не входят в область анализа? Каждый раз писать отчет и тратить на это существенную часть времени? Я вообще не фанат писанины отчетов, особенно на таком простом этапе. Поэтому я стал искать простые способы решения этой задачи.

Как говорили классики все гениальное просто.

nmap-bootstrap-xsl



Ссылка на github разработчика
Дает на выходе симпатичную html страницу, где все удобно разбито и представлено.





Как пользоваться?



1. Скачиваем сам файл стилей ссылка

2. Добавляем nmap-bootstrap.xsl в качестве таблицы стилей к вашему сканированию Nmap с аргументом --stylesheet:

 nmap -sS -A -p0-65535 -oA drive2 --stylesheet /home/kali/OSINT/nmap-bootstrap-xsl/nmap-bootstrap.xsl -iL /home/kali/Documents/Habr/drive2_domain.txt 


drive2- название xml файла который создаться после работы nmap

3. Используем xsltproc для конвертации файла в html.

 xsltproc -o drive2.html /home/kali/OSINT/nmap-bootstrap-xsl/nmap-bootstrap.xsl drive2.xml


drive2.html название html страницы которая получится
drive2.xml название xml файла который создался после работы nmap


Демонстрация работы



Для демонстрации работы возьмем какую-нибудь открытую программу по баг баунти, например DRIVE.NET, Inc.





Найдем все под домены домена *.drive2.ru и просканируем их nmap сразу с применением nmap-bootstrap-xsl стиля.

1. Ищем под домены домена *.drive2.ru с помощью sublister (ссылка на github)





2. Запускаем сканирование nmap



3. Полученные файлы после сканирования.



4. Используем xsltproc для конвертации файла в html.

 xsltproc -o drive2.html /home/kali/OSINT/nmap-bootstrap-xsl/nmap-bootstrap.xsl drive2.xml


5. Смотрим результат



Пример итоговой html страницы добавил на Яндекс диск. (ссылка на яндекс диск)

Вывод



Представленное решение является максимально простым. Достаточно просто скачать данный стиль и подключать его при сканировании. Это позволит получить список хостов с открытыми портами и сервисами, в удобном читабельном виде.

Надеюсь, представленная информация поможет вам в экономии времени на задачи с которыми я столкнулся и описал в статье.

Так же было бы интересно узнать, кто что использует для подобных задач. Будет круто если поделитесь чем-то интересным в комментариях. Всем бобра :)
Подробнее..

PKCS11 для самых маленьких

03.03.2021 08:18:42 | Автор: admin

В этой статье мы познакомимся со стандартом PKCS#11, предназначенным для работы с различными криптографическими устройствами. Для демонстрации мы будем использовать токены и смарт-карты Рутокен ЭЦП 2.0.

Чтобы вам было проще понять эту информацию, перед её прочтением желательно:

Исходя из определения из Википедии:

PKCS #11 один из стандартов семейства Public-Key Cryptography Standards (PKCS). Он определяет платформонезависимый программный интерфейс доступа к криптографическим устройствам смарт-картам, токенам, криптографическим ускорителям, серверам ключей и другим средствам криптографической защиты информации. Иногда именуется Cryptoki.

Проще говоря, PKCS#11 определяет платформонезависимый набор функций, структуры, константы и т.п. для работы с криптографическими устройствами. Эти функции могут быть реализованы внутри различных библиотек, например, opensc-pkcs11 или в нашей библиотеке по работе с устройствами Рутокен rtpkcs11ecp. Библиотеки могут отличаться не только реализацией, но и самим набором функций, типов и констант. Это возможно, так как стандарт PKCS#11 описывает различные способы расширения, что позволяет добавлять свои функции, например, для работы с CMS-подписью, флеш-памятью и т.п.

Но давайте обо всем по порядку. В первую очередь, определимся, что из себя представляют функции PKCS#11-библиотек. Функции PKCS#11 внутри это обертки для работы с токенами и смарт-картами через APDU команды

Про APDU

APDU язык ассемблера для устройств.

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

  1. Токену или смарт-карте посылается байтовая последовательность;

  2. Операционная система устройства обрабатывает эту последовательность в команду и посылает в ответ код возврата и, при необходимости, дополнительную информацию.

Что же могут содержать внутри себя такие команды? Все, что угодно! Начиная с просьбы отправить информацию об устройстве или записать какие-то данные на него и заканчивая просьбой зашифровать указанное сообщение. Более того, эти команды могут быть разбиты на несколько, что позволяет оптимизировать работу с токеном и сделать ее конвейерной. К примеру, при шифровании сообщения устройству может передаваться небольшая часть сообщения, а он в ответ будет высылать результат шифрования только этой части. Эта особенность может быть использована при работе с данными больших размеров.

И вот вроде бы все хорошо: APDU даёт полную возможность для общения с токеном и смарт-картой, но зачем же тогда нужна PKCS#11-обертка? Причины достаточно очевидны:

  • Работать с шестнадцатеричными байтовыми последовательностями весьма неудобно, каждый раз надо заглядывать в спецификацию команд. Хотелось бы иметь их текстовый эквивалент, а лучше целую библиотеку для разработки.

  • Программирование через APDU-команды имеет низкий КПД. При выполнении даже самой простой операции надо написать множество команд. PKCS#11 устраняет эту проблему: при выполнении одной функции PKCS#11 посылается несколько APDU команд. Меньше пишешь больше делаешь.

Теперь, когда мы знаем что лежит в основе PKCS#11-команд, перейдем к рассмотрению цикла работы с устройством.

Репозиторий с примерами

Чтобы улучшить понимание представленных ниже примеров рекомендуем:

  1. Клонировать репозиторий с примерами.

  2. Выполнить настройку системы согласно README.

  3. Попробовать собрать примеры.

  4. Отформатировать устройство семейства Рутокен ЭЦП 2.0 с помощью примера ex0_format_token.

Цикл работы с токеном

Придержим пока описание содержимого стандарта PKCS#11 и дадим поверхностное представление о том, как происходит работа с токеном в целом. Для этого рассмотрим листинг смены PIN-кода Пользователя на токене и смарт-карте:

#include #include "utils.h"extern CK_FUNCTION_LIST_PTR functionList;                 // Указатель на список функций PKCS#11, хранящийся в структуре CK_FUNCTION_LISTextern CK_FUNCTION_LIST_EXTENDED_PTR functionListEx;      // Указатель на список функций расширения PKCS#11, хранящийся в структуре CK_FUNCTION_LIST_EXTENDEDint change_pin_code(CK_SLOT_ID slot, char* oldPin, char* newPin);int main(void){    CK_SLOT_ID_PTR slots;                              // Массив идентификаторов слотов    CK_ULONG slotCount;                                // Количество идентификаторов слотов в массиве    char* oldPin = "12345678";    char* newPin = "12345678";    CK_RV rv;                                          // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11    int errorCode = 1;                                 // Флаг ошибки    // инициализируем библиотеку    if (init_pkcs11())         goto exit;    // получаем список слотов    if (get_slot_list(&slots, &slotCount))        goto free_pkcs11;    if (slotCount == 0) {        printf("No token found\n");        goto free_slots;    }    // изменяем PIN-код    if (change_pin_code(slots[0], oldPin, newPin))        goto free_slots;    errorCode = 0;    /*************************************************************************    * Очистить память, выделенную под слоты                                  *    *************************************************************************/free_slots:    free(slots);    /*************************************************************************    * Деинициализировать библиотеку                                          *    *************************************************************************/free_pkcs11:    free_pkcs11();exit:    if (errorCode) {        printf("\n\nSome error occurred. Sample failed.\n");    } else {        printf("\n\nSample has been completed successfully.\n");    }    return errorCode;}

Внутри заголовочного файла utils.h находится описание функций init_pkcs11, free_pkcs11, get_slot_list. Их определение мы дадим ниже.

Всю работу с токеном можно разделить на три этапа:

Подготовительный этап

Мы реализовали его внутри функции init_pkcs11:

#include "utils.h"CK_FUNCTION_LIST_PTR functionList;                 // Указатель на список функций PKCS#11, хранящийся в структуре CK_FUNCTION_LISTCK_FUNCTION_LIST_EXTENDED_PTR functionListEx;      // Указатель на список функций расширения PKCS#11, хранящийся в структуре CK_FUNCTION_LIST_EXTENDEDstatic HMODULE module;int init_pkcs11(){    CK_C_GetFunctionList getFunctionList;              // Указатель на функцию C_GetFunctionList    CK_C_EX_GetFunctionListExtended getFunctionListEx; // Указатель на функцию C_EX_GetFunctionListExtended    /* Параметры для инициализации библиотеки: разрешаем использовать объекты синхронизации операционной системы */    CK_C_INITIALIZE_ARGS initArgs = { NULL_PTR, NULL_PTR, NULL_PTR, NULL_PTR, CKF_OS_LOCKING_OK, NULL_PTR };    CK_RV rv;                      // Код возврата PKCS#11 функций    int errorCode = 1;                                 // Флаг ошибки    /*************************************************************************    * Выполнить действия для начала работы с библиотекой PKCS#11             *    *************************************************************************/    printf("Initialization...\n");    /*************************************************************************    * Загрузить библиотеку                                                   *    *************************************************************************/    module = LoadLibrary(PKCS11_LIBRARY_DIR "/" PKCS11ECP_LIBRARY_NAME);    CHECK(" LoadLibrary", module != NULL, exit);    /*************************************************************************    * Получить адрес функции запроса структуры с указателями на функции      *    *************************************************************************/    getFunctionList = (CK_C_GetFunctionList)GetProcAddress(module, "C_GetFunctionList");    CHECK(" GetProcAddress (C_GetFunctionList)", getFunctionList != NULL, unload_pkcs11);    /*************************************************************************    * Получить адрес функции запроса структуры с указателями на функции      *    * расширения стандарта PKCS#11                                           *    *************************************************************************/    getFunctionListEx = (CK_C_EX_GetFunctionListExtended)GetProcAddress(module, "C_EX_GetFunctionListExtended");    CHECK(" GetProcAddress (C_EX_GetFunctionListExtended)", getFunctionList != NULL, unload_pkcs11);    /*************************************************************************    * Получить структуру с указателями на функции                            *    *************************************************************************/    rv = getFunctionList(&functionList);    CHECK_AND_LOG(" Get function list", rv == CKR_OK, rvToStr(rv), unload_pkcs11);    /*************************************************************************    * Получить структуру с указателями на функции расширения стандарта       *    *************************************************************************/    rv = getFunctionListEx(&functionListEx);    CHECK_AND_LOG(" Get function list extended", rv == CKR_OK, rvToStr(rv), unload_pkcs11);    /*************************************************************************    * Инициализировать библиотеку                                            *    *************************************************************************/    rv = functionList->C_Initialize(&initArgs);    CHECK_AND_LOG(" C_Initialize", rv == CKR_OK, rvToStr(rv), unload_pkcs11);    errorCode = 0;    /*************************************************************************    * Выгрузить библиотеку из памяти                                         *    *************************************************************************/unload_pkcs11:    if (errorCode)        CHECK_RELEASE(" FreeLibrary", FreeLibrary(module), errorCode);exit:    return errorCode;}

Здесь происходит следующее:

  1. В память процесса подгружается PKCS#11-библиотека, хранящаяся по пути PKCS11ECP_LIBRARY_NAME, с помощью функции LoadLibrary (стандартная функция для Windows-систем, для Linux-систем определена обертка).

  2. Далее из библиотеки вытаскиваются указатели на функции C_GetFunctionList и C_EX_GetFunctionListExtended. Первая функция определена в стандарте PKCS#11 и позволяет получить структуру указателей на функции библиотеки. Вторая является специфичной для библиотеки rtpkcs11ecp и позволяет получить схожую структуру указателей на функции расширения библиотеки. О функциях расширения мы поговорим позже.

  3. Потом мы вызываем полученную функцию C_GetFunctionList и получаем уже саму структуру указателей на функции.

  4. С помощью функции C_Initialize инициализируется загруженная библиотека. Функция C_Initialize в качестве аргумента принимает параметры инициализации библиотеки. Подробнее о них можно почитать здесь, для нас же важен флаг CKF_OS_LOCKING_OK. Его необходимо использовать, если мы хотим использовать библиотеку в нескольких потоках. В нашем примере мы могли бы опустить этот флаг.

Основной этап

Основной этап можно разделить на работу со слотами и работу внутри сессии

Этап работы со слотами

Слот это дескриптор виртуального интерфейса, куда подключен токен. Конкретно в нашем примере весь этап работы со слотами уместился в определение одной функции get_slot_list:

int get_slot_list(CK_SLOT_ID_PTR* slots_ptr, CK_ULONG_PTR slotCount){    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Получить количество слотов c подключенными токенами                    *    *************************************************************************/    rv = functionList->C_GetSlotList(CK_TRUE, NULL_PTR, slotCount);    CHECK_AND_LOG(" C_GetSlotList (number of slots)", rv == CKR_OK, rvToStr(rv), exit);    CHECK_AND_LOG(" Checking available tokens", *slotCount > 0, " No tokens available", exit);    /*************************************************************************    * Получить список слотов c подключенными токенами                        *    *************************************************************************/    *slots_ptr = (CK_SLOT_ID_PTR)malloc(*slotCount * sizeof(CK_SLOT_ID));    CHECK(" Memory allocation for slots", *slots_ptr != NULL_PTR, exit);    rv = functionList->C_GetSlotList(CK_TRUE, *slots_ptr, slotCount);    CHECK_AND_LOG(" C_GetSlotList", rv == CKR_OK, rvToStr(rv), free_slots);    printf(" Slots available: %d\n", (int)*slotCount);    /*************************************************************************    * Выставить признак успешного завершения программы                       *    *************************************************************************/    errorCode = 0;free_slots:    if (errorCode)    {        free(*slots_ptr);    }exit:    return errorCode;}

Работа со слотами происходит примерно в такой последовательности:

  1. Получение списка слотов с помощью функции C_GetSlotList или через функцию ожидания событий, связанных со слотами (пример будет рассмотрен ниже).

  2. Выполнение различных функций работы со слотами. В нашей программе этот этап отсутствует, но его пример можно найти здесь для функции форматирования устройства C_EX_InitToken. Подробнее функции работы со слотами будут описаны ниже.

Этап работы внутри сессии

Сессия это дескриптор контекста выполнения последовательности операций. Обычно во время сессий выполняются основные функции работы с токеном или смарт-картой: шифрование, подпись и т.п. В нашем случае выполняется смена PIN-кода:

int change_pin_code(CK_SLOT_ID slot, char* oldPin, char* newPin){    CK_SESSION_HANDLE session;                         // Хэндл открытой сессии    CK_RV rv;                                          // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11    int errorCode = 1;    /*************************************************************************    * Открыть RW сессию в первом доступном слоте                             *    *************************************************************************/    rv = functionList->C_OpenSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &session);    CHECK_AND_LOG(" C_OpenSession", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Выполнить аутентификацию Пользователя                                *    *************************************************************************/    rv = functionList->C_Login(session, CKU_USER, oldPin, strlen(oldPin));    CHECK_AND_LOG(" C_Login (CKU_USER)", rv == CKR_OK, rvToStr(rv), close_session);    /*************************************************************************    * Установить PIN-код Пользователя по умолчанию                           *    *************************************************************************/    printf("\nChanging user PIN to default...\n");    rv = functionList->C_SetPIN(session, NULL_PTR, 0, newPin, strlen(newPin));    CHECK_AND_LOG(" C_SetPIN", rv == CKR_OK, rvToStr(rv), logout);    printf("User PIN has been changed to default successfully.\n");    errorCode = 0;    /*************************************************************************    * Сбросить права доступа                                                 *    *************************************************************************/logout:    rv = functionList->C_Logout(session);    CHECK_RELEASE_AND_LOG(" C_Logout", rv == CKR_OK, rvToStr(rv), errorCode);    /*************************************************************************    * Закрыть открытую сессию в слоте                                        *    *************************************************************************/close_session:    rv = functionList->C_CloseSession(session);    CHECK_RELEASE_AND_LOG(" C_CloseSession", rv == CKR_OK, rvToStr(rv), errorCode);exit:    return errorCode;}

Работу внутри сессий можно разделить на несколько этапов:

  1. Открытие сессии в слоте с помощью функции C_OpenSession.

  2. Аутентификация пользователя с помощью функции C_Login. Стандартно на Рутокене присутствуют два пользователя: Администратор (CKU_SO) и Пользователь (CKU_USER). Аутентификация на устройстве не является обязательной операцией. Она нужна, когда мы хотим получить доступ к операциям и объектам, которые требуют наличия соответствующих прав доступа. В нашем случае, это операция смены PIN-кода Пользователя.

  3. Выполнение различных функций по работе с сессиями. В нашем случае это функция C_SetPIN.

  4. Далее по нисходящей могут идти операции сброса прав доступа (C_Logout) и завершения сессии (C_CloseSession).

Завершающий этап

Весь наш завершающий этап поместился внутри определения функции free_pkcs11:

int free_pkcs11(){        CK_RV rv;        int errorCode;        printf("\nFinalizing... \n");    rv = functionList->C_Finalize(NULL_PTR);        CHECK_RELEASE_AND_LOG(" C_Finalize", rv == CKR_OK, rvToStr(rv), errorCode);    CHECK_RELEASE(" FreeLibrary", FreeLibrary(module), errorCode);        return errorCode;}

Завершающий этап можно разделить на:

  1. Деинициализацию библиотеки с помощью функции C_Finalize.

  2. Выгрузку библиотеки из памяти процесса через функцию FreeLibrary (для Linux-систем имеется обертка).

Классификация функций PKCS#11

Стандартные функции и функции расширения

В общем виде все функции внутри PKCS#11-библиотек можно разделить на:

  • Стандартные те, что явно описаны в стандарте. Список указателей на эти функции можно получить с помощью функции C_GetFunctionList, хранящейся в этой же библиотеке. Сами же стандартные функции имеют префикс "C_".

  • Расширения те, что были добавлены разработчиками библиотеки и не описаны в стандарте. Стандарт явно не определяет функцию для получения списка расширенных функций. Но в библиотеке rtpkcs11ecp этой функцией является C_EX_GetFunctionListExtended. Сами же функции-расширения обычно имеют префикс "C_EX_".

Описание стандартных функций можно найти в документации PKCS#11. Про то, как работать с расширениями надо смотреть у разработчиков конкретных библиотек. Например, у нас для этого есть отдельная страница на портале документации.

Разделение по предназначению

С другой стороны, функции PKCS#11 можно классифицировать по их предназначению. Логично выделить следующие виды функций:

  • Функции общего назначения. Например, для получения списка функций или получения информации о библиотеке.

  • Функции работы со слотами. Они не зависят от контекста работы с токеном. Например, C_GetSlotInfo, C_GetTokenInfo и т.п.

  • Функции для работы с сессиями. Как уже говорилось ранее, обычно во время выполнения этих функций осуществляется основное взаимодействие с токеном. При выполнении функции внутри сессии контекст работы с токеном не теряется. Самый простой пример этих функций: функция аутентификации (C_Login), функции работы с закрытым ключом на токене (C_Sign, C_Encrypt) и т.п.

Атомарные и составные операции

Некоторые операции в PKCS#11 работают привычным для нас образом: вызвал функцию получил результат. Но есть и операции, реализация которых выстроена через многократный вызов функций. Ярким примером такой операции является блочное шифрование: чтобы зашифровать данные нужно вызвать функции: C_EncryptInit, C_EncryptUpdate, C_EncryptFinish. Пример этого будет приведен ниже. Эта особенность связана с тем, что внутри библиотеки PKCS#11 скрыт вызов APDU-команд, который как раз предусматривает разбиение некоторых команд на несколько итераций. Как уже говорилось ранее, это способствует эффективному использованию PKCS#11 с потоками данных.

Работа со слотами

Слоты это виртуальные устройства библиотеки для подключения токенов и смарт-карт. PKCS#11 предоставляет функции для получения списка слотов и ожидания изменения состояний слотов. Также с помощью специальных функций можно получать информацию о состоянии слота, например, наличие токена в нем, информация о подключенном токене и т.п. Давайте подробнее рассмотрим функции по работе со слотами.

Получение списка слотов

Одна из самых важных операций, которую мы будем использовать в 99 процентах случаев это получение списка активных слотов. Для этого в PKCS#11 есть функция C_GetSlotList. Примером ее использования является функция get_slot_list, определенная ниже:

int get_slot_list(CK_SLOT_ID_PTR* slots_ptr, CK_ULONG_PTR slotCount){    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Получить количество слотов c подключенными токенами                    *    *************************************************************************/    rv = functionList->C_GetSlotList(CK_TRUE, NULL_PTR, slotCount);    CHECK_AND_LOG(" C_GetSlotList (number of slots)", rv == CKR_OK, rvToStr(rv), exit);    CHECK_AND_LOG(" Checking available tokens", *slotCount > 0, " No tokens available", exit);    /*************************************************************************    * Получить список слотов c подключенными токенами                        *    *************************************************************************/    *slots_ptr = (CK_SLOT_ID_PTR)malloc(*slotCount * sizeof(CK_SLOT_ID));    CHECK(" Memory allocation for slots", *slots_ptr != NULL_PTR, exit);    rv = functionList->C_GetSlotList(CK_TRUE, *slots_ptr, slotCount);    CHECK_AND_LOG(" C_GetSlotList", rv == CKR_OK, rvToStr(rv), free_slots);    printf(" Slots available: %d\n", (int)*slotCount);    /*************************************************************************    * Выставить признак успешного завершения программы                       *    *************************************************************************/    errorCode = 0;free_slots:    if (errorCode)    {        free(*slots_ptr);    }exit:    return errorCode;}

Первый вызов функции C_GetSlotList позволяет получить количество доступных слотов. Это позволяет в дальнейшем выделять память под необходимое количество слотов. Второй вызов позволяет получить список слотов.

Первым аргументом C_GetSlotList является флаг, говорящий библиотеке, возвращать ли только слоты с подключенными устройствами (CK_TRUE) или нет (CK_FALSE).

Мониторинг событий слотов и получение информации о слоте

Тем не менее, хоть функция C_GetSlotList и является самой часто используемой, она неудобна при написании приложений, которые хотят динамически следить за состоянием слотов. Особенно это может быть критично при написании многопоточных приложений. На помощь может прийти функция мониторинга событий слотов C_WaitForSlotEvent. Она прерывает свою работу при любом изменении состояния какого-либо слота и возвращает идентификатор измененного слота. Работа с этой функцией выглядит примерно следующим образом:

int monitor_slot_event(){    int errorCode = 0;    while (1) {        CK_SLOT_ID slot ;            CK_RV rv = functionList->C_WaitForSlotEvent(0, &slot, NULL_PTR);        if (CKR_CRYPTOKI_NOT_INITIALIZED == rv) break; // Индикатор того, что PKCS#11 деинициализирована из памяти.        CHECK_RELEASE_AND_LOG(" C_WaitForSlotEvent", rv == CKR_OK, rvToStr(rv), errorCode);        if (errorCode)            break;        CK_SLOT_INFO slotInfo;        rv = functionList->C_GetSlotInfo(slot, &slotInfo); // получение информации о слоте        if (CKR_CRYPTOKI_NOT_INITIALIZED == rv) break; // Индикатор того, что PKCS#11 деинициализирована из памяти.        CHECK_RELEASE_AND_LOG(" C_GetSlotInfo", rv == CKR_OK, rvToStr(rv), errorCode);        if (errorCode)            break;        if (CKF_TOKEN_PRESENT & slotInfo.flags) {                     token_inserted(slot);        }    }}

Как можно заметить, функция отлавливает помимо событий подключения и извлечения токена и смарт-карты, еще и событие деинициализации библиотеки PKCS#11 (код возврата CKR_CRYPTOKI_NOT_INITIALIZED). Данная особенность позволяет использовать эту функцию внутри многопоточных приложений без дополнительной возни с обработкой событий при завершении работы приложения.

Первым аргументом в функцию C_WaitForSlotEvent передается флаг блокировки (CKF_DONT_BLOCK). Если он установлен, то функция не является блокирующей. В таком случае, если никакой слот не был изменен, то возвращается код CKR_NO_EVENT.

Также стоит обратить внимание на использование функции получения информации о слоте C_GetSlotInfo. Мы использовали ее для определения наличия токена по флагу CKF_TOKEN_PRESENT. Подробнее с этой структурой можно ознакомиться здесь.

В этом файле представлен пример получения информации о подключенных токенах или смарт-картах с помощью функции C_GetTokenInfo. С помощью этой функции можно получить серийный номер, метку и другие характеристики подключенного устройства.

Объекты

Всё есть объект это почти про PKCS#11.

Теперь начнём знакомство с PKCS#11-объектами. А чтобы закрепить материал по функциям, будем рассматривать множество примеров с их использованием. Поскольку одним из самых важных объектов, которые обычно хранятся на токене или смарт-карте является ключевая пара, мы начнём знакомство с объектами через генерацию ключевой пары.

Создание объектов на примере генерации ключевых пар

В первую очередь, напишем функцию, которая будет генерировать ключевую пару ГОСТ Р 34.10-2012 256 бит на указанном слоте:

int gen_gost_key_pair(CK_SESSION_HANDLE session){    CK_KEY_TYPE keyTypeGostR3410_2012_256 = CKK_GOSTR3410;    CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };    CK_BYTE parametersGostR3410_2012_256[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 };    CK_BYTE parametersGostR3411_2012_256[] = { 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02 };    CK_BBOOL attributeTrue = CK_TRUE;    CK_BBOOL attributeFalse = CK_FALSE;    CK_OBJECT_CLASS publicKeyObject = CKO_PUBLIC_KEY;    CK_ATTRIBUTE publicKeyTemplate[] =    {        { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)},                                        // Класс - открытый ключ        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },                          // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)        { CKA_KEY_TYPE, &keyTypeGostR3410_2012_256, sizeof(keyTypeGostR3410_2012_256) },                // Тип ключа - ГОСТ Р 34.10-2012(256)        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)},                                            // Ключ является объектом токена        { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse)},                                        // Ключ доступен без аутентификации на токене        { CKA_GOSTR3410_PARAMS, parametersGostR3410_2012_256, sizeof(parametersGostR3410_2012_256) },   // Параметры алгоритма ГОСТ Р 34.10-2012(256)        { CKA_GOSTR3411_PARAMS, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256) }    // Параметры алгоритма ГОСТ Р 34.11-2012(256)    };    CK_OBJECT_CLASS privateKeyObject = CKO_PRIVATE_KEY;    CK_ATTRIBUTE privateKeyTemplate[] =    {        { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)},                                      // Класс - закрытый ключ        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },                          // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)        { CKA_KEY_TYPE, &keyTypeGostR3410_2012_256, sizeof(keyTypeGostR3410_2012_256) },                // Тип ключа - ГОСТ Р 34.10-2012(256)        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)},                                            // Ключ является объектом токена        { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)},                                          // Ключ доступен только после аутентификации на токене        { CKA_GOSTR3410_PARAMS, parametersGostR3410_2012_256, sizeof(parametersGostR3410_2012_256) },   // Параметры алгоритма ГОСТ Р 34.10-2012(256)        { CKA_GOSTR3411_PARAMS, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256) }    // Параметры алгоритма ГОСТ Р 34.11-2012(256)    };    CK_OBJECT_HANDLE privateKey;                      // Хэндл закрытого ключа ГОСТ (ключевая пара для подписи и шифрования)        CK_OBJECT_HANDLE publicKey;                       // Хэндл открытого ключа ГОСТ (ключевая пара для подписи и шифрования)        CK_MECHANISM gostR3410_2012_256KeyPairGenMech = { CKM_GOSTR3410_KEY_PAIR_GEN, NULL_PTR, 0 };    CK_RV rv;       int errorCode = 1;    /*************************************************************************    * Генерация ключевой пары на токене                                      *    *************************************************************************/    rv = functionList->C_GenerateKeyPair(session, &gostR3410_2012_256KeyPairGenMech,     publicKeyTemplate, arraysize(publicKeyTemplate),    privateKeyTemplate, arraysize(privateKeyTemplate),    &publicKey, &privateKey);    CHECK_AND_LOG(" C_GenerateKeyPair", rv == CKR_OK, rvToStr(rv), exit);    errorCode = 0;    printf("Gost key pair generated successfully\n");exit:    return errorCode;}

В этом примере для нас много нового. Можно заметить, что здесь вызывается всего одна функция C_GenerateKeyPair. Эта функция является стандартной функцией генерации ключей, работающей внутри открытой сессии. Также стоит отметить, что пользователь должен быть аутентифицирован перед вызовом этой функции.

Теперь перейдём к объектам. Внутри функции gen_gost_key_pair происходит создание двух объектов на токене: открытого и закрытого ключей. Вот, что стандарт PKCS#11 говорит про объекты:

Cryptoki recognizes a number of classes of objects, as defined in the CK_OBJECT_CLASS data type. An object consists of a set of attributes, each of which has a given value. Each attribute that an object possesses has precisely one value.

То есть стандарт не даёт явное определение объекта, но из того, что там написано, мы знаем:

  • объект относится к определенному классу;

  • объект состоит из множества атрибутов, имеющих заданное значение;

  • каждый атрибут имеет ровно одно значение.

Также в стандарте представлена классификация объектов:

Иерархия PKCS#11 объектовИерархия PKCS#11 объектов

Заголовок диаграммы определяет класс объекта, а то что ниже некоторые из его атрибутов.
Видно, что объектом может являться некоторый механизм (о механизмах мы поговорим позже), встроенные функции токена (Hardware feature), некоторые данные на токене (Storage). В нашем случае мы выполнили действие с данными.

Название всех атрибутов начинается с префикса "CKA_". Одним из самых важных атрибутов является CKA_ID. Он задаёт идентификатор объекта и используется для связи ключевых пар и сертификатов. Атрибут CKA_TOKEN является булевым и показывает, является ли объект объектом токена. Атрибут CKA_PRIVATE тоже является булевым и определяет нужна ли предварительная аутентификация для получения доступа к объекту. Атрибут CKA_ID задаёт шестнадцатеричный идентификатор объекта. Также есть булевые атрибуты CKA_MODIFIABLE, CKA_COPYABLE, CKA_DESTROYABLE для более тонкой настройки доступа к объекту. Подробнее про возможные атрибуты конкретных классов объектов можно прочитать непосредственно в самом стандарте для каждого класса объектов.

Объекты данных могут быть самыми разнообразными: асимметричные ключи, симметричные ключи, сертификаты, просто какая-либо информация на токене. В нашем примере мы создали два объекта, но сделали это неявно с помощью механизма генерации ключей. C_GenerateKeyPair приняла на вход механизм генерации ключевой пары, шаблоны открытого и закрытого ключа и с помощью механизма сгенерировала объекты ключевой пары (publicKey и privateKey). Мы пока ещё не описывали механизмы, но, говоря простым языком, механизм это идентификатор операции, которая выполняет какую-то криптографическую функцию. В нашем случае это функция генерации объекта.

Поиск объектов и создание сырой подписи

В прошлом разделе мы сгенерировали ключевую пару. На этот раз будем считать, что у нас нет хендлов на сгенерированные ключи, но мы знаем их идентификатор CKA_ID. Попробуем найти объект закрытого ключа на токене:

int findObjects(CK_SESSION_HANDLE session,         // Хэндл открытой сессии                CK_ATTRIBUTE_PTR attributes,       // Массив с шаблоном для поиска                CK_ULONG attrCount,                // Количество атрибутов в массиве поиска                CK_OBJECT_HANDLE objects[],        // Массив для записи найденных объектов                CK_ULONG* objectsCount             // Количество найденных объектов                       ){    CK_RV rv;                                           // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11    int errorCode = 1;                                  // Флаг ошибки    /*************************************************************************    * Инициализировать операцию поиска                                       *    *************************************************************************/    rv = functionList->C_FindObjectsInit(session, attributes, attrCount);    CHECK_AND_LOG("  C_FindObjectsInit", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Найти все объекты, соответствующие критериям поиска                    *    *************************************************************************/    rv = functionList->C_FindObjects(session, objects, *objectsCount, objectsCount);    CHECK_AND_LOG("  C_FindObjects", rv == CKR_OK, rvToStr(rv), find_final);    errorCode = 0;    /*************************************************************************    * Деинициализировать операцию поиска                                     *    *************************************************************************/find_final:    rv = functionList->C_FindObjectsFinal(session);    CHECK_RELEASE_AND_LOG("  C_FindObjectsFinal", rv == CKR_OK, rvToStr(rv), errorCode);exit:    return errorCode;}int find_private_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE_PTR privateKey){        CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };        CK_OBJECT_CLASS privateKeyObject = CKO_PRIVATE_KEY;        CK_ATTRIBUTE privateKeyTemplate[] =        {                { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)},              // Класс - закрытый ключ                { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1},   // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)        };        CK_ULONG cnt = 1;        CK_RV rv;        int errorCode = 1;        rv = findObjects(session, privateKeyTemplate,        arraysize(privateKeyTemplate), privateKey, &cnt);        CHECK(" findObjects", rv == 0, exit);        CHECK_AND_LOG(" Checking number of keys found", cnt == 1, "No objects found\n", exit);        errorCode = 0;exit:        return errorCode;}

Данный пример иллюстрирует работу с функцией поиска объекта по заданным атрибутам. Как можно заметить, операция поиска объекта на токене является составной и работа с ней сводится как минимум к вызову трёх функций: C_FindObjectsInit, C_FindObjects, C_FindObjectsFinal. Функция C_FindObjects может вызываться по несколько раз, и каждый раз она будет возвращать следующие объекты поиска. Предпоследний аргумент функции C_FindObjects задаёт размер выходного массива объектов. А последний количество полученных объектов после очередного поиска.

Поиск приватного ключа производился по атрибуту его класса и идентификатору. Мы рассчитывали, что найдётся хотя бы один объект по заданному шаблону и брали любой из них. Используем найденный ключ для вычисления сырой подписи:

int sign(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE privateKey){        /* OID алгоритма хеширования ГОСТ Р 34.11-2012(256)                     */    CK_BYTE parametersGostR3411_256[] = {0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02};    /* Механизм подписи/проверки подписи по алгоритму ГОСТ Р 34.10-2012(256) и хешированием по алгоритму ГОСТ Р 34.11-2012(256) */    CK_MECHANISM gost3410SignWith3411Mech = { CKM_GOSTR3410_WITH_GOSTR3411_12_256, metersGostR3411_256, sizeof(parametersGostR3411_256)};    CK_BYTE data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };    CK_BYTE_PTR signature;                            // Указатель на буфер, содержащий цифровую подпись для данных    CK_ULONG signatureSize;                           // Размер буфера, содержащего цифровую подпись для данных, в байтах    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Вычислить подпись от данных                                            *    *************************************************************************/    printf(" Signing data...\n");    /*************************************************************************    * Инициализировать операцию подписи данных                               *    *************************************************************************/    rv = functionList->C_SignInit(session, &gost3410SignWith3411Mech, privateKey);    CHECK_AND_LOG("  >C_SignInit", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Определить размер данных подписи                                       *    *************************************************************************/    rv = functionList->C_Sign(session, data, sizeof(data), NULL_PTR, &signatureSize);    CHECK_AND_LOG("  C_Sign(get size)", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Подписать данные                                                       *    *************************************************************************/    signature = (CK_BYTE*)malloc(signatureSize * sizeof(CK_BYTE));    CHECK("  Memory allocation for signature", signature != NULL, exit);    rv = functionList->C_Sign(session, data, sizeof(data), signature, &signatureSize);    CHECK_AND_LOG("  C_Sign (signing)", rv == CKR_OK, rvToStr(rv), free_signature);    /*************************************************************************    * Распечатать буфер, содержащий подпись                                  *    *************************************************************************/    printf("  Signature buffer is: \n");    printHex(signature, signatureSize);    printf("Data has been signed successfully.\n");    errorCode = 0;free_signature:    free(signature);exit:    return errorCode;}

В этом примере подпись и хеш можно считать одновременно. Такой вариант рекомендован для безопасности: цепочку "хеширование-подпись" лучше не разрывать. Чтобы показать, какой алгоритм хеширования использовать, мы передали его OID.

Также имеется возможность считать сырую подпись в два этапа: сначала брать хеш от данных, а затем вычислялась подпись от хеша. Такой подход более модульный, т.к. алгоритмы хеширования и вычисления подписи могут быть любыми и их можно комбинировать. Естественно, комбинировать можно с некоторыми ограничениями, которые налагаются стандартами, например, на длину хеша.

Работа с функциями расширения на примере создания запроса на сертификат

Пришло время показать, как работать с функциями-расширениями. Сделаем это на примере библиотеки PKCS#11 от Рутокен и создадим запрос на сертификат для нашей ключевой пары. Генерация запроса на сертификат не описана в стандарте, поэтому сделаем это через функцию-расширение C_EX_CreateCSR.

int create_csr(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_OBJECT_HANDLE privateKey){    /*************************************************************************    * Запрос на получение сертификата                                        *    *************************************************************************/    /*************************************************************************    * Список полей DN (Distinguished Name)                                   *    *************************************************************************/    CK_CHAR_PTR dn[] = { (CK_CHAR_PTR)"CN",                   // Тип поля CN (Common Name)                     (CK_CHAR_PTR)"UTF8String:Иванов",        // Значение                     (CK_CHAR_PTR)"C",                        // C (Country)                     (CK_CHAR_PTR)"RU",                     (CK_CHAR_PTR)"2.5.4.5",                  // SN (Serial Number)                     (CK_CHAR_PTR)"12312312312",                     (CK_CHAR_PTR)"1.2.840.113549.1.9.1",     // E (E-mail)                     (CK_CHAR_PTR)"ivanov@mail.ru",                     (CK_CHAR_PTR)"ST",                       // ST (State or province)                     (CK_CHAR_PTR)"UTF8String:Москва",                     (CK_CHAR_PTR)"O",                        // O (Organization)                     (CK_CHAR_PTR)"CompanyName",                     (CK_CHAR_PTR)"OU",                       // OU (Organizational Unit)                     (CK_CHAR_PTR)"Devel",                     (CK_CHAR_PTR)"L",                        // L (Locality)                     (CK_CHAR_PTR)"Moscow", };    /*************************************************************************    * Список дополнительных полей                                            *    *************************************************************************/    CK_CHAR_PTR exts[] = {(CK_CHAR_PTR)"keyUsage",                                                        // Использование ключа                      (CK_CHAR_PTR)"digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment",                      (CK_CHAR_PTR)"extendedKeyUsage",                                                    // Дополнительное использование                      (CK_CHAR_PTR)"1.2.643.2.2.34.6,1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4",                      (CK_CHAR_PTR)"2.5.29.17",                                                           // Дополнительное имя (пример с кодированием в виде DER)                      (CK_CHAR_PTR)"DER:30:0F:81:0D:65:78:61:6d:70:6c:65:40:79:61:2E:72:75",                      (CK_CHAR_PTR)"2.5.29.32",                                                           // Политики сертификата (кодирование в виде DER с пометкой "critical")                      (CK_CHAR_PTR)"critical,DER:30:0A:30:08:06:06:2A:85:03:64:71:01",                      (CK_CHAR_PTR)"1.2.643.100.111",                                                     // Средства электронной подписи владельца                      (CK_CHAR_PTR)"ASN1:UTF8String:СКЗИ \\\"Рутокен ЭЦП 2.0\\\"", };    CK_BYTE_PTR csr;                                   // Указатель на буфер, содержащий подписанный запрос на сертификат    CK_ULONG csrSize;                                  // Размер запроса на сертификат в байтах    char* csrPem;                                      // Строка с CSR в формате PEM    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Создать запрос на сертификат                                           *    *************************************************************************/    printf("\nCreating CSR...\n");    /*************************************************************************    * Создание запроса на сертификат                                         *    *************************************************************************/    rv = functionListEx->C_EX_CreateCSR(session, publicKey, dn, arraysize(dn), &csr, &csrSize, privateKey, NULL_PTR, 0, exts, arraysize(exts));    CHECK_AND_LOG(" C_EX_CreateCSR", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Сконвертировать и распечатать буфер в формате PEM                      *    *************************************************************************/    GetCSRAsPEM(csr, csrSize, &csrPem);    CHECK(" Get CSR in PEM format", csrPem != NULL, free_csr);    printf("\nCertificate request is:\n");    printf("%s\n", csrPem);    errorCode = 0;    printf("Creating CSR has been completed successfully.\n");free_csr_pem:    free(csrPem);free_csr:    rv = functionListEx->C_EX_FreeBuffer(csr);    CHECK_RELEASE_AND_LOG(" C_EX_FreeBuffer", rv == CKR_OK, rvToStr(rv), errorCode);exit:    return errorCode;}

Можно заметить, что работа с функциями расширения очень похожа на работу со стандартными функциями. Основное отличие лишь в том, что мы обращаемся к другому списку функций CK_FUNCTION_LIST_EXTENDED_PTR. Создание запроса на сертификат происходит в одну строчку функцией C_EX_CreateCSR и возвращает запрос в DER-формате. Также стоит обратить внимание, что память, выделенную внутри библиотеки, следует высвобождать с помощью функции C_EX_FreeBuffer.

По полученному запросу можно получить сертификат в Удостоверяющем центре. Например, воспользуемся тестовым УЦ КриптоПро для получения сертификата. Полученный сертификат необходимо скачать в DER-формате, сохранить в файле с именем "cert_2012-256.cer" и положить в директорию, из которой вы запускаете примеры. Полученный сертификат можно импортировать на токен.

Импорт сертификата на токен. Создание объекта вручную

Сертификаты на токене так же как и ключи являются объектами. Сертификат можно импортировать на токен, создав объект с нужными атрибутами. Для этого мы реализовали функцию: import_cert:

int import_cert(CK_SESSION_HANDLE session){    CK_OBJECT_CLASS certificateObject = CKO_CERTIFICATE;    CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };    CK_BBOOL attributeTrue = CK_TRUE;    CK_BBOOL attributeFalse = CK_FALSE;    CK_CERTIFICATE_TYPE certificateType = CKC_X_509;    CK_ULONG tokenUserCertificate = 1;    /*************************************************************************    * Шаблон для импорта сертификата                                         *    *************************************************************************/    CK_ATTRIBUTE certificateTemplate[] =    {        { CKA_VALUE, 0, 0 },                                                               // Значение сертификата (заполняется в процессе работы)        { CKA_CLASS, &certificateObject, sizeof(certificateObject) },                      // Класс - сертификат        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },             // Идентификатор сертификата (совпадает с идентификатором соответствующего ключа)        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue) },                              // Сертификат является объектом токена        { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse) },                          // Сертификат доступен без аутентификации        { CKA_CERTIFICATE_TYPE, &certificateType, sizeof(certificateType) },               // Тип сертификата - X.509        { CKA_CERTIFICATE_CATEGORY, &tokenUserCertificate, sizeof(tokenUserCertificate) }, // Категория сертификата - пользовательский    };    FILE* certFile;                                   // Поток ввода сертификата    CK_BYTE_PTR certDer;                              // Массив с сертификатом в DER формате    CK_ULONG certSize;                                // Размер массива сертификата    CK_OBJECT_HANDLE certificate;                     // Хэндл сертификата    CK_RV rv;    int r;    int errorCode = 1;                                // Флаг ошибки    /*************************************************************************    * Открыть поточный ввод сертификата из файла                             *    *************************************************************************/    certFile = fopen("cert_2012-256.cer", "rb");    CHECK_AND_LOG(" fopen", certFile != NULL, "\"cert_2012-256.cer\" doesn't exist", exit);    /*************************************************************************    * Определить размер файла, содержащего сертификат                        *    *************************************************************************/    r = fseek(certFile, 0, SEEK_END);    CHECK(" fseek", r == 0, close_certFile);    certSize = ftell(certFile);    CHECK(" ftell", certSize > 0, close_certFile);    r = fseek(certFile, 0, SEEK_SET);    CHECK(" fseek", r == 0, close_certFile);    /*************************************************************************    * Выделить память для сертификата                                        *    *************************************************************************/    certDer = (CK_BYTE_PTR)malloc(certSize);    CHECK(" malloc", certDer != NULL, close_certFile);    /*************************************************************************    * Прочитать сертификат                                                   *    *************************************************************************/    r = (int)fread(certDer, 1, (int)certSize, certFile);    CHECK(" fread", r == (int)certSize, free_certificate);    /*************************************************************************    * Задать шаблон сертификата для импорта                                  *    *************************************************************************/    certificateTemplate[0].pValue = certDer;    certificateTemplate[0].ulValueLen = certSize;    /*************************************************************************    * Создать сертификат на токене                                         *    *************************************************************************/    rv = functionList->C_CreateObject(session, certificateTemplate, arraysize(certificateTemplate), &certificate);    CHECK_AND_LOG(" C_CreateObject", rv == CKR_OK, rvToStr(rv), free_certificate);    errorCode = 0;    printf("Certificate has been created successfully\n");    /*************************************************************************    * Очистить память из-под строки с сертификатом                           *    *************************************************************************/free_certificate:    free(certDer);    /*************************************************************************    * Закрыть поток ввода сертификата                                        *    *************************************************************************/close_certFile:    r = fclose(certFile);    CHECK_RELEASE(" fclose", r == 0, errorCode);exit:    return errorCode;}

На этот раз мы создали объект напрямую с помощью функции C_CreateObject. Для создания объекта сертификата мы аналогично передали шаблон с атрибутами объекта: тело сертификата, идентификатор, тип доступа, тип сертификата и т.п.

Функцию C_CreateObject можно использовать не только для создания сертификата на токене, но и для создания других объектов, например, публичных ключей (CKO_PUBLIC_KEY), закрытых ключей (CKO_PRIVATE_KEY), симметричных ключей (CKO_SECRET_KEY), обычных данных (CKO_DATA). Их значение будет также содержаться внутри атрибута CKA_VALUE.

Теперь, когда у нас на токене имеется и ключевая пара и сертификат, для закрепления материала рассмотрим операцию создания CMS-подписи.

Формирование CMS-подписи

Данная возможность является расширением библиотеки Рутокен и может работать только с ГОСТ-ключами. Для создания подписи в формате CMS требуется наличие закрытого ключа и сертификата (неявно содержащего в себе открытый ключ). Создание CMS-подписи реализовано в функции sign_cms:

int sign_cms(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificate, CK_OBJECT_HANDLE privateKey){    /*************************************************************************    * Данные для подписи                                                     *    *************************************************************************/    CK_BYTE data[] =    {        0x01, 0x00, 0x02, 0x35, 0x35,        0x02, 0x00, 0x01, 0x01,        0x81, 0x00, 0x09, 0x34, 0x30, 0x34, 0x34, 0x34, 0x35, 0x39, 0x39, 0x38,        0x82, 0x00, 0x0A, 0x37, 0x37, 0x38, 0x31, 0x35, 0x36, 0x34, 0x36, 0x31, 0x31,        0x83, 0x00, 0x13, 0x41, 0x6B, 0x74, 0x69, 0x76, 0x20, 0x52, 0x75, 0x74, 0x6F, 0x6B, 0x65, 0x6E, 0x20, 0x42, 0x61, 0x6E, 0x6B, 0x2E,        0x84, 0x00, 0x14, 0x34, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x37, 0x36,        0x85, 0x00, 0x0A, 0x33, 0x32, 0x32, 0x38, 0x37, 0x33, 0x36, 0x37, 0x36, 0x35,        0x86, 0x00, 0x03, 0x52, 0x55, 0x42,        0xFF, 0x00, 0x0D, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30    };    CK_BYTE_PTR signature;                             // Указатель на буфер, содержащий подпись исходных данных    CK_ULONG signatureSize;                            // Размер буфера, содержащего подпись исходных данных, в байтах    char* signaturePem;                                // Строка с CMS в формате PEM    CK_RV rv;    int errorCode = 1;                                 // Флаг ошибки    /*************************************************************************    * Подписать данные                                                       *    *************************************************************************/    rv = functionListEx->C_EX_PKCS7Sign(session, data, sizeof(data), certificate,        &signature, &signatureSize, privateKey, NULL_PTR, 0, USE_HARDWARE_HASH);    CHECK_AND_LOG(" C_EX_PKCS7Sign", rv == CKR_OK, rvToStr(rv), exit);        /*************************************************************************        * Сконвертировать и распечатать буфер в формате PEM                      *        *************************************************************************/        GetCMSAsPEM(signature, signatureSize, &signaturePem);        CHECK(" Get CMS in PEM format", signaturePem != NULL, free_signature);        printf("\nSignature is:\n");        printf("%s\n", signaturePem);    errorCode = 0;    printf("Data has been signed successfully.\n");free_signature_pem:    free(signaturePem);    /*************************************************************************    * Освободить память, выделенную в библиотеке                             *    *************************************************************************/free_signature:    rv = functionListEx->C_EX_FreeBuffer(signature);    CHECK_RELEASE_AND_LOG(" C_EX_FreeBuffer", rv == CKR_OK, rvToStr(rv), errorCode);exit:    return errorCode;}

Создание CMS-подписи произошло вызовом всего лишь одной функции расширения C_EX_PKCS7Sign. А объект сертификата нашелся так же просто, как и объект ключа с минимальными отличиями в коде. Все это показывает, как просто и лаконично (по меркам языка C) спроектирован стандарт PKCS#11 с идеей объектного подхода.

Получение и установка атрибутов публичных объектов

В завершение главы про объекты хотелось бы отметить, что атрибуты публичных объектов можно получать и изменять. Делается это с помощью функций C_SetAttributeValue и C_GetAttributeValue.

Логика работы с функцией C_SetAttributeValue очень похожа на логику создания объектов создаётся шаблон, атрибуты заполняются указанными значениями. Все это передаётся на вход функции C_SetAttributeValue. Изменять атрибуты можно, если у объекта атрибут CKA_MODIFIABLE равен CK_TRUE.

При получении значений атрибутов иногда неизвестно, какой будет выходной размер атрибута. В таком случае создается шаблон с нулевыми значениями указателей на выходные объекта атрибутов и их размеров. Этот шаблон передаётся функции C_GetAttributeValue. Функция заполняет значение выходных размеров атрибутов в этом шаблоне. Мы может воспользоваться этой информацией для выделения памяти под атрибуты в шаблоне и дальнейшего вызова функции C_GetAttributeValue.

Для демонстрации работы функций C_GetAttributeValue и C_SetAttributeValue рассмотрим пример получения тела сертификата и изменения текстовой метки сертификата:

int get_cert(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE cert){    CK_BYTE_PTR body = NULL_PTR;    CK_ATTRIBUTE template[] = {        {CKA_VALUE, NULL_PTR, 0}    };    char* certPem;    CK_RV rv;    int errorCode=1;        /*************************************************************************        * Получение размера тела сертификата                                     *        *************************************************************************/    rv = functionList->C_GetAttributeValue(session, cert, template, arraysize(template));    CHECK_AND_LOG(" C_GetAttributeValue", rv == CKR_OK, rvToStr(rv), exit);    body = (CK_BYTE_PTR) malloc(template[0].ulValueLen);    template[0].pValue = body;        /*************************************************************************        * Получение тела сертификата в формате DER                               *        *************************************************************************/    rv = functionList->C_GetAttributeValue(session, cert, template, arraysize(template));    CHECK_AND_LOG(" C_GetAttributeValue", rv == CKR_OK, rvToStr(rv), free);        /*************************************************************************        * Сконвертировать и распечатать буфер в формате PEM                      *        *************************************************************************/        GetCertAsPem(body, template[0].ulValueLen, &certPem);        CHECK(" Get cert in PEM format", certPem != NULL, free);        printf("\nCertificate request is:\n");        printf("%s\n", certPem);    errorCode = 0;        printf("Getting cert body has been completed successfully.\n");free_cert_pem:        free(certPem);free:    free(body);exit:    return errorCode;}int set_cert_label(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE cert){    CK_UTF8CHAR label[] = {"GOST certificate"};    CK_ATTRIBUTE template[] = {        CKA_LABEL, label, sizeof(label)-1    };    CK_RV rv;    int errorCode = 1;        /*************************************************************************        * Установка метки сертификата                                            *        *************************************************************************/    rv = functionList->C_SetAttributeValue(session, cert, template, arraysize(template));    CHECK_AND_LOG(" C_SetAttributeValue", rv == CKR_OK, rvToStr(rv), exit);    errorCode = 0;exit:    return errorCode;}

Про механизмы

Мы уже ранее встречались с механизмами в примерах и дали краткое описание. Давайте теперь опишем их подробнее. Описание механизмов в PKCS#11 было вынесено в отдельный документ, с которым можно ознакомиться здесь. В этом документе написано:

A mechanism specifies precisely how a certain cryptographic process is to be performed. PKCS #11 implementations MAY use one of more mechanisms defined in this docuоment.

Отсюда следует, что механизмы:

  • Определяют некоторое криптографическое преобразование.

  • PCKS#11 может использовать механизмы, определенные в этом документе.

Более того, некоторые PKCS#11-библиотеки могут использовать и другие механизмы.

Согласно документации механизмы можно разделить на:

  • Механизмы шифрования и расшифрования (Encrypt & Decrypt);

  • Механизмы подписи и проверки подписи (Sign & Verify);

  • Механизм формирования хеша (Digest);

  • Механизм восстановления подписи по публичному ключу (Sign Recover & Verify Recovery);

  • Механизм генерации симметричных и асимметричных ключей (Gen. Key/Key Pair);

  • Экспорт и импорт ключей (Wrap & Unwrap);

  • Выработка общего ключа на основе асимметричных ключей (Derive).

Каждый механизм идентифицирует одну или несколько из этих функций. Так, например, ранее рассмотренный механизм CKM_GOSTR3410_KEY_PAIR_GEN предназначен для генерации ключей, а механизм CKM_AES_ECB может использоваться как для зашифрования/расшифрования, так и для свертки/развертки ключей.

Работа с механизмами, на примере зашифрования сообщения

Механизмы в PKCS#11 задаются через структур CK_MECHANISM. Объекты типа CK_MECHANISM в дальнейшем передаются PKCS#11-функциям для указания нужного механизма. Сама структура CK_MECHANISM состоит из трех элементов:

  1. Идентификатор механизма (mechanism);

  2. Указатель на параметры механизма (pParameter);

  3. Длина в байтах параметров механизма (ulParameterLen).

Самый простой пример параметра механизма вектор инициализации для алгоритмов шифрования. Попробуем на примере показать, как можно зашифровать сообщение через механизм CKM_GOST28147 с указанным вектором инициализации. Пример реализован внутри функции encrypt_data:

int encrypt_data(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE secretKey){    /* Имитовставка */    CK_BYTE iv[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f };    /*  Механизм программного шифрования/расшифрования по алгоритму ГОСТ 28147-89 */    CK_MECHANISM gost28147EncDecMech = {CKM_GOST28147, iv, sizeof(iv)};    /*************************************************************************    * Данные для шифрования                                                  *    *************************************************************************/    CK_BYTE data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,                   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,                   0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,                   0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 };    CK_BYTE_PTR encrypted;                            // Указатель на временный буфер для зашифрованных данных    CK_ULONG encryptedSize;                           // Размер временного буфера в байтах    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Инициализировать операцию шифрования                                   *    *************************************************************************/    rv = functionList->C_EncryptInit(session, &gost28147EncDecMech, secretKey);    CHECK_AND_LOG(" C_EncryptInit", rv == CKR_OK, rvToStr(rv), exit);    /*************************************************************************    * Зашифровать данные (при шифровании с использованием механизма          *    * CKM_GOST28147_ECB размер данных должен быть кратен 8)                  *    *************************************************************************/    encryptedSize = sizeof(data);    encrypted = (CK_BYTE_PTR)malloc(encryptedSize * sizeof(CK_BYTE));    CHECK("  Memory allocation for encrypted data", encrypted != NULL_PTR, exit);    rv = functionList->C_Encrypt(session, data, sizeof(data), encrypted, &encryptedSize);    CHECK_AND_LOG(" C_Encrypt", rv == CKR_OK, rvToStr(rv), free_encrypted);    /*************************************************************************    * Распечатать буфер, содержащий зашифрованные данные                     *    *************************************************************************/    printf(" Encrypted buffer is:\n");    printHex(encrypted, encryptedSize);    printf("Encryption has been completed successfully.\n");    errorCode = 0;free_encrypted:    free(encrypted);exit:    return errorCode;}

В этом примере стоит обратить внимание на то, как передаётся вектор инициализации механизму шифрования. Также стоит заметить, что после вызова функции C_Encrypt вызывать функцию C_EncryptFinish не нужно, т.к. C_Encrypt внутри себя вызывает функцию C_EncryptUpdate, а после неё уже завершает процесс шифрования с помощью функции C_EncryptFinish.

Проверка поддержки механизмов

Ранее в примерах мы всегда надеялись на то, что токен поддерживает используемые механизмы, но, вообще говоря, это может быть не так. Так, например, Рутокен Lite не поддерживает криптографические механизмы. Поэтому перед началом работы с каким-либо механизмом желательно убедиться в том, что он поддерживается устройством. Это можно сделать с помощью функции C_GetMechanismList, которая возвращает список поддерживаемых механизмов токена. Напишем удобную обертку для проверки поддержки определенного механизма:

int mech_supports(CK_SLOT_ID slot, CK_MECHANISM_TYPE mech, int* mechIsSupported){    CK_MECHANISM_TYPE_PTR mechanisms;                 // Массив поддерживаемых механизмов    CK_ULONG mechanismCount;                          // Количество поддерживаемых механизмов    CK_RV rv;    int errorCode = 1;    /*************************************************************************    * Получить список поддерживаемых токеном механизмов                      *    *************************************************************************/    rv = functionList->C_GetMechanismList(slot, NULL_PTR, &mechanismCount);    CHECK_AND_LOG(" C_GetMechanismList (number of mechanisms)", rv == CKR_OK, rvToStr(rv), exit);    CHECK_AND_LOG(" Checking mechanisms available", mechanismCount > 0, " No mechanisms available", exit);    mechanisms = (CK_MECHANISM_TYPE_PTR)malloc(mechanismCount * sizeof(CK_MECHANISM_TYPE));    CHECK(" Memory allocation for mechanisms", mechanisms != NULL_PTR, exit);    rv = functionList->C_GetMechanismList(slot, mechanisms, &mechanismCount);    CHECK_AND_LOG(" C_GetMechanismList", rv == CKR_OK, rvToStr(rv), free_mechanisms);    /*************************************************************************    * Определение поддерживаемых токеном механизмов                          *    *************************************************************************/    for (size_t i = 0; i < mechanismCount; ++i) {        if (mechanisms[i] == mech) {            *mechIsSupported = 1;            break;        }    }    errorCode = 0;    if (*mechIsSupported)        printf("Mechanism is supported\n");    else        printf("Mechanism is not supported\n");free_mechanisms:    free(mechanisms);exit:}

Эта обертка удобна для одноразовой проверки поддержки механизма. Если же мы хотим проверить поддержку сразу нескольких механизмов, то лучше получить список поддерживаемых механизмов токена один раз и проверить наличие требуемых механизмы. Это позволит сократить количество обращений к токену и время работы программы, соответственно.

Утилита pkcs11-tool

Часто бывает необходимо просто и быстро выполнить какое-либо обращение к PKCS#11-библиотеке, не прибегая к написанию кода. На помощь может прийти утилита pkcs11-tool, которая распространяется в составе пакета (opensc)[https://github.com/OpenSC/OpenSC].

Утилита pkcs11-tool может гибко выполнять огромное количество стандартных PKCS#11-операций. Например:

  • Генерация ключевых пар:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B --id 45 -l

  • Создание сырой подписи:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --sign --id 45 -l -i file.txt --mechanism GOSTR3410-WITH-GOSTR3411-12-256

  • Генерация псевдослучайных последовательностей:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --generate-random 16

  • Получение списка объектов на токене:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O

  • Получение механизмов, поддерживаемых токеном:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -M

Список не является исчерпывающим, более подробно о полных возможностях утилиты можно прочитать в мануале.

Дополнительный материал

Если вы захотите узнать, как работать с более специфичными функциями, то большое количество примеров по работе с PKCS#11 можно найти в нашем SDK. Все примеры по работе с PKCS#11-библиотекой находятся в директории sdk\pkcs11\samples.

Выводы

Зачастую библиотека PKCS#11 является основным кирпичиком при написании приложений или других библиотек для работы со смарт-картами на других языках программирования. Поэтому знание основ работы с PKCS#11 на языке C может помочь разобраться с тем, как работать с обертками или как лучше реализовать архитектуру новой обертки.

Кроме PKCS#11 с объектами на смарт-картах/токенах можно работать через:

Если вы хотите узнать про какую-то реализацию подробнее, то напишите в комментариях и мы постараемся в ближайшее время выпустить новую статью с её разбором.

Подробнее..

И полгода не прошло вышел релиз OpenSSH 8.5. Подробности о новинке

03.03.2021 14:04:54 | Автор: admin

Спустя пять месяцев разработки выложен релиз OpenSSH 8.5, открытая реализация клиента и сервера для работы по протоколам SSH 2.0 и SFTP. Разработчики заявили о переводе в будущем алгоритмов, которые используют хеши SHA-1, в разряд устаревших. Проблема в том, что эффективность коллизионных атак с заданным префиксом постоянно увеличивается. При этом стоимость подбора коллизии стоит примерно $50 000.

В ближайшем будущем разработчики обещают отключить по умолчанию возможность использования алгоритма цифровых подписей по открытому ключу ssh-rsa. Сейчас он все еще широко распространен.

Для того, чтобы проверить, используется ли этот ключ в собственной системе, нужно попробовать подключиться по ssh с опцией "-oHostKeyAlgorithms=-ssh-rsa". Важный момент: отключение по умолчанию цифровых подписей такого типа не является полным отказом от использования RSA-ключей. Проблема в том, что, помимо SHA-1, протокол SSH допускает применение других алгоритмов вычисления хэшей. В числе прочих возможностей разработчики оставят использование связок rsa-sha2-256 (RSA/SHA256) и rsa-sha2-512 (RSA/SHA512).

Чтобы упростить переход на новые алгоритмы, в новом релизе по дефолту включена настройка UpdateHostKeys. Она-то как раз и переводит клиенты на новые алгоритмы. Функция активирует специальное расширение протокола hostkeys@openssh.com, которое дает возможность серверу информировать клиента о всех доступных ключах хоста сразу после прохождения аутентификации. Клиент может отразить эти ключи в файле ~/.ssh/known_hosts, что дает возможность организовать обновление ключей хоста с упрощением смены ключей на сервере.

Стоит отметить, что использование UpdateHostKeys возможно с рядом нюансов:

  • он должен быть упомянут в UserKnownHostsFile и не использоваться в GlobalKnownHostsFile;
  • ключ должен присутствовать только под одним именем,
  • не должен применяться сертификат хостового ключа;
  • в known_hosts не должно применяться масок по имени хоста;
  • настройка VerifyHostKeyDNS должна быть отключена;
  • параметр UserKnownHostsFile должен быть активен .

Среди алгоритмов, которые разработчики упоминают в качестве рекомендуемых для миграции:

  • rsa-sha2-256/512 на базе RFC8332 RSA SHA-2 (поддерживается с OpenSSH 7.2 и используется по умолчанию);
  • ssh-ed25519 (поддерживается с OpenSSH 6.5);
  • ecdsa-sha2-nistp256/384/521 на базе RFC5656 ECDSA (поддерживается с OpenSSH 5.7).


Подробности об изменениях в новой версии


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

Безопасность:

  • Ликвидирована уязвимость в ssh-agent, которая вызвана повторным освобождением уже освобожденной области памяти. Эта проблема была актуальна с выпуска OpenSSH 8.2. Злоумышленник потенциально может использовать ее при наличии доступа к сокету ssh-agent на локальной системе. Правда, это не слишком опасно, поскольку доступ к сокету есть только у рута и самого пользователя. Но зато можно направить агент на учетную запись, которая подконтрольна злоумышленнику, либо на хост, к которому у киберпреступника есть root-доступ.
  • В sshd появилась защита от передачи очень больших параметров с именем пользователя в РАМ-подсистему. Это дает возможность блокировать уязвимости в системных модулях PAM (Pluggable Authentication Module). Нововведение дает возможность предотвратить использование sshd в качестве вектора для эксплуатации недавно выявленной root-уязвимости в Solaris (CVE-2020-14871).

Совместимость:

  • В ssh и sshd переработаны специализированный метод обмена ключами, который устойчив к подбору на квантовом компьютере. Как известно, квантовые системы способны подбирать сложнейшие пароли за считанные секунды. В частности, это реализовано благодаря разложению натурального числа на простые множители. Именно эта задача является основой современных асимметричных алгоритмов шифрования, причем на традиционных системах решить ее не получится. Новый метод получилось реализовать благодаря алгоритму NTRU Prime, разработанном для постквантумных криптосистем, и методе обмена ключами на базе эллиптических кривых X25519. Вместо sntrup4591761x25519-sha512@tinyssh.org метод теперь идентифицируется как sntrup761x25519-sha512@openssh.com (алгоритм sntrup4591761 заменен на sntrup761).
  • В ssh и sshd изменили порядок анонсирования поддерживаемых алгоритмов цифровых подписей. Вместо ECDSA первый теперь ED25519.
  • Здесь же установка параметров качества обслуживания TOS/DSCP для интерактивных сеансов производится до установки TCP-соединения.
  • Шифр ijndael-cbc@lysator.liu.se, который идентичен aes256-cbc и использовался до утверждения RFC-4253, больше не поддерживается.
  • Отключен по дефолту параметр CheckHostIP. Он не особо полезен, но значительно усложняет ротацию ключей для хостов за балансировщиками нагрузки.

Разное

  • В sshd разработчики добавили настройки PerSourceMaxStartups и PerSourceNetBlockSize для ограничения интенсивности запуска обработчиков в привязке к адресу клиента. Ограничениями на запуск процессов теперь можно управлять более тонко.
  • В ssh и sshd появилась настройка LogVerbose, которая дает возможность принудительно поднять уровень сбрасываемой в лог отладочной информации, с возможностью фильтрации по шаблонам, функциям и файлам.
  • В ssh обеспечивается показ всех имен хостов и IP-адресов, которые ассоциированы с ключом. Это происходит при принятии нового хостового ключа.
  • В ssh есть явное разрешение опции UserKnownHostsFile=none для отключения использования файла known_hosts при идентификации хостовых ключей.
  • В ssh-config добавлена настройка KnownHostsCommand, позволяющая получить данные known_hosts из вывода указанной команды.
  • Плюс там же добавлена возможность PermitRemoteOpen, которая позволяет ограничить точку назначения при использовании опции RemoteForward с SOCKS.
  • В ssh для ключей FIDO теперь обеспечивается повторный запрос PIN в случае сбоя операции с цифровой подписью из-за неправильного PIN либо отсутствия запроса PIN у пользователя. Такое происходит в том случае, если система не получает корректные биометрические данные, так что устройство откатывается на ручной ввод PIN.
  • Разработчики обновили утилиту contrib/ssh-copy-id.

Подробнее..

Как работать тестировщику выстраиваем планирование, общаемся с командой разработки и проверяем сайты на безопасность

03.03.2021 14:04:54 | Автор: admin

Мы собрали митап, где трое экспертов по QA рассказали, о чем тестировщику нужно говорить с командой разработки, какими инструментами пользоваться для планирования и тестирования, а также что нужно учесть, чтобы сделать сайты безопасными.Внутри есть видео и текстовая выжимка по каждому докладу.

Современные паттерны тестирования

Рассказывает директор по развитию бизнеса в IT-компании @BSL_Dev и ex-руководитель отдела обеспечения качества Redmadrobot Марина Куликова @Marishunya_QA.

Коротко в чем суть.

Бывает, что в командах разработки забывают о принципе раннего тестирования. Существует миф, что тестирование продукта должно проходить в конце спринта или разработки. При такой организации процесса проекта могут возникать ошибки (как процессные, так и технические).

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

Основная цель тестирования своевременно оповещать команду о реальном состоянии системы или продукта

Основные точки опоры для построения тестирования

  1. Анализ требований или технического задания.

  2. Инфраструктура важно настроить окружение, выбрать целевые устройства, какие тестовые данные потребуются.

  3. Процесс коммуникации нужно договориться, в каком формате мы выстраиваем обратную связь с командой (например, делаем отчеты о тестировании в Jira).

  4. Разбираемся, как именно организовываем тестирование: какие виды тестирования, на каких этапах применяем, как распределяем ресурсы, планирование и так далее.

  5. Уделяем время написанию отчетности и договариваемся, какая отчетность и в каком виде нужна.

  6. Постоянно внедряем улучшения и анализируем изменения.

О чем тестировщик должен сообщать команде

  • Что нужно автоматизировать. В процессе коммуникации с разработчиками и менеджерами тестировщику нужно определить и рассказать, какие тесты должны быть автоматизированы и на каком уровне.

  • Как оптимизировать работу. Нужно делать постоянную оптимизацию тестов, чтобы они затрачивали меньше времени. Задача тестировщика минимизировать время выполнения тестов, оптимизировать фича тесты и регресс. Это нужно, для того чтобы быстро получать информацию о состоянии продукта.

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

  • Напоминать о новых инструментах. Важно говорить об инструментах тестирования, потому что сейчас они постоянно меняются. Стоит постоянно мониторить, как изменяются инструменты, и добавлять себе самые лучшие.

Тестирование это как круговая оборона. Весь продукт охранять очень сложно, поэтому тестировщики создают датчики (некие красные флажки), которые в нужный момент сообщают: alarm! И подобные датчики это метрики, а также автотесты, различные приемы и т.д. Задача команды тестирования выстроить многослойную систему защиты, состоящую из нужных датчиков. Также стоит помнить, что помимо того, что QA тестирует, команда ещё сообщает реальное состояние системы, где все окей, где начинает рваться, а где все плохо и нужно срочно исправлять.

Как тестировщику обеспечивать обратную связь для команды

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

  2. С помощью Code Reviews. Это не совсем работа тестировщика, но в проекте через Code Reviews можно получить обратную связь. Например, если у нас фича автоматизации типовая, и она долго ревьюится на разных проектах, то нужно выяснить причину.

  3. Через модульные тесты (Unit tests).

  4. С помощью автоматизированных интеграционных тестов (Automated Integration Test).

  5. С помощью автоматизированных Acceptance Tests. Эту активность можно разделить с продакт-менеджерами.

  6. По возможности следует автоматизировать Regression Test.

  7. Постоянный Exploratory Testing.

  8. Обратная связь от пользователей или бизнес-юзеров.

  9. Постоянное UAT-тестирование + DEMO-сессии.

Через что тестировщик может организовать обратную связь с командой

  • С помощью работы с дефектами (багами) нужно определить формат их заведения и оповещения о них, например, делать это в Jira или другом удобном инструменте. Разработчикам не всегда хватает информации в дефекте, чтобы приступить к фиксу, поэтому иногда требуется дополнительная коммуникация с багрепортером.

  • Организовать коммуникацию по сборкам и состояниям тестовых сред. Это понадобится, если вдруг с ними что-то пойдет не так или они задерживаются.

  • Кросс-обучение внутри тестирования. Все специалисты разные, они могут учиться друг у друга, поэтому важно иногда собираться и обсуждать результаты работы и делиться лайфхаками и знаниями продукта. Это некий knowledge transfer.

  • Тест-документация собирать отчетность по фичам, сборкам и по приемке. Для составления отчетности поможет изучение ГОСТов: в них описаны градации дефектов, как с ними быть и так далее. Для проектов, связанных с государственным подрядом, поможет изучение ГОСТ 34.603-92.

Как тестировщикам работать с Google-таблицами (и зачем)

Руководитель отдела тестирования Redmadrobot Саша Строкин собрал собственные Google-таблицы, с помощью которых он выстраивает работу, начиная от планирования и заканчивая аналитикой для тестировщиков.

На нескольких примерах Саша рассказал об инструментах и формулах, которые он использует в работе.

Google-таблицы при планировании подготовка к процессу тестирования

В тестировании есть четыре главных процесса:

  1. Планирование подготовка к самим работам по тестированию,

  2. Test development крафтинг артефактов, разработка сценариев тестирования,

  3. Test execution само выполнение тестирования,

  4. Test analysis оценка результатов тестирования, выделение процессов, которые нужно улучшать или, наоборот, не стоит менять.

Планирование в Google-таблицах это инструмент, необходимый в первую очередь для лидов, чтобы вовремя подключать и отключать нужных людей, проводить ротации, отслеживать нагрузку сотрудников.

Чтобы облегчить процесс планирования, в Sheets можно создать вкладку Dictionary, где описываются все существующие проекты для работы, список участников, роль инженера на проекте и так далее.

Стоит отметить, что Google Sheet позволяет добавлять отдельные срезы, если мы говорим про фильтрацию данных, ее можно делать как на уровне всей таблицы, так и по отдельным критериям. Например, если нажать на вкладку с указанием определенного проекта, то увидим, сколько инженеров на данный момент в нём задействовано и процент их загрузки.

Интеграция Google-таблиц с Jira

Интеграция Excel c рабочим инструментом большинства команд разработки и тестирования Jira возможна через специальный плагин Jira Cloud of Sheets.

C помощью этого плагина можно вытаскивать любые данные из бэклога Jira по тому же фильтру, по которому обычно тестировщики фильтруют дефекты, только с переводом не на графическое изображение, а на JQL.

На примере Саша показал, как решил проверить все свои дефекты и собрать на этом фоне статистику. За время работы над проектом в общей сложности было заведено 1500 дефектов и по ним была сформирована статистика. Можно посмотреть, например, какие из них обладают уровнем приоритетности. Также можно в виде графиков формировать статистику по практически любым показателям.

Кроме того, с помощью плагина можно выгрузить статистику по отдельным проектам и посмотреть статистику по нему. Можно проанализировать, как проекты обрастают дефектами в динамике и увидеть, что, например, в июне и июле на проекте было заведено больше всего багов.

Для формирования такой статистики нужно воспользоваться вкладкой MounthStat (она вытягивает данные о дате создания из общей выгрузки, где мы можем выбрать дату создания дефекта). С помощью функции Trim даты можно рассортировать по месяцам.

Все готовые таблицы для работы из презентации Саши.

Тестирование и безопасность web-сайтов для начинающих тестировщиков

Рассказала и показала QA-инженер Redmadrobot Вика Бегенчева @vikusti.

Основные уловки мошенников, как они могут навредить пользователям или системам:

С помощью cookies

Вика рассказала, что такое cookies на примере интернет-магазина. Допустим, мы открываем браузер, заходим на сайт и кладем в корзину печеньки, которые нам понравились. Если мы закроем окно браузера, а затем откроем заново, то вся информация про начавшиеся покупки сохранится. Это происходит с помощью cookies различной информации о пользователе, которая хранится в браузере локально.

Эта информация нужна для удобства пользователя, чтобы сайт запоминал определенные данные и нам не приходилось постоянно их указывать. Cookies бывают двух видов: временные (cookies-сессии) и постоянные. Cookies-сессии хранятся определенное ограниченное время и могут меняться, когда пользователь перелогинился. Постоянные сookies хранятся всегда, пока вы их не сотрете.

Как хакеры могут использовать cookies

Хакер может угнать ваши cookies и с помощью этого доказать системе, что он это вы. Тогда он сможет переиспользовать их и продолжить сессию. Это происходит так:

Через протоколы: HTTP и HTTPS

Копаясь на просторах интернета, мы до сих пор можем попадать на сайты, о небезопасности которых нас предупреждает браузер.

Почему так? Потому что браузер умный, и он считает ненадежным сайты, в которых происходит соединение по HTTP, а не HTTPS. В протоколе HTTPS есть последняя буква S, это значит, что добавляются повышенные требования к безопасности. В этом протоколе при общении браузера с сервером по протоколу https добавляется сертификат безопасности: если хакер попробует перехватить такие запросы, он получит лишь набор символов и не сможет их расшифровать.

Подбор пароля Brute force

Это атака перебора мошенник может знать логин и с помощью специального скрипта подбирать пароль. Обычно подбор пароля с помощью скрипта занимает около 10 часов.

Как проверять сайты на безопасность

  1. Посмотреть, как устроена безопасность хранения cookies: открываем Инспектор в браузере, заходим в вкладку application и видим свои cookies для сайта. Для проверки безопасности нужно обратить внимание на столбцы под названием httpOnly и secure. Если галочки стоят, то на сайте предусмотрена защита от угона cookies.

  2. Нужно проверять, чтобы все запросы шли через протокол HTTPS. Например, работаем с сайтом диванынадом.ру. Нужно убрать букву S из протокола и проверить, можно ли зайти только по ссылке с HTTP. Если да, то это плохо, мошенник может создать такую ссылку и перехватывать запросы пользователей. Чтобы этого избежать, нужно создать редирект автоматически перебрасывать пользователей на безопасную страницу.

  3. При введении логина/пароля нужно использовать ограничение на количество неправильных попыток, а также использовать таймаут, например, после трех неудачных попыток введения пароля попробовать ввести пароль в четвертый раз можно лишь через час. Это поможет избежать взлома с помощью автоматического подбора паролей.

Вика написала отдельную статью, где подробно рассказала про все пункты и дала еще больше советов для начинающих тестировщиков.

Полезные ссылки

  • Telegram-канал Google Таблицы: много информации о фишках Google Sheets;

  • YouTube STM Solutions: видеоуроки Google Docs, Google Sheets, Google Apps Script;

  • Jira Cloud for Sheets: плагин для интеграции Google Sheets с основным рабочим инструментом большинства команд Jira;

  • owasp.org: некоммерческий фонд, который работает над повышением уровня безопасности ПО;

  • hackthebox.eu: тренировочная онлайн-платформа, на которой можно проверить навыки тестирования в сфере безопасности сайтов;

  • xss-game.appspot.com: тренировочная игра для обнаружения и устранения ошибок XSS.

Подробнее..

Пентест-лаборатория Test lab 15 ху из н0в1ч0к?

03.03.2021 14:04:54 | Автор: admin

15 марта 2021 года Pentestit запускает лабораторию Test lab 15, где IT - специалисты смогут бесплатно оценить свои силы в поисках уязвимостей корпоративной сети и веб-приложениях компании.

Что такое Test lab

Лаборатории Test lab это полигон для киберучений, где участники получают опыт анализа защищённости информационных систем. Каждая такая лаборатория имеет целостную инфраструктуру, историю и множество скрытых уязвимостей, которые необходимо обнаружить, локализовать и проэксплуатировать, а в итоге - составить полноценный сценарий для компрометации сети компании. Важной особенностью Test lab является максимальная реалистичность. Участники, выступающие в роли атакующих, по мере прохождения, получают доступ к отдельным узлам лаборатории, каждый из которых содержит токен. Победителем считается тот, кто первым соберет все токены и получит полный контроль над виртуальной корпоративной сетью. Любой желающий может попробовать свои силы и проверить имеющиеся навыки в области информационной безопасности. Лаборатории всегда уникальны и содержат наиболее актуальные уязвимости.

Что необходимо для проверки своих сил и возможностей:

  1. Зарегистрироваться в личном кабинете на сайте lab.pentestit.ru, где будет доступна информация для подключения к лаборатории (логин/пароль).

  2. Подключиться к лаборатории через OpenVPN.

  3. Установить соединение и получить доступ к шлюзам, за которыми располагается сеть тестовой компании.

  4. Начать развивать атаку.

В чем заключается суть прохождения заданий

Основной смысл лаборатории - получение и закрепление навыков поиска и эксплуатации уязвимостей как в ручном режиме, так и с использованием специального инструментария, такого как: Nmap, Tplmap, Dirbuster, Wapiti, BurpSuite/OWASP Zap, Metasploit Framework, Patator/Hydra, Enum4linux, Whatweb, а также инструментов для реверс-инжиниринга, анализа сетевых протоколов и т.д.

Получая токены, вы сможете глубже проникнуть в тестовую корпоративную сеть, где будет доступно все больше серверов для атаки. В ходе работы вы ознакомитесь с популярными технологиями, это позволит взглянуть на ИБ со стороны злоумышленника. Стоит помнить и про главный ваш инструмент - логическое мышление и находчивость.

Вся информация представлена в ознакомительных целях, не нарушайте законодательство.

Для наглядного примера предлагаем разобрать несколько задач прошедших лабораторий.

Wiki

На странице сайта имеется строка поиска, куда вводим текст и убеждаемся, что он отображается на странице:

Вывод

Предположив, что используется шаблонизатор, вводим данные для его определения:

{{7*7}}

На странице отобразился введённый текст без изменений, следовательно, это не Jinga и не Twig. Для экономии времени воспользуемся инструментом Tplmap, который не смог выяснить, какой плагин используется:

# ./tplmap.py -u http://127.0.0.1/?a=

С помощью WhatWeb узнали, что сайт написан на Ruby-on-Rails:

# whatweb 127.0.0.1

Пробуем воспользоваться пейлоадом для популярного на Ruby-on-Rails шаблонизатором Haml:

<%=7*7>

На странице отобразилось 49, следовательно, плагин найден верно. Затем составляем запрос, позволяющий получить токен:

токен

Router

Произведя разведку в виде сканирования TCP-портов, результатов не получили. Пробуем сканировать UDP. Нашли открытый SNMP порт (161 UDP). И при помощи инструмента Onesixtyone имеем community-строки:

# onesixtyone -c /usr/share/john/password.lst 172.16.50.50

Когда есть необходимые данные, при помощи инструмента Snmpwalk пробуем получить информацию о сервере:

# snmpwalk -c skywalker -v1 172.16.50.50

Проанализировав вывод команды, замечаем странное имя системы, вероятно, это токен.

Java

Открываем jar-файл как архив и видим, что он состоит из одного класса Main. Заходим в Main.class в IDE:

Класс Main

Изучив декомпилированный код, обнаруживаем информацию для подключения к SSH и вывод результата выполнения команды:

df -h | grep /dev/sda1

При этом обращаем внимание, что пароль видоизменяется. Добавляем несколько строчек в класс, чтобы вывести IP-адрес сервера, логин и пароль, с которыми происходит подключение:

Редактируем класс

Компилируем изменённый класс и подменяем им оригинальный класс в jar-файле. Запускаем файл:

Вывод программы

Выведенный на экран пароль является токеном.

Статистика по Test lab

Уже более 33.000 пользователей со всего мира зарегистрировано на сайте лабораторий. При этом, всего 664 участника выполнили первое задание из предыдущей лаборатории. В то же время, только 69 из них смогли скомпрометировать ИТ-структуру виртуальной компании полностью.

О нас

Помимо создания уникальных лабораторий, мы являемся разработчиками Nemesida WAF (комплексная защита сайтов, интернет-магазинов, личных кабинетов, порталов, маркетплейсов, API и других веб-приложений от хакерских атак на основе машинного обучения Nemesida AI), а также предоставляем услуги анализа на наличие недостатков (уязвимостей) корпоративных сетей и веб-приложений крупнейшим компаниям из России, США, Великобритании, Чехии, Украины, Молдавии, Азербайджана, Казахстана, Канады; проводим подготовку сотрудников крупных компаний в области информационной безопасности . Если вы хотите более детально разобраться, как все это работает предлагаем пройти обучение по программам Zero Security: A (базовая подготовка) или Корпоративные лаборатории Pentestit (расширенная подготовка).

Заключение

В процессе работы в лаборатории Test lab участники изучат природу уязвимостей, основные инструменты эксплуатации, способы противодействия и психологию злоумышленника. Понимая, как выстраивать реальные векторы атаки, вы научитесь эффективно противостоять им. До встречи в новой Test lab 15!

Подробнее..

Privacy Day 2021 важные дискуссии о приватности и проекты Privacy Accelerator

03.03.2021 16:23:30 | Автор: admin

В День защиты персональных данных 28 января РосКомСвобода совместно с Digital Rights Center и Privacy Accelerator провела ежегодную международную конференцию Privacy Day 2021. На ней подвели итоги 2020 года и очертили тренды 2021-го. Обсуждённые экспертами темы, такие как слежка на фоне пандемии COVID-19, непонимание государством, как правильно защищать персональные данные граждан и утечки информации из компаний, всё ещё остаются актуальными. Ниже мы осветим важные моменты из этих обсуждений, но начнём с представления проектов Privacy Accelerator, который был запущен при участии РосКомСвободы.

Проекты Privacy Accelerator

Privacy Accelerator онлайн-программаинтенсивного развития коммерческих и некоммерческих проектов в области приватности, анонимности, доступа к информации и свободы слова и цифровых прав.

В 2020 году для контроля за распространением коронавируса были введены новые инструменты отслеживания через мобильные приложения. Также власти продолжают внедрять системы распознавания лиц, процесс непрозрачен и не подконтролен обществу, происходят утечки данных и их неправомерное использование. Угроза для свободы слова и самовыражения возрастает. В сентябре 2020 был выпущен первый поток Privacy Acceleratorи отобрала для участия четыре проекта в области цифровой грамотности и защиты коммуникаций в Сети.

Мы хотим увеличить число качественных проектов, обеспечивающих цифровые права граждан и их личную безопасность, благодаря менторским консультациям ведущих экспертов по направлениям и поддержке наставников, рассказала координатор Privacy AcceleratorДарья Горбачёва.

Программу поддержали Хабр, ProtonMail, Qrator Labs и ряд экспертов. Мы помогли участникам реализовать продукты от идеи до запуска. Рассказываем о некоторых из них ниже. В скором времени планируем запуск нового потока с хакатоном на старте. В планах проведение минимум двух таких программ в год.

Тех технологий, что есть, либо недостаточно, либо о них плохо знают. Мы хотим, чтобы тема приватности вышла на более широкую аудиторию, заключила Горбачёва.

Personalka

Проект-победительPandemic Hackathon, который прошёл в мае 2020 года.

Представляет собой сервис анализа и хранения соглашений об обработке персональных данных. Как говорят авторы проекта, он призван повысить осознанность людей при подписании согласия на обработку их личной информации и привлечь внимание общества к проблеме нецелевого использования персональных данных. Рассчитан на два сценария онлайн и офлайн.

Онлайн-сценарий учитывает сайты и интернет-сервисы, на которых согласие прячется за мелким шрифтом. Офлайн бумажные соглашения, которые дают на подпись в магазинах, гостиницах. Проект предлагает сопровождение и помощь на всех этапах взаимодействия с компанией и её политикой.

Сначала авторы хотели сервис по отзыву соглашений. Но оказалось, что это всего лишь часть процесса. Поэтому в итоге сервис из трёх компонентов.

  1. Сайт, на который можно загрузить текст соглашения. Сервис проводит анализ соглашения по двум критериям: кто операторы данных и какие есть риски (реклама, передача данных третьим лицам). Также он предлагает шаблон отзыва согласия.

  2. Плагин в браузере, который находит все точки, требующие передачи данных (кнопочки, галочки).

  3. Бот для бумажных документов, который умеет обрабатывать фото и скриншоты в процессе анализа соглашений.

SelfPrivacy

Open-source сервер-платформа на хостинге пользователя для развертывания персональных приватных сервисов, управляемых с помощью мобильного приложения через API провайдеров (Hetzner, AWS, Cloudflare). Все сервисы, такие как почта, VPN, мессенджер, менеджер паролей, файловое хранилище, будут собраны в одном месте.

Лицензионное соглашение не требуется. Приложение предполагает открытый код, отсутствие регистрации, телеметрии, трекинга и, по словам авторов, полную независимость даже от разработчиков. Скачали, установили и всё, говорят они.

В планах у команды тестирование, развитие платформы и релиз на площадках (F-droid, Play Market, App Store).

Amnezia

Проект-победительхакатона DemHack, который состоялся осенью 2020 года.

Сервис на основе полностью открытого исходного кода (серверной и клиентской части) для самостоятельного развертывания VPN-сервера, максимально безопасного и конфиденциального.

Рынок коммерческих VPN растёт каждый год, поскольку VPN решает две важные проблемы обхода блокировки сайтов и сохранения приватности пользователей. Авторы хотят положить начало новой тенденции развитию простых и понятных интерфейсов с дешёвыми тарифами и установкой в один клик.

Мы планируем убедить провайдеров сделать удобный интерфейс, чтобы купить VPS сервер было не сложнее, чем оплатить любой известный коммерческий VPN сервис, говорят разработчики. Настроить собственный VPN сервер в 2021-м так же полезно, как купить биткоины в 2011-м.

Алексей Сидоренко: Четыре всадника апокалипсиса приватности: кто они и как их победить

Руководитель Теплицы социальных технологий Алексей Сидоренко в личном выступлении иронично представил проблемы с приватностью в виде четырёх всадников апокалипсиса, которые являются результатом асимметрии власти, когда у граждан и пользователей есть значительно меньше возможностей управлять своими персональными данными, чем у разработчиков и чиновников.

Четыре всадника дата-апокалипсиса выглядят следующим образом.

Избыточная коммерциализация. Она, что интересно, подразумевает не столько чрезмерный сбор данных Facebook (хотя и это тоже), сколько нелегальность сбора, например, на рынке пробивки данных.

Махровая безалаберность. Появляется в силу человеческого фактора и отношения к человеку не как к человеку, а как строчке в базе данных.

Тоталитарный оппортунизм. Работает по принципу а давайте соберём как можно больше, а что с ними делать, разберёмся потом.

Адская игрофикация. Максимальный сбор данных и сегментация. Уже находит своё воплощение в виде Социального мониторинга в Китае.

Для борьбы со всадниками необходимы законодательные меры, как в Европе, где система построена вокруг людей и их интересов, а вокруг не строчек в базе данных. Сидоренко призвал изменить мышление в сторону гуманизма не только законодателей, но и разработчиков.

Давайте подойдём к приватности как к задаче для разработчиков, головоломке, заявил он.

Дискуссия Большой Брат знает всё: зачем госорганам всё больше информации о нас?

Интернет-омбудсмен Дмитрий Мариничев на конференции был настроен серьёзно и при том пессимистично. По его мнению, через 10-20 лет с приватностью в России будет только хуже. При авторитарной модели управления нет граждан, а есть поданные, которые представляют для государства просто ресурс, по которому есть определённые данные и метаданные. Наша страна пойдёт по пути Китая, когда государство стремится к содержанию всей информации в реестрах.

В горизонте пяти лет мы увидим обработку всех собранных нейросетями массивов, на основе которых будут делаться выводы о людях и прогнозирование их поведения.

По словам Мариничева, система наблюдения станет внушать человеку паттерны поведения, но он будет думать, что принимает решение сам. Сложится цифровая диктатура, однако в ней, как ни странно, людям будет комфортно, потому что жить они станут не задумываясь над тем, как они принимают решения. Сознательных же людей, которые видят, что что-то не так, довольно мало.

В этих условиях может появиться тренд тотальной открытости данных, когда всё будет открыто, но действия с данными только с разрешения их владельцев. Грубо говоря, шифровать ничего не будем, но для действий с данными понадобится разрешение, пояснил Мариничев.

Директор Общества защиты интернетаМихаил Климарёврассказал, как в рамках составления (совместно с РосКомСвободой)Рейтинга соблюдения цифровых прав 2020он оценил приложениеГосуслугипо степени защиты данных пользователей.

Исследование проводилось по методикеRanking Digital Rights, которая при изучении публичной позиции и политик компаний по соблюдению прав человека использует официальные веб-ресурсы компаний (технические домены третьего и более высокого уровня), веб-ресурсы материнских компаний/группы компаний, в которые входят сервисы (например, Mail.ru Group), официальные блоги компаний, а также открытые источники информации, в т.ч. СМИ и медиа-ресурсы.

В рамках этой методики рассматриваемые вопросы группировались по четырём темам:

транспарентность;
права потребителя;
приватность;
свобода информации.

Климарёв проанализировал Госуслуги по этим четырём пунктам (в каждом есть ещё множество подпунктов) и представил итоги в сжатом виде. Так, принципа свободы информации приложение не придерживается, transparency report не публикует, приватность защищает только на 30%, права потребителей на 20%.

В итоге приложение Госуслуги занимает почётное последнее место в списке приложений. На первых трёх, к слову, расположились Хабр, ВКонтакте и Яндекс. Более детально ознакомиться с Рейтингом соблюдения цифровых прав 2020 можноздесь. Подробная методология исследования представлена поэтой ссылке. Ждите наш Рейтинг соблюдения цифровых прав 2021 он выйдет уже скоро!

Директор АНО Информационная культура Иван Бегтин представил исследование Государственные мобильные приложения. Куда передаются данные из приложений, созданных органами власти.

В рамках него специалисты разобрали, какие данные собирают 44 государственных приложения (Мои Документы Онлайн, Добродел, Госуслуги, Активный гражданин, Парковки Москвы и др.) из разных регионов и что могут с ними делать. Оказалось, что 39 приложения включают код сторонних трекеров, 38 при этом код трекеров в зарубежных юрисдикциях.

Данные передаются компаниям в США и Японии. Всего 5 сервисов не содержат сторонних трекеров. Это ЕГР ЗАГС, Госуслуги.Дороги, Липецкая область, HISTARS, Работа в России. В одном приложении может быть до 10 трекеров (Moscow transport).

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

Как и Сидоренко, Бегтин полагает, что разработчикам следует быть более ответственными. Так, им стоит подумать о саморегулировании и внимательнее относиться к юридическим вопросам передачи данных сторонним сервисам.

В одних случаях использование сторонних сервисах, впрочем, может быть оправдано (Google Crashlytics, Google Firebase), отметил Бегтин. В других это совсем необъяснимо и сделано исключительно для удобства разработчиков: Flurry, HockeyApp, Estimote, Amplitud, Mapbox. Следствием этого удобства и является передача данных компаниям, которые торгуют данными на рынке.

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

тщательно взвешивать, стоит ли устанавливать на смартфон то или иное приложение;

проверять приложения на безопасность через такие сервисы, как Expodus Privacy.

Директор Центра ИТ-исследований РАНХиГС Михаил Брауде-Золотарёв не согласился с Иваном Бегтиным, что риски по утечке данных за рубеж выше, чем в России, особенно если это данные про данные, а не сами пользовательские данные. Он считает, что это не так. Помимо этого спикер указал, что для эффективной работы законов надо отделить плохое от хорошего. В России для этого механизма нет.

Не согласен Золотарёв с Бегтиным и в том, что регулирования в России нет. По его словам, оно есть формальное. Но нет инструментов его реализации, соответствующей культуры в обществе и надзора над его исполнением.

По мнению спикера, с инструментальной точки зрения, следует выделять не чёрные зоны законодательства, что тоже важно, а белые и работать с ними.

Механизм защиты данных понятен. При наличии политической воли и осознании потребности проблему можно решить за год-полтора и покрыть 80% законов о данных.

Журналист-расследовательАндрей Каганскихрассказал о том, как целый год вместе с РосКомСвободой он указывал Департаменту информационных технологий Москвы на отдельно взятую уязвимость в системе распознавания лиц. Никакой реакции на это не последовало (чиновники так и не остановили утечки данных с московских камер), а ответ для СМИбылвсегда один никаких утечек нет.

Это попытка моделирования реальности, когда говорят, что ничего не утекает, отметил Каганских.

Напомним, РосКомСвободамониториласитуацию всю весну, а летом провела эксперимент: волонтёр Аннакупилаполное досье на себя за 15 тыс. руб. Кроме того, выяснилось, что барыги на чёрном рынке на просьбу показать, как работает слив данных, предоставили данные шести человек просто в качестве примера.

ДИТ отвечает, что система анонимна, но на делевозможнытак называемые корреляционные атаки, когда фотографии сопоставляются с данными из других систем, в результате чего личность человека раскрывается, напомнил Каганских. К примеру, в МВД есть система, которая сверяет изображения с данными из системы Российский паспорт. Получается, что анонимность системы по факту формальна. Можно использовать две системы и фото человека и на выходе получить досье на него.

Юрист РосКомСвободы Екатерина Абашина рассказала, как должно реагировать общество на вызовы приватности. Она дала слушателям несколько конкретных советов.

Знать свои права как субъектов персональных данных.

Быть проактивными.

Понимать границы допустимого для государства.

Я призываю граждан внимательнее относиться к тому, какую информацию они передают госорганам и коммерческим организациям, разобраться, где требования законны, а где нет, и стараться отстаивать свои права, в том числе через суд, потому что другого порядка, к сожалению, во многих случаях нет. РосКомСвобода готова в этом помогать, заявила Абашина.

Юрист напомнила, что РосКомСвобода проводит кампанию за введение моратория на использование системы распознавания лиц Bancam и собирает случаи нарушения цифровых прав в в пандемию на карте Pandemic Big Brother. В первом случае вы можете помочь нам, присоединившись к кампании и подписав петицию на сайте, во втором сообщив о соответствующих нарушениях.

Помимо этого юристы РосКомСвободы оказывают юридическую помощь как отдельным лицам, например, Сергею Межуеву, так и в целом обжалуют постановления госорганов, как в случае с указом мэра Москвы Собянина о сборе персональных данных ушедших на удалённую работу сотрудников столичных организаций.

По юридическим вопросам к нам можно обращаться на legal@roskomsvoboda.org.

Подробнее о дискуссии читайте здесь.

На чьей стороне приватность? Мировые практики и болевые точки

Эксперты из Беларуси, Казахстана, Кыргызстана, Германии, а также из РосКомСвободы и Access Now рассказали о цифровых практиках государств в борьбе с коронавирусом, подвели итоги за год и сделали прогноз на будущее.

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

2020 год оказался годом пандемии, а вместе с ней ещё и тотальной слежки за гражданами, рассказала координатор проекта Pandemic Big Brother Алёна Рыжикова. В апреле РосКомСвобода и Human Constanta запустили карту Pandemic Big Brother, на которой собирают случаи нарушения цифровых прав.

Почти вся карта окрашена в красный цвет, что означает, что введённые ограничения продолжают там действовать.

Самым популярными средством слежки стали государственные мобильные приложения. Так, 116 стран запустили собственные коронавирусные приложения

для отслеживания контактов с заражёнными;

для выдачи цифровых пропусков;

для самодиагностики;

для отслеживания соблюдения обязательного карантина больными.

Только в России в прошлом году было запущено четыре приложения:

Госуслуги СТОП Коронавирус (выдача цифровых пропусков);

Социальный мониторинг (контроль за соблюдением карантина);

Карантин (проверка цифровых пропусков у водителей);

Госуслуги. COVID-трекер (отслеживание контактов с больными коронавирусом).

Запуск таких приложения в ускоренном режиме приводит к тому, что приложения оказываются недоработанными, а собираемые данные лишены надёжной защиты, что приводит к утечкам , заявила Рыжикова и напомнила, как сервис Социальный мониторинг автоматически выписывал штрафы за нарушение карантина даже тем людям, которые этот карантин вовсе не нарушали.

Во время пандемии усилилась интернет-цензура и охота на фейки , отдельно отметила спикер. В России весной был принят соответствующий закон, по которому на журналистов и СМИ посыпались штрафы. Подобные законы были приняты в более чем десяти странах мира. В Арабских Эмиратах могут оштрафовать на сумму до 5,5 тыс. долл., а в Марокко посадить на срок до трёх лет.

Это грубо нарушает право на свободу слова граждан. Наказание за такие преступления избыточны, резюмировала Рыжикова.

Эксперт правозащитной организации Human Constanta Алексей Казлюк отметил, что в Беларуси повестку коронавируса перебивает повестка протестов, которые начались после выборов президента в августе 2020 года. В стране имеет место слежка за протестующими.

Власть внедряет технологии слежения это плохо. Но все инструменты слежки хорошо работают и им можно противостоять это хорошо. Более того, государство не успевает внедрять всё то, что хочет. Государства, которым не хватит денег на слежку, не успеют в полной внедрить соответствующие технологии. Это, собственно, Беларусь. А вот Казахстан и Россия вызывают более тревожные ощущения, отметил правозащитник.

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

Между тем, как считает Казлюк, безответственность производителя технологий уходит в прошлое. Так, компания по распознаванию лиц Synesis попала в санкционный список Евросоюза. Международное адвокатирование один из инструментов борьбы со слежкой. Правозащитники добивались подобного давно, но только сейчас тенденция наконец-то проявилась.

Мы должны просвещать и учить людей защищать свои данные, уверен правозащитник. По его словам, это повестка на ближайший год.

Заместитель председателя немецкой Pirate Parties International Грегори Энгельс рассказал об опыте Германии, представив два примера использования технологий в стране, один положительный, другой негативный.

Положительный пример приложение Corona Warn-app, которое спроектировано так, что исключает слежку за гражданами благодаря протоколу DP-3T Decentralised (данные сохраняются исключительно на телефоне). Близлежащие устройства обмениваются загружаемыми результатами тестов своих владельцев, но только таким образом, что понять, был ли человек в зоне риска, можно, а узнать, кто именно из контактов болен, нельзя. Результаты сразу тестов идут со специальным QR-кодом, которые сохраняет в безопасности персональные данные владельца.

Использование приложения анонимно и добровольно. Сервис не собирает данные, которые не нужны для отслеживания контактов, например, геолокацию, хотя и в Германии есть политики, которые, не понимая, как работают технологии, говорят, что надо собирать о людях больше данных.

Хорошо, что приложения спроектированы так, что данные, которые требуют политики, не только не существуют, но их и невозможно собрать, отметил Энгельс.

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

Основатель Eurasian Digital Foundation Руслан Дайырбеков заявил, что пандемия потребовала от государств принятия срочных цифровых решений. В том числе Казахстан внедрил разного рода технологии слежения, силу которых граждане ощутили в полной мере. За нарушителями режима самоизоляции следили при помощи мобильного приложения Smart Astana, систем городских камер видеонаблюдения Сергек, Карты мобильных абонентов, дронов и прочих цифровых инструментов.

Дайырбеков отметил недостаточность механизмов обеспечения приватности и оценки влияния технологий. Кроме того, многие проекты свернули, но уничтожат ли собранные данные, непонятно.

К сожалению, нет правовых механизмов оценки влияния технологий на права человека.

Спикер рассказал и о позитивном развитии законодательства в сфере персональных данных: прошедший год ознаменовался большим шагом в развитии этой области.

Так, был принят закон о регулировании цифровых технологий, представляющий собой пакет поправок в существующие законы. Речь идёт о действительно позитивных изменениях, поскольку государство имплементировало международный стандарт минимизации данных, а также установило правила дактилоскопической, геномной и биометрической регистрации.

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

Юрист Гражданской инициативы интернет-политики в Кыргызстане Ирина Байкулова подтвердила, что в её стране было много вещей, которые отразились на карте Pandemic Big Brother. В Кыргызстане происходили следующие вещи.

Ограничение свободы слова онлайн, преследование за посты в социальных сетях в рамках борьбы с коронафейками. Врачей и активистов и заставляли отречься от слов и приносить извинения всему кыргызскому народу.

Ужесточение санкций за нарушение санитарно-эпидемиологических норм, условий карантина и самоизоляции, распространение в Сети ложной информации. Были внесены изменения в кодексы об ответственности (приняты по ускоренной процедуре, без общественного обсуждения), введены штрафы за распространение недостоверной информации, если она нарушает общественный порядок и спокойствие граждан на территории, где объявлен режим ЧП.

Ограничение доступа к официальной информации. Журналистов не аккредитовывали на брифинги госорганов.

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

Слежка через государственные цифровые сервисы, использование технологий для отслеживания, нарушающих право на частную жизнь, в частности, мобильное приложение Stop COVID-19 KG.

Максимальный сбор данных трекерами на приложениями, вплоть до местоположения, при отсутствии положений конфиденциальности о том, кто собирает данные, как хранит, куда передаёт.

Утечки данных. В социальных сетях и мессенджерах было распространено видео с описанием работы приложения, фактические разгласившее особо чувствительные персональные (медицинские) данных. Информация оказалась общедоступна.

Электронные пропуска на разрешённые виды деятельности, такие как логистика, доставка продуктов в маркеты, оказание медицинской помощи, волонтёрство.

Электронный маршрутный лист (обязательный документ онлайн или офлайн формы для возможности передвижения по городу в период ЧП/ЧС).

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

Несмотря на многочисленные нарушения, были и положительные моменты. Это оказание услуг связи и интернета абонентам, у которых сформировалась задолженность в оплате, и разработка большого числа бесплатных приложений по предоставлению информации об инфекции и консультаций врачей. Кроме того, невозможность получить многие государственные и банковские услуги позволила переоценить важность цифровизации, безналичных расчетов. Это ускорило цифровую трансформацию и государства, и бизнеса, считает Байкулова. Но вместе с тем, к сожалению, усилило и слежку.

Мы видим, что госорганы всё больше присматриваются к опыту других стран по использованию технологических механизмов контроля, и к сожалению всё больше обращаются не к европейскому опыту (защите privacy), а к китайскому и российскому. Причём скорее вне зависимости от пандемии COVID-19, этот тренд достаточно устойчивый, заключила эксперт.

Эксперт по защите цифровых прав из международной некоммерческой организации Access Now Наталья Крапива сделала прогноз о том, развитие каких трендов стоит ожидать в 2021 году. В их числе распознавание лиц, наблюдение за коммуникациями, применение искусственного интеллекта.

Спикер также выделила следующие тенденции в проводимых политиках разных государств.

1. Правительства станут требовать от людей паспорта вакцинации, что грозит раскрытием и утечкой персональных данных людей и дискриминацией. При этом не существует доказательств, что такие паспорта могут защитить от инфекции.

2. Страны будут продвигать идею суверенитета данных. Отсюда вытекает положительный момент независимость от технологических компаний. Однако Китай, Россия, Чили и даже страны Евросоюза понимают суверенитет как возможность тотальной слежки за гражданами.

3. Регуляторы продолжат рассматривать защиту данных и конкуренцию совместно для контроля над BigTech. Политика защиты данных и антимонопольное законодательство будут совпадать, что проиллюстрировало антимонопольное заседание Конгресса США. Это хорошо, потому что не позволяет компаниям упрочить свою власть.

4. Произойдёт реформа законодательства, связанного со слежкой, для обеспечения передачи данных с Евросоюзом. США уже потеряли возможность переносить данные из Европы к себе.

5. Многие страны, где нет строгих законов о защите данных, начнут двигаться в этом направлении. Это США, Тунис, Эквадор, Индия, Австралия, Боливия. В России, к сожалению, предпосылок к этому нет.

Будем оптимистами и станем надеяться, что как можно больше стран подпишут, ратифицируют и полностью имплементируют Конвенцию о защите физических лиц при автоматизированной обработке персональных данных и её протокол. Эти документы способствуют продвижению концепции прав человека и защите данных во всём мире.

Подробнее о дискуссии читайте здесь.

Соглашайся или уходи: почему интернет-платформы собирают наши данные и куда они утекают?

Представители компаний и сами пользователи представили совершенно разные точки зрения на то, что компании имеют право делать с пользовательскими данными. Так, разработчик решений для финансовых организаций Double Data считает, что может анализировать данные из соцсетей, потому что они общедоступны по своей форме. Фармацевтическая компания Novartis, напротив, уверена, что данные не должны продаваться, если в их суть не заложена коммерциализация, поскольку пользователи соцсетей по умолчанию не предполагают, что их данные будут использоваться в подобных целях. Управляющий партнёр LT Consulting рассказал о своём иске к Apple, а представитель РосКомСвободы о том, как можно влиять на отношение компаний к приватности клиентов.

Заместитель генерального директора по правовым вопросам Double Data Екатерина Калугина представила доклад на тему Пользовательские данные как инструмент конкурентной борьбы.

Юрист рассказала, что данные пользователей нужны компаниям в областях применения искусственного интеллекта, больших данных, анализа данных словом, везде, где необходимо обучать нейронные сети.

Пользовательские данные огромный ресурс, который может использоваться в том числе для устранения потенциальных конкурентов не только с рынка социальных сетей, но и со смежных рынков. Компания с доступом к данных пользователей получает преимущество. Ограничивая доступ к данным своим конкурентам, платформы пользуются двумя инструментами:

законодательством о персональных данных (кейс Facebook);

иммунитетом интеллектуальной собственности (Double Data против ВКонтакте).

Российский опыт в области иммунитетов интеллектуальной собственности представлен, хотя и не исчерпывается, спором Double Data и ВКонтакте. Напомним, социальная сеть в 2017 году подала в суд на компанию ООО Дабл, которая собирала общедоступные персональные данные пользователей. Поначалу соцсети было отказано в иске, затем апелляционная инстанция отменила это решение, дело дошло до кассационного суда, который отправил его на новое рассмотрение в первую инстанцию Арбитражный суд Москвы. Дабл утверждает, что их программа работает как поисковик и клиентам даёт только ссылки на профили пользователей. ВКонтакте же полагает, что Дабл именно извлекает данные пользователей из открытых профилей и использует в своих интересах, в то время как база данных собственность соцсети.

Развитие технологий возможно только в случае, если компании имеют равноправный доступ к открытым данным, уверена спикер. Претензии ВКонтакте способ конкурентной борьбы, считает и гендиректор Double Data Максим Гинжук.

Впрочем, в аналогичном споре Национального бюро кредитных историй, к которому у ВКонтакте тоже есть иск, и Роскомнадзора, проверившего НБКИ, Арбитражный суд Москвы признал, что социальные сети не являются источником общедоступных персональных данных применительно к положению ст. 8 закона Об информации.

Руководитель направления по защите персональных данных Novartis Россия/СНГ Илья Пикулин дополнил фразу Сергея Сидоренко: Я не строчка в базе данных, а личность. Спикер рассказал о компании, которая является примером ответственного подхода к пользовательским данным.

Транснациональная фармацевтическая компания Novartis заинтересована в данных и является потребителем сервисов, которые предоставляют данные. Но она старается трезво смотреть на то, что предлагают ей поставщики данных, например, рекламирующие программу поддержки клиентов. Как правило, они собирают о людях очень много данных и либо легко отдают их все, вплоть до скана паспорта, результатов медицинского тестирования или сведений о редких заболеваниях, либо просто убирают имена владельцев этих данных, не понимаю, что и без имени вычислить человека легко. А значит, настоящую деперсонализацию они не провели.

Процесс, которым мы можем управлять, попытка снизить аппетиты поставщиков, убеждая, что людям некомфортно делиться данными и лучше их минимизировать. Ведь чем больше данных, чем выше шанс, что они утекут и попадут в руки к мошенникам. Это нарушает права пользователей, а нам такие данные не нужны, сказал Пикулин.

При этом Novartis не отказывается от продукции сразу, но проверяет, насколько использовании данных законно. Конечно, иногда это приводит к потере коммерческой выгоды, однако компания нацелена на privacy by design.

Важно понимать, что чем больше данных задействовано, тем выше риск нарушений.

Как потребители мы должны менять культуру в отношении поставщиков услуг, чтобы соблюдался баланс между коммерческими интересами и правами субъектов. Когда они делятся в открытом доступе, не думают, что данные будут продаваться.

Данные не должны продаваться, если в их суть не заложена общедоступность, заключил эксперт.

Управляющий партнёр LT Consulting Тигран Оганян рассказал о своём иске к Apple. Модератор Алексей Мунтян заметил, что благодаря таким кейсам репутация компаний становится всё более важной в аспекте приватности.

В Нью-Йорке в своё время он приобрёл iPhone 6s и сим-карту T-Mobile, привязал телефон к своему Apple ID и использовал полученный телефонный номер около года. После этого, как потом выяснилось, гражданин США Реджи Лопес в Нью-Йорке купил iPhone 6 plus, а также новую сим-карту T-Mobile. Как только Лопес активировал сим-карту на новом iPhone, все сервисы Apple сразу привязались к его номеру телефона, в то время как старый телефонный номер Оганяна (он же новый номер Лопеса) оставался привязанным к Apple ID Оганяна.

Лопесу было неизвестно, что ранее этот номер принадлежал Оганяну. И хотя Оганян деактивировал и даже не вставлял сим-карту в свой телефон, он стал получать сообщения и звонки по iMessage и FaceTime, адресованные новому владельцу телефонного номера Лопесу. При этом Apple никогда не предупреждала своих клиентов о необходимости вручную отвязать старые номера, используемые на iPhone, от аккаунтов Apple.

Оганян получил более 100 сообщений и звонков, среди которых были личные фотографии и сообщения, явно адресованные Реджи Лопесу. Многочисленные попытки урегулировать данную проблему, включая обращение лично к Тиму Куку с просьбой провести внутреннее расследование, не увенчались успехом.

В Apple только посоветовали удалить телефонный номер и сим-карту, которая и так давно не использовалась и была заблокирована.

Сейчас Оганян судится с Apple с целью возмещения ущерба от обманных действий корпорации, умолчание которой о такой бреши в защите конфиденциальности нарушило права потребителей.

Это исключительно привилегия устройств Apple, отметил Оганян особенность смартфонов корпорации.

Юристы Оганяна доказали, что Apple в ходе маркетинговых кампаний предоставляла пользователям ложную информацию о защите их данных. Она позиционировала свои устройства как обладающие специальной защитой конфиденциальности. По этой причине компания назначала и премиальные цены. Оператор ItMobile также обманывал пользователей насчёт защищённости переписки и не требовал от прежних владельцев отвязывать номера от устройств, считает спикер.

Неразглашение Apple и ItMobile привело к тому, что пользователи стали ничего не подозревающими жертвами утечки их корреспонденции, заявил Оганян.

Примечательно, что iOS12 предположительно решала такие проблемы, но Apple так и не проинформировала потребителей о факте обнаружения бреши, которая существовала на протяжении семи лет. И важно, что даже сегодня далеко не все обновили ПО, поэтому указанные нарушения всё ещё могут иметь место.

Пока борьба не обретёт бизнес-очертания, выйдя за рамки правозащиты, она будет не результативна, убеждён Оганян. На такие корпорации суммы возмещения ущерба серьёзно не влияют. Более того, юристы компаний затягивают судебные разбирательства, что позволяет организации и дальше зарабатывать деньги.

Люди должны объединяться для решения таких задачи и привлекать инвестиции в свои кейсы, поскольку путь разбирательств очень длинный, уверен Оганян.

Все усилия правозащитного же сообщества должны быть направлены на создание условий быстрого развития кейсов. Тем быстрее будут результаты, заключил он.

Юрист РосКомсвободы Анна Карнауховарассказала про то, как составлялсяРейтинг соблюдения цифровых прав 2020. Об этом можно почитать выше в рамках выступления Михаила Климарёва.

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

У нас есть основания полагать, что мы положительно влияем на компании, поскольку в новом отчёте лидеры поменялись. Считаем, реакция есть и изменения в лучшую сторону тоже, заявила Карнаухова.

К слову, октябре 2020 году Яндекс впервыепредставилотчёт о прозрачности, что, безусловно, повлияет на место компании в рейтинге 2021 года.

Мы верим, что Яндекс в том числе прислушался к ним, и рады, что нам удается положительно влиять на отрасль, заявила тогда юрист.

Подробнее о дискуссии читайте здесь.

Ждём вас на нашей конференции в следующем году! А пока смотрите Privacy Day 2021 на нашем канале на YouTube тут - подборка по отдельным видео в плейлисте):

Подробнее..

Уязвимости неуязвимого Linux

03.03.2021 18:08:18 | Автор: admin

Cреди обычных пользователей и даже ИТ-сотрудников распространено убеждение в повышенной безопасности ОС семейства Linux по сравнению с дырявой виндой и попсовой макосью. Однако, как показало наше исследование, открытость исходников не избавляет Linux от ошибок и уязвимостей, которые несут риски, связанные с безопасностью. В этом посте мы рассмотрим, почему Linux стал привлекательной мишенью для злоумышленников, а также обсудим основные угрозы и риски, связанные с этой операционной системой.

Фото: Trend MicroФото: Trend Micro

По данным Linux Foundation, ещё в 2017 году под управлением Linux работали 90% клиентских ресурсов у всех облачных провайдеров, причём в девяти из десяти случаев и сам облачный провайдер использовал в качестве основной ОС именно Linux. Но облаками дело не ограничивается: 82% всех выпущенных в мире смартфонов также используют Linux, а среди суперкомпьютеров доля Linux составляет 99%.

По мере того, как предприятия и организации переносят данные в облака, где царит Linux, вектор интереса злоумышленников смещается на слабые места этого семейства операционных систем: уязвимости, неправильные настройки и пробелы в безопасности, а также вредоносное ПО.

Уязвимости

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

Количество критических уязвимостей в различных дистрибутивах за 2015-2020 год. Источник: Trend MicroКоличество критических уязвимостей в различных дистрибутивах за 2015-2020 год. Источник: Trend Micro

Важно отметить, что значительное количество уязвимостей в сервисе или платформе не обязательно означает, что эти уязвимости обязательно несут существенный риск.


Каждый производитель дистрибутива Linux выполняет свою процедуру обработки уязвимостей. В то время как исправления от вендоров приходят в разное время, заплатки upstream, будь то оригинальный пакет или исходный код утилиты, появляются первыми. Вендоры Linux отвечают за исправление уязвимостей в таких компонентах, как ядро, утилиты и пакеты. В 2019 году Red Hat исправил более 1000 CVE в своём дистрибутиве Red Hat Enterprise Linux (RHEL), согласно их отчёту Product Security Risk Report. Это более 70% от общего числа уязвимостей, исправленных во всех продуктах.

Количество важных и критических рекомендаций по безопасности для различных дистрибутивов Linux за 2015-2020 годы. Источник: Trend MicroКоличество важных и критических рекомендаций по безопасности для различных дистрибутивов Linux за 2015-2020 годы. Источник: Trend Micro

Уязвимости приложений, работающих под управлением Linux, были причиной нескольких серьёзных инцидентов. Например, нашумевшая утечка данных в Equifax произошла в результате эксплуатации уязвимости CVE-2017-5638 в Apache Struts. Тогда хакеры проникли в корпоративную сеть бюро кредитных историй Equifax 13мая 2017года, но подозрительную активность служба безопасности заметила только в конце июля. Киберпреступники провели внутри сети 76дней, успев за это время скачать из 51базы данных личную информацию 148млн американцев это 56% взрослого населения США. Помимо американских граждан в утечку попали сведения 15млн клиентов Equifax в Великобритании и около 20тыс. граждан Канады. Общие расходы Equifax в результате этого инцидента за два следующих года составили более 1,35млрд долларов США и включают расходы на укрепление систем безопасности, поддержку клиентов, оплату юридических услуг, а также выплаты по судебным искам.

Уязвимости публичных приложений входят в состав фреймворка MITRE ATT&CK (IDT1190), а также перечислены в топ-10 уязвимостей OWASP и являются наиболее популярными векторами проникновения в Linux-системы.

Ошибки конфигурации

Небезопасные настройки довольно распространены и всегда были критическим вопросом в области безопасности. Первая версия OWASP Top 10 Web Risks от 2004года, включала в себя Небезопасное управление конфигурацией (Insecure Configuration Management); в версии списка 2017года название изменилось на Ошибочные настройки безопасности (Security Misconfiguration).

Когда предприятия стали массово переходить на облачные технологии для обеспечения операционной и экономической устойчивости во время пандемии COVID-19, неправильная конфигурация стала ещё более серьёзной проблемой: по мере переезда предприятий и организаций в новые экосистемы они непреднамеренно вносили ошибки в конфигурации облачной инфраструктуры, контейнеров и бессерверных сред.

Ниже перечислены наиболее распространённые проблемы безопасности в конфигурации Linux.

Слабые пароли в Linux как массовое явление

Использование паролей по умолчанию или слабых паролей до сих пор удивительно распространено, причём даже самые популярные дистрибутивы не отличаются в лучшую сторону.

Например, в дистрибутивах Debian/Ubuntu время жизни пароля по умолчанию составляет 99999дней, а если требуется принудительно задать сложность пароля, придётся устанавливать пакет libpam-pwquality или его аналог.

Настройки времени жизни пароля по умолчанию в Ubuntu (файл /etc/login.defs). Источник: linuxtechiНастройки времени жизни пароля по умолчанию в Ubuntu (файл /etc/login.defs). Источник: linuxtechi

Известный пример злоупотребления из-за отсутствия аутентификации произошёл в Tesla, когда злоумышленники получили доступ панели управления административной консоли, смогли взломать работающую подсистему Kubernetes и получить AWS-удостоверения Tesla для запуска майнера криптовалюты.

В ноябре 2020 года ФБР выпустило предупреждение о том, что злоумышленники злоупотребляют неправильно настроенными экземплярами SonarQube, который обнаруживает ошибки и уязвимости в безопасности исходного кода. Из-за того, что некоторые организации не поменяли настройки систем по умолчанию, они были доступны через порт 9000 с использованием учётных данных admin/admin.

Такая же проблема массово присутствует среди работающих под управлением Linux IoT-устройств, производители которых часто не утруждают себя безопасными настройками паролей. Многие IP-камеры и роутеры также поставляются без паролей или с паролями по умолчанию, которые можно легко найти в общедоступной базе паролей по умолчанию (Default Passwords Database). Причём в некоторых случаях пароли жёстко прошиты и не могут быть изменены.

Уязвимые службы в интернете

Развитие специализированных поисковых систем привело к тому, что уязвимый открытый порт в интернете можно расценивать как приглашение к атаке. Например, используя специализированную поисковую систему Shodan, мы обнаружили более 8тыс. уязвимых экземпляров Redis, размещённых в публичном облаке без TLS-шифрования и даже без пароля. Позже оказалось, что все они уже использовались кем-то для майнинга криптовалюты.

Открытые файловые ресурсы на Linux-серверах

Публично доступные FTP-, SMB- и NFS-ресурсы, разрешённый листинг каталогов на веб-серверах под управлением Linux, открытые облачные службы хранения данных Amazon S3 и Azure Blobсоздают потенциальный риск несанкционированного доступа. С помощью Shodan мы обнаружили более 3млн уязвимых публичных FTP-серверов.

Общее количество уязвимых публичных FTP-серверов по состоянию на 5 января 2021 года. Источник: Trend MicroОбщее количество уязвимых публичных FTP-серверов по состоянию на 5 января 2021 года. Источник: Trend Micro

Вредоносное ПО

Под Linux существуют многие разновидности вредоносных программ: вымогатели, криптомайнеры, руткиты, черви, бэкдоры и трояны удалённого доступа (RAT). Преступники успешно используют их для получения финансовой выгоды, шпионажа, саботажа, хактивизма или просто из желания доказать, что системы могут быть скомпрометированы.

Ниже перечислены наиболее распространённые типы вредоносных программ в экосистеме Linux.

Вымогатели

Это, безусловно, самая финансово успешная категория вредоносных программ за последнее время. Учитывая растущую популярность Linux, злоумышленники, управляющие вымогателями, считают эту операционную систему очень перспективной мишенью.

В качестве примера Linux-вымогателей можно привести RansomEXX/Defray7777, относительно недавно портированный под эту операционную систему. Его применяла кибергруппировка Gold Dupont, атакующая организации из сфер здравоохранения и образование и технологические отрасли.

Другой вымогатель Erebus, впервые замеченный в сентябре 2016 года, в июне 2017года Erebus заразил 153Linux-сервера южнокорейской хостинговой компании NAYANA и вывел из строя 3400 клиентских сайтов.

Криптомайнеры

Относительно новым мотивом для злоумышленников является проникновение и злоупотребление вычислительными ресурсами для добычи криптовалюты.

Многие вредоносные криптомайнеры не просто заражают Linux-системы, но и очищают их от присутствия майнеров-конкурентов, а также стремятся захватить как можно более мощные системы с практически неограниченными вычислительными возможностями, такие как контейнеры Docker или Redis.

Для проникновения в систему майнеры используют распространённые уязвимости. Например, программа coinminer, детектируемая компанией Trend Micro под названием Coinminer.Linux.MALXMR.SMDSL64, использует уязвимости обхода авторизации SaltStack (CVE-2020-11651) и обхода каталога SaltStack (CVE-2020-11652).

Вредоносные скрипты

Командные интерпретаторы присутствуют на всех UNIX-машинах, поэтому злоумышленники активно используют его, тем более что это значительно проще, чем использовать скомпилированные вредоносные программы.

Причин популярности вредоносных скриптов для атак на Linux:

  • они легко загружаются в виде текстовых файлов;

  • они имеют небольшой размер;

  • меньше вероятность того, что они будут легко обнаружены;

  • они могут быть созданы на лету.

Веб-шеллы и бэкдоры

Веб-шелл установленный на веб-сервере скрипт, который выполняет команды преступника и обеспечивает ему прямой доступ к взломанной системе. Например, в августе 2020 года мы столкнулись с Ensiko, веб-оболочкой PHP, нацеленной на Linux, Windows, macOS или любую другую платформу, на которой установлен PHP. Помимо удалённого выполнения кода с помощью Ensiko злоумышленники могут выполнять команды оболочки и повреждать веб-сайты.

Руткиты

Руткит набор вредоносных программ, которые внедряются в Linux-систему, частично или полностью подменяя стандартные системные утилиты, драйверы и библиотеки. Основная цель руткита скрывать своё присутствие от администраторов и пользователей скомпрометированной системы, обеспечивая злоумышленнику полный или частичный контроль.

В ходе наших исследований мы сталкивались с несколькими семействами руткитов. Чаще всего это были Umbreon, Drovorub или Diamorphine.

Рекомендации

Предприятия продолжают внедрять Linux, причём использование этой ОС не ограничивается серверными задачами. Крупные предприятия активно устанавливают свободную ОС на десктопы пользователей. Очевидно, что когда киберпреступники заметят эту тенденцию, они будут всё чаще нацеливаться на среду Linux с целью получения финансовой выгоды.

Вот несколько рекомендаций по обеспечению безопасности систем Linux:

  • внедрите в качестве обязательного принцип Инфраструктура как код (Infrastructure as Code, IaC), который гарантирует что системы создаются должным образом, а их конфигурации соответствуют решаемым задачам;

  • используйте принцип наименьших привилегий и модель совместной ответственности;

  • контролируйте целостность операционной системы, чтобы подозрительные изменения не могли произойти незаметно;

  • отслеживайте сетевой периметр, проводите мониторинг всех устройств, систем и сетей;

  • замените пароли по умолчанию на сильные и безопасные, по возможности всегда включайте многофакторную аутентификацию;

  • регулярно устанавливайте обновления и исправления ошибок.

Подробнее..

PVS-Studio, Blender цикл заметок о пользе регулярного использования статического анализа

03.03.2021 20:06:54 | Автор: admin

PVS-Studio мониторит код Blender
В статьях мы регулярно повторяем важную мысль: статический анализатор должен использоваться регулярно. В этом случае многие ошибки выявляются на самом раннем этапе, а их исправление максимально дёшево. Однако теория это одно, но намного лучше подкреплять слова практическими примерами. Рассмотрим несколько свежих ошибок, появившихся в новом коде проекта Blender.


Недавно мы настроили регулярную проверку проекта Blender, о чём мой коллега рассказал в статье "Just for fun: команда PVS-Studio придумала мониторить качество некоторых открытых проектов". В дальнейшем планируем начать мониторить ещё некоторые интересные проекты.


Сразу скажу, что мы не ставим перед собой задачу найти как можно больше ошибок. Целью является периодическое написание небольших заметок (таких как эта), в которых мы будем на практике показывать достоинства регулярного анализа кода. Другими словами, мы иногда будем описывать некоторые интересные ошибки в новом коде, найденные при очередном ночном запуске PVS-Studio, и тем самым популяризировать правильное использование методологии статического анализа кода.


Итак, давайте посмотрим, что найдено в свежем коде проекта Blender.


Фрагмент первый: double-checked locking


typedef struct bNodeTree {  ....  struct NodeTreeUIStorage *ui_storage;} bNodeTree;static void ui_storage_ensure(bNodeTree &ntree){  /* As an optimization, only acquire a lock if the UI storage doesn't exist,   * because it only needs to be allocated once for every node tree. */  if (ntree.ui_storage == nullptr) {    std::lock_guard<std::mutex> lock(global_ui_storage_mutex);    /* Check again-- another thread may have allocated the storage       while this one waited. */    if (ntree.ui_storage == nullptr) {      ntree.ui_storage = new NodeTreeUIStorage();    }  }}

Предупреждение PVS-Studio. V1036: Potentially unsafe double-checked locking. node_ui_storage.cc 46


Перед нами неправильная реализация блокировки с двойной проверкой. Для пояснения проблемы процитирую фрагмент статьи "C++ and the Perils of Double-Checked Locking", написанной Scott Meyers и Andrei Alexandrescu ещё в 2004 году. Как видите, проблема давно известна, но это не защищает разработчиков от того, чтобы наступать на одни и те же грабли. Хорошо, что анализатор PVS-Studio помогает выявлять подобные проблемы :). Итак, фрагмент из статьи:


Consider again the line that initializes pInstance: pInstance = newSingleton;

This statement causes three things to happen:

Step 1: Allocate memory to hold a Singleton object.

Step 2: Construct a Singleton object in the allocated memory.

Step 3: Make pInstance point to the allocated memory.

Of critical importance is the observation that compilers are not constrainedto perform these steps in this order! In particular, compilers are sometimes allowed to swap steps 2 and 3. Why they might want to do that is a question we'll address in a moment. For now, let's focus on what happens if they do.

Consider the following code, where we've expanded pInstance's initialization line into the three constituent tasks we mentioned above and where we've merged steps 1 (memory allocation) and 3 (pInstance assignment) into a single statement that precedes step 2 (Singleton construction). The idea is not that a human would write this code. Rather, it's that a compiler might generate code equivalent to this in response to the conventional DCLP source code (shown earlier) that a human would write.

Если вы хотите подробнее разобраться с написанием блокировки с двойной проверкой, то отсылаю вас к описанию диагностики и статьи, ссылки на которые были даны выше. Для нас важно другое.


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


Примечание. Ошибка может и не существовать сейчас в двоичном коде, и всё зависит от компилятора, и ключей оптимизации. Однако, даже если сейчас всё работает хорошо, это не значит, что так будет всегда. Ошибка может проявить себя при смене компилятора/ключей оптимизации.


Фрагмент второй: realloc


static void icon_merge_context_register_icon(struct IconMergeContext *context,                                             const char *file_name,                                             struct IconHead *icon_head){  context->read_icons = realloc(context->read_icons,    sizeof(struct IconInfo) * (context->num_read_icons + 1));  struct IconInfo *icon_info = &context->read_icons[context->num_read_icons];  icon_info->head = *icon_head;  icon_info->file_name = strdup(path_basename(file_name));  context->num_read_icons++;}

Анализатор PVS-Studio выдаёт здесь два предупреждения, и это правильно. Здесь действительно допущено сразу две ошибки различного плана.


Первая: V701: realloc() possible leak: when realloc() fails in allocating memory, original pointer 'context->read_icons' is lost. Consider assigning realloc() to a temporary pointer. datatoc_icon.c 252


Если память не удастся выделить, функция realloc вернёт значение NULL. Нулевой указатель будет записан в переменную context->read_icons, а её предыдущее значение будет потеряно. Раз предыдущее значение указателя потеряно, то и невозможно освободить ранее выделенный блок памяти, на который ссылался этот указатель. Произойдёт утечка памяти.


Вторая: V522: There might be dereferencing of a potential null pointer 'context->read_icons'. Check lines: 255, 252. datatoc_icon.c


Описанная выше ошибка в каком-то смысле и не ошибка с точки зрения автора кода. Он и не собирался писать код, который будет продолжать работу в случае невозможности увеличения блока выделенной памяти. Такой случай просто не рассматривается. Автор предполагает, что, если память выделить не удалось, программа просто аварийно завершится при разыменовании нулевого указателя. И поэтому смело работает с указателем, не выполняя его предварительную проверку. Оставим в стороне вопрос, насколько красивым является такое поведение программы. На мой взгляд, такое поведение библиотек недопустимо.


Интереснее другое. На самом-то деле падение может и не произойти. Запись производится вовсе не по нулевому указателю, а куда-то дальше. Теоретически возможна ситуация, когда этот адрес уже не находится в странице памяти, защищенной от записи, и никакого падения не будет. Будут испорчены какие-то случайные данные в памяти, и программа продолжит своё выполнение. Последствия работы с испорченными данными непредсказуемы. Подробнее всё это разобрано в статье "Почему важно проверять, что вернула функция malloc".


Фрагмент третий: разыменование указателя для проверки


static int node_link_invoke(bContext *C, wmOperator *op, const wmEvent *event){  ....  bNodeLinkDrag *nldrag = node_link_init(bmain, snode, cursor, detach);  nldrag->last_picked_multi_input_socket_link = NULL;  if (nldrag) {    op->customdata = nldrag;  ....}

Предупреждение PVS-Studio: V595: The 'nldrag' pointer was utilized before it was verified against nullptr. Check lines: 1037, 1039. node_relationships.c


Один из самых частых паттернов ошибок (proof). В начале указатель nldrag разыменовывается. Но из следующего условного оператора становится видно, что на самом деле этот указатель может быть нулевым.


Всё просто и понятно. Но, согласитесь, намного лучше поправить такую ошибку сразу, ещё на этапе написания кода, а не после того, когда на неё наткнётся тестировщик или пользователь.


Кстати, нашлась ещё одна такая-же ошибка, но описывать её неинтересно. Приведу только сообщение: V595: The 'seq' pointer was utilized before it was verified against nullptr. Check lines: 373, 385. strip_add.c


Заключение


Используйте статические анализаторы кода регулярно. От этого выиграют как разработчики, так и пользователи. Вы можете скачать и попробовать PVS-Studio здесь. Спасибо за внимание.


Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. PVS-Studio, Blender: Series of Notes on Advantages of Regular Static Analysis of Code.

Подробнее..

Категории

Последние комментарии

© 2006-2021, personeltest.ru