Pull to refresh

Comments 28

это самое complicated задание за всю историю CTFов в которых я участвовал :)
Если мне не изменяет память, на Defcon CTF надо было проломить FreeBSD с использованием 0day…
я не участвую в CTF, я только читаю write-up'ы — поэтому подробностей не могу сказать
что-то ты перепутал :) «0day» был на phdays. но он был 0day только по мнению некоторых людей.
«complicated» != «complex» )) и это не комплимент.

кстати, могли бы дать чуть-чуть времени людям, которые пытались это задание сами решить(у нас были такие и они были близки), прежде чем постить авторский врайтап :)
Вопрос на тему виртуальных функций — что мешало за счет макросов сделать мутацию?
тогда таких развесистых описаний можно было бы избежать, а если использовать Boost Wave до за счет 2-проходного препроцессора — можно сделать мутацию кода еще ДО его компиляции.
Кстати — вместо Microsoft CL можно было использовать и другой компилятор, который бы калечил код сильнее.
P.S. Ну и вопрос по классике жанра — зачем была нужна таблица импорта? PEB же вполне достаточно + ручками сделать парсинг памяти, прием работает и в Win8.
У каждого задания есть гайдлайн по сути. Всё зависит от загадки, которую тебе загадали. Если идея, например, в решении СЛУ, то зачем навешивать 100500 приёмов антиотладки? В этом нет никакого профита, фана и даже интереса при решении. И уж тем более не мальварь была написана )
ОК, ОК — только ждал ответа от ТС.
P.S. последний анкор не читать — уже увидел коммент ниже.
Не стал браться за это задание глянув сначала внутрь бинарника (в ресурсах видны очень странные штуки, не похожие на обычные ресурсы), а потом запустив его в виртуалбоксе.

Виртуалбокс при загрузке виртуальной винды затупил и я сделал вывод что мой виртуальный бутсектор загажен.
Ну а не стал браться потому что
а) никогда раньше не дебажил серьезные виртуальные машины типа vbox/bochs/qemu
б) знал что на такой таск уйдет в лучшем случае 8+ часов, без каких либо гарантий решения

… и в результате мы заняли 11-е место :-\

… зато на RWTH CTF взяли 2-е место, и были единственной командой, расколовшей сервис Azure Coast :) (там тоже виртуальная машина, но попроще на 3 порядка чем BOCHS)
просто BOCHS это такой очень хардкорный эмулятор — который эмулируется все честно 1:1 что в свою очередь накладывает значительный отпечаток. А если учесть что его ядро должно поддерживать множество архитектур — то и код тоже соответствующий.
Судя по вашим комментариям, вы пытались отлаживть сам BOCHS. Поправьте, если ошибаюсь. Иначе это не надо было делать, надо было отлаживать среду внутри эмулятора, а не сам эмулятор. Конкретнее — отлаживать MBR, который запущен внутри эмулятора.
Я не понял не слова, но вы круты. Потрясающе круты! Феноменально!!!
Прежде всего БРАВО!
Очень интересный write-up!

Теперь немного комментариев:
1.«постоянно выдавала ошибки и периодически падала в синий экран смерти» — скорее всего вы неправильно обрабатываете определённые выходы из гостя в монитор.

2.«Единственное усложнение данной проверки заключается в том, что она написана с использованием инструкций математического сопроцессора (FPU).» — ах Вы хитрецы! таким трюком вы обломали использование многих(а может всех?) SMT solver'ов!

P.S. Ещё раз БРАВО!
Максим, Сергей — отличное задание, отличный пост!

P.P.S.
Я видел в статистике, что и Binary 400 никто не решил. Не могли бы вы написать и про Binary 400?
1. Система падала из-за того, что при загрузке мы отъели себе память, но гостевой системе мы об этом по сути не сообщили (не хватило времени допилить это).

2. Спс, учтём для следующего нерешаемого задания ;)

По bin400 скоро выйдет writeup ;)

(Отвечал знаток Макс)
Есть какие-то нестыковки в тексте:
" В связи с этим мы предлагаем использовать виртуальную машину VMWare (нужно прописать некоторые настройки виртуальной машины), подключившись к ней при помощи отладчика GDB (у этого способа есть значительные недостатки, о которых будет рассказано далее), либо эмулятор Bochs."
"Стоит упомянуть, что для шифрования загрузчика и тела гипервизора использовался набор байт из BIOS эмулятора Bochs. Таким образом, задание получилось заточенным под данный эмулятор. Это было сделано по нескольким причинам. Во-первых, отладка аппаратной виртуализации Intel VT-x возможна только на реальной машине или на Bochs (начиная с версии 2.4.5)."
Т.е. VMWare не поддерживает VT-x и/или его отладку?
И где про GDB и "значительные недостатки, о которых будет рассказано далее"?
1. Под значительными недостатками мы как раз и имели ввиду, что невозможно отлаживать аппаратную виртуализацию под VMWare (не стали указывать на это второй раз). Отлаживать задание таким методом (с vmware) можно было вплоть расшифровки гиппервизора. (В подсказке была информация, что надо использовать Bochs)

2. Буквально вчера мы выяснили, что WMWare 9 поддерживает вложенную виртуализацию. Возможно, мы бы не стали затачивать задание на Bochs, если бы владели этой информацией раньше и было бы время на отладку данного подхода.
да nested virtualization появилась именно в 9-й версии.
Но 9-ка не у всех есть!
Хотя с другой стороны, Bochs такой медленный.
Вообще можно было ещё плюшку такую сделать: найти уязвимость в Bochs, к примеру неправильную эмуляцию определённых инструкций — вот это был бы fun!
Да был у нас опыт с кастомным компилятором. Фан был только для разработчика.
тут проблема в том, что время CTFа ограничено, а убить 2 суток на таск, и еще через сутки увидеть готовый врайтап от авторов — не круто.
kyprizel, ты что-то путаешь… Если посмотришь на дату проведения CTF и на дату публикации write-up'а, то увидишь, что прошло 9 дней… И за это время никто из участников так и не дал никаких комментариев по данному таску.
«И где про GDB и „значительные недостатки, о которых будет рассказано далее“?»
При использовании GDB — у вас нету доступа к ресурсам системы.
Соот-но Вам необходимо написать скрипты, которые парсят определённые структуры — и тогда у вас появится возможность видеть процессы, потоки и т.д.
да я как раз забыл ссылку поставить :]
Sign up to leave a comment.