LINUX.ORG.RU

Grease — утилита для поиска ошибок в бинарных файлах

 , , ,


2

3

Привет, ЛОР!

Компания Galois Inc. представила Grease – программу для статического анализа исполняемых файлов и поиска в них уязвимостей. Grease дизассемблирует исполняемый файл и строит модель его исполнения, после чего анализирует пограничные условия на предмет возможных ошибок. Использовать Grease можно как отдельно, так и плагином к системе обратного инжениринга Ghidra.

Grease поддерживает анализ исполняемых файлов ELF и динамических библиотек, содержащих код ARMv7l, PowerPC или x86_64, а также может анализировать bitcode LLVM.

Код написан на языке Haskell и распространяется под лицензией BSD-3.

>>> Репозитарий на Github

>>> Подробности

★★★★★

Проверено: dataman ()
Последнее исправление: CYB3R (всего исправлений: 3)
Ответ на: комментарий от hateyoufeel

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

sparkie ★★★★★
()
Ответ на: комментарий от anonmyous

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

А теперь таки отпишись от этого тега и больше не пиши ничего в темах про реверс инжиниринг.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

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

Ты пересмотрел фильмы про хакеров, что ли? Это прямо как в игре Uplink, где ты можешь видеть как ПраВитЕЛЬСтво отслеживает тебя через цепочку прокси, и нужно выключить комп до того, как они взломают последний и покарают тебя.

Тулза, конечно же, не для этого. Тут и правда лучше в Uplink поиграть.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

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

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

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

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

Чувак, тупой сценарий: у тебя проприетарный SDK, который ты получил вполне легально, и опасаешься, что в нём дыра. Или проприетарная ОС типа солярки или QNX (про венду молчу).

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

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

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

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

ичо?

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

ичо #2?

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

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

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от firkax

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

А компилятор и все библиотеки у вас тоже чисто свои и полностью верифицированы? И вы доказали, что всё это, собранное в кучку «программный комплекс», не выдаст где-то неожиданное поведение?

mister_VA ★★
()
Ответ на: комментарий от hateyoufeel

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

Верно. Но если у тебя нет компетенции заниматься анализом бинарников (а у прикладного программиста её нет), то тут уж ничего не поделать. Остаётся вариант «не верить и взять другое SDK» или действовать на авось.

firkax ★★★★★
()
Ответ на: комментарий от mister_VA

Какая разница? Хочешь анализировать библиотеки - анализируй библиотеки, с теми же двумя вариантами - 1) свои/опенсорс, 2) чужой клозедсорс.

И вы доказали, что всё это, собранное в кучку «программный комплекс», не выдаст где-то неожиданное поведение?

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

firkax ★★★★★
()
Ответ на: комментарий от firkax

Но если у тебя нет компетенции заниматься анализом бинарников (а у прикладного программиста её нет), то тут уж ничего не поделать.

Дядя, прикладной программист не знает что такое Ghidra и как ей пользоваться. Это всё тулинг явно не для средней JS-макаки. Я не понимаю, к чему ты это сюда припёр-то.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Я не понимаю, к чему ты это сюда припёр-то.

Я другому собеседнику, не особо сообразительному, объяснял его неправоту, а ты зачем-то влез в середину этого спора и удивляешься почему (теперь уже к тебе) направлены тривиальные объяснения.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Я не понимаю, к чему ты это сюда припёр-то.

Я другому собеседнику, не особо сообразительному, объяснял его неправоту, а ты зачем-то влез в середину этого спора и удивляешься почему (теперь уже к тебе) направлены тривиальные объяснения.

Так вы оба неправы лол. Он неправ потому что считает, что тулза не нужна (она нужна). Ты неправ, потому что считаешь, что у тулзы достаточно ограниченные возможности к применению (они шире).

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от firkax

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

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

anonmyous ★★
()
Ответ на: комментарий от hateyoufeel

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

anonmyous ★★
()
Ответ на: комментарий от hateyoufeel

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

anonmyous ★★
()
Ответ на: комментарий от anonmyous

Я тут сижу в одном чате, где челики гидрой реверсят игры для старых аркадных автоматов на мотороле 68к и делают под них эмулятор.

liksys ★★★★
()
Ответ на: комментарий от anonmyous

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

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

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

Есть куча случаев, когда другого нет. Не написали-с. Жри что дают, как говорится.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от liksys

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

anonmyous ★★
()
Ответ на: комментарий от hateyoufeel

Ну бывает, бывает, но блин, часто ли? Да еще если учесть, что она, по-моему, не поддерживает внешние вызовы в шаред либы.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

Ну бывает, бывает, но блин, часто ли?

Сколько раз это должно произойти, чтобы, в твоём представлении, оправдать написание подобного тулинга? Один раз? Пять? Десять?

Да еще если учесть, что она, по-моему, не поддерживает внешние вызовы в шаред либы.

По-твоему?

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonmyous

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

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

Ну и под конец - посмотрите, что сами NSA пишут:

Ghidra Software Reverse Engineering Framework

liksys ★★★★
()
Ответ на: комментарий от theNamelessOne

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

Shushundr ★★★★
()
Ответ на: комментарий от liksys

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

zxflux
()
Ответ на: комментарий от hateyoufeel

Сколько раз это должно произойти, чтобы, в твоём представлении, оправдать написание подобного тулинга? Один раз? Пять? Десять?

Ну вообще, если кол-во пользователей открытой софтины не исчисляется хотя бы сотнями, то она считается не успешной. А у неё открыто 55 ошибок и закрыто 3…

По-твоему?

https://www.galois.com/articles/under-constrained-symbolic-execution-with-crucible Тут есть главы «Skipping External Functions» и тд, но сразу предупреждаю, что читал по-диагонали, так что написал «по-моему». Может быть всё и поддерживается.

anonmyous ★★
()
Ответ на: комментарий от firkax

Первый раз вижу Haskell в контексте какой-то полезной проги

FreeArc.

question4 ★★★★★
()

Код написан на языке Haskell и распространяется под лицензией BSD-3.

Время идёт, а на Haskell всё ещё не знают, какое же полезное приложение можно написать и пишут только бесполезные.

Вот какой, скажите мне, прок от того, что эта утилита мне расскажет что в offset=0x232123 файла elf находится инструкция, которая потенциально опасная?

Я что её в hexedit править побегу? Нет же.

rsync ★★
()
Ответ на: комментарий от sparkie

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

АНБ

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

Чтобы уязвимостей было меньше - меньше вреда для экономики и больше безопасности.

vsnb
()
Последнее исправление: vsnb (всего исправлений: 1)
Ответ на: комментарий от vsnb

Это не простая контора, как хочется думать.

И вряд ли сотрудники АНБ тотально поражены альтруизмом.

sparkie ★★★★★
()
Ответ на: комментарий от vsnb

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

zxflux
()
Ответ на: комментарий от anonmyous

Ну вообще, если кол-во пользователей открытой софтины не исчисляется хотя бы сотнями, то она считается не успешной. А у неё открыто 55 ошибок и закрыто 3…

Не считается успешной кем? Тобой?

Мне что-то кажется, что если бы эта софтина не была нужна, перцам из Галуа не дали бы бабла её запилить (они контракторы, пилят софт под заказ).

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Не считается успешной кем? Тобой?

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

Мне что-то кажется, что если бы эта софтина не была нужна, перцам из Галуа не дали бы бабла её запилить

Конкретно эта прога, с учётом наличия аналогичной под силанг - не дорого стоила. Тут, вместо силанга, гидра в качестве фронтенда. И ровно тот же символик екзекьюшон.

anonmyous ★★
()
Ответ на: комментарий от hateyoufeel

Не обязательно. Перцы могут быть под погонами.

sparkie ★★★★★
()
Ответ на: комментарий от zxflux

Как человек, интересующийся «чипостроением», я не знаю, что внутри ШТЕУД'а и АМД, а кто-то ж знает.

Знал до Пня-III, изучал специально.

sparkie ★★★★★
()
Ответ на: комментарий от anonmyous

Давай так: пруфов не будет, но даже мои говноподелки на гитхабе имеют порядка на 3 более высокую активность по открытым и закрытым багрепортам. А они у меня - «эталонное ненужно» просто по определению, так как делались ради удовольствия хоть что-то разработать.

Чел… ты не думал, что это может быть связано с тем, что они её опубликовали вот только на прошлой неделе и мало кто про неё вообще слышал? Не? Вообще не вариант? 58 тикетов за меньше чем две недели – это типа мало активности?

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

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

Нет, не думал, учитывая, что аналогичная тулза для ллвм там уже сто лет как лежит, и активность у неё высокая.

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

anonmyous ★★
()
Ответ на: комментарий от anonmyous

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

Нет, не думал, учитывая, что аналогичная тулза для ллвм там уже сто лет как лежит, и активность у неё высокая.

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

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

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonmyous

Дальше-то что? При чём тут данная тулза?

есть код без исходников

в нём могут быть баги

причём тут тулза для поиска багов в бинарниках?

Ты потрясающий!

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

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

anonmyous ★★
()
Ответ на: комментарий от anonmyous

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

Дальше баг патчится. Happy end.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

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

anonmyous ★★
()
Ответ на: комментарий от anonmyous

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

Не должен. Ты можешь просто перестать пороть чушь тут.

Баг патчится в бинаре?

Именно так. Если это обычный сишный бинарник без сраной обфускации и всякого антидебага, то это достаточно легко делается.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Ты можешь просто перестать пороть чушь тут.

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

Если это обычный сишный бинарник без сраной обфускации и всякого антидебага, то это достаточно легко делается.

Уже смешно. Ну и как же? А вы хоть 1 баг в жизни видели, который фиксится чуть сложнее, чем добавлением проверки на нуль-поинтер? Вы, наверное, удивитесь, узнав, что большинство багфиксов - это патчи приличного размера, существенно модифицирующие определённую функцию, или добавляющую к ней доп обвязку и тд? Вы будете всё это делать прям в бинаре, даже не имея исходников функции, которую собираетесь править? Не зная даже, что она вообще должна делать? Понятно, что всё, что вы сейчас напишете, это «да, именно это и сделаю». Ну успехов, мне больше нечего сказать. :)

anonmyous ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.