Категория > Новости > Неправильные эльфы. Учим исполняемые файлы Linux сопротивляться отладке - «Новости»
Неправильные эльфы. Учим исполняемые файлы Linux сопротивляться отладке - «Новости»16-03-2023, 12:37. Автор: Евдоким |
20-летней давности, XXE-атаки, ошибки в отдельных реализациях, позволяющие сбежать из песочницы в iOS 13 и читать чужие SMS.wwwУ LiveOverflow есть небольшое видео о том, как он создавал запускаемый файл, который тем не менее невозможно открыть в GDB и Radare2: Uncrackable Program? Finding a Parser Differential in loading ELF. Этот ролик и положил начало моему ресерчу. Language-theoretic Security и файлы-полиглотыЧитайте также - Для того, чтобы поднять настроение и зарядиться положительной энергией на целый день рекомендуется смотреть красивые картинки, поделки и многое другое. Дом с эркером и террасой посмотреть. Парсеры, как следует из названия, занимаются разбором (парсингом) некоего языка, который определяется грамматикой. И это касается не только языков программирования, но и форматов файлов и протоколов. Безопасности языков, или Language-theoretic Security, посвящен сайт langsec. Если начнешь углубляться в эту тему, имена исследователей будут попадаться тебе довольно часто. Например, имя Сергея Братуся (Sergey Bratus) в контексте изучения интересностей ELF и так называемых weird machines и Мередит Паттерсон (Meredith L. Patterson) в контексте изучения протоколов и парсеров грамматик. Так что же это за langsec такой? Проще, мне кажется, попробовать объяснить «на пальцах». В интервью IOHK Мередит Паттерсон рассказывала, как начинался langsec, — с обсуждения, что, согласно теории формальных языков, фильтры в виде регулярных выражений никогда не победят SQL-инъекции. Другая вещь, которую изучают ребята из langsec, — поиск несоответствий теории и практики, а именно проблем в реализациях различных форматов и как это может быть проэксплуатировано. Одной из основных проблем называют следование закону Постела, который гласит:
Изначально такой подход должен был обеспечивать надежность работы TCP. Сейчас, однако, из‑за этого принципа времен зари интернета могут случаться интересные казусы. Один из них — это так называемые файлы‑полиглоты. Ведь файл — это лишь набор байтов, и то, как они будут интерпретированы, зависит от парсера. А парсеры порой крайне лояльно относятся к отклонениям от спецификаций и пробуют восстановить недостающие данные из контекста либо игнорируют откровенно невалидные значения отдельных полей. Благодаря этому можно, например, совместить скрипт, содержащий питоний веб‑сервер и прочие плюшки, с валидным PDF. Это относительно легко можно сделать из‑за некоторых особенностей реализации этого стандарта, таких как нефиксированное положение сигнатуры PDF внутри файла и даже возможность полного ее отсутствия. Помимо того что создание таких файлов — занятная разминка для мозгов, они, как утверждается, могут оказаться полезными при тестировании систем для обхода фильтров по типам файлов. Таким файлам посвящен далеко не один ресерч, и есть даже целый формат αcτµαlly pδrταblε εxεcµταblε, хитрым образом совмещающий в себе PE, ELF, Mach-O, sh и bootsector. По заверениям автора, этот формат способен без изменений запускаться на Linux, Mac, Windows, BSD и зачем‑то на голом BIOS. infoНа тему файлов‑полиглотов очень много информации можно найти у Ange Albertini (corkami), известного также как the file format guy. И весьма заслуженно — в его репозиториях можно отыскать множество постеров с наглядным представлением кучи форматов: исполняемых файлов, документов, картинок, архивов и не только, а также различных заметок. Там же находится репозиторий PoC||GTFO, содержащий много занятных статей, помимо посвященных полиглотам. Забавно, но PDF с его статьями на самом деле тоже больше чем просто PDF. В общем, абьюзить парсеры файлами‑полиглотами довольно весело. Но поговорим теперь о более целенаправленном зле, а затем испробуем его на практике. Parse tree differential attackПервое упоминание атаки с таким именем нашлось в презентации 2010 года Мередит Паттерсон и Лена Сассамана, посвященной грамматикам протоколов. Там была рассмотрена атака, именуемая arse tree differential attack — что‑то типа «атаки на разность деревьев разбора», на парсеры X.509. О ней мы поговорим чуть ниже. В работе Security Applications of Formal Language Theory, опубликованной в 2013 году, авторы рассматривают непосредственно саму атаку уже более подробно. infoНасколько я могу судить, термин parser differentials, несмотря на более десяти лет существования, не особо в ходу за пределами langsec-сообщества, хотя описаний атак, которые можно сюда отнести, предостаточно. Также мне не попадались варианты перевода этого на русский, но, думаю, можно назвать это чем‑то вроде «разности разбора». Атаки на «разность деревьев разбора» — по‑своему удивительный вид атак. Сама идея их максимально простая: имеется две реализации парсеров одного формата, и они по‑разному «видят» одни и те же входные данные. Последствия же, особенно в цепочке с другими уязвимостями, могут быть самыми разными. Давай разберем несколько примеров. Requests smuggling в GitLab и ZoomHTTP requests smuggling, который в русскоязычных источниках иногда называют «контрабандой запросов», по сути можно отнести к атакам на parser differential. Они работают за счет того, что два сервера по‑разному парсят один и тот же проходящий через них HTTP-запрос. На одних и тех же входных данных они видят разное, что позволяет «контрабандой» внедрять в один запрос второй. С примером такой атаки ты можешь ознакомиться в разборе одной из HTB-тачек. Эта уязвимость, CVE-2020-6833, существовала в GitLab: Но requests smuggling не ограничивается HTTP-запросами. В докладе XMPP Stanza Smuggling or How I Hacked Zoom Айван Фратрик из Project Zero рассказывает о CVE-2022-22784, в которой ошибки парсеров позволяли вставлять теги в сообщения (stanza). Потенциально это позволяло достичь подделки сообщений сервера, перенаправления соединения и проблем с повреждением памяти, недоступных иным путем. Исследователь смог раскрутить это до выполнения своего кода в ходе автообновления Zoom в результате подмены сервера. Psychic Paper и CVE-2022-42855В январе этого года был опубликован ресерч того же исследователя из Project Zero. В нем он упоминал вариацию Psychic Paper — атаку, в результате которой на macOS можно было исполнять файлы с неподписанными разрешениями (entitlements) так, что сама система считала, что все окей. Происходило это потому, что внутри операционки парсеров PLIST (то есть старого доброго XML) было аж четыре штуки, которые, конечно же, в определенных случаях не выдавали идеально одинаковые результаты. Невероятным решением той проблемы стало — что бы вы подумали? — создание пятого парсера. В дальнейшем, впрочем, в Apple решили переходить на бинарный DER-формат вместо текстового XML, но и в этом случае Фратрик смог найти в Доверенные сертификаты X.509 на произвольный доменВ 2010 году Леном Сассаманом и Мередит Паттерсон в докладе Towards a formal theory of computer insecurity: a language-theoretic approach была описана уже упомянутая атака на обработку сертификатов X.509 браузерами: те могли отображать пользователю не тот домен, для которого сертификаты были изданы, потому что неверно распарсивали поле Центр сертификации не позволил бы запросить сертификат для условного Слайд из презентации Сассамана и Паттерсон Из‑за некорректной обработки нуль‑терминатора браузеры «видели» и показывали пользователю строку ELF: запустить нельзя проанализироватьСобственно, схожей логикой с описанной выше руководствовался некто Алехандро Эрнандез из IOactive, он же nitr0us. В далеком ныне 2012 году он решил поискать варианты воспрепятствовать анализу бинарей более интересным способом, чем использование методов runtime-антиотладки, которые все же можно обходить. В GDB того времени (7.5.1) nitr0us нашел багу в обработке DWARF, из‑за которой при попытке загрузить специально сформированный эльф в отладчик последний падал на разыменовании нулевого указателя. Помимо GDB, nitr0us нашел тогда багу в IDA Pro 6.3, приводящую к внутренней ошибке, после которой та закрывается, опять же не давая проанализировать файл. Сам эльф при этом, конечно, прекрасно запускался самой ОС и работал. Подробнее с этой работой ты можешь ознакомиться в посте IOactive Striking Back GDB and IDA debuggers through malformed ELF executables. Парсеры ELFПерейти обратно к новости |