Pull to refresh
32
0
Павел Русанов @prusanov

RE

Send message

SSL Unpinning для приложений Android

Reading time7 min
Views15K

Добрый день, меня зовут Дегтярёв Константин, я senior security engineer в Huawei RRI. В этой статье я хотел бы поделиться методами встраивания в трафик мобильных приложений Android.

Во время оценки безопасности мобильных приложений довольно часто возникает необходимость выполнения перехвата веб-запросов. Большинство современных мобильных приложений используют такие компоненты как WebView (webkit), HttpURLConnection, OkHttp, Cronet и другие для связи с бэкенд-сервером. Например, WebView полезен, когда вам нужен расширенный контроль над пользовательским интерфейсом и расширенные параметры настройки, которые позволят вам встраивать веб-страницы в специально разработанную среду для вашего приложения. Эти компоненты используют протоколы HTTP или HTTPS. Если с HTTP все понятно, HTTPS шифруется, поэтому для расшифровки HTTPS-трафика необходима MITM-атака. Для успеха MITM-атаки приложение должно доверять сертификату прокси-сервера MITM. Если сравнивать с аудитом безопасности веб-сайтов, где сертификат MITM прокси-сервера установлен в веб-браузер и все работает гладко, то с мобильным приложением ситуация может быть совершенно иной, потому что большинство современных мобильных приложений не доверяют сертификатам пользователей и даже сертификатам системного уровня Android или IOS.

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments6

Что я не знал про образование

Reading time14 min
Views105K


Я тут полез изучать опыт школьных учителей в педагогике, — и совершенно внезапно обнаружил кучу важных для управления проектами принципов. В смысле, что я опять хочу познакомить вас со странным человеком и рассказать про его опыт. Итак, знакомьтесь, обычная учительница в астраханской гимназии, Ольга Анисимова, которая порвала мне все шаблоны того, что происходит в обычной школе.

Она не учит детей методам решения задачи, она учит их сначала найти саму задачу, потом прикинуть спектр вариантов подхода, а уже потом — как конкретно получить ответ.

Она относится к детям как ко взрослым во многих аспектах.

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

Она разрешает готовить шпаргалки и списывать. Разрешает детям «выпихивать» на ответ того, кто выучил тему. Использует понятную детям игрофикацию для мотивации.

В общем, всё настолько пропитано здравым смыслом, что просто не может и не должно происходить в школе. В чёртовой школе!
Читать дальше →
Total votes 214: ↑211 and ↓3+208
Comments482

Создаем процессорный модуль под Ghidra на примере байткода v8

Reading time24 min
Views3.2K

В прошлом году наша команда столкнулась с необходимостью анализа байткода V8. Тогда еще не существовало готовых инструментов, позволявших восстановить такой код и обеспечить удобную навигацию по нему. Было принято решение попробовать написать процессорный модуль под фреймворк Ghidra. Благодаря особенностям используемого языка описания инструкций на выходе мы получили не только читаемый набор инструкций, но и C-подобный декомпилятор. Эта статья — продолжение серии материалов (1, 2) о нашем плагине для Ghidra.

Между написанием процессорного модуля и статьи прошло несколько месяцев. За это время спецификация SLEIGH не изменилась, и описанный модуль работает на версиях 9.1.2–9.2.2, которые были выпущены за последние полгода.

Сейчас на ghidra.re и в приложенной к Ghidra документации есть достаточно хорошее описание возможностей языка — эти материалы стоит почитать перед написанием своих модулей. Отличными примерами могут быть уже готовые процессорные модули разработчиков фреймворка, особенно если вы знаете описываемую в них архитектуру.

В документации можно прочесть, что процессорные модули для Ghidra пишутся на языке SLEIGH, который произошел от языка SLED (Specification Language for Encoding and Decoding) и разрабатывался целенаправленно под Ghidra. Он транслирует машинный код в p-code (промежуточный язык, используемый Ghidra для построения декомпилированного кода). Как у языка, предназначенного для описания инструкций процессора, у него достаточно много ограничений, которые, однако, можно купировать за счет механизма внедрения p-code в java-коде.

Исходный код созданного процессорного модуля представлен на github. В этой статье будут рассматриваться принципы и ключевые понятия, которые использовались при разработке процессорного модуля на чистом SLEIGH на примере некоторых инструкций. Работа с пулом констант, инъекции p-code, анализатор и загрузчик будут или были рассмотрены в других статьях. Также про анализаторы и загрузчики можно почитать в книге The Ghidra Book: The Definitive Guide.

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments0

Шпаргалка полезных команд GDB

Reading time3 min
Views43K

Для кого она нужна?


1) начинающих реверсеров, знающих особенности обратного проектирования, и желающих изучить такой отладчик как GDB


2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать

Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments11

Сокеты в ОС Linux

Reading time5 min
Views83K

В данной статье будет рассмотрено понятие сокета в операционной системе Linux: основные структуры данных, как они работают и можно ли управлять состоянием сокета с помощью приложения. В качестве практики будут рассмотрены инструменты netcat и socat.

Читать далее
Total votes 35: ↑32 and ↓3+29
Comments15

IDA Pro: каким не должен быть SDK

Reading time5 min
Views13K

Приветствую,



Эта статья будет о том, как не нужно делать, когда разрабатываешь SDK для своего продукта. А примером, можно даже сказать, самым ярким, будет IDA Pro. Те, кто хоть раз что-то разрабатывал под неё и старался поддерживать, при чтении этих строк, наверняка, сейчас вздрогнули и покрылись холодным потом. Здесь я собрал опыт сопровождения проектов, начиная с IDA v6.5, и заканчивая последней на момент написания статьи версии — v7.5. В общем, погнали.

Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments11

Эксплуатируем уязвимость Foxit Reader и обходим цифровую подпись на примере задания NeoQUEST-2020

Reading time4 min
Views4.1K
Сегодня мы расскажем о самом сложном задании NeoQUEST- 2019 2020. Да-да, то самое, с цифровыми подписями и эксплуатацией уязвимости Foxit Reader. Да-да, все верно, существуют две версии этого задания, и в этой статье мы наконец как следует его разберем. Добро пожаловать под кат :)
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments2

Посоветуйте, что почитать. Часть 2

Reading time4 min
Views7.5K

кпв


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

Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments1

IDA Pro: 11 советов, которые вы (может быть) не знали

Reading time5 min
Views11K

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

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments4

Пишем простой драйвер под Windows для блокировки USB-устройств

Reading time11 min
Views25K
Вряд ли пользователь домашнего ПК заинтересуется тем, чтобы блокировать устройства на своем ПК. Но если дело касается корпоративной среды, то все становится иначе. Есть пользователи, которым можно доверять абсолютно во всем, есть такие, которым можно что-то делегировать, и есть те, кому доверять совсем нельзя. Например, вы заблокировали доступ к Интернету одному из пользователей, но не заблокировали устройства этого ПК. В таком случае пользователю достаточно просто принести USB-модем, и Интернет у него будет. Т.е. простым блокированием доступа к Интернету дело не ограничивается.

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

В этой статье я расскажу немного теоретическую часть, на основе которой все строится, и расскажу принцип самого решения.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments88

Программирование с PyUSB 1.0

Reading time15 min
Views50K
От переводчика:
Это перевод руководства Programming with PyUSB 1.0
Данное руководство написано силами разработчиков PyUSB, однако быстро пробежавшись по коммитам я полагаю, что основной автор руководства — walac.


Позвольте мне представиться


PyUSB 1.0 — это библиотека Python обеспечивающая легкий доступ к USB. PyUSB предоставляет различные функции:

  • На 100% написана на Python:
    В отличии от версий 0.x, которые были написаны на C, версия 1.0 написанна на Python. Это позволяет программистам на Python без опыта работы на C лучше понять как работает PyUSB.
  • Нейтральность платформы:
    Версия 1.0 включает в себя фронтенд-бэкенд схему. Она изолирует API от специфичных с точки зрения системы деталей реализации. Соединяет эти два слоя интерфейс IBackend. PyUSB идет вместе со встроенными бэкендами для libusb 0.1, libusb 1.0 и OpenUSB. Вы можете сами написать свой бэкенд, если хотите.
  • Портативность:
    PyUSB должен запускаться на любой платформе с Python >= 2.4, ctypes и, по крайней мере, одним из поддерживаемых встроенных бэкендов.
  • Простота:
    Взаимодействие с устройством USB никогда не было таким простым! USB — сложный протокол, а у PyUSB есть хорошие предустановки для наиболее распространенных конфигураций.
  • Поддержка изохронных передач:
    PyUSB поддерживает изохронные передачи, если лежащий в основе бэкенд поддерживает их.

Несмотря на то, что PyUSB делает программирование USB менее болезненным, в этом туториале предполагается, что у Вас есть минимальные знания USB протокола. Если Вы ничего не знаете о USB, я рекомендую Вам прекрасную книгу Яна Аксельсона «Совершенный USB» (Jan Axelson «USB Complete»).
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments5

Создаем ELF-файл с отладочной информацией (DWARF) вручную (для микроконтроллеров ARM)

Reading time27 min
Views30K

Введение


С недавнего времени я увлекся микроконтроллерами. Сначала AVR, затем ARM. Для программирования микроконтроллеров существует два основных варианта: ассемблер и С. Однако, я фанат языка программирования Форт и занялся портированием его на эти микроконтроллеры. Конечно, существуют и готовые решения, но ни в одном из них не было того, что я хотел: отладки с помощью gdb. И я задался целью заполнить этот пробел (пока только для ARM). В моем распоряжении была плата stm32vldiscovery с 32-битным процессором ARM Cortex-M3, 128кБ flash и 8 кБ RAM, поэтому я и начал с нее.
Писал я кросс-транслятор Форта конечно на Форте, и кода в статье не будет, так как этот язык считается экзотическим. Ограничусь достаточно подробными рекомендациями. Документации и примеров в сети по предмету почти нет, некоторые параметры подбирались мной путем проб и ошибок, некоторые — путем анализа выходных файлов компилятора gcc. Кроме того, я использовал только необходимый минимум отладочной информации, не касаясь, например, relocation-ов и множества других вещей. Тема очень обширна и, признаюсь, разобрался я с ней только процентов на 30, что оказалось для меня достаточным.
Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments3

IDA Pro и техники реверс-инжиниринга

Reading time27 min
Views88K

0x00 start


; {EN} entry point, do nothing, just run _main {EN}


Статья для начинающих “воинов тьмы”, тех, кто хочет погрузиться в темную сторону силы: реверс-инжиниринг. На нашем “операционном столе” будет небольшой кустарный сервер, который работает по протоколу TCP/IP. Для анализа протокола обмена данными нам поможет стандарт де-факто в области реверса — IDA Pro.


Статей по реверс-инжинирингу и по IDA Pro уже написано немало (хотя и не столько, как по PHP), но поскольку процесс реверса — исследовательский, то мысли, как с "другого боку" подойти к задаче обратной разработки, полезны новичкам. По крайней мере, как автор, я руководствовался тем, чтобы изложить основные практики и техники, о которых говорю в первые дни всем стажерам и на первых парах курса по реверс-инжинирингу в университете.


Чего не будет в статье?

Поиска уязвимостей и разработки эксплоитов для Google Chrome или Apple iPhone… Поэтому если вы исследователь со стажем и с большим количеством CVE на счету, маловероятно, что вы найдете для себя что-то новое.



"Once you start down the dark path, forever will it dominate your destiny".

Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments32

Настройка UEFI-загрузчика. Самое краткое руководство в мире

Reading time6 min
Views548K

Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?


Я обещал "самое краткое руководство". Вот оно:


  1. Создаём на диске таблицу разделов GPT
  2. Создаём FAT32-раздел на пару сотен мегабайт
  3. Скачиваем из интернета любой UEFI-загрузчик
    (нам нужен сам загрузчик, это один бинарный файл!)
  4. Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
  5. Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
    (настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете)
  6. После перезагрузки видим меню загрузчика
    (Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5.)

TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному "пути по-умолчанию", где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается

Читать дальше →
Total votes 52: ↑46 and ↓6+40
Comments99

CVE-2019-18683: Эксплуатация уязвимости в подсистеме V4L2 ядра Linux

Reading time22 min
Views7.7K

В данной статье описана эксплуатация уязвимости CVE-2019-18683 в ядре Linux, которую я обнаружил и исправил в конце 2019 года. Указанный CVE-идентификатор присвоен нескольким аналогичным ошибкам типа «состояние гонки», которые присутствовали в подсистеме V4L2 ядра Linux на протяжении пяти лет. Пятнадцатого февраля я выступил с докладом по данной теме на конференции OffensiveCon 2020 (ссылка на презентацию).


Далее я детально объясню, как работает разработанный мной прототип эксплойта (PoC exploit) для микроархитектуры x86_64. Данный эксплойт выполняет локальное повышение привилегий из контекста ядерного потока, где отсутствует отображение пользовательского адресного пространства. В статье также показано, как эксплойт для Ubuntu Server 18.04 обходит следующие средства защиты: KASLR, SMEP и SMAP.


Начнем с демонстрации работы эксплойта.


Total votes 24: ↑24 and ↓0+24
Comments6

Bonsai: фамильный вики-движок

Reading time13 min
Views21K

Лирическое вступление


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

Многие фотографии были сделаны более семидесяти лет назад. На одной был дедушка — в студенческие годы, еще молодой и статный, в абсолютно ломовейших очках. «Надо же, мой дед носил хипстерские шмотки еще до того, как это стало мейнстримом», подумал я, и невольно улыбнулся. Его я узнал сразу, но дальше пошли фотографии людей, о которых я ничего не помню. В чертах лица можно смутно угадать родство — и все.



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

Идеальным решением для хранения семейных данных мне представлялся гибрид вики-движка и фотоальбома. Готовых подходящих решений не оказалось, поэтому пришлось написать собственный. Он называется Bonsai и доступен с открытым кодом по лицензии MIT. Дальше будет история о том, как он устроен и как им пользоваться, а также история его разработки и немного ДРАМЫ.
Читать дальше →
Total votes 67: ↑67 and ↓0+67
Comments40

Фамильный вики-движок Bonsai: итоги 2019 года

Reading time5 min
Views7.5K
В начале прошлого года я рассказывал про проект Bonsai — движок для создания семейного вики и фотоальбома с открытым исходным кодом. С тех пор проект планомерно развивался. За год сделано несколько фич, благодаря которым движок теперь значительно проще попробовать в у себя и приятнее использовать в дальнейшем.



Под катом — подробности, планы на будущее и немного bounty.
Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments31

Генеалогические исследования — метрические книги, переписи, архивы, открытые базы

Reading time13 min
Views144K
Не один год я увлекаюсь генеалогией. Практической пользы в этом хобби нет, но интересного очень много. Здесь я хотел поделиться накопленным опытом, частью интересных сведений, не сильно погружаясь в персональные истории. Чтобы текст сильно не распухал, расскажу всего 2 кейса: поиск в военных архивах на основе данных онлайн-баз и продолжительный просмотр и анализ метрических книг одного села периода конца XIX — начала XX вв. вплоть до конца революции и гражданской войны.

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

Осознаю, что некоторым тема публикации может показаться далекой от IT, но в процессе у меня было и программирование, VBA-скриптинг, SQL, и впереди, надеюсь, ML\DS\AI.


Страница метрической книги, рождения в 1898 г. Еще в книгах записывались браки и смерти — до появления ЗАГСов в начале 1920х
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments119

Хабр Конвертер: чтобы версталось легко

Reading time3 min
Views14K
Наверняка многие из вас хотя бы однажды пользовались хабраконвертером, который официально рекомендован администрацией Хабра — https://shirixae.github.io/habraconverter-v2/. Несколько лет назад его создал хабравчанин meta4, а потом доработал Shirixae. Принцип простой: открываете гуглодок с постом, Ctrl-A, Ctrl-C и вставляете в окно конвертера. Нажимаете кнопку «Конвертировать» и получаете готовый код вёрстки, который можно вставлять в редактор Хабра и публиковать. Только перед этим нужно пройтись и поправить кое-какие мелочи.

И всё бы хорошо, если верстать приходится не слишком часто. Или посты небольшие, несложные. Но если вы верстаете помногу, и в постах есть и картинки, и таблицы, и куски кода, то из раза в раз приходится делать рутину: вставлять нужные пустые строки и убирать лишние, заменять теги <sоurce> на <cоde>, и т.д. и т.п. Мы решили потратить день, чтобы потом долетать за час, и допилили конвертер.

Новая версия лежит тут, а под катом — перечисление доработок.
Читать дальше →
Total votes 113: ↑112 and ↓1+111
Comments31

6 способов спрятать данные в Android-приложении

Reading time7 min
Views28K

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


image


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

Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments15

Information

Rating
Does not participate
Date of birth
Registered
Activity