Rva что это
Перейти к содержимому

Rva что это

RvA (Голландия, член IAF)

RvA (Голландия, член IAF)

Голландский совет по аккредитации RvA – независимый орган по аккредитации, член Международного Аккредитационного Форума (IAF), подписавший IAF MLA (многостороннее соглашение о взаимном признании результатов работ по аккредитации).

С 2004 года Ассоциация по сертификации «Русский Регистр» аккредитована для проведения работ по сертификации систем менеджмента качества, систем экологического менеджмента, систем менеджмента в области профессиональной безопасности и охраны труда, систем менеджмента безопасности пищевых продуктов в этом авторитетном и одном из старейших органов по аккредитации – RvA (свидетельство № С432 и область аккредитации). Данное обстоятельство юридически обеспечивает сертификатам Русского Регистра полное признание всеми странами-членами IAF.

Подпишитесь на бесплатную еженедельную рассылку и получайте самые свежие новости в области сертификации. В любой момент вы сможете отписаться от рассылки.

© «Русский Регистр — Балтийская инспекция»
+7 (812) 332-95-36, +7 (812) 332-95-37
Санкт-Петербург, наб. реки Карповки, 25

RWA — Активы, взвешенные по риску

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

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

Сущность активов, взвешенных по риску

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

Более рискованные активы, такие как необеспеченные кредиты, имеют более высокий риск дефолта и, следовательно, имеют более высокий вес риска, чем такие активы, как денежные средства и казначейские обязательства. Чем выше величина риска, которым обладает актив, тем выше коэффициент достаточности капитала (CARCapital Adequacy Ratio) и требования к капиталу. С другой стороны, казначейские векселя обеспечены способностью национального правительства генерировать доходы и предъявляют гораздо более низкие требования к капиталу, чем необеспеченные кредиты.

В Базельском соглашении, опубликованном Базельским комитетом по банковскому надзору, Комитет объясняет, почему использование метода взвешивания по риску является предпочтительной методологией, которую банки должны принять для расчета капитала:

  • он обеспечивает более простой подход для сравнения банков в разных географических регионах;
  • забалансовые риски (гарантии, авали, аккредитивы и т.п.) могут быть легко включены в расчет достаточности капитала;
  • стимулирует банки не избавляться от не рискованных высоколиквидных активов.

Обычно разные классы активов имеют разные веса риска, связанные с ними. Расчет весов риска зависит от того, принял ли банк стандартизированный подход или подход IRB в рамках Базель II.

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

Документ был издан в 1988 году Базельским комитетом по банковскому надзору, который рекомендует определенные стандарты и правила для банков. Изначально он назывался Базель I, но впоследствии Комитет издал пересмотренную систему, известную как Базель II. Основная рекомендация этого документа заключается в том, что банки должны иметь достаточность капитала на уровне не менее 8% его активов, взвешенных с учетом риска. После кризиса 2007-2008 г. была опубликована версия Базель III, которая дополнила предыдущие версии.

Как оценить риск активов

При определении риска, связанного с конкретным активом, которым владеет банк, регулирующие органы учитывают несколько факторов. Например, когда оцениваемый актив является коммерческим займом, регулирующий орган будет определять последовательность погашения займа заемщиком и обеспечение, используемое в качестве обеспечения займа.

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

Требования к капиталу для активов, взвешенных с учетом риска

Требования к капиталу относятся к минимальному капиталу, который банки должны держать в зависимости от уровня риска имеющихся активов. Минимальные требования к капиталу, установленные регулирующими органами, такими как Федеральная резервная система, Банк международных расчетов (BIS), Европейский центральный банк, Центральный банк страны предназначены для обеспечения достаточного размера капитала банков, пропорционального уровню риска их активов. Капитал действует как денежная подушка безопасности, если банк понесет операционные убытки в ходе осуществления своей деятельности.

Реверсинг малвари для начинающих. Вскрываем упаковщики, ломаем протекторы

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

Сага о протекторах и упаковщиках

Один из излюбленных приемов зловредописателей — использование упаковщиков (packers) и протекторов (protectors) исполняемых файлов (хотя это также относится и к DLL). Изначально эти инструменты считались весьма банальными и были призваны, по сути, уменьшать размер скомпилированного файла, а в случае протекторов — позволять модифицировать авторам свои программы, превращая их, к примеру, в demo- или trial-версию, и не заморачиваться с защитой в основном коде. Но позднее вирусописатели приспособили эти инструменты в корыстных целях.

Создатели вредоносов успешно стали применять их, чтобы усложнить антивирусный и эвристический анализ, защитить свои детища от запуска в виртуальной среде, отладки, дизассемблирования и последующего анализа. Поэтому с тех пор навыки и умения распаковывать исполняемые файлы вошли в обязательные требования как для начинающего, так и для опытного реверс-инженера. Наиболее популярные сегодня упаковщики — UPX, ASPack, FSG, PeShield, VMProtect. Это, так сказать, джентльменский набор, с которым аналитику приходится сталкиваться каждый день.

Протекторы, в отличие от упаковщиков, призваны защитить исходный файл от обратной разработки, соответственно, при этом они используют более изощренные методы, чем просто упаковщики: обфускацию, шифрование с использованием самописного либо популярного криптоалгоритма, такого, например, как RSA-1024, встраивание антиотладочных функций.

Как мы понимаем, чтобы добраться до нужного нам кода, который мы будем анализировать, сначала требуется распаковать файл, то есть снять все навесные защиты, восстановить оригинальную OEP и таблицу импорта, это как минимум. Частенько распаковка — это задача, укладывающаяся в стандартный набор действий, но иногда она становится творческой и выливается в целое хакерское исследование — с ящиками пива, блоками сигарет и сантиметрами сожженных нервных волокон :).

Ликбез по теории

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

Общий принцип рассматриваемых инструментов упаковки/защиты таков: после клика на EXE-файле и его запуска выполнение основного кода программы начинается с так называемой точки входа (Entry Point) — адреса, по которому передается управление после загрузки программы в оперативную память. Когда программа запакована, алгоритм работы несколько изменится. Упаковщик запоминает точку входа EP, потом, используя алгоритмы архивирования, сжимает содержимое файла (как правило, это секция кода и данных), после чего дописывает свою сигнатуру после либо до сжатого кода программы и перенаправляет ее не в основной код программы, а в код упаковщика (точнее сказать — распаковщика). Сам же код распаковщика, находящийся теперь внутри файла, получает управление первым и распаковывает упакованные секции кода/данных в памяти! На диске исходный файл остается нетронутым, то есть упакованным, неизменным. После того как код и данные программы распакованы, код распаковщика восстанавливает таблицу импорта и передает управление основному коду программы, на бывшую точку входа, которая в упакованных программах называется оригинальной точкой входа (Original Entry Point). Если кратко, то это все основные моменты.

Схема упаковки исполняемого файла

Схема упаковки исполняемого файла

Другие статьи в выпуске:

Xakep #217. Сценарий для взлома

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

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

Ручная и автоматическая распаковка

С большой долей вероятности все рабочие экземпляры малвари будут запакованы тем или иным упаковщиком/протектором. Но чтобы все-таки убедиться, что файл запакован, запускаем PEiD или любой другой PE-анализатор. В 90% случаев этого будет достаточно, PEiD имеет большую базу данных сигнатур и плагинов, что позволяет обойтись без лишних хлопот.

Дальнейшим шагом станет распаковка файла (восстановление) в его исходный (wild source) вид. И тут есть несколько сценариев действий. Первый — это использовать автораспаковщики, тулзы, специально заточенные под автоматическую распаковку файла, основываясь на уже известном алгоритме упаковщика/протектора. Например, UN-PACK — это анпакер для UPX, ACKiller — для программ, защищенных протектором ACProtect, Stripper — для файлов, запакованных ASProtect, ASPack unp — для накрытых упаковщиком ASPack.

Второй вариант — использовать универсальные распаковщики, например QuickUnpack, RL!dePacker или Dr.Web FLY-CODE Unpacker, основанный на движке FLY-CODE антивируса Dr.Web. Фича программ в том, что они сами автоматически анализируют файл и ищут в нем ОЕР, а после дампят программу (в том числе и импорт восстанавливают). Однако часты случаи, когда сдампленный файл оказывается неработоспособным из-за некорректности его обработки универсальным распаковщиком или из-за изменения алгоритма пакера, который несовместим с тем, что использует универсальный распаковщик. Но есть и плюс: иногда, если файл не удается распаковать до рабочего состояния, секция кода в любом случае получается распакованной, а этого вполне достаточно для анализа.

И третий сценарий, более длительный, но в перспективе более успешный, — ручная пошаговая распаковка с помощью OllyDbg. Если файл запакован чем-то неизвестным, это легко определить по наличию в таблице импорта защищаемого приложения WinAPI-функций из библиотеки kernel, таких как GetProcAddressA, LoadLibraryA или GetModuleHandle.

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

А вот аналогичная страница, но только на этот раз про распаковщики (на всякий случай зеркало тут).

Авторы вредоносного ПО широко используют упаковщики и протекторы для усложнения его детектирования и для противодействия анализу. Большинство из них анализируются стандартным арсеналом инструментов реверс-аналитика, но некоторые требуют нестандартного подхода и глубокого знания PE-архитектуры.

Учимся скрывать присутствие отладчика и обходить методы противодействия

В одной из статей нашего журнала были описаны наиболее интересные плагины для OllyDbg. Нам обязательно понадобятся:

  • OllyExt — содержит опции Anti-AntiDebug;
  • OllyDumpEx — отличный дампер процессов;
  • swordfish — быстрая установка точек останова;
  • uberstealth — фича Anti-AntiDebug, основанная на коде IDA Stealth.

Все самые нужные плагины OllyDbg 2.xx Plugins можно забрать с файлового архива Tuts4you тут и тут. Набор плагинов для IDA Pro с подробным описанием доступен на GitHub или на Tuts4you. Тем же, кто готов написать свой плагин, могу рекомендовать интересную статью.

Шифрование кода

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

Наиболее популярен плагин Krypto ANALyzer для PEiD. Найденные значения можно просто посмотреть или экспортировать в скрипт для дизассемблера IDA Pro.

Краткое руководство по анализу

Типовой набор действий банален: определение сигнатуры упаковщика, поиск OEP, дамп программы на диск, восстановление таблицы импорта, восстановление релоков, пересборка. А если же файл не просто был запакован, а еще и обработан протектором, то могут потребоваться дополнительные действия, такие, например, как удаление мусорных инструкций, обход антиотладочных приемов, изоляции функций проверки целостности кода CRC.

Несколько слов о динамических библиотеках. Распаковка DLL практически не отличается от распаковки EXE-файла. У DLL, как и у EXE, есть точка входа в код программы — Entry Point, созданная пакером, и оригинальная OEP. Таким образом, нужно остановиться на DLL в Entry Point, распарсить и оттуда идти к единственно верной OEP нашей DLL. Дальше можно стандартно дампить. И еще пара коротких абзацев из матчасти, которая сегодня нам пригодится.

Несколько слов о breakpoints (точках останова)

Точки останова — часто используемый и незаменимый прием любого реверс-аналитика. Основные режимы — это:

  • останов при чтении;
  • останов при записи;
  • выполнение памяти по заданному адресу.

Команда CALL $+5 POP REG характерна для защитных механизмов, к примеру копирующих себя на стек. А часто возникающая инструкция PUSHFD присутствует в самотрассирующихся программах и антиотладочных защитных механизмах.

VA (виртуальный адрес) & RVA (относительный виртуальный адрес)

RVA (относительный виртуальный адрес). В файле изображения, адрес элемента после его загрузки в память, с базовый адрес файла изображения вычитается из него. RVA элемента почти всегда отличается от своего положение внутри файла на диске (file указатель.)

в объектном файле RVA меньше значимый, потому что места памяти не назначаются. В этом случае RVA будет адрес в разделе (описано ниже в этой таблице), какое перемещение применяется позже во время соединения. Для простоты компилятор должен просто установить первый RVA в каждой секции до нуля.

VA (виртуальный адрес). То же, что и RVA, за исключением того, что базовый адрес файл изображения не вычитается. Этот адрес называется «VA», потому что Windows создает отдельное пространство VA для каждого процесса, независимо от физическая память. Почти все цели, VA должны быть рассмотрены только адрес. ВА не так предсказуемый как RVA, потому что загрузчик может не загружать изображение на свой предпочтительный местоположение.

даже после прочтения этого я все еще не понимаю. У меня много вопросов. Может ли кто-нибудь объяснить это на практике? Пожалуйста, придерживайтесь терминологии Object File & Image File как указано.

все, что я знаю об адресах, это

  • ни в объектном файле, ни в файле изображения мы не знаем точных местоположений памяти, поэтому,
  • ассемблер при генерации объектного файла вычисляет адреса относительно разделов .data & .text (имена функций).
  • Компоновщик принимает несколько объектных файлов в качестве входных данных генерирует один файл изображения. При создании он сначала объединяет все разделы каждого объектного файла, а при слиянии повторно вычисляет смещения адресов относительно каждого раздела. И нет ничего лучше глобальных смещений.

если есть что-то неправильное в том, что я знаю, пожалуйста, поправьте меня.

EDIT:

после прочтения ответ, данный Фрэнсисом, мне ясно, что такое физический адрес, VA & RVA и каковы отношения между ними.

RVAs всех переменных и методов должны быть вычислены компоновщиком во время перемещения. Итак,(значение RVA метода/переменной) = = (его смещение от начала файла)? должно быть, это правда. Но удивительно, что это не так. Почему?

я проверил это с помощью PEView on c:WINDOWSsystem32kernel32.dll и нашли что:

  1. RVA & FileOffset одинаковы до начала разделов.( .text является первым разделом в этой dll).
  2. С начала .text через .data , .rsrc до последнего байта последнего раздела ( .reloc ) RVA и FileOffset отличаются. & также RVA первого байта первого раздела» всегда » отображается как 0x1000
  3. интересно то, что байты каждого раздела непрерывны в FileOffset. Я имею в виду другой раздел начинается со следующего байта последнего байта раздела. Но если я вижу то же самое в RVA, это огромный разрыв между RVA последнего байта раздела и первого байта следующего раздела.

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

так как они не загружаются в VA пространство процесса. использование термин RVA также бессмыслен, это причина, почему RVA == FileOffset на эти байты.

  • термин RVA действителен только для тех байтов, которые будут фактически загружены в пространство VA.
  • байт .text , .data , .rsrc , .reloc такие байты.
  • вместо того, чтобы начинать с RVA 0x00000 PEView программное обеспечение запускается это от 0x1000 .

я не могу понять, почему 3-й замечание. Я не могу объяснить.

2 ответов

большинство процессов Windows (*.exe) загружаются в (пользовательский режим) адрес памяти 0x00400000, вот что мы называем «виртуальным адресом» (VA) — потому что они видны только каждому процессу и будут преобразованы в разные физические адреса ОС (видимые на уровне ядра / драйвера).

например, возможный адрес физической памяти (видимый процессором):

и ОС может иметь таблицу сопоставления:

затем, когда вы пытаетесь читать 0x004000000 в процессе A вы получите содержимое, которое находится на 0x00300000 физической памяти.

что касается RVA, он просто предназначен для облегчения перемещения. При загрузке relocable модулями (например, библиотеки DLL) система будет пытаться скользить через пространство памяти процесса. Поэтому в макете файла он помещает «относительный» адрес, чтобы помочь вычислению.

например, DLL C может иметь этот адрес:

при загрузке в процесс A по базовому адресу 0x10000000, C главная запись стать

при загрузке в процесс B по базовому адресу 0x32000000 основная запись C становится

обычно RVA в файлах изображений относительно базового адреса процесса при загрузке в память, но некоторые RVA могут быть относительно начального адреса «раздела» В файлах изображений или объектов (вы должны проверить спецификацию формата PE для деталей). Независимо от того, что, RVA относительно «некоторого» базового VA.

  1. физический адрес памяти-это то, что видит CPU
  2. Virtual Addreess (VA) относительно физического адреса, на процесс (управляемый ОС)
  3. RVA относительно VA (базы файлов или базы разделов), на файл (управляется компоновщиком и загрузчиком)

(edit) относительно нового вопроса когтя:

значение RVA метода / переменной не всегда является его смещением от начала файла. Они обычно относительно некоторые VA, которые могут быть базовым адресом загрузки по умолчанию или базовым разделом va — вот почему я говорю, что вы должны проверить спецификация формата PE для детали.

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

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

обычно мы не будем обсуждать » RVA» перед разделами, но заголовок PE все равно будет загружен до конца заголовков разделов. Зазор между заголовком раздела и телом раздела (если таковой имеется) не будет загружен. Вы можете проверить это отладчиками. Более того, когда между секциями есть зазор, они могут быть не загружены.

как я уже сказал, RVA просто «относительно некоторого VA», независимо от того, что это VA (хотя, когда речь идет о PE, VA обычно относится к базовому адресу нагрузки). Когда вы читаете спецификацию формата PE, вы может найти некоторый «RVA», который относится к некоторому специальному адресу, такому как начальный адрес ресурса. Список PEView RVA от 0x1000 заключается в том, что этот раздел начинается с 0x1000. Почему 0x1000? Поскольку компоновщик оставил 0x1000 байт для заголовка PE, поэтому RVA начинается с 0x1000.

то, что вы пропустили, — это концепция «раздела» на этапе загрузки PE. PE может содержать несколько «секций», каждая секция сопоставляется с новым начальным адресом VA. Например, это сбрасывается из win7 на kernel32.dll:

существует невидимый «0 заголовок RVA=0000, размер=1000», который принудительно .текст для начала на RVA 1000. Разделы должны быть непрерывными при загрузке в память (т. е. VA), поэтому их RVA является непрерывным. Однако, поскольку память выделяется страницами, она будет кратна размеру страницы (4096=0x1000 байт). Вот почему раздел #2 начинается с 1000 + C5000 = C6000 (C5000 происходит от C44C1).

для того чтобы обеспечить отображение памяти, эти разделы все еще должны быть выровнено по некоторому размеру (размер выравнивания файла-решается компоновщиком. В моем примере выше это 0x200=512 байт), который управляет полем PhysSize. Смещение означает «смещение к физическому началу файла PE».

таким образом, заголовки занимают 0x800 байт файла (и 0x1000 при сопоставлении с памятью), что является смещением раздела #1. Затем, выравнивая его данные (байты c44c1), мы получаем physsize C4600. C4600+800 = C4E00, что является точно смещением второго раздела.

OK, это связано с весь материал загрузки PE поэтому может быть немного трудно понять.

(edit) позвольте мне снова сделать новое простое резюме.

  1. файлы» RVA «в DLL/EXE (формат PE) обычно относятся к» базовому адресу загрузки в памяти » (но не всегда — вы должны прочитать спецификацию)
  2. формат PE содержит структуру отображения «Раздел» для отображения содержимого физического файла в память. Таким образом, RVA не относится к файлу сдвиг.
  3. чтобы вычислить RVA некоторого байта, вы должны найти его смещение в разделе и добавить базу раздела.

относительный виртуальный адрес-это смещение от адреса, по которому загружается файл. Вероятно, самый простой способ получить идеи на примере. Предположим, у вас есть файл (например, DLL), который загружен по адресу 1000h. В этом файле у вас есть переменная в RVA 200h. В этом случае VA этой переменной (после того, как DLL сопоставлена с памятью) составляет 1200h (т. е. базовый адрес 1000H DLL плюс 200h RVA (смещение) к переменной.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *