Обладая определённой компетенцией, уязвимости можно находить где угодно, даже в продуктовом магазине. Так и случилось с нами - ниже пример из нашей практики в Узбекистане.
В одной крупной отечественной торговой сети есть накопительная бонусная программа. Чтобы воспользоваться накопленным бонусом нужно предъявить штрих-код из мобильного приложения. Обнаруженная нами уязвимость могла быть использована злоумышленникам - делать покупки за чужой счёт, с чужих бонусных счетов. Специалисты торговой сети были нами тут же проинформированы и уязвимость устранена. Все эксперименты делались исключительно с собственным счётом нашего эксперта.Совсем кратко схема могла выглядеть так:
1. Большинство покупателей выбрасывает чек тут же, около магазина.
2. Злоумышленник собирает чеки, выбирает те из них, где на бонусном счёте накоплена более-менее приличная сумма. Сумма бонусного счёта печатается прямо в чеке (см. картинку).
3. Путём некоторых манипуляций по данным из чека создаётся штрих-код - предъявляется и сканируется на кассе, оплачивается покупка с чужого бонусного счёта. Именно тут и была уязвимость.
Тут описание того, как именно можно было воспользоваться уязвимостью. Технические детали можете пропустить и перейти прямо к выводам.
- При покупке товаров с использованием бонусной программы торговой сети в чеке указывается номер счёта в программе и накопленная сумма (см. рисунок) - 12 цифр.
- Наш специалист предположил, что штрих-код в приложении получается напрямую из номера счёта. Но, выяснилось, что для генерации штрих-кода нужно 13 цифр (об этом говорит даже название самого алгоритма штрих-кодирования EAN-13), а номер счёта состоит из 12 цифр.
- Наш специалист предположил, что 13-я цифра это просто контрольная сумма, беглое ознакомление со статьей по EAN-13 в википедии подтвердило это предположение.
- контрольная сумма EAN-13, которая вычисляется по алгоритму:
• Суммировать цифры на четных позициях;
• Результат пункта 1 умножить на 3;
• Суммировать цифры на нечетных позициях;
• Суммировать результаты пунктов 2 и 3;
• Контрольное число — разница между окончательной суммой и ближайшим к ней наибольшим числом, кратным 10-ти.
Можно и не делать ничего вручную, есть готовый онлайн-инструмент для вычисления контрольной суммы.
- Уже на основании этих 13 цифр и генерируется штрих-код для кассира. Для генерации штрих-кода можно использовать даже онлайн-инструменты, например - https://barcode.tec-it.com.
Таким образом, путём несложных вычислений и манипуляций, злоумышленник может воссоздать по данным из чека штрих-код и с использованием графического редактора вставить штрих-код в скриншот приложения торговой сети, так что он не вызовет подозрений у кассира.
Выводы:
1. Уязвимости есть почти везде, в системах любой сложности.
2. Правильная организация процесса управления ИБ должна позволять их обнаруживать и устранять.
3. Жизненно необходимо создать возможность получать сообщения об уязвимостях извне - от экспертов и пользователей систем. Именно с этим у нас часто самые большие проблемы - элементарно некому сообщить об уязвимостях, нет адресов или по ним не отвечает. Уходят недели чтобы достучаться до собственников уязвимых систем.
4. Отмечать, поощрять, премировать все результативные сообщения об уязвимостях. Без этого последнего пункта сообщения об уязвимостях со временем просто иссякнут, а ведь уязвимостей от этого меньше не станет.
В реалиях Узбекистана, самым сложным часто является донести информацию о проблеме до заинтересованного лица. Как действуем мы?
1. В общем случае пишем по адресам из секции «Контакты» на сайте.
2. Для госорганов можно попробовать сообщить в CERT, ЦТС.
3. Проще всего может быть «достучаться» и донести информацию через клуб директоров по ИТ CIOClub - там сейчас сосредоточены практически все ключевые специалисты страны.
Дополнительные справочные материалы:
1. Политика ответственного раскрытия информации об уязвимостях (Responsible disclosure policy) для госорганов Нидерландов.
2. Политика ответственного раскрытия информации об уязвимостях ITTS.