На фотографии слева — пробирка с сотнями миллиардов копий эксплоита, закодированного в синтетических молекулах ДНК, которые способны заразить компьютерную систему после секвенирования и обработки.
В последние пять лет стоимость секвенирования генома упала со $100 000 до менее $1000, что стимулировало научные исследования в сфере геномики и целую плеяду коммерческих сервисов, которые предлагают проанализировать ваше геном для разных целей: построение генетического дерева, поиск предков, анализ физических способностей, предрасположенности к разным видам спорта и физической активности, изучение совместимых микроорганизмов в кишечном тракте и многое другое. Авторы научной работы уверены, что при секвенировании генома недостаточное внимание уделяется безопасности: в этой области просто ещё не столкнулись с вредоносными программами, которые атакуют непосредственно через геном. Теперь такой вектор атаки нужно принимать в расчёт.
Секвенирование генома начинает использоваться в прикладных дисциплинах, таких как криминалистическая экспертиза и архивное хранение данных, поэтому следует изучить вопросы безопасности, прежде чем секвенирование станет массово применяться.
Исследователи написали эксплоит, а затем синтезировали такую последовательность ДНК, которая после секвенирования и обработки генерирует файл с эксплоитом. Будучи загруженным в уязвимую программу, этот файл открывает сокет для удалённого управления системой.
Исследование не имеет практической пользы, потому что авторы не взламывали конкретную программу-секвенсер, которой пользуются биологи. Вместо этого они сами модифицировали программу fqzcomp версии 4.6 (утилита сжатия последовательностей ДНК), добавив известную уязвимость в её исходный код. Тем не менее, это не противоречит тому факту, что в настоящих программах тоже имеются уязвимости. Главное, учёным удалось доказать, что заражение компьютера действительно возможно через образец биологического материала.
Для изменения в исходный код fqzcomp
нужно было добавить 54 строчки на C++ и удалить 127 строчек. Модифицированная версия программы обрабатывала ДНК, используя простую двухбитную схему: четыре нуклеотида кодировались как два бита: A как 00, C как 01, G как 10, а T как 11.
Кроме внедрения эксплоита в программу и перевода на двухбитную обработку, исследователи также отключили известные функции безопасности в операционной системе, в том числе систему рандомизации памяти ASLR, а также защиту от переполнения стека.
Сам эксплоит (показан на иллюстрации в левом окне) имел размер 94 байта и кодировался 376 нуклеотидами. Эту последовательность загрузили в сервис для синтеза биологических молекул IDT gBlocks. Первая попытка синтезировать ДНК с эксплоитом оказалась неудачной.
Проблем оказалось несколько. В молекуле было слишком много повторяющихся последовательностей, что не рекомендуется при синтезе. В одном месте было 13 подряд нуклеотидов T, что очень трудно синтезировать. Кроме того, по всей длине было недостаточно пар GC, которые укрепляют молекулу. В конце концов, эксплоит оказался слишком длинным для секвенирования.
Но исследователям удалось преодолеть все сложности, они уменьшили длину эксплоита до 43 байт и получили приемлемое количество последовательностей CG, потому что текст эксплоита состоит преимущественно из строчных букв (01 в ASCII соответствует нуклеотиду C). Номер порта в эксплоите по этой причине изменили с 3 (ATAT) на 9 (ATGC). Получившуюся последовательность загрузили в сервис синтеза IDT gBlocks, который берёт $89 за синтез до 500 базовых пар.
Доказав теоретическую возможность атаки, исследователи изучили безопасность программ, которые используются для секвенирования и анализа ДНК. Всего было изучено 13 известных биологических программ с открытым исходным кодом, написанных на C/C++. Их безопасность сравнили со стандартным софтом, который обычно подвергается атакам злоумышленников, таким как веб-серверы и удалённые шеллы. Выяснилось, что у биологических программ гораздо больше потенциально опасных вызовов функций (таких как strcpy
).
Удалось найти также переполнения буфера в трёх программах (fastx-toolkit, samtools и SOAPdenovo2). Через такие баги можно вызвать сбой программы. Зная, что подобные сбои часто конвертируются в рабочие эксплоиты, авторы остановились на этом.
Презентация научной работы (pdf) состоится 17 августа 2017 года на 26-м симпозиуме по безопасности USENIX Security Symposium.
Источник