Reverser's notes
212 subscribers
82 photos
3 files
55 links
Канал о моей жизни как инфобез-ресечера

Мета: https://t.iss.one/AnyKeyShikMeta
Download Telegram
Продолжу эстафету. Тем более, что статья реально очень крутая и мне понравилась и идея, и изложение
Forwarded from .рубик (Rubikoid)
Необычный дуалбут: ноутбук с «двойным дном»

Внезапно, весьма приличная техническая статья на хабре.

Хайлайты: ручками дергаем ATA, реверсим, а потом и патчим прошивку контроллера жесткого диска в памяти, отлаживаем UEFI, пишем уефишный драйвер...
Разгребал папки с древними программами и обнаружил эти два шОдевра. Пройти мимо не смог, потому что удалять жалко, а выкладывать в репу не хочется. Так что будут в лежать в гистах

https://gist.github.com/AnyKeyShik/a345724f66ff39fc747c239794506949

https://gist.github.com/AnyKeyShik/20d0bc06afb1809cef07f07b6b914674
На работе узнал про абсолютно новый (для себя) фреймворк, с которым придется много взаимодействовать - встречайте панду. По ощущениям - мегамощная штука. Пока больше сказать не могу, весь день ушел на ее раскуривание и сборку. Причем (спойлер) неудачную - она требует достаточно старых версий в своем окружении, поэтому изначальная попытка собрать все на хосте (когда же у меня уже пропадет эта привычка) закончилась неудачно. Но сейчас наконец-то получилось собрать все в докере и запустить тестовый скрипт. Ощущения двойственные - с одной стороны сделал почти ничего, с другой - предвкушение перед исследованием чего-то нового. По мере раскуривания буду делиться какими-то замечаниями и идеями. А, возможно, и пулреквестить в этот фреймворк :)
Итак, пришло время подвести кое-какие итоги работы с пандой. Пока только промежуточные. Зверь мощный. Зверь красивый. Мне понравился.
Бинарь можно анализировать как угодно. Более того, существует механика time-travel для GDB. По-хорошему, это убер-инструмент для динамического реверса. Пожалуй, лучший, который я когда-либо видел.
Но как всегда это ложка мёда теории в бочке дёгтя суровой реальности. Почему-то этот фреймворк очень странно работает с х86_64 линуксом. С остальным пока не пробовал, хочется завести для начала хоть где-то. Если быть конкретным - почему-то игнорятся сисколы pread64/pwrite64. И игнорируются любые сисколы от х86 приложений. Как я понял - проблема самой панды. Причем эти два фактора как-то связаны. Но пока не до конца в этом уверен. В любом случае, поддержку х86 приложений на х86_64 системе нужно впиливать. Так что в ближайшее время меня ждет увлекательное путешествие в новый для меня мир - внутренности фреймворка для бинарного анализа. Посмотрим, к чему это приведет и что будет в итоге.
При работе с пандой резко обнаружилось, что нужно достаточно глубоко представлять себе внутреннее устройство линукса. С ядром были давно планы поработать, но наконец-то дошли руки. Благо и на работе нужно. В итоге вылилось все в баянистую идею - шелл через ICMP-протокол. Пока только базовая версия, но со временем буду все это дорабатывать и улучшать. Пока результаты можно увидеть на моем гите
Сейчас времени не очень много, поэтому пока будет просто отзыв про крупнейшую ИБ-конференцию этого лета в РФ - ZeroNights, которая в этом году отпраздновала свое десятилетие. Конференция традиционно проходила в Санкт-Петербурге, но из-за пандемии даты несколько раз переносились и вместо обычного времени (зима-осень) она была проведена в августе, что, с моей точки зрения, некоторый плюс (мнение человека, любящего теплое время года :D)

!!!Warning!!!
Дальше будет много текста. И моего личного мнения :D

Чтобы было чуть проще, сначала скажу, что мне понравилось, а что вызвало неприятные ощущения (назовем это таким образом :D)

Итак, для начала о том, что было прям супер:
1. Новое место проведения, Севкабель Порт. Место реально живописное. К сожалению, во время самой конференции я почти не делал фотографий, о чем сейчас жалею - вечером вид на море просто бомбический
2. Классные доклады на Hardware Village, основном треке и просто суперский воркшоп по SELinux. Хотя хардвар и не обошелся без косяков, но об этом в минусах. Тут же скажу, что очень понравился доклад про реверс AVR - пусть и немного детский уровень, но товарищ Zen очень классно подавал материал, слушать было интересно в любом случае :) Основной трек был как по заказу целиком на мою тематику - низкий уровень, взаимодействие с EFI, немного про пывн ядра линукса. К сожалению, разорваться на все сразу не успел, поэтому это можно записать в минусы :D Пару слов про воркшоп с SELinux. Это, пожалуй, была лучшая попытка в ру-комьюнити ввести в курс, что же это за зверь и зачем он нужен. И почему его НЕ стоит отключать, как делают в большинстве мест у нас. К сожалению, про эту часть линукса впринципе очень мало материала - что на русском, что на английском. А про разработку модулей вообще почти ничего нет - только исходники чужих, так что порог вхождения достаточно высок (с моей точки зрения. Я его пока, к сожалению, преодолел на уровне "включено, но постоянно доконфигивается", что, имхо, не самый хороший уровень).
3. Неплохой мерч. Хотя дизайн футболок мне показался странноват - где матрешка? :D Но вообще я не большой фанат мерча, так что сюда это записал просто как бонус
4. Конечно же огромное количество знакомых. Не только из России, а в целом, хотя с некоторыми так и не удалось пересечься на конференции, несмотря на то, что находились буквально в 100 метрах друг от друга :D
5. Огромное количество низкого уровня. Это прям топчик :) Что в докладах, что на конкурсах (о них чуть ниже). Отдельное спасибо команде kks, ваша CTF была веселой, хотя и не без общего косяка.

Теперь немного о минусах. Это далеко не первая конференция по ПРАКТИЧЕСКОЙ безопасности, которую я посещаю. Минусы есть, некоторые некритичные и субъективные, но это же мой отзыв? Поехали:
1. Мало стендов с компаниями. Да, я не фанат мерча. Но на таких стендах всегда есть какие-то интересные конкурсы/можно просто интересно поговорить. В этом году, по-моему, было 4 стенда с разными компаниями, на которых толком не было интересных конкурсов, а люди были достаточно мало заинтересованы в общении. Возможно, это вызвано пандемией, на что я очень надеюсь, но, как говорится, "осадочек остался"
2. "Разнообразие" конкурсов. Почему-то в этом году все решили удариться в CTF. Да, я люблю подобные игры. Но в разумных переделах же. К примеру, у того же Сбера была очень интересная CTF, но на ее решение требовалось время примерно всей конференции. То есть, фактически, предлагалось прийти на такое мероприятие, чтобы поиграть. Я не против, но все же неформат. К самим задачам претензий мало - интересные и хорошо продуманные. Но хочется чего-то более динамичного в таких местах.
3. Еще пару слов про Hardware Village. Тут у меня немного подгорело на Flipper - они буквально выкупили всю площадку. При этом, если бы они сделали интересные конкурсы, то вопросов бы не было: вы пиаритесь, даете пощупать ваш девайс в интересных кейсах, люди хотят купить. По сути же, все сводилось к банальным случаям по типу repeat-атак и все. И самый длинный доклад на этой площадке тоже был от Zhovner'a, которые долго и мучительно рассказывал про создание сего девайса просто повторяя статьи на хабре (по крайней мере, по моим ощущениям). Был конкурс, где можно было выиграть Flipper, но там тоже людей ждал сюрприз - через три месяца бесплатная поддержка кончится и за обновление нужно будет заплатить. То есть ну прям такое. Ребята захотели и рыбку съесть, и по морде не получить. А так не работает. Еще осадочек оставил доклад про Flash-память, который тоже был немного скомканным. Хотя, возможно, мне просто не хватило каких-то знаний, чтобы понять все до конца. В любом случае, точка входа уже тоже есть и есть понимание, куда именно копать.
4. Воркшопы. Тут я просто не могу не выделить это в отдельный пункт. Да, к воркшопу про SELinux вопросов никаких. С моей точки зрения, это вообще лучшее, чтобы было на конференции и за два часа я без шуток получил больше информации, чем за полгода до этого (хотя, может, и не больше, но уж точно лучше она структурирована). Произошел другой неприятный инцедент. Первым в тот день должен был идти воркшоп по Redteam. Понятно, что такое я пропустить не мог, записался и вместе с другими начал ждать начала. И вот сидим мы, ждем, уже прошло запланированное время начала... И тут в официальный телеграм-канал с информацией о конференции приходит сообщение "извините, воркшоп отменяется по техническим причинам". И в итоге я не смог попасть больше никуда, кроме последнего, потому что записи уже были разобраны. Как оказалось - "технические причины" это спикер, который просто исчез и не отвечал на звонки. В общем, цирк с конями.

P.S. В тему конкурсов в CTF-формате - отдельно стоит отметить только конкурс на реверс AVR, уже ставший традиционным.
P.P.S. В тему конкурсов от крупных компаний а-ля Сбер - после того, как я узнал призы за победу, я перестал расстраиваться, что не поучаствовал. С моей точки зрения, подписка/брендированный мерч/рюкзак/итд не совсем то, что хотят люди, пришедшие в такое место.

Dixi.
Традиционная аниме-девочка идет отдельно по причине слишком большая стена текста :D
В октябре, традиционно, проходит Hacktober fest. В этом году я решил поучаствовать как maintainer, поэтому для всех желающих на халяву получить один валидный PR - репа. Очевидно, что первый правильный фикс будет принят :)
Всем удачи
По техническим причинам почему-то не прицепилась аниме-девочка. Исправляю
Тем временем, у меня переезд. Добро пожаловать в новый блог
Интересный факт в воскресенье с утра. Не тянет на статью в блоге, поэтому будет сюда.

Итак, возьмём оператор goto. Это достаточно специфичная вещь, но, тем не менее, применяемая и используемая. То есть если быть осторожным - все будет ок, хотя для неопытного программиста код будет намного более сложночитаем (более того, goto весьма успешно используется в том же ядре Linux).
А теперь добавим треша, угара и содомии. Сделаем goto недетерминированным - то есть, он может менять точки прыжков прямо во время выполнения. Звучит сюрреалистично? Тем не менее, это реальность. В COBOL существует оператор ALTER, который позволяет менять точки прыжков goto.
То есть, к примеру, код, который выглядит вот так

IF WS-X = 2 THEN
ALTER SELECT-PATH TO PROCEED TO PATH-2.
ELSE IF WS-X = 3 THEN
ALTER SELECT-PATH TO PROCEED TO PATH-3.
END-IF.
GO TO SELECT-PATH.
SELECT-PATH.
GO TO PATH-1.

Может прыгнуть в три разных места. В зависимости от значения переменой. После такого js и python уже не кажутся нелогичными и сложными языками. И как же хорошо, что писать на коболе мне пришлось всего лишь один раз в жизни
Как и обещал, чуть больше постов про неформат. Будет немного о жизни. Начну за здравие, а закончу как обычно

1. Я наконец-то смог разобраться в том, что мне дали на работе. Штука мощная, башка распухла, но я смог. Заняло это, без малого, 4 месяца. Печально, надеялся, что я что-то понимаю в системной проге, но, как оказалось, нет. Но зато теперь шарю намного лучше. Но что разобрался - афигенно и вообще супер. Жить станет проще, это точно
(тут момент, когда за здравие заканичвается)
2. КОГДА ЖИТЬ??? Времени вообще нет
3. На свои проекты времени почти не осталось, что-то пилю, но очень-очень медленно. Но, мб, все-таки смогу к концу 2021 хоть что-то довести до релизной версии. Статьи в еще более печальном состоянии, их надо все приводить в порядок и, по-хорошему, переводить, но это такой здоровенный пласт работы, что вообще хз, когда этим заняться
4. Компьютерные игры - зло. Но зло вынужденное, потому что мозги рагружают супер. Главное, не перестараться
*шутка про обновление арха*

После очередного обновления и очередной ручной пересборки дебаг-версии libc задумался, что пора бы это автоматизировать. Ну и заодно описать процесс, может, кому-то пригодится
🤩1
Вчера забыл прикрепить аниме-девочку. Чёт совсем забегался :D

Исправляю
🥰1
Спустя энное время я все-таки открываю репу с тем, чем занимался весь сентябрь и кусок октября. Меня попросили разработать целиком CTF'ку, я сделяль. Можно было лучше, для опытных людей тут интересных тасков почти нет (а один вообще позаимствован), но тем не менее
🥰1
Чет зашел на русский стек, увидел вопрос, который является достаточно популярным у новичков и даже у некоторых опытных программистов. Решил быстренько ответить. Быстренько не получилось, получилась почти статья. Так что решил заодно выложить тут, мб кому-то будет полезно общее понимание того, как работают библиотеки и компиляция. Конечно, допущены некоторые упрощения, но в общем суть ясна
👍2
Неделю назад прошел Moscow CTF School, я обещал нескольким участникам опубликовать райтапы на два таска, которые там были:
1. Crash me. Простая задача на UB в C/C++. Программа ждет на вход два знаковых числа типа int, после чего проверяет, что делитель не 0 и выдает результат вычисления. Достаточно идеоматичная вещь - если в этих языках поделить INT_MIN на -1, то результат не влезет в знаковый int и программа упадет с SIGFPE, что и было целью задачи.
2. Zip random. Тоже достаточно тривиальная задача - дан zip-архив с программой, которая ксорит входные данные с "рандомными числами" и каким-то проксоренным текстом, который, скорее всего, является флагом. . Если внимательно изучить программу, то можно увидеть, что используется ГПСЧ из cstdlib с начальным значением time(NULL). Можно заметить, что архив формируется не в момент скачивания, а был сформирован давно. Следующее логичное предположение - архив дан, чтобы получить примерное время xor. Тогда, написав простенький декодер, можно получить флаг. Код декодера я прикладываю
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

int main()
{
std::string input_file;
std::string output_file;
time_t start_time;

std::cout << "Please enter encrypted file name: ";
std::cin >> input_file;
std::cout << "Please enter output file name: ";
std::cin >> output_file;
std::cout << "Please enter start time offset: ";
std::cin >> start_time;

std::fstream in(input_file, std::fstream::in);
std::fstream out(output_file, std::fstream::out);
if (!in || !out) {
std::cerr << "Error open files!" << std::endl;
}

std::string flag;
in >> flag;
std::string wtf;

for (auto i = 0; i < 50000; i++) {
srand(start_time - i);

out << "Attempt #" << i + 1 << ": ";
for (int j = 0; j < flag.size(); j++) {
char ch = flag[j] ^ rand() % 255;
if (!isprint(ch)) {
break;
}

wtf.push_back(ch);
}

wtf.push_back('\n');
out << wtf;
wtf.clear();
}
}
👏1
УПД. 2д-девочка опять отказалась прицепляться, так что цепляю отдельно
😱1