Об анализе исходного кода и автоматической генерации эксплоитов
28.05.2014
|
kochetkov.vladimir |
В последнее время об анализе защищенности исходного кода не написал только ленивый. Оно и понятно, ведь тот парень из Gartner, как предложил рассматривать анализ исходного кода в качестве нового хайпа несколько лет назад, так до сих пор и не дал отмашку на то, чтобы прекратить это делать. А, учитывая текущее направление моей работы (участие в разработке PT Application Inspector, далее AI), и тот факт, что в последнее время годных статей на тему анализа исходного кода в общем-то не было, как-то даже странно, что до сегодняшнего дня в этом блоге не было ни одной грязной подробности на эту животрепещущую тему. Что ж, исправляюсь
Читать дальше
Читать дальше
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>
28.05.2014 9 комментариев |
KV>Читать дальше
Публикуешь по посту в год? Норм, че
KV>>Читать дальше
DOO>Публикуешь по посту в год? Норм, че
Со временем совсем беда в последнее время. Да и писать особо не о чем. О проекте только сейчас получилось что-то рассказать, а ресерчей на другую тему у мну как-то пока не появилось. Не скатываться же в обозревательскую попсу о heartbleed, Сноудене и очередных факапах всевозможных ебеев Да и один пост в год, но по делу лучше, чем 7-9 постов в месяц ни о чем
Зачем вообще писать? Для кого и чего?
KA>Зачем вообще писать? Для кого и чего?
Графомания же
Бла-бла-бла. Белетристика. Выдернул 1 образец и говоришь о несовершенстве автоматических методов.
Канешн не существует кто бы сомневался.
A>Бла-бла-бла. Белетристика.
Да, я тоже считаю, что по степени тактичности и конструктивности замечаний, можно сделать безошибочный вывод об адекватности собеседника.
A>Выдернул 1 образец и говоришь о несовершенстве автоматических методов.
Предложи другие образцы, рассмотрим и их. В чем проблема?
A>Канешн не существует кто бы сомневался.
Я вроде нигде и не утверждал что-либо о существовании этого канешна (чем бы он там ни был)
ладно не обижайся. Всё Ок
KV>Здравствуйте, artkarma, Вы писали:
A>>Бла-бла-бла. Белетристика.
KV> Да, я тоже считаю, что по степени тактичности и конструктивности замечаний,
KV> можно сделать безошибочный вывод об адекватности собеседника.
это пройдет. если вас обосрали -- значит, понравилось. хуже, если остались равнодушными.
кстати, я прочитал два раза, но ни хрена не понял. это вообще что? (если отойти от частных случаев, типа описанного вами). у вас есть возможность описания того, что искать? если я хочу искать что-то отличное от XSS, например, integer overflow -- это можно сделать? какие входные языки поддерживаются и насколько оно расширяемо и насколько разные слои изолированны друг от друга? типа вот тут у нас модели угроз, есть рулеза, описывающие эти модели в терминах, понятных машине. и еше есть транслятор исходного кода в некий унифицированный вариант, чтобы integer overflow искать хоть на си, хоть на x.
или у вас все захардкоренно там унутрях? насколько легко создавать новые рузела в сравнении с тем же lint, jslint, которые неплохо справляются с поиском широких классов ошибок.
то, что вы делаете, судя по всему очень близко к тому, что я делаю: семантический поиск "зловреднов". а потому с любопытством смотрю на схожие проекты.
A>>Выдернул 1 образец и говоришь о несовершенстве автоматических методов.
KV>Предложи другие образцы, рассмотрим и их. В чем проблема?
а зачем вам вообще исходные коды? например, на java мне легче работать с jar/class файлами. информации на стадии трансляции из сорцов теряется немного, зато бинарь проще распарсить.
М>это вообще что? (если отойти от частных случаев, типа описанного вами).
То, что я описываю в статье — это принцип работы одного из модулей Application Inspector, ядра анализа защищенности C#-кода. Фактически, он сводится к построению по коду символической модели его выполнения и разрешении по ней ряда свойств, интересных с т.з. анализа защищенности. Модель представляет собой CFG, в каждой вершине которого есть информация об условных множествах значений всех потоков данных, проходящих через эту вершину. Есть база знаний т.н. taint-источников — источников потоков данных, значениями которых может манирулировать атакующий. Есть база знаний, т.н. PVO — потенциально-уязвимых операций — вершин CFG, которые вкупе с попадающими в них теми или иными taint-источниками дают эксплуатацию тех или иных уязвимостей. Также там описывается множество векторов атак для каждой из PVO (т.е. конкретных множеств значений для тех или иных taint-источников, которые могут быть использованы для атаки). После построения данной модели все это скармливается SMT-солверу и на выходе получаем готовые эксплоиты.
Собственно говоря, так устроено большинство годных анализаторов (fortify, coverity и т.п.), наша фишка в полноте построения этой модели: мы можем покрыть все возможные трассы выполнения без комбинаторного взрыва по времени выполнения на вложенных условных переходах любого рода в подавляющем большинстве фрагментов реального кода Кроме того, по получаемой нами модели можно доказывать наличие уязвимостей к атакам не только инъекций в потоки данных (XSS, SQLi, BOF, R/LFI и т.п.), но и более сложных с точки зрения решаемых уравнений, типа того же IOF (показать переполнение целого относительно легко, а вот доказать, что далее оно выстреливает в производную атаку и вывести для нее сплоит — очень годная задача), padding oracle (доказать использование режима CBC в ассиметрии и тот факт, что исключения при Decrypt() пробрасываются на пользовательский уровень в мере, достаточно для того, чтобы отличить ошибку удаления дополнения от всех остальных), обхода авторизации (построение access flow graph, доказательство несоответствия его отображений на CFG и DFG) и т.п.
М>у вас есть возможность описания того, что искать? если я хочу искать что-то отличное от XSS, например, integer overflow -- это можно сделать? какие входные языки поддерживаются и насколько оно расширяемо и насколько разные слои изолированны друг от друга? типа вот тут у нас модели угроз, есть рулеза, описывающие эти модели в терминах, понятных машине. и еше есть транслятор исходного кода в некий унифицированный вариант, чтобы integer overflow искать хоть на си, хоть на x.
М>или у вас все захардкоренно там унутрях? насколько легко создавать новые рузела в сравнении с тем же lint, jslint, которые неплохо справляются с поиском широких классов ошибок.
Изолировано, и можно описывать то, что хочешь искать — да. Но в текущей версии, это можем делать только мы (разработчики продукта). Будет ли в ближайших мажорных версиях возможность правки БЗ языковых ядер снаружи — сказать не могу, не в курсе. В других модулях (например, в сопоставлении образцов AST) такая возможность уже есть, поэтому скорее всего будет, но позже.
M>какие входные языки поддерживаются
PHP, Java, C#/.NET — уже сейчас. Начата работа над модулем анализа нативных бинарников (для начала только x86), в модуле Java есть подвижки по анализу jar/war. В течении следующего года планируется реализовать анализ бинарных сборок под CLR в рамках модуля C#/.NET и реализовать модуль анализа JavaScript.
М>то, что вы делаете, судя по всему очень близко к тому, что я делаю: семантический поиск "зловреднов". а потому с любопытством смотрю на схожие проекты.
Насколько я понимаю, выделенное интересно прежде всего в режиме онлайн, а у нас процесс анализа одного проекта в течении нескольких часов является нормой. А так да — очень похоже.
М>а зачем вам вообще исходные коды? например, на java мне легче работать с jar/class файлами. информации на стадии трансляции из сорцов теряется немного, зато бинарь проще распарсить.
Изначально мы делали этот инструмент под себя, для облегчения себе же задач анализа защищенности исходных кодов наших клиентов. А специфика таких задач была такова, что на анализ зачастую предоставляли только фрагменты кода, собрать из которых бинари было не вполне реально, даже когда речь шла о компилируемом языке. А поскольку значительная часть этих проектов была реализована на динамике, то вопрос выбора формата кода для анализа решился сам собой. Теперь, когда это выросло в самостоятельный продукт, можно посмотреть и в сторону анализа бинарников.